@actions/expressions 0.2.0

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 (123) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +95 -0
  3. package/dist/ast.d.ts +66 -0
  4. package/dist/ast.d.ts.map +1 -0
  5. package/dist/ast.js +87 -0
  6. package/dist/ast.js.map +1 -0
  7. package/dist/completion/descriptionDictionary.d.ts +15 -0
  8. package/dist/completion/descriptionDictionary.d.ts.map +1 -0
  9. package/dist/completion/descriptionDictionary.js +33 -0
  10. package/dist/completion/descriptionDictionary.js.map +1 -0
  11. package/dist/completion.d.ts +26 -0
  12. package/dist/completion.d.ts.map +1 -0
  13. package/dist/completion.js +124 -0
  14. package/dist/completion.js.map +1 -0
  15. package/dist/data/array.d.ts +13 -0
  16. package/dist/data/array.d.ts.map +1 -0
  17. package/dist/data/array.js +27 -0
  18. package/dist/data/array.js.map +1 -0
  19. package/dist/data/boolean.d.ts +10 -0
  20. package/dist/data/boolean.d.ts.map +1 -0
  21. package/dist/data/boolean.js +21 -0
  22. package/dist/data/boolean.js.map +1 -0
  23. package/dist/data/dictionary.d.ts +17 -0
  24. package/dist/data/dictionary.d.ts.map +1 -0
  25. package/dist/data/dictionary.js +48 -0
  26. package/dist/data/dictionary.js.map +1 -0
  27. package/dist/data/expressiondata.d.ts +28 -0
  28. package/dist/data/expressiondata.d.ts.map +1 -0
  29. package/dist/data/expressiondata.js +28 -0
  30. package/dist/data/expressiondata.js.map +1 -0
  31. package/dist/data/index.d.ts +10 -0
  32. package/dist/data/index.d.ts.map +1 -0
  33. package/dist/data/index.js +10 -0
  34. package/dist/data/index.js.map +1 -0
  35. package/dist/data/null.d.ts +8 -0
  36. package/dist/data/null.d.ts.map +1 -0
  37. package/dist/data/null.js +14 -0
  38. package/dist/data/null.js.map +1 -0
  39. package/dist/data/number.d.ts +10 -0
  40. package/dist/data/number.d.ts.map +1 -0
  41. package/dist/data/number.js +20 -0
  42. package/dist/data/number.js.map +1 -0
  43. package/dist/data/replacer.d.ts +7 -0
  44. package/dist/data/replacer.d.ts.map +1 -0
  45. package/dist/data/replacer.js +38 -0
  46. package/dist/data/replacer.js.map +1 -0
  47. package/dist/data/reviver.d.ts +8 -0
  48. package/dist/data/reviver.d.ts.map +1 -0
  49. package/dist/data/reviver.js +37 -0
  50. package/dist/data/reviver.js.map +1 -0
  51. package/dist/data/string.d.ts +10 -0
  52. package/dist/data/string.d.ts.map +1 -0
  53. package/dist/data/string.js +15 -0
  54. package/dist/data/string.js.map +1 -0
  55. package/dist/errors.d.ts +23 -0
  56. package/dist/errors.d.ts.map +1 -0
  57. package/dist/errors.js +50 -0
  58. package/dist/errors.js.map +1 -0
  59. package/dist/evaluator.d.ts +26 -0
  60. package/dist/evaluator.d.ts.map +1 -0
  61. package/dist/evaluator.js +191 -0
  62. package/dist/evaluator.js.map +1 -0
  63. package/dist/filtered_array.d.ts +4 -0
  64. package/dist/filtered_array.d.ts.map +1 -0
  65. package/dist/filtered_array.js +4 -0
  66. package/dist/filtered_array.js.map +1 -0
  67. package/dist/funcs/contains.d.ts +3 -0
  68. package/dist/funcs/contains.d.ts.map +1 -0
  69. package/dist/funcs/contains.js +32 -0
  70. package/dist/funcs/contains.js.map +1 -0
  71. package/dist/funcs/endswith.d.ts +3 -0
  72. package/dist/funcs/endswith.d.ts.map +1 -0
  73. package/dist/funcs/endswith.js +22 -0
  74. package/dist/funcs/endswith.js.map +1 -0
  75. package/dist/funcs/format.d.ts +3 -0
  76. package/dist/funcs/format.d.ts.map +1 -0
  77. package/dist/funcs/format.js +95 -0
  78. package/dist/funcs/format.js.map +1 -0
  79. package/dist/funcs/fromjson.d.ts +3 -0
  80. package/dist/funcs/fromjson.d.ts.map +1 -0
  81. package/dist/funcs/fromjson.js +22 -0
  82. package/dist/funcs/fromjson.js.map +1 -0
  83. package/dist/funcs/info.d.ts +11 -0
  84. package/dist/funcs/info.d.ts.map +1 -0
  85. package/dist/funcs/info.js +2 -0
  86. package/dist/funcs/info.js.map +1 -0
  87. package/dist/funcs/join.d.ts +3 -0
  88. package/dist/funcs/join.d.ts.map +1 -0
  89. package/dist/funcs/join.js +28 -0
  90. package/dist/funcs/join.js.map +1 -0
  91. package/dist/funcs/startswith.d.ts +3 -0
  92. package/dist/funcs/startswith.d.ts.map +1 -0
  93. package/dist/funcs/startswith.js +22 -0
  94. package/dist/funcs/startswith.js.map +1 -0
  95. package/dist/funcs/tojson.d.ts +3 -0
  96. package/dist/funcs/tojson.d.ts.map +1 -0
  97. package/dist/funcs/tojson.js +12 -0
  98. package/dist/funcs/tojson.js.map +1 -0
  99. package/dist/funcs.d.ts +12 -0
  100. package/dist/funcs.d.ts.map +1 -0
  101. package/dist/funcs.js +43 -0
  102. package/dist/funcs.js.map +1 -0
  103. package/dist/idxHelper.d.ts +8 -0
  104. package/dist/idxHelper.d.ts.map +1 -0
  105. package/dist/idxHelper.js +19 -0
  106. package/dist/idxHelper.js.map +1 -0
  107. package/dist/index.d.ts +10 -0
  108. package/dist/index.d.ts.map +1 -0
  109. package/dist/index.js +10 -0
  110. package/dist/index.js.map +1 -0
  111. package/dist/lexer.d.ts +68 -0
  112. package/dist/lexer.d.ts.map +1 -0
  113. package/dist/lexer.js +324 -0
  114. package/dist/lexer.js.map +1 -0
  115. package/dist/parser.d.ts +40 -0
  116. package/dist/parser.d.ts.map +1 -0
  117. package/dist/parser.js +284 -0
  118. package/dist/parser.js.map +1 -0
  119. package/dist/result.d.ts +9 -0
  120. package/dist/result.d.ts.map +1 -0
  121. package/dist/result.js +190 -0
  122. package/dist/result.js.map +1 -0
  123. package/package.json +64 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright GitHub
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,95 @@
1
+ # actions/expressions
2
+
3
+ `@actions/expressions` is a library to parse and evaluate GitHub Actions [expressions](https://docs.github.com/actions/learn-github-actions/expressions).
4
+
5
+ ## Installation
6
+
7
+ The [package](https://www.npmjs.com/package/@actions/expressions) contains TypeScript types and compiled ECMAScript modules.
8
+
9
+ ```bash
10
+ npm install @actions/expressions
11
+ ```
12
+
13
+ ## Usage
14
+
15
+ ### Simple example
16
+
17
+ ```ts
18
+ import { Parser, Lexer, Evaluator, data } from '@actions/expressions';
19
+
20
+ const lexer = new Lexer("1 == 2");
21
+ const lr = lexer.lex();
22
+
23
+ const parser = new Parser(lr.tokens, [], []);
24
+ const expr = parser.parse();
25
+
26
+ const evaluator = new Evaluator(expr, new data.Dictionary());
27
+ const result = evaluator.evaluate();
28
+
29
+ console.log(result.coerceString()) // false
30
+ ```
31
+
32
+ ### With context data
33
+
34
+ ```ts
35
+ import { Parser, Lexer, Evaluator, data } from '@actions/expressions';
36
+
37
+ const lexer = new Lexer("'monalisa' == context.name");
38
+ const lr = lexer.lex();
39
+
40
+ const parser = new Parser(lr.tokens, ["context"], []);
41
+ const expr = parser.parse();
42
+
43
+ const evaluator = new Evaluator(expr, new data.Dictionary([{
44
+ key: "context"
45
+ value: new data.Dictionary([{
46
+ key: "name"
47
+ value: new data.StringData("monalisa")
48
+ }])
49
+ }]));
50
+ const result = evaluator.evaluate();
51
+
52
+ console.log(result.coerceString()) // true
53
+ ```
54
+
55
+ ## Contributing
56
+
57
+ See [CONTRIBUTING.md](../CONTRIBUTING.md) at the root of the repository for general guidelines and recommendations.
58
+
59
+ This project is just one of multiple implementations of the GitHub Actions Expressions language. We therefore cannot accept contributions that add new language features or significantly change the behavior of existing language features. If you would like to propose a change to the language itself, please use our [Community Forum](https://github.com/community/community/discussions/categories/actions-and-packages).
60
+
61
+ If you do want to contribute, please run [prettier](https://prettier.io/) to format your code and add unit tests as appropriate before submitting your PR. [./testdata](./testdata) contains test cases that all implementations should pass, please also make sure those tests are still passing.
62
+
63
+ ### Build
64
+
65
+ ```bash
66
+ npm run build
67
+ ```
68
+
69
+ or to watch for changes
70
+
71
+ ```bash
72
+ npm run watch
73
+ ```
74
+
75
+ ### Test
76
+
77
+ ```bash
78
+ npm test
79
+ ```
80
+
81
+ or to watch for changes and run tests:
82
+
83
+ ```bash
84
+ npm run test-watch
85
+ ```
86
+
87
+ ### Lint
88
+
89
+ ```bash
90
+ npm run format-check
91
+ ```
92
+
93
+ ## License
94
+
95
+ This project is licensed under the terms of the MIT open source license. Please refer to [MIT](../LICENSE) for the full terms.
package/dist/ast.d.ts ADDED
@@ -0,0 +1,66 @@
1
+ import { ExpressionData } from "./data";
2
+ import { Token } from "./lexer";
3
+ export interface ExprVisitor<R> {
4
+ visitLiteral(literal: Literal): R;
5
+ visitUnary(unary: Unary): R;
6
+ visitBinary(binary: Binary): R;
7
+ visitLogical(binary: Logical): R;
8
+ visitGrouping(grouping: Grouping): R;
9
+ visitContextAccess(contextAccess: ContextAccess): R;
10
+ visitIndexAccess(indexAccess: IndexAccess): R;
11
+ visitFunctionCall(functionCall: FunctionCall): R;
12
+ }
13
+ export declare abstract class Expr {
14
+ abstract accept<R>(v: ExprVisitor<R>): R;
15
+ }
16
+ export declare class Literal extends Expr {
17
+ literal: ExpressionData;
18
+ token: Token;
19
+ constructor(literal: ExpressionData, token: Token);
20
+ accept<R>(v: ExprVisitor<R>): R;
21
+ }
22
+ export declare class Unary extends Expr {
23
+ operator: Token;
24
+ expr: Expr;
25
+ constructor(operator: Token, expr: Expr);
26
+ accept<R>(v: ExprVisitor<R>): R;
27
+ }
28
+ export declare class FunctionCall extends Expr {
29
+ functionName: Token;
30
+ args: Expr[];
31
+ constructor(functionName: Token, args: Expr[]);
32
+ accept<R>(v: ExprVisitor<R>): R;
33
+ }
34
+ export declare class Binary extends Expr {
35
+ left: Expr;
36
+ operator: Token;
37
+ right: Expr;
38
+ constructor(left: Expr, operator: Token, right: Expr);
39
+ accept<R>(v: ExprVisitor<R>): R;
40
+ }
41
+ export declare class Logical extends Expr {
42
+ operator: Token;
43
+ args: Expr[];
44
+ constructor(operator: Token, args: Expr[]);
45
+ accept<R>(v: ExprVisitor<R>): R;
46
+ }
47
+ export declare class Grouping extends Expr {
48
+ group: Expr;
49
+ constructor(group: Expr);
50
+ accept<R>(v: ExprVisitor<R>): R;
51
+ }
52
+ export declare class ContextAccess extends Expr {
53
+ name: Token;
54
+ constructor(name: Token);
55
+ accept<R>(v: ExprVisitor<R>): R;
56
+ }
57
+ export declare class IndexAccess extends Expr {
58
+ expr: Expr;
59
+ index: Expr;
60
+ constructor(expr: Expr, index: Expr);
61
+ accept<R>(v: ExprVisitor<R>): R;
62
+ }
63
+ export declare class Star extends Expr {
64
+ accept<R>(): R;
65
+ }
66
+ //# sourceMappingURL=ast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../src/ast.ts"],"names":[],"mappings":"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"}
package/dist/ast.js ADDED
@@ -0,0 +1,87 @@
1
+ export class Expr {
2
+ }
3
+ export class Literal extends Expr {
4
+ constructor(literal, token) {
5
+ super();
6
+ this.literal = literal;
7
+ this.token = token;
8
+ }
9
+ accept(v) {
10
+ return v.visitLiteral(this);
11
+ }
12
+ }
13
+ export class Unary extends Expr {
14
+ constructor(operator, expr) {
15
+ super();
16
+ this.operator = operator;
17
+ this.expr = expr;
18
+ }
19
+ accept(v) {
20
+ return v.visitUnary(this);
21
+ }
22
+ }
23
+ export class FunctionCall extends Expr {
24
+ constructor(functionName, args) {
25
+ super();
26
+ this.functionName = functionName;
27
+ this.args = args;
28
+ }
29
+ accept(v) {
30
+ return v.visitFunctionCall(this);
31
+ }
32
+ }
33
+ export class Binary extends Expr {
34
+ constructor(left, operator, right) {
35
+ super();
36
+ this.left = left;
37
+ this.operator = operator;
38
+ this.right = right;
39
+ }
40
+ accept(v) {
41
+ return v.visitBinary(this);
42
+ }
43
+ }
44
+ export class Logical extends Expr {
45
+ constructor(operator, args) {
46
+ super();
47
+ this.operator = operator;
48
+ this.args = args;
49
+ }
50
+ accept(v) {
51
+ return v.visitLogical(this);
52
+ }
53
+ }
54
+ export class Grouping extends Expr {
55
+ constructor(group) {
56
+ super();
57
+ this.group = group;
58
+ }
59
+ accept(v) {
60
+ return v.visitGrouping(this);
61
+ }
62
+ }
63
+ export class ContextAccess extends Expr {
64
+ constructor(name) {
65
+ super();
66
+ this.name = name;
67
+ }
68
+ accept(v) {
69
+ return v.visitContextAccess(this);
70
+ }
71
+ }
72
+ export class IndexAccess extends Expr {
73
+ constructor(expr, index) {
74
+ super();
75
+ this.expr = expr;
76
+ this.index = index;
77
+ }
78
+ accept(v) {
79
+ return v.visitIndexAccess(this);
80
+ }
81
+ }
82
+ export class Star extends Expr {
83
+ accept() {
84
+ throw new Error("Method not implemented.");
85
+ }
86
+ }
87
+ //# sourceMappingURL=ast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast.js","sourceRoot":"","sources":["../src/ast.ts"],"names":[],"mappings":"AAcA,MAAM,OAAgB,IAAI;CAEzB;AAED,MAAM,OAAO,OAAQ,SAAQ,IAAI;IAC/B,YAAmB,OAAuB,EAAS,KAAY;QAC7D,KAAK,EAAE,CAAC;QADS,YAAO,GAAP,OAAO,CAAgB;QAAS,UAAK,GAAL,KAAK,CAAO;IAE/D,CAAC;IAED,MAAM,CAAI,CAAiB;QACzB,OAAO,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,KAAM,SAAQ,IAAI;IAC7B,YAAmB,QAAe,EAAS,IAAU;QACnD,KAAK,EAAE,CAAC;QADS,aAAQ,GAAR,QAAQ,CAAO;QAAS,SAAI,GAAJ,IAAI,CAAM;IAErD,CAAC;IAED,MAAM,CAAI,CAAiB;QACzB,OAAO,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,IAAI;IACpC,YAAmB,YAAmB,EAAS,IAAY;QACzD,KAAK,EAAE,CAAC;QADS,iBAAY,GAAZ,YAAY,CAAO;QAAS,SAAI,GAAJ,IAAI,CAAQ;IAE3D,CAAC;IAED,MAAM,CAAI,CAAiB;QACzB,OAAO,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;CACF;AAED,MAAM,OAAO,MAAO,SAAQ,IAAI;IAC9B,YAAmB,IAAU,EAAS,QAAe,EAAS,KAAW;QACvE,KAAK,EAAE,CAAC;QADS,SAAI,GAAJ,IAAI,CAAM;QAAS,aAAQ,GAAR,QAAQ,CAAO;QAAS,UAAK,GAAL,KAAK,CAAM;IAEzE,CAAC;IAED,MAAM,CAAI,CAAiB;QACzB,OAAO,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,OAAO,OAAQ,SAAQ,IAAI;IAC/B,YAAmB,QAAe,EAAS,IAAY;QACrD,KAAK,EAAE,CAAC;QADS,aAAQ,GAAR,QAAQ,CAAO;QAAS,SAAI,GAAJ,IAAI,CAAQ;IAEvD,CAAC;IAED,MAAM,CAAI,CAAiB;QACzB,OAAO,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,QAAS,SAAQ,IAAI;IAChC,YAAmB,KAAW;QAC5B,KAAK,EAAE,CAAC;QADS,UAAK,GAAL,KAAK,CAAM;IAE9B,CAAC;IAED,MAAM,CAAI,CAAiB;QACzB,OAAO,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,IAAI;IACrC,YAAmB,IAAW;QAC5B,KAAK,EAAE,CAAC;QADS,SAAI,GAAJ,IAAI,CAAO;IAE9B,CAAC;IAED,MAAM,CAAI,CAAiB;QACzB,OAAO,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,IAAI;IACnC,YAAmB,IAAU,EAAS,KAAW;QAC/C,KAAK,EAAE,CAAC;QADS,SAAI,GAAJ,IAAI,CAAM;QAAS,UAAK,GAAL,KAAK,CAAM;IAEjD,CAAC;IAED,MAAM,CAAI,CAAiB;QACzB,OAAO,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;CACF;AAED,MAAM,OAAO,IAAK,SAAQ,IAAI;IAC5B,MAAM;QACJ,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import { Dictionary } from "../data/dictionary";
2
+ import { ExpressionData, Pair } from "../data/expressiondata";
3
+ export type DescriptionPair = Pair & {
4
+ description?: string;
5
+ };
6
+ export declare function isDescriptionDictionary(x: ExpressionData): x is DescriptionDictionary;
7
+ export declare class DescriptionDictionary extends Dictionary {
8
+ private readonly descriptions;
9
+ complete: boolean;
10
+ constructor(...pairs: DescriptionPair[]);
11
+ add(key: string, value: ExpressionData, description?: string): void;
12
+ pairs(): DescriptionPair[];
13
+ getDescription(key: string): string | undefined;
14
+ }
15
+ //# sourceMappingURL=descriptionDictionary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"descriptionDictionary.d.ts","sourceRoot":"","sources":["../../src/completion/descriptionDictionary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAC,cAAc,EAAQ,IAAI,EAAC,MAAM,wBAAwB,CAAC;AAElE,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAC,CAAC;AAE5D,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,cAAc,GAAG,CAAC,IAAI,qBAAqB,CAErF;AAED,qBAAa,qBAAsB,SAAQ,UAAU;IACnD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IACnD,QAAQ,UAAQ;gBAEX,GAAG,KAAK,EAAE,eAAe,EAAE;IAQ9B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;IAYnE,KAAK,IAAI,eAAe,EAAE;IAKnC,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAGhD"}
@@ -0,0 +1,33 @@
1
+ import { Dictionary } from "../data/dictionary";
2
+ import { Kind } from "../data/expressiondata";
3
+ export function isDescriptionDictionary(x) {
4
+ return x.kind === Kind.Dictionary && x instanceof DescriptionDictionary;
5
+ }
6
+ export class DescriptionDictionary extends Dictionary {
7
+ constructor(...pairs) {
8
+ super();
9
+ this.descriptions = new Map();
10
+ this.complete = true;
11
+ for (const p of pairs) {
12
+ this.add(p.key, p.value, p.description);
13
+ }
14
+ }
15
+ add(key, value, description) {
16
+ if (this.get(key) !== undefined) {
17
+ // Key already added, ignore
18
+ return;
19
+ }
20
+ super.add(key, value);
21
+ if (description) {
22
+ this.descriptions.set(key, description);
23
+ }
24
+ }
25
+ pairs() {
26
+ const pairs = super.pairs();
27
+ return pairs.map(p => ({ ...p, description: this.descriptions.get(p.key) }));
28
+ }
29
+ getDescription(key) {
30
+ return this.descriptions.get(key);
31
+ }
32
+ }
33
+ //# sourceMappingURL=descriptionDictionary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"descriptionDictionary.js","sourceRoot":"","sources":["../../src/completion/descriptionDictionary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAiB,IAAI,EAAO,MAAM,wBAAwB,CAAC;AAIlE,MAAM,UAAU,uBAAuB,CAAC,CAAiB;IACvD,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,IAAI,CAAC,YAAY,qBAAqB,CAAC;AAC1E,CAAC;AAED,MAAM,OAAO,qBAAsB,SAAQ,UAAU;IAInD,YAAY,GAAG,KAAwB;QACrC,KAAK,EAAE,CAAC;QAJO,iBAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;QACnD,aAAQ,GAAG,IAAI,CAAC;QAKrB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;YACrB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;SACzC;IACH,CAAC;IAEQ,GAAG,CAAC,GAAW,EAAE,KAAqB,EAAE,WAAoB;QACnE,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE;YAC/B,4BAA4B;YAC5B,OAAO;SACR;QAED,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACtB,IAAI,WAAW,EAAE;YACf,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;SACzC;IACH,CAAC;IAEQ,KAAK;QACZ,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,GAAG,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,cAAc,CAAC,GAAW;QACxB,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;CACF"}
@@ -0,0 +1,26 @@
1
+ import { Dictionary } from "./data/dictionary";
2
+ import { FunctionDefinition, FunctionInfo } from "./funcs/info";
3
+ import { Token } from "./lexer";
4
+ export type CompletionItem = {
5
+ label: string;
6
+ description?: string;
7
+ function: boolean;
8
+ };
9
+ /**
10
+ * Complete returns a list of completion items for the given expression.
11
+ * The main functionality is auto-completing functions and context access:
12
+ * We can only provide assistance if the input is in one of the following forms (with | denoting the cursor position):
13
+ * - context.path.inp| or context.path['inp| -- auto-complete context access
14
+ * - context.path.| or context.path['| -- auto-complete context access
15
+ * - toJS| -- auto-complete function call or top-level
16
+ * - | -- auto-complete function call or top-level context access
17
+ *
18
+ * @param input Input expression
19
+ * @param context Context available for the expression
20
+ * @param extensionFunctions List of functions available
21
+ * @param functions Optional map of functions to use during evaluation
22
+ * @returns Array of completion items
23
+ */
24
+ export declare function complete(input: string, context: Dictionary, extensionFunctions: FunctionInfo[], functions?: Map<string, FunctionDefinition>): CompletionItem[];
25
+ export declare function trimTokenVector(tokenVector: Token[]): Token[];
26
+ //# sourceMappingURL=completion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../src/completion.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,UAAU,EAAe,MAAM,mBAAmB,CAAC;AAI3D,OAAO,EAAC,kBAAkB,EAAE,YAAY,EAAC,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAQ,KAAK,EAAY,MAAM,SAAS,CAAC;AAGhD,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,UAAU,EACnB,kBAAkB,EAAE,YAAY,EAAE,EAClC,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAC1C,cAAc,EAAE,CAqDlB;AA6CD,wBAAgB,eAAe,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAqC7D"}
@@ -0,0 +1,124 @@
1
+ import { isDictionary } from "./data/dictionary";
2
+ import { Evaluator } from "./evaluator";
3
+ import { wellKnownFunctions } from "./funcs";
4
+ import { Lexer, TokenType } from "./lexer";
5
+ import { Parser } from "./parser";
6
+ /**
7
+ * Complete returns a list of completion items for the given expression.
8
+ * The main functionality is auto-completing functions and context access:
9
+ * We can only provide assistance if the input is in one of the following forms (with | denoting the cursor position):
10
+ * - context.path.inp| or context.path['inp| -- auto-complete context access
11
+ * - context.path.| or context.path['| -- auto-complete context access
12
+ * - toJS| -- auto-complete function call or top-level
13
+ * - | -- auto-complete function call or top-level context access
14
+ *
15
+ * @param input Input expression
16
+ * @param context Context available for the expression
17
+ * @param extensionFunctions List of functions available
18
+ * @param functions Optional map of functions to use during evaluation
19
+ * @returns Array of completion items
20
+ */
21
+ export function complete(input, context, extensionFunctions, functions) {
22
+ // Lex
23
+ const lexer = new Lexer(input);
24
+ const lexResult = lexer.lex();
25
+ // Find interesting part of the tokenVector. For example, for an expression like `github.actor == env.actor.log|`, we are
26
+ // only interested in the `env.actor.log` part for auto-completion
27
+ const tokenInputVector = trimTokenVector(lexResult.tokens);
28
+ // Start by skipping the EOF token
29
+ let tokenIdx = tokenInputVector.length - 2;
30
+ if (tokenIdx >= 0) {
31
+ switch (tokenInputVector[tokenIdx].type) {
32
+ // If there is a (partial) identifier under the cursor, ignore that
33
+ case TokenType.IDENTIFIER:
34
+ tokenIdx--;
35
+ break;
36
+ case TokenType.STRING:
37
+ // TODO: Support string for `context.name['test|`
38
+ return [];
39
+ }
40
+ }
41
+ if (tokenIdx < 0) {
42
+ // Vector only contains the EOF token. Suggest functions and root context access
43
+ const result = contextKeys(context);
44
+ // Merge with functions
45
+ result.push(...functionItems(extensionFunctions));
46
+ return result;
47
+ }
48
+ // Determine path that led to the last token
49
+ // Use parser & evaluator to determine context to complete.
50
+ const pathTokenVector = tokenInputVector.slice(0, tokenIdx);
51
+ // Include the original EOF token to make the parser happy
52
+ pathTokenVector.push(tokenInputVector[tokenInputVector.length - 1]);
53
+ const p = new Parser(pathTokenVector, context.pairs().map(x => x.key), extensionFunctions);
54
+ const expr = p.parse();
55
+ const ev = new Evaluator(expr, context, functions);
56
+ const result = ev.evaluate();
57
+ return contextKeys(result);
58
+ }
59
+ function functionItems(extensionFunctions) {
60
+ const result = [];
61
+ for (const fdef of [...Object.values(wellKnownFunctions), ...extensionFunctions]) {
62
+ result.push({
63
+ label: fdef.name,
64
+ description: fdef.description,
65
+ function: true
66
+ });
67
+ }
68
+ // Sort functions
69
+ result.sort((a, b) => a.label.localeCompare(b.label));
70
+ return result;
71
+ }
72
+ function contextKeys(context) {
73
+ if (isDictionary(context)) {
74
+ return (context
75
+ .pairs()
76
+ .map(x => completionItemFromContext(x))
77
+ // Sort contexts
78
+ .sort((a, b) => a.label.localeCompare(b.label)));
79
+ }
80
+ return [];
81
+ }
82
+ function completionItemFromContext(pair) {
83
+ const context = pair.key.toString();
84
+ const parenIndex = context.indexOf("(");
85
+ const isFunc = parenIndex >= 0 && context.indexOf(")") >= 0;
86
+ return {
87
+ label: isFunc ? context.substring(0, parenIndex) : context,
88
+ description: pair.description,
89
+ function: isFunc
90
+ };
91
+ }
92
+ export function trimTokenVector(tokenVector) {
93
+ let tokenIdx = tokenVector.length;
94
+ let openParen = 0;
95
+ while (tokenIdx > 0) {
96
+ const token = tokenVector[tokenIdx - 1];
97
+ switch (token.type) {
98
+ case TokenType.LEFT_PAREN:
99
+ if (openParen == 0) {
100
+ // Encountered an open parenthesis without a closing first, stop here
101
+ break;
102
+ }
103
+ openParen--;
104
+ tokenIdx--;
105
+ continue;
106
+ case TokenType.RIGHT_PAREN:
107
+ openParen++;
108
+ tokenIdx--;
109
+ continue;
110
+ case TokenType.IDENTIFIER:
111
+ case TokenType.DOT:
112
+ case TokenType.EOF:
113
+ case TokenType.LEFT_BRACKET:
114
+ case TokenType.RIGHT_BRACKET:
115
+ case TokenType.STRING:
116
+ tokenIdx--;
117
+ continue;
118
+ }
119
+ break;
120
+ }
121
+ // Only keep the part of the token vector we're interested in
122
+ return tokenVector.slice(tokenIdx);
123
+ }
124
+ //# sourceMappingURL=completion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.js","sourceRoot":"","sources":["../src/completion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { ExpressionData, ExpressionDataInterface, Kind } from "./expressiondata";
2
+ export declare class Array implements ExpressionDataInterface {
3
+ private v;
4
+ constructor(...data: ExpressionData[]);
5
+ readonly kind = Kind.Array;
6
+ primitive: boolean;
7
+ coerceString(): string;
8
+ number(): number;
9
+ add(value: ExpressionData): void;
10
+ get(index: number): ExpressionData;
11
+ values(): ExpressionData[];
12
+ }
13
+ //# sourceMappingURL=array.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../src/data/array.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,uBAAuB,EAAE,IAAI,EAAU,MAAM,kBAAkB,CAAC;AAExF,qBAAa,KAAM,YAAW,uBAAuB;IACnD,OAAO,CAAC,CAAC,CAAwB;gBAErB,GAAG,IAAI,EAAE,cAAc,EAAE;IAMrC,SAAgB,IAAI,cAAc;IAE3B,SAAS,UAAS;IAEzB,YAAY,IAAI,MAAM;IAItB,MAAM,IAAI,MAAM;IAIhB,GAAG,CAAC,KAAK,EAAE,cAAc;IAIzB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc;IAIlC,MAAM,IAAI,cAAc,EAAE;CAG3B"}
@@ -0,0 +1,27 @@
1
+ import { Kind, kindStr } from "./expressiondata";
2
+ export class Array {
3
+ constructor(...data) {
4
+ this.v = [];
5
+ this.kind = Kind.Array;
6
+ this.primitive = false;
7
+ for (const d of data) {
8
+ this.add(d);
9
+ }
10
+ }
11
+ coerceString() {
12
+ return kindStr(this.kind);
13
+ }
14
+ number() {
15
+ return NaN;
16
+ }
17
+ add(value) {
18
+ this.v.push(value);
19
+ }
20
+ get(index) {
21
+ return this.v[index];
22
+ }
23
+ values() {
24
+ return this.v;
25
+ }
26
+ }
27
+ //# sourceMappingURL=array.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.js","sourceRoot":"","sources":["../../src/data/array.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0C,IAAI,EAAE,OAAO,EAAC,MAAM,kBAAkB,CAAC;AAExF,MAAM,OAAO,KAAK;IAGhB,YAAY,GAAG,IAAsB;QAF7B,MAAC,GAAqB,EAAE,CAAC;QAQjB,SAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QAE3B,cAAS,GAAG,KAAK,CAAC;QAPvB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;YACpB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACb;IACH,CAAC;IAMD,YAAY;QACV,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM;QACJ,OAAO,GAAG,CAAC;IACb,CAAC;IAED,GAAG,CAAC,KAAqB;QACvB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,GAAG,CAAC,KAAa;QACf,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,CAAC,CAAC;IAChB,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import { ExpressionDataInterface, Kind } from "./expressiondata";
2
+ export declare class BooleanData implements ExpressionDataInterface {
3
+ readonly value: boolean;
4
+ constructor(value: boolean);
5
+ readonly kind = Kind.Boolean;
6
+ primitive: boolean;
7
+ coerceString(): string;
8
+ number(): number;
9
+ }
10
+ //# sourceMappingURL=boolean.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boolean.d.ts","sourceRoot":"","sources":["../../src/data/boolean.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,uBAAuB,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAC;AAE/D,qBAAa,WAAY,YAAW,uBAAuB;aAC7B,KAAK,EAAE,OAAO;gBAAd,KAAK,EAAE,OAAO;IAE1C,SAAgB,IAAI,gBAAgB;IAE7B,SAAS,UAAQ;IAExB,YAAY,IAAI,MAAM;IAQtB,MAAM,IAAI,MAAM;CAOjB"}
@@ -0,0 +1,21 @@
1
+ import { Kind } from "./expressiondata";
2
+ export class BooleanData {
3
+ constructor(value) {
4
+ this.value = value;
5
+ this.kind = Kind.Boolean;
6
+ this.primitive = true;
7
+ }
8
+ coerceString() {
9
+ if (this.value) {
10
+ return "true";
11
+ }
12
+ return "false";
13
+ }
14
+ number() {
15
+ if (this.value) {
16
+ return 1;
17
+ }
18
+ return 0;
19
+ }
20
+ }
21
+ //# sourceMappingURL=boolean.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boolean.js","sourceRoot":"","sources":["../../src/data/boolean.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,IAAI,EAAC,MAAM,kBAAkB,CAAC;AAE/D,MAAM,OAAO,WAAW;IACtB,YAA4B,KAAc;QAAd,UAAK,GAAL,KAAK,CAAS;QAE1B,SAAI,GAAG,IAAI,CAAC,OAAO,CAAC;QAE7B,cAAS,GAAG,IAAI,CAAC;IAJqB,CAAC;IAM9C,YAAY;QACV,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,OAAO,MAAM,CAAC;SACf;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,OAAO,CAAC,CAAC;SACV;QAED,OAAO,CAAC,CAAC;IACX,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ import { ExpressionData, ExpressionDataInterface, Kind, Pair } from "./expressiondata";
2
+ export declare class Dictionary implements ExpressionDataInterface {
3
+ private keys;
4
+ private v;
5
+ private indexMap;
6
+ constructor(...pairs: Pair[]);
7
+ readonly kind = Kind.Dictionary;
8
+ primitive: boolean;
9
+ coerceString(): string;
10
+ number(): number;
11
+ add(key: string, value: ExpressionData): void;
12
+ get(key: string): ExpressionData | undefined;
13
+ values(): ExpressionData[];
14
+ pairs(): Pair[];
15
+ }
16
+ export declare function isDictionary(x: ExpressionData): x is Dictionary;
17
+ //# sourceMappingURL=dictionary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dictionary.d.ts","sourceRoot":"","sources":["../../src/data/dictionary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,uBAAuB,EAAE,IAAI,EAAW,IAAI,EAAC,MAAM,kBAAkB,CAAC;AAE9F,qBAAa,UAAW,YAAW,uBAAuB;IACxD,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,CAAC,CAAwB;IACjC,OAAO,CAAC,QAAQ,CAA+B;gBAEnC,GAAG,KAAK,EAAE,IAAI,EAAE;IAM5B,SAAgB,IAAI,mBAAmB;IAEhC,SAAS,UAAS;IAEzB,YAAY,IAAI,MAAM;IAItB,MAAM,IAAI,MAAM;IAIhB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc;IAUtC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAS5C,MAAM,IAAI,cAAc,EAAE;IAI1B,KAAK,IAAI,IAAI,EAAE;CAShB;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,cAAc,GAAG,CAAC,IAAI,UAAU,CAE/D"}