@fieldia/core 0.11.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/README.md +5 -0
  2. package/package.json +1 -1
  3. package/schema/page.schema.json +3996 -904
  4. package/src/index.d.mts +1 -1
  5. package/src/index.d.ts +1 -1
  6. package/src/index.js +4 -1
  7. package/src/index.js.map +1 -1
  8. package/src/index.mjs +1 -1
  9. package/src/index.mjs.map +1 -1
  10. package/src/lib/expression/built-ins.d.mts +4 -0
  11. package/src/lib/expression/built-ins.d.ts +4 -0
  12. package/src/lib/expression/built-ins.js +8 -0
  13. package/src/lib/expression/built-ins.js.map +1 -0
  14. package/src/lib/expression/built-ins.mjs +5 -0
  15. package/src/lib/expression/built-ins.mjs.map +1 -0
  16. package/src/lib/expression/evaluator.js +17 -7
  17. package/src/lib/expression/evaluator.js.map +1 -1
  18. package/src/lib/expression/evaluator.mjs +17 -7
  19. package/src/lib/expression/evaluator.mjs.map +1 -1
  20. package/src/lib/expression/expression.d.mts +7 -0
  21. package/src/lib/expression/expression.d.ts +7 -0
  22. package/src/lib/expression/expression.js +2 -0
  23. package/src/lib/expression/expression.js.map +1 -1
  24. package/src/lib/expression/expression.mjs +3 -1
  25. package/src/lib/expression/expression.mjs.map +1 -1
  26. package/src/lib/expression/functions.d.mts +2 -0
  27. package/src/lib/expression/functions.d.ts +2 -0
  28. package/src/lib/expression/functions.js +38 -5
  29. package/src/lib/expression/functions.js.map +1 -1
  30. package/src/lib/expression/functions.mjs +38 -5
  31. package/src/lib/expression/functions.mjs.map +1 -1
  32. package/src/lib/expression/modifier.d.mts +7 -0
  33. package/src/lib/expression/modifier.d.ts +7 -0
  34. package/src/lib/expression/modifier.js +3 -1
  35. package/src/lib/expression/modifier.js.map +1 -1
  36. package/src/lib/expression/modifier.mjs +4 -2
  37. package/src/lib/expression/modifier.mjs.map +1 -1
  38. package/src/lib/expression/parser.d.mts +8 -1
  39. package/src/lib/expression/parser.d.ts +8 -1
  40. package/src/lib/expression/parser.js +30 -2
  41. package/src/lib/expression/parser.js.map +1 -1
  42. package/src/lib/expression/parser.mjs +30 -2
  43. package/src/lib/expression/parser.mjs.map +1 -1
  44. package/src/lib/expression/reads.d.mts +7 -0
  45. package/src/lib/expression/reads.d.ts +7 -0
  46. package/src/lib/expression/reads.js +23 -0
  47. package/src/lib/expression/reads.js.map +1 -1
  48. package/src/lib/expression/reads.mjs +21 -0
  49. package/src/lib/expression/reads.mjs.map +1 -1
  50. package/src/lib/format/actions.d.mts +486 -2
  51. package/src/lib/format/actions.d.ts +486 -2
  52. package/src/lib/format/actions.js +9 -0
  53. package/src/lib/format/actions.js.map +1 -1
  54. package/src/lib/format/actions.mjs +9 -0
  55. package/src/lib/format/actions.mjs.map +1 -1
  56. package/src/lib/format/check-page.d.mts +7 -2
  57. package/src/lib/format/check-page.d.ts +7 -2
  58. package/src/lib/format/check-page.js +6 -3
  59. package/src/lib/format/check-page.js.map +1 -1
  60. package/src/lib/format/check-page.mjs +6 -3
  61. package/src/lib/format/check-page.mjs.map +1 -1
  62. package/src/lib/format/field.d.mts +3285 -214
  63. package/src/lib/format/field.d.ts +3285 -214
  64. package/src/lib/format/field.js +101 -14
  65. package/src/lib/format/field.js.map +1 -1
  66. package/src/lib/format/field.mjs +100 -13
  67. package/src/lib/format/field.mjs.map +1 -1
  68. package/src/lib/format/hotkeys.d.mts +6 -0
  69. package/src/lib/format/hotkeys.d.ts +6 -0
  70. package/src/lib/format/hotkeys.js +11 -0
  71. package/src/lib/format/hotkeys.js.map +1 -0
  72. package/src/lib/format/hotkeys.mjs +7 -0
  73. package/src/lib/format/hotkeys.mjs.map +1 -0
  74. package/src/lib/format/layout.d.mts +4184 -352
  75. package/src/lib/format/layout.d.ts +4184 -352
  76. package/src/lib/format/layout.js +131 -20
  77. package/src/lib/format/layout.js.map +1 -1
  78. package/src/lib/format/layout.mjs +130 -19
  79. package/src/lib/format/layout.mjs.map +1 -1
  80. package/src/lib/format/page.d.mts +2957 -229
  81. package/src/lib/format/page.d.ts +2957 -229
  82. package/src/lib/format/page.js +2 -0
  83. package/src/lib/format/page.js.map +1 -1
  84. package/src/lib/format/page.mjs +3 -1
  85. package/src/lib/format/page.mjs.map +1 -1
  86. package/src/lib/format/references.d.mts +35 -2
  87. package/src/lib/format/references.d.ts +35 -2
  88. package/src/lib/format/references.js +321 -43
  89. package/src/lib/format/references.js.map +1 -1
  90. package/src/lib/format/references.mjs +321 -43
  91. package/src/lib/format/references.mjs.map +1 -1
  92. package/src/lib/format/translate.js +5 -3
  93. package/src/lib/format/translate.js.map +1 -1
  94. package/src/lib/format/translate.mjs +5 -3
  95. package/src/lib/format/translate.mjs.map +1 -1
  96. package/src/lib/format/words.d.mts +9 -0
  97. package/src/lib/format/words.d.ts +9 -0
  98. package/src/lib/format/words.js +35 -0
  99. package/src/lib/format/words.js.map +1 -0
  100. package/src/lib/format/words.mjs +30 -0
  101. package/src/lib/format/words.mjs.map +1 -0
  102. package/src/lib/record/cells.d.mts +37 -0
  103. package/src/lib/record/cells.d.ts +37 -0
  104. package/src/lib/record/cells.js +59 -0
  105. package/src/lib/record/cells.js.map +1 -0
  106. package/src/lib/record/cells.mjs +54 -0
  107. package/src/lib/record/cells.mjs.map +1 -0
  108. package/src/lib/record/compute.d.mts +5 -4
  109. package/src/lib/record/compute.d.ts +5 -4
  110. package/src/lib/record/compute.js +11 -10
  111. package/src/lib/record/compute.js.map +1 -1
  112. package/src/lib/record/compute.mjs +12 -11
  113. package/src/lib/record/compute.mjs.map +1 -1
  114. package/src/lib/record/data-source.d.mts +32 -2
  115. package/src/lib/record/data-source.d.ts +32 -2
  116. package/src/lib/record/data-source.js.map +1 -1
  117. package/src/lib/record/data-source.mjs.map +1 -1
  118. package/src/lib/record/env.d.mts +38 -1
  119. package/src/lib/record/env.d.ts +38 -1
  120. package/src/lib/record/env.js +41 -3
  121. package/src/lib/record/env.js.map +1 -1
  122. package/src/lib/record/env.mjs +38 -3
  123. package/src/lib/record/env.mjs.map +1 -1
  124. package/src/lib/record/filter.d.mts +10 -0
  125. package/src/lib/record/filter.d.ts +10 -0
  126. package/src/lib/record/filter.js +49 -0
  127. package/src/lib/record/filter.js.map +1 -1
  128. package/src/lib/record/filter.mjs +48 -0
  129. package/src/lib/record/filter.mjs.map +1 -1
  130. package/src/lib/record/form.d.mts +141 -8
  131. package/src/lib/record/form.d.ts +141 -8
  132. package/src/lib/record/form.js +462 -57
  133. package/src/lib/record/form.js.map +1 -1
  134. package/src/lib/record/form.mjs +464 -59
  135. package/src/lib/record/form.mjs.map +1 -1
  136. package/src/lib/record/locales/ar.js +3 -0
  137. package/src/lib/record/locales/ar.js.map +1 -1
  138. package/src/lib/record/locales/ar.mjs +3 -0
  139. package/src/lib/record/locales/ar.mjs.map +1 -1
  140. package/src/lib/record/locales/de.js +3 -0
  141. package/src/lib/record/locales/de.js.map +1 -1
  142. package/src/lib/record/locales/de.mjs +3 -0
  143. package/src/lib/record/locales/de.mjs.map +1 -1
  144. package/src/lib/record/locales/fr.js +3 -0
  145. package/src/lib/record/locales/fr.js.map +1 -1
  146. package/src/lib/record/locales/fr.mjs +3 -0
  147. package/src/lib/record/locales/fr.mjs.map +1 -1
  148. package/src/lib/record/memory-data-source.d.mts +26 -2
  149. package/src/lib/record/memory-data-source.d.ts +26 -2
  150. package/src/lib/record/memory-data-source.js +98 -7
  151. package/src/lib/record/memory-data-source.js.map +1 -1
  152. package/src/lib/record/memory-data-source.mjs +98 -7
  153. package/src/lib/record/memory-data-source.mjs.map +1 -1
  154. package/src/lib/record/messages.d.mts +5 -0
  155. package/src/lib/record/messages.d.ts +5 -0
  156. package/src/lib/record/messages.js +3 -0
  157. package/src/lib/record/messages.js.map +1 -1
  158. package/src/lib/record/messages.mjs +3 -0
  159. package/src/lib/record/messages.mjs.map +1 -1
  160. package/src/lib/record/roles.d.mts +10 -0
  161. package/src/lib/record/roles.d.ts +10 -0
  162. package/src/lib/record/roles.js +21 -0
  163. package/src/lib/record/roles.js.map +1 -0
  164. package/src/lib/record/roles.mjs +18 -0
  165. package/src/lib/record/roles.mjs.map +1 -0
  166. package/src/lib/record/rules.js +30 -0
  167. package/src/lib/record/rules.js.map +1 -1
  168. package/src/lib/record/rules.mjs +31 -1
  169. package/src/lib/record/rules.mjs.map +1 -1
  170. package/src/lib/record/run.d.mts +79 -0
  171. package/src/lib/record/run.d.ts +79 -0
  172. package/src/lib/record/run.js +105 -0
  173. package/src/lib/record/run.js.map +1 -1
  174. package/src/lib/record/run.mjs +105 -0
  175. package/src/lib/record/run.mjs.map +1 -1
  176. package/src/lib/record/set-when.d.mts +5 -2
  177. package/src/lib/record/set-when.d.ts +5 -2
  178. package/src/lib/record/set-when.js +28 -12
  179. package/src/lib/record/set-when.js.map +1 -1
  180. package/src/lib/record/set-when.mjs +30 -14
  181. package/src/lib/record/set-when.mjs.map +1 -1
  182. package/src/lib/record/value-map.d.mts +41 -0
  183. package/src/lib/record/value-map.d.ts +41 -0
  184. package/src/lib/record/value-map.js +80 -0
  185. package/src/lib/record/value-map.js.map +1 -0
  186. package/src/lib/record/value-map.mjs +73 -0
  187. package/src/lib/record/value-map.mjs.map +1 -0
  188. package/src/lib/record/values.d.mts +10 -0
  189. package/src/lib/record/values.d.ts +10 -0
  190. package/src/lib/record/values.js.map +1 -1
  191. package/src/lib/record/values.mjs.map +1 -1
  192. package/src/runtime.d.mts +10 -6
  193. package/src/runtime.d.ts +10 -6
  194. package/src/runtime.js +11 -1
  195. package/src/runtime.js.map +1 -1
  196. package/src/runtime.mjs +3 -0
  197. package/src/runtime.mjs.map +1 -1
