hclang 0.1.0 → 0.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/README.md +25 -3
  2. package/lib/src/cli/hc.js +40 -0
  3. package/lib/src/cli/runfile.js +28 -0
  4. package/lib/src/execute/eval-pipe.js +15 -0
  5. package/lib/src/execute/evaluate.js +10 -0
  6. package/lib/src/execute/execute.js +18 -0
  7. package/lib/src/execute/frame-space.js +17 -0
  8. package/lib/src/execute/hc-eval.js +105 -0
  9. package/lib/src/execute/hc-log.js +39 -0
  10. package/lib/src/execute/hc-test.js +43 -0
  11. package/lib/src/execute/lex-bytes.js +42 -0
  12. package/lib/src/execute/lex-pipe.js +56 -0
  13. package/lib/src/execute/lex.js +110 -0
  14. package/lib/src/execute/lexer.js +24 -0
  15. package/lib/src/execute/parse-pipe.js +52 -0
  16. package/lib/src/execute/syntax.js +36 -0
  17. package/lib/src/execute/terminals.js +54 -0
  18. package/lib/src/execute.js +3 -0
  19. package/lib/src/frames/frame-alias.js +45 -0
  20. package/lib/src/frames/frame-arg.js +62 -0
  21. package/lib/src/frames/frame-array.js +47 -0
  22. package/lib/src/frames/frame-atom.js +41 -0
  23. package/lib/src/frames/frame-blob.js +104 -0
  24. package/lib/src/frames/frame-bytes.js +31 -0
  25. package/lib/src/frames/frame-comment.js +28 -0
  26. package/lib/src/frames/frame-doc.js +19 -0
  27. package/lib/src/frames/frame-expr.js +34 -0
  28. package/lib/src/frames/frame-group.js +31 -0
  29. package/lib/src/frames/frame-lazy.js +39 -0
  30. package/lib/src/frames/frame-list.js +58 -0
  31. package/lib/src/frames/frame-name.js +29 -0
  32. package/lib/src/frames/frame-note.js +104 -0
  33. package/lib/src/frames/frame-number.js +28 -0
  34. package/lib/src/frames/frame-schema.js +47 -0
  35. package/lib/src/frames/frame-string.js +41 -0
  36. package/lib/src/frames/frame-symbol.js +75 -0
  37. package/lib/src/frames/frame.js +75 -0
  38. package/lib/src/frames/meta-frame.js +99 -0
  39. package/lib/src/frames.js +24 -0
  40. package/lib/src/index.js +5 -0
  41. package/lib/src/maml/tag.js +17 -0
  42. package/lib/src/maml.js +26 -0
  43. package/lib/src/ops/conditionals.js +14 -0
  44. package/lib/src/ops/frame-curry.js +17 -0
  45. package/lib/src/ops/frame-ops.js +24 -0
  46. package/lib/src/ops/iterators.js +28 -0
  47. package/lib/src/ops.js +12 -0
  48. package/lib/src/version.js +3 -0
  49. package/lib/test/execute/eval-pipe-spec.js +45 -0
  50. package/lib/test/execute/evaluate-spec.js +76 -0
  51. package/lib/test/execute/execute-spec.js +115 -0
  52. package/lib/test/execute/hc-eval-spec.js +68 -0
  53. package/lib/test/execute/hc-test-spec.js +47 -0
  54. package/lib/test/execute/lex-pipe-spec.js +25 -0
  55. package/lib/test/execute/parse-spec.js +67 -0
  56. package/lib/test/execute/script-spec.js +29 -0
  57. package/lib/test/frames/frame-alias-spec.js +36 -0
  58. package/lib/test/frames/frame-arg-spec.js +57 -0
  59. package/lib/test/frames/frame-array-spec.js +54 -0
  60. package/lib/test/frames/frame-blob-spec.js +56 -0
  61. package/lib/test/frames/frame-bytes-spec.js +16 -0
  62. package/lib/test/frames/frame-comment-spec.js +17 -0
  63. package/lib/test/frames/frame-doc-spec.js +17 -0
  64. package/lib/test/frames/frame-expr-spec.js +60 -0
  65. package/lib/test/frames/frame-group-spec.js +27 -0
  66. package/lib/test/frames/frame-lazy-spec.js +49 -0
  67. package/lib/test/frames/frame-name-spec.js +26 -0
  68. package/lib/test/frames/frame-note-spec.js +48 -0
  69. package/lib/test/frames/frame-number-spec.js +17 -0
  70. package/lib/test/frames/frame-schema-spec.js +54 -0
  71. package/lib/test/frames/frame-spec.js +31 -0
  72. package/lib/test/frames/frame-string-spec.js +43 -0
  73. package/lib/test/frames/frame-symbol-spec.js +64 -0
  74. package/lib/test/frames/meta-frame-spec.js +75 -0
  75. package/lib/test/maml/maml-spec.js +42 -0
  76. package/lib/test/maml/tag-spec.js +53 -0
  77. package/lib/test/ops/iterators-spec.js +70 -0
  78. package/package.json +60 -34
  79. package/lib/bin.d.ts +0 -0
  80. package/lib/bin.js +0 -6
  81. package/lib/execute/actions.d.ts +0 -13
  82. package/lib/execute/actions.js +0 -48
  83. package/lib/execute/eval-pipe.d.ts +0 -5
  84. package/lib/execute/eval-pipe.js +0 -32
  85. package/lib/execute/evaluate.d.ts +0 -2
  86. package/lib/execute/evaluate.js +0 -20
  87. package/lib/execute/frame-space.d.ts +0 -7
  88. package/lib/execute/frame-space.js +0 -32
  89. package/lib/execute/group-pipe.d.ts +0 -6
  90. package/lib/execute/group-pipe.js +0 -27
  91. package/lib/execute/lex-pipe.d.ts +0 -12
  92. package/lib/execute/lex-pipe.js +0 -55
  93. package/lib/execute/lex.d.ts +0 -26
  94. package/lib/execute/lex.js +0 -94
  95. package/lib/execute/lexer.d.ts +0 -9
  96. package/lib/execute/lexer.js +0 -55
  97. package/lib/execute/parse-pipe.d.ts +0 -8
  98. package/lib/execute/parse-pipe.js +0 -49
  99. package/lib/execute/parser.d.ts +0 -8
  100. package/lib/execute/parser.js +0 -49
  101. package/lib/execute/syntax.d.ts +0 -2
  102. package/lib/execute/syntax.js +0 -23
  103. package/lib/execute/terminals.d.ts +0 -10
  104. package/lib/execute/terminals.js +0 -48
  105. package/lib/execute.d.ts +0 -1
  106. package/lib/execute.js +0 -9
  107. package/lib/frames/frame-arg.d.ts +0 -24
  108. package/lib/frames/frame-arg.js +0 -81
  109. package/lib/frames/frame-array.d.ts +0 -15
  110. package/lib/frames/frame-array.js +0 -50
  111. package/lib/frames/frame-atom.d.ts +0 -17
  112. package/lib/frames/frame-atom.js +0 -52
  113. package/lib/frames/frame-comment.d.ts +0 -12
  114. package/lib/frames/frame-comment.js +0 -36
  115. package/lib/frames/frame-doc.d.ts +0 -9
  116. package/lib/frames/frame-doc.js +0 -31
  117. package/lib/frames/frame-expr.d.ts +0 -9
  118. package/lib/frames/frame-expr.js +0 -48
  119. package/lib/frames/frame-group.d.ts +0 -7
  120. package/lib/frames/frame-group.js +0 -39
  121. package/lib/frames/frame-lazy.d.ts +0 -13
  122. package/lib/frames/frame-lazy.js +0 -54
  123. package/lib/frames/frame-list.d.ts +0 -15
  124. package/lib/frames/frame-list.js +0 -51
  125. package/lib/frames/frame-name.d.ts +0 -12
  126. package/lib/frames/frame-name.js +0 -37
  127. package/lib/frames/frame-number.d.ts +0 -9
  128. package/lib/frames/frame-number.js +0 -31
  129. package/lib/frames/frame-string.d.ts +0 -14
  130. package/lib/frames/frame-string.js +0 -47
  131. package/lib/frames/frame-symbol.d.ts +0 -18
  132. package/lib/frames/frame-symbol.js +0 -64
  133. package/lib/frames/frame.d.ts +0 -22
  134. package/lib/frames/frame.js +0 -73
  135. package/lib/frames/meta-frame.d.ts +0 -26
  136. package/lib/frames/meta-frame.js +0 -85
  137. package/lib/frames.d.ts +0 -15
  138. package/lib/frames.js +0 -36
  139. package/lib/hc.d.ts +0 -0
  140. package/lib/hc.js +0 -13
  141. package/lib/index.d.ts +0 -3
  142. package/lib/index.js +0 -9
  143. package/lib/maml/tag.d.ts +0 -2
  144. package/lib/maml/tag.js +0 -19
  145. package/lib/maml.d.ts +0 -2
  146. package/lib/maml.js +0 -30
  147. package/lib/ops/frame-curry.d.ts +0 -9
  148. package/lib/ops/frame-curry.js +0 -31
  149. package/lib/ops/frame-ops.d.ts +0 -12
  150. package/lib/ops/frame-ops.js +0 -41
  151. package/lib/ops/iterators.d.ts +0 -2
  152. package/lib/ops/iterators.js +0 -12
  153. package/lib/ops.d.ts +0 -3
  154. package/lib/ops.js +0 -8
