@fieldia/core 0.26.1 → 0.27.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 (415) hide show
  1. package/README.md +307 -3
  2. package/package.json +1 -1
  3. package/schema/page.schema.json +227 -23
  4. package/src/index.d.mts +8 -2
  5. package/src/index.d.ts +8 -2
  6. package/src/index.js +22 -1
  7. package/src/index.js.map +1 -1
  8. package/src/index.mjs +9 -2
  9. package/src/index.mjs.map +1 -1
  10. package/src/lib/expression/app-functions.d.mts +47 -0
  11. package/src/lib/expression/app-functions.d.ts +47 -0
  12. package/src/lib/expression/app-functions.js +64 -0
  13. package/src/lib/expression/app-functions.js.map +1 -0
  14. package/src/lib/expression/app-functions.mjs +58 -0
  15. package/src/lib/expression/app-functions.mjs.map +1 -0
  16. package/src/lib/expression/dates.d.mts +21 -0
  17. package/src/lib/expression/dates.d.ts +21 -0
  18. package/src/lib/expression/dates.js +73 -0
  19. package/src/lib/expression/dates.js.map +1 -0
  20. package/src/lib/expression/dates.mjs +67 -0
  21. package/src/lib/expression/dates.mjs.map +1 -0
  22. package/src/lib/expression/evaluator.js +12 -6
  23. package/src/lib/expression/evaluator.js.map +1 -1
  24. package/src/lib/expression/evaluator.mjs +12 -6
  25. package/src/lib/expression/evaluator.mjs.map +1 -1
  26. package/src/lib/expression/expression.d.mts +7 -3
  27. package/src/lib/expression/expression.d.ts +7 -3
  28. package/src/lib/expression/expression.js +8 -2
  29. package/src/lib/expression/expression.js.map +1 -1
  30. package/src/lib/expression/expression.mjs +7 -2
  31. package/src/lib/expression/expression.mjs.map +1 -1
  32. package/src/lib/expression/functions-part.d.mts +7 -0
  33. package/src/lib/expression/functions-part.d.ts +7 -0
  34. package/src/lib/expression/functions-part.js +13 -0
  35. package/src/lib/expression/functions-part.js.map +1 -0
  36. package/src/lib/expression/functions-part.mjs +8 -0
  37. package/src/lib/expression/functions-part.mjs.map +1 -0
  38. package/src/lib/expression/functions.d.mts +60 -3
  39. package/src/lib/expression/functions.d.ts +60 -3
  40. package/src/lib/expression/functions.js +109 -15
  41. package/src/lib/expression/functions.js.map +1 -1
  42. package/src/lib/expression/functions.mjs +103 -16
  43. package/src/lib/expression/functions.mjs.map +1 -1
  44. package/src/lib/expression/kinds.d.mts +31 -0
  45. package/src/lib/expression/kinds.d.ts +31 -0
  46. package/src/lib/expression/kinds.js +159 -0
  47. package/src/lib/expression/kinds.js.map +1 -0
  48. package/src/lib/expression/kinds.mjs +151 -0
  49. package/src/lib/expression/kinds.mjs.map +1 -0
  50. package/src/lib/expression/modifier.d.mts +4 -3
  51. package/src/lib/expression/modifier.d.ts +4 -3
  52. package/src/lib/expression/modifier.js +4 -3
  53. package/src/lib/expression/modifier.js.map +1 -1
  54. package/src/lib/expression/modifier.mjs +4 -3
  55. package/src/lib/expression/modifier.mjs.map +1 -1
  56. package/src/lib/expression/more-functions.d.mts +8 -0
  57. package/src/lib/expression/more-functions.d.ts +8 -0
  58. package/src/lib/expression/more-functions.js +235 -0
  59. package/src/lib/expression/more-functions.js.map +1 -0
  60. package/src/lib/expression/more-functions.mjs +230 -0
  61. package/src/lib/expression/more-functions.mjs.map +1 -0
  62. package/src/lib/expression/parser.d.mts +4 -1
  63. package/src/lib/expression/parser.d.ts +4 -1
  64. package/src/lib/expression/parser.js +6 -3
  65. package/src/lib/expression/parser.js.map +1 -1
  66. package/src/lib/expression/parser.mjs +6 -3
  67. package/src/lib/expression/parser.mjs.map +1 -1
  68. package/src/lib/expression/reads.d.mts +2 -2
  69. package/src/lib/expression/reads.d.ts +2 -2
  70. package/src/lib/expression/reads.js +6 -4
  71. package/src/lib/expression/reads.js.map +1 -1
  72. package/src/lib/expression/reads.mjs +6 -4
  73. package/src/lib/expression/reads.mjs.map +1 -1
  74. package/src/lib/format/actions.d.mts +16 -16
  75. package/src/lib/format/actions.d.ts +16 -16
  76. package/src/lib/format/check-page.d.mts +7 -2
  77. package/src/lib/format/check-page.d.ts +7 -2
  78. package/src/lib/format/check-page.js +10 -4
  79. package/src/lib/format/check-page.js.map +1 -1
  80. package/src/lib/format/check-page.mjs +10 -4
  81. package/src/lib/format/check-page.mjs.map +1 -1
  82. package/src/lib/format/choice-options.d.mts +34 -0
  83. package/src/lib/format/choice-options.d.ts +34 -0
  84. package/src/lib/format/choice-options.js +60 -0
  85. package/src/lib/format/choice-options.js.map +1 -0
  86. package/src/lib/format/choice-options.mjs +51 -0
  87. package/src/lib/format/choice-options.mjs.map +1 -0
  88. package/src/lib/format/endings-checks.d.mts +8 -0
  89. package/src/lib/format/endings-checks.d.ts +8 -0
  90. package/src/lib/format/endings-checks.js +23 -0
  91. package/src/lib/format/endings-checks.js.map +1 -0
  92. package/src/lib/format/endings-checks.mjs +20 -0
  93. package/src/lib/format/endings-checks.mjs.map +1 -0
  94. package/src/lib/format/endings.d.mts +40 -0
  95. package/src/lib/format/endings.d.ts +40 -0
  96. package/src/lib/format/endings.js +15 -0
  97. package/src/lib/format/endings.js.map +1 -0
  98. package/src/lib/format/endings.mjs +12 -0
  99. package/src/lib/format/endings.mjs.map +1 -0
  100. package/src/lib/format/field.d.mts +151 -16
  101. package/src/lib/format/field.d.ts +151 -16
  102. package/src/lib/format/field.js +64 -11
  103. package/src/lib/format/field.js.map +1 -1
  104. package/src/lib/format/field.mjs +63 -10
  105. package/src/lib/format/field.mjs.map +1 -1
  106. package/src/lib/format/head-checks.d.mts +2 -0
  107. package/src/lib/format/head-checks.d.ts +2 -0
  108. package/src/lib/format/head-checks.js +2 -59
  109. package/src/lib/format/head-checks.js.map +1 -1
  110. package/src/lib/format/head-checks.mjs +1 -58
  111. package/src/lib/format/head-checks.mjs.map +1 -1
  112. package/src/lib/format/later-checks.d.mts +17 -0
  113. package/src/lib/format/later-checks.d.ts +17 -0
  114. package/src/lib/format/later-checks.js +20 -0
  115. package/src/lib/format/later-checks.js.map +1 -0
  116. package/src/lib/format/later-checks.mjs +17 -0
  117. package/src/lib/format/later-checks.mjs.map +1 -0
  118. package/src/lib/format/layout.d.mts +241 -188
  119. package/src/lib/format/layout.d.ts +241 -188
  120. package/src/lib/format/layout.js +33 -28
  121. package/src/lib/format/layout.js.map +1 -1
  122. package/src/lib/format/layout.mjs +13 -3
  123. package/src/lib/format/layout.mjs.map +1 -1
  124. package/src/lib/format/layout.types.d.mts +2 -1
  125. package/src/lib/format/layout.types.d.ts +2 -1
  126. package/src/lib/format/limits-checks.d.mts +14 -0
  127. package/src/lib/format/limits-checks.d.ts +14 -0
  128. package/src/lib/format/limits-checks.js +36 -0
  129. package/src/lib/format/limits-checks.js.map +1 -0
  130. package/src/lib/format/limits-checks.mjs +33 -0
  131. package/src/lib/format/limits-checks.mjs.map +1 -0
  132. package/src/lib/format/limits.d.mts +24 -0
  133. package/src/lib/format/limits.d.ts +24 -0
  134. package/src/lib/format/limits.js +35 -0
  135. package/src/lib/format/limits.js.map +1 -0
  136. package/src/lib/format/limits.mjs +32 -0
  137. package/src/lib/format/limits.mjs.map +1 -0
  138. package/src/lib/format/list-checks.d.mts +44 -0
  139. package/src/lib/format/list-checks.d.ts +44 -0
  140. package/src/lib/format/list-checks.js +340 -0
  141. package/src/lib/format/list-checks.js.map +1 -0
  142. package/src/lib/format/list-checks.mjs +336 -0
  143. package/src/lib/format/list-checks.mjs.map +1 -0
  144. package/src/lib/format/map-checks.d.mts +33 -0
  145. package/src/lib/format/map-checks.d.ts +33 -0
  146. package/src/lib/format/map-checks.js +180 -0
  147. package/src/lib/format/map-checks.js.map +1 -0
  148. package/src/lib/format/map-checks.mjs +175 -0
  149. package/src/lib/format/map-checks.mjs.map +1 -0
  150. package/src/lib/format/mapchecks-part.d.mts +5 -0
  151. package/src/lib/format/mapchecks-part.d.ts +5 -0
  152. package/src/lib/format/mapchecks-part.js +11 -0
  153. package/src/lib/format/mapchecks-part.js.map +1 -0
  154. package/src/lib/format/mapchecks-part.mjs +6 -0
  155. package/src/lib/format/mapchecks-part.mjs.map +1 -0
  156. package/src/lib/format/option-checks.d.mts +16 -0
  157. package/src/lib/format/option-checks.d.ts +16 -0
  158. package/src/lib/format/option-checks.js +39 -0
  159. package/src/lib/format/option-checks.js.map +1 -0
  160. package/src/lib/format/option-checks.mjs +36 -0
  161. package/src/lib/format/option-checks.mjs.map +1 -0
  162. package/src/lib/format/options-part.d.mts +6 -0
  163. package/src/lib/format/options-part.d.ts +6 -0
  164. package/src/lib/format/options-part.js +11 -0
  165. package/src/lib/format/options-part.js.map +1 -0
  166. package/src/lib/format/options-part.mjs +7 -0
  167. package/src/lib/format/options-part.mjs.map +1 -0
  168. package/src/lib/format/page.d.mts +147 -71
  169. package/src/lib/format/page.d.ts +147 -71
  170. package/src/lib/format/page.js +5 -0
  171. package/src/lib/format/page.js.map +1 -1
  172. package/src/lib/format/page.mjs +5 -0
  173. package/src/lib/format/page.mjs.map +1 -1
  174. package/src/lib/format/part-checks.d.mts +20 -0
  175. package/src/lib/format/part-checks.d.ts +20 -0
  176. package/src/lib/format/part-checks.js +3 -0
  177. package/src/lib/format/part-checks.js.map +1 -0
  178. package/src/lib/format/part-checks.mjs +2 -0
  179. package/src/lib/format/part-checks.mjs.map +1 -0
  180. package/src/lib/format/references.d.mts +71 -65
  181. package/src/lib/format/references.d.ts +71 -65
  182. package/src/lib/format/references.js +194 -631
  183. package/src/lib/format/references.js.map +1 -1
  184. package/src/lib/format/references.mjs +194 -631
  185. package/src/lib/format/references.mjs.map +1 -1
  186. package/src/lib/format/seats-checks.d.mts +3 -0
  187. package/src/lib/format/seats-checks.d.ts +3 -0
  188. package/src/lib/format/seats-checks.js +13 -0
  189. package/src/lib/format/seats-checks.js.map +1 -0
  190. package/src/lib/format/seats-checks.mjs +10 -0
  191. package/src/lib/format/seats-checks.mjs.map +1 -0
  192. package/src/lib/format/sheet-head-checks.d.mts +4 -0
  193. package/src/lib/format/sheet-head-checks.d.ts +4 -0
  194. package/src/lib/format/sheet-head-checks.js +68 -0
  195. package/src/lib/format/sheet-head-checks.js.map +1 -0
  196. package/src/lib/format/sheet-head-checks.mjs +65 -0
  197. package/src/lib/format/sheet-head-checks.mjs.map +1 -0
  198. package/src/lib/format/signature-checks.d.mts +7 -0
  199. package/src/lib/format/signature-checks.d.ts +7 -0
  200. package/src/lib/format/signature-checks.js +32 -0
  201. package/src/lib/format/signature-checks.js.map +1 -0
  202. package/src/lib/format/signature-checks.mjs +29 -0
  203. package/src/lib/format/signature-checks.mjs.map +1 -0
  204. package/src/lib/format/signature-options.d.mts +24 -0
  205. package/src/lib/format/signature-options.d.ts +24 -0
  206. package/src/lib/format/signature-options.js +30 -0
  207. package/src/lib/format/signature-options.js.map +1 -0
  208. package/src/lib/format/signature-options.mjs +26 -0
  209. package/src/lib/format/signature-options.mjs.map +1 -0
  210. package/src/lib/format/slots-checks.d.mts +4 -0
  211. package/src/lib/format/slots-checks.d.ts +4 -0
  212. package/src/lib/format/slots-checks.js +21 -0
  213. package/src/lib/format/slots-checks.js.map +1 -0
  214. package/src/lib/format/slots-checks.mjs +18 -0
  215. package/src/lib/format/slots-checks.mjs.map +1 -0
  216. package/src/lib/format/statusbar-checks.d.mts +8 -0
  217. package/src/lib/format/statusbar-checks.d.ts +8 -0
  218. package/src/lib/format/statusbar-checks.js +35 -0
  219. package/src/lib/format/statusbar-checks.js.map +1 -0
  220. package/src/lib/format/statusbar-checks.mjs +32 -0
  221. package/src/lib/format/statusbar-checks.mjs.map +1 -0
  222. package/src/lib/format/table-checks.d.mts +21 -0
  223. package/src/lib/format/table-checks.d.ts +21 -0
  224. package/src/lib/format/table-checks.js +86 -0
  225. package/src/lib/format/table-checks.js.map +1 -0
  226. package/src/lib/format/table-checks.mjs +82 -0
  227. package/src/lib/format/table-checks.mjs.map +1 -0
  228. package/src/lib/format/translate.js +2 -2
  229. package/src/lib/format/translate.js.map +1 -1
  230. package/src/lib/format/translate.mjs +2 -2
  231. package/src/lib/format/translate.mjs.map +1 -1
  232. package/src/lib/format/upgrade.d.mts +6 -3
  233. package/src/lib/format/upgrade.d.ts +6 -3
  234. package/src/lib/format/upgrade.js +6 -3
  235. package/src/lib/format/upgrade.js.map +1 -1
  236. package/src/lib/format/upgrade.mjs +6 -3
  237. package/src/lib/format/upgrade.mjs.map +1 -1
  238. package/src/lib/format/validate.d.mts +18 -2
  239. package/src/lib/format/validate.d.ts +18 -2
  240. package/src/lib/format/validate.js +36 -3
  241. package/src/lib/format/validate.js.map +1 -1
  242. package/src/lib/format/validate.mjs +35 -3
  243. package/src/lib/format/validate.mjs.map +1 -1
  244. package/src/lib/format/version.d.mts +2 -2
  245. package/src/lib/format/version.d.ts +2 -2
  246. package/src/lib/format/version.js +2 -2
  247. package/src/lib/format/version.js.map +1 -1
  248. package/src/lib/format/version.mjs +2 -2
  249. package/src/lib/format/version.mjs.map +1 -1
  250. package/src/lib/format/words.d.mts +6 -2
  251. package/src/lib/format/words.d.ts +6 -2
  252. package/src/lib/format/words.js +13 -7
  253. package/src/lib/format/words.js.map +1 -1
  254. package/src/lib/format/words.mjs +13 -7
  255. package/src/lib/format/words.mjs.map +1 -1
  256. package/src/lib/parts.d.mts +45 -0
  257. package/src/lib/parts.d.ts +45 -0
  258. package/src/lib/parts.js +60 -0
  259. package/src/lib/parts.js.map +1 -0
  260. package/src/lib/parts.mjs +53 -0
  261. package/src/lib/parts.mjs.map +1 -0
  262. package/src/lib/record/cells.d.mts +3 -3
  263. package/src/lib/record/cells.d.ts +3 -3
  264. package/src/lib/record/cells.js +16 -15
  265. package/src/lib/record/cells.js.map +1 -1
  266. package/src/lib/record/cells.mjs +16 -15
  267. package/src/lib/record/cells.mjs.map +1 -1
  268. package/src/lib/record/compute.d.mts +16 -5
  269. package/src/lib/record/compute.d.ts +16 -5
  270. package/src/lib/record/compute.js +57 -16
  271. package/src/lib/record/compute.js.map +1 -1
  272. package/src/lib/record/compute.mjs +57 -16
  273. package/src/lib/record/compute.mjs.map +1 -1
  274. package/src/lib/record/data-source.d.mts +140 -3
  275. package/src/lib/record/data-source.d.ts +140 -3
  276. package/src/lib/record/data-source.js.map +1 -1
  277. package/src/lib/record/data-source.mjs.map +1 -1
  278. package/src/lib/record/drafts.d.mts +19 -0
  279. package/src/lib/record/drafts.d.ts +19 -0
  280. package/src/lib/record/drafts.js +35 -0
  281. package/src/lib/record/drafts.js.map +1 -0
  282. package/src/lib/record/drafts.mjs +31 -0
  283. package/src/lib/record/drafts.mjs.map +1 -0
  284. package/src/lib/record/env.d.mts +5 -1
  285. package/src/lib/record/env.d.ts +5 -1
  286. package/src/lib/record/env.js +9 -1
  287. package/src/lib/record/env.js.map +1 -1
  288. package/src/lib/record/env.mjs +8 -1
  289. package/src/lib/record/env.mjs.map +1 -1
  290. package/src/lib/record/form-limits.d.mts +81 -0
  291. package/src/lib/record/form-limits.d.ts +81 -0
  292. package/src/lib/record/form-limits.js +231 -0
  293. package/src/lib/record/form-limits.js.map +1 -0
  294. package/src/lib/record/form-limits.mjs +224 -0
  295. package/src/lib/record/form-limits.mjs.map +1 -0
  296. package/src/lib/record/form.d.mts +173 -4
  297. package/src/lib/record/form.d.ts +173 -4
  298. package/src/lib/record/form.js +792 -88
  299. package/src/lib/record/form.js.map +1 -1
  300. package/src/lib/record/form.mjs +792 -88
  301. package/src/lib/record/form.mjs.map +1 -1
  302. package/src/lib/record/limits-part.d.mts +6 -0
  303. package/src/lib/record/limits-part.d.ts +6 -0
  304. package/src/lib/record/limits-part.js +12 -0
  305. package/src/lib/record/limits-part.js.map +1 -0
  306. package/src/lib/record/limits-part.mjs +7 -0
  307. package/src/lib/record/limits-part.mjs.map +1 -0
  308. package/src/lib/record/line-choices.d.mts +30 -0
  309. package/src/lib/record/line-choices.d.ts +30 -0
  310. package/src/lib/record/line-choices.js +42 -0
  311. package/src/lib/record/line-choices.js.map +1 -0
  312. package/src/lib/record/line-choices.mjs +36 -0
  313. package/src/lib/record/line-choices.mjs.map +1 -0
  314. package/src/lib/record/locales/ar.js +10 -0
  315. package/src/lib/record/locales/ar.js.map +1 -1
  316. package/src/lib/record/locales/ar.mjs +10 -0
  317. package/src/lib/record/locales/ar.mjs.map +1 -1
  318. package/src/lib/record/locales/de.js +10 -0
  319. package/src/lib/record/locales/de.js.map +1 -1
  320. package/src/lib/record/locales/de.mjs +10 -0
  321. package/src/lib/record/locales/de.mjs.map +1 -1
  322. package/src/lib/record/locales/fr.js +10 -0
  323. package/src/lib/record/locales/fr.js.map +1 -1
  324. package/src/lib/record/locales/fr.mjs +10 -0
  325. package/src/lib/record/locales/fr.mjs.map +1 -1
  326. package/src/lib/record/memory-data-source.d.mts +44 -3
  327. package/src/lib/record/memory-data-source.d.ts +44 -3
  328. package/src/lib/record/memory-data-source.js +102 -40
  329. package/src/lib/record/memory-data-source.js.map +1 -1
  330. package/src/lib/record/memory-data-source.mjs +101 -40
  331. package/src/lib/record/memory-data-source.mjs.map +1 -1
  332. package/src/lib/record/memory-kept.d.mts +20 -0
  333. package/src/lib/record/memory-kept.d.ts +20 -0
  334. package/src/lib/record/memory-kept.js +46 -0
  335. package/src/lib/record/memory-kept.js.map +1 -0
  336. package/src/lib/record/memory-kept.mjs +43 -0
  337. package/src/lib/record/memory-kept.mjs.map +1 -0
  338. package/src/lib/record/memory-later.d.mts +19 -0
  339. package/src/lib/record/memory-later.d.ts +19 -0
  340. package/src/lib/record/memory-later.js +39 -0
  341. package/src/lib/record/memory-later.js.map +1 -0
  342. package/src/lib/record/memory-later.mjs +35 -0
  343. package/src/lib/record/memory-later.mjs.map +1 -0
  344. package/src/lib/record/memory-part.d.mts +7 -0
  345. package/src/lib/record/memory-part.d.ts +7 -0
  346. package/src/lib/record/memory-part.js +13 -0
  347. package/src/lib/record/memory-part.js.map +1 -0
  348. package/src/lib/record/memory-part.mjs +8 -0
  349. package/src/lib/record/memory-part.mjs.map +1 -0
  350. package/src/lib/record/messages.d.mts +17 -0
  351. package/src/lib/record/messages.d.ts +17 -0
  352. package/src/lib/record/messages.js +10 -0
  353. package/src/lib/record/messages.js.map +1 -1
  354. package/src/lib/record/messages.mjs +10 -0
  355. package/src/lib/record/messages.mjs.map +1 -1
  356. package/src/lib/record/option-rules.d.mts +50 -0
  357. package/src/lib/record/option-rules.d.ts +50 -0
  358. package/src/lib/record/option-rules.js +137 -0
  359. package/src/lib/record/option-rules.js.map +1 -0
  360. package/src/lib/record/option-rules.mjs +134 -0
  361. package/src/lib/record/option-rules.mjs.map +1 -0
  362. package/src/lib/record/rules.d.mts +2 -2
  363. package/src/lib/record/rules.d.ts +2 -2
  364. package/src/lib/record/rules.js +3 -3
  365. package/src/lib/record/rules.js.map +1 -1
  366. package/src/lib/record/rules.mjs +3 -3
  367. package/src/lib/record/rules.mjs.map +1 -1
  368. package/src/lib/record/run.js +9 -7
  369. package/src/lib/record/run.js.map +1 -1
  370. package/src/lib/record/run.mjs +9 -7
  371. package/src/lib/record/run.mjs.map +1 -1
  372. package/src/lib/record/search.d.mts +12 -2
  373. package/src/lib/record/search.d.ts +12 -2
  374. package/src/lib/record/search.js +29 -4
  375. package/src/lib/record/search.js.map +1 -1
  376. package/src/lib/record/search.mjs +29 -4
  377. package/src/lib/record/search.mjs.map +1 -1
  378. package/src/lib/record/set-when.d.mts +3 -3
  379. package/src/lib/record/set-when.d.ts +3 -3
  380. package/src/lib/record/set-when.js +9 -9
  381. package/src/lib/record/set-when.js.map +1 -1
  382. package/src/lib/record/set-when.mjs +9 -9
  383. package/src/lib/record/set-when.mjs.map +1 -1
  384. package/src/lib/record/signed.d.mts +21 -0
  385. package/src/lib/record/signed.d.ts +21 -0
  386. package/src/lib/record/signed.js +62 -0
  387. package/src/lib/record/signed.js.map +1 -0
  388. package/src/lib/record/signed.mjs +57 -0
  389. package/src/lib/record/signed.mjs.map +1 -0
  390. package/src/lib/record/taking.d.mts +60 -0
  391. package/src/lib/record/taking.d.ts +60 -0
  392. package/src/lib/record/taking.js +58 -0
  393. package/src/lib/record/taking.js.map +1 -0
  394. package/src/lib/record/taking.mjs +50 -0
  395. package/src/lib/record/taking.mjs.map +1 -0
  396. package/src/lib/record/value-map.js +11 -4
  397. package/src/lib/record/value-map.js.map +1 -1
  398. package/src/lib/record/value-map.mjs +11 -4
  399. package/src/lib/record/value-map.mjs.map +1 -1
  400. package/src/lib/record/values.d.mts +20 -0
  401. package/src/lib/record/values.d.ts +20 -0
  402. package/src/lib/record/values.js.map +1 -1
  403. package/src/lib/record/values.mjs.map +1 -1
  404. package/src/lib/record/waits.d.mts +6 -1
  405. package/src/lib/record/waits.d.ts +6 -1
  406. package/src/lib/record/waits.js +2 -2
  407. package/src/lib/record/waits.js.map +1 -1
  408. package/src/lib/record/waits.mjs +2 -2
  409. package/src/lib/record/waits.mjs.map +1 -1
  410. package/src/runtime.d.mts +16 -5
  411. package/src/runtime.d.ts +16 -5
  412. package/src/runtime.js +41 -3
  413. package/src/runtime.js.map +1 -1
  414. package/src/runtime.mjs +13 -0
  415. package/src/runtime.mjs.map +1 -1
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ANY_FUNCTION = void 0;
4
+ exports.functionNameProblem = functionNameProblem;
5
+ exports.functionTable = functionTable;
6
+ exports.functionInfo = functionInfo;
7
+ const functions_1 = require("./functions");
8
+ const tokenizer_1 = require("./tokenizer");
9
+ /** The language's own words, which no function may be called. */
10
+ const WORDS = new Set(['and', 'or', 'not', 'in']);
11
+ const NAME = /^[A-Za-z_][A-Za-z0-9_]*$/;
12
+ /** What is wrong with a name an app gives a function, or undefined when a page may call it so. */
13
+ function functionNameProblem(name) {
14
+ if (!NAME.test(name))
15
+ return `"${name}" cannot name a function: letters, digits and _, not starting with a digit`;
16
+ if (WORDS.has(name.toLowerCase()) || tokenizer_1.CONSTANTS.has(name))
17
+ return `"${name}" is a word of the formula language, not a function's name`;
18
+ if (functions_1.FUNCTIONS.has(name))
19
+ return `"${name}" is Fieldia's own function: give the app's another name`;
20
+ return undefined;
21
+ }
22
+ /** A function no table names, read where any may be called: it gives nothing. */
23
+ const UNKNOWN = { takes: [0, Infinity], call: () => null };
24
+ /**
25
+ * A table reading a call of any function: for what reads a page's conditions apart from its form — the fields an
26
+ * amount's look reads, a designer's outline — where the app's functions are not at hand. A call of one gives
27
+ * nothing there; the page's checks, given the app's functions, say which are not.
28
+ */
29
+ exports.ANY_FUNCTION = { get: (name) => (functions_1.FUNCTIONS.has(name) ? undefined : UNKNOWN), keys: () => [][Symbol.iterator]() };
30
+ const tables = new WeakMap();
31
+ /**
32
+ * The table a page's expressions call the app's functions through, read once for each `functions` object. Throws
33
+ * for a name a page cannot call (a word of the language, Fieldia's own function, not a name), so a mistake is said
34
+ * as the form is made. Undefined for none.
35
+ */
36
+ function functionTable(given) {
37
+ if (!given)
38
+ return undefined;
39
+ const found = tables.get(given);
40
+ if (found)
41
+ return found;
42
+ const table = new Map();
43
+ for (const [name, entry] of Object.entries(given)) {
44
+ const problem = functionNameProblem(name);
45
+ if (problem)
46
+ throw new Error(`functions: ${problem}`);
47
+ table.set(name, appFunction(name, entry));
48
+ }
49
+ tables.set(given, table);
50
+ return table;
51
+ }
52
+ /** What is known of an entry: a plain function is one taking any number of values. */
53
+ function functionInfo(entry) {
54
+ return typeof entry === 'function' ? {} : entry;
55
+ }
56
+ /**
57
+ * One of the app's functions as the page's expressions call it: what it takes known at once, its call made by the
58
+ * functions part (more-functions.ts, `appCall`) — a value worked out from it waiting for the part, as for an answer, until
59
+ * it has come.
60
+ */
61
+ function appFunction(name, entry) {
62
+ return { takes: functionInfo(entry).takes ?? [0, Infinity], call: (call) => (functions_1.functionsPart.loaded ? functions_1.functionsPart.loaded.appCall(name, entry)(call) : (0, functions_1.partComing)(call)) };
63
+ }
64
+ //# sourceMappingURL=app-functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-functions.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/expression/app-functions.ts"],"names":[],"mappings":";;;AA4CA,kDAKC;AAmBD,sCAYC;AAGD,oCAEC;AArFD,2CAAgH;AAChH,2CAAwC;AAsCxC,iEAAiE;AACjE,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AAClD,MAAM,IAAI,GAAG,0BAA0B,CAAC;AAExC,kGAAkG;AAClG,SAAgB,mBAAmB,CAAC,IAAY;IAC9C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,IAAI,4EAA4E,CAAC;IAClH,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,qBAAS,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,IAAI,4DAA4D,CAAC;IACtI,IAAI,qBAAS,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,IAAI,0DAA0D,CAAC;IACnG,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,iFAAiF;AACjF,MAAM,OAAO,GAAuB,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;AAE/E;;;;GAIG;AACU,QAAA,YAAY,GAAG,EAAE,GAAG,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,qBAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAA8B,CAAC;AAElK,MAAM,MAAM,GAAG,IAAI,OAAO,EAAyB,CAAC;AAEpD;;;;GAIG;AACH,SAAgB,aAAa,CAAC,KAAiC;IAC7D,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,MAAM,KAAK,GAAG,IAAI,GAAG,EAA8B,CAAC;IACpD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC;QACtD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACzB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,sFAAsF;AACtF,SAAgB,YAAY,CAAC,KAAqE;IAChG,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,IAAY,EAAE,KAAqE;IACtG,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,yBAAa,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAa,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAA,sBAAU,EAAC,IAAI,CAAC,CAAC,EAAE,CAAC;AAC5K,CAAC"}
@@ -0,0 +1,58 @@
1
+ import { FUNCTIONS, functionsPart, partComing } from './functions.mjs';
2
+ import { CONSTANTS } from './tokenizer.mjs';
3
+ /** The language's own words, which no function may be called. */
4
+ const WORDS = new Set(['and', 'or', 'not', 'in']);
5
+ const NAME = /^[A-Za-z_][A-Za-z0-9_]*$/;
6
+ /** What is wrong with a name an app gives a function, or undefined when a page may call it so. */
7
+ export function functionNameProblem(name) {
8
+ if (!NAME.test(name))
9
+ return `"${name}" cannot name a function: letters, digits and _, not starting with a digit`;
10
+ if (WORDS.has(name.toLowerCase()) || CONSTANTS.has(name))
11
+ return `"${name}" is a word of the formula language, not a function's name`;
12
+ if (FUNCTIONS.has(name))
13
+ return `"${name}" is Fieldia's own function: give the app's another name`;
14
+ return undefined;
15
+ }
16
+ /** A function no table names, read where any may be called: it gives nothing. */
17
+ const UNKNOWN = { takes: [0, Infinity], call: () => null };
18
+ /**
19
+ * A table reading a call of any function: for what reads a page's conditions apart from its form — the fields an
20
+ * amount's look reads, a designer's outline — where the app's functions are not at hand. A call of one gives
21
+ * nothing there; the page's checks, given the app's functions, say which are not.
22
+ */
23
+ export const ANY_FUNCTION = { get: (name) => (FUNCTIONS.has(name) ? undefined : UNKNOWN), keys: () => [][Symbol.iterator]() };
24
+ const tables = new WeakMap();
25
+ /**
26
+ * The table a page's expressions call the app's functions through, read once for each `functions` object. Throws
27
+ * for a name a page cannot call (a word of the language, Fieldia's own function, not a name), so a mistake is said
28
+ * as the form is made. Undefined for none.
29
+ */
30
+ export function functionTable(given) {
31
+ if (!given)
32
+ return undefined;
33
+ const found = tables.get(given);
34
+ if (found)
35
+ return found;
36
+ const table = new Map();
37
+ for (const [name, entry] of Object.entries(given)) {
38
+ const problem = functionNameProblem(name);
39
+ if (problem)
40
+ throw new Error(`functions: ${problem}`);
41
+ table.set(name, appFunction(name, entry));
42
+ }
43
+ tables.set(given, table);
44
+ return table;
45
+ }
46
+ /** What is known of an entry: a plain function is one taking any number of values. */
47
+ export function functionInfo(entry) {
48
+ return typeof entry === 'function' ? {} : entry;
49
+ }
50
+ /**
51
+ * One of the app's functions as the page's expressions call it: what it takes known at once, its call made by the
52
+ * functions part (more-functions.ts, `appCall`) — a value worked out from it waiting for the part, as for an answer, until
53
+ * it has come.
54
+ */
55
+ function appFunction(name, entry) {
56
+ return { takes: functionInfo(entry).takes ?? [0, Infinity], call: (call) => (functionsPart.loaded ? functionsPart.loaded.appCall(name, entry)(call) : partComing(call)) };
57
+ }
58
+ //# sourceMappingURL=app-functions.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-functions.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/expression/app-functions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Days as a form's expressions count them: a date is YYYY-MM-DD, a date and
3
+ * time the same day with its time after it, as the record keeps it. A month
4
+ * added to the 31st ends on the last day of a shorter month, as people and
5
+ * contracts count months, and the months between two days are the most that
6
+ * can be added to the first without passing the second — so the two agree:
7
+ * 31 January and a month is 28 February, and from one to the other is a month.
8
+ */
9
+ /** A day's year, month and day, and what came after it (a time), from a date or a date and time; null when it is neither. */
10
+ export declare function dayParts(value: unknown): {
11
+ year: number;
12
+ month: number;
13
+ day: number;
14
+ rest: string;
15
+ } | null;
16
+ /** A day a whole number of days later (earlier when negative); null when it is not a day. */
17
+ export declare function addDays(value: unknown, days: number): string | null;
18
+ /** A day so many whole months later (earlier when negative): past a shorter month's end, on its last day. */
19
+ export declare function addMonths(value: unknown, months: number): string | null;
20
+ /** The whole months from one day to another — negative when the second comes first — counted as `addMonths` adds them. */
21
+ export declare function monthsBetween(from: unknown, to: unknown): number | null;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Days as a form's expressions count them: a date is YYYY-MM-DD, a date and
3
+ * time the same day with its time after it, as the record keeps it. A month
4
+ * added to the 31st ends on the last day of a shorter month, as people and
5
+ * contracts count months, and the months between two days are the most that
6
+ * can be added to the first without passing the second — so the two agree:
7
+ * 31 January and a month is 28 February, and from one to the other is a month.
8
+ */
9
+ /** A day's year, month and day, and what came after it (a time), from a date or a date and time; null when it is neither. */
10
+ export declare function dayParts(value: unknown): {
11
+ year: number;
12
+ month: number;
13
+ day: number;
14
+ rest: string;
15
+ } | null;
16
+ /** A day a whole number of days later (earlier when negative); null when it is not a day. */
17
+ export declare function addDays(value: unknown, days: number): string | null;
18
+ /** A day so many whole months later (earlier when negative): past a shorter month's end, on its last day. */
19
+ export declare function addMonths(value: unknown, months: number): string | null;
20
+ /** The whole months from one day to another — negative when the second comes first — counted as `addMonths` adds them. */
21
+ export declare function monthsBetween(from: unknown, to: unknown): number | null;
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ /**
3
+ * Days as a form's expressions count them: a date is YYYY-MM-DD, a date and
4
+ * time the same day with its time after it, as the record keeps it. A month
5
+ * added to the 31st ends on the last day of a shorter month, as people and
6
+ * contracts count months, and the months between two days are the most that
7
+ * can be added to the first without passing the second — so the two agree:
8
+ * 31 January and a month is 28 February, and from one to the other is a month.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.dayParts = dayParts;
12
+ exports.addDays = addDays;
13
+ exports.addMonths = addMonths;
14
+ exports.monthsBetween = monthsBetween;
15
+ /** A day's year, month and day, and what came after it (a time), from a date or a date and time; null when it is neither. */
16
+ function dayParts(value) {
17
+ if (typeof value !== 'string')
18
+ return null;
19
+ const match = /^(\d{4})-(\d{2})-(\d{2})(.*)$/s.exec(value);
20
+ if (!match)
21
+ return null;
22
+ const [year, month, day] = [Number(match[1]), Number(match[2]), Number(match[3])];
23
+ if (month < 1 || month > 12 || day < 1 || day > daysIn(year, month))
24
+ return null;
25
+ return { year, month, day, rest: match[4] };
26
+ }
27
+ /** How many days a month has: 1 is January. */
28
+ function daysIn(year, month) {
29
+ return new Date(Date.UTC(year, month, 0)).getUTCDate();
30
+ }
31
+ const pad = (n, width = 2) => String(n).padStart(width, '0');
32
+ /** A day written as a date, with the time it had after it. */
33
+ function written(year, month, day, rest) {
34
+ return `${pad(year, 4)}-${pad(month)}-${pad(day)}${rest}`;
35
+ }
36
+ /** A day a whole number of days later (earlier when negative); null when it is not a day. */
37
+ function addDays(value, days) {
38
+ const parts = dayParts(value);
39
+ if (!parts)
40
+ return null;
41
+ const moved = new Date(Date.UTC(parts.year, parts.month - 1, parts.day + Math.trunc(days)));
42
+ return written(moved.getUTCFullYear(), moved.getUTCMonth() + 1, moved.getUTCDate(), parts.rest);
43
+ }
44
+ /** A day so many whole months later (earlier when negative): past a shorter month's end, on its last day. */
45
+ function addMonths(value, months) {
46
+ const parts = dayParts(value);
47
+ if (!parts)
48
+ return null;
49
+ const index = parts.year * 12 + (parts.month - 1) + Math.trunc(months);
50
+ const year = Math.floor(index / 12);
51
+ const month = index - year * 12 + 1;
52
+ if (year < 0 || year > 9999)
53
+ return null;
54
+ return written(year, month, Math.min(parts.day, daysIn(year, month)), parts.rest);
55
+ }
56
+ /** The whole months from one day to another — negative when the second comes first — counted as `addMonths` adds them. */
57
+ function monthsBetween(from, to) {
58
+ const a = dayParts(from);
59
+ const b = dayParts(to);
60
+ if (!a || !b)
61
+ return null;
62
+ const key = (p) => p.year * 10000 + p.month * 100 + p.day;
63
+ if (key(b) < key(a)) {
64
+ const back = monthsBetween(to, from);
65
+ return back === null ? null : -back;
66
+ }
67
+ let months = (b.year - a.year) * 12 + (b.month - a.month);
68
+ const reached = dayParts(addMonths(written(a.year, a.month, a.day, ''), months));
69
+ if (reached && key(reached) > key(b))
70
+ months--;
71
+ return months;
72
+ }
73
+ //# sourceMappingURL=dates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dates.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/expression/dates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Days as a form's expressions count them: a date is YYYY-MM-DD, a date and
3
+ * time the same day with its time after it, as the record keeps it. A month
4
+ * added to the 31st ends on the last day of a shorter month, as people and
5
+ * contracts count months, and the months between two days are the most that
6
+ * can be added to the first without passing the second — so the two agree:
7
+ * 31 January and a month is 28 February, and from one to the other is a month.
8
+ */
9
+ /** A day's year, month and day, and what came after it (a time), from a date or a date and time; null when it is neither. */
10
+ export function dayParts(value) {
11
+ if (typeof value !== 'string')
12
+ return null;
13
+ const match = /^(\d{4})-(\d{2})-(\d{2})(.*)$/s.exec(value);
14
+ if (!match)
15
+ return null;
16
+ const [year, month, day] = [Number(match[1]), Number(match[2]), Number(match[3])];
17
+ if (month < 1 || month > 12 || day < 1 || day > daysIn(year, month))
18
+ return null;
19
+ return { year, month, day, rest: match[4] };
20
+ }
21
+ /** How many days a month has: 1 is January. */
22
+ function daysIn(year, month) {
23
+ return new Date(Date.UTC(year, month, 0)).getUTCDate();
24
+ }
25
+ const pad = (n, width = 2) => String(n).padStart(width, '0');
26
+ /** A day written as a date, with the time it had after it. */
27
+ function written(year, month, day, rest) {
28
+ return `${pad(year, 4)}-${pad(month)}-${pad(day)}${rest}`;
29
+ }
30
+ /** A day a whole number of days later (earlier when negative); null when it is not a day. */
31
+ export function addDays(value, days) {
32
+ const parts = dayParts(value);
33
+ if (!parts)
34
+ return null;
35
+ const moved = new Date(Date.UTC(parts.year, parts.month - 1, parts.day + Math.trunc(days)));
36
+ return written(moved.getUTCFullYear(), moved.getUTCMonth() + 1, moved.getUTCDate(), parts.rest);
37
+ }
38
+ /** A day so many whole months later (earlier when negative): past a shorter month's end, on its last day. */
39
+ export function addMonths(value, months) {
40
+ const parts = dayParts(value);
41
+ if (!parts)
42
+ return null;
43
+ const index = parts.year * 12 + (parts.month - 1) + Math.trunc(months);
44
+ const year = Math.floor(index / 12);
45
+ const month = index - year * 12 + 1;
46
+ if (year < 0 || year > 9999)
47
+ return null;
48
+ return written(year, month, Math.min(parts.day, daysIn(year, month)), parts.rest);
49
+ }
50
+ /** The whole months from one day to another — negative when the second comes first — counted as `addMonths` adds them. */
51
+ export function monthsBetween(from, to) {
52
+ const a = dayParts(from);
53
+ const b = dayParts(to);
54
+ if (!a || !b)
55
+ return null;
56
+ const key = (p) => p.year * 10000 + p.month * 100 + p.day;
57
+ if (key(b) < key(a)) {
58
+ const back = monthsBetween(to, from);
59
+ return back === null ? null : -back;
60
+ }
61
+ let months = (b.year - a.year) * 12 + (b.month - a.month);
62
+ const reached = dayParts(addMonths(written(a.year, a.month, a.day, ''), months));
63
+ if (reached && key(reached) > key(b))
64
+ months--;
65
+ return months;
66
+ }
67
+ //# sourceMappingURL=dates.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dates.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/expression/dates.ts"],"names":[],"mappings":"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"}
@@ -105,17 +105,23 @@ function evaluateUnaryOp(node, context, env) {
105
105
  }