package/src/index.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  export * from './runtime.mjs';
2
2
  export { FieldSchema, FieldsSchema, LineFieldSchema, LineKindsSchema, OptionSchema, PropertyDefinitionSchema, FilterConditionSchema, FilterItemSchema, } from './lib/format/field.mjs';
3
- export { ModifierSchema, LayoutNodeSchema, RootLayoutSchema, ListNodeSchema } from './lib/format/layout.mjs';
3
+ export { ModifierSchema, RolesSchema, CellRulesSchema, ToneWhenSchema, LayoutNodeSchema, RootLayoutSchema, ListNodeSchema } from './lib/format/layout.mjs';
4
4
  export { PageSchema } from './lib/format/page.mjs';
5
5
  export { ActionStepSchema, PageEventsSchema } from './lib/format/actions.mjs';
6
6
  export { validatePage } from './lib/format/validate.mjs';
package/src/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export * from './runtime';
2
2
  export { FieldSchema, FieldsSchema, LineFieldSchema, LineKindsSchema, OptionSchema, PropertyDefinitionSchema, FilterConditionSchema, FilterItemSchema, } from './lib/format/field';
3
- export { ModifierSchema, LayoutNodeSchema, RootLayoutSchema, ListNodeSchema } from './lib/format/layout';
3
+ export { ModifierSchema, RolesSchema, CellRulesSchema, ToneWhenSchema, LayoutNodeSchema, RootLayoutSchema, ListNodeSchema } from './lib/format/layout';
4
4
  export { PageSchema } from './lib/format/page';
