@bessemer/cornerstone 0.5.29 → 0.5.31

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 (40) hide show
  1. package/dist/expression/core-expression.d.ts +42 -0
  2. package/dist/expression/core-expression.d.ts.map +1 -0
  3. package/dist/expression/core-expression.js +129 -0
  4. package/dist/expression/core-expression.js.map +1 -0
  5. package/dist/expression/expression-mapper.d.ts.map +1 -1
  6. package/dist/expression/expression-mapper.js +2 -1
  7. package/dist/expression/expression-mapper.js.map +1 -1
  8. package/dist/expression/expression.d.ts +18 -22
  9. package/dist/expression/expression.d.ts.map +1 -1
  10. package/dist/expression/expression.js +34 -92
  11. package/dist/expression/expression.js.map +1 -1
  12. package/dist/expression/numeric-expression.d.ts +5 -6
  13. package/dist/expression/numeric-expression.d.ts.map +1 -1
  14. package/dist/expression/numeric-expression.js +9 -9
  15. package/dist/expression/numeric-expression.js.map +1 -1
  16. package/dist/expression.d.ts +1 -2
  17. package/dist/expression.d.ts.map +1 -1
  18. package/dist/expression.js +0 -2
  19. package/dist/expression.js.map +1 -1
  20. package/dist/sql/sql-expression-parser.d.ts +11 -0
  21. package/dist/sql/sql-expression-parser.d.ts.map +1 -0
  22. package/dist/sql/sql-expression-parser.js +108 -0
  23. package/dist/sql/sql-expression-parser.js.map +1 -0
  24. package/dist/sql/sql.d.ts +7 -0
  25. package/dist/sql/sql.d.ts.map +1 -0
  26. package/dist/sql/sql.js +19 -0
  27. package/dist/sql/sql.js.map +1 -0
  28. package/dist/sql.d.ts +6 -0
  29. package/dist/sql.d.ts.map +1 -0
  30. package/dist/sql.js +6 -0
  31. package/dist/sql.js.map +1 -0
  32. package/package.json +1 -1
  33. package/dist/expression/basic-expression.d.ts +0 -35
  34. package/dist/expression/basic-expression.d.ts.map +0 -1
  35. package/dist/expression/basic-expression.js +0 -53
  36. package/dist/expression/basic-expression.js.map +0 -1
  37. package/dist/expression/sql-expression-parser.d.ts +0 -8
  38. package/dist/expression/sql-expression-parser.d.ts.map +0 -1
  39. package/dist/expression/sql-expression-parser.js +0 -51
  40. package/dist/expression/sql-expression-parser.js.map +0 -1
