Одна из важнейших фич SS7 будет открытость API парсера, т.е. сам пользователь сможет расширять язык своими директивами и поэтому я потратил кучу времени на рефакторинг существующего API и в итоге получился на мой взгляд очень простой, но в тоже время мощный интерфейс, вот например директивы switch-case-default на новом API:
import { Snakeskin } from '../core';
Snakeskin.addDirective(
'switch',
{
block: true,
notEmpty: true,
inside: Snakeskin.group('case')
},
function (command) {
this.append($=> `switch (${this.out(command, {sys: true})}) {`);
},
function () {
this.append('}');
}
);
Snakeskin.addDirective(
'case',
{
block: true,
notEmpty: true,
group: 'case',
replacers: {
'>': 'case ',
'/>': 'end case'
}
},
function (command) {
this.append($=> `case ${this.out(command, {sys: true})}: {`);
},
function () {
this.append('} break;');
}
);
Snakeskin.addDirective(
'default',
{
block: true,
group: 'case'
},
function () {
this.append('default: {');
},
function () {
this.append('}');
}
);
Как вам?