PageRenderTime 51ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/node_modules/montage/node_modules/frb/compile-observer.js

https://github.com/lothaeron/Foo
JavaScript | 104 lines | 93 code | 9 blank | 2 comment | 15 complexity | 40babf5f1b67bb314050ac6c10a2a067 MD5 | raw file
Possible License(s): CC-BY-SA-4.0, 0BSD, BSD-3-Clause
  1. var Observers = require("./observers");
  2. var Operators = require("./operators");
  3. module.exports = compile;
  4. function compile(syntax) {
  5. return semantics.compile(syntax);
  6. }
  7. var semantics = compile.semantics = {
  8. compilers: {
  9. property: Observers.makePropertyObserver,
  10. get: Observers.makeGetObserver,
  11. path: Observers.makePathObserver,
  12. "with": Observers.makeWithObserver,
  13. "if": Observers.makeConditionalObserver,
  14. parent: Observers.makeParentObserver,
  15. not: Observers.makeNotObserver,
  16. and: Observers.makeAndObserver,
  17. or: Observers.makeOrObserver,
  18. "default": Observers.makeDefaultObserver,
  19. defined: Observers.makeDefinedObserver,
  20. rangeContent: Function.identity,
  21. mapContent: Function.identity,
  22. keys: Observers.makeKeysObserver,
  23. values: Observers.makeValuesObserver,
  24. items: Observers.makeEntriesObserver, // XXX deprecated
  25. entries: Observers.makeEntriesObserver,
  26. toMap: Observers.makeToMapObserver,
  27. mapBlock: Observers.makeMapBlockObserver,
  28. filterBlock: Observers.makeFilterBlockObserver,
  29. everyBlock: Observers.makeEveryBlockObserver,
  30. someBlock: Observers.makeSomeBlockObserver,
  31. sortedBlock: Observers.makeSortedBlockObserver,
  32. sortedSetBlock: Observers.makeSortedSetBlockObserver,
  33. groupBlock: Observers.makeGroupBlockObserver,
  34. groupMapBlock: Observers.makeGroupMapBlockObserver,
  35. minBlock: Observers.makeMinBlockObserver,
  36. maxBlock: Observers.makeMaxBlockObserver,
  37. min: Observers.makeMinObserver,
  38. max: Observers.makeMaxObserver,
  39. enumerate: Observers.makeEnumerationObserver,
  40. reversed: Observers.makeReversedObserver,
  41. flatten: Observers.makeFlattenObserver,
  42. concat: Observers.makeConcatObserver,
  43. view: Observers.makeViewObserver,
  44. sum: Observers.makeSumObserver,
  45. average: Observers.makeAverageObserver,
  46. last: Observers.makeLastObserver,
  47. only: Observers.makeOnlyObserver,
  48. one: Observers.makeOneObserver,
  49. has: Observers.makeHasObserver,
  50. // TODO zip
  51. tuple: Observers.makeArrayObserver,
  52. range: Observers.makeRangeObserver,
  53. startsWith: Observers.makeStartsWithObserver,
  54. endsWith: Observers.makeEndsWithObserver,
  55. contains: Observers.makeContainsObserver,
  56. join: Observers.makeJoinObserver,
  57. toArray: Observers.makeToArrayObserver,
  58. asArray: Observers.makeToArrayObserver // XXX deprecated
  59. },
  60. compile: function (syntax) {
  61. var compilers = this.compilers;
  62. if (syntax.type === "literal") {
  63. return Observers.makeLiteralObserver(syntax.value);
  64. } else if (syntax.type === "value") {
  65. return Observers.observeValue;
  66. } else if (syntax.type === "parameters") {
  67. return Observers.observeParameters;
  68. } else if (syntax.type === "element") {
  69. return Observers.makeElementObserver(syntax.id);
  70. } else if (syntax.type === "component") {
  71. return Observers.makeComponentObserver(syntax.label, syntax);
  72. } else if (syntax.type === "record") {
  73. var observers = {};
  74. var args = syntax.args;
  75. for (var name in args) {
  76. observers[name] = this.compile(args[name]);
  77. }
  78. return Observers.makeObjectObserver(observers);
  79. } else {
  80. if (!compilers.hasOwnProperty(syntax.type)) {
  81. compilers[syntax.type] = Observers.makeMethodObserverMaker(syntax.type);
  82. }
  83. var argObservers = syntax.args.map(this.compile, this);
  84. return compilers[syntax.type].apply(null, argObservers);
  85. }
  86. }
  87. };
  88. var compilers = semantics.compilers;
  89. Object.keys(Operators).forEach(function (name) {
  90. if (!compilers[name]) {
  91. compilers[name] = Observers.makeOperatorObserverMaker(Operators[name]);
  92. }
  93. });
  94. // a special Hell for non-enumerable inheritance
  95. compilers.toString = Observers.makeOperatorObserverMaker(Operators.toString);