@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
@@ -0,0 +1,191 @@
1
+ import { Star } from "./ast";
2
+ import * as data from "./data";
3
+ import { FilteredArray } from "./filtered_array";
4
+ import { wellKnownFunctions } from "./funcs";
5
+ import { idxHelper } from "./idxHelper";
6
+ import { TokenType } from "./lexer";
7
+ import { equals, falsy, greaterThan, lessThan, truthy } from "./result";
8
+ export class Evaluator {
9
+ /**
10
+ * Creates a new evaluator
11
+ * @param n Parsed expression to evaluate
12
+ * @param context Context data to use
13
+ * @param functions Optional map of function implementations. If given, these will be preferred over the built-in functions.
14
+ */
15
+ constructor(n, context, functions) {
16
+ this.n = n;
17
+ this.context = context;
18
+ this.functions = functions;
19
+ }
20
+ evaluate() {
21
+ return this.eval(this.n);
22
+ }
23
+ eval(n) {
24
+ return n.accept(this);
25
+ }
26
+ visitLiteral(literal) {
27
+ return literal.literal;
28
+ }
29
+ visitUnary(unary) {
30
+ const r = this.eval(unary.expr);
31
+ if (unary.operator.type === TokenType.BANG) {
32
+ return new data.BooleanData(falsy(r));
33
+ }
34
+ throw new Error(`unknown unary operator: ${unary.operator.lexeme}`);
35
+ }
36
+ visitBinary(binary) {
37
+ const left = this.eval(binary.left);
38
+ const right = this.eval(binary.right);
39
+ switch (binary.operator.type) {
40
+ case TokenType.EQUAL_EQUAL:
41
+ return new data.BooleanData(equals(left, right));
42
+ case TokenType.BANG_EQUAL:
43
+ return new data.BooleanData(!equals(left, right));
44
+ case TokenType.GREATER:
45
+ return new data.BooleanData(greaterThan(left, right));
46
+ case TokenType.GREATER_EQUAL:
47
+ return new data.BooleanData(equals(left, right) || greaterThan(left, right));
48
+ case TokenType.LESS:
49
+ return new data.BooleanData(lessThan(left, right));
50
+ case TokenType.LESS_EQUAL:
51
+ return new data.BooleanData(equals(left, right) || lessThan(left, right));
52
+ }
53
+ throw new Error(`unknown binary operator: ${binary.operator.lexeme}`);
54
+ }
55
+ visitLogical(logical) {
56
+ let result;
57
+ for (const arg of logical.args) {
58
+ result = this.eval(arg);
59
+ // Break?
60
+ if ((logical.operator.type === TokenType.AND && falsy(result)) ||
61
+ (logical.operator.type === TokenType.OR && truthy(result))) {
62
+ break;
63
+ }
64
+ }
65
+ // result is always assigned before we return here
66
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
67
+ return result;
68
+ }
69
+ visitGrouping(grouping) {
70
+ return this.eval(grouping.group);
71
+ }
72
+ visitContextAccess(contextAccess) {
73
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
74
+ const r = this.context.get(contextAccess.name.lexeme);
75
+ return r;
76
+ }
77
+ visitIndexAccess(ia) {
78
+ let idx;
79
+ if (ia.index instanceof Star) {
80
+ idx = new idxHelper(true, undefined);
81
+ }
82
+ else {
83
+ let idxResult;
84
+ try {
85
+ idxResult = this.eval(ia.index);
86
+ }
87
+ catch (e) {
88
+ throw new Error(`could not evaluate index for index access: ${e.message}`, { cause: e });
89
+ }
90
+ idx = new idxHelper(false, idxResult);
91
+ }
92
+ const objResult = this.eval(ia.expr);
93
+ let result;
94
+ switch (objResult.kind) {
95
+ case data.Kind.Array: {
96
+ const tobjResult = objResult;
97
+ if (tobjResult instanceof FilteredArray) {
98
+ result = filteredArrayAccess(tobjResult, idx);
99
+ }
100
+ else {
101
+ result = arrayAccess(tobjResult, idx);
102
+ }
103
+ break;
104
+ }
105
+ case data.Kind.Dictionary: {
106
+ const tobjResult = objResult;
107
+ result = objectAccess(tobjResult, idx);
108
+ break;
109
+ }
110
+ default:
111
+ if (idx.star) {
112
+ result = new FilteredArray();
113
+ }
114
+ else {
115
+ result = new data.Null();
116
+ }
117
+ }
118
+ return result;
119
+ }
120
+ visitFunctionCall(functionCall) {
121
+ // Evaluate arguments
122
+ const args = functionCall.args.map(arg => this.eval(arg));
123
+ // Get function definitions
124
+ const functionName = functionCall.functionName.lexeme.toLowerCase();
125
+ const f = this.functions?.get(functionName) || wellKnownFunctions[functionName];
126
+ return f.call(...args);
127
+ }
128
+ }
129
+ function filteredArrayAccess(fa, idx) {
130
+ const result = new FilteredArray();
131
+ for (const item of fa.values()) {
132
+ // Check the type of the nested item
133
+ switch (item.kind) {
134
+ case data.Kind.Dictionary: {
135
+ const ti = item;
136
+ if (idx.star) {
137
+ for (const v of ti.values()) {
138
+ result.add(v);
139
+ }
140
+ }
141
+ else if (idx.str !== undefined) {
142
+ const v = ti.get(idx.str);
143
+ if (v !== undefined) {
144
+ result.add(v);
145
+ }
146
+ }
147
+ break;
148
+ }
149
+ case data.Kind.Array: {
150
+ const ti = item;
151
+ if (idx.star) {
152
+ for (const v of ti.values()) {
153
+ result.add(v);
154
+ }
155
+ }
156
+ else if (idx.int !== undefined && idx.int < ti.values().length) {
157
+ result.add(ti.get(idx.int));
158
+ }
159
+ break;
160
+ }
161
+ }
162
+ }
163
+ return result;
164
+ }
165
+ function arrayAccess(a, idx) {
166
+ if (idx.star) {
167
+ const fa = new FilteredArray();
168
+ for (const item of a.values()) {
169
+ fa.add(item);
170
+ }
171
+ return fa;
172
+ }
173
+ if (idx.int !== undefined && idx.int < a.values().length) {
174
+ return a.get(idx.int);
175
+ }
176
+ return new data.Null();
177
+ }
178
+ function objectAccess(obj, idx) {
179
+ if (idx.star) {
180
+ const fa = new FilteredArray(...obj.values());
181
+ return fa;
182
+ }
183
+ if (idx.str !== undefined) {
184
+ const r = obj.get(idx.str);
185
+ if (r !== undefined) {
186
+ return r;
187
+ }
188
+ }
189
+ return new data.Null();
190
+ }
191
+ //# sourceMappingURL=evaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../src/evaluator.ts"],"names":[],"mappings":"AAAA,OAAO,EAUL,IAAI,EAEL,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAC,kBAAkB,EAAC,MAAM,SAAS,CAAC;AAE3C,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AACtC,OAAO,EAAC,SAAS,EAAC,MAAM,SAAS,CAAC;AAClC,OAAO,EAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAC,MAAM,UAAU,CAAC;AAEtE,MAAM,OAAO,SAAS;IACpB;;;;;OAKG;IACH,YAAoB,CAAO,EAAU,OAAwB,EAAU,SAA2C;QAA9F,MAAC,GAAD,CAAC,CAAM;QAAU,YAAO,GAAP,OAAO,CAAiB;QAAU,cAAS,GAAT,SAAS,CAAkC;IAAG,CAAC;IAE/G,QAAQ;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAEO,IAAI,CAAC,CAAO;QAClB,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,YAAY,CAAC,OAAgB;QAC3B,OAAO,OAAO,CAAC,OAAO,CAAC;IACzB,CAAC;IAED,UAAU,CAAC,KAAY;QACrB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEhC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAAE;YAC1C,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SACvC;QAED,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,WAAW,CAAC,MAAc;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEtC,QAAQ,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE;YAC5B,KAAK,SAAS,CAAC,WAAW;gBACxB,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;YAEnD,KAAK,SAAS,CAAC,UAAU;gBACvB,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;YAEpD,KAAK,SAAS,CAAC,OAAO;gBACpB,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;YAExD,KAAK,SAAS,CAAC,aAAa;gBAC1B,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;YAE/E,KAAK,SAAS,CAAC,IAAI;gBACjB,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;YAErD,KAAK,SAAS,CAAC,UAAU;gBACvB,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;SAC7E;QAED,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,YAAY,CAAC,OAAgB;QAC3B,IAAI,MAA2B,CAAC;QAEhC,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE;YAC9B,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAExB,SAAS;YACT,IACE,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC1D,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAC1D;gBACA,MAAM;aACP;SACF;QAED,kDAAkD;QAClD,oEAAoE;QACpE,OAAO,MAAO,CAAC;IACjB,CAAC;IAED,aAAa,CAAC,QAAkB;QAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,kBAAkB,CAAC,aAA4B;QAC7C,oEAAoE;QACpE,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAE,CAAC;QACvD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,gBAAgB,CAAC,EAAe;QAC9B,IAAI,GAAc,CAAC;QACnB,IAAI,EAAE,CAAC,KAAK,YAAY,IAAI,EAAE;YAC5B,GAAG,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;SACtC;aAAM;YACL,IAAI,SAA8B,CAAC;YACnC,IAAI;gBACF,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;aACjC;YAAC,OAAO,CAAC,EAAE;gBACV,MAAM,IAAI,KAAK,CAAC,8CAA+C,CAAW,CAAC,OAAO,EAAE,EAAE,EAAC,KAAK,EAAE,CAAC,EAAC,CAAC,CAAC;aACnG;YACD,GAAG,GAAG,IAAI,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;SACvC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAErC,IAAI,MAA2B,CAAC;QAChC,QAAQ,SAAS,CAAC,IAAI,EAAE;YACtB,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACpB,MAAM,UAAU,GAAG,SAAS,CAAC;gBAC7B,IAAI,UAAU,YAAY,aAAa,EAAE;oBACvC,MAAM,GAAG,mBAAmB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;iBAC/C;qBAAM;oBACL,MAAM,GAAG,WAAW,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;iBACvC;gBAED,MAAM;aACP;YAED,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACzB,MAAM,UAAU,GAAG,SAAS,CAAC;gBAC7B,MAAM,GAAG,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;gBACvC,MAAM;aACP;YAED;gBACE,IAAI,GAAG,CAAC,IAAI,EAAE;oBACZ,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;iBAC9B;qBAAM;oBACL,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;iBAC1B;SACJ;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,iBAAiB,CAAC,YAA0B;QAC1C,qBAAqB;QACrB,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAE1D,2BAA2B;QAC3B,MAAM,YAAY,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACpE,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,YAAY,CAAC,IAAI,kBAAkB,CAAC,YAAY,CAAC,CAAC;QAEhF,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACzB,CAAC;CACF;AAED,SAAS,mBAAmB,CAAC,EAAiB,EAAE,GAAc;IAC5D,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;IAEnC,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE;QAC9B,oCAAoC;QACpC,QAAQ,IAAI,CAAC,IAAI,EAAE;YACjB,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACzB,MAAM,EAAE,GAAG,IAAI,CAAC;gBAChB,IAAI,GAAG,CAAC,IAAI,EAAE;oBACZ,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE;wBAC3B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;qBACf;iBACF;qBAAM,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,EAAE;oBAChC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC1B,IAAI,CAAC,KAAK,SAAS,EAAE;wBACnB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;qBACf;iBACF;gBAED,MAAM;aACP;YAED,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACpB,MAAM,EAAE,GAAG,IAAI,CAAC;gBAChB,IAAI,GAAG,CAAC,IAAI,EAAE;oBACZ,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE;wBAC3B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;qBACf;iBACF;qBAAM,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE;oBAChE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;iBAC7B;gBAED,MAAM;aACP;SACF;KACF;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,CAAa,EAAE,GAAc;IAChD,IAAI,GAAG,CAAC,IAAI,EAAE;QACZ,MAAM,EAAE,GAAG,IAAI,aAAa,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YAC7B,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SACd;QAED,OAAO,EAAE,CAAC;KACX;IAED,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE;QACxD,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KACvB;IAED,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,YAAY,CAAC,GAAoB,EAAE,GAAc;IACxD,IAAI,GAAG,CAAC,IAAI,EAAE;QACZ,MAAM,EAAE,GAAG,IAAI,aAAa,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9C,OAAO,EAAE,CAAC;KACX;IAED,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,EAAE;QACzB,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,SAAS,EAAE;YACnB,OAAO,CAAC,CAAC;SACV;KACF;IAED,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import * as data from "./data";
2
+ export declare class FilteredArray extends data.Array {
3
+ }
4
+ //# sourceMappingURL=filtered_array.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filtered_array.d.ts","sourceRoot":"","sources":["../src/filtered_array.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAE/B,qBAAa,aAAc,SAAQ,IAAI,CAAC,KAAK;CAAG"}
@@ -0,0 +1,4 @@
1
+ import * as data from "./data";
2
+ export class FilteredArray extends data.Array {
3
+ }
4
+ //# sourceMappingURL=filtered_array.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filtered_array.js","sourceRoot":"","sources":["../src/filtered_array.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAE/B,MAAM,OAAO,aAAc,SAAQ,IAAI,CAAC,KAAK;CAAG"}
@@ -0,0 +1,3 @@
1
+ import { FunctionDefinition } from "./info";
2
+ export declare const contains: FunctionDefinition;
3
+ //# sourceMappingURL=contains.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contains.d.ts","sourceRoot":"","sources":["../../src/funcs/contains.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,kBAAkB,EAAC,MAAM,QAAQ,CAAC;AAE1C,eAAO,MAAM,QAAQ,EAAE,kBA+BtB,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { BooleanData, Kind } from "../data";
2
+ import { equals } from "../result";
3
+ export const contains = {
4
+ name: "contains",
5
+ description: "`contains( search, item )`\n\nReturns `true` if `search` contains `item`. If `search` is an array, this function returns `true` if the `item` is an element in the array. If `search` is a string, this function returns `true` if the `item` is a substring of `search`. This function is not case sensitive. Casts values to a string.",
6
+ minArgs: 2,
7
+ maxArgs: 2,
8
+ call: (...args) => {
9
+ const left = args[0];
10
+ const right = args[1];
11
+ if (left.primitive) {
12
+ const ls = left.coerceString();
13
+ if (right.primitive) {
14
+ const rs = right.coerceString();
15
+ return new BooleanData(ls.toLowerCase().includes(rs.toLowerCase()));
16
+ }
17
+ }
18
+ else if (left.kind === Kind.Array) {
19
+ const la = left;
20
+ if (la.values().length === 0) {
21
+ return new BooleanData(false);
22
+ }
23
+ for (const v of la.values()) {
24
+ if (equals(right, v)) {
25
+ return new BooleanData(true);
26
+ }
27
+ }
28
+ }
29
+ return new BooleanData(false);
30
+ }
31
+ };
32
+ //# sourceMappingURL=contains.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contains.js","sourceRoot":"","sources":["../../src/funcs/contains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAkB,IAAI,EAAC,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAC,MAAM,EAAC,MAAM,WAAW,CAAC;AAGjC,MAAM,CAAC,MAAM,QAAQ,GAAuB;IAC1C,IAAI,EAAE,UAAU;IAChB,WAAW,EACT,0UAA0U;IAC5U,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,CAAC,GAAG,IAAsB,EAAkB,EAAE;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEtB,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAC/B,IAAI,KAAK,CAAC,SAAS,EAAE;gBACnB,MAAM,EAAE,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;gBAChC,OAAO,IAAI,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;aACrE;SACF;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,EAAE;YACnC,MAAM,EAAE,GAAG,IAAI,CAAC;YAChB,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC5B,OAAO,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;aAC/B;YAED,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE;gBAC3B,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;oBACpB,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;iBAC9B;aACF;SACF;QAED,OAAO,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { FunctionDefinition } from "./info";
2
+ export declare const endswith: FunctionDefinition;
3
+ //# sourceMappingURL=endswith.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endswith.d.ts","sourceRoot":"","sources":["../../src/funcs/endswith.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,kBAAkB,EAAC,MAAM,QAAQ,CAAC;AAE1C,eAAO,MAAM,QAAQ,EAAE,kBAsBtB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { BooleanData } from "../data";
2
+ import { toUpperSpecial } from "../result";
3
+ export const endswith = {
4
+ name: "endsWith",
5
+ description: "`endsWith( searchString, searchValue )`\n\nReturns `true` if `searchString` ends with `searchValue`. This function is not case sensitive. Casts values to a string.",
6
+ minArgs: 2,
7
+ maxArgs: 2,
8
+ call: (...args) => {
9
+ const left = args[0];
10
+ if (!left.primitive) {
11
+ return new BooleanData(false);
12
+ }
13
+ const right = args[1];
14
+ if (!right.primitive) {
15
+ return new BooleanData(false);
16
+ }
17
+ const ls = toUpperSpecial(left.coerceString());
18
+ const rs = toUpperSpecial(right.coerceString());
19
+ return new BooleanData(ls.endsWith(rs));
20
+ }
21
+ };
22
+ //# sourceMappingURL=endswith.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endswith.js","sourceRoot":"","sources":["../../src/funcs/endswith.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAiB,MAAM,SAAS,CAAC;AACpD,OAAO,EAAC,cAAc,EAAC,MAAM,WAAW,CAAC;AAGzC,MAAM,CAAC,MAAM,QAAQ,GAAuB;IAC1C,IAAI,EAAE,UAAU;IAChB,WAAW,EACT,qKAAqK;IACvK,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,CAAC,GAAG,IAAsB,EAAkB,EAAE;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,OAAO,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;SAC/B;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;YACpB,OAAO,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;SAC/B;QAED,MAAM,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAC/C,MAAM,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;QAEhD,OAAO,IAAI,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { FunctionDefinition } from "./info";
2
+ export declare const format: FunctionDefinition;
3
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/funcs/format.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,kBAAkB,EAAC,MAAM,QAAQ,CAAC;AAE1C,eAAO,MAAM,MAAM,EAAE,kBAmEpB,CAAC"}
@@ -0,0 +1,95 @@
1
+ import { StringData } from "../data";
2
+ export const format = {
3
+ name: "format",
4
+ description: "`format( string, replaceValue0, replaceValue1, ..., replaceValueN)`\n\nReplaces values in the `string`, with the variable `replaceValueN`. Variables in the `string` are specified using the `{N}` syntax, where `N` is an integer. You must specify at least one `replaceValue` and `string`. There is no maximum for the number of variables (`replaceValueN`) you can use. Escape curly braces using double braces.",
5
+ minArgs: 1,
6
+ maxArgs: 255 /*MAX_ARGUMENTS*/,
7
+ call: (...args) => {
8
+ const fs = args[0].coerceString();
9
+ const result = [];
10
+ let index = 0;
11
+ while (index < fs.length) {
12
+ const lbrace = fs.indexOf("{", index);
13
+ const rbrace = fs.indexOf("}", index);
14
+ // Left brace
15
+ if (lbrace >= 0 && (rbrace < 0 || rbrace > lbrace)) {
16
+ // Escaped left brace
17
+ if (safeCharAt(fs, lbrace + 1) === "{") {
18
+ result.push(fs.substr(index, lbrace - index + 1));
19
+ index = lbrace + 2;
20
+ continue;
21
+ }
22
+ // Left brace, number, optional format specifiers, right brace
23
+ if (rbrace > lbrace + 1) {
24
+ const argIndex = readArgIndex(fs, lbrace + 1);
25
+ if (argIndex.success) {
26
+ // Check parameter count
27
+ if (1 + argIndex.result > args.length - 1) {
28
+ throw new Error(`The following format string references more arguments than were supplied: ${fs}`);
29
+ }
30
+ // Append the portion before the left brace
31
+ if (lbrace > index) {
32
+ result.push(fs.substr(index, lbrace - index));
33
+ }
34
+ // Append the arg
35
+ result.push(`${args[1 + argIndex.result].coerceString()}`);
36
+ index = rbrace + 1;
37
+ continue;
38
+ }
39
+ }
40
+ throw new Error(`The following format string is invalid: ${fs}`);
41
+ }
42
+ // Right brace
43
+ else if (rbrace >= 0) {
44
+ // Escaped right brace
45
+ if (safeCharAt(fs, rbrace + 1) === "}") {
46
+ result.push(fs.substr(index, rbrace - index + 1));
47
+ index = rbrace + 2;
48
+ }
49
+ else {
50
+ throw new Error(`The following format string is invalid: ${fs}`);
51
+ }
52
+ }
53
+ // Last segment
54
+ else {
55
+ result.push(fs.substr(index));
56
+ break;
57
+ }
58
+ }
59
+ return new StringData(result.join(""));
60
+ }
61
+ };
62
+ function safeCharAt(string, index) {
63
+ if (string.length > index) {
64
+ return string[index];
65
+ }
66
+ return "\0";
67
+ }
68
+ function readArgIndex(string, startIndex) {
69
+ // Count the number of digits
70
+ let length = 0;
71
+ for (;;) {
72
+ const nextChar = safeCharAt(string, startIndex + length);
73
+ if (nextChar >= "0" && nextChar <= "9") {
74
+ length++;
75
+ }
76
+ else {
77
+ break;
78
+ }
79
+ }
80
+ // Validate at least one digit
81
+ if (length < 1) {
82
+ return {
83
+ success: false
84
+ };
85
+ }
86
+ // Parse the number
87
+ const endIndex = startIndex + length - 1;
88
+ const result = parseInt(string.substr(startIndex, length));
89
+ return {
90
+ success: !isNaN(result),
91
+ result: result,
92
+ endIndex: endIndex
93
+ };
94
+ }
95
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/funcs/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { FunctionDefinition } from "./info";
2
+ export declare const fromjson: FunctionDefinition;
3
+ //# sourceMappingURL=fromjson.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fromjson.d.ts","sourceRoot":"","sources":["../../src/funcs/fromjson.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,kBAAkB,EAAC,MAAM,QAAQ,CAAC;AAE1C,eAAO,MAAM,QAAQ,EAAE,kBAoBtB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { reviver } from "../data/reviver";
2
+ import { ExpressionEvaluationError } from "../errors";
3
+ export const fromjson = {
4
+ name: "fromJson",
5
+ description: "`fromJSON(value)`\n\nReturns a JSON object or JSON data type for `value`. You can use this function to provide a JSON object as an evaluated expression or to convert environment variables from a string.",
6
+ minArgs: 1,
7
+ maxArgs: 1,
8
+ call: (...args) => {
9
+ const input = args[0];
10
+ const is = input.coerceString();
11
+ if (is.trim() === "") {
12
+ throw new Error("empty input");
13
+ }
14
+ try {
15
+ return JSON.parse(is, reviver);
16
+ }
17
+ catch (e) {
18
+ throw new ExpressionEvaluationError("Error parsing JSON when evaluating fromJson", { cause: e });
19
+ }
20
+ }
21
+ };
22
+ //# sourceMappingURL=fromjson.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fromjson.js","sourceRoot":"","sources":["../../src/funcs/fromjson.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAC,yBAAyB,EAAC,MAAM,WAAW,CAAC;AAGpD,MAAM,CAAC,MAAM,QAAQ,GAAuB;IAC1C,IAAI,EAAE,UAAU;IAChB,WAAW,EACT,4MAA4M;IAC9M,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,CAAC,GAAG,IAAsB,EAAkB,EAAE;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,EAAE,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;QAEhC,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACpB,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;SAChC;QAED,IAAI;YACF,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAmB,CAAC;SAClD;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,IAAI,yBAAyB,CAAC,6CAA6C,EAAE,EAAC,KAAK,EAAE,CAAC,EAAC,CAAC,CAAC;SAChG;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { ExpressionData } from "../data";
2
+ export interface FunctionInfo {
3
+ name: string;
4
+ description?: string;
5
+ minArgs: number;
6
+ maxArgs: number;
7
+ }
8
+ export interface FunctionDefinition extends FunctionInfo {
9
+ call: (...args: ExpressionData[]) => ExpressionData;
10
+ }
11
+ //# sourceMappingURL=info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../src/funcs/info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAC,MAAM,SAAS,CAAC;AAEvC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IAEb,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,cAAc,EAAE,KAAK,cAAc,CAAC;CACrD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/funcs/info.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { FunctionDefinition } from "./info";
2
+ export declare const join: FunctionDefinition;
3
+ //# sourceMappingURL=join.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"join.d.ts","sourceRoot":"","sources":["../../src/funcs/join.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,kBAAkB,EAAC,MAAM,QAAQ,CAAC;AAE1C,eAAO,MAAM,IAAI,EAAE,kBA+BlB,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { Kind, StringData } from "../data";
2
+ export const join = {
3
+ name: "join",
4
+ description: "`join( array, optionalSeparator )`\n\nThe value for `array` can be an array or a string. All values in `array` are concatenated into a string. If you provide `optionalSeparator`, it is inserted between the concatenated values. Otherwise, the default separator `,` is used. Casts values to a string.",
5
+ minArgs: 1,
6
+ maxArgs: 2,
7
+ call: (...args) => {
8
+ // Primitive
9
+ if (args[0].primitive) {
10
+ return new StringData(args[0].coerceString());
11
+ }
12
+ // Array
13
+ if (args[0].kind === Kind.Array) {
14
+ // Separator
15
+ let separator = ",";
16
+ if (args.length > 1 && args[1].primitive) {
17
+ separator = args[1].coerceString();
18
+ }
19
+ // Convert items to strings
20
+ return new StringData(args[0]
21
+ .values()
22
+ .map(item => item.coerceString())
23
+ .join(separator));
24
+ }
25
+ return new StringData("");
26
+ }
27
+ };
28
+ //# sourceMappingURL=join.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"join.js","sourceRoot":"","sources":["../../src/funcs/join.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,IAAI,EAAE,UAAU,EAAC,MAAM,SAAS,CAAC;AAGzD,MAAM,CAAC,MAAM,IAAI,GAAuB;IACtC,IAAI,EAAE,MAAM;IACZ,WAAW,EACT,4SAA4S;IAC9S,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,CAAC,GAAG,IAAsB,EAAkB,EAAE;QAClD,YAAY;QACZ,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE;YACrB,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;SAC/C;QAED,QAAQ;QACR,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,EAAE;YAC/B,YAAY;YACZ,IAAI,SAAS,GAAG,GAAG,CAAC;YACpB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE;gBACxC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;aACpC;YAED,2BAA2B;YAC3B,OAAO,IAAI,UAAU,CACnB,IAAI,CAAC,CAAC,CAAC;iBACJ,MAAM,EAAE;iBACR,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;iBAChC,IAAI,CAAC,SAAS,CAAC,CACnB,CAAC;SACH;QAED,OAAO,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { FunctionDefinition } from "./info";
2
+ export declare const startswith: FunctionDefinition;
3
+ //# sourceMappingURL=startswith.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startswith.d.ts","sourceRoot":"","sources":["../../src/funcs/startswith.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,kBAAkB,EAAC,MAAM,QAAQ,CAAC;AAE1C,eAAO,MAAM,UAAU,EAAE,kBAsBxB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { BooleanData } from "../data";
2
+ import { toUpperSpecial } from "../result";
3
+ export const startswith = {
4
+ name: "startsWith",
5
+ description: "`startsWith( searchString, searchValue )`\n\nReturns `true` when `searchString` starts with `searchValue`. This function is not case sensitive. Casts values to a string.",
6
+ minArgs: 2,
7
+ maxArgs: 2,
8
+ call: (...args) => {
9
+ const left = args[0];
10
+ if (!left.primitive) {
11
+ return new BooleanData(false);
12
+ }
13
+ const right = args[1];
14
+ if (!right.primitive) {
15
+ return new BooleanData(false);
16
+ }
17
+ const ls = toUpperSpecial(left.coerceString());
18
+ const rs = toUpperSpecial(right.coerceString());
19
+ return new BooleanData(ls.startsWith(rs));
20
+ }
21
+ };
22
+ //# sourceMappingURL=startswith.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startswith.js","sourceRoot":"","sources":["../../src/funcs/startswith.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAiB,MAAM,SAAS,CAAC;AACpD,OAAO,EAAC,cAAc,EAAC,MAAM,WAAW,CAAC;AAGzC,MAAM,CAAC,MAAM,UAAU,GAAuB;IAC5C,IAAI,EAAE,YAAY;IAClB,WAAW,EACT,2KAA2K;IAC7K,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,CAAC,GAAG,IAAsB,EAAkB,EAAE;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,OAAO,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;SAC/B;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;YACpB,OAAO,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;SAC/B;QAED,MAAM,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAC/C,MAAM,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;QAEhD,OAAO,IAAI,WAAW,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { FunctionDefinition } from "./info";
2
+ export declare const tojson: FunctionDefinition;
3
+ //# sourceMappingURL=tojson.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tojson.d.ts","sourceRoot":"","sources":["../../src/funcs/tojson.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,kBAAkB,EAAC,MAAM,QAAQ,CAAC;AAE1C,eAAO,MAAM,MAAM,EAAE,kBASpB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { StringData } from "../data";
2
+ import { replacer } from "../data/replacer";
3
+ export const tojson = {
4
+ name: "toJson",
5
+ description: "`toJSON(value)`\n\nReturns a pretty-print JSON representation of `value`. You can use this function to debug the information provided in contexts.",
6
+ minArgs: 1,
7
+ maxArgs: 1,
8
+ call: (...args) => {
9
+ return new StringData(JSON.stringify(args[0], replacer, " "));
10
+ }
11
+ };
12
+ //# sourceMappingURL=tojson.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tojson.js","sourceRoot":"","sources":["../../src/funcs/tojson.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,UAAU,EAAC,MAAM,SAAS,CAAC;AACnD,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAC;AAG1C,MAAM,CAAC,MAAM,MAAM,GAAuB;IACxC,IAAI,EAAE,QAAQ;IACd,WAAW,EACT,oJAAoJ;IACtJ,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,CAAC,GAAG,IAAsB,EAAkB,EAAE;QAClD,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IACjE,CAAC;CACF,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { FunctionDefinition, FunctionInfo } from "./funcs/info";
2
+ import { Token } from "./lexer";
3
+ export type ParseContext = {
4
+ allowUnknownKeywords: boolean;
5
+ extensionContexts: Map<string, boolean>;
6
+ extensionFunctions: Map<string, FunctionInfo>;
7
+ };
8
+ export declare const wellKnownFunctions: {
9
+ [name: string]: FunctionDefinition;
10
+ };
11
+ export declare function validateFunction(context: ParseContext, identifier: Token, argCount: number): void;
12
+ //# sourceMappingURL=funcs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"funcs.d.ts","sourceRoot":"","sources":["../src/funcs.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,kBAAkB,EAAE,YAAY,EAAC,MAAM,cAAc,CAAC;AAI9D,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAC;AAE9B,MAAM,MAAM,YAAY,GAAG;IACzB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAC/C,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE;IAAC,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAAA;CAQnE,CAAC;AAKF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,QAyB1F"}