create.cjs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. 'use strict';
  2. const index = require('../tokenizer/index.cjs');
  3. const create = require('../parser/create.cjs');
  4. const create$2 = require('../generator/create.cjs');
  5. const create$3 = require('../convertor/create.cjs');
  6. const create$1 = require('../walker/create.cjs');
  7. const Lexer = require('../lexer/Lexer.cjs');
  8. const mix = require('./config/mix.cjs');
  9. function createSyntax(config) {
  10. const parse = create.createParser(config);
  11. const walk = create$1.createWalker(config);
  12. const generate = create$2.createGenerator(config);
  13. const { fromPlainObject, toPlainObject } = create$3.createConvertor(walk);
  14. const syntax = {
  15. lexer: null,
  16. createLexer: config => new Lexer.Lexer(config, syntax, syntax.lexer.structure),
  17. tokenize: index.tokenize,
  18. parse,
  19. generate,
  20. walk,
  21. find: walk.find,
  22. findLast: walk.findLast,
  23. findAll: walk.findAll,
  24. fromPlainObject,
  25. toPlainObject,
  26. fork(extension) {
  27. const base = mix({}, config); // copy of config
  28. return createSyntax(
  29. typeof extension === 'function'
  30. ? extension(base) // TODO: remove Object.assign as second parameter
  31. : mix(base, extension)
  32. );
  33. }
  34. };
  35. syntax.lexer = new Lexer.Lexer({
  36. generic: config.generic,
  37. cssWideKeywords: config.cssWideKeywords,
  38. units: config.units,
  39. types: config.types,
  40. atrules: config.atrules,
  41. properties: config.properties,
  42. node: config.node
  43. }, syntax);
  44. return syntax;
  45. }
  46. const createSyntax$1 = config => createSyntax(mix({}, config));
  47. module.exports = createSyntax$1;