@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,48 @@
1
+ import { Kind, kindStr } from "./expressiondata";
2
+ export class Dictionary {
3
+ constructor(...pairs) {
4
+ this.keys = [];
5
+ this.v = [];
6
+ this.indexMap = {};
7
+ this.kind = Kind.Dictionary;
8
+ this.primitive = false;
9
+ for (const p of pairs) {
10
+ this.add(p.key, p.value);
11
+ }
12
+ }
13
+ coerceString() {
14
+ return kindStr(this.kind);
15
+ }
16
+ number() {
17
+ return NaN;
18
+ }
19
+ add(key, value) {
20
+ if (key.toLowerCase() in this.indexMap) {
21
+ return;
22
+ }
23
+ this.keys.push(key);
24
+ this.v.push(value);
25
+ this.indexMap[key.toLowerCase()] = this.v.length - 1;
26
+ }
27
+ get(key) {
28
+ const index = this.indexMap[key.toLowerCase()];
29
+ if (index === undefined) {
30
+ return undefined;
31
+ }
32
+ return this.v[index];
33
+ }
34
+ values() {
35
+ return this.v;
36
+ }
37
+ pairs() {
38
+ const result = [];
39
+ for (const key of this.keys) {
40
+ result.push({ key, value: this.v[this.indexMap[key.toLowerCase()]] });
41
+ }
42
+ return result;
43
+ }
44
+ }
45
+ export function isDictionary(x) {
46
+ return x.kind === Kind.Dictionary;
47
+ }
48
+ //# sourceMappingURL=dictionary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dictionary.js","sourceRoot":"","sources":["../../src/data/dictionary.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0C,IAAI,EAAE,OAAO,EAAO,MAAM,kBAAkB,CAAC;AAE9F,MAAM,OAAO,UAAU;IAKrB,YAAY,GAAG,KAAa;QAJpB,SAAI,GAAa,EAAE,CAAC;QACpB,MAAC,GAAqB,EAAE,CAAC;QACzB,aAAQ,GAA4B,EAAE,CAAC;QAQ/B,SAAI,GAAG,IAAI,CAAC,UAAU,CAAC;QAEhC,cAAS,GAAG,KAAK,CAAC;QAPvB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;YACrB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;SAC1B;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,GAAW,EAAE,KAAqB;QACpC,IAAI,GAAG,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;YACtC,OAAO;SACR;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACvD,CAAC;IAED,GAAG,CAAC,GAAW;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/C,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,OAAO,SAAS,CAAC;SAClB;QAED,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,CAAC,CAAC;IAChB,CAAC;IAED,KAAK;QACH,MAAM,MAAM,GAAW,EAAE,CAAC;QAE1B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE;YAC3B,MAAM,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC;SACrE;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED,MAAM,UAAU,YAAY,CAAC,CAAiB;IAC5C,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC;AACpC,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { Dictionary } from "./dictionary";
2
+ import { Null } from "./null";
3
+ import { Array } from "./array";
4
+ import { StringData } from "./string";
5
+ import { NumberData } from "./number";
6
+ import { BooleanData } from "./boolean";
7
+ export declare enum Kind {
8
+ String = 0,
9
+ Array = 1,
10
+ Dictionary = 2,
11
+ Boolean = 3,
12
+ Number = 4,
13
+ CaseSensitiveDictionary = 5,
14
+ Null = 6
15
+ }
16
+ export declare function kindStr(k: Kind): string;
17
+ export interface ExpressionDataInterface {
18
+ kind: Kind;
19
+ primitive: boolean;
20
+ coerceString(): string;
21
+ number(): number;
22
+ }
23
+ export type ExpressionData = Array | Dictionary | StringData | BooleanData | NumberData | Null;
24
+ export type Pair = {
25
+ key: string;
26
+ value: ExpressionData;
27
+ };
28
+ //# sourceMappingURL=expressiondata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expressiondata.d.ts","sourceRoot":"","sources":["../../src/data/expressiondata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AACxC,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AACpC,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AACpC,OAAO,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AAEtC,oBAAY,IAAI;IACd,MAAM,IAAI;IACV,KAAK,IAAA;IACL,UAAU,IAAA;IACV,OAAO,IAAA;IACP,MAAM,IAAA;IACN,uBAAuB,IAAA;IACvB,IAAI,IAAA;CACL;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAiBvC;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,OAAO,CAAC;IAEnB,YAAY,IAAI,MAAM,CAAC;IAEvB,MAAM,IAAI,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,IAAI,CAAC;AAE/F,MAAM,MAAM,IAAI,GAAG;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,cAAc,CAAC;CACvB,CAAC"}
@@ -0,0 +1,28 @@
1
+ export var Kind;
2
+ (function (Kind) {
3
+ Kind[Kind["String"] = 0] = "String";
4
+ Kind[Kind["Array"] = 1] = "Array";
5
+ Kind[Kind["Dictionary"] = 2] = "Dictionary";
6
+ Kind[Kind["Boolean"] = 3] = "Boolean";
7
+ Kind[Kind["Number"] = 4] = "Number";
8
+ Kind[Kind["CaseSensitiveDictionary"] = 5] = "CaseSensitiveDictionary";
9
+ Kind[Kind["Null"] = 6] = "Null";
10
+ })(Kind || (Kind = {}));
11
+ export function kindStr(k) {
12
+ switch (k) {
13
+ case Kind.Array:
14
+ return "Array";
15
+ case Kind.Boolean:
16
+ return "Boolean";
17
+ case Kind.Null:
18
+ return "Null";
19
+ case Kind.Number:
20
+ return "Number";
21
+ case Kind.Dictionary:
22
+ return "Object";
23
+ case Kind.String:
24
+ return "String";
25
+ }
26
+ return "unknown";
27
+ }
28
+ //# sourceMappingURL=expressiondata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expressiondata.js","sourceRoot":"","sources":["../../src/data/expressiondata.ts"],"names":[],"mappings":"AAOA,MAAM,CAAN,IAAY,IAQX;AARD,WAAY,IAAI;IACd,mCAAU,CAAA;IACV,iCAAK,CAAA;IACL,2CAAU,CAAA;IACV,qCAAO,CAAA;IACP,mCAAM,CAAA;IACN,qEAAuB,CAAA;IACvB,+BAAI,CAAA;AACN,CAAC,EARW,IAAI,KAAJ,IAAI,QAQf;AAED,MAAM,UAAU,OAAO,CAAC,CAAO;IAC7B,QAAQ,CAAC,EAAE;QACT,KAAK,IAAI,CAAC,KAAK;YACb,OAAO,OAAO,CAAC;QACjB,KAAK,IAAI,CAAC,OAAO;YACf,OAAO,SAAS,CAAC;QACnB,KAAK,IAAI,CAAC,IAAI;YACZ,OAAO,MAAM,CAAC;QAChB,KAAK,IAAI,CAAC,MAAM;YACd,OAAO,QAAQ,CAAC;QAClB,KAAK,IAAI,CAAC,UAAU;YAClB,OAAO,QAAQ,CAAC;QAClB,KAAK,IAAI,CAAC,MAAM;YACd,OAAO,QAAQ,CAAC;KACnB;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,10 @@
1
+ export { Array } from "./array";
2
+ export { BooleanData } from "./boolean";
3
+ export { Dictionary } from "./dictionary";
4
+ export { ExpressionData, Kind } from "./expressiondata";
5
+ export { Null } from "./null";
6
+ export { NumberData } from "./number";
7
+ export { replacer } from "./replacer";
8
+ export { reviver } from "./reviver";
9
+ export { StringData } from "./string";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AACtC,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AACxC,OAAO,EAAC,cAAc,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AACpC,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AACpC,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC"}
@@ -0,0 +1,10 @@
1
+ export { Array } from "./array";
2
+ export { BooleanData } from "./boolean";
3
+ export { Dictionary } from "./dictionary";
4
+ export { Kind } from "./expressiondata";
5
+ export { Null } from "./null";
6
+ export { NumberData } from "./number";
7
+ export { replacer } from "./replacer";
8
+ export { reviver } from "./reviver";
9
+ export { StringData } from "./string";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AACtC,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AACxC,OAAO,EAAiB,IAAI,EAAC,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AACpC,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AACpC,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { ExpressionDataInterface, Kind } from "./expressiondata";
2
+ export declare class Null implements ExpressionDataInterface {
3
+ readonly kind = Kind.Null;
4
+ primitive: boolean;
5
+ coerceString(): string;
6
+ number(): number;
7
+ }
8
+ //# sourceMappingURL=null.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"null.d.ts","sourceRoot":"","sources":["../../src/data/null.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,uBAAuB,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAC;AAE/D,qBAAa,IAAK,YAAW,uBAAuB;IAClD,SAAgB,IAAI,aAAa;IAE1B,SAAS,UAAQ;IAExB,YAAY,IAAI,MAAM;IAItB,MAAM,IAAI,MAAM;CAGjB"}
@@ -0,0 +1,14 @@
1
+ import { Kind } from "./expressiondata";
2
+ export class Null {
3
+ constructor() {
4
+ this.kind = Kind.Null;
5
+ this.primitive = true;
6
+ }
7
+ coerceString() {
8
+ return "";
9
+ }
10
+ number() {
11
+ return 0;
12
+ }
13
+ }
14
+ //# sourceMappingURL=null.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"null.js","sourceRoot":"","sources":["../../src/data/null.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,IAAI,EAAC,MAAM,kBAAkB,CAAC;AAE/D,MAAM,OAAO,IAAI;IAAjB;QACkB,SAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAE1B,cAAS,GAAG,IAAI,CAAC;IAS1B,CAAC;IAPC,YAAY;QACV,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM;QACJ,OAAO,CAAC,CAAC;IACX,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import { ExpressionDataInterface, Kind } from "./expressiondata";
2
+ export declare class NumberData implements ExpressionDataInterface {
3
+ readonly value: number;
4
+ constructor(value: number);
5
+ readonly kind = Kind.Number;
6
+ primitive: boolean;
7
+ coerceString(): string;
8
+ number(): number;
9
+ }
10
+ //# sourceMappingURL=number.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../src/data/number.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,uBAAuB,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAC;AAE/D,qBAAa,UAAW,YAAW,uBAAuB;aAC5B,KAAK,EAAE,MAAM;gBAAb,KAAK,EAAE,MAAM;IAEzC,SAAgB,IAAI,eAAe;IAE5B,SAAS,UAAQ;IAExB,YAAY,IAAI,MAAM;IAUtB,MAAM,IAAI,MAAM;CAGjB"}
@@ -0,0 +1,20 @@
1
+ import { Kind } from "./expressiondata";
2
+ export class NumberData {
3
+ constructor(value) {
4
+ this.value = value;
5
+ this.kind = Kind.Number;
6
+ this.primitive = true;
7
+ }
8
+ coerceString() {
9
+ if (this.value === 0) {
10
+ return "0";
11
+ }
12
+ // Workaround to limit the precision to at most 15 digits. Format the number to a string, then parse
13
+ // it back to a number to remove trailing zeroes to prevent numbers to be converted to 1.200000000...
14
+ return (+this.value.toFixed(15)).toString();
15
+ }
16
+ number() {
17
+ return this.value;
18
+ }
19
+ }
20
+ //# sourceMappingURL=number.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number.js","sourceRoot":"","sources":["../../src/data/number.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,IAAI,EAAC,MAAM,kBAAkB,CAAC;AAE/D,MAAM,OAAO,UAAU;IACrB,YAA4B,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;QAEzB,SAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QAE5B,cAAS,GAAG,IAAI,CAAC;IAJoB,CAAC;IAM7C,YAAY;QACV,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE;YACpB,OAAO,GAAG,CAAC;SACZ;QAED,oGAAoG;QACpG,qGAAqG;QACrG,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC9C,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Replacer can be passed to JSON.stringify to convert an ExpressionData object into plain JSON
3
+ *
4
+ * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#replacer
5
+ */
6
+ export declare function replacer(_key: string, value: unknown): unknown;
7
+ //# sourceMappingURL=replacer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replacer.d.ts","sourceRoot":"","sources":["../../src/data/replacer.ts"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAiC9D"}
@@ -0,0 +1,38 @@
1
+ import { Array } from "./array";
2
+ import { BooleanData } from "./boolean";
3
+ import { Dictionary } from "./dictionary";
4
+ import { Null } from "./null";
5
+ import { NumberData } from "./number";
6
+ import { StringData } from "./string";
7
+ /**
8
+ * Replacer can be passed to JSON.stringify to convert an ExpressionData object into plain JSON
9
+ *
10
+ * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#replacer
11
+ */
12
+ export function replacer(_key, value) {
13
+ if (value instanceof Null) {
14
+ return null;
15
+ }
16
+ if (value instanceof BooleanData) {
17
+ return value.value;
18
+ }
19
+ if (value instanceof NumberData) {
20
+ return value.number();
21
+ }
22
+ if (value instanceof StringData) {
23
+ return value.coerceString();
24
+ }
25
+ if (value instanceof Array) {
26
+ return value.values();
27
+ }
28
+ if (value instanceof Dictionary) {
29
+ const pairs = value.pairs();
30
+ const r = {};
31
+ for (const p of pairs) {
32
+ r[p.key] = p.value;
33
+ }
34
+ return r;
35
+ }
36
+ return value;
37
+ }
38
+ //# sourceMappingURL=replacer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replacer.js","sourceRoot":"","sources":["../../src/data/replacer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AACtC,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AACxC,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AACpC,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AAEpC;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,KAAc;IACnD,IAAI,KAAK,YAAY,IAAI,EAAE;QACzB,OAAO,IAAI,CAAC;KACb;IAED,IAAI,KAAK,YAAY,WAAW,EAAE;QAChC,OAAO,KAAK,CAAC,KAAK,CAAC;KACpB;IAED,IAAI,KAAK,YAAY,UAAU,EAAE;QAC/B,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;KACvB;IAED,IAAI,KAAK,YAAY,UAAU,EAAE;QAC/B,OAAO,KAAK,CAAC,YAAY,EAAE,CAAC;KAC7B;IAED,IAAI,KAAK,YAAY,KAAK,EAAE;QAC1B,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;KACvB;IAED,IAAI,KAAK,YAAY,UAAU,EAAE;QAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAE5B,MAAM,CAAC,GAA4B,EAAE,CAAC;QACtC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;YACrB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;SACpB;QAED,OAAO,CAAC,CAAC;KACV;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { ExpressionData } from "./expressiondata";
2
+ /**
3
+ * Reviver can be passed to `JSON.parse` to convert plain JSON into an `ExpressionData` object.
4
+ *
5
+ * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#reviver
6
+ */
7
+ export declare function reviver(_key: string, val: unknown): ExpressionData;
8
+ //# sourceMappingURL=reviver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviver.d.ts","sourceRoot":"","sources":["../../src/data/reviver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAKhD;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,cAAc,CAgClE"}
@@ -0,0 +1,37 @@
1
+ import { Array as dArray } from "./array";
2
+ import { BooleanData } from "./boolean";
3
+ import { Dictionary } from "./dictionary";
4
+ import { Null } from "./null";
5
+ import { NumberData } from "./number";
6
+ import { StringData } from "./string";
7
+ /**
8
+ * Reviver can be passed to `JSON.parse` to convert plain JSON into an `ExpressionData` object.
9
+ *
10
+ * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#reviver
11
+ */
12
+ export function reviver(_key, val) {
13
+ if (val === null) {
14
+ return new Null();
15
+ }
16
+ if (typeof val === "string") {
17
+ return new StringData(val);
18
+ }
19
+ if (typeof val === "number") {
20
+ return new NumberData(val);
21
+ }
22
+ if (typeof val === "boolean") {
23
+ return new BooleanData(val);
24
+ }
25
+ if (Array.isArray(val)) {
26
+ return new dArray(...val);
27
+ }
28
+ if (typeof val === "object") {
29
+ return new Dictionary(...Object.keys(val).map(k => ({
30
+ key: k,
31
+ value: val[k]
32
+ })));
33
+ }
34
+ // Pass through value
35
+ return val;
36
+ }
37
+ //# sourceMappingURL=reviver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviver.js","sourceRoot":"","sources":["../../src/data/reviver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,IAAI,MAAM,EAAC,MAAM,SAAS,CAAC;AACxC,OAAO,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AACtC,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AAExC,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AACpC,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AAEpC;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,GAAY;IAChD,IAAI,GAAG,KAAK,IAAI,EAAE;QAChB,OAAO,IAAI,IAAI,EAAE,CAAC;KACnB;IAED,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;QAC3B,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;KAC5B;IAED,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;QAC3B,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;KAC5B;IAED,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE;QAC5B,OAAO,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;KAC7B;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACtB,OAAO,IAAI,MAAM,CAAC,GAAI,GAAwB,CAAC,CAAC;KACjD;IAED,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;QAC3B,OAAO,IAAI,UAAU,CACnB,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5B,GAAG,EAAE,CAAC;YACN,KAAK,EAAE,GAAG,CAAC,CAAqB,CAAC;SAClC,CAAC,CAAC,CACJ,CAAC;KACH;IAED,qBAAqB;IACrB,OAAO,GAAqB,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { ExpressionDataInterface, Kind } from "./expressiondata";
2
+ export declare class StringData implements ExpressionDataInterface {
3
+ readonly value: string;
4
+ constructor(value: string);
5
+ readonly kind = Kind.String;
6
+ primitive: boolean;
7
+ coerceString(): string;
8
+ number(): number;
9
+ }
10
+ //# sourceMappingURL=string.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../../src/data/string.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,uBAAuB,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAC;AAE/D,qBAAa,UAAW,YAAW,uBAAuB;aAC5B,KAAK,EAAE,MAAM;gBAAb,KAAK,EAAE,MAAM;IAEzC,SAAgB,IAAI,eAAe;IAE5B,SAAS,UAAQ;IAExB,YAAY,IAAI,MAAM;IAItB,MAAM,IAAI,MAAM;CAGjB"}
@@ -0,0 +1,15 @@
1
+ import { Kind } from "./expressiondata";
2
+ export class StringData {
3
+ constructor(value) {
4
+ this.value = value;
5
+ this.kind = Kind.String;
6
+ this.primitive = true;
7
+ }
8
+ coerceString() {
9
+ return this.value;
10
+ }
11
+ number() {
12
+ return Number(this.value);
13
+ }
14
+ }
15
+ //# sourceMappingURL=string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.js","sourceRoot":"","sources":["../../src/data/string.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,IAAI,EAAC,MAAM,kBAAkB,CAAC;AAE/D,MAAM,OAAO,UAAU;IACrB,YAA4B,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;QAEzB,SAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QAE5B,cAAS,GAAG,IAAI,CAAC;IAJoB,CAAC;IAM7C,YAAY;QACV,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,MAAM;QACJ,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;CACF"}
@@ -0,0 +1,23 @@
1
+ import { Pos, Token } from "./lexer";
2
+ export declare const MAX_PARSER_DEPTH = 50;
3
+ export declare const MAX_EXPRESSION_LENGTH = 21000;
4
+ export declare enum ErrorType {
5
+ ErrorUnexpectedSymbol = 0,
6
+ ErrorUnrecognizedNamedValue = 1,
7
+ ErrorUnexpectedEndOfExpression = 2,
8
+ ErrorExceededMaxDepth = 3,
9
+ ErrorExceededMaxLength = 4,
10
+ ErrorTooFewParameters = 5,
11
+ ErrorTooManyParameters = 6,
12
+ ErrorUnrecognizedContext = 7,
13
+ ErrorUnrecognizedFunction = 8
14
+ }
15
+ export declare class ExpressionError extends Error {
16
+ private typ;
17
+ private tok;
18
+ constructor(typ: ErrorType, tok: Token);
19
+ pos: Pos;
20
+ }
21
+ export declare class ExpressionEvaluationError extends Error {
22
+ }
23
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAE,KAAK,EAAc,MAAM,SAAS,CAAC;AAEhD,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAE3C,oBAAY,SAAS;IACnB,qBAAqB,IAAA;IACrB,2BAA2B,IAAA;IAC3B,8BAA8B,IAAA;IAE9B,qBAAqB,IAAA;IACrB,sBAAsB,IAAA;IACtB,qBAAqB,IAAA;IACrB,sBAAsB,IAAA;IACtB,wBAAwB,IAAA;IACxB,yBAAyB,IAAA;CAC1B;AAED,qBAAa,eAAgB,SAAQ,KAAK;IAC5B,OAAO,CAAC,GAAG;IAAa,OAAO,CAAC,GAAG;gBAA3B,GAAG,EAAE,SAAS,EAAU,GAAG,EAAE,KAAK;IAM/C,GAAG,EAAE,GAAG,CAAC;CACjB;AA2BD,qBAAa,yBAA0B,SAAQ,KAAK;CAAG"}
package/dist/errors.js ADDED
@@ -0,0 +1,50 @@
1
+ import { tokenString } from "./lexer";
2
+ export const MAX_PARSER_DEPTH = 50;
3
+ export const MAX_EXPRESSION_LENGTH = 21000;
4
+ export var ErrorType;
5
+ (function (ErrorType) {
6
+ ErrorType[ErrorType["ErrorUnexpectedSymbol"] = 0] = "ErrorUnexpectedSymbol";
7
+ ErrorType[ErrorType["ErrorUnrecognizedNamedValue"] = 1] = "ErrorUnrecognizedNamedValue";
8
+ ErrorType[ErrorType["ErrorUnexpectedEndOfExpression"] = 2] = "ErrorUnexpectedEndOfExpression";
9
+ ErrorType[ErrorType["ErrorExceededMaxDepth"] = 3] = "ErrorExceededMaxDepth";
10
+ ErrorType[ErrorType["ErrorExceededMaxLength"] = 4] = "ErrorExceededMaxLength";
11
+ ErrorType[ErrorType["ErrorTooFewParameters"] = 5] = "ErrorTooFewParameters";
12
+ ErrorType[ErrorType["ErrorTooManyParameters"] = 6] = "ErrorTooManyParameters";
13
+ ErrorType[ErrorType["ErrorUnrecognizedContext"] = 7] = "ErrorUnrecognizedContext";
14
+ ErrorType[ErrorType["ErrorUnrecognizedFunction"] = 8] = "ErrorUnrecognizedFunction";
15
+ })(ErrorType || (ErrorType = {}));
16
+ export class ExpressionError extends Error {
17
+ constructor(typ, tok) {
18
+ super(`${errorDescription(typ)}: '${tokenString(tok)}'`);
19
+ this.typ = typ;
20
+ this.tok = tok;
21
+ this.pos = this.tok.range.start;
22
+ }
23
+ }
24
+ function errorDescription(typ) {
25
+ switch (typ) {
26
+ case ErrorType.ErrorUnexpectedEndOfExpression:
27
+ return "Unexpected end of expression";
28
+ case ErrorType.ErrorUnexpectedSymbol:
29
+ return "Unexpected symbol";
30
+ case ErrorType.ErrorUnrecognizedNamedValue:
31
+ return "Unrecognized named-value";
32
+ case ErrorType.ErrorExceededMaxDepth:
33
+ return `Exceeded max expression depth ${MAX_PARSER_DEPTH}`;
34
+ case ErrorType.ErrorExceededMaxLength:
35
+ return `Exceeded max expression length ${MAX_EXPRESSION_LENGTH}`;
36
+ case ErrorType.ErrorTooFewParameters:
37
+ return "Too few parameters supplied";
38
+ case ErrorType.ErrorTooManyParameters:
39
+ return "Too many parameters supplied";
40
+ case ErrorType.ErrorUnrecognizedContext:
41
+ return "Unrecognized named-value";
42
+ case ErrorType.ErrorUnrecognizedFunction:
43
+ return "Unrecognized function";
44
+ default: // Should never reach here.
45
+ return "Unknown error";
46
+ }
47
+ }
48
+ export class ExpressionEvaluationError extends Error {
49
+ }
50
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,WAAW,EAAC,MAAM,SAAS,CAAC;AAEhD,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAE3C,MAAM,CAAN,IAAY,SAWX;AAXD,WAAY,SAAS;IACnB,2EAAqB,CAAA;IACrB,uFAA2B,CAAA;IAC3B,6FAA8B,CAAA;IAE9B,2EAAqB,CAAA;IACrB,6EAAsB,CAAA;IACtB,2EAAqB,CAAA;IACrB,6EAAsB,CAAA;IACtB,iFAAwB,CAAA;IACxB,mFAAyB,CAAA;AAC3B,CAAC,EAXW,SAAS,KAAT,SAAS,QAWpB;AAED,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC,YAAoB,GAAc,EAAU,GAAU;QACpD,KAAK,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QADvC,QAAG,GAAH,GAAG,CAAW;QAAU,QAAG,GAAH,GAAG,CAAO;QAGpD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;IAClC,CAAC;CAGF;AAED,SAAS,gBAAgB,CAAC,GAAc;IACtC,QAAQ,GAAG,EAAE;QACX,KAAK,SAAS,CAAC,8BAA8B;YAC3C,OAAO,8BAA8B,CAAC;QACxC,KAAK,SAAS,CAAC,qBAAqB;YAClC,OAAO,mBAAmB,CAAC;QAC7B,KAAK,SAAS,CAAC,2BAA2B;YACxC,OAAO,0BAA0B,CAAC;QACpC,KAAK,SAAS,CAAC,qBAAqB;YAClC,OAAO,iCAAiC,gBAAgB,EAAE,CAAC;QAC7D,KAAK,SAAS,CAAC,sBAAsB;YACnC,OAAO,kCAAkC,qBAAqB,EAAE,CAAC;QACnE,KAAK,SAAS,CAAC,qBAAqB;YAClC,OAAO,6BAA6B,CAAC;QACvC,KAAK,SAAS,CAAC,sBAAsB;YACnC,OAAO,8BAA8B,CAAC;QACxC,KAAK,SAAS,CAAC,wBAAwB;YACrC,OAAO,0BAA0B,CAAC;QACpC,KAAK,SAAS,CAAC,yBAAyB;YACtC,OAAO,uBAAuB,CAAC;QACjC,SAAS,2BAA2B;YAClC,OAAO,eAAe,CAAC;KAC1B;AACH,CAAC;AAED,MAAM,OAAO,yBAA0B,SAAQ,KAAK;CAAG"}
@@ -0,0 +1,26 @@
1
+ import { Binary, ContextAccess, Expr, ExprVisitor, FunctionCall, Grouping, IndexAccess, Literal, Logical, Unary } from "./ast";
2
+ import * as data from "./data";
3
+ import { FunctionDefinition } from "./funcs/info";
4
+ export declare class Evaluator implements ExprVisitor<data.ExpressionData> {
5
+ private n;
6
+ private context;
7
+ private functions?;
8
+ /**
9
+ * Creates a new evaluator
10
+ * @param n Parsed expression to evaluate
11
+ * @param context Context data to use
12
+ * @param functions Optional map of function implementations. If given, these will be preferred over the built-in functions.
13
+ */
14
+ constructor(n: Expr, context: data.Dictionary, functions?: Map<string, FunctionDefinition> | undefined);
15
+ evaluate(): data.ExpressionData;
16
+ private eval;
17
+ visitLiteral(literal: Literal): data.ExpressionData;
18
+ visitUnary(unary: Unary): data.ExpressionData;
19
+ visitBinary(binary: Binary): data.ExpressionData;
20
+ visitLogical(logical: Logical): data.ExpressionData;
21
+ visitGrouping(grouping: Grouping): data.ExpressionData;
22
+ visitContextAccess(contextAccess: ContextAccess): data.ExpressionData;
23
+ visitIndexAccess(ia: IndexAccess): data.ExpressionData;
24
+ visitFunctionCall(functionCall: FunctionCall): data.ExpressionData;
25
+ }
26
+ //# sourceMappingURL=evaluator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../src/evaluator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,aAAa,EACb,IAAI,EACJ,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,OAAO,EACP,OAAO,EAEP,KAAK,EACN,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAG/B,OAAO,EAAC,kBAAkB,EAAC,MAAM,cAAc,CAAC;AAKhD,qBAAa,SAAU,YAAW,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC;IAOpD,OAAO,CAAC,CAAC;IAAQ,OAAO,CAAC,OAAO;IAAmB,OAAO,CAAC,SAAS,CAAC;IANjF;;;;;OAKG;gBACiB,CAAC,EAAE,IAAI,EAAU,OAAO,EAAE,IAAI,CAAC,UAAU,EAAU,SAAS,CAAC,6CAAiC;IAE3G,QAAQ,IAAI,IAAI,CAAC,cAAc;IAItC,OAAO,CAAC,IAAI;IAIZ,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC,cAAc;IAInD,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,cAAc;IAU7C,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,cAAc;IA2BhD,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC,cAAc;IAoBnD,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC,cAAc;IAItD,kBAAkB,CAAC,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC,cAAc;IAMrE,gBAAgB,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,CAAC,cAAc;IA8CtD,iBAAiB,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC,cAAc;CAUnE"}