5
5
  export { ActionStepSchema, PageEventsSchema } from './lib/format/actions';
6
6
  export { validatePage } from './lib/format/validate';
package/src/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.pageJsonSchema = exports.validatePage = exports.PageEventsSchema = exports.ActionStepSchema = exports.PageSchema = exports.ListNodeSchema = exports.RootLayoutSchema = exports.LayoutNodeSchema = exports.ModifierSchema = exports.FilterItemSchema = exports.FilterConditionSchema = exports.PropertyDefinitionSchema = exports.OptionSchema = exports.LineKindsSchema = exports.LineFieldSchema = exports.FieldsSchema = exports.FieldSchema = void 0;
3
+ exports.pageJsonSchema = exports.validatePage = exports.PageEventsSchema = exports.ActionStepSchema = exports.PageSchema = exports.ListNodeSchema = exports.RootLayoutSchema = exports.LayoutNodeSchema = exports.ToneWhenSchema = exports.CellRulesSchema = exports.RolesSchema = exports.ModifierSchema = exports.FilterItemSchema = exports.FilterConditionSchema = exports.PropertyDefinitionSchema = exports.OptionSchema = exports.LineKindsSchema = exports.LineFieldSchema = exports.FieldsSchema = exports.FieldSchema = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  tslib_1.__exportStar(require("./runtime"), exports);
6
6
  var field_1 = require("./lib/format/field");