@@ -0,0 +1,42 @@
1
+ import { Expression } from '@bessemer/cornerstone/expression';
2
+ import { BasicType } from '@bessemer/cornerstone/types';
3
+ import { Signatures } from '@bessemer/cornerstone';
4
+ export declare const ValueExpression: import("@bessemer/cornerstone/expression").ExpressionDefinition<unknown, [value: unknown], {
5
+ value: unknown;
6
+ }>;
7
+ export declare const VariableExpression: import("@bessemer/cornerstone/expression").ExpressionDefinition<{}, [name: string], Expression<{}> & {
8
+ name: string;
9
+ }>;
10
+ export declare const NotExpression: import("@bessemer/cornerstone/expression").ExpressionDefinition<boolean, [value: Expression<boolean>], Expression<boolean> & {
11
+ value: Expression<boolean>;
12
+ }>;
13
+ export declare const AndExpression: import("@bessemer/cornerstone/expression").ExpressionDefinition<boolean, [operands: Expression<boolean>[]], Expression<boolean> & {
14
+ operands: Expression<boolean>[];
15
+ }>;
16
+ export declare const OrExpression: import("@bessemer/cornerstone/expression").ExpressionDefinition<boolean, [operands: Expression<boolean>[]], Expression<boolean> & {
17
+ operands: Expression<boolean>[];
18
+ }>;
19
+ export declare const EqualsExpression: import("@bessemer/cornerstone/expression").ExpressionDefinition<boolean, [operands: Expression<Signatures.Signable>[]], Expression<boolean> & {
20
+ operands: Expression<Signatures.Signable>[];
21
+ }>;
22
+ export declare const ContainsExpression: import("@bessemer/cornerstone/expression").ExpressionDefinition<boolean, [collection: Expression<Signatures.Signable[]>, operands: Expression<Signatures.Signable>[]], Expression<boolean> & {
23
+ collection: Expression<Signatures.Signable[]>;
24
+ operands: Expression<Signatures.Signable>[];
25
+ }>;
26
+ export declare const LessThanExpression: import("@bessemer/cornerstone/expression").ExpressionDefinition<boolean, [left: Expression<BasicType>, right: Expression<BasicType>], Expression<boolean> & {
27
+ left: Expression<BasicType>;
28
+ right: Expression<BasicType>;
29
+ }>;
30
+ export declare const LessThanOrEqualExpression: import("@bessemer/cornerstone/expression").ExpressionDefinition<boolean, [left: Expression<BasicType>, right: Expression<BasicType>], Expression<boolean> & {
31
+ left: Expression<BasicType>;
32
+ right: Expression<BasicType>;
33
+ }>;
34
+ export declare const GreaterThanExpression: import("@bessemer/cornerstone/expression").ExpressionDefinition<boolean, [left: Expression<BasicType>, right: Expression<BasicType>], Expression<boolean> & {
35
+ left: Expression<BasicType>;
36
+ right: Expression<BasicType>;
37
+ }>;
38
+ export declare const GreaterThanOrEqualExpression: import("@bessemer/cornerstone/expression").ExpressionDefinition<boolean, [left: Expression<BasicType>, right: Expression<BasicType>], Expression<boolean> & {
39
+ left: Expression<BasicType>;
40
+ right: Expression<BasicType>;
41
+ }>;
42
+ //# sourceMappingURL=core-expression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-expression.d.ts","sourceRoot":"","sources":["../../src/expression/core-expression.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AACvD,OAAO,EAAkC,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAGlF,eAAO,MAAM,eAAe;;EAQ1B,CAAA;AAEF,eAAO,MAAM,kBAAkB;;EAU7B,CAAA;AAEF,eAAO,MAAM,aAAa;;EAQxB,CAAA;AAEF,eAAO,MAAM,aAAa;;EAUxB,CAAA;AAEF,eAAO,MAAM,YAAY;;EAUvB,CAAA;AAEF,eAAO,MAAM,gBAAgB;;EAe3B,CAAA;AAEF,eAAO,MAAM,kBAAkB;;;EAU7B,CAAA;AAEF,eAAO,MAAM,kBAAkB;;;EAQ7B,CAAA;AAEF,eAAO,MAAM,yBAAyB;;;EAQpC,CAAA;AAEF,eAAO,MAAM,qBAAqB;;;EAQhC,CAAA;AAEF,eAAO,MAAM,4BAA4B;;;EAQvC,CAAA"}
@@ -0,0 +1,129 @@
1
+ // src/expression/core-expression.ts
2
+ import { defineExpression } from "@bessemer/cornerstone/expression/internal";
3
+ import { Arrays, Objects, Preconditions, Signatures } from "@bessemer/cornerstone";
4
+ var ValueExpression = defineExpression({
5
+ expressionKey: "Value",
6
+ builder: (value) => {
7
+ return { value };
8
+ },
9
+ resolver: ({ value }, evaluate, context) => {
10
+ return value;
11
+ }
12
+ });
13
+ var VariableExpression = defineExpression({
14
+ expressionKey: "Variable",
15
+ builder: (name) => {
16
+ return { name };
17
+ },
18
+ resolver: ({ name }, evaluate, context) => {
19
+ const value = context.variables[name];
20
+ Preconditions.isPresent(value);
21
+ return value;
22
+ }
23
+ });
24
+ var NotExpression = defineExpression({
25
+ expressionKey: "Not",
26
+ builder: (value) => {
27
+ return { value };
28
+ },
29
+ resolver: (expression, evaluate) => {
30
+ return !evaluate(expression.value);
31
+ }
32
+ });
33
+ var AndExpression = defineExpression({
34
+ expressionKey: "And",
35
+ builder: (operands) => {
36
+ return { operands };
37
+ },
38
+ resolver: (expression, evaluate) => {
39
+ const values = expression.operands.map((it) => evaluate(it));
40
+ const falseValue = values.find((it) => !it);
41
+ return Objects.isNil(falseValue);
42
+ }
43
+ });
44
+ var OrExpression = defineExpression({
45
+ expressionKey: "Or",
46
+ builder: (operands) => {
47
+ return { operands };
48
+ },
49
+ resolver: (expression, evaluate) => {
50
+ const values = expression.operands.map((it) => evaluate(it));
51
+ const trueValue = values.find((it) => it);
52
+ return Objects.isPresent(trueValue);
53
+ }
54
+ });
55
+ var EqualsExpression = defineExpression({
56
+ expressionKey: "Equals",
57
+ builder: (operands) => {
58
+ return { operands };
59
+ },
60
+ resolver: (expression, evaluate) => {
61
+ const values = expression.operands.map((it) => evaluate(it)).map(Signatures.sign);
62
+ if (values.length === 0) {
63
+ return true;
64
+ }
65
+ const first = values[0];
66
+ return values.every((val) => val === first);
67
+ }
68
+ });
69
+ var ContainsExpression = defineExpression({
70
+ expressionKey: "Contains",
71
+ builder: (collection, operands) => {
72
+ return { collection, operands };
73
+ },
74
+ resolver: (expression, evaluate) => {
75
+ const collection = evaluate(expression.collection);
76
+ const values = expression.operands.map((it) => evaluate(it));
77
+ return Arrays.containsAll(collection, values);
78
+ }
79
+ });
80
+ var LessThanExpression = defineExpression({
81
+ expressionKey: "Basic.LessThan",
82
+ builder: (left, right) => {
83
+ return { left, right };
84
+ },
85
+ resolver: ({ left, right }, evaluate) => {
86
+ return evaluate(left) < evaluate(right);
87
+ }
88
+ });
89
+ var LessThanOrEqualExpression = defineExpression({
90
+ expressionKey: "Basic.LessThanOrEqual",
91
+ builder: (left, right) => {
92
+ return { left, right };
93
+ },
94
+ resolver: ({ left, right }, evaluate) => {
95
+ return evaluate(left) <= evaluate(right);
96
+ }
97
+ });
98
+ var GreaterThanExpression = defineExpression({
99
+ expressionKey: "Basic.GreaterThan",
100
+ builder: (left, right) => {
101
+ return { left, right };
102
+ },
103
+ resolver: ({ left, right }, evaluate) => {
104
+ return evaluate(left) > evaluate(right);
105
+ }
106
+ });
107
+ var GreaterThanOrEqualExpression = defineExpression({
108
+ expressionKey: "Basic.GreaterThanOrEqual",
109
+ builder: (left, right) => {
110
+ return { left, right };
111
+ },
112
+ resolver: ({ left, right }, evaluate) => {
113
+ return evaluate(left) >= evaluate(right);
114
+ }
115
+ });
116
+ export {
117
+ AndExpression,
118
+ ContainsExpression,
119
+ EqualsExpression,
120
+ GreaterThanExpression,
121
+ GreaterThanOrEqualExpression,
122
+ LessThanExpression,
123
+ LessThanOrEqualExpression,
124
+ NotExpression,
125
+ OrExpression,
126
+ ValueExpression,
127
+ VariableExpression
128
+ };
129
+ //# sourceMappingURL=core-expression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/expression/core-expression.ts"],"sourcesContent":["import { defineExpression } from '@bessemer/cornerstone/expression/internal'\nimport { Expression } from '@bessemer/cornerstone/expression'\nimport { BasicType } from '@bessemer/cornerstone/types'\nimport { Arrays, Objects, Preconditions, Signatures } from '@bessemer/cornerstone'\nimport { Signable } from '@bessemer/cornerstone/signature'\n\nexport const ValueExpression = defineExpression({\n expressionKey: 'Value',\n builder: (value: unknown) => {\n return { value }\n },\n resolver: ({ value }, evaluate, context) => {\n return value\n },\n})\n\nexport const VariableExpression = defineExpression({\n expressionKey: 'Variable',\n builder: (name: string) => {\n return { name }\n },\n resolver: ({ name }, evaluate, context) => {\n const value = context.variables[name]\n Preconditions.isPresent(value)\n return value\n },\n})\n\nexport const NotExpression = defineExpression({\n expressionKey: 'Not',\n builder: (value: Expression<boolean>) => {\n return { value }\n },\n resolver: (expression, evaluate) => {\n return !evaluate(expression.value)\n },\n})\n\nexport const AndExpression = defineExpression({\n expressionKey: 'And',\n builder: (operands: Array<Expression<boolean>>) => {\n return { operands }\n },\n resolver: (expression, evaluate) => {\n const values = expression.operands.map((it) => evaluate(it))\n const falseValue = values.find((it) => !it)\n return Objects.isNil(falseValue)\n },\n})\n\nexport const OrExpression = defineExpression({\n expressionKey: 'Or',\n builder: (operands: Array<Expression<boolean>>) => {\n return { operands }\n },\n resolver: (expression, evaluate) => {\n const values = expression.operands.map((it) => evaluate(it))\n const trueValue = values.find((it) => it)\n return Objects.isPresent(trueValue)\n },\n})\n\nexport const EqualsExpression = defineExpression({\n expressionKey: 'Equals',\n builder: (operands: Array<Expression<Signable>>) => {\n return { operands }\n },\n resolver: (expression, evaluate) => {\n const values = expression.operands.map((it) => evaluate(it)).map(Signatures.sign)\n\n if (values.length === 0) {\n return true\n }\n\n const first = values[0]\n return values.every((val) => val === first)\n },\n})\n\nexport const ContainsExpression = defineExpression({\n expressionKey: 'Contains',\n builder: (collection: Expression<Array<Signable>>, operands: Array<Expression<Signable>>) => {\n return { collection, operands }\n },\n resolver: (expression, evaluate) => {\n const collection = evaluate(expression.collection)\n const values = expression.operands.map((it) => evaluate(it))\n return Arrays.containsAll(collection, values)\n },\n})\n\nexport const LessThanExpression = defineExpression({\n expressionKey: 'Basic.LessThan',\n builder: (left: Expression<BasicType>, right: Expression<BasicType>) => {\n return { left, right }\n },\n resolver: ({ left, right }, evaluate) => {\n return evaluate(left) < evaluate(right)\n },\n})\n\nexport const LessThanOrEqualExpression = defineExpression({\n expressionKey: 'Basic.LessThanOrEqual',\n builder: (left: Expression<BasicType>, right: Expression<BasicType>) => {\n return { left, right }\n },\n resolver: ({ left, right }, evaluate) => {\n return evaluate(left) <= evaluate(right)\n },\n})\n\nexport const GreaterThanExpression = defineExpression({\n expressionKey: 'Basic.GreaterThan',\n builder: (left: Expression<BasicType>, right: Expression<BasicType>) => {\n return { left, right }\n },\n resolver: ({ left, right }, evaluate) => {\n return evaluate(left) > evaluate(right)\n },\n})\n\nexport const GreaterThanOrEqualExpression = defineExpression({\n expressionKey: 'Basic.GreaterThanOrEqual',\n builder: (left: Expression<BasicType>, right: Expression<BasicType>) => {\n return { left, right }\n },\n resolver: ({ left, right }, evaluate) => {\n return evaluate(left) >= evaluate(right)\n },\n})\n"],"mappings":";AAAA,SAAS,wBAAwB;AAGjC,SAAS,QAAQ,SAAS,eAAe,kBAAkB;AAGpD,IAAM,kBAAkB,iBAAiB;AAAA,EAC9C,eAAe;AAAA,EACf,SAAS,CAAC,UAAmB;AAC3B,WAAO,EAAE,MAAM;AAAA,EACjB;AAAA,EACA,UAAU,CAAC,EAAE,MAAM,GAAG,UAAU,YAAY;AAC1C,WAAO;AAAA,EACT;AACF,CAAC;AAEM,IAAM,qBAAqB,iBAAiB;AAAA,EACjD,eAAe;AAAA,EACf,SAAS,CAAC,SAAiB;AACzB,WAAO,EAAE,KAAK;AAAA,EAChB;AAAA,EACA,UAAU,CAAC,EAAE,KAAK,GAAG,UAAU,YAAY;AACzC,UAAM,QAAQ,QAAQ,UAAU,IAAI;AACpC,kBAAc,UAAU,KAAK;AAC7B,WAAO;AAAA,EACT;AACF,CAAC;AAEM,IAAM,gBAAgB,iBAAiB;AAAA,EAC5C,eAAe;AAAA,EACf,SAAS,CAAC,UAA+B;AACvC,WAAO,EAAE,MAAM;AAAA,EACjB;AAAA,EACA,UAAU,CAAC,YAAY,aAAa;AAClC,WAAO,CAAC,SAAS,WAAW,KAAK;AAAA,EACnC;AACF,CAAC;AAEM,IAAM,gBAAgB,iBAAiB;AAAA,EAC5C,eAAe;AAAA,EACf,SAAS,CAAC,aAAyC;AACjD,WAAO,EAAE,SAAS;AAAA,EACpB;AAAA,EACA,UAAU,CAAC,YAAY,aAAa;AAClC,UAAM,SAAS,WAAW,SAAS,IAAI,CAAC,OAAO,SAAS,EAAE,CAAC;AAC3D,UAAM,aAAa,OAAO,KAAK,CAAC,OAAO,CAAC,EAAE;AAC1C,WAAO,QAAQ,MAAM,UAAU;AAAA,EACjC;AACF,CAAC;AAEM,IAAM,eAAe,iBAAiB;AAAA,EAC3C,eAAe;AAAA,EACf,SAAS,CAAC,aAAyC;AACjD,WAAO,EAAE,SAAS;AAAA,EACpB;AAAA,EACA,UAAU,CAAC,YAAY,aAAa;AAClC,UAAM,SAAS,WAAW,SAAS,IAAI,CAAC,OAAO,SAAS,EAAE,CAAC;AAC3D,UAAM,YAAY,OAAO,KAAK,CAAC,OAAO,EAAE;AACxC,WAAO,QAAQ,UAAU,SAAS;AAAA,EACpC;AACF,CAAC;AAEM,IAAM,mBAAmB,iBAAiB;AAAA,EAC/C,eAAe;AAAA,EACf,SAAS,CAAC,aAA0C;AAClD,WAAO,EAAE,SAAS;AAAA,EACpB;AAAA,EACA,UAAU,CAAC,YAAY,aAAa;AAClC,UAAM,SAAS,WAAW,SAAS,IAAI,CAAC,OAAO,SAAS,EAAE,CAAC,EAAE,IAAI,WAAW,IAAI;AAEhF,QAAI,OAAO,WAAW,GAAG;AACvB,aAAO;AAAA,IACT;AAEA,UAAM,QAAQ,OAAO,CAAC;AACtB,WAAO,OAAO,MAAM,CAAC,QAAQ,QAAQ,KAAK;AAAA,EAC5C;AACF,CAAC;AAEM,IAAM,qBAAqB,iBAAiB;AAAA,EACjD,eAAe;AAAA,EACf,SAAS,CAAC,YAAyC,aAA0C;AAC3F,WAAO,EAAE,YAAY,SAAS;AAAA,EAChC;AAAA,EACA,UAAU,CAAC,YAAY,aAAa;AAClC,UAAM,aAAa,SAAS,WAAW,UAAU;AACjD,UAAM,SAAS,WAAW,SAAS,IAAI,CAAC,OAAO,SAAS,EAAE,CAAC;AAC3D,WAAO,OAAO,YAAY,YAAY,MAAM;AAAA,EAC9C;AACF,CAAC;AAEM,IAAM,qBAAqB,iBAAiB;AAAA,EACjD,eAAe;AAAA,EACf,SAAS,CAAC,MAA6B,UAAiC;AACtE,WAAO,EAAE,MAAM,MAAM;AAAA,EACvB;AAAA,EACA,UAAU,CAAC,EAAE,MAAM,MAAM,GAAG,aAAa;AACvC,WAAO,SAAS,IAAI,IAAI,SAAS,KAAK;AAAA,EACxC;AACF,CAAC;AAEM,IAAM,4BAA4B,iBAAiB;AAAA,EACxD,eAAe;AAAA,EACf,SAAS,CAAC,MAA6B,UAAiC;AACtE,WAAO,EAAE,MAAM,MAAM;AAAA,EACvB;AAAA,EACA,UAAU,CAAC,EAAE,MAAM,MAAM,GAAG,aAAa;AACvC,WAAO,SAAS,IAAI,KAAK,SAAS,KAAK;AAAA,EACzC;AACF,CAAC;AAEM,IAAM,wBAAwB,iBAAiB;AAAA,EACpD,eAAe;AAAA,EACf,SAAS,CAAC,MAA6B,UAAiC;AACtE,WAAO,EAAE,MAAM,MAAM;AAAA,EACvB;AAAA,EACA,UAAU,CAAC,EAAE,MAAM,MAAM,GAAG,aAAa;AACvC,WAAO,SAAS,IAAI,IAAI,SAAS,KAAK;AAAA,EACxC;AACF,CAAC;AAEM,IAAM,+BAA+B,iBAAiB;AAAA,EAC3D,eAAe;AAAA,EACf,SAAS,CAAC,MAA6B,UAAiC;AACtE,WAAO,EAAE,MAAM,MAAM;AAAA,EACvB;AAAA,EACA,UAAU,CAAC,EAAE,MAAM,MAAM,GAAG,aAAa;AACvC,WAAO,SAAS,IAAI,KAAK,SAAS,KAAK;AAAA,EACzC;AACF,CAAC;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"expression-mapper.d.ts","sourceRoot":"","sources":["../../src/expression/expression-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;AAMnF,KAAK,kBAAkB,CAAC,cAAc,EAAE,WAAW,EAAE,WAAW,IAAI,CAClE,UAAU,EAAE,cAAc,EAC1B,GAAG,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,WAAW,EACrD,OAAO,EAAE,WAAW,KACjB,WAAW,CAAA;AAEhB,qBAAa,gBAAgB,CAAC,WAAW,EAAE,WAAW;IACpD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoE;IAEhG,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,GAAG,WAAW;IAqBvE,QAAQ,CAAC,cAAc,EACrB,UAAU,EAAE,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,cAAc,CAAC,EAC1D,QAAQ,EAAE,kBAAkB,CAAC,cAAc,EAAE,WAAW,EAAE,WAAW,CAAC,GACrE,IAAI;CAGR"}
1
+ {"version":3,"file":"expression-mapper.d.ts","sourceRoot":"","sources":["../../src/expression/expression-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;AAOnF,KAAK,kBAAkB,CAAC,cAAc,EAAE,WAAW,EAAE,WAAW,IAAI,CAClE,UAAU,EAAE,cAAc,EAC1B,GAAG,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,WAAW,EACrD,OAAO,EAAE,WAAW,KACjB,WAAW,CAAA;AAEhB,qBAAa,gBAAgB,CAAC,WAAW,EAAE,WAAW;IACpD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoE;IAEhG,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,GAAG,WAAW;IAqBvE,QAAQ,CAAC,cAAc,EACrB,UAAU,EAAE,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,cAAc,CAAC,EAC1D,QAAQ,EAAE,kBAAkB,CAAC,cAAc,EAAE,WAAW,EAAE,WAAW,CAAC,GACrE,IAAI;CAGR"}
@@ -1,7 +1,8 @@
1
1
  // src/expression/expression-mapper.ts
2
2
  import { isExpression } from "@bessemer/cornerstone/expression/internal";
3
3
  import { Preconditions } from "@bessemer/cornerstone";
4
- import { value, ValueExpression } from "@bessemer/cornerstone/expression/expression";
4
+ import { value } from "@bessemer/cornerstone/expression/expression";
5
+ import { ValueExpression } from "@bessemer/cornerstone/expression/core-expression";
5
6
  var ExpressionMapper = class {
6
7
  resolverMap = {};
7
8
  map(expression, context) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/expression/expression-mapper.ts"],"sourcesContent":["import { Expression, ExpressionDefinition } from '@bessemer/cornerstone/expression'\nimport { Dictionary } from '@bessemer/cornerstone/types'\nimport { isExpression } from '@bessemer/cornerstone/expression/internal'\nimport { Preconditions } from '@bessemer/cornerstone'\nimport { value, ValueExpression } from '@bessemer/cornerstone/expression/expression'\n\ntype ExpressionResolver<ExpressionType, MappingType, ContextType> = (\n expression: ExpressionType,\n map: (expression: Expression<unknown>) => MappingType,\n context: ContextType\n) => MappingType\n\nexport class ExpressionMapper<MappingType, ContextType> {\n private readonly resolverMap: Dictionary<ExpressionResolver<any, MappingType, ContextType>> = {}\n\n map(expression: Expression<unknown>, context: ContextType): MappingType {\n if (isExpression(expression)) {\n const resolver = this.resolverMap[expression.expressionKey]\n Preconditions.isPresent(\n resolver,\n `Illegal Argument - Attempted to map unknown expression: ${expression.expressionKey}. You must register(...) a handler for this expression type.`\n )\n\n return resolver(expression, (expression) => this.map(expression, context), context)\n } else {\n const resolver = this.resolverMap[ValueExpression.expressionKey]\n Preconditions.isPresent(\n resolver,\n `Illegal Argument - Attempted to map unknown expression: ${ValueExpression.expressionKey}. You must register(...) a handler for this expression type.`\n )\n\n const valueExpression = value(expression)\n return resolver(valueExpression, (expression) => this.map(expression, context), context)\n }\n }\n\n register<ExpressionType>(\n definition: ExpressionDefinition<any, any, ExpressionType>,\n resolver: ExpressionResolver<ExpressionType, MappingType, ContextType>\n ): void {\n this.resolverMap[definition.expressionKey] = resolver\n }\n}\n"],"mappings":";AAEA,SAAS,oBAAoB;AAC7B,SAAS,qBAAqB;AAC9B,SAAS,OAAO,uBAAuB;AAQhC,IAAM,mBAAN,MAAiD;AAAA,EACrC,cAA6E,CAAC;AAAA,EAE/F,IAAI,YAAiC,SAAmC;AACtE,QAAI,aAAa,UAAU,GAAG;AAC5B,YAAM,WAAW,KAAK,YAAY,WAAW,aAAa;AAC1D,oBAAc;AAAA,QACZ;AAAA,QACA,2DAA2D,WAAW,aAAa;AAAA,MACrF;AAEA,aAAO,SAAS,YAAY,CAACA,gBAAe,KAAK,IAAIA,aAAY,OAAO,GAAG,OAAO;AAAA,IACpF,OAAO;AACL,YAAM,WAAW,KAAK,YAAY,gBAAgB,aAAa;AAC/D,oBAAc;AAAA,QACZ;AAAA,QACA,2DAA2D,gBAAgB,aAAa;AAAA,MAC1F;AAEA,YAAM,kBAAkB,MAAM,UAAU;AACxC,aAAO,SAAS,iBAAiB,CAACA,gBAAe,KAAK,IAAIA,aAAY,OAAO,GAAG,OAAO;AAAA,IACzF;AAAA,EACF;AAAA,EAEA,SACE,YACA,UACM;AACN,SAAK,YAAY,WAAW,aAAa,IAAI;AAAA,EAC/C;AACF;","names":["expression"]}
1
+ {"version":3,"sources":["../../src/expression/expression-mapper.ts"],"sourcesContent":["import { Expression, ExpressionDefinition } from '@bessemer/cornerstone/expression'\nimport { Dictionary } from '@bessemer/cornerstone/types'\nimport { isExpression } from '@bessemer/cornerstone/expression/internal'\nimport { Preconditions } from '@bessemer/cornerstone'\nimport { value } from '@bessemer/cornerstone/expression/expression'\nimport { ValueExpression } from '@bessemer/cornerstone/expression/core-expression'\n\ntype ExpressionResolver<ExpressionType, MappingType, ContextType> = (\n expression: ExpressionType,\n map: (expression: Expression<unknown>) => MappingType,\n context: ContextType\n) => MappingType\n\nexport class ExpressionMapper<MappingType, ContextType> {\n private readonly resolverMap: Dictionary<ExpressionResolver<any, MappingType, ContextType>> = {}\n\n map(expression: Expression<unknown>, context: ContextType): MappingType {\n if (isExpression(expression)) {\n const resolver = this.resolverMap[expression.expressionKey]\n Preconditions.isPresent(\n resolver,\n `Illegal Argument - Attempted to map unknown expression: ${expression.expressionKey}. You must register(...) a handler for this expression type.`\n )\n\n return resolver(expression, (expression) => this.map(expression, context), context)\n } else {\n const resolver = this.resolverMap[ValueExpression.expressionKey]\n Preconditions.isPresent(\n resolver,\n `Illegal Argument - Attempted to map unknown expression: ${ValueExpression.expressionKey}. You must register(...) a handler for this expression type.`\n )\n\n const valueExpression = value(expression)\n return resolver(valueExpression, (expression) => this.map(expression, context), context)\n }\n }\n\n register<ExpressionType>(\n definition: ExpressionDefinition<any, any, ExpressionType>,\n resolver: ExpressionResolver<ExpressionType, MappingType, ContextType>\n ): void {\n this.resolverMap[definition.expressionKey] = resolver\n }\n}\n"],"mappings":";AAEA,SAAS,oBAAoB;AAC7B,SAAS,qBAAqB;AAC9B,SAAS,aAAa;AACtB,SAAS,uBAAuB;AAQzB,IAAM,mBAAN,MAAiD;AAAA,EACrC,cAA6E,CAAC;AAAA,EAE/F,IAAI,YAAiC,SAAmC;AACtE,QAAI,aAAa,UAAU,GAAG;AAC5B,YAAM,WAAW,KAAK,YAAY,WAAW,aAAa;AAC1D,oBAAc;AAAA,QACZ;AAAA,QACA,2DAA2D,WAAW,aAAa;AAAA,MACrF;AAEA,aAAO,SAAS,YAAY,CAACA,gBAAe,KAAK,IAAIA,aAAY,OAAO,GAAG,OAAO;AAAA,IACpF,OAAO;AACL,YAAM,WAAW,KAAK,YAAY,gBAAgB,aAAa;AAC/D,oBAAc;AAAA,QACZ;AAAA,QACA,2DAA2D,gBAAgB,aAAa;AAAA,MAC1F;AAEA,YAAM,kBAAkB,MAAM,UAAU;AACxC,aAAO,SAAS,iBAAiB,CAACA,gBAAe,KAAK,IAAIA,aAAY,OAAO,GAAG,OAAO;AAAA,IACzF;AAAA,EACF;AAAA,EAEA,SACE,YACA,UACM;AACN,SAAK,YAAY,WAAW,aAAa,IAAI;AAAA,EAC/C;AACF;","names":["expression"]}
@@ -2,8 +2,10 @@ import { EvaluateExpression, Expression, ExpressionContext, ExpressionDefinition
2
2
  import { Signatures } from '@bessemer/cornerstone';
3
3
  import { Signable } from '@bessemer/cornerstone/signature';
4
4
  import { UnknownRecord } from 'type-fest';
5
+ import { ExpressionMapper } from '@bessemer/cornerstone/expression/expression-mapper';
5
6
  export declare const evaluate: <T>(expression: Expression<T>, context: ExpressionContext) => T;
6
7
  export declare const evaluateDefault: <T>(expression: Expression<T>) => T;
8
+ export declare const map: <MappingType, ContextType>(expression: Expression<unknown>, mapper: ExpressionMapper<MappingType, ContextType>, context: ContextType) => MappingType;
7
9
  export declare const evaluator: (context: ExpressionContext) => EvaluateExpression;
8
10
  export declare const defaultEvaluator: () => EvaluateExpression;
9
11
  export declare const defaultContext: () => ExpressionContext;
@@ -11,44 +13,38 @@ export declare const dereference: <ReturnType, ArgumentType extends Array<unknow
11
13
  export declare const parameterizedVariable: <ValueType, ParameterType extends Array<Signable>>(name: string) => ParameterizedVariable<ValueType, ParameterType>;
12
14
  export declare const buildVariable: <T>(variable: ExpressionVariable<T>, value: T) => UnknownRecord;
13
15
  export declare const reference: <ReturnType, ArgumentType extends Array<unknown>, ExpressionType extends Expression<ReturnType>>(expressionDefinition: ExpressionDefinition<ReturnType, ArgumentType, ExpressionType>) => ExpressionReference<ReturnType, ArgumentType>;
14
- export declare const ValueExpression: ExpressionDefinition<unknown, [value: unknown], {
15
- value: unknown;
16
- }>;
17
16
  export declare const value: <T>(value: T) => Expression<T>;
18
- export declare const VariableExpression: ExpressionDefinition<{}, [name: string], Expression<{}> & {
19
- name: string;
20
- }>;
21
17
  export declare const variable: <T>(name: string) => ExpressionVariable<T>;
22
- export declare const NotExpression: ExpressionDefinition<boolean, [value: Expression<boolean>], Expression<boolean> & {
23
- value: Expression<boolean>;
24
- }>;
25
18
  export declare const not: (value: Expression<boolean>) => Expression<boolean> & {
26
19
  value: Expression<boolean>;
27
20
  };
28
- export declare const AndExpression: ExpressionDefinition<boolean, [operands: Expression<boolean>[]], Expression<boolean> & {
29
- operands: Expression<boolean>[];
30
- }>;
31
21
  export declare const and: (operands: Expression<boolean>[]) => Expression<boolean> & {
32
22
  operands: Expression<boolean>[];
33
23
  };
34
- export declare const OrExpression: ExpressionDefinition<boolean, [operands: Expression<boolean>[]], Expression<boolean> & {
35
- operands: Expression<boolean>[];
36
- }>;
37
24
  export declare const or: (operands: Expression<boolean>[]) => Expression<boolean> & {
38
25
  operands: Expression<boolean>[];
39
26
  };
40
- export declare const EqualsExpression: ExpressionDefinition<boolean, [operands: Expression<Signatures.Signable>[]], Expression<boolean> & {
41
- operands: Expression<Signatures.Signable>[];
42
- }>;
43
27
  export declare const equals: (operands: Expression<Signatures.Signable>[]) => Expression<boolean> & {
44
28
  operands: Expression<Signatures.Signable>[];
45
29
  };
46
- export declare const ContainsExpression: ExpressionDefinition<boolean, [collection: Expression<Signatures.Signable[]>, operands: Expression<Signatures.Signable>[]], Expression<boolean> & {
47
- collection: Expression<Signatures.Signable[]>;
48
- operands: Expression<Signatures.Signable>[];
49
- }>;
50
30
  export declare const contains: (collection: Expression<Signatures.Signable[]>, operands: Expression<Signatures.Signable>[]) => Expression<boolean> & {
51
31
  collection: Expression<Signatures.Signable[]>;
52
32
  operands: Expression<Signatures.Signable>[];
53
33
  };
34
+ export declare const lessThan: (left: Expression<import("../types").BasicType>, right: Expression<import("../types").BasicType>) => Expression<boolean> & {
35
+ left: Expression<import("../types").BasicType>;
36
+ right: Expression<import("../types").BasicType>;
37
+ };
38
+ export declare const lessThanOrEqual: (left: Expression<import("../types").BasicType>, right: Expression<import("../types").BasicType>) => Expression<boolean> & {
39
+ left: Expression<import("../types").BasicType>;
40
+ right: Expression<import("../types").BasicType>;
41
+ };
42
+ export declare const greaterThan: (left: Expression<import("../types").BasicType>, right: Expression<import("../types").BasicType>) => Expression<boolean> & {
43
+ left: Expression<import("../types").BasicType>;
44
+ right: Expression<import("../types").BasicType>;
45
+ };
46
+ export declare const greaterThanOrEqual: (left: Expression<import("../types").BasicType>, right: Expression<import("../types").BasicType>) => Expression<boolean> & {
47
+ left: Expression<import("../types").BasicType>;
48
+ right: Expression<import("../types").BasicType>;
49
+ };
54
50
  //# sourceMappingURL=expression.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../../src/expression/expression.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,kBAAkB,EAClB,UAAU,EACV,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAElB,qBAAqB,EAEtB,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAkC,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClF,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,eAAO,MAAM,QAAQ,GAAI,CAAC,EAAE,YAAY,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,iBAAiB,KAAG,CAEnF,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,CAAC,EAAE,YAAY,UAAU,CAAC,CAAC,CAAC,KAAG,CAE9D,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,SAAS,iBAAiB,KAAG,kBAEtD,CAAA;AAED,eAAO,MAAM,gBAAgB,QAAO,kBAEnC,CAAA;AAED,eAAO,MAAM,cAAc,QAAO,iBAEjC,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,UAAU,EAAE,YAAY,SAAS,KAAK,CAAC,OAAO,CAAC,EACzE,WAAW,mBAAmB,CAAC,UAAU,EAAE,YAAY,CAAC,EACxD,GAAG,MAAM,YAAY,KACpB,UAAU,CAAC,UAAU,CAEvB,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,SAAS,EAAE,aAAa,SAAS,KAAK,CAAC,QAAQ,CAAC,EACpF,MAAM,MAAM,KACX,qBAAqB,CAAC,SAAS,EAAE,aAAa,CAOhD,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,UAAU,kBAAkB,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,KAAG,aAE5E,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,UAAU,EAAE,YAAY,SAAS,KAAK,CAAC,OAAO,CAAC,EAAE,cAAc,SAAS,UAAU,CAAC,UAAU,CAAC,EACtH,sBAAsB,oBAAoB,CAAC,UAAU,EAAE,YAAY,EAAE,cAAc,CAAC,KACnF,mBAAmB,CAAC,UAAU,EAAE,YAAY,CAE9C,CAAA;AAED,eAAO,MAAM,eAAe;;EAQ1B,CAAA;AAEF,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,OAAO,CAAC,KAAG,UAAU,CAAC,CAAC,CAE/C,CAAA;AAED,eAAO,MAAM,kBAAkB;;EAU7B,CAAA;AAEF,eAAO,MAAM,QAAQ,GAAI,CAAC,EAAE,MAAM,MAAM,KAAG,kBAAkB,CAAC,CAAC,CAA8D,CAAA;AAE7H,eAAO,MAAM,aAAa;;EAQxB,CAAA;AAEF,eAAO,MAAM,GAAG;;CAAwB,CAAA;AAExC,eAAO,MAAM,aAAa;;EAUxB,CAAA;AAEF,eAAO,MAAM,GAAG;;CAAwB,CAAA;AAExC,eAAO,MAAM,YAAY;;EAUvB,CAAA;AAEF,eAAO,MAAM,EAAE;;CAAuB,CAAA;AAEtC,eAAO,MAAM,gBAAgB;;EAe3B,CAAA;AAEF,eAAO,MAAM,MAAM;;CAA2B,CAAA;AAE9C,eAAO,MAAM,kBAAkB;;;EAU7B,CAAA;AAEF,eAAO,MAAM,QAAQ;;;CAA6B,CAAA"}
1
+ {"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../../src/expression/expression.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,kBAAkB,EAClB,UAAU,EACV,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAElB,qBAAqB,EAEtB,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAczC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oDAAoD,CAAA;AAErF,eAAO,MAAM,QAAQ,GAAI,CAAC,EAAE,YAAY,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,iBAAiB,KAAG,CAEnF,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,CAAC,EAAE,YAAY,UAAU,CAAC,CAAC,CAAC,KAAG,CAE9D,CAAA;AAED,eAAO,MAAM,GAAG,GAAI,WAAW,EAAE,WAAW,EAC1C,YAAY,UAAU,CAAC,OAAO,CAAC,EAC/B,QAAQ,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC,EAClD,SAAS,WAAW,KACnB,WAEF,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,SAAS,iBAAiB,KAAG,kBAEtD,CAAA;AAED,eAAO,MAAM,gBAAgB,QAAO,kBAEnC,CAAA;AAED,eAAO,MAAM,cAAc,QAAO,iBAEjC,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,UAAU,EAAE,YAAY,SAAS,KAAK,CAAC,OAAO,CAAC,EACzE,WAAW,mBAAmB,CAAC,UAAU,EAAE,YAAY,CAAC,EACxD,GAAG,MAAM,YAAY,KACpB,UAAU,CAAC,UAAU,CAEvB,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,SAAS,EAAE,aAAa,SAAS,KAAK,CAAC,QAAQ,CAAC,EACpF,MAAM,MAAM,KACX,qBAAqB,CAAC,SAAS,EAAE,aAAa,CAOhD,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,UAAU,kBAAkB,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,KAAG,aAE5E,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,UAAU,EAAE,YAAY,SAAS,KAAK,CAAC,OAAO,CAAC,EAAE,cAAc,SAAS,UAAU,CAAC,UAAU,CAAC,EACtH,sBAAsB,oBAAoB,CAAC,UAAU,EAAE,YAAY,EAAE,cAAc,CAAC,KACnF,mBAAmB,CAAC,UAAU,EAAE,YAAY,CAE9C,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,OAAO,CAAC,KAAG,UAAU,CAAC,CAAC,CAE/C,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,CAAC,EAAE,MAAM,MAAM,KAAG,kBAAkB,CAAC,CAAC,CAE9D,CAAA;AAED,eAAO,MAAM,GAAG;;CAAwB,CAAA;AAExC,eAAO,MAAM,GAAG;;CAAwB,CAAA;AAExC,eAAO,MAAM,EAAE;;CAAuB,CAAA;AAEtC,eAAO,MAAM,MAAM;;CAA2B,CAAA;AAE9C,eAAO,MAAM,QAAQ;;;CAA6B,CAAA;AAElD,eAAO,MAAM,QAAQ;;;CAA6B,CAAA;AAElD,eAAO,MAAM,eAAe;;;CAAoC,CAAA;AAEhE,eAAO,MAAM,WAAW;;;CAAgC,CAAA;AAExD,eAAO,MAAM,kBAAkB;;;CAAuC,CAAA"}
@@ -2,18 +2,32 @@
2
2
  import { ExpressionEvaluator } from "@bessemer/cornerstone/expression/expression-evaluator";
3
3
  import {
4
4
  ArrayExpressions,
5
- BasicExpressions,
6
5
  NumericExpressions,
7
6
  StringExpressions
8
7
  } from "@bessemer/cornerstone/expression";
9
- import { Arrays, Objects, Preconditions, Signatures } from "@bessemer/cornerstone";
10
- import { defineExpression } from "@bessemer/cornerstone/expression/internal";
8
+ import { Signatures } from "@bessemer/cornerstone";
9
+ import {
10
+ AndExpression,
11
+ ContainsExpression,
12
+ EqualsExpression,
13
+ GreaterThanExpression,
14
+ GreaterThanOrEqualExpression,
15
+ LessThanExpression,
16
+ LessThanOrEqualExpression,
17
+ NotExpression,
18
+ OrExpression,
19
+ ValueExpression,
20
+ VariableExpression
21
+ } from "@bessemer/cornerstone/expression/core-expression";
11
22
  var evaluate = (expression, context) => {
12
23
  return new ExpressionEvaluator(DEFAULT_EXPRESSION_DEFINITIONS).evaluate(expression, context);
13
24
  };
14
25
  var evaluateDefault = (expression) => {
15
26
  return evaluate(expression, defaultContext());
16
27
  };
28
+ var map = (expression, mapper, context) => {
29
+ return mapper.map(expression, context);
30
+ };
17
31
  var evaluator = (context) => {
18
32
  return (it) => evaluate(it, context);
19
33
  };
@@ -40,91 +54,21 @@ var buildVariable = (variable2, value2) => {
40
54
  var reference = (expressionDefinition) => {
41
55
  return { expressionKey: expressionDefinition.expressionKey };
42
56
  };
43
- var ValueExpression = defineExpression({
44
- expressionKey: "Value",
45
- builder: (value2) => {
46
- return { value: value2 };
47
- },
48
- resolver: ({ value: value2 }, evaluate2, context) => {
49
- return value2;
50
- }
51
- });
52
57
  var value = (value2) => {
53
58
  return ValueExpression.builder(value2);
54
59
  };
55
- var VariableExpression = defineExpression({
56
- expressionKey: "Variable",
57
- builder: (name) => {
58
- return { name };
59
- },
60
- resolver: ({ name }, evaluate2, context) => {
61
- const value2 = context.variables[name];
62
- Preconditions.isPresent(value2);
63
- return value2;
64
- }
65
- });
66
- var variable = (name) => VariableExpression.builder(name);
67
- var NotExpression = defineExpression({
68
- expressionKey: "Not",
69
- builder: (value2) => {
70
- return { value: value2 };
71
- },
72
- resolver: (expression, evaluate2) => {
73
- return !evaluate2(expression.value);
74
- }
75
- });
60
+ var variable = (name) => {
61
+ return VariableExpression.builder(name);
62
+ };
76
63
  var not = NotExpression.builder;
77
- var AndExpression = defineExpression({
78
- expressionKey: "And",
79
- builder: (operands) => {
80
- return { operands };
81
- },
82
- resolver: (expression, evaluate2) => {
83
- const values = expression.operands.map((it) => evaluate2(it));
84
- const falseValue = values.find((it) => !it);
85
- return Objects.isNil(falseValue);
86
- }
87
- });
88
64
  var and = AndExpression.builder;
89
- var OrExpression = defineExpression({
90
- expressionKey: "Or",
91
- builder: (operands) => {
92
- return { operands };
93
- },
94
- resolver: (expression, evaluate2) => {
95
- const values = expression.operands.map((it) => evaluate2(it));
96
- const trueValue = values.find((it) => it);
97
- return Objects.isPresent(trueValue);
98
- }
99
- });
100
65
  var or = OrExpression.builder;
101
- var EqualsExpression = defineExpression({
102
- expressionKey: "Equals",
103
- builder: (operands) => {
104
- return { operands };
105
- },
106
- resolver: (expression, evaluate2) => {
107
- const values = expression.operands.map((it) => evaluate2(it)).map(Signatures.sign);
108
- if (values.length === 0) {
109
- return true;
110
- }
111
- const first = values[0];
112
- return values.every((val) => val === first);
113
- }
114
- });
115
66
  var equals = EqualsExpression.builder;
116
- var ContainsExpression = defineExpression({
117
- expressionKey: "Contains",
118
- builder: (collection, operands) => {
119
- return { collection, operands };
120
- },
121
- resolver: (expression, evaluate2) => {
122
- const collection = evaluate2(expression.collection);
123
- const values = expression.operands.map((it) => evaluate2(it));
124
- return Arrays.containsAll(collection, values);
125
- }
126
- });
127
67
  var contains = ContainsExpression.builder;
68
+ var lessThan = LessThanExpression.builder;
69
+ var lessThanOrEqual = LessThanOrEqualExpression.builder;
70
+ var greaterThan = GreaterThanExpression.builder;
71
+ var greaterThanOrEqual = GreaterThanOrEqualExpression.builder;
128
72
  var DEFAULT_EXPRESSION_DEFINITIONS = [
129
73
  ValueExpression,
130
74
  VariableExpression,
@@ -132,15 +76,15 @@ var DEFAULT_EXPRESSION_DEFINITIONS = [
132
76
  OrExpression,
133
77
  ContainsExpression,
134
78
  EqualsExpression,
135
- BasicExpressions.LessThanExpression,
136
- BasicExpressions.LessThanOrEqualExpression,
137
- BasicExpressions.GreaterThanExpression,
138
- BasicExpressions.GreaterThanOrEqualExpression,
79
+ LessThanExpression,
80
+ LessThanOrEqualExpression,
81
+ GreaterThanExpression,
82
+ GreaterThanOrEqualExpression,
139
83
  NumericExpressions.SumExpression,
140
84
  NumericExpressions.MultiplyExpression,
141
85
  NumericExpressions.FloorExpression,
142
86
  NumericExpressions.CeilingExpression,
143
- NumericExpressions.BoundsExpression,
87
+ NumericExpressions.BoundExpression,
144
88
  NumericExpressions.RoundExpression,
145
89
  NumericExpressions.MaxExpression,
146
90
  NumericExpressions.MinExpression,
@@ -151,13 +95,6 @@ var DEFAULT_EXPRESSION_DEFINITIONS = [
151
95
  ArrayExpressions.FirstExpression
152
96
  ];
153
97
  export {
154
- AndExpression,
155
- ContainsExpression,
156
- EqualsExpression,
157
- NotExpression,
158
- OrExpression,
159
- ValueExpression,
160
- VariableExpression,
161
98
  and,
162
99
  buildVariable,
163
100
  contains,
@@ -168,6 +105,11 @@ export {
168
105
  evaluate,
169
106
  evaluateDefault,
170
107
  evaluator,
108
+ greaterThan,
109
+ greaterThanOrEqual,
110
+ lessThan,
111
+ lessThanOrEqual,
112
+ map,
171
113
  not,
172
114
  or,
173
115
  parameterizedVariable,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/expression/expression.ts"],"sourcesContent":["import { ExpressionEvaluator } from '@bessemer/cornerstone/expression/expression-evaluator'\nimport {\n ArrayExpressions,\n BasicExpressions,\n EvaluateExpression,\n Expression,\n ExpressionContext,\n ExpressionDefinition,\n ExpressionReference,\n ExpressionVariable,\n NumericExpressions,\n ParameterizedVariable,\n StringExpressions,\n} from '@bessemer/cornerstone/expression'\nimport { Arrays, Objects, Preconditions, Signatures } from '@bessemer/cornerstone'\nimport { Signable } from '@bessemer/cornerstone/signature'\nimport { defineExpression } from '@bessemer/cornerstone/expression/internal'\nimport { UnknownRecord } from 'type-fest'\n\nexport const evaluate = <T>(expression: Expression<T>, context: ExpressionContext): T => {\n return new ExpressionEvaluator(DEFAULT_EXPRESSION_DEFINITIONS).evaluate(expression, context)\n}\n\nexport const evaluateDefault = <T>(expression: Expression<T>): T => {\n return evaluate(expression, defaultContext())\n}\n\nexport const evaluator = (context: ExpressionContext): EvaluateExpression => {\n return (it) => evaluate(it, context)\n}\n\nexport const defaultEvaluator = (): EvaluateExpression => {\n return evaluator(defaultContext())\n}\n\nexport const defaultContext = (): ExpressionContext => {\n return { variables: {} }\n}\n\nexport const dereference = <ReturnType, ArgumentType extends Array<unknown>>(\n reference: ExpressionReference<ReturnType, ArgumentType>,\n ...args: ArgumentType\n): Expression<ReturnType> => {\n return new ExpressionEvaluator(DEFAULT_EXPRESSION_DEFINITIONS).dereference(reference, ...args)\n}\n\nexport const parameterizedVariable = <ValueType, ParameterType extends Array<Signable>>(\n name: string\n): ParameterizedVariable<ValueType, ParameterType> => {\n return {\n apply(...parameters: ParameterType): ExpressionVariable<ValueType> {\n const parameterString = parameters.map(Signatures.sign).join('.')\n return variable(`${name}.${parameterString}`)\n },\n }\n}\n\nexport const buildVariable = <T>(variable: ExpressionVariable<T>, value: T): UnknownRecord => {\n return { [variable.name]: value }\n}\n\nexport const reference = <ReturnType, ArgumentType extends Array<unknown>, ExpressionType extends Expression<ReturnType>>(\n expressionDefinition: ExpressionDefinition<ReturnType, ArgumentType, ExpressionType>\n): ExpressionReference<ReturnType, ArgumentType> => {\n return { expressionKey: expressionDefinition.expressionKey }\n}\n\nexport const ValueExpression = defineExpression({\n expressionKey: 'Value',\n builder: (value: unknown) => {\n return { value }\n },\n resolver: ({ value }, evaluate, context) => {\n return value\n },\n})\n\nexport const value = <T>(value: T): Expression<T> => {\n return ValueExpression.builder(value) as Expression<T>\n}\n\nexport const VariableExpression = defineExpression({\n expressionKey: 'Variable',\n builder: (name: string) => {\n return { name }\n },\n resolver: ({ name }, evaluate, context) => {\n const value = context.variables[name]\n Preconditions.isPresent(value)\n return value\n },\n})\n\nexport const variable = <T>(name: string): ExpressionVariable<T> => VariableExpression.builder(name) as ExpressionVariable<T>\n\nexport const NotExpression = defineExpression({\n expressionKey: 'Not',\n builder: (value: Expression<boolean>) => {\n return { value }\n },\n resolver: (expression, evaluate) => {\n return !evaluate(expression.value)\n },\n})\n\nexport const not = NotExpression.builder\n\nexport const AndExpression = defineExpression({\n expressionKey: 'And',\n builder: (operands: Array<Expression<boolean>>) => {\n return { operands }\n },\n resolver: (expression, evaluate) => {\n const values = expression.operands.map((it) => evaluate(it))\n const falseValue = values.find((it) => !it)\n return Objects.isNil(falseValue)\n },\n})\n\nexport const and = AndExpression.builder\n\nexport const OrExpression = defineExpression({\n expressionKey: 'Or',\n builder: (operands: Array<Expression<boolean>>) => {\n return { operands }\n },\n resolver: (expression, evaluate) => {\n const values = expression.operands.map((it) => evaluate(it))\n const trueValue = values.find((it) => it)\n return Objects.isPresent(trueValue)\n },\n})\n\nexport const or = OrExpression.builder\n\nexport const EqualsExpression = defineExpression({\n expressionKey: 'Equals',\n builder: (operands: Array<Expression<Signable>>) => {\n return { operands }\n },\n resolver: (expression, evaluate) => {\n const values = expression.operands.map((it) => evaluate(it)).map(Signatures.sign)\n\n if (values.length === 0) {\n return true\n }\n\n const first = values[0]\n return values.every((val) => val === first)\n },\n})\n\nexport const equals = EqualsExpression.builder\n\nexport const ContainsExpression = defineExpression({\n expressionKey: 'Contains',\n builder: (collection: Expression<Array<Signable>>, operands: Array<Expression<Signable>>) => {\n return { collection, operands }\n },\n resolver: (expression, evaluate) => {\n const collection = evaluate(expression.collection)\n const values = expression.operands.map((it) => evaluate(it))\n return Arrays.containsAll(collection, values)\n },\n})\n\nexport const contains = ContainsExpression.builder\n\nconst DEFAULT_EXPRESSION_DEFINITIONS: Array<ExpressionDefinition<unknown, Array<any>, Expression<any>>> = [\n ValueExpression,\n VariableExpression,\n AndExpression,\n OrExpression,\n ContainsExpression,\n EqualsExpression,\n BasicExpressions.LessThanExpression,\n BasicExpressions.LessThanOrEqualExpression,\n BasicExpressions.GreaterThanExpression,\n BasicExpressions.GreaterThanOrEqualExpression,\n NumericExpressions.SumExpression,\n NumericExpressions.MultiplyExpression,\n NumericExpressions.FloorExpression,\n NumericExpressions.CeilingExpression,\n NumericExpressions.BoundsExpression,\n NumericExpressions.RoundExpression,\n NumericExpressions.MaxExpression,\n NumericExpressions.MinExpression,\n StringExpressions.ConcatenateExpression,\n StringExpressions.SubstringExpression,\n StringExpressions.UppercaseExpression,\n ArrayExpressions.ConcatenateExpression,\n ArrayExpressions.FirstExpression,\n]\n"],"mappings":"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","names":["reference","variable","value","evaluate"]}
1
+ {"version":3,"sources":["../../src/expression/expression.ts"],"sourcesContent":["import { ExpressionEvaluator } from '@bessemer/cornerstone/expression/expression-evaluator'\nimport {\n ArrayExpressions,\n EvaluateExpression,\n Expression,\n ExpressionContext,\n ExpressionDefinition,\n ExpressionReference,\n ExpressionVariable,\n NumericExpressions,\n ParameterizedVariable,\n StringExpressions,\n} from '@bessemer/cornerstone/expression'\nimport { Signatures } from '@bessemer/cornerstone'\nimport { Signable } from '@bessemer/cornerstone/signature'\nimport { UnknownRecord } from 'type-fest'\nimport {\n AndExpression,\n ContainsExpression,\n EqualsExpression,\n GreaterThanExpression,\n GreaterThanOrEqualExpression,\n LessThanExpression,\n LessThanOrEqualExpression,\n NotExpression,\n OrExpression,\n ValueExpression,\n VariableExpression,\n} from '@bessemer/cornerstone/expression/core-expression'\nimport { ExpressionMapper } from '@bessemer/cornerstone/expression/expression-mapper'\n\nexport const evaluate = <T>(expression: Expression<T>, context: ExpressionContext): T => {\n return new ExpressionEvaluator(DEFAULT_EXPRESSION_DEFINITIONS).evaluate(expression, context)\n}\n\nexport const evaluateDefault = <T>(expression: Expression<T>): T => {\n return evaluate(expression, defaultContext())\n}\n\nexport const map = <MappingType, ContextType>(\n expression: Expression<unknown>,\n mapper: ExpressionMapper<MappingType, ContextType>,\n context: ContextType\n): MappingType => {\n return mapper.map(expression, context)\n}\n\nexport const evaluator = (context: ExpressionContext): EvaluateExpression => {\n return (it) => evaluate(it, context)\n}\n\nexport const defaultEvaluator = (): EvaluateExpression => {\n return evaluator(defaultContext())\n}\n\nexport const defaultContext = (): ExpressionContext => {\n return { variables: {} }\n}\n\nexport const dereference = <ReturnType, ArgumentType extends Array<unknown>>(\n reference: ExpressionReference<ReturnType, ArgumentType>,\n ...args: ArgumentType\n): Expression<ReturnType> => {\n return new ExpressionEvaluator(DEFAULT_EXPRESSION_DEFINITIONS).dereference(reference, ...args)\n}\n\nexport const parameterizedVariable = <ValueType, ParameterType extends Array<Signable>>(\n name: string\n): ParameterizedVariable<ValueType, ParameterType> => {\n return {\n apply(...parameters: ParameterType): ExpressionVariable<ValueType> {\n const parameterString = parameters.map(Signatures.sign).join('.')\n return variable(`${name}.${parameterString}`)\n },\n }\n}\n\nexport const buildVariable = <T>(variable: ExpressionVariable<T>, value: T): UnknownRecord => {\n return { [variable.name]: value }\n}\n\nexport const reference = <ReturnType, ArgumentType extends Array<unknown>, ExpressionType extends Expression<ReturnType>>(\n expressionDefinition: ExpressionDefinition<ReturnType, ArgumentType, ExpressionType>\n): ExpressionReference<ReturnType, ArgumentType> => {\n return { expressionKey: expressionDefinition.expressionKey }\n}\n\nexport const value = <T>(value: T): Expression<T> => {\n return ValueExpression.builder(value) as Expression<T>\n}\n\nexport const variable = <T>(name: string): ExpressionVariable<T> => {\n return VariableExpression.builder(name) as ExpressionVariable<T>\n}\n\nexport const not = NotExpression.builder\n\nexport const and = AndExpression.builder\n\nexport const or = OrExpression.builder\n\nexport const equals = EqualsExpression.builder\n\nexport const contains = ContainsExpression.builder\n\nexport const lessThan = LessThanExpression.builder\n\nexport const lessThanOrEqual = LessThanOrEqualExpression.builder\n\nexport const greaterThan = GreaterThanExpression.builder\n\nexport const greaterThanOrEqual = GreaterThanOrEqualExpression.builder\n\nconst DEFAULT_EXPRESSION_DEFINITIONS: Array<ExpressionDefinition<unknown, Array<any>, Expression<any>>> = [\n ValueExpression,\n VariableExpression,\n AndExpression,\n OrExpression,\n ContainsExpression,\n EqualsExpression,\n LessThanExpression,\n LessThanOrEqualExpression,\n GreaterThanExpression,\n GreaterThanOrEqualExpression,\n NumericExpressions.SumExpression,\n NumericExpressions.MultiplyExpression,\n NumericExpressions.FloorExpression,\n NumericExpressions.CeilingExpression,\n NumericExpressions.BoundExpression,\n NumericExpressions.RoundExpression,\n NumericExpressions.MaxExpression,\n NumericExpressions.MinExpression,\n StringExpressions.ConcatenateExpression,\n StringExpressions.SubstringExpression,\n StringExpressions.UppercaseExpression,\n ArrayExpressions.ConcatenateExpression,\n ArrayExpressions.FirstExpression,\n]\n"],"mappings":";AAAA,SAAS,2BAA2B;AACpC;AAAA,EACE;AAAA,EAOA;AAAA,EAEA;AAAA,OACK;AACP,SAAS,kBAAkB;AAG3B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGA,IAAM,WAAW,CAAI,YAA2B,YAAkC;AACvF,SAAO,IAAI,oBAAoB,8BAA8B,EAAE,SAAS,YAAY,OAAO;AAC7F;AAEO,IAAM,kBAAkB,CAAI,eAAiC;AAClE,SAAO,SAAS,YAAY,eAAe,CAAC;AAC9C;AAEO,IAAM,MAAM,CACjB,YACA,QACA,YACgB;AAChB,SAAO,OAAO,IAAI,YAAY,OAAO;AACvC;AAEO,IAAM,YAAY,CAAC,YAAmD;AAC3E,SAAO,CAAC,OAAO,SAAS,IAAI,OAAO;AACrC;AAEO,IAAM,mBAAmB,MAA0B;AACxD,SAAO,UAAU,eAAe,CAAC;AACnC;AAEO,IAAM,iBAAiB,MAAyB;AACrD,SAAO,EAAE,WAAW,CAAC,EAAE;AACzB;AAEO,IAAM,cAAc,CACzBA,eACG,SACwB;AAC3B,SAAO,IAAI,oBAAoB,8BAA8B,EAAE,YAAYA,YAAW,GAAG,IAAI;AAC/F;AAEO,IAAM,wBAAwB,CACnC,SACoD;AACpD,SAAO;AAAA,IACL,SAAS,YAA0D;AACjE,YAAM,kBAAkB,WAAW,IAAI,WAAW,IAAI,EAAE,KAAK,GAAG;AAChE,aAAO,SAAS,GAAG,IAAI,IAAI,eAAe,EAAE;AAAA,IAC9C;AAAA,EACF;AACF;AAEO,IAAM,gBAAgB,CAAIC,WAAiCC,WAA4B;AAC5F,SAAO,EAAE,CAACD,UAAS,IAAI,GAAGC,OAAM;AAClC;AAEO,IAAM,YAAY,CACvB,yBACkD;AAClD,SAAO,EAAE,eAAe,qBAAqB,cAAc;AAC7D;AAEO,IAAM,QAAQ,CAAIA,WAA4B;AACnD,SAAO,gBAAgB,QAAQA,MAAK;AACtC;AAEO,IAAM,WAAW,CAAI,SAAwC;AAClE,SAAO,mBAAmB,QAAQ,IAAI;AACxC;AAEO,IAAM,MAAM,cAAc;AAE1B,IAAM,MAAM,cAAc;AAE1B,IAAM,KAAK,aAAa;AAExB,IAAM,SAAS,iBAAiB;AAEhC,IAAM,WAAW,mBAAmB;AAEpC,IAAM,WAAW,mBAAmB;AAEpC,IAAM,kBAAkB,0BAA0B;AAElD,IAAM,cAAc,sBAAsB;AAE1C,IAAM,qBAAqB,6BAA6B;AAE/D,IAAM,iCAAoG;AAAA,EACxG;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,iBAAiB;AACnB;","names":["reference","variable","value"]}
@@ -1,5 +1,6 @@
1
1
  import { Expression } from '@bessemer/cornerstone/expression';
2
2
  import { Maths } from '@bessemer/cornerstone';
3
+ import { Bounds } from '@bessemer/cornerstone/range';
3
4
  export declare const SumExpression: import("@bessemer/cornerstone/expression").ExpressionDefinition<number, [initialOperands: Expression<number>[]], Expression<number> & {
4
5
  operands: Expression<number>[];
5
6
  }>;
@@ -12,15 +13,13 @@ export declare const MultiplyExpression: import("@bessemer/cornerstone/expressio
12
13
  export declare const multiply: (initialOperands: Expression<number>[]) => Expression<number> & {
13
14
  operands: Expression<number>[];
14
15
  };
15
- export declare const BoundsExpression: import("@bessemer/cornerstone/expression").ExpressionDefinition<number, [value: Expression<number>, minimumThreshold: Expression<number> | null, maximumThreshold: Expression<number> | null], Expression<number> & {
16
+ export declare const BoundExpression: import("@bessemer/cornerstone/expression").ExpressionDefinition<number, [value: Expression<number>, bounds: Bounds<Expression<number>>], Expression<number> & {
16
17
  value: Expression<number>;
17
- minimumThreshold: Expression<number> | null;
18
- maximumThreshold: Expression<number> | null;
18
+ bounds: Bounds<Expression<number>>;
19
19
  }>;
20
- export declare const bounds: (value: Expression<number>, minimumThreshold: Expression<number> | null, maximumThreshold: Expression<number> | null) => Expression<number> & {
20
+ export declare const bound: (value: Expression<number>, bounds: Bounds<Expression<number>>) => Expression<number> & {
21
21
  value: Expression<number>;
22
- minimumThreshold: Expression<number> | null;
23
- maximumThreshold: Expression<number> | null;
22
+ bounds: Bounds<Expression<number>>;
24
23
  };
25
24
  export declare const FloorExpression: import("@bessemer/cornerstone/expression").ExpressionDefinition<number, [value: Expression<number>, minimumThreshold: Expression<number> | null], Expression<number> & {
26
25
  value: Expression<number>;
@@ -1 +1 @@
1
- {"version":3,"file":"numeric-expression.d.ts","sourceRoot":"","sources":["../../src/expression/numeric-expression.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAC7D,OAAO,EAAE,KAAK,EAAW,MAAM,uBAAuB,CAAA;AAGtD,eAAO,MAAM,aAAa;;EAiBxB,CAAA;AAEF,eAAO,MAAM,GAAG;;CAAwB,CAAA;AAExC,eAAO,MAAM,kBAAkB;;EAiB7B,CAAA;AAEF,eAAO,MAAM,QAAQ;;CAA6B,CAAA;AAGlD,eAAO,MAAM,gBAAgB;;;;EAkB3B,CAAA;AAEF,eAAO,MAAM,MAAM;;;;CAA2B,CAAA;AAE9C,eAAO,MAAM,eAAe;;;EAc1B,CAAA;AAEF,eAAO,MAAM,KAAK;;;CAA0B,CAAA;AAE5C,eAAO,MAAM,iBAAiB;;;EAc5B,CAAA;AAEF,eAAO,MAAM,OAAO;;;CAA4B,CAAA;AAEhD,eAAO,MAAM,eAAe;;;;EAQ1B,CAAA;AAEF,eAAO,MAAM,KAAK;;;;CAA0B,CAAA;AAE5C,eAAO,MAAM,aAAa;;EAiBxB,CAAA;AAEF,eAAO,MAAM,GAAG;;CAAwB,CAAA;AAExC,eAAO,MAAM,aAAa;;EAiBxB,CAAA;AAEF,eAAO,MAAM,GAAG;;CAAwB,CAAA"}
1
+ {"version":3,"file":"numeric-expression.d.ts","sourceRoot":"","sources":["../../src/expression/numeric-expression.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAC7D,OAAO,EAAE,KAAK,EAAW,MAAM,uBAAuB,CAAA;AAEtD,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAA;AAEpD,eAAO,MAAM,aAAa;;EAiBxB,CAAA;AAEF,eAAO,MAAM,GAAG;;CAAwB,CAAA;AAExC,eAAO,MAAM,kBAAkB;;EAiB7B,CAAA;AAEF,eAAO,MAAM,QAAQ;;CAA6B,CAAA;AAElD,eAAO,MAAM,eAAe;;;EAmB1B,CAAA;AAEF,eAAO,MAAM,KAAK;;;CAA0B,CAAA;AAE5C,eAAO,MAAM,eAAe;;;EAc1B,CAAA;AAEF,eAAO,MAAM,KAAK;;;CAA0B,CAAA;AAE5C,eAAO,MAAM,iBAAiB;;;EAc5B,CAAA;AAEF,eAAO,MAAM,OAAO;;;CAA4B,CAAA;AAEhD,eAAO,MAAM,eAAe;;;;EAQ1B,CAAA;AAEF,eAAO,MAAM,KAAK;;;;CAA0B,CAAA;AAE5C,eAAO,MAAM,aAAa;;EAiBxB,CAAA;AAEF,eAAO,MAAM,GAAG;;CAAwB,CAAA;AAExC,eAAO,MAAM,aAAa;;EAiBxB,CAAA;AAEF,eAAO,MAAM,GAAG;;CAAwB,CAAA"}
@@ -37,15 +37,15 @@ var MultiplyExpression = defineExpression({
37
37
  }
38
38
  });
39
39
  var multiply = MultiplyExpression.builder;
40
- var BoundsExpression = defineExpression({
41
- expressionKey: "Numeric.Bounds",
42
- builder: (value, minimumThreshold, maximumThreshold) => {
43
- return { value, minimumThreshold, maximumThreshold };
40
+ var BoundExpression = defineExpression({
41
+ expressionKey: "Numeric.Bound",
42
+ builder: (value, bounds) => {
43
+ return { value, bounds };
44
44
  },
45
45
  resolver: (expression, evaluate) => {
46
46
  let value = evaluate(expression.value);
47
- const minimumThreshold = Objects.isPresent(expression.minimumThreshold) ? evaluate(expression.minimumThreshold) : null;
48
- const maximumThreshold = Objects.isPresent(expression.maximumThreshold) ? evaluate(expression.maximumThreshold) : null;
47
+ const minimumThreshold = Objects.isPresent(expression.bounds[0]) ? evaluate(expression.bounds[0]) : null;
48
+ const maximumThreshold = Objects.isPresent(expression.bounds[1]) ? evaluate(expression.bounds[1]) : null;
49
49
  if (Objects.isPresent(minimumThreshold) && value < minimumThreshold) {
50
50
  value = minimumThreshold;
51
51
  }
@@ -55,7 +55,7 @@ var BoundsExpression = defineExpression({
55
55
  return value;
56
56
  }
57
57
  });
58
- var bounds = BoundsExpression.builder;
58
+ var bound = BoundExpression.builder;
59
59
  var FloorExpression = defineExpression({
60
60
  expressionKey: "Numeric.Floor",
61
61
  builder: (value, minimumThreshold) => {
@@ -133,7 +133,7 @@ var MaxExpression = defineExpression({
133
133
  });
134
134
  var max = MaxExpression.builder;
135
135
  export {
136
- BoundsExpression,
136
+ BoundExpression,
137
137
  CeilingExpression,
138
138
  FloorExpression,
139
139
  MaxExpression,
@@ -141,7 +141,7 @@ export {
141
141
  MultiplyExpression,
142
142
  RoundExpression,
143
143
  SumExpression,
144
- bounds,
144
+ bound,
145
145
  ceiling,
146
146
  floor,
147
147
  max,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/expression/numeric-expression.ts"],"sourcesContent":["import { defineExpression, isType } from '@bessemer/cornerstone/expression/internal'\nimport { Expression } from '@bessemer/cornerstone/expression'\nimport { Maths, Objects } from '@bessemer/cornerstone'\nimport { RoundingMode } from '@bessemer/cornerstone/math'\n\nexport const SumExpression = defineExpression({\n expressionKey: 'Numeric.Sum',\n builder: (initialOperands: Array<Expression<number>>) => {\n const operands: Array<Expression<number>> = initialOperands.flatMap((it) => {\n if (isType(it, SumExpression)) {\n return it.operands\n } else {\n return [it]\n }\n })\n\n return { operands }\n },\n resolver: ({ operands }, evaluate) => {\n const values = operands.map((it) => evaluate(it))\n return values.reduce((x, y) => x + y, 0)\n },\n})\n\nexport const sum = SumExpression.builder\n\nexport const MultiplyExpression = defineExpression({\n expressionKey: 'Numeric.Multiply',\n builder: (initialOperands: Array<Expression<number>>) => {\n const operands: Array<Expression<number>> = initialOperands.flatMap((it) => {\n if (isType(it, MultiplyExpression)) {\n return it.operands\n } else {\n return [it]\n }\n })\n\n return { operands }\n },\n resolver: ({ operands }, evaluate) => {\n const values = operands.map((it) => evaluate(it))\n return values.reduce((x, y) => x * y, 1)\n },\n})\n\nexport const multiply = MultiplyExpression.builder\n\n// JOHN convert to using the Bounds type and maybe rename to indicate that this bounds the value rather than tests to see if it is in bounds?\nexport const BoundsExpression = defineExpression({\n expressionKey: 'Numeric.Bounds',\n builder: (value: Expression<number>, minimumThreshold: Expression<number> | null, maximumThreshold: Expression<number> | null) => {\n return { value, minimumThreshold, maximumThreshold }\n },\n resolver: (expression, evaluate) => {\n let value = evaluate(expression.value)\n const minimumThreshold = Objects.isPresent(expression.minimumThreshold) ? evaluate(expression.minimumThreshold) : null\n const maximumThreshold = Objects.isPresent(expression.maximumThreshold) ? evaluate(expression.maximumThreshold) : null\n if (Objects.isPresent(minimumThreshold) && value < minimumThreshold) {\n value = minimumThreshold\n }\n if (Objects.isPresent(maximumThreshold) && value > maximumThreshold) {\n value = maximumThreshold\n }\n\n return value\n },\n})\n\nexport const bounds = BoundsExpression.builder\n\nexport const FloorExpression = defineExpression({\n expressionKey: 'Numeric.Floor',\n builder: (value: Expression<number>, minimumThreshold: Expression<number> | null) => {\n return { value, minimumThreshold }\n },\n resolver: (expression, evaluate) => {\n let value = evaluate(expression.value)\n const minimumThreshold = Objects.isPresent(expression.minimumThreshold) ? evaluate(expression.minimumThreshold) : null\n if (Objects.isPresent(minimumThreshold) && value < minimumThreshold) {\n value = minimumThreshold\n }\n\n return value\n },\n})\n\nexport const floor = FloorExpression.builder\n\nexport const CeilingExpression = defineExpression({\n expressionKey: 'Numeric.Ceiling',\n builder: (value: Expression<number>, maximumThreshold: Expression<number> | null) => {\n return { value, maximumThreshold }\n },\n resolver: (expression, evaluate) => {\n let value = evaluate(expression.value)\n const maximumThreshold = Objects.isPresent(expression.maximumThreshold) ? evaluate(expression.maximumThreshold) : null\n if (Objects.isPresent(maximumThreshold) && value > maximumThreshold) {\n value = maximumThreshold\n }\n\n return value\n },\n})\n\nexport const ceiling = CeilingExpression.builder\n\nexport const RoundExpression = defineExpression({\n expressionKey: 'Numeric.Round',\n builder: (value: Expression<number>, scale: number, roundingMode: RoundingMode) => {\n return { value, scale, roundingMode }\n },\n resolver: ({ value, scale, roundingMode }, evaluate) => {\n return Maths.round(evaluate(value), scale, roundingMode)\n },\n})\n\nexport const round = RoundExpression.builder\n\nexport const MinExpression = defineExpression({\n expressionKey: 'Numeric.Min',\n builder: (initialOperands: Array<Expression<number>>) => {\n const operands: Array<Expression<number>> = initialOperands.flatMap((it) => {\n if (isType(it, MinExpression)) {\n return it.operands\n } else {\n return [it]\n }\n })\n\n return { operands }\n },\n resolver: ({ operands }, evaluate) => {\n const values = operands.map((it) => evaluate(it))\n return Math.min(...values)\n },\n})\n\nexport const min = MinExpression.builder\n\nexport const MaxExpression = defineExpression({\n expressionKey: 'Numeric.Max',\n builder: (initialOperands: Array<Expression<number>>) => {\n const operands: Array<Expression<number>> = initialOperands.flatMap((it) => {\n if (isType(it, MaxExpression)) {\n return it.operands\n } else {\n return [it]\n }\n })\n\n return { operands }\n },\n resolver: ({ operands }, evaluate) => {\n const values = operands.map((it) => evaluate(it))\n return Math.max(...values)\n },\n})\n\nexport const max = MaxExpression.builder\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/expression/numeric-expression.ts"],"sourcesContent":["import { defineExpression, isType } from '@bessemer/cornerstone/expression/internal'\nimport { Expression } from '@bessemer/cornerstone/expression'\nimport { Maths, Objects } from '@bessemer/cornerstone'\nimport { RoundingMode } from '@bessemer/cornerstone/math'\nimport { Bounds } from '@bessemer/cornerstone/range'\n\nexport const SumExpression = defineExpression({\n expressionKey: 'Numeric.Sum',\n builder: (initialOperands: Array<Expression<number>>) => {\n const operands: Array<Expression<number>> = initialOperands.flatMap((it) => {\n if (isType(it, SumExpression)) {\n return it.operands\n } else {\n return [it]\n }\n })\n\n return { operands }\n },\n resolver: ({ operands }, evaluate) => {\n const values = operands.map((it) => evaluate(it))\n return values.reduce((x, y) => x + y, 0)\n },\n})\n\nexport const sum = SumExpression.builder\n\nexport const MultiplyExpression = defineExpression({\n expressionKey: 'Numeric.Multiply',\n builder: (initialOperands: Array<Expression<number>>) => {\n const operands: Array<Expression<number>> = initialOperands.flatMap((it) => {\n if (isType(it, MultiplyExpression)) {\n return it.operands\n } else {\n return [it]\n }\n })\n\n return { operands }\n },\n resolver: ({ operands }, evaluate) => {\n const values = operands.map((it) => evaluate(it))\n return values.reduce((x, y) => x * y, 1)\n },\n})\n\nexport const multiply = MultiplyExpression.builder\n\nexport const BoundExpression = defineExpression({\n expressionKey: 'Numeric.Bound',\n builder: (value: Expression<number>, bounds: Bounds<Expression<number>>) => {\n return { value, bounds }\n },\n resolver: (expression, evaluate) => {\n let value = evaluate(expression.value)\n const minimumThreshold = Objects.isPresent(expression.bounds[0]) ? evaluate(expression.bounds[0]) : null\n const maximumThreshold = Objects.isPresent(expression.bounds[1]) ? evaluate(expression.bounds[1]) : null\n\n if (Objects.isPresent(minimumThreshold) && value < minimumThreshold) {\n value = minimumThreshold\n }\n if (Objects.isPresent(maximumThreshold) && value > maximumThreshold) {\n value = maximumThreshold\n }\n\n return value\n },\n})\n\nexport const bound = BoundExpression.builder\n\nexport const FloorExpression = defineExpression({\n expressionKey: 'Numeric.Floor',\n builder: (value: Expression<number>, minimumThreshold: Expression<number> | null) => {\n return { value, minimumThreshold }\n },\n resolver: (expression, evaluate) => {\n let value = evaluate(expression.value)\n const minimumThreshold = Objects.isPresent(expression.minimumThreshold) ? evaluate(expression.minimumThreshold) : null\n if (Objects.isPresent(minimumThreshold) && value < minimumThreshold) {\n value = minimumThreshold\n }\n\n return value\n },\n})\n\nexport const floor = FloorExpression.builder\n\nexport const CeilingExpression = defineExpression({\n expressionKey: 'Numeric.Ceiling',\n builder: (value: Expression<number>, maximumThreshold: Expression<number> | null) => {\n return { value, maximumThreshold }\n },\n resolver: (expression, evaluate) => {\n let value = evaluate(expression.value)\n const maximumThreshold = Objects.isPresent(expression.maximumThreshold) ? evaluate(expression.maximumThreshold) : null\n if (Objects.isPresent(maximumThreshold) && value > maximumThreshold) {\n value = maximumThreshold\n }\n\n return value\n },\n})\n\nexport const ceiling = CeilingExpression.builder\n\nexport const RoundExpression = defineExpression({\n expressionKey: 'Numeric.Round',\n builder: (value: Expression<number>, scale: number, roundingMode: RoundingMode) => {\n return { value, scale, roundingMode }\n },\n resolver: ({ value, scale, roundingMode }, evaluate) => {\n return Maths.round(evaluate(value), scale, roundingMode)\n },\n})\n\nexport const round = RoundExpression.builder\n\nexport const MinExpression = defineExpression({\n expressionKey: 'Numeric.Min',\n builder: (initialOperands: Array<Expression<number>>) => {\n const operands: Array<Expression<number>> = initialOperands.flatMap((it) => {\n if (isType(it, MinExpression)) {\n return it.operands\n } else {\n return [it]\n }\n })\n\n return { operands }\n },\n resolver: ({ operands }, evaluate) => {\n const values = operands.map((it) => evaluate(it))\n return Math.min(...values)\n },\n})\n\nexport const min = MinExpression.builder\n\nexport const MaxExpression = defineExpression({\n expressionKey: 'Numeric.Max',\n builder: (initialOperands: Array<Expression<number>>) => {\n const operands: Array<Expression<number>> = initialOperands.flatMap((it) => {\n if (isType(it, MaxExpression)) {\n return it.operands\n } else {\n return [it]\n }\n })\n\n return { operands }\n },\n resolver: ({ operands }, evaluate) => {\n const values = operands.map((it) => evaluate(it))\n return Math.max(...values)\n },\n})\n\nexport const max = MaxExpression.builder\n"],"mappings":"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","names":[]}
@@ -1,4 +1,3 @@
1
- import * as BasicExpressions from '@bessemer/cornerstone/expression/basic-expression';
2
1
  import * as NumericExpressions from '@bessemer/cornerstone/expression/numeric-expression';
3
2
  import * as StringExpressions from '@bessemer/cornerstone/expression/string-expression';
4
3
  import * as ArrayExpressions from '@bessemer/cornerstone/expression/array-expression';
@@ -6,7 +5,7 @@ import * as Expressions from '@bessemer/cornerstone/expression/expression';
6
5
  import { NominalType } from '@bessemer/cornerstone/types';
7
6
  import { Signable } from '@bessemer/cornerstone/signature';
8
7
  import { UnknownRecord } from 'type-fest';
9
- export { Expressions, BasicExpressions, NumericExpressions, StringExpressions, ArrayExpressions };
8
+ export { Expressions, NumericExpressions, StringExpressions, ArrayExpressions };
10
9
  export type ExpressionKey<ReturnType, ArgumentType extends Array<unknown>> = NominalType<string, ['ExpressionKey', ReturnType, ArgumentType]>;
11
10
  export type Expression<ReturnType> = ReturnType | IExpression<ReturnType>;
12
11
  export interface IExpression<ReturnType> {
@@ -1 +1 @@
1
- {"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../src/expression.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,gBAAgB,MAAM,mDAAmD,CAAA;AACrF,OAAO,KAAK,kBAAkB,MAAM,qDAAqD,CAAA;AACzF,OAAO,KAAK,iBAAiB,MAAM,oDAAoD,CAAA;AACvF,OAAO,KAAK,gBAAgB,MAAM,mDAAmD,CAAA;AACrF,OAAO,KAAK,WAAW,MAAM,6CAA6C,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,CAAA;AAEjG,MAAM,MAAM,aAAa,CAAC,UAAU,EAAE,YAAY,SAAS,KAAK,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC,eAAe,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAAA;AAE7I,MAAM,MAAM,UAAU,CAAC,UAAU,IAAI,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,CAAA;AAEzE,MAAM,WAAW,WAAW,CAAC,UAAU;IACrC,aAAa,EAAE,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;CACzD;AAED,MAAM,WAAW,mBAAmB,CAAC,UAAU,EAAE,YAAY,SAAS,KAAK,CAAC,OAAO,CAAC;IAClF,aAAa,EAAE,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;CACvD;AAED,MAAM,WAAW,kBAAkB,CAAC,UAAU,EAAE,YAAY,CAAE,SAAQ,mBAAmB,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;CAAG;AAE3I,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;AAEpE,MAAM,MAAM,oBAAoB,CAC9B,UAAU,EACV,YAAY,SAAS,KAAK,CAAC,OAAO,CAAC,EACnC,cAAc,SAAS,UAAU,CAAC,UAAU,CAAC,IAC3C,mBAAmB,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG;IAClD,aAAa,EAAE,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;IACtD,OAAO,EAAE,CAAC,GAAG,UAAU,EAAE,YAAY,KAAK,cAAc,CAAA;IACxD,QAAQ,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAE,iBAAiB,KAAK,UAAU,CAAA;CAC/G,CAAA;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,CAAE,SAAQ,WAAW,CAAC,CAAC,CAAC;IAC3D,aAAa,EAAE,UAAU,CAAA;IACzB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,qBAAqB,CAAC,SAAS,EAAE,aAAa,SAAS,KAAK,CAAC,QAAQ,CAAC;IACrF,KAAK,CAAC,GAAG,UAAU,EAAE,aAAa,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAA;CACnE;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,aAAa,CAAA;CACzB,CAAA"}
1
+ {"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../src/expression.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,kBAAkB,MAAM,qDAAqD,CAAA;AACzF,OAAO,KAAK,iBAAiB,MAAM,oDAAoD,CAAA;AACvF,OAAO,KAAK,gBAAgB,MAAM,mDAAmD,CAAA;AACrF,OAAO,KAAK,WAAW,MAAM,6CAA6C,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,CAAA;AAE/E,MAAM,MAAM,aAAa,CAAC,UAAU,EAAE,YAAY,SAAS,KAAK,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC,eAAe,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAAA;AAE7I,MAAM,MAAM,UAAU,CAAC,UAAU,IAAI,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,CAAA;AAEzE,MAAM,WAAW,WAAW,CAAC,UAAU;IACrC,aAAa,EAAE,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;CACzD;AAED,MAAM,WAAW,mBAAmB,CAAC,UAAU,EAAE,YAAY,SAAS,KAAK,CAAC,OAAO,CAAC;IAClF,aAAa,EAAE,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;CACvD;AAED,MAAM,WAAW,kBAAkB,CAAC,UAAU,EAAE,YAAY,CAAE,SAAQ,mBAAmB,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;CAAG;AAE3I,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;AAEpE,MAAM,MAAM,oBAAoB,CAC9B,UAAU,EACV,YAAY,SAAS,KAAK,CAAC,OAAO,CAAC,EACnC,cAAc,SAAS,UAAU,CAAC,UAAU,CAAC,IAC3C,mBAAmB,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG;IAClD,aAAa,EAAE,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;IACtD,OAAO,EAAE,CAAC,GAAG,UAAU,EAAE,YAAY,KAAK,cAAc,CAAA;IACxD,QAAQ,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAE,iBAAiB,KAAK,UAAU,CAAA;CAC/G,CAAA;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,CAAE,SAAQ,WAAW,CAAC,CAAC,CAAC;IAC3D,aAAa,EAAE,UAAU,CAAA;IACzB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,qBAAqB,CAAC,SAAS,EAAE,aAAa,SAAS,KAAK,CAAC,QAAQ,CAAC;IACrF,KAAK,CAAC,GAAG,UAAU,EAAE,aAAa,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAA;CACnE;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,aAAa,CAAA;CACzB,CAAA"}
@@ -1,12 +1,10 @@
1
1
  // src/expression.ts
2
- import * as BasicExpressions from "@bessemer/cornerstone/expression/basic-expression";
3
2
  import * as NumericExpressions from "@bessemer/cornerstone/expression/numeric-expression";
4
3
  import * as StringExpressions from "@bessemer/cornerstone/expression/string-expression";
5
4
  import * as ArrayExpressions from "@bessemer/cornerstone/expression/array-expression";
6
5
  import * as Expressions from "@bessemer/cornerstone/expression/expression";
7
6
  export {
8
7
  ArrayExpressions,
9
- BasicExpressions,
10
8
  Expressions,
11
9
  NumericExpressions,
12
10
  StringExpressions
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/expression.ts"],"sourcesContent":["import * as BasicExpressions from '@bessemer/cornerstone/expression/basic-expression'\nimport * as NumericExpressions from '@bessemer/cornerstone/expression/numeric-expression'\nimport * as StringExpressions from '@bessemer/cornerstone/expression/string-expression'\nimport * as ArrayExpressions from '@bessemer/cornerstone/expression/array-expression'\nimport * as Expressions from '@bessemer/cornerstone/expression/expression'\nimport { NominalType } from '@bessemer/cornerstone/types'\nimport { Signable } from '@bessemer/cornerstone/signature'\nimport { UnknownRecord } from 'type-fest'\n\nexport { Expressions, BasicExpressions, NumericExpressions, StringExpressions, ArrayExpressions }\n\nexport type ExpressionKey<ReturnType, ArgumentType extends Array<unknown>> = NominalType<string, ['ExpressionKey', ReturnType, ArgumentType]>\n\nexport type Expression<ReturnType> = ReturnType | IExpression<ReturnType>\n\nexport interface IExpression<ReturnType> {\n expressionKey: ExpressionKey<ReturnType, Array<unknown>>\n}\n\nexport interface ExpressionReference<ReturnType, ArgumentType extends Array<unknown>> {\n expressionKey: ExpressionKey<ReturnType, ArgumentType>\n}\n\nexport interface ReducingExpression<ReturnType, ArgumentType> extends ExpressionReference<ReturnType, [Array<Expression<ArgumentType>>]> {}\n\nexport type EvaluateExpression = <T>(expression: Expression<T>) => T\n\nexport type ExpressionDefinition<\n ReturnType,\n ArgumentType extends Array<unknown>,\n ExpressionType extends Expression<ReturnType>\n> = ExpressionReference<ReturnType, ArgumentType> & {\n expressionKey: ExpressionKey<ReturnType, ArgumentType>\n builder: (...parameters: ArgumentType) => ExpressionType\n resolver: (expression: ExpressionType, evaluate: EvaluateExpression, context: ExpressionContext) => ReturnType\n}\n\nexport interface ExpressionVariable<T> extends IExpression<T> {\n expressionKey: 'Variable'\n name: string\n}\n\nexport interface ParameterizedVariable<ValueType, ParameterType extends Array<Signable>> {\n apply(...parameters: ParameterType): ExpressionVariable<ValueType>\n}\n\nexport type ExpressionContext = {\n variables: UnknownRecord\n}\n"],"mappings":";AAAA,YAAY,sBAAsB;AAClC,YAAY,wBAAwB;AACpC,YAAY,uBAAuB;AACnC,YAAY,sBAAsB;AAClC,YAAY,iBAAiB;","names":[]}
1
+ {"version":3,"sources":["../src/expression.ts"],"sourcesContent":["import * as NumericExpressions from '@bessemer/cornerstone/expression/numeric-expression'\nimport * as StringExpressions from '@bessemer/cornerstone/expression/string-expression'\nimport * as ArrayExpressions from '@bessemer/cornerstone/expression/array-expression'\nimport * as Expressions from '@bessemer/cornerstone/expression/expression'\nimport { NominalType } from '@bessemer/cornerstone/types'\nimport { Signable } from '@bessemer/cornerstone/signature'\nimport { UnknownRecord } from 'type-fest'\n\nexport { Expressions, NumericExpressions, StringExpressions, ArrayExpressions }\n\nexport type ExpressionKey<ReturnType, ArgumentType extends Array<unknown>> = NominalType<string, ['ExpressionKey', ReturnType, ArgumentType]>\n\nexport type Expression<ReturnType> = ReturnType | IExpression<ReturnType>\n\nexport interface IExpression<ReturnType> {\n expressionKey: ExpressionKey<ReturnType, Array<unknown>>\n}\n\nexport interface ExpressionReference<ReturnType, ArgumentType extends Array<unknown>> {\n expressionKey: ExpressionKey<ReturnType, ArgumentType>\n}\n\nexport interface ReducingExpression<ReturnType, ArgumentType> extends ExpressionReference<ReturnType, [Array<Expression<ArgumentType>>]> {}\n\nexport type EvaluateExpression = <T>(expression: Expression<T>) => T\n\nexport type ExpressionDefinition<\n ReturnType,\n ArgumentType extends Array<unknown>,\n ExpressionType extends Expression<ReturnType>\n> = ExpressionReference<ReturnType, ArgumentType> & {\n expressionKey: ExpressionKey<ReturnType, ArgumentType>\n builder: (...parameters: ArgumentType) => ExpressionType\n resolver: (expression: ExpressionType, evaluate: EvaluateExpression, context: ExpressionContext) => ReturnType\n}\n\nexport interface ExpressionVariable<T> extends IExpression<T> {\n expressionKey: 'Variable'\n name: string\n}\n\nexport interface ParameterizedVariable<ValueType, ParameterType extends Array<Signable>> {\n apply(...parameters: ParameterType): ExpressionVariable<ValueType>\n}\n\nexport type ExpressionContext = {\n variables: UnknownRecord\n}\n"],"mappings":";AAAA,YAAY,wBAAwB;AACpC,YAAY,uBAAuB;AACnC,YAAY,sBAAsB;AAClC,YAAY,iBAAiB;","names":[]}
@@ -0,0 +1,11 @@
1
+ import { ExpressionMapper } from '@bessemer/cornerstone/expression/expression-mapper';
2
+ import { Dictionary } from '@bessemer/cornerstone/types';
3
+ import { SqlFragment, SqlParameterMap } from '@bessemer/cornerstone/sql';
4
+ export type SqlExpressionParserContext = {
5
+ variables: Dictionary<string>;
6
+ parameters: SqlParameterMap;
7
+ };
8
+ export declare class SqlExpressionParser extends ExpressionMapper<SqlFragment, SqlExpressionParserContext> {
9
+ }
10
+ export declare const DefaultSqlExpressionParser: SqlExpressionParser;
11
+ //# sourceMappingURL=sql-expression-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-expression-parser.d.ts","sourceRoot":"","sources":["../../src/sql/sql-expression-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oDAAoD,CAAA;AAErF,OAAO,EAAa,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAenE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAExE,MAAM,MAAM,0BAA0B,GAAG;IACvC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;IAC7B,UAAU,EAAE,eAAe,CAAA;CAC5B,CAAA;AACD,qBAAa,mBAAoB,SAAQ,gBAAgB,CAAC,WAAW,EAAE,0BAA0B,CAAC;CAAG;AAErG,eAAO,MAAM,0BAA0B,qBAA4B,CAAA"}
@@ -0,0 +1,108 @@
1
+ // src/sql/sql-expression-parser.ts
2
+ import { ExpressionMapper } from "@bessemer/cornerstone/expression/expression-mapper";
3
+ import { Arrays, Objects, Preconditions, Ulids } from "@bessemer/cornerstone";
4
+ import {
5
+ AndExpression,
6
+ ContainsExpression,
7
+ EqualsExpression,
8
+ GreaterThanExpression,
9
+ GreaterThanOrEqualExpression,
10
+ LessThanExpression,
11
+ LessThanOrEqualExpression,
12
+ NotExpression,
13
+ OrExpression,
14
+ ValueExpression,
15
+ VariableExpression
16
+ } from "@bessemer/cornerstone/expression/core-expression";
17
+ import { isType, isValue } from "@bessemer/cornerstone/expression/internal";
18
+ var SqlExpressionParser = class extends ExpressionMapper {
19
+ };
20
+ var DefaultSqlExpressionParser = new SqlExpressionParser();
21
+ DefaultSqlExpressionParser.register(ValueExpression, (expression, _, context) => {
22
+ const value = expression.value;
23
+ const parameterName = `_${Ulids.generate()}`;
24
+ if (!Objects.isBasic(value)) {
25
+ throw new Error(`SqlExpressionParser - Unable to resolve complex ValueExpression as Sql: ${JSON.stringify(value)}`);
26
+ }
27
+ context.parameters[parameterName] = value;
28
+ return `:${parameterName}`;
29
+ });
30
+ DefaultSqlExpressionParser.register(VariableExpression, (expression, _, context) => {
31
+ const variableName = context.variables[expression.name];
32
+ Preconditions.isPresent(variableName, `SqlExpressionParser - Unable to resolve VariableExpression with name: ${expression.name}`);
33
+ return variableName;
34
+ });
35
+ DefaultSqlExpressionParser.register(NotExpression, (expression, map, context) => {
36
+ if (isType(expression.value, ContainsExpression)) {
37
+ const collection = expression.value.collection;
38
+ let value = [];
39
+ if (isType(collection, ValueExpression)) {
40
+ value = collection.value;
41
+ } else if (isValue(collection)) {
42
+ value = collection;
43
+ } else {
44
+ throw new Error(`SqlExpressionParser - Unable to resolve ContainsExpression with non-value collection: ${JSON.stringify(collection)}`);
45
+ }
46
+ value.forEach((it) => {
47
+ if (!Objects.isBasic(it)) {
48
+ throw new Error(`SqlExpressionParser - Unable to resolve complex ValueExpression as Sql: ${JSON.stringify(it)}`);
49
+ }
50
+ });
51
+ const parameterName = `_${Ulids.generate()}`;
52
+ context.parameters[parameterName] = value;
53
+ const containsExpression = expression.value.operands.map(map).map((sql) => `(${sql} NOT IN :${parameterName})`).join(" AND ");
54
+ return `(${containsExpression})`;
55
+ } else {
56
+ return `(NOT ${map(expression.value)})`;
57
+ }
58
+ });
59
+ DefaultSqlExpressionParser.register(AndExpression, (expression, map) => {
60
+ return `(${expression.operands.map(map).join(" AND ")})`;
61
+ });
62
+ DefaultSqlExpressionParser.register(OrExpression, (expression, map) => {
63
+ return `(${expression.operands.map(map).join(" OR ")})`;
64
+ });
65
+ DefaultSqlExpressionParser.register(EqualsExpression, (expression, map) => {
66
+ const first = Arrays.first(expression.operands);
67
+ const rest = Arrays.rest(expression.operands);
68
+ const mappedFirst = map(first);
69
+ const equalsExpressions = rest.map((it) => `(${mappedFirst} = ${map(it)})`).join(" AND ");
70
+ return `(${equalsExpressions})`;
71
+ });
72
+ DefaultSqlExpressionParser.register(ContainsExpression, (expression, map, context) => {
73
+ const collection = expression.collection;
74
+ let value = [];
75
+ if (isType(collection, ValueExpression)) {
76
+ value = collection.value;
77
+ } else if (isValue(collection)) {
78
+ value = collection;
79
+ } else {
80
+ throw new Error(`SqlExpressionParser - Unable to resolve ContainsExpression with non-value collection: ${JSON.stringify(collection)}`);
81
+ }
82
+ value.forEach((it) => {
83
+ if (!Objects.isBasic(it)) {
84
+ throw new Error(`SqlExpressionParser - Unable to resolve complex ValueExpression as Sql: ${JSON.stringify(it)}`);
85
+ }
86
+ });
87
+ const parameterName = `_${Ulids.generate()}`;
88
+ context.parameters[parameterName] = value;
89
+ const containsExpression = expression.operands.map(map).map((sql) => `(${sql} IN :${parameterName})`).join(" AND ");
90
+ return `(${containsExpression})`;
91
+ });
92
+ DefaultSqlExpressionParser.register(LessThanExpression, (expression, map) => {
93
+ return `(${map(expression.left)} < ${map(expression.right)})`;
94
+ });
95
+ DefaultSqlExpressionParser.register(LessThanOrEqualExpression, (expression, map) => {
96
+ return `(${map(expression.left)} <= ${map(expression.right)})`;
97
+ });
98
+ DefaultSqlExpressionParser.register(GreaterThanExpression, (expression, map) => {
99
+ return `(${map(expression.left)} > ${map(expression.right)})`;
100
+ });
101
+ DefaultSqlExpressionParser.register(GreaterThanOrEqualExpression, (expression, map) => {
102
+ return `(${map(expression.left)} >= ${map(expression.right)})`;
103
+ });
104
+ export {
105
+ DefaultSqlExpressionParser,
106
+ SqlExpressionParser
107
+ };
108
+ //# sourceMappingURL=sql-expression-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/sql/sql-expression-parser.ts"],"sourcesContent":["import { ExpressionMapper } from '@bessemer/cornerstone/expression/expression-mapper'\nimport { Arrays, Objects, Preconditions, Ulids } from '@bessemer/cornerstone'\nimport { BasicType, Dictionary } from '@bessemer/cornerstone/types'\nimport {\n AndExpression,\n ContainsExpression,\n EqualsExpression,\n GreaterThanExpression,\n GreaterThanOrEqualExpression,\n LessThanExpression,\n LessThanOrEqualExpression,\n NotExpression,\n OrExpression,\n ValueExpression,\n VariableExpression,\n} from '@bessemer/cornerstone/expression/core-expression'\nimport { isType, isValue } from '@bessemer/cornerstone/expression/internal'\nimport { SqlFragment, SqlParameterMap } from '@bessemer/cornerstone/sql'\n\nexport type SqlExpressionParserContext = {\n variables: Dictionary<string>\n parameters: SqlParameterMap\n}\nexport class SqlExpressionParser extends ExpressionMapper<SqlFragment, SqlExpressionParserContext> {}\n\nexport const DefaultSqlExpressionParser = new SqlExpressionParser()\nDefaultSqlExpressionParser.register(ValueExpression, (expression, _, context) => {\n const value = expression.value\n const parameterName = `_${Ulids.generate()}`\n if (!Objects.isBasic(value)) {\n throw new Error(`SqlExpressionParser - Unable to resolve complex ValueExpression as Sql: ${JSON.stringify(value)}`)\n }\n\n context.parameters[parameterName] = value\n return `:${parameterName}`\n})\nDefaultSqlExpressionParser.register(VariableExpression, (expression, _, context) => {\n const variableName = context.variables[expression.name]\n Preconditions.isPresent(variableName, `SqlExpressionParser - Unable to resolve VariableExpression with name: ${expression.name}`)\n return variableName\n})\nDefaultSqlExpressionParser.register(NotExpression, (expression, map, context) => {\n if (isType(expression.value, ContainsExpression)) {\n // JOHN tons of gross duplicated code that is duped across the contains resolver\n const collection = expression.value.collection\n\n // JOHN parsing expressions like this should be easier...\n let value: Array<BasicType> = []\n if (isType(collection, ValueExpression)) {\n value = collection.value as Array<BasicType>\n } else if (isValue(collection)) {\n value = collection as Array<BasicType>\n } else {\n throw new Error(`SqlExpressionParser - Unable to resolve ContainsExpression with non-value collection: ${JSON.stringify(collection)}`)\n }\n\n value.forEach((it) => {\n if (!Objects.isBasic(it)) {\n throw new Error(`SqlExpressionParser - Unable to resolve complex ValueExpression as Sql: ${JSON.stringify(it)}`)\n }\n })\n\n const parameterName = `_${Ulids.generate()}`\n context.parameters[parameterName] = value\n\n const containsExpression = expression.value.operands\n .map(map)\n .map((sql) => `(${sql} NOT IN :${parameterName})`)\n .join(' AND ')\n\n return `(${containsExpression})`\n } else {\n return `(NOT ${map(expression.value)})`\n }\n})\nDefaultSqlExpressionParser.register(AndExpression, (expression, map) => {\n return `(${expression.operands.map(map).join(' AND ')})`\n})\nDefaultSqlExpressionParser.register(OrExpression, (expression, map) => {\n return `(${expression.operands.map(map).join(' OR ')})`\n})\nDefaultSqlExpressionParser.register(EqualsExpression, (expression, map) => {\n const first = Arrays.first(expression.operands)!\n const rest = Arrays.rest(expression.operands)\n\n const mappedFirst = map(first)\n const equalsExpressions = rest.map((it) => `(${mappedFirst} = ${map(it)})`).join(' AND ')\n return `(${equalsExpressions})`\n})\nDefaultSqlExpressionParser.register(ContainsExpression, (expression, map, context) => {\n const collection = expression.collection\n\n // JOHN parsing expressions like this should be easier...\n let value: Array<BasicType> = []\n if (isType(collection, ValueExpression)) {\n value = collection.value as Array<BasicType>\n } else if (isValue(collection)) {\n value = collection as Array<BasicType>\n } else {\n throw new Error(`SqlExpressionParser - Unable to resolve ContainsExpression with non-value collection: ${JSON.stringify(collection)}`)\n }\n\n value.forEach((it) => {\n if (!Objects.isBasic(it)) {\n throw new Error(`SqlExpressionParser - Unable to resolve complex ValueExpression as Sql: ${JSON.stringify(it)}`)\n }\n })\n\n const parameterName = `_${Ulids.generate()}`\n context.parameters[parameterName] = value\n\n const containsExpression = expression.operands\n .map(map)\n .map((sql) => `(${sql} IN :${parameterName})`)\n .join(' AND ')\n\n return `(${containsExpression})`\n})\nDefaultSqlExpressionParser.register(LessThanExpression, (expression, map) => {\n return `(${map(expression.left)} < ${map(expression.right)})`\n})\nDefaultSqlExpressionParser.register(LessThanOrEqualExpression, (expression, map) => {\n return `(${map(expression.left)} <= ${map(expression.right)})`\n})\nDefaultSqlExpressionParser.register(GreaterThanExpression, (expression, map) => {\n return `(${map(expression.left)} > ${map(expression.right)})`\n})\nDefaultSqlExpressionParser.register(GreaterThanOrEqualExpression, (expression, map) => {\n return `(${map(expression.left)} >= ${map(expression.right)})`\n})\n"],"mappings":"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","names":[]}
@@ -0,0 +1,7 @@
1
+ import { Expression } from '@bessemer/cornerstone/expression';
2
+ import { SqlExpressionParser } from '@bessemer/cornerstone/sql/sql-expression-parser';
3
+ import { Dictionary } from '@bessemer/cornerstone/types';
4
+ import { SqlFragment, SqlParameterMap } from '@bessemer/cornerstone/sql';
5
+ export declare const fragment: (fragment: string) => SqlFragment;
6
+ export declare const parseExpression: (expression: Expression<unknown>, variableMap: Dictionary<string>, parser?: SqlExpressionParser) => [SqlFragment, SqlParameterMap];
7
+ //# sourceMappingURL=sql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../../src/sql/sql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAe,MAAM,kCAAkC,CAAA;AAC1E,OAAO,EAA8B,mBAAmB,EAA8B,MAAM,iDAAiD,CAAA;AAC7I,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAExE,eAAO,MAAM,QAAQ,GAAI,UAAU,MAAM,KAAG,WAE3C,CAAA;AAED,eAAO,MAAM,eAAe,GAC1B,YAAY,UAAU,CAAC,OAAO,CAAC,EAC/B,aAAa,UAAU,CAAC,MAAM,CAAC,EAC/B,SAAQ,mBAAgD,KACvD,CAAC,WAAW,EAAE,eAAe,CAO/B,CAAA"}
@@ -0,0 +1,19 @@
1
+ // src/sql/sql.ts
2
+ import { Expressions } from "@bessemer/cornerstone/expression";
3
+ import { DefaultSqlExpressionParser } from "@bessemer/cornerstone/sql/sql-expression-parser";
4
+ var fragment = (fragment2) => {
5
+ return fragment2;
6
+ };
7
+ var parseExpression = (expression, variableMap, parser = DefaultSqlExpressionParser) => {
8
+ const context = {
9
+ variables: variableMap,
10
+ parameters: {}
11
+ };
12
+ const fragment2 = Expressions.map(expression, parser, context);
13
+ return [fragment2, context.parameters];
14
+ };
15
+ export {
16
+ fragment,
17
+ parseExpression
18
+ };
19
+ //# sourceMappingURL=sql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/sql/sql.ts"],"sourcesContent":["import { Expression, Expressions } from '@bessemer/cornerstone/expression'\nimport { DefaultSqlExpressionParser, SqlExpressionParser, SqlExpressionParserContext } from '@bessemer/cornerstone/sql/sql-expression-parser'\nimport { Dictionary } from '@bessemer/cornerstone/types'\nimport { SqlFragment, SqlParameterMap } from '@bessemer/cornerstone/sql'\n\nexport const fragment = (fragment: string): SqlFragment => {\n return fragment\n}\n\nexport const parseExpression = (\n expression: Expression<unknown>,\n variableMap: Dictionary<string>,\n parser: SqlExpressionParser = DefaultSqlExpressionParser\n): [SqlFragment, SqlParameterMap] => {\n const context: SqlExpressionParserContext = {\n variables: variableMap,\n parameters: {},\n }\n const fragment = Expressions.map(expression, parser, context)\n return [fragment, context.parameters]\n}\n"],"mappings":";AAAA,SAAqB,mBAAmB;AACxC,SAAS,kCAAmF;AAIrF,IAAM,WAAW,CAACA,cAAkC;AACzD,SAAOA;AACT;AAEO,IAAM,kBAAkB,CAC7B,YACA,aACA,SAA8B,+BACK;AACnC,QAAM,UAAsC;AAAA,IAC1C,WAAW;AAAA,IACX,YAAY,CAAC;AAAA,EACf;AACA,QAAMA,YAAW,YAAY,IAAI,YAAY,QAAQ,OAAO;AAC5D,SAAO,CAACA,WAAU,QAAQ,UAAU;AACtC;","names":["fragment"]}
package/dist/sql.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ import * as Sql from '@bessemer/cornerstone/sql/sql';
2
+ import { BasicType, Dictionary, NominalType } from '@bessemer/cornerstone/types';
3
+ export { Sql };
4
+ export type SqlFragment = NominalType<string, 'SqlFragment'>;
5
+ export type SqlParameterMap = Dictionary<BasicType | Array<BasicType>>;
6
+ //# sourceMappingURL=sql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../src/sql.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,+BAA+B,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAEhF,OAAO,EAAE,GAAG,EAAE,CAAA;AAEd,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;AAC5D,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAA"}
package/dist/sql.js ADDED
@@ -0,0 +1,6 @@
1
+ // src/sql.ts
2
+ import * as Sql from "@bessemer/cornerstone/sql/sql";
3
+ export {
4
+ Sql
5
+ };
6
+ //# sourceMappingURL=sql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/sql.ts"],"sourcesContent":["import * as Sql from '@bessemer/cornerstone/sql/sql'\nimport { BasicType, Dictionary, NominalType } from '@bessemer/cornerstone/types'\n\nexport { Sql }\n\nexport type SqlFragment = NominalType<string, 'SqlFragment'>\nexport type SqlParameterMap = Dictionary<BasicType | Array<BasicType>>\n"],"mappings":";AAAA,YAAY,SAAS;","names":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bessemer/cornerstone",
3
3
  "type": "module",
4
- "version": "0.5.29",
4
+ "version": "0.5.31",
5
5
  "module": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
7
7
  "sideEffects": false,
@@ -1,35 +0,0 @@
1
- import { Expression } from '@bessemer/cornerstone/expression';
2
- import { BasicType } from '@bessemer/cornerstone/types';
3
- export declare const LessThanExpression: import("@bessemer/cornerstone/expression").ExpressionDefinition<boolean, [left: Expression<BasicType>, right: Expression<BasicType>], Expression<boolean> & {
4
- left: Expression<BasicType>;
5
- right: Expression<BasicType>;
6
- }>;
7
- export declare const lessThan: (left: Expression<BasicType>, right: Expression<BasicType>) => Expression<boolean> & {
8
- left: Expression<BasicType>;
9
- right: Expression<BasicType>;
10
- };
11
- export declare const LessThanOrEqualExpression: import("@bessemer/cornerstone/expression").ExpressionDefinition<boolean, [left: Expression<BasicType>, right: Expression<BasicType>], Expression<boolean> & {
12
- left: Expression<BasicType>;
13
- right: Expression<BasicType>;
14
- }>;
15
- export declare const lessThanOrEqual: (left: Expression<BasicType>, right: Expression<BasicType>) => Expression<boolean> & {
16
- left: Expression<BasicType>;
17
- right: Expression<BasicType>;
18
- };
19
- export declare const GreaterThanExpression: import("@bessemer/cornerstone/expression").ExpressionDefinition<boolean, [left: Expression<BasicType>, right: Expression<BasicType>], Expression<boolean> & {
20
- left: Expression<BasicType>;
21
- right: Expression<BasicType>;
22
- }>;
23
- export declare const greaterThan: (left: Expression<BasicType>, right: Expression<BasicType>) => Expression<boolean> & {
24
- left: Expression<BasicType>;
25
- right: Expression<BasicType>;
26
- };
27
- export declare const GreaterThanOrEqualExpression: import("@bessemer/cornerstone/expression").ExpressionDefinition<boolean, [left: Expression<BasicType>, right: Expression<BasicType>], Expression<boolean> & {
28
- left: Expression<BasicType>;
29
- right: Expression<BasicType>;
30
- }>;
31
- export declare const greaterThanOrEqual: (left: Expression<BasicType>, right: Expression<BasicType>) => Expression<boolean> & {
32
- left: Expression<BasicType>;
33
- right: Expression<BasicType>;
34
- };
35
- //# sourceMappingURL=basic-expression.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"basic-expression.d.ts","sourceRoot":"","sources":["../../src/expression/basic-expression.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAEvD,eAAO,MAAM,kBAAkB;;;EAQ7B,CAAA;AAEF,eAAO,MAAM,QAAQ;;;CAA6B,CAAA;AAElD,eAAO,MAAM,yBAAyB;;;EAQpC,CAAA;AAEF,eAAO,MAAM,eAAe;;;CAAoC,CAAA;AAEhE,eAAO,MAAM,qBAAqB;;;EAQhC,CAAA;AAEF,eAAO,MAAM,WAAW;;;CAAgC,CAAA;AAExD,eAAO,MAAM,4BAA4B;;;EAQvC,CAAA;AAEF,eAAO,MAAM,kBAAkB;;;CAAuC,CAAA"}
@@ -1,53 +0,0 @@
1
- // src/expression/basic-expression.ts
2
- import { defineExpression } from "@bessemer/cornerstone/expression/internal";
3
- var LessThanExpression = defineExpression({
4
- expressionKey: "Basic.LessThan",
5
- builder: (left, right) => {
6
- return { left, right };
7
- },
8
- resolver: ({ left, right }, evaluate) => {
9
- return evaluate(left) < evaluate(right);
10
- }
11
- });
12
- var lessThan = LessThanExpression.builder;
13
- var LessThanOrEqualExpression = defineExpression({
14
- expressionKey: "Basic.LessThanOrEqual",
15
- builder: (left, right) => {
16
- return { left, right };
17
- },
18
- resolver: ({ left, right }, evaluate) => {
19
- return evaluate(left) <= evaluate(right);
20
- }
21
- });
22
- var lessThanOrEqual = LessThanOrEqualExpression.builder;
23
- var GreaterThanExpression = defineExpression({
24
- expressionKey: "Basic.GreaterThan",
25
- builder: (left, right) => {
26
- return { left, right };
27
- },
28
- resolver: ({ left, right }, evaluate) => {
29
- return evaluate(left) > evaluate(right);
30
- }
31
- });
32
- var greaterThan = GreaterThanExpression.builder;
33
- var GreaterThanOrEqualExpression = defineExpression({
34
- expressionKey: "Basic.GreaterThanOrEqual",
35
- builder: (left, right) => {
36
- return { left, right };
37
- },
38
- resolver: ({ left, right }, evaluate) => {
39
- return evaluate(left) >= evaluate(right);
40
- }
41
- });
42
- var greaterThanOrEqual = GreaterThanOrEqualExpression.builder;
43
- export {
44
- GreaterThanExpression,
45
- GreaterThanOrEqualExpression,
46
- LessThanExpression,
47
- LessThanOrEqualExpression,
48
- greaterThan,
49
- greaterThanOrEqual,
50
- lessThan,
51
- lessThanOrEqual
52
- };
53
- //# sourceMappingURL=basic-expression.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/expression/basic-expression.ts"],"sourcesContent":["import { defineExpression } from '@bessemer/cornerstone/expression/internal'\nimport { Expression } from '@bessemer/cornerstone/expression'\nimport { BasicType } from '@bessemer/cornerstone/types'\n\nexport const LessThanExpression = defineExpression({\n expressionKey: 'Basic.LessThan',\n builder: (left: Expression<BasicType>, right: Expression<BasicType>) => {\n return { left, right }\n },\n resolver: ({ left, right }, evaluate) => {\n return evaluate(left) < evaluate(right)\n },\n})\n\nexport const lessThan = LessThanExpression.builder\n\nexport const LessThanOrEqualExpression = defineExpression({\n expressionKey: 'Basic.LessThanOrEqual',\n builder: (left: Expression<BasicType>, right: Expression<BasicType>) => {\n return { left, right }\n },\n resolver: ({ left, right }, evaluate) => {\n return evaluate(left) <= evaluate(right)\n },\n})\n\nexport const lessThanOrEqual = LessThanOrEqualExpression.builder\n\nexport const GreaterThanExpression = defineExpression({\n expressionKey: 'Basic.GreaterThan',\n builder: (left: Expression<BasicType>, right: Expression<BasicType>) => {\n return { left, right }\n },\n resolver: ({ left, right }, evaluate) => {\n return evaluate(left) > evaluate(right)\n },\n})\n\nexport const greaterThan = GreaterThanExpression.builder\n\nexport const GreaterThanOrEqualExpression = defineExpression({\n expressionKey: 'Basic.GreaterThanOrEqual',\n builder: (left: Expression<BasicType>, right: Expression<BasicType>) => {\n return { left, right }\n },\n resolver: ({ left, right }, evaluate) => {\n return evaluate(left) >= evaluate(right)\n },\n})\n\nexport const greaterThanOrEqual = GreaterThanOrEqualExpression.builder\n"],"mappings":";AAAA,SAAS,wBAAwB;AAI1B,IAAM,qBAAqB,iBAAiB;AAAA,EACjD,eAAe;AAAA,EACf,SAAS,CAAC,MAA6B,UAAiC;AACtE,WAAO,EAAE,MAAM,MAAM;AAAA,EACvB;AAAA,EACA,UAAU,CAAC,EAAE,MAAM,MAAM,GAAG,aAAa;AACvC,WAAO,SAAS,IAAI,IAAI,SAAS,KAAK;AAAA,EACxC;AACF,CAAC;AAEM,IAAM,WAAW,mBAAmB;AAEpC,IAAM,4BAA4B,iBAAiB;AAAA,EACxD,eAAe;AAAA,EACf,SAAS,CAAC,MAA6B,UAAiC;AACtE,WAAO,EAAE,MAAM,MAAM;AAAA,EACvB;AAAA,EACA,UAAU,CAAC,EAAE,MAAM,MAAM,GAAG,aAAa;AACvC,WAAO,SAAS,IAAI,KAAK,SAAS,KAAK;AAAA,EACzC;AACF,CAAC;AAEM,IAAM,kBAAkB,0BAA0B;AAElD,IAAM,wBAAwB,iBAAiB;AAAA,EACpD,eAAe;AAAA,EACf,SAAS,CAAC,MAA6B,UAAiC;AACtE,WAAO,EAAE,MAAM,MAAM;AAAA,EACvB;AAAA,EACA,UAAU,CAAC,EAAE,MAAM,MAAM,GAAG,aAAa;AACvC,WAAO,SAAS,IAAI,IAAI,SAAS,KAAK;AAAA,EACxC;AACF,CAAC;AAEM,IAAM,cAAc,sBAAsB;AAE1C,IAAM,+BAA+B,iBAAiB;AAAA,EAC3D,eAAe;AAAA,EACf,SAAS,CAAC,MAA6B,UAAiC;AACtE,WAAO,EAAE,MAAM,MAAM;AAAA,EACvB;AAAA,EACA,UAAU,CAAC,EAAE,MAAM,MAAM,GAAG,aAAa;AACvC,WAAO,SAAS,IAAI,KAAK,SAAS,KAAK;AAAA,EACzC;AACF,CAAC;AAEM,IAAM,qBAAqB,6BAA6B;","names":[]}
@@ -1,8 +0,0 @@
1
- import { ExpressionMapper } from '@bessemer/cornerstone/expression/expression-mapper';
2
- import { BasicType, Dictionary } from '@bessemer/cornerstone/types';
3
- export type SqlExpressionParserContext = {
4
- variables: Dictionary<string>;
5
- parameters: Dictionary<BasicType>;
6
- };
7
- export declare const SqlExpressionParser: ExpressionMapper<string, SqlExpressionParserContext>;
8
- //# sourceMappingURL=sql-expression-parser.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sql-expression-parser.d.ts","sourceRoot":"","sources":["../../src/expression/sql-expression-parser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oDAAoD,CAAA;AAErF,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAInE,MAAM,MAAM,0BAA0B,GAAG;IACvC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;IAC7B,UAAU,EAAE,UAAU,CAAC,SAAS,CAAC,CAAA;CAClC,CAAA;AACD,eAAO,MAAM,mBAAmB,sDAAkE,CAAA"}
@@ -1,51 +0,0 @@
1
- // src/expression/sql-expression-parser.ts
2
- import { BasicExpressions, Expressions } from "@bessemer/cornerstone/expression";
3
- import { ExpressionMapper } from "@bessemer/cornerstone/expression/expression-mapper";
4
- import { Arrays, Objects, Preconditions, Ulids } from "@bessemer/cornerstone";
5
- var SqlExpressionParser = new ExpressionMapper();
6
- SqlExpressionParser.register(Expressions.ValueExpression, (expression, _, context) => {
7
- const value = expression.value;
8
- const parameterName = `_${Ulids.generate()}`;
9
- if (!Objects.isBasic(value)) {
10
- throw new Error(`Unable to resolve complex ValueExpression as Sql: ${JSON.stringify(value)}`);
11
- }
12
- context.parameters[parameterName] = value;
13
- return `:${parameterName}`;
14
- });
15
- SqlExpressionParser.register(Expressions.VariableExpression, (expression, _, context) => {
16
- const variableName = context.variables[expression.name];
17
- Preconditions.isPresent(variableName, `Unable to resolve VariableExpression with name: ${expression.name}`);
18
- return variableName;
19
- });
20
- SqlExpressionParser.register(Expressions.NotExpression, (expression, map) => {
21
- return `(NOT ${map(expression.value)})`;
22
- });
23
- SqlExpressionParser.register(Expressions.AndExpression, (expression, map) => {
24
- return `(${expression.operands.map(map).join(" AND ")})`;
25
- });
26
- SqlExpressionParser.register(Expressions.OrExpression, (expression, map) => {
27
- return `(${expression.operands.map(map).join(" OR ")})`;
28
- });
29
- SqlExpressionParser.register(Expressions.EqualsExpression, (expression, map) => {
30
- const first = Arrays.first(expression.operands);
31
- const rest = Arrays.rest(expression.operands);
32
- const mappedFirst = map(first);
33
- const equalsExpressions = rest.map((it) => `(${mappedFirst} = ${map(it)})`).join(" AND ");
34
- return `(${equalsExpressions})`;
35
- });
36
- SqlExpressionParser.register(BasicExpressions.LessThanExpression, (expression, map) => {
37
- return `(${map(expression.left)} < ${map(expression.right)})`;
38
- });
39
- SqlExpressionParser.register(BasicExpressions.LessThanOrEqualExpression, (expression, map) => {
40
- return `(${map(expression.left)} <= ${map(expression.right)})`;
41
- });
42
- SqlExpressionParser.register(BasicExpressions.GreaterThanExpression, (expression, map) => {
43
- return `(${map(expression.left)} > ${map(expression.right)})`;
44
- });
45
- SqlExpressionParser.register(BasicExpressions.GreaterThanOrEqualExpression, (expression, map) => {
46
- return `(${map(expression.left)} >= ${map(expression.right)})`;
47
- });
48
- export {
49
- SqlExpressionParser
50
- };
51
- //# sourceMappingURL=sql-expression-parser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/expression/sql-expression-parser.ts"],"sourcesContent":["import { BasicExpressions, Expressions } from '@bessemer/cornerstone/expression'\nimport { ExpressionMapper } from '@bessemer/cornerstone/expression/expression-mapper'\nimport { Arrays, Objects, Preconditions, Ulids } from '@bessemer/cornerstone'\nimport { BasicType, Dictionary } from '@bessemer/cornerstone/types'\n\n// JOHN need to add tests...\ntype SqlFragment = string\nexport type SqlExpressionParserContext = {\n variables: Dictionary<string>\n parameters: Dictionary<BasicType>\n}\nexport const SqlExpressionParser = new ExpressionMapper<SqlFragment, SqlExpressionParserContext>()\n\nSqlExpressionParser.register(Expressions.ValueExpression, (expression, _, context) => {\n const value = expression.value\n const parameterName = `_${Ulids.generate()}`\n if (!Objects.isBasic(value)) {\n throw new Error(`Unable to resolve complex ValueExpression as Sql: ${JSON.stringify(value)}`)\n }\n\n context.parameters[parameterName] = value\n return `:${parameterName}`\n})\nSqlExpressionParser.register(Expressions.VariableExpression, (expression, _, context) => {\n const variableName = context.variables[expression.name]\n Preconditions.isPresent(variableName, `Unable to resolve VariableExpression with name: ${expression.name}`)\n return variableName\n})\nSqlExpressionParser.register(Expressions.NotExpression, (expression, map) => {\n return `(NOT ${map(expression.value)})`\n})\nSqlExpressionParser.register(Expressions.AndExpression, (expression, map) => {\n return `(${expression.operands.map(map).join(' AND ')})`\n})\nSqlExpressionParser.register(Expressions.OrExpression, (expression, map) => {\n return `(${expression.operands.map(map).join(' OR ')})`\n})\nSqlExpressionParser.register(Expressions.EqualsExpression, (expression, map) => {\n const first = Arrays.first(expression.operands)!\n const rest = Arrays.rest(expression.operands)\n\n const mappedFirst = map(first)\n const equalsExpressions = rest.map((it) => `(${mappedFirst} = ${map(it)})`).join(' AND ')\n return `(${equalsExpressions})`\n})\n// SqlExpressionMapper.register(Expressions.ContainsExpression, (expression, map, context) => {\n// // JOHN incomplete\n// expression.collection\n// return `(someVariable IN (${expression.collection}))`\n// })\nSqlExpressionParser.register(BasicExpressions.LessThanExpression, (expression, map) => {\n return `(${map(expression.left)} < ${map(expression.right)})`\n})\nSqlExpressionParser.register(BasicExpressions.LessThanOrEqualExpression, (expression, map) => {\n return `(${map(expression.left)} <= ${map(expression.right)})`\n})\nSqlExpressionParser.register(BasicExpressions.GreaterThanExpression, (expression, map) => {\n return `(${map(expression.left)} > ${map(expression.right)})`\n})\nSqlExpressionParser.register(BasicExpressions.GreaterThanOrEqualExpression, (expression, map) => {\n return `(${map(expression.left)} >= ${map(expression.right)})`\n})\n"],"mappings":";AAAA,SAAS,kBAAkB,mBAAmB;AAC9C,SAAS,wBAAwB;AACjC,SAAS,QAAQ,SAAS,eAAe,aAAa;AAS/C,IAAM,sBAAsB,IAAI,iBAA0D;AAEjG,oBAAoB,SAAS,YAAY,iBAAiB,CAAC,YAAY,GAAG,YAAY;AACpF,QAAM,QAAQ,WAAW;AACzB,QAAM,gBAAgB,IAAI,MAAM,SAAS,CAAC;AAC1C,MAAI,CAAC,QAAQ,QAAQ,KAAK,GAAG;AAC3B,UAAM,IAAI,MAAM,qDAAqD,KAAK,UAAU,KAAK,CAAC,EAAE;AAAA,EAC9F;AAEA,UAAQ,WAAW,aAAa,IAAI;AACpC,SAAO,IAAI,aAAa;AAC1B,CAAC;AACD,oBAAoB,SAAS,YAAY,oBAAoB,CAAC,YAAY,GAAG,YAAY;AACvF,QAAM,eAAe,QAAQ,UAAU,WAAW,IAAI;AACtD,gBAAc,UAAU,cAAc,mDAAmD,WAAW,IAAI,EAAE;AAC1G,SAAO;AACT,CAAC;AACD,oBAAoB,SAAS,YAAY,eAAe,CAAC,YAAY,QAAQ;AAC3E,SAAO,QAAQ,IAAI,WAAW,KAAK,CAAC;AACtC,CAAC;AACD,oBAAoB,SAAS,YAAY,eAAe,CAAC,YAAY,QAAQ;AAC3E,SAAO,IAAI,WAAW,SAAS,IAAI,GAAG,EAAE,KAAK,OAAO,CAAC;AACvD,CAAC;AACD,oBAAoB,SAAS,YAAY,cAAc,CAAC,YAAY,QAAQ;AAC1E,SAAO,IAAI,WAAW,SAAS,IAAI,GAAG,EAAE,KAAK,MAAM,CAAC;AACtD,CAAC;AACD,oBAAoB,SAAS,YAAY,kBAAkB,CAAC,YAAY,QAAQ;AAC9E,QAAM,QAAQ,OAAO,MAAM,WAAW,QAAQ;AAC9C,QAAM,OAAO,OAAO,KAAK,WAAW,QAAQ;AAE5C,QAAM,cAAc,IAAI,KAAK;AAC7B,QAAM,oBAAoB,KAAK,IAAI,CAAC,OAAO,IAAI,WAAW,MAAM,IAAI,EAAE,CAAC,GAAG,EAAE,KAAK,OAAO;AACxF,SAAO,IAAI,iBAAiB;AAC9B,CAAC;AAMD,oBAAoB,SAAS,iBAAiB,oBAAoB,CAAC,YAAY,QAAQ;AACrF,SAAO,IAAI,IAAI,WAAW,IAAI,CAAC,MAAM,IAAI,WAAW,KAAK,CAAC;AAC5D,CAAC;AACD,oBAAoB,SAAS,iBAAiB,2BAA2B,CAAC,YAAY,QAAQ;AAC5F,SAAO,IAAI,IAAI,WAAW,IAAI,CAAC,OAAO,IAAI,WAAW,KAAK,CAAC;AAC7D,CAAC;AACD,oBAAoB,SAAS,iBAAiB,uBAAuB,CAAC,YAAY,QAAQ;AACxF,SAAO,IAAI,IAAI,WAAW,IAAI,CAAC,MAAM,IAAI,WAAW,KAAK,CAAC;AAC5D,CAAC;AACD,oBAAoB,SAAS,iBAAiB,8BAA8B,CAAC,YAAY,QAAQ;AAC/F,SAAO,IAAI,IAAI,WAAW,IAAI,CAAC,OAAO,IAAI,WAAW,KAAK,CAAC;AAC7D,CAAC;","names":[]}