hclang 0.1.0 → 0.5.3
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.
- package/README.md +25 -3
- package/lib/src/cli/bin.js +4 -0
- package/lib/src/cli/hc.js +45 -0
- package/lib/src/execute/eval-pipe.js +15 -0
- package/lib/src/execute/evaluate.js +10 -0
- package/lib/src/execute/execute.js +18 -0
- package/lib/src/execute/frame-space.js +17 -0
- package/lib/src/execute/hc-eval.js +105 -0
- package/lib/src/execute/hc-log.js +39 -0
- package/lib/src/execute/hc-test.js +43 -0
- package/lib/src/execute/lex-bytes.js +42 -0
- package/lib/src/execute/lex-pipe.js +56 -0
- package/lib/src/execute/lex.js +110 -0
- package/lib/src/execute/lexer.js +24 -0
- package/lib/src/execute/parse-pipe.js +52 -0
- package/lib/src/execute/syntax.js +36 -0
- package/lib/src/execute/terminals.js +54 -0
- package/lib/src/execute.js +3 -0
- package/lib/src/frames/frame-alias.js +45 -0
- package/lib/src/frames/frame-arg.js +62 -0
- package/lib/src/frames/frame-array.js +47 -0
- package/lib/src/frames/frame-atom.js +41 -0
- package/lib/src/frames/frame-blob.js +104 -0
- package/lib/src/frames/frame-bytes.js +31 -0
- package/lib/src/frames/frame-comment.js +28 -0
- package/lib/src/frames/frame-doc.js +19 -0
- package/lib/src/frames/frame-expr.js +34 -0
- package/lib/src/frames/frame-group.js +31 -0
- package/lib/src/frames/frame-lazy.js +39 -0
- package/lib/src/frames/frame-list.js +58 -0
- package/lib/src/frames/frame-name.js +29 -0
- package/lib/src/frames/frame-note.js +104 -0
- package/lib/src/frames/frame-number.js +28 -0
- package/lib/src/frames/frame-schema.js +47 -0
- package/lib/src/frames/frame-string.js +41 -0
- package/lib/src/frames/frame-symbol.js +75 -0
- package/lib/src/frames/frame.js +75 -0
- package/lib/src/frames/meta-frame.js +99 -0
- package/lib/src/frames.js +24 -0
- package/lib/src/index.js +5 -0
- package/lib/src/maml/tag.js +17 -0
- package/lib/src/maml.js +26 -0
- package/lib/src/ops/conditionals.js +14 -0
- package/lib/src/ops/frame-curry.js +17 -0
- package/lib/src/ops/frame-ops.js +24 -0
- package/lib/src/ops/iterators.js +28 -0
- package/lib/src/ops.js +12 -0
- package/lib/src/version.js +3 -0
- package/lib/test/execute/eval-pipe-spec.js +45 -0
- package/lib/test/execute/evaluate-spec.js +76 -0
- package/lib/test/execute/execute-spec.js +115 -0
- package/lib/test/execute/hc-eval-spec.js +68 -0
- package/lib/test/execute/hc-test-spec.js +47 -0
- package/lib/test/execute/lex-pipe-spec.js +25 -0
- package/lib/test/execute/parse-spec.js +67 -0
- package/lib/test/execute/script-spec.js +29 -0
- package/lib/test/frames/frame-alias-spec.js +36 -0
- package/lib/test/frames/frame-arg-spec.js +57 -0
- package/lib/test/frames/frame-array-spec.js +54 -0
- package/lib/test/frames/frame-blob-spec.js +56 -0
- package/lib/test/frames/frame-bytes-spec.js +16 -0
- package/lib/test/frames/frame-comment-spec.js +17 -0
- package/lib/test/frames/frame-expr-spec.js +60 -0
- package/lib/test/frames/frame-group-spec.js +27 -0
- package/lib/test/frames/frame-lazy-spec.js +49 -0
- package/lib/test/frames/frame-name-spec.js +26 -0
- package/lib/test/frames/frame-note-spec.js +48 -0
- package/lib/test/frames/frame-number-spec.js +17 -0
- package/lib/test/frames/frame-schema-spec.js +54 -0
- package/lib/test/frames/frame-spec.js +31 -0
- package/lib/test/frames/frame-string-spec.js +43 -0
- package/lib/test/frames/frame-symbol-spec.js +64 -0
- package/lib/test/frames/meta-frame-spec.js +75 -0
- package/lib/test/maml/maml-spec.js +42 -0
- package/lib/test/maml/tag-spec.js +53 -0
- package/lib/test/ops/iterators-spec.js +70 -0
- package/package.json +61 -34
- package/lib/bin.d.ts +0 -0
- package/lib/bin.js +0 -6
- package/lib/execute/actions.d.ts +0 -13
- package/lib/execute/actions.js +0 -48
- package/lib/execute/eval-pipe.d.ts +0 -5
- package/lib/execute/eval-pipe.js +0 -32
- package/lib/execute/evaluate.d.ts +0 -2
- package/lib/execute/evaluate.js +0 -20
- package/lib/execute/frame-space.d.ts +0 -7
- package/lib/execute/frame-space.js +0 -32
- package/lib/execute/group-pipe.d.ts +0 -6
- package/lib/execute/group-pipe.js +0 -27
- package/lib/execute/lex-pipe.d.ts +0 -12
- package/lib/execute/lex-pipe.js +0 -55
- package/lib/execute/lex.d.ts +0 -26
- package/lib/execute/lex.js +0 -94
- package/lib/execute/lexer.d.ts +0 -9
- package/lib/execute/lexer.js +0 -55
- package/lib/execute/parse-pipe.d.ts +0 -8
- package/lib/execute/parse-pipe.js +0 -49
- package/lib/execute/parser.d.ts +0 -8
- package/lib/execute/parser.js +0 -49
- package/lib/execute/syntax.d.ts +0 -2
- package/lib/execute/syntax.js +0 -23
- package/lib/execute/terminals.d.ts +0 -10
- package/lib/execute/terminals.js +0 -48
- package/lib/execute.d.ts +0 -1
- package/lib/execute.js +0 -9
- package/lib/frames/frame-arg.d.ts +0 -24
- package/lib/frames/frame-arg.js +0 -81
- package/lib/frames/frame-array.d.ts +0 -15
- package/lib/frames/frame-array.js +0 -50
- package/lib/frames/frame-atom.d.ts +0 -17
- package/lib/frames/frame-atom.js +0 -52
- package/lib/frames/frame-comment.d.ts +0 -12
- package/lib/frames/frame-comment.js +0 -36
- package/lib/frames/frame-doc.d.ts +0 -9
- package/lib/frames/frame-doc.js +0 -31
- package/lib/frames/frame-expr.d.ts +0 -9
- package/lib/frames/frame-expr.js +0 -48
- package/lib/frames/frame-group.d.ts +0 -7
- package/lib/frames/frame-group.js +0 -39
- package/lib/frames/frame-lazy.d.ts +0 -13
- package/lib/frames/frame-lazy.js +0 -54
- package/lib/frames/frame-list.d.ts +0 -15
- package/lib/frames/frame-list.js +0 -51
- package/lib/frames/frame-name.d.ts +0 -12
- package/lib/frames/frame-name.js +0 -37
- package/lib/frames/frame-number.d.ts +0 -9
- package/lib/frames/frame-number.js +0 -31
- package/lib/frames/frame-string.d.ts +0 -14
- package/lib/frames/frame-string.js +0 -47
- package/lib/frames/frame-symbol.d.ts +0 -18
- package/lib/frames/frame-symbol.js +0 -64
- package/lib/frames/frame.d.ts +0 -22
- package/lib/frames/frame.js +0 -73
- package/lib/frames/meta-frame.d.ts +0 -26
- package/lib/frames/meta-frame.js +0 -85
- package/lib/frames.d.ts +0 -15
- package/lib/frames.js +0 -36
- package/lib/hc.d.ts +0 -0
- package/lib/hc.js +0 -13
- package/lib/index.d.ts +0 -3
- package/lib/index.js +0 -9
- package/lib/maml/tag.d.ts +0 -2
- package/lib/maml/tag.js +0 -19
- package/lib/maml.d.ts +0 -2
- package/lib/maml.js +0 -30
- package/lib/ops/frame-curry.d.ts +0 -9
- package/lib/ops/frame-curry.js +0 -31
- package/lib/ops/frame-ops.d.ts +0 -12
- package/lib/ops/frame-ops.js +0 -41
- package/lib/ops/iterators.d.ts +0 -2
- package/lib/ops/iterators.js +0 -12
- package/lib/ops.d.ts +0 -3
- package/lib/ops.js +0 -8
package/lib/src/index.js
ADDED
|
@@ -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==
|
package/lib/src/maml.js
ADDED
|
@@ -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.3';
|
|
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.include('docString');
|
|
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==
|