106
106
  /** A function called with its values, each read only when the function asks for it. */
107
107
  function evaluateCall(node, context, env) {
108
- const fn = functions_1.FUNCTIONS.get(node.name);
108
+ const fn = functions_1.FUNCTIONS.get(node.name) ?? env.functions?.get(node.name);
109
109
  if (!fn)
110
110
  throw new Error(`Unknown function: ${node.name}`);
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)) });
111
+ return fn.call({ args: node.args, value: (arg) => evaluate(arg, context, env), env, holds: (condition, row) => (0, operations_1.truthy)(evaluate(conditionAst(condition, env.functions), row, env)) });
112
112
  }
113
- /** Conditions on lines, as `count` and `sum` take them in quotes: each read once. */
113
+ /** Conditions on lines, as `count` and `sum` take them in quotes: each read once, for each table of the app's functions. */
114
114
  const conditions = new Map();
115
- function conditionAst(source) {
116
- let ast = conditions.get(source);
115
+ const appConditions = new WeakMap();
116
+ function conditionAst(source, functions) {
117
+ let read = conditions;
118
+ if (functions) {
119
+ read = appConditions.get(functions) ?? new Map();
120
+ appConditions.set(functions, read);
121
+ }
122
+ let ast = read.get(source);
117
123
  if (!ast)
118
- conditions.set(source, (ast = new parser_1.ExpressionParser((0, tokenizer_1.tokenize)(source)).parse()));
124
+ read.set(source, (ast = new parser_1.ExpressionParser((0, tokenizer_1.tokenize)(source), functions).parse()));
119
125
  return ast;
120
126
  }
121
127
  /** A missing value compares like None. */
@@ -1 +1 @@
1
- {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/expression/evaluator.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAsBH,4BAoBC;AAvCD,2CAA4D;AAC5D,qCAA4C;AAC5C,2CAAuC;AACvC,6CAA0D;AAE1D,2CAAsC;AAA7B,oGAAA,MAAM,OAAA;AAEf;;;;;;;;;;;GAWG;AACH,SAAgB,QAAQ,CAAC,GAAY,EAAE,OAAgC,EAAE,MAAqB,EAAE;IAC9F,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,UAAU;YACb,OAAO,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAE7C,KAAK,SAAS;YACZ,OAAO,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAE5C,KAAK,MAAM;YACT,OAAO,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAEzC,KAAK,SAAS;YACZ,OAAO,GAAG,CAAC,KAAK,CAAC;QAEnB,KAAK,YAAY;YACf,OAAO,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE3C;YACE,MAAM,IAAI,KAAK,CAAC,0BAA2B,GAAwB,CAAC,IAAI,EAAE,CAAC,CAAC;IAChF,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,IAAkB,EAAE,OAAgC,EAAE,GAAkB;IAChG,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAC7C,gHAAgH;IAChH,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3D,OAAO,IAAA,mBAAM,EAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IACvG,CAAC;IACD,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC;IAEhD,QAAQ,QAAQ,EAAE,CAAC;QACjB,uBAAuB;QACvB,KAAK,IAAI;YACP,OAAO,IAAI,KAAK,KAAK,CAAC;QAExB,KAAK,IAAI,CAAC;QACV,KAAK,IAAI;YACP,OAAO,IAAI,KAAK,KAAK,CAAC;QAExB,KAAK,GAAG;YACN,OAAO,OAAO,IAAK,IAAmB,GAAI,KAAoB,CAAC;QAEjE,KAAK,GAAG;YACN,OAAO,OAAO,IAAK,IAAmB,GAAI,KAAoB,CAAC;QAEjE,KAAK,IAAI;YACP,OAAO,OAAO,IAAK,IAAmB,IAAK,KAAoB,CAAC;QAElE,KAAK,IAAI;YACP,OAAO,OAAO,IAAK,IAAmB,IAAK,KAAoB,CAAC;QAElE,eAAe;QACf,KAAK,IAAI;YACP,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEtD,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEvD,iCAAiC;QACjC,KAAK,GAAG,CAAC;QACT,KAAK,GAAG,CAAC;QACT,KAAK,GAAG,CAAC;QACT,KAAK,GAAG,CAAC;QACT,KAAK,GAAG;YACN,OAAO,IAAA,uBAAU,EAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAE3C;YACE,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,IAAiB,EAAE,OAAgC,EAAE,GAAkB;IAC9F,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAE7C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,KAAK;YACR,OAAO,CAAC,IAAA,mBAAM,EAAC,OAAO,CAAC,CAAC;QAE1B,KAAK,GAAG;YACN,OAAO,IAAA,mBAAM,EAAC,OAAO,CAAC,CAAC;QAEzB;YACE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED,uFAAuF;AACvF,SAAS,YAAY,CAAC,IAAc,EAAE,OAAgC,EAAE,GAAkB;IACxF,MAAM,EAAE,GAAG,qBAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3D,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,IAAA,mBAAM,EAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,GAA8B,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACnM,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,GAAG,IAAI,GAAG,EAAmB,CAAC;AAC9C,SAAS,YAAY,CAAC,MAAc;IAClC,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,GAAG;QAAE,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,IAAI,yBAAgB,CAAC,IAAA,oBAAQ,EAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACzF,OAAO,GAAG,CAAC;AACb,CAAC;AAKD,0CAA0C;AAC1C,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5C,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,cAAc,CAAC,GAAY,EAAE,IAAY;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,OAAO,GAAY,GAAG,CAAC;IAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC9C,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,GAAI,OAAmC,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/expression/evaluator.ts"],"names":[],"mappings":"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"}
@@ -100,17 +100,23 @@ function evaluateUnaryOp(node, context, env) {
100
100
  }
101
101
  /** A function called with its values, each read only when the function asks for it. */
102
102
  function evaluateCall(node, context, env) {
103
- const fn = FUNCTIONS.get(node.name);
103
+ const fn = FUNCTIONS.get(node.name) ?? env.functions?.get(node.name);
104
104
  if (!fn)
105
105
  throw new Error(`Unknown function: ${node.name}`);
106
- return fn.call({ args: node.args, value: (arg) => evaluate(arg, context, env), env, holds: (condition, row) => truthy(evaluate(conditionAst(condition), row, env)) });
106
+ return fn.call({ args: node.args, value: (arg) => evaluate(arg, context, env), env, holds: (condition, row) => truthy(evaluate(conditionAst(condition, env.functions), row, env)) });
107
107
  }
108
- /** Conditions on lines, as `count` and `sum` take them in quotes: each read once. */
108
+ /** Conditions on lines, as `count` and `sum` take them in quotes: each read once, for each table of the app's functions. */
109
109
  const conditions = new Map();
110
- function conditionAst(source) {
111
- let ast = conditions.get(source);
110
+ const appConditions = new WeakMap();
111
+ function conditionAst(source, functions) {
112
+ let read = conditions;
113
+ if (functions) {
114
+ read = appConditions.get(functions) ?? new Map();
115
+ appConditions.set(functions, read);
116
+ }
117
+ let ast = read.get(source);
112
118
  if (!ast)
113
- conditions.set(source, (ast = new ExpressionParser(tokenize(source)).parse()));
119
+ read.set(source, (ast = new ExpressionParser(tokenize(source), functions).parse()));
114
120
  return ast;
115
121
  }
116
122
  /** A missing value compares like None. */
@@ -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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"}
@@ -1,5 +1,8 @@
1
- import type { ExpressionEnv } from './functions.mjs';
2
- export type { ExpressionEnv } from './functions.mjs';
1
+ import type { ExpressionEnv, FunctionTable } from './functions.mjs';
2
+ import { type ASTNode } from './parser.mjs';
3
+ export type { ExpressionEnv, FunctionTable } from './functions.mjs';
4
+ /** An expression read into its parts, as the page's checks read it: throws when it cannot be read. */
5
+ export declare function parseExpression(source: string, functions?: FunctionTable): ASTNode;
3
6
  /** An expression read once, ready to work out a value from a record's values many times. */
4
7
  export interface CompiledExpression {
5
8
  readonly source: string;
@@ -24,5 +27,6 @@ export interface CompiledExpression {
24
27
  * Read an expression for a value, such as `price * qty` or
25
28
  * `if(total > 1000, 10, 0)`. It is parsed now, so a mistake surfaces when the
26
29
  * page is read and not on the first keystroke: throws when it cannot be read.
30
+ * `functions`, the app's own, which it may call besides Fieldia's.
27
31
  */
28
- export declare function compileExpression(source: string): CompiledExpression;
32
+ export declare function compileExpression(source: string, functions?: FunctionTable): CompiledExpression;
@@ -1,5 +1,8 @@
1
- import type { ExpressionEnv } from './functions';
2
- export type { ExpressionEnv } from './functions';
1
+ import type { ExpressionEnv, FunctionTable } from './functions';
2
+ import { type ASTNode } from './parser';
3
+ export type { ExpressionEnv, FunctionTable } from './functions';
4
+ /** An expression read into its parts, as the page's checks read it: throws when it cannot be read. */
5
+ export declare function parseExpression(source: string, functions?: FunctionTable): ASTNode;
3
6
  /** An expression read once, ready to work out a value from a record's values many times. */
4
7
  export interface CompiledExpression {
5
8
  readonly source: string;
@@ -24,5 +27,6 @@ export interface CompiledExpression {
24
27
  * Read an expression for a value, such as `price * qty` or
25
28
  * `if(total > 1000, 10, 0)`. It is parsed now, so a mistake surfaces when the
26
29
  * page is read and not on the first keystroke: throws when it cannot be read.
30
+ * `functions`, the app's own, which it may call besides Fieldia's.
27
31
  */
28
- export declare function compileExpression(source: string): CompiledExpression;
32
+ export declare function compileExpression(source: string, functions?: FunctionTable): CompiledExpression;
@@ -1,17 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseExpression = parseExpression;
3
4
  exports.compileExpression = compileExpression;
4
5
  const evaluator_1 = require("./evaluator");
5
6
  const parser_1 = require("./parser");
6
7
  const reads_1 = require("./reads");
7
8
  const tokenizer_1 = require("./tokenizer");
9
+ /** An expression read into its parts, as the page's checks read it: throws when it cannot be read. */
10
+ function parseExpression(source, functions) {
11
+ return new parser_1.ExpressionParser((0, tokenizer_1.tokenize)(source), functions).parse();
12
+ }
8
13
  /**
9
14
  * Read an expression for a value, such as `price * qty` or
10
15
  * `if(total > 1000, 10, 0)`. It is parsed now, so a mistake surfaces when the
11
16
  * page is read and not on the first keystroke: throws when it cannot be read.
17
+ * `functions`, the app's own, which it may call besides Fieldia's.
12
18
  */
13
- function compileExpression(source) {
14
- const ast = new parser_1.ExpressionParser((0, tokenizer_1.tokenize)(source)).parse();
19
+ function compileExpression(source, functions) {
20
+ const ast = new parser_1.ExpressionParser((0, tokenizer_1.tokenize)(source), functions).parse();
15
21
  return {
16
22
  source,
17
23
  fields: (0, reads_1.fieldsRead)(ast),
@@ -1 +1 @@
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
+ {"version":3,"file":"expression.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/expression/expression.ts"],"names":[],"mappings":";;AASA,0CAEC;AAuBD,8CAgBC;AAlDD,2CAAuC;AAEvC,qCAA0D;AAC1D,mCAAsE;AACtE,2CAAuC;AAIvC,sGAAsG;AACtG,SAAgB,eAAe,CAAC,MAAc,EAAE,SAAyB;IACvE,OAAO,IAAI,yBAAgB,CAAC,IAAA,oBAAQ,EAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;AACnE,CAAC;AAiBD;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,MAAc,EAAE,SAAyB;IACzE,MAAM,GAAG,GAAG,IAAI,yBAAgB,CAAC,IAAA,oBAAQ,EAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;IACtE,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"}
@@ -2,13 +2,18 @@ import { evaluate } from './evaluator.mjs';
2
2
  import { ExpressionParser } from './parser.mjs';
3
3
  import { fieldsRead, pathsRead, sumsRead, wheresRead } from './reads.mjs';
4
4
  import { tokenize } from './tokenizer.mjs';
5
+ /** An expression read into its parts, as the page's checks read it: throws when it cannot be read. */
6
+ export function parseExpression(source, functions) {
7
+ return new ExpressionParser(tokenize(source), functions).parse();
8
+ }
5
9
  /**
6
10
  * Read an expression for a value, such as `price * qty` or
7
11
  * `if(total > 1000, 10, 0)`. It is parsed now, so a mistake surfaces when the
8
12
  * page is read and not on the first keystroke: throws when it cannot be read.
13
+ * `functions`, the app's own, which it may call besides Fieldia's.
9
14
  */
10
- export function compileExpression(source) {
11
- const ast = new ExpressionParser(tokenize(source)).parse();
15
+ export function compileExpression(source, functions) {
16
+ const ast = new ExpressionParser(tokenize(source), functions).parse();
12
17
  return {
13
18
  source,
14
19
  fields: fieldsRead(ast),
@@ -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,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"}
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,EAAgB,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIvC,sGAAsG;AACtG,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,SAAyB;IACvE,OAAO,IAAI,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;AACnE,CAAC;AAiBD;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,SAAyB;IACzE,MAAM,GAAG,GAAG,IAAI,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;IACtE,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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * The functions part (functions.ts): the bodies of Fieldia's functions beyond the plain ones — age, years, months,
3
+ * addDays, addMonths, addYears, contains, startsWith, endsWith, upper, lower, join, average, roundMoney, empty, firstOf
4
+ * — with the days they count (dates.ts), and the calls of the app's own (`appCall`). Loaded before a page that calls one
5
+ * is drawn, or by a viewer given the app's; a value worked out from one before it came waits for it.
6
+ */
7
+ export { appCall, functionBody } from './more-functions.mjs';
@@ -0,0 +1,7 @@
1
+ /**
2
+ * The functions part (functions.ts): the bodies of Fieldia's functions beyond the plain ones — age, years, months,
3
+ * addDays, addMonths, addYears, contains, startsWith, endsWith, upper, lower, join, average, roundMoney, empty, firstOf
4
+ * — with the days they count (dates.ts), and the calls of the app's own (`appCall`). Loaded before a page that calls one
5
+ * is drawn, or by a viewer given the app's; a value worked out from one before it came waits for it.
6
+ */
7
+ export { appCall, functionBody } from './more-functions';
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.functionBody = exports.appCall = void 0;
4
+ /**
5
+ * The functions part (functions.ts): the bodies of Fieldia's functions beyond the plain ones — age, years, months,
6
+ * addDays, addMonths, addYears, contains, startsWith, endsWith, upper, lower, join, average, roundMoney, empty, firstOf
7
+ * — with the days they count (dates.ts), and the calls of the app's own (`appCall`). Loaded before a page that calls one
8
+ * is drawn, or by a viewer given the app's; a value worked out from one before it came waits for it.
9
+ */
10
+ var more_functions_1 = require("./more-functions");
11
+ Object.defineProperty(exports, "appCall", { enumerable: true, get: function () { return more_functions_1.appCall; } });
12
+ Object.defineProperty(exports, "functionBody", { enumerable: true, get: function () { return more_functions_1.functionBody; } });
13
+ //# sourceMappingURL=functions-part.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions-part.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/expression/functions-part.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,mDAAyD;AAAhD,yGAAA,OAAO,OAAA;AAAE,8GAAA,YAAY,OAAA"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The functions part (functions.ts): the bodies of Fieldia's functions beyond the plain ones — age, years, months,
3
+ * addDays, addMonths, addYears, contains, startsWith, endsWith, upper, lower, join, average, roundMoney, empty, firstOf
4
+ * — with the days they count (dates.ts), and the calls of the app's own (`appCall`). Loaded before a page that calls one
5
+ * is drawn, or by a viewer given the app's; a value worked out from one before it came waits for it.
6
+ */
7
+ export { appCall, functionBody } from './more-functions.mjs';
8
+ //# sourceMappingURL=functions-part.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions-part.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/expression/functions-part.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC"}