@@ -14,6 +14,9 @@ Object.defineProperty(exports, "FilterConditionSchema", { enumerable: true, get:
14
14
  Object.defineProperty(exports, "FilterItemSchema", { enumerable: true, get: function () { return field_1.FilterItemSchema; } });
15
15
  var layout_1 = require("./lib/format/layout");
16
16
  Object.defineProperty(exports, "ModifierSchema", { enumerable: true, get: function () { return layout_1.ModifierSchema; } });
17
+ Object.defineProperty(exports, "RolesSchema", { enumerable: true, get: function () { return layout_1.RolesSchema; } });
18
+ Object.defineProperty(exports, "CellRulesSchema", { enumerable: true, get: function () { return layout_1.CellRulesSchema; } });
19
+ Object.defineProperty(exports, "ToneWhenSchema", { enumerable: true, get: function () { return layout_1.ToneWhenSchema; } });
17
20
  Object.defineProperty(exports, "LayoutNodeSchema", { enumerable: true, get: function () { return layout_1.LayoutNodeSchema; } });
18
21
  Object.defineProperty(exports, "RootLayoutSchema", { enumerable: true, get: function () { return layout_1.RootLayoutSchema; } });
19
22
  Object.defineProperty(exports, "ListNodeSchema", { enumerable: true, get: function () { return layout_1.ListNodeSchema; } });
package/src/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/core/src/index.ts"],"names":[],"mappings":";;;;AAAA,oDAA0B;AAC1B,4CAS4B;AAR1B,oGAAA,WAAW,OAAA;AACX,qGAAA,YAAY,OAAA;AACZ,wGAAA,eAAe,OAAA;AACf,wGAAA,eAAe,OAAA;AACf,qGAAA,YAAY,OAAA;AACZ,iHAAA,wBAAwB,OAAA;AACxB,8GAAA,qBAAqB,OAAA;AACrB,yGAAA,gBAAgB,OAAA;AAElB,8CAAyG;AAAhG,wGAAA,cAAc,OAAA;AAAE,0GAAA,gBAAgB,OAAA;AAAE,0GAAA,gBAAgB,OAAA;AAAE,wGAAA,cAAc,OAAA;AAC3E,0CAA+C;AAAtC,kGAAA,UAAU,OAAA;AACnB,gDAA0E;AAAjE,2GAAA,gBAAgB,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AAC3C,kDAAqD;AAA5C,wGAAA,YAAY,OAAA;AACrB,wDAA0D;AAAjD,6GAAA,cAAc,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/core/src/index.ts"],"names":[],"mappings":";;;;AAAA,oDAA0B;AAC1B,4CAS4B;AAR1B,oGAAA,WAAW,OAAA;AACX,qGAAA,YAAY,OAAA;AACZ,wGAAA,eAAe,OAAA;AACf,wGAAA,eAAe,OAAA;AACf,qGAAA,YAAY,OAAA;AACZ,iHAAA,wBAAwB,OAAA;AACxB,8GAAA,qBAAqB,OAAA;AACrB,yGAAA,gBAAgB,OAAA;AAElB,8CAAuJ;AAA9I,wGAAA,cAAc,OAAA;AAAE,qGAAA,WAAW,OAAA;AAAE,yGAAA,eAAe,OAAA;AAAE,wGAAA,cAAc,OAAA;AAAE,0GAAA,gBAAgB,OAAA;AAAE,0GAAA,gBAAgB,OAAA;AAAE,wGAAA,cAAc,OAAA;AACzH,0CAA+C;AAAtC,kGAAA,UAAU,OAAA;AACnB,gDAA0E;AAAjE,2GAAA,gBAAgB,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AAC3C,kDAAqD;AAA5C,wGAAA,YAAY,OAAA;AACrB,wDAA0D;AAAjD,6GAAA,cAAc,OAAA"}
package/src/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  export * from './runtime.mjs';
2
2
  export { FieldSchema, FieldsSchema, LineFieldSchema, LineKindsSchema, OptionSchema, PropertyDefinitionSchema, FilterConditionSchema, FilterItemSchema, } from './lib/format/field.mjs';
3
- export { ModifierSchema, LayoutNodeSchema, RootLayoutSchema, ListNodeSchema } from './lib/format/layout.mjs';
3
+ export { ModifierSchema, RolesSchema, CellRulesSchema, ToneWhenSchema, LayoutNodeSchema, RootLayoutSchema, ListNodeSchema } from './lib/format/layout.mjs';
4
4
  export { PageSchema } from './lib/format/page.mjs';
5
5
  export { ActionStepSchema, PageEventsSchema } from './lib/format/actions.mjs';
6
6
  export { validatePage } from './lib/format/validate.mjs';
package/src/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../../../libs/core/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,OAAO,EACL,WAAW,EACX,YAAY,EACZ,eAAe,EACf,eAAe,EACf,YAAY,EACZ,wBAAwB,EACxB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACzG,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../../../libs/core/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,OAAO,EACL,WAAW,EACX,YAAY,EACZ,eAAe,EACf,eAAe,EACf,YAAY,EACZ,wBAAwB,EACxB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACvJ,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** The names every expression on a record may read besides its fields: the record's id, the person using the form, whether it is edited, and the values the app passes in. */
2
+ export declare const BUILT_IN_NAMES: readonly ["id", "user", "editing", "context"];
3
+ /** What `user` holds. */
4
+ export declare const USER_PARTS: readonly ["id", "name", "roles"];
@@ -0,0 +1,4 @@
1
+ /** The names every expression on a record may read besides its fields: the record's id, the person using the form, whether it is edited, and the values the app passes in. */
2
+ export declare const BUILT_IN_NAMES: readonly ["id", "user", "editing", "context"];
3
+ /** What `user` holds. */
4
+ export declare const USER_PARTS: readonly ["id", "name", "roles"];
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.USER_PARTS = exports.BUILT_IN_NAMES = void 0;
4
+ /** The names every expression on a record may read besides its fields: the record's id, the person using the form, whether it is edited, and the values the app passes in. */
5
+ exports.BUILT_IN_NAMES = ['id', 'user', 'editing', 'context'];
6
+ /** What `user` holds. */
7
+ exports.USER_PARTS = ['id', 'name', 'roles'];
8
+ //# sourceMappingURL=built-ins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"built-ins.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/expression/built-ins.ts"],"names":[],"mappings":";;;AAAA,8KAA8K;AACjK,QAAA,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAU,CAAC;AAE5E,yBAAyB;AACZ,QAAA,UAAU,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC"}
@@ -0,0 +1,5 @@
1
+ /** The names every expression on a record may read besides its fields: the record's id, the person using the form, whether it is edited, and the values the app passes in. */
2
+ export const BUILT_IN_NAMES = ['id', 'user', 'editing', 'context'];
3
+ /** What `user` holds. */
4
+ export const USER_PARTS = ['id', 'name', 'roles'];
5
+ //# sourceMappingURL=built-ins.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"built-ins.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/expression/built-ins.ts"],"names":[],"mappings":"AAAA,8KAA8K;AAC9K,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAU,CAAC;AAE5E,yBAAyB;AACzB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC"}
@@ -11,6 +11,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
11
11
  exports.truthy = void 0;
12
12
  exports.evaluate = evaluate;
13
13
  const functions_1 = require("./functions");
14
+ const parser_1 = require("./parser");
15
+ const tokenizer_1 = require("./tokenizer");
14
16
  const operations_1 = require("./operations");
15
17
  var operations_2 = require("./operations");
16
18
  Object.defineProperty(exports, "truthy", { enumerable: true, get: function () { return operations_2.truthy; } });
@@ -46,9 +48,14 @@ function evaluate(ast, context, env = {}) {
46
48
  * Evaluate binary operations
47
49
  */
48
50
  function evaluateBinaryOp(node, context, env) {
51
+ const operator = node.operator.toLowerCase();
52
+ // As Python's: the value that decided, so `discount or 0` gives a number; the right side read only when needed.
53
+ if (operator === 'and' || operator === 'or') {
54
+ const first = normalize(evaluate(node.left, context, env));
55
+ return (0, operations_1.truthy)(first) === (operator === 'or') ? first : normalize(evaluate(node.right, context, env));
56
+ }
49
57
  const left = normalize(evaluate(node.left, context, env));
50
58
  const right = normalize(evaluate(node.right, context, env));
51
- const operator = node.operator.toLowerCase();
52
59
  const ordered = left !== null && right !== null;
53
60
  switch (operator) {
54
61
  // Comparison operators
@@ -77,11 +84,6 @@ function evaluateBinaryOp(node, context, env) {
77
84
  case '/':
78
85
  case '%':
79
86
  return (0, operations_1.arithmetic)(operator, left, right);
80
- // Logical operators (use truthiness)
81
- case 'and':
82
- return (0, operations_1.truthy)(left) && (0, operations_1.truthy)(right);
83
- case 'or':
84
- return (0, operations_1.truthy)(left) || (0, operations_1.truthy)(right);
85
87
  default:
86
88
  throw new Error(`Unknown binary operator: ${node.operator}`);
87
89
  }
@@ -106,7 +108,15 @@ function evaluateCall(node, context, env) {
106
108
  const fn = functions_1.FUNCTIONS.get(node.name);
107
109
  if (!fn)
108
110
  throw new Error(`Unknown function: ${node.name}`);
109
- return fn.call({ args: node.args, value: (arg) => evaluate(arg, context, env), env });
111
+ return fn.call({ args: node.args, value: (arg) => evaluate(arg, context, env), env, holds: (condition, row) => (0, operations_1.truthy)(evaluate(conditionAst(condition), row, env)) });
112
+ }
113
+ /** Conditions on lines, as `count` and `sum` take them in quotes: each read once. */
114
+ const conditions = new Map();
115
+ function conditionAst(source) {
116
+ let ast = conditions.get(source);
117
+ if (!ast)
118
+ conditions.set(source, (ast = new parser_1.ExpressionParser((0, tokenizer_1.tokenize)(source)).parse()));
119
+ return ast;
110
120
  }
111
121
  /** A missing value compares like None. */
112
122
  function normalize(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/expression/evaluator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/expression/evaluator.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,8 @@
7
7
  * and functions give null for what they cannot work out, never an error.
8
8
  */
9
9
  import { FUNCTIONS } from './functions.mjs';
10
+ import { ExpressionParser } from './parser.mjs';
11
+ import { tokenize } from './tokenizer.mjs';
10
12
  import { arithmetic, negate, truthy } from './operations.mjs';
11
13
  export { truthy } from './operations.mjs';
12
14
  /**
@@ -41,9 +43,14 @@ export function evaluate(ast, context, env = {}) {
41
43
  * Evaluate binary operations
42
44
  */
43
45
  function evaluateBinaryOp(node, context, env) {
46
+ const operator = node.operator.toLowerCase();
47
+ // As Python's: the value that decided, so `discount or 0` gives a number; the right side read only when needed.
48
+ if (operator === 'and' || operator === 'or') {
49
+ const first = normalize(evaluate(node.left, context, env));
50
+ return truthy(first) === (operator === 'or') ? first : normalize(evaluate(node.right, context, env));
51
+ }
44
52
  const left = normalize(evaluate(node.left, context, env));
45
53
  const right = normalize(evaluate(node.right, context, env));
46
- const operator = node.operator.toLowerCase();
47
54
  const ordered = left !== null && right !== null;
48
55
  switch (operator) {
49
56
  // Comparison operators
@@ -72,11 +79,6 @@ function evaluateBinaryOp(node, context, env) {
72
79
  case '/':
73
80
  case '%':
74
81
  return arithmetic(operator, left, right);
75
- // Logical operators (use truthiness)
76
- case 'and':
77
- return truthy(left) && truthy(right);
78
- case 'or':
79
- return truthy(left) || truthy(right);
80
82
  default:
81
83
  throw new Error(`Unknown binary operator: ${node.operator}`);
82
84
  }
@@ -101,7 +103,15 @@ function evaluateCall(node, context, env) {
101
103
  const fn = FUNCTIONS.get(node.name);
102
104
  if (!fn)
103
105
  throw new Error(`Unknown function: ${node.name}`);
104
- return fn.call({ args: node.args, value: (arg) => evaluate(arg, context, env), env });
106
+ return fn.call({ args: node.args, value: (arg) => evaluate(arg, context, env), env, holds: (condition, row) => truthy(evaluate(conditionAst(condition), row, env)) });
107
+ }
108
+ /** Conditions on lines, as `count` and `sum` take them in quotes: each read once. */
109
+ const conditions = new Map();
110
+ function conditionAst(source) {
111
+ let ast = conditions.get(source);
112
+ if (!ast)
113
+ conditions.set(source, (ast = new ExpressionParser(tokenize(source)).parse()));
114
+ return ast;
105
115
  }
106
116
  /** A missing value compares like None. */
107
117
  function normalize(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"evaluator.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/expression/evaluator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"evaluator.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/expression/evaluator.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,13 @@ export interface CompiledExpression {
5
5
  readonly source: string;
6
6
  /** The fields it reads, by their first name, in order of appearance. */
7
7
  readonly fields: readonly string[];
8
+ /** The names it reads, whole: `user.roles`, `partner_id.country_id`. */
9
+ readonly paths: readonly string[];
10
+ /** The conditions on lines it counts or adds up by. */
11
+ readonly wheres: readonly {
12
+ lines: string;
13
+ condition: string;
14
+ }[];
8
15
  /** The line fields it adds up, as `sum(lines, 'subtotal')` names them. */
9
16
  readonly sums: readonly {
10
17
  lines: string;
@@ -5,6 +5,13 @@ export interface CompiledExpression {
5
5
  readonly source: string;
6
6
  /** The fields it reads, by their first name, in order of appearance. */
7
7
  readonly fields: readonly string[];
8
+ /** The names it reads, whole: `user.roles`, `partner_id.country_id`. */
9
+ readonly paths: readonly string[];
10
+ /** The conditions on lines it counts or adds up by. */
11
+ readonly wheres: readonly {
12
+ lines: string;
13
+ condition: string;
14
+ }[];
8
15
  /** The line fields it adds up, as `sum(lines, 'subtotal')` names them. */
9
16
  readonly sums: readonly {
10
17
  lines: string;
@@ -15,6 +15,8 @@ function compileExpression(source) {
15
15
  return {
16
16
  source,
17
17
  fields: (0, reads_1.fieldsRead)(ast),
18
+ paths: (0, reads_1.pathsRead)(ast),
19
+ wheres: (0, reads_1.wheresRead)(ast),
18
20
  sums: (0, reads_1.sumsRead)(ast),
19
21
  evaluate(values, env = {}) {
20
22
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"expression.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/expression/expression.ts"],"names":[],"mappings":";;AAwBA,8CAcC;AAtCD,2CAAuC;AAEvC,qCAA4C;AAC5C,mCAA+C;AAC/C,2CAAuC;AAevC;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,MAAc;IAC9C,MAAM,GAAG,GAAG,IAAI,yBAAgB,CAAC,IAAA,oBAAQ,EAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IAC3D,OAAO;QACL,MAAM;QACN,MAAM,EAAE,IAAA,kBAAU,EAAC,GAAG,CAAC;QACvB,IAAI,EAAE,IAAA,gBAAQ,EAAC,GAAG,CAAC;QACnB,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,EAAE;YACvB,IAAI,CAAC;gBACH,OAAO,IAAA,oBAAQ,EAAC,GAAG,EAAE,MAAiC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC;YACvE,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"expression.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/expression/expression.ts"],"names":[],"mappings":";;AA4BA,8CAgBC;AA5CD,2CAAuC;AAEvC,qCAA4C;AAC5C,mCAAsE;AACtE,2CAAuC;AAmBvC;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,MAAc;IAC9C,MAAM,GAAG,GAAG,IAAI,yBAAgB,CAAC,IAAA,oBAAQ,EAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IAC3D,OAAO;QACL,MAAM;QACN,MAAM,EAAE,IAAA,kBAAU,EAAC,GAAG,CAAC;QACvB,KAAK,EAAE,IAAA,iBAAS,EAAC,GAAG,CAAC;QACrB,MAAM,EAAE,IAAA,kBAAU,EAAC,GAAG,CAAC;QACvB,IAAI,EAAE,IAAA,gBAAQ,EAAC,GAAG,CAAC;QACnB,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,EAAE;YACvB,IAAI,CAAC;gBACH,OAAO,IAAA,oBAAQ,EAAC,GAAG,EAAE,MAAiC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC;YACvE,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { evaluate } from './evaluator.mjs';
2
2
  import { ExpressionParser } from './parser.mjs';
3
- import { fieldsRead, sumsRead } from './reads.mjs';
3
+ import { fieldsRead, pathsRead, sumsRead, wheresRead } from './reads.mjs';
4
4
  import { tokenize } from './tokenizer.mjs';
5
5
  /**
6
6
  * Read an expression for a value, such as `price * qty` or
@@ -12,6 +12,8 @@ export function compileExpression(source) {
12
12
  return {
13
13
  source,
14
14
  fields: fieldsRead(ast),
15
+ paths: pathsRead(ast),
16
+ wheres: wheresRead(ast),
15
17
  sums: sumsRead(ast),
16
18
  evaluate(values, env = {}) {
17
19
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"expression.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/expression/expression.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAevC;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,MAAM,GAAG,GAAG,IAAI,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IAC3D,OAAO;QACL,MAAM;QACN,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC;QACvB,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC;QACnB,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,EAAE;YACvB,IAAI,CAAC;gBACH,OAAO,QAAQ,CAAC,GAAG,EAAE,MAAiC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC;YACvE,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"expression.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/expression/expression.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAmBvC;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,MAAM,GAAG,GAAG,IAAI,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IAC3D,OAAO;QACL,MAAM;QACN,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC;QACvB,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC;QACrB,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC;QACvB,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC;QACnB,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,EAAE;YACvB,IAAI,CAAC;gBACH,OAAO,QAAQ,CAAC,GAAG,EAAE,MAAiC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC;YACvE,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -19,6 +19,8 @@ interface Call {
19
19
  args: readonly ASTNode[];
20
20
  value(node: ASTNode): unknown;
21
21
  env: ExpressionEnv;
22
+ /** Whether a condition, written in quotes, holds for one line's values. */
23
+ holds(condition: string, row: Readonly<Record<string, unknown>>): boolean;
22
24
  }
23
25
  interface ExpressionFunction {
24
26
  /** How many values it takes: at least, at most. */
@@ -19,6 +19,8 @@ interface Call {
19
19
  args: readonly ASTNode[];
20
20
  value(node: ASTNode): unknown;
21
21
  env: ExpressionEnv;
22
+ /** Whether a condition, written in quotes, holds for one line's values. */
23
+ holds(condition: string, row: Readonly<Record<string, unknown>>): boolean;
22
24
  }
23
25
  interface ExpressionFunction {
24
26
  /** How many values it takes: at least, at most. */
@@ -15,6 +15,26 @@ function listOf(call) {
15
15
  const rows = first.type === 'Identifier' ? call.env.lines?.(first.name) : undefined;
16
16
  return rows ?? call.value(first);
17
17
  }
18
+ /** A condition given in quotes as the value at `at`: refused when it is anything else. */
19
+ function conditionAt(args, at, name, example) {
20
+ const arg = args[at];
21
+ return arg && !(arg.type === 'Literal' && typeof arg.value === 'string') ? `${name} takes a condition, in quotes, on the lines: ${example}` : undefined;
22
+ }
23
+ /** The rows a function counts or adds up, only those where the condition at `at` holds when there is one. */
24
+ function rowsWhere(call, list, at) {
25
+ const condition = call.args[at];
26
+ if (condition?.type !== 'Literal' || typeof condition.value !== 'string')
27
+ return list;
28
+ const source = condition.value;
29
+ return list.filter((row) => row !== null && typeof row === 'object' && call.holds(source, row));
30
+ }
31
+ /** A day from a date or a datetime, as days since 1970: null when it is not one. */
32
+ function dayNumber(value) {
33
+ if (typeof value !== 'string')
34
+ return null;
35
+ const match = /^(\d{4})-(\d{2})-(\d{2})/.exec(value);
36
+ return match ? Date.UTC(Number(match[1]), Number(match[2]) - 1, Number(match[3])) / 86_400_000 : null;
37
+ }
18
38
  /** The smallest or largest of the values, lists opened: empty ones left out, numbers or text but not both. */
19
39
  function extreme(call, smaller) {
20
40
  const items = call.args
@@ -70,13 +90,13 @@ exports.FUNCTIONS = new Map([
70
90
  [
71
91
  'sum',
72
92
  {
73
- takes: [1, 2],
93
+ takes: [1, 3],
74
94
  check(args) {
75
95
  const field = args[1];
76
96
  if (field && !(field.type === 'Literal' && typeof field.value === 'string')) {
77
97
  return "sum takes the name of a field, in quotes, after the lines: sum(lines, 'subtotal')";
78
98
  }
79
- return undefined;
99
+ return conditionAt(args, 2, 'sum', `sum(lines, 'amount', "state == 'done'")`);
80
100
  },
81
101
  call(call) {
82
102
  const list = listOf(call);
@@ -86,7 +106,7 @@ exports.FUNCTIONS = new Map([
86
106
  return null;
87
107
  const field = call.args[1]?.type === 'Literal' ? call.args[1].value : undefined;
88
108
  let total = 0;
89
- for (const item of list) {
109
+ for (const item of rowsWhere(call, list, 2)) {
90
110
  const n = field === undefined ? item : item?.[field];
91
111
  if ((0, operations_1.isNumber)(n))
92
112
  total += n;
@@ -98,12 +118,25 @@ exports.FUNCTIONS = new Map([
98
118
  [
99
119
  'count',
100
120
  {
101
- takes: [1, 1],
121
+ takes: [1, 2],
122
+ check: (args) => conditionAt(args, 1, 'count', `count(lines, "state == 'done'")`),
102
123
  call(call) {
103
124
  const list = listOf(call);
104
125
  if (list === null || list === undefined)
105
126
  return 0;
106
- return Array.isArray(list) ? list.length : null;
127
+ return Array.isArray(list) ? rowsWhere(call, list, 1).length : null;
128
+ },
129
+ },
130
+ ],
131
+ [
132
+ 'days',
133
+ {
134
+ takes: [2, 2],
135
+ // From one day to another: negative when the second comes first. A datetime counts by its day.
136
+ call({ args, value }) {
137
+ const from = dayNumber(value(args[0]));
138
+ const to = dayNumber(value(args[1]));
139
+ return from === null || to === null ? null : to - from;
107
140
  },
108
141
  },
109
142
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"functions.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/expression/functions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"functions.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/expression/functions.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,26 @@ function listOf(call) {
10
10
  const rows = first.type === 'Identifier' ? call.env.lines?.(first.name) : undefined;
11
11
  return rows ?? call.value(first);
12
12
  }
13
+ /** A condition given in quotes as the value at `at`: refused when it is anything else. */
14
+ function conditionAt(args, at, name, example) {
15
+ const arg = args[at];
16
+ return arg && !(arg.type === 'Literal' && typeof arg.value === 'string') ? `${name} takes a condition, in quotes, on the lines: ${example}` : undefined;
17
+ }
18
+ /** The rows a function counts or adds up, only those where the condition at `at` holds when there is one. */
19
+ function rowsWhere(call, list, at) {
20
+ const condition = call.args[at];
21
+ if (condition?.type !== 'Literal' || typeof condition.value !== 'string')
22
+ return list;
23
+ const source = condition.value;
24
+ return list.filter((row) => row !== null && typeof row === 'object' && call.holds(source, row));
25
+ }
26
+ /** A day from a date or a datetime, as days since 1970: null when it is not one. */
27
+ function dayNumber(value) {
28
+ if (typeof value !== 'string')
29
+ return null;
30
+ const match = /^(\d{4})-(\d{2})-(\d{2})/.exec(value);
31
+ return match ? Date.UTC(Number(match[1]), Number(match[2]) - 1, Number(match[3])) / 86_400_000 : null;
32
+ }
13
33
  /** The smallest or largest of the values, lists opened: empty ones left out, numbers or text but not both. */
14
34
  function extreme(call, smaller) {
15
35
  const items = call.args
@@ -65,13 +85,13 @@ export const FUNCTIONS = new Map([
65
85
  [
66
86
  'sum',
67
87
  {
68
- takes: [1, 2],
88
+ takes: [1, 3],
69
89
  check(args) {
70
90
  const field = args[1];
71
91
  if (field && !(field.type === 'Literal' && typeof field.value === 'string')) {
72
92
  return "sum takes the name of a field, in quotes, after the lines: sum(lines, 'subtotal')";
73
93
  }
74
- return undefined;
94
+ return conditionAt(args, 2, 'sum', `sum(lines, 'amount', "state == 'done'")`);
75
95
  },
76
96
  call(call) {
77
97
  const list = listOf(call);
@@ -81,7 +101,7 @@ export const FUNCTIONS = new Map([
81
101
  return null;
82
102
  const field = call.args[1]?.type === 'Literal' ? call.args[1].value : undefined;
83
103
  let total = 0;
84
- for (const item of list) {
104
+ for (const item of rowsWhere(call, list, 2)) {
85
105
  const n = field === undefined ? item : item?.[field];
86
106
  if (isNumber(n))
87
107
  total += n;
@@ -93,12 +113,25 @@ export const FUNCTIONS = new Map([
93
113
  [
94
114
  'count',
95
115
  {
96
- takes: [1, 1],
116
+ takes: [1, 2],
117
+ check: (args) => conditionAt(args, 1, 'count', `count(lines, "state == 'done'")`),
97
118
  call(call) {
98
119
  const list = listOf(call);
99
120
  if (list === null || list === undefined)
100
121
  return 0;
101
- return Array.isArray(list) ? list.length : null;
122
+ return Array.isArray(list) ? rowsWhere(call, list, 1).length : null;
123
+ },
124
+ },
125
+ ],
126
+ [
127
+ 'days',
128
+ {
129
+ takes: [2, 2],
130
+ // From one day to another: negative when the second comes first. A datetime counts by its day.
131
+ call({ args, value }) {
132
+ const from = dayNumber(value(args[0]));
133
+ const to = dayNumber(value(args[1]));
134
+ return from === null || to === null ? null : to - from;
102
135
  },
103
136
  },
104
137
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"functions.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/expression/functions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"functions.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/expression/functions.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,13 @@ export interface CompiledModifier {
5
5
  readonly source: Modifier | undefined;
6
6
  /** The fields it reads, by their first name, in order of appearance. */
7
7
  readonly fields: readonly string[];
8
+ /** The names it reads, whole: `user.roles`, `partner_id.country_id`. */
9
+ readonly paths: readonly string[];
10
+ /** The conditions on lines it counts or adds up by. */
11
+ readonly wheres: readonly {
12
+ lines: string;
13
+ condition: string;
14
+ }[];
8
15
  /** Whether it holds for these values; `env` gives `sum` and `count` the lines, and `today()` its day. */
9
16
  evaluate(values: Readonly<Record<string, unknown>>, env?: ExpressionEnv): boolean;
10
17
  }
@@ -5,6 +5,13 @@ export interface CompiledModifier {
5
5
  readonly source: Modifier | undefined;
6
6
  /** The fields it reads, by their first name, in order of appearance. */
7
7
  readonly fields: readonly string[];
8
+ /** The names it reads, whole: `user.roles`, `partner_id.country_id`. */
9
+ readonly paths: readonly string[];
10
+ /** The conditions on lines it counts or adds up by. */
11
+ readonly wheres: readonly {
12
+ lines: string;
13
+ condition: string;
14
+ }[];
8
15
  /** Whether it holds for these values; `env` gives `sum` and `count` the lines, and `today()` its day. */
9
16
  evaluate(values: Readonly<Record<string, unknown>>, env?: ExpressionEnv): boolean;
10
17
  }
@@ -13,12 +13,14 @@ const tokenizer_1 = require("./tokenizer");
13
13
  function compileModifier(modifier) {
14
14
  if (typeof modifier !== 'string') {
15
15
  const value = modifier === true;
16
- return { source: modifier, fields: [], evaluate: () => value };
16
+ return { source: modifier, fields: [], paths: [], wheres: [], evaluate: () => value };
17
17
  }
18
18
  const ast = new parser_1.ExpressionParser((0, tokenizer_1.tokenize)(modifier)).parse();
19
19
  return {
20
20
  source: modifier,
21
21
  fields: (0, reads_1.fieldsRead)(ast),
22
+ paths: (0, reads_1.pathsRead)(ast),
23
+ wheres: (0, reads_1.wheresRead)(ast),
22
24
  evaluate(values, env) {
23
25
  try {
24
26
  return (0, evaluator_1.truthy)((0, evaluator_1.evaluate)(ast, values, env));