Spaces:
Runtime error
Runtime error
import { tokenize } from '../tokenizer/index.js'; | |
import { createParser } from '../parser/create.js'; | |
import { createGenerator } from '../generator/create.js'; | |
import { createConvertor } from '../convertor/create.js'; | |
import { createWalker } from '../walker/create.js'; | |
import { Lexer } from '../lexer/Lexer.js'; | |
import mix from './config/mix.js'; | |
function createSyntax(config) { | |
const parse = createParser(config); | |
const walk = createWalker(config); | |
const generate = createGenerator(config); | |
const { fromPlainObject, toPlainObject } = createConvertor(walk); | |
const syntax = { | |
lexer: null, | |
createLexer: config => new Lexer(config, syntax, syntax.lexer.structure), | |
tokenize, | |
parse, | |
generate, | |
walk, | |
find: walk.find, | |
findLast: walk.findLast, | |
findAll: walk.findAll, | |
fromPlainObject, | |
toPlainObject, | |
fork(extension) { | |
const base = mix({}, config); // copy of config | |
return createSyntax( | |
typeof extension === 'function' | |
? extension(base, Object.assign) | |
: mix(base, extension) | |
); | |
} | |
}; | |
syntax.lexer = new Lexer({ | |
generic: true, | |
units: config.units, | |
types: config.types, | |
atrules: config.atrules, | |
properties: config.properties, | |
node: config.node | |
}, syntax); | |
return syntax; | |
}; | |
export default config => createSyntax(mix({}, config)); | |