@@ -0,0 +1,5 @@
1
+ export * from './execute.js';
2
+ export { HCEval } from './execute/hc-eval.js';
3
+ export * from './frames.js';
4
+ export * from './maml.js';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxjQUFjLENBQUE7QUFDNUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQzdDLGNBQWMsYUFBYSxDQUFBO0FBQzNCLGNBQWMsV0FBVyxDQUFBIn0=
@@ -0,0 +1,17 @@
1
+ import { FrameArg, FrameArray, FrameExpr, FrameLazy, FrameString } from '../frames.js';
2
+ const wrapArg = (prefix, suffix) => {
3
+ return new FrameExpr([
4
+ new FrameString(prefix),
5
+ FrameArg.here(),
6
+ new FrameString(suffix)
7
+ ]);
8
+ };
9
+ export const tag = new FrameExpr([
10
+ new FrameLazy([]),
11
+ new FrameArray([
12
+ wrapArg('<', '>'),
13
+ FrameArg.level(2),
14
+ wrapArg('</', '>')
15
+ ])
16
+ ]);
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21hbWwvdGFnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRXRGLE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBYyxFQUFFLE1BQWMsRUFBRSxFQUFFO0lBQ2pELE9BQU8sSUFBSSxTQUFTLENBQUM7UUFDbkIsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQ3ZCLFFBQVEsQ0FBQyxJQUFJLEVBQUU7UUFDZixJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUM7S0FDeEIsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFBO0FBRUQsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLElBQUksU0FBUyxDQUFDO0lBQy9CLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQztJQUNqQixJQUFJLFVBQVUsQ0FBQztRQUNiLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQ2pCLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO0tBQ25CLENBQUM7Q0FDSCxDQUFDLENBQUEifQ==
@@ -0,0 +1,26 @@
1
+ import { FrameArg, FrameExpr, FrameLazy, FrameName, FrameParam, FrameString, FrameSymbol } from './frames.js';
2
+ import { tag } from './maml/tag.js';
3
+ const HTML_PREFIX = '<!DOCTYPE html>';
4
+ const MakeTag = (name, contents) => {
5
+ return new FrameExpr([
6
+ new FrameSymbol('tag'),
7
+ new FrameString(name),
8
+ contents
9
+ ]);
10
+ };
11
+ const HeadBlock = new FrameLazy([
12
+ new FrameSymbol('tag'),
13
+ FrameParam.there(),
14
+ FrameArg.here()
15
+ ]);
16
+ const head = MakeTag('head', new FrameExpr([
17
+ FrameArg.here(),
18
+ new FrameName('&&'),
19
+ HeadBlock
20
+ ]));
21
+ const body = MakeTag('body', FrameArg.here());
22
+ export const maml = new FrameExpr([
23
+ new FrameString(HTML_PREFIX),
24
+ MakeTag('html', new FrameExpr([head, body]))
25
+ ], { tag });
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFtbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW1sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBUyxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDcEgsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUVuQyxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQTtBQUVyQyxNQUFNLE9BQU8sR0FBRyxDQUFDLElBQVksRUFBRSxRQUFlLEVBQUUsRUFBRTtJQUNoRCxPQUFPLElBQUksU0FBUyxDQUFDO1FBQ25CLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQztRQUN0QixJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDckIsUUFBUTtLQUNULENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQTtBQUVELE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDO0lBQzlCLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQztJQUN0QixVQUFVLENBQUMsS0FBSyxFQUFFO0lBQ2xCLFFBQVEsQ0FBQyxJQUFJLEVBQUU7Q0FDaEIsQ0FBQyxDQUFBO0FBRUYsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUNsQixNQUFNLEVBQ04sSUFBSSxTQUFTLENBQUM7SUFDWixRQUFRLENBQUMsSUFBSSxFQUFFO0lBQ2YsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDO0lBQ25CLFNBQVM7Q0FDVixDQUFDLENBQ0gsQ0FBQTtBQUNELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUE7QUFFN0MsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLElBQUksU0FBUyxDQUFDO0lBQ2hDLElBQUksV0FBVyxDQUFDLFdBQVcsQ0FBQztJQUM1QixPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDN0MsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUEifQ==
@@ -0,0 +1,14 @@
1
+ import { Frame } from '../frames.js';
2
+ export const IfThen = (source, block) => {
3
+ if (source !== Frame.nil) {
4
+ return block.call(Frame.nil);
5
+ }
6
+ return Frame.nil;
7
+ };
8
+ export const IfElse = (source, block) => {
9
+ if (source === Frame.nil) {
10
+ return block.call(Frame.nil);
11
+ }
12
+ return Frame.nil;
13
+ };
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uYWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29wcy9jb25kaXRpb25hbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUVwQyxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxNQUFhLEVBQUUsS0FBWSxFQUFFLEVBQUU7SUFDcEQsSUFBSSxNQUFNLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRTtRQUN4QixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0tBQzdCO0lBQ0QsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFBO0FBQ2xCLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQWEsRUFBRSxLQUFZLEVBQUUsRUFBRTtJQUNwRCxJQUFJLE1BQU0sS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFO1FBQ3hCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7S0FDN0I7SUFDRCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUE7QUFDbEIsQ0FBQyxDQUFBIn0=
@@ -0,0 +1,17 @@
1
+ import { Frame } from '../frames/frame.js';
2
+ export class FrameCurry extends Frame {
3
+ constructor(Func, Source, key) {
4
+ super();
5
+ this.Func = Func;
6
+ this.Source = Source;
7
+ this.key = key;
8
+ this.id += '.' + key;
9
+ }
10
+ call(argument, _parameter) {
11
+ return this.Func(this.Source, argument);
12
+ }
13
+ toString() {
14
+ return this.id; // `FrameCurry(${this.Source.id}, ${this.Func})`;
15
+ }
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWUtY3VycnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvb3BzL2ZyYW1lLWN1cnJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUkxQyxNQUFNLE9BQU8sVUFBVyxTQUFRLEtBQUs7SUFDbkMsWUFBdUIsSUFBb0IsRUFBWSxNQUFhLEVBQVksR0FBVztRQUN6RixLQUFLLEVBQUUsQ0FBQTtRQURjLFNBQUksR0FBSixJQUFJLENBQWdCO1FBQVksV0FBTSxHQUFOLE1BQU0sQ0FBTztRQUFZLFFBQUcsR0FBSCxHQUFHLENBQVE7UUFFekYsSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ3RCLENBQUM7SUFFTSxJQUFJLENBQUUsUUFBZSxFQUFFLFVBQWlCO1FBQzdDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQ3pDLENBQUM7SUFFTSxRQUFRO1FBQ2IsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFBLENBQUMsaURBQWlEO0lBQ2xFLENBQUM7Q0FDRiJ9
@@ -0,0 +1,24 @@
1
+ import { Frame } from '../frames/frame.js';
2
+ import { FrameCurry } from './frame-curry.js';
3
+ export class FrameOps extends Frame {
4
+ constructor(OpsDict) {
5
+ super();
6
+ this.OpsDict = OpsDict;
7
+ }
8
+ get(key, origin) {
9
+ const func = this.OpsDict[key];
10
+ if (func != null) {
11
+ return this.curry(func, origin, key);
12
+ }
13
+ // return FrameNote.key(key, origin);
14
+ return Frame.missing;
15
+ }
16
+ toString() {
17
+ return this.OpsDict.toString();
18
+ }
19
+ curry(func, origin, key) {
20
+ const expr = new FrameCurry(func, origin, key);
21
+ return expr;
22
+ }
23
+ }
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWUtb3BzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29wcy9mcmFtZS1vcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQzFDLE9BQU8sRUFBRSxVQUFVLEVBQWtCLE1BQU0sa0JBQWtCLENBQUE7QUFJN0QsTUFBTSxPQUFPLFFBQVMsU0FBUSxLQUFLO0lBQ2pDLFlBQXVCLE9BQWlCO1FBQ3RDLEtBQUssRUFBRSxDQUFBO1FBRGMsWUFBTyxHQUFQLE9BQU8sQ0FBVTtJQUV4QyxDQUFDO0lBRU0sR0FBRyxDQUFFLEdBQVcsRUFBRSxNQUFhO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDOUIsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO1lBQ2hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1NBQ3JDO1FBQ0QscUNBQXFDO1FBQ3JDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQTtJQUN0QixDQUFDO0lBRU0sUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUNoQyxDQUFDO0lBRVMsS0FBSyxDQUFFLElBQW9CLEVBQUUsTUFBYSxFQUFFLEdBQVc7UUFDL0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUM5QyxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7Q0FDRiJ9
@@ -0,0 +1,28 @@
1
+ import { FrameArray, FrameNumber, FrameString } from '../frames.js';
2
+ export const MapEnumerable = (source, block) => {
3
+ let i = 0;
4
+ const array = source.asArray().map((value) => {
5
+ const param = FrameNumber.for(i.toString());
6
+ i += 1;
7
+ return block.call(value, param);
8
+ });
9
+ return new FrameArray(array);
10
+ };
11
+ export const MapProperties = (source, block) => {
12
+ const array = source.meta_pairs().map(([key, value]) => {
13
+ const fkey = new FrameString(key);
14
+ return block.call(value, fkey);
15
+ });
16
+ return new FrameArray(array);
17
+ };
18
+ export const ReduceEnumerable = (source, block) => {
19
+ let i = 0;
20
+ const FrameReducer = (sum, value) => {
21
+ const param = FrameNumber.for(i.toString());
22
+ i += 1;
23
+ return sum.call(value, param);
24
+ };
25
+ const result = source.asArray().reduce(FrameReducer, block);
26
+ return result;
27
+ };
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlcmF0b3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29wcy9pdGVyYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFTLFVBQVUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRTFFLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQWEsRUFBRSxLQUFZLEVBQUUsRUFBRTtJQUMzRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDVCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDM0MsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtRQUMzQyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ04sT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUNqQyxDQUFDLENBQUMsQ0FBQTtJQUNGLE9BQU8sSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDOUIsQ0FBQyxDQUFBO0FBRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsTUFBYSxFQUFFLEtBQVksRUFBRSxFQUFFO0lBQzNELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1FBQ3JELE1BQU0sSUFBSSxHQUFHLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2pDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDaEMsQ0FBQyxDQUFDLENBQUE7SUFDRixPQUFPLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQzlCLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsTUFBYSxFQUFFLEtBQVksRUFBRSxFQUFFO0lBQzlELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNULE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBVSxFQUFFLEtBQVksRUFBRSxFQUFFO1FBQ2hELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7UUFDM0MsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNOLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDL0IsQ0FBQyxDQUFBO0lBQ0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDM0QsT0FBTyxNQUFNLENBQUE7QUFDZixDQUFDLENBQUEifQ==
package/lib/src/ops.js ADDED
@@ -0,0 +1,12 @@
1
+ import { IfElse, IfThen } from './ops/conditionals.js';
2
+ import { FrameOps } from './ops/frame-ops.js';
3
+ import { MapEnumerable, MapProperties, ReduceEnumerable } from './ops/iterators.js';
4
+ export { FrameCurry } from './ops/frame-curry.js';
5
+ export const Ops = new FrameOps({
6
+ '&': MapEnumerable,
7
+ '&&': MapProperties,
8
+ ':': IfElse,
9
+ '?': IfThen,
10
+ '|': ReduceEnumerable
11
+ });
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29wcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQ3RELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBRW5GLE9BQU8sRUFBRSxVQUFVLEVBQWtCLE1BQU0sc0JBQXNCLENBQUE7QUFFakUsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLElBQUksUUFBUSxDQUFDO0lBQzlCLEdBQUcsRUFBRSxhQUFhO0lBQ2xCLElBQUksRUFBRSxhQUFhO0lBQ25CLEdBQUcsRUFBRSxNQUFNO0lBQ1gsR0FBRyxFQUFFLE1BQU07SUFDWCxHQUFHLEVBQUUsZ0JBQWdCO0NBQ3RCLENBQUMsQ0FBQSJ9
@@ -0,0 +1,3 @@
1
+ // generated by genversion
2
+ export const version = '0.5.4';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBCQUEwQjtBQUMxQixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFBIn0=
@@ -0,0 +1,45 @@
1
+ import { expect } from 'chai';
2
+ import { describe, it, beforeEach } from 'mocha';
3
+ import { EvalPipe } from '../../src/execute/eval-pipe.js';
4
+ import * as frame from '../../src/frames.js';
5
+ describe('EvalPipe', () => {
6
+ const strA = new frame.FrameString('A');
7
+ const strB = new frame.FrameString('B');
8
+ const expr = new frame.FrameExpr([strA, strB]);
9
+ const value = new frame.FrameString('Value');
10
+ const context = { key: value };
11
+ let out;
12
+ let pipe;
13
+ beforeEach(() => {
14
+ out = new frame.FrameArray([], context);
15
+ pipe = new EvalPipe(out);
16
+ });
17
+ it('is exported', () => {
18
+ expect(EvalPipe).to.be.ok;
19
+ });
20
+ it('is constructed from an out parameter', () => {
21
+ expect(pipe).to.be.ok;
22
+ });
23
+ it('evaluates arguments', () => {
24
+ const result = pipe.call(expr);
25
+ expect(result.toString()).to.equal('“AB”');
26
+ });
27
+ it('evaluates symbols in context', () => {
28
+ const symbol = new frame.FrameSymbol('key');
29
+ const result = pipe.call(symbol);
30
+ expect(result.toString()).to.equal(value.toString());
31
+ });
32
+ it('evaluates symbols in expressions', () => {
33
+ const symbol = new frame.FrameSymbol('key');
34
+ const wrap = new frame.FrameExpr([symbol]);
35
+ const result = pipe.call(wrap);
36
+ expect(result.toString()).to.equal(value.toString());
37
+ });
38
+ it('stores result in out', () => {
39
+ expect(out.size()).to.equal(0);
40
+ const result = pipe.call(expr);
41
+ expect(out.size()).to.equal(1);
42
+ expect(out.at(0)).to.equal(result);
43
+ });
44
+ });
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbC1waXBlLXNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L2V4ZWN1dGUvZXZhbC1waXBlLXNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUM3QixPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxPQUFPLENBQUE7QUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFBO0FBQ3pELE9BQU8sS0FBSyxLQUFLLE1BQU0scUJBQXFCLENBQUE7QUFFNUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUU7SUFDeEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3ZDLE1BQU0sSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN2QyxNQUFNLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUM5QyxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDNUMsTUFBTSxPQUFPLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUE7SUFDOUIsSUFBSSxHQUFxQixDQUFBO0lBQ3pCLElBQUksSUFBYyxDQUFBO0lBRWxCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUN2QyxJQUFJLEdBQUcsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDMUIsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtRQUNyQixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUE7SUFDM0IsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsc0NBQXNDLEVBQUUsR0FBRyxFQUFFO1FBQzlDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQTtJQUN2QixDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxHQUFHLEVBQUU7UUFDN0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM5QixNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUM1QyxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLEVBQUU7UUFDdEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzNDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDaEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDdEQsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsa0NBQWtDLEVBQUUsR0FBRyxFQUFFO1FBQzFDLE1BQU0sTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUMzQyxNQUFNLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQzFDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDdEQsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsc0JBQXNCLEVBQUUsR0FBRyxFQUFFO1FBQzlCLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzlCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDOUIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDOUIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3BDLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEifQ==
@@ -0,0 +1,76 @@
1
+ import { expect } from 'chai';
2
+ import { describe, it } from 'mocha';
3
+ import { evaluate } from '../../src/execute/evaluate.js';
4
+ import * as frame from '../../src/frames.js';
5
+ describe('evaluate', () => {
6
+ it('is exported', () => {
7
+ expect(evaluate).to.be.ok;
8
+ });
9
+ it('returns empty array for empty string', () => {
10
+ const result = evaluate.call('', '');
11
+ expect(result).to.be.instanceof(frame.FrameArray);
12
+ expect(result.toString()).to.equal('[]');
13
+ });
14
+ it('ignores comments', () => {
15
+ const input = '#Goodbye';
16
+ const result = evaluate(input);
17
+ expect(result.toString()).to.equal('[]');
18
+ });
19
+ it('ignores spaces', () => {
20
+ const input = ' ';
21
+ const result = evaluate(input);
22
+ expect(result.toString()).to.equal('[]');
23
+ });
24
+ describe('strings', () => {
25
+ it('quines string literal', () => {
26
+ const input = '“Hello, HC!”';
27
+ const result = evaluate(input);
28
+ expect(result.toString()).to.equal(`[${input}]`);
29
+ });
30
+ it('quines string before spaces', () => {
31
+ const input = '“Hello, HC!”';
32
+ const suffix = `${input} `;
33
+ const result = evaluate(suffix);
34
+ expect(result.toString()).to.equal(`[${input}]`);
35
+ });
36
+ it('quines string after spaces', () => {
37
+ const input = '“Hello, HC!”';
38
+ const prefix = ` ${input}`;
39
+ const result = evaluate(prefix);
40
+ expect(result.toString()).to.equal(`[${input}]`);
41
+ });
42
+ it('joins multiple strings', () => {
43
+ const input = '“Hello”“, HC!”';
44
+ const result = evaluate(input);
45
+ expect(result.toString()).to.equal('[“Hello, HC!”]');
46
+ });
47
+ it('joins around inner space', () => {
48
+ const input = '“Hello” “, HC!”';
49
+ const result = evaluate(input);
50
+ expect(result.toString()).to.equal('[“Hello, HC!”]');
51
+ });
52
+ it('joins multi-line doc-strings into strings', () => {
53
+ const input = '```\nDoc String\n```';
54
+ const result = evaluate(input);
55
+ expect(result.toString()).to.equal('[“\nDoc String\n”]');
56
+ });
57
+ it('joins around comments', () => {
58
+ const input = '“Hello”#ignore me#“, HC!”';
59
+ const result = evaluate(input);
60
+ expect(result.toString()).to.equal('[“Hello, HC!”]');
61
+ });
62
+ });
63
+ describe('grouping', () => {
64
+ it('returns FrameArray for empty []', () => {
65
+ const result = evaluate('[]');
66
+ const output = result.at(0);
67
+ expect(output).to.be.instanceof(frame.FrameArray);
68
+ });
69
+ it('returns closure for empty {}', () => {
70
+ const result = evaluate('{}');
71
+ const output = result.at(0);
72
+ expect(output).to.be.instanceof(frame.FrameLazy);
73
+ });
74
+ });
75
+ });
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdGUtc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvZXhlY3V0ZS9ldmFsdWF0ZS1zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDN0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxPQUFPLENBQUE7QUFFcEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLCtCQUErQixDQUFBO0FBQ3hELE9BQU8sS0FBSyxLQUFLLE1BQU0scUJBQXFCLENBQUE7QUFFNUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUU7SUFDeEIsRUFBRSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUU7UUFDckIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFBO0lBQzNCLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtRQUM5QyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUNwQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQ2pELE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzFDLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtRQUMxQixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUE7UUFDeEIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzlCLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENB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
@@ -0,0 +1,115 @@
1
+ import { expect } from 'chai';
2
+ import { describe, it } from 'mocha';
3
+ import { execute } from '../../src/execute.js';
4
+ describe('execute', () => {
5
+ const input_string = '“Watson I need you”';
6
+ const other_string = '“Holmes I need you”';
7
+ const both_strings = `${input_string}\n${other_string}`;
8
+ const inline_comment = '#Inline comment#';
9
+ const endline_comment = '#End-of-line\n';
10
+ const spaces = ' ';
11
+ describe('terminators', () => {
12
+ it('evaluates spaces to nothing', () => {
13
+ const result = execute(spaces);
14
+ expect(result).to.equal('');
15
+ });
16
+ describe('newline', () => {
17
+ it('evaluates to nothing', () => {
18
+ const result = execute('\n');
19
+ expect(result).to.equal('');
20
+ });
21
+ it('does not break strings', () => {
22
+ const source = '“Hello,\n World”';
23
+ const result = execute(source);
24
+ expect(result).to.equal(source);
25
+ });
26
+ it('breaks expressions', () => {
27
+ const result = execute(both_strings);
28
+ expect(result).to.equal(both_strings);
29
+ });
30
+ });
31
+ });
32
+ describe('tokens.strings', () => {
33
+ it('quines FrameStrings', () => {
34
+ const result = execute(input_string);
35
+ expect(result).to.equal(input_string);
36
+ });
37
+ it('evaluates inline comments to nothing', () => {
38
+ const result = execute(inline_comment);
39
+ expect(result).to.equal('');
40
+ });
41
+ it('evaluates end-of-line comments to nothing', () => {
42
+ const result = execute(endline_comment);
43
+ expect(result).to.equal('');
44
+ });
45
+ it('evaluates spaces to nothing', () => {
46
+ const result = execute(spaces);
47
+ expect(result).to.equal('');
48
+ });
49
+ it('lexes both FrameStrings and comments', () => {
50
+ const input = input_string + inline_comment;
51
+ const result = execute(input);
52
+ expect(result).to.equal(input_string);
53
+ });
54
+ it('handles spaces after string', () => {
55
+ const space_suffix = other_string + spaces;
56
+ const result = execute(space_suffix);
57
+ expect(result).to.equal(other_string);
58
+ });
59
+ });
60
+ describe('numbers', () => {
61
+ it('returns numbers', () => {
62
+ const input = '123';
63
+ const result = execute(input);
64
+ expect(result.toString()).to.equal(input);
65
+ const digit = '9';
66
+ const result2 = execute(digit);
67
+ expect(result2.toString()).to.equal(digit);
68
+ });
69
+ it('returns numbers after inline comment', () => {
70
+ const input = '#abc#123';
71
+ const result = execute(input);
72
+ expect(result.toString()).to.equal('123');
73
+ });
74
+ it('returns numbers before inline comment', () => {
75
+ const input = '123#abc#';
76
+ const result = execute(input);
77
+ expect(result.toString()).to.equal('123');
78
+ });
79
+ it('returns numbers before endcomment', () => {
80
+ const input = '123#abc';
81
+ const result = execute(input);
82
+ expect(result.toString()).to.equal('123');
83
+ });
84
+ it('joins blobs', () => {
85
+ const bithex = execute('0b1 0x5');
86
+ expect(bithex.toString()).to.equal('0b10101');
87
+ const dual0 = execute('0b00 0b00');
88
+ expect(dual0.toString()).to.equal('0b0000');
89
+ const right0 = execute('0b01 0b00');
90
+ expect(right0.toString()).to.equal('0b0100');
91
+ const left0 = execute('0b00 0b01');
92
+ expect(left0.toString()).to.equal('0b0001');
93
+ });
94
+ });
95
+ describe('operators', () => {
96
+ it('accepts them as symbols', () => {
97
+ const input = '.&';
98
+ const result = execute(input);
99
+ expect(result.toString()).to.include('&');
100
+ });
101
+ it('curries', () => {
102
+ const input = '[`a`].&';
103
+ const result = execute(input);
104
+ expect(result).to.include('FrameCurry');
105
+ });
106
+ });
107
+ describe('byte.strings', () => {
108
+ it('reads n characters', () => {
109
+ const input = '\\1\\a';
110
+ const result = execute(input);
111
+ expect(result.toString()).to.equal(input);
112
+ });
113
+ });
114
+ });
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0ZS1zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC9leGVjdXRlL2V4ZWN1dGUtc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzdCLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sT0FBTyxDQUFBO0FBRXBDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUU5QyxRQUFRLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtJQUN2QixNQUFNLFlBQVksR0FBRyxxQkFBcUIsQ0FBQTtJQUMxQyxNQUFNLFlBQVksR0FBRyxxQkFBcUIsQ0FBQTtJQUMxQyxNQUFNLFlBQVksR0FBRyxHQUFHLFlBQVksS0FBSyxZQUFZLEVBQUUsQ0FBQTtJQUN2RCxNQUFNLGNBQWMsR0FBRyxrQkFBa0IsQ0FBQTtJQUN6QyxNQUFNLGVBQWUsR0FBRyxnQkFBZ0IsQ0FBQTtJQUN4QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUE7SUFFbkIsUUFBUSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUU7UUFDM0IsRUFBRSxDQUFDLDZCQUE2QixFQUFFLEdBQUcsRUFBRTtZQUNyQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDN0IsQ0FBQyxDQUFDLENBQUE7UUFFRixRQUFRLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtZQUN2QixFQUFFLENBQUMsc0JBQXNCLEVBQUUsR0FBRyxFQUFFO2dCQUM5QixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQzVCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FB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
@@ -0,0 +1,68 @@
1
+ import { expect } from 'chai';
2
+ import { describe, it, beforeEach } from 'mocha';
3
+ import { HCEval } from '../../src/execute/hc-eval.js';
4
+ import * as frame from '../../src/frames.js';
5
+ describe('HCEval', () => {
6
+ let out;
7
+ let hc_eval;
8
+ beforeEach(() => {
9
+ out = new frame.FrameArray([]);
10
+ hc_eval = new HCEval(out);
11
+ });
12
+ it('is exported', () => {
13
+ expect(HCEval).to.be.ok;
14
+ expect(hc_eval).to.be.ok;
15
+ });
16
+ it('calls out with result when called with a string', () => {
17
+ expect(out.length()).to.equal(0);
18
+ hc_eval.call('123');
19
+ expect(out.length()).to.equal(1);
20
+ const result = out.at(0);
21
+ expect(result.toString()).to.equal('123');
22
+ });
23
+ it('parses multi-line docStrings', () => {
24
+ hc_eval.call('`');
25
+ expect(out.length()).to.equal(0);
26
+ hc_eval.call('*docString*');
27
+ expect(out.length()).to.equal(0);
28
+ hc_eval.call('`');
29
+ expect(out.length()).to.equal(1);
30
+ const result = out.at(0);
31
+ expect(result.toString()).to.equal('`\n*docString*\n`');
32
+ });
33
+ describe('symbols', () => {
34
+ const key = 'key';
35
+ const value = 'value';
36
+ const frame_value = new frame.FrameString(value);
37
+ const setting = `.${key} ${frame_value}`;
38
+ it('evaluates in env', () => {
39
+ const env = { key: value };
40
+ const context = HCEval.make_context(env);
41
+ const out2 = new frame.FrameArray([], context);
42
+ const hc_eval2 = new HCEval(out2);
43
+ hc_eval2.call(key);
44
+ expect(out2.length()).to.equal(1);
45
+ const output = out2.at(0);
46
+ expect(output.toString()).to.equal(frame_value.toString());
47
+ });
48
+ it('evaluates names to symbols', () => {
49
+ hc_eval.call(`.${key}`);
50
+ expect(out.length()).to.equal(1);
51
+ const output = out.at(0);
52
+ expect(output).to.be.instanceof(frame.FrameSymbol);
53
+ });
54
+ it('set symbols in result', () => {
55
+ hc_eval.call(setting);
56
+ const extracted = out.get(key);
57
+ expect(extracted.toString()).to.equal(frame_value.toString());
58
+ });
59
+ it('evaluates created symbols', () => {
60
+ const input = `${setting};\n${key}`;
61
+ hc_eval.call(input);
62
+ expect(out.length()).to.equal(2);
63
+ const output = out.at(1);
64
+ expect(output.toString()).to.equal(frame_value.toString());
65
+ });
66
+ });
67
+ });
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGMtZXZhbC1zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC9leGVjdXRlL2hjLWV2YWwtc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzdCLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQTtBQUVoRCxPQUFPLEVBQUUsTUFBTSxFQUFlLE1BQU0sOEJBQThCLENBQUE7QUFDbEUsT0FBTyxLQUFLLEtBQUssTUFBTSxxQkFBcUIsQ0FBQTtBQUU1QyxRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtJQUN0QixJQUFJLEdBQXFCLENBQUE7SUFDekIsSUFBSSxPQUFlLENBQUE7SUFFbkIsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDOUIsT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzNCLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUU7UUFDckIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFBO1FBQ3ZCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQTtJQUMxQixDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxHQUFHLEVBQUU7UUFDekQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDaEMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNuQixNQUFNLENBQUMsR0FBRyxDQUFD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
@@ -0,0 +1,47 @@
1
+ import { expect } from 'chai';
2
+ import { describe, it, beforeEach } from 'mocha';
3
+ import { HCEval } from '../../src/execute/hc-eval.js';
4
+ import { HCTest } from '../../src/execute/hc-test.js';
5
+ import * as frame from '../../src/frames.js';
6
+ describe('HCTest', () => {
7
+ let out;
8
+ let test;
9
+ let hc_eval;
10
+ beforeEach(() => {
11
+ out = new frame.FrameArray([]);
12
+ test = new HCTest(out);
13
+ hc_eval = new HCEval(test);
14
+ });
15
+ it('sets source on out when called with input string', () => {
16
+ hc_eval.call('; .abc');
17
+ const result = test.get(HCEval.SOURCE);
18
+ expect(result.toString()).to.include('“.abc”');
19
+ });
20
+ it('assertEqual returns FrameNote.pass if expected == actual', () => {
21
+ const result = test.assertEqual('123', '123', 'abc');
22
+ expect(result.toString()).to.include('$+.test-pass “abc +123”;');
23
+ });
24
+ it('assertEqual returns FrameNote.fail if expected != actual', () => {
25
+ const result = test.assertEqual('123', '456', 'abc');
26
+ expect(result.toString()).to.include('$-.test-fail “abc +123 -456”;');
27
+ });
28
+ it('outputs Note+ when called with correct testDoc', () => {
29
+ hc_eval.call('.abc 123;');
30
+ expect(out.length()).to.equal(0);
31
+ hc_eval.call('; abc');
32
+ expect(out.length()).to.equal(0);
33
+ hc_eval.call('# 123');
34
+ expect(out.length()).to.equal(1);
35
+ const result = out.at(0);
36
+ expect(result.toString()).to.include('$+.test-pass ““abc” +“123””;');
37
+ });
38
+ it('outputs Note- when called with incorrect testDoc', () => {
39
+ hc_eval.call('.abc 456;');
40
+ hc_eval.call('; abc');
41
+ hc_eval.call('# 123');
42
+ expect(out.length()).to.equal(1);
43
+ const result = out.at(0);
44
+ expect(result.toString()).to.include('$-.test-fail ““abc” +“123” -“456””;');
45
+ });
46
+ });
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGMtdGVzdC1zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC9leGVjdXRlL2hjLXRlc3Qtc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzdCLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQTtBQUVoRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sOEJBQThCLENBQUE7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDhCQUE4QixDQUFBO0FBQ3JELE9BQU8sS0FBSyxLQUFLLE1BQU0scUJBQXFCLENBQUE7QUFFNUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7SUFDdEIsSUFBSSxHQUFxQixDQUFBO0lBQ3pCLElBQUksSUFBWSxDQUFBO0lBQ2hCLElBQUksT0FBZSxDQUFBO0lBQ25CLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQzlCLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN0QixPQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDNUIsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsa0RBQWtELEVBQUUsR0FBRyxFQUFFO1FBQzFELE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDdEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDaEQsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsMERBQTBELEVBQUUsR0FBRyxFQUFFO1FBQ2xFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUNwRCxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO0lBQ2xFLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLDBEQUEwRCxFQUFFLEdBQUcsRUFBRTtRQUNsRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDcEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsK0JBQStCLENBQUMsQ0FBQTtJQUN2RSxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyxnREFBZ0QsRUFBRSxHQUFHLEVBQUU7UUFDeEQsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUN6QixNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUVoQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ3JCLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRWhDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDckIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFFaEMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN4QixNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO0lBQ3RFLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLGtEQUFrRCxFQUFFLEdBQUcsRUFBRTtRQUMxRCxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDckIsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNyQixNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNoQyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3hCLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLHFDQUFxQyxDQUFDLENBQUE7SUFDN0UsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSJ9
@@ -0,0 +1,25 @@
1
+ import { expect } from 'chai';
2
+ import { describe, it, beforeEach } from 'mocha';
3
+ import { LexPipe } from '../../src/execute/lex-pipe.js';
4
+ import * as frame from '../../src/frames.js';
5
+ describe('LexPipe', () => {
6
+ const success = new frame.FrameString('success!');
7
+ let out;
8
+ let pipe;
9
+ beforeEach(() => {
10
+ out = new frame.FrameArray([]);
11
+ out.set(frame.Frame.kEND, success);
12
+ pipe = new LexPipe(out);
13
+ });
14
+ it('is exported', () => {
15
+ expect(LexPipe).to.be.ok;
16
+ });
17
+ it('is constructed from an out parameter', () => {
18
+ expect(pipe).to.be.ok;
19
+ });
20
+ it('returns itself on finish', () => {
21
+ const result = pipe.finish(frame.Frame.nil);
22
+ expect(result).to.equal(pipe);
23
+ });
24
+ });
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGV4LXBpcGUtc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvZXhlY3V0ZS9sZXgtcGlwZS1zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDN0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFBO0FBSWhELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQTtBQUN2RCxPQUFPLEtBQUssS0FBSyxNQUFNLHFCQUFxQixDQUFBO0FBRTVDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO0lBQ3ZCLE1BQU0sT0FBTyxHQUFHLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUNqRCxJQUFJLEdBQXFCLENBQUE7SUFDekIsSUFBSSxJQUFhLENBQUE7SUFFakIsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDOUIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUNsQyxJQUFJLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDekIsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtRQUNyQixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUE7SUFDMUIsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsc0NBQXNDLEVBQUUsR0FBRyxFQUFFO1FBQzlDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQTtJQUN2QixDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQywwQkFBMEIsRUFBRSxHQUFHLEVBQUU7UUFDbEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQzNDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQy9CLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEifQ==