@fieldia/core 0.30.1 → 0.31.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 (551) hide show
  1. package/README.md +362 -1
  2. package/package.json +1 -1
  3. package/schema/page.schema.json +758 -1
  4. package/src/index.d.mts +13 -2
  5. package/src/index.d.ts +13 -2
  6. package/src/index.js +45 -2
  7. package/src/index.js.map +1 -1
  8. package/src/index.mjs +18 -2
  9. package/src/index.mjs.map +1 -1
  10. package/src/lib/format/actions.d.mts +16 -16
  11. package/src/lib/format/actions.d.ts +16 -16
  12. package/src/lib/format/actions.js +3 -0
  13. package/src/lib/format/actions.js.map +1 -1
  14. package/src/lib/format/actions.mjs +3 -0
  15. package/src/lib/format/actions.mjs.map +1 -1
  16. package/src/lib/format/address-search.js +3 -0
  17. package/src/lib/format/address-search.js.map +1 -1
  18. package/src/lib/format/address-search.mjs +3 -0
  19. package/src/lib/format/address-search.mjs.map +1 -1
  20. package/src/lib/format/duplicates.js +3 -0
  21. package/src/lib/format/duplicates.js.map +1 -1
  22. package/src/lib/format/duplicates.mjs +3 -0
  23. package/src/lib/format/duplicates.mjs.map +1 -1
  24. package/src/lib/format/endings.js +3 -0
  25. package/src/lib/format/endings.js.map +1 -1
  26. package/src/lib/format/endings.mjs +3 -0
  27. package/src/lib/format/endings.mjs.map +1 -1
  28. package/src/lib/format/field.d.mts +669 -0
  29. package/src/lib/format/field.d.ts +669 -0
  30. package/src/lib/format/field.js +42 -4
  31. package/src/lib/format/field.js.map +1 -1
  32. package/src/lib/format/field.mjs +42 -4
  33. package/src/lib/format/field.mjs.map +1 -1
  34. package/src/lib/format/flow-checks.d.mts +14 -0
  35. package/src/lib/format/flow-checks.d.ts +14 -0
  36. package/src/lib/format/flow-checks.js +61 -0
  37. package/src/lib/format/flow-checks.js.map +1 -0
  38. package/src/lib/format/flow-checks.mjs +58 -0
  39. package/src/lib/format/flow-checks.mjs.map +1 -0
  40. package/src/lib/format/flow.d.mts +43 -0
  41. package/src/lib/format/flow.d.ts +43 -0
  42. package/src/lib/format/flow.js +22 -0
  43. package/src/lib/format/flow.js.map +1 -0
  44. package/src/lib/format/flow.mjs +19 -0
  45. package/src/lib/format/flow.mjs.map +1 -0
  46. package/src/lib/format/from-schema.d.mts +70 -0
  47. package/src/lib/format/from-schema.d.ts +70 -0
  48. package/src/lib/format/from-schema.js +599 -0
  49. package/src/lib/format/from-schema.js.map +1 -0
  50. package/src/lib/format/from-schema.mjs +591 -0
  51. package/src/lib/format/from-schema.mjs.map +1 -0
  52. package/src/lib/format/jitless.d.mts +1 -0
  53. package/src/lib/format/jitless.d.ts +1 -0
  54. package/src/lib/format/jitless.js +27 -0
  55. package/src/lib/format/jitless.js.map +1 -0
  56. package/src/lib/format/jitless.mjs +24 -0
  57. package/src/lib/format/jitless.mjs.map +1 -0
  58. package/src/lib/format/json-schema.js +3 -0
  59. package/src/lib/format/json-schema.js.map +1 -1
  60. package/src/lib/format/json-schema.mjs +3 -0
  61. package/src/lib/format/json-schema.mjs.map +1 -1
  62. package/src/lib/format/json.js +3 -0
  63. package/src/lib/format/json.js.map +1 -1
  64. package/src/lib/format/json.mjs +3 -0
  65. package/src/lib/format/json.mjs.map +1 -1
  66. package/src/lib/format/languages-checks.d.mts +2 -1
  67. package/src/lib/format/languages-checks.d.ts +2 -1
  68. package/src/lib/format/languages-checks.js +8 -2
  69. package/src/lib/format/languages-checks.js.map +1 -1
  70. package/src/lib/format/languages-checks.mjs +8 -2
  71. package/src/lib/format/languages-checks.mjs.map +1 -1
  72. package/src/lib/format/later-checks.d.mts +3 -1
  73. package/src/lib/format/later-checks.d.ts +3 -1
  74. package/src/lib/format/later-checks.js +3 -1
  75. package/src/lib/format/later-checks.js.map +1 -1
  76. package/src/lib/format/later-checks.mjs +3 -1
  77. package/src/lib/format/later-checks.mjs.map +1 -1
  78. package/src/lib/format/layout.d.mts +13192 -7550
  79. package/src/lib/format/layout.d.ts +13192 -7550
  80. package/src/lib/format/layout.js +61 -3
  81. package/src/lib/format/layout.js.map +1 -1
  82. package/src/lib/format/layout.mjs +59 -1
  83. package/src/lib/format/layout.mjs.map +1 -1
  84. package/src/lib/format/layout.types.d.mts +3 -1
  85. package/src/lib/format/layout.types.d.ts +3 -1
  86. package/src/lib/format/limits.js +3 -0
  87. package/src/lib/format/limits.js.map +1 -1
  88. package/src/lib/format/limits.mjs +3 -0
  89. package/src/lib/format/limits.mjs.map +1 -1
  90. package/src/lib/format/list-checks.d.mts +1 -1
  91. package/src/lib/format/list-checks.d.ts +1 -1
  92. package/src/lib/format/list-checks.js +67 -22
  93. package/src/lib/format/list-checks.js.map +1 -1
  94. package/src/lib/format/list-checks.mjs +67 -22
  95. package/src/lib/format/list-checks.mjs.map +1 -1
  96. package/src/lib/format/list-rows-checks.d.mts +11 -0
  97. package/src/lib/format/list-rows-checks.d.ts +11 -0
  98. package/src/lib/format/list-rows-checks.js +62 -0
  99. package/src/lib/format/list-rows-checks.js.map +1 -0
  100. package/src/lib/format/list-rows-checks.mjs +59 -0
  101. package/src/lib/format/list-rows-checks.mjs.map +1 -0
  102. package/src/lib/format/media-options.d.mts +84 -0
  103. package/src/lib/format/media-options.d.ts +84 -0
  104. package/src/lib/format/media-options.js +86 -0
  105. package/src/lib/format/media-options.js.map +1 -0
  106. package/src/lib/format/media-options.mjs +80 -0
  107. package/src/lib/format/media-options.mjs.map +1 -0
  108. package/src/lib/format/outbox-checks.d.mts +11 -0
  109. package/src/lib/format/outbox-checks.d.ts +11 -0
  110. package/src/lib/format/outbox-checks.js +12 -0
  111. package/src/lib/format/outbox-checks.js.map +1 -0
  112. package/src/lib/format/outbox-checks.mjs +9 -0
  113. package/src/lib/format/outbox-checks.mjs.map +1 -0
  114. package/src/lib/format/page.d.mts +3057 -966
  115. package/src/lib/format/page.d.ts +3057 -966
  116. package/src/lib/format/page.js +15 -0
  117. package/src/lib/format/page.js.map +1 -1
  118. package/src/lib/format/page.mjs +15 -0
  119. package/src/lib/format/page.mjs.map +1 -1
  120. package/src/lib/format/part-checks.d.mts +3 -0
  121. package/src/lib/format/part-checks.d.ts +3 -0
  122. package/src/lib/format/payment-checks.d.mts +13 -0
  123. package/src/lib/format/payment-checks.d.ts +13 -0
  124. package/src/lib/format/payment-checks.js +30 -0
  125. package/src/lib/format/payment-checks.js.map +1 -0
  126. package/src/lib/format/payment-checks.mjs +27 -0
  127. package/src/lib/format/payment-checks.mjs.map +1 -0
  128. package/src/lib/format/payment.d.mts +37 -0
  129. package/src/lib/format/payment.d.ts +37 -0
  130. package/src/lib/format/payment.js +15 -0
  131. package/src/lib/format/payment.js.map +1 -0
  132. package/src/lib/format/payment.mjs +12 -0
  133. package/src/lib/format/payment.mjs.map +1 -0
  134. package/src/lib/format/phone.js +3 -0
  135. package/src/lib/format/phone.js.map +1 -1
  136. package/src/lib/format/phone.mjs +3 -0
  137. package/src/lib/format/phone.mjs.map +1 -1
  138. package/src/lib/format/picker-options.d.mts +12 -0
  139. package/src/lib/format/picker-options.d.ts +12 -0
  140. package/src/lib/format/picker-options.js +21 -3
  141. package/src/lib/format/picker-options.js.map +1 -1
  142. package/src/lib/format/picker-options.mjs +20 -2
  143. package/src/lib/format/picker-options.mjs.map +1 -1
  144. package/src/lib/format/prefill-checks.d.mts +13 -0
  145. package/src/lib/format/prefill-checks.d.ts +13 -0
  146. package/src/lib/format/prefill-checks.js +35 -0
  147. package/src/lib/format/prefill-checks.js.map +1 -0
  148. package/src/lib/format/prefill-checks.mjs +32 -0
  149. package/src/lib/format/prefill-checks.mjs.map +1 -0
  150. package/src/lib/format/prefill.d.mts +33 -0
  151. package/src/lib/format/prefill.d.ts +33 -0
  152. package/src/lib/format/prefill.js +20 -0
  153. package/src/lib/format/prefill.js.map +1 -0
  154. package/src/lib/format/prefill.mjs +17 -0
  155. package/src/lib/format/prefill.mjs.map +1 -0
  156. package/src/lib/format/quiz.d.mts +58 -0
  157. package/src/lib/format/quiz.d.ts +58 -0
  158. package/src/lib/format/quiz.js +24 -0
  159. package/src/lib/format/quiz.js.map +1 -0
  160. package/src/lib/format/quiz.mjs +21 -0
  161. package/src/lib/format/quiz.mjs.map +1 -0
  162. package/src/lib/format/records.js +3 -0
  163. package/src/lib/format/records.js.map +1 -1
  164. package/src/lib/format/records.mjs +3 -0
  165. package/src/lib/format/records.mjs.map +1 -1
  166. package/src/lib/format/references.d.mts +1 -1
  167. package/src/lib/format/references.d.ts +1 -1
  168. package/src/lib/format/references.js +56 -7
  169. package/src/lib/format/references.js.map +1 -1
  170. package/src/lib/format/references.mjs +57 -8
  171. package/src/lib/format/references.mjs.map +1 -1
  172. package/src/lib/format/schedule-checks.d.mts +8 -0
  173. package/src/lib/format/schedule-checks.d.ts +8 -0
  174. package/src/lib/format/schedule-checks.js +16 -0
  175. package/src/lib/format/schedule-checks.js.map +1 -0
  176. package/src/lib/format/schedule-checks.mjs +13 -0
  177. package/src/lib/format/schedule-checks.mjs.map +1 -0
  178. package/src/lib/format/signature-checks.d.mts +8 -0
  179. package/src/lib/format/signature-checks.d.ts +8 -0
  180. package/src/lib/format/signature-checks.js +21 -0
  181. package/src/lib/format/signature-checks.js.map +1 -1
  182. package/src/lib/format/signature-checks.mjs +20 -0
  183. package/src/lib/format/signature-checks.mjs.map +1 -1
  184. package/src/lib/format/signature-options.js +3 -0
  185. package/src/lib/format/signature-options.js.map +1 -1
  186. package/src/lib/format/signature-options.mjs +3 -0
  187. package/src/lib/format/signature-options.mjs.map +1 -1
  188. package/src/lib/format/slots-options.js +3 -0
  189. package/src/lib/format/slots-options.js.map +1 -1
  190. package/src/lib/format/slots-options.mjs +3 -0
  191. package/src/lib/format/slots-options.mjs.map +1 -1
  192. package/src/lib/format/templates-checks.d.mts +6 -0
  193. package/src/lib/format/templates-checks.d.ts +6 -0
  194. package/src/lib/format/templates-checks.js +16 -0
  195. package/src/lib/format/templates-checks.js.map +1 -0
  196. package/src/lib/format/templates-checks.mjs +13 -0
  197. package/src/lib/format/templates-checks.mjs.map +1 -0
  198. package/src/lib/format/translate.d.mts +2 -0
  199. package/src/lib/format/translate.d.ts +2 -0
  200. package/src/lib/format/translate.js +6 -2
  201. package/src/lib/format/translate.js.map +1 -1
  202. package/src/lib/format/translate.mjs +4 -2
  203. package/src/lib/format/translate.mjs.map +1 -1
  204. package/src/lib/format/typed-options.d.mts +43 -0
  205. package/src/lib/format/typed-options.d.ts +43 -0
  206. package/src/lib/format/typed-options.js +50 -0
  207. package/src/lib/format/typed-options.js.map +1 -0
  208. package/src/lib/format/typed-options.mjs +46 -0
  209. package/src/lib/format/typed-options.mjs.map +1 -0
  210. package/src/lib/format/upgrade.d.mts +5 -1
  211. package/src/lib/format/upgrade.d.ts +5 -1
  212. package/src/lib/format/upgrade.js +5 -1
  213. package/src/lib/format/upgrade.js.map +1 -1
  214. package/src/lib/format/upgrade.mjs +5 -1
  215. package/src/lib/format/upgrade.mjs.map +1 -1
  216. package/src/lib/format/validate.js +3 -0
  217. package/src/lib/format/validate.js.map +1 -1
  218. package/src/lib/format/validate.mjs +3 -0
  219. package/src/lib/format/validate.mjs.map +1 -1
  220. package/src/lib/format/verify-checks.d.mts +10 -0
  221. package/src/lib/format/verify-checks.d.ts +10 -0
  222. package/src/lib/format/verify-checks.js +44 -0
  223. package/src/lib/format/verify-checks.js.map +1 -0
  224. package/src/lib/format/verify-checks.mjs +41 -0
  225. package/src/lib/format/verify-checks.mjs.map +1 -0
  226. package/src/lib/format/version.d.mts +2 -2
  227. package/src/lib/format/version.d.ts +2 -2
  228. package/src/lib/format/version.js +2 -2
  229. package/src/lib/format/version.js.map +1 -1
  230. package/src/lib/format/version.mjs +2 -2
  231. package/src/lib/format/version.mjs.map +1 -1
  232. package/src/lib/format/week.d.mts +18 -0
  233. package/src/lib/format/week.d.ts +18 -0
  234. package/src/lib/format/week.js +58 -0
  235. package/src/lib/format/week.js.map +1 -0
  236. package/src/lib/format/week.mjs +55 -0
  237. package/src/lib/format/week.mjs.map +1 -0
  238. package/src/lib/record/approvals-part.d.mts +1 -1
  239. package/src/lib/record/approvals-part.d.ts +1 -1
  240. package/src/lib/record/approvals-part.js +2 -2
  241. package/src/lib/record/approvals-part.js.map +1 -1
  242. package/src/lib/record/approvals-part.mjs +1 -1
  243. package/src/lib/record/approvals-part.mjs.map +1 -1
  244. package/src/lib/record/data-source.d.mts +331 -0
  245. package/src/lib/record/data-source.d.ts +331 -0
  246. package/src/lib/record/data-source.js.map +1 -1
  247. package/src/lib/record/data-source.mjs.map +1 -1
  248. package/src/lib/record/day-words.d.mts +22 -1
  249. package/src/lib/record/day-words.d.ts +22 -1
  250. package/src/lib/record/day-words.js +29 -2
  251. package/src/lib/record/day-words.js.map +1 -1
  252. package/src/lib/record/day-words.mjs +24 -2
  253. package/src/lib/record/day-words.mjs.map +1 -1
  254. package/src/lib/record/files-part.d.mts +1 -0
  255. package/src/lib/record/files-part.d.ts +1 -0
  256. package/src/lib/record/files-part.js +7 -1
  257. package/src/lib/record/files-part.js.map +1 -1
  258. package/src/lib/record/files-part.mjs +5 -1
  259. package/src/lib/record/files-part.mjs.map +1 -1
  260. package/src/lib/record/form-approvals.d.mts +12 -17
  261. package/src/lib/record/form-approvals.d.ts +12 -17
  262. package/src/lib/record/form-approvals.js +14 -8
  263. package/src/lib/record/form-approvals.js.map +1 -1
  264. package/src/lib/record/form-approvals.mjs +13 -7
  265. package/src/lib/record/form-approvals.mjs.map +1 -1
  266. package/src/lib/record/form-limits.d.mts +4 -28
  267. package/src/lib/record/form-limits.d.ts +4 -28
  268. package/src/lib/record/form-limits.js +8 -5
  269. package/src/lib/record/form-limits.js.map +1 -1
  270. package/src/lib/record/form-limits.mjs +8 -5
  271. package/src/lib/record/form-limits.mjs.map +1 -1
  272. package/src/lib/record/form.d.mts +115 -3
  273. package/src/lib/record/form.d.ts +115 -3
  274. package/src/lib/record/form.js +262 -65
  275. package/src/lib/record/form.js.map +1 -1
  276. package/src/lib/record/form.mjs +263 -66
  277. package/src/lib/record/form.mjs.map +1 -1
  278. package/src/lib/record/history-steps.d.mts +38 -0
  279. package/src/lib/record/history-steps.d.ts +38 -0
  280. package/src/lib/record/history-steps.js +63 -0
  281. package/src/lib/record/history-steps.js.map +1 -0
  282. package/src/lib/record/history-steps.mjs +58 -0
  283. package/src/lib/record/history-steps.mjs.map +1 -0
  284. package/src/lib/record/history.d.mts +16 -0
  285. package/src/lib/record/history.d.ts +16 -0
  286. package/src/lib/record/history.js +3 -0
  287. package/src/lib/record/history.js.map +1 -0
  288. package/src/lib/record/history.mjs +2 -0
  289. package/src/lib/record/history.mjs.map +1 -0
  290. package/src/lib/record/input-rules.d.mts +2 -0
  291. package/src/lib/record/input-rules.d.ts +2 -0
  292. package/src/lib/record/input-rules.js +4 -1
  293. package/src/lib/record/input-rules.js.map +1 -1
  294. package/src/lib/record/input-rules.mjs +2 -0
  295. package/src/lib/record/input-rules.mjs.map +1 -1
  296. package/src/lib/record/joins.d.mts +143 -0
  297. package/src/lib/record/joins.d.ts +143 -0
  298. package/src/lib/record/joins.js +28 -0
  299. package/src/lib/record/joins.js.map +1 -0
  300. package/src/lib/record/joins.mjs +24 -0
  301. package/src/lib/record/joins.mjs.map +1 -0
  302. package/src/lib/record/limits.js +7 -4
  303. package/src/lib/record/limits.js.map +1 -1
  304. package/src/lib/record/limits.mjs +8 -5
  305. package/src/lib/record/limits.mjs.map +1 -1
  306. package/src/lib/record/link-values.d.mts +31 -0
  307. package/src/lib/record/link-values.d.ts +31 -0
  308. package/src/lib/record/link-values.js +132 -0
  309. package/src/lib/record/link-values.js.map +1 -0
  310. package/src/lib/record/link-values.mjs +125 -0
  311. package/src/lib/record/link-values.mjs.map +1 -0
  312. package/src/lib/record/live-later.d.mts +15 -0
  313. package/src/lib/record/live-later.d.ts +15 -0
  314. package/src/lib/record/live-later.js +10 -0
  315. package/src/lib/record/live-later.js.map +1 -0
  316. package/src/lib/record/live-later.mjs +7 -0
  317. package/src/lib/record/live-later.mjs.map +1 -0
  318. package/src/lib/record/live-part.d.mts +6 -0
  319. package/src/lib/record/live-part.d.ts +6 -0
  320. package/src/lib/record/live-part.js +12 -0
  321. package/src/lib/record/live-part.js.map +1 -0
  322. package/src/lib/record/live-part.mjs +7 -0
  323. package/src/lib/record/live-part.mjs.map +1 -0
  324. package/src/lib/record/live.d.mts +8 -0
  325. package/src/lib/record/live.d.ts +8 -0
  326. package/src/lib/record/live.js +133 -0
  327. package/src/lib/record/live.js.map +1 -0
  328. package/src/lib/record/live.mjs +129 -0
  329. package/src/lib/record/live.mjs.map +1 -0
  330. package/src/lib/record/locales/all.d.mts +5 -5
  331. package/src/lib/record/locales/all.d.ts +5 -5
  332. package/src/lib/record/locales/all.js +3 -3
  333. package/src/lib/record/locales/all.js.map +1 -1
  334. package/src/lib/record/locales/all.mjs +3 -3
  335. package/src/lib/record/locales/all.mjs.map +1 -1
  336. package/src/lib/record/locales/ar.js +8 -0
  337. package/src/lib/record/locales/ar.js.map +1 -1
  338. package/src/lib/record/locales/ar.mjs +8 -0
  339. package/src/lib/record/locales/ar.mjs.map +1 -1
  340. package/src/lib/record/locales/de.js +8 -0
  341. package/src/lib/record/locales/de.js.map +1 -1
  342. package/src/lib/record/locales/de.mjs +8 -0
  343. package/src/lib/record/locales/de.mjs.map +1 -1
  344. package/src/lib/record/locales/es.d.mts +8 -0
  345. package/src/lib/record/locales/es.d.ts +8 -0
  346. package/src/lib/record/locales/es.js +111 -0
  347. package/src/lib/record/locales/es.js.map +1 -0
  348. package/src/lib/record/locales/es.mjs +108 -0
  349. package/src/lib/record/locales/es.mjs.map +1 -0
  350. package/src/lib/record/locales/fa.d.mts +5 -0
  351. package/src/lib/record/locales/fa.d.ts +5 -0
  352. package/src/lib/record/locales/fa.js +117 -0
  353. package/src/lib/record/locales/fa.js.map +1 -0
  354. package/src/lib/record/locales/fa.mjs +114 -0
  355. package/src/lib/record/locales/fa.mjs.map +1 -0
  356. package/src/lib/record/locales/fr.js +8 -0
  357. package/src/lib/record/locales/fr.js.map +1 -1
  358. package/src/lib/record/locales/fr.mjs +8 -0
  359. package/src/lib/record/locales/fr.mjs.map +1 -1
  360. package/src/lib/record/locales/later.d.mts +8 -0
  361. package/src/lib/record/locales/later.d.ts +8 -0
  362. package/src/lib/record/locales/later.js +16 -0
  363. package/src/lib/record/locales/later.js.map +1 -0
  364. package/src/lib/record/locales/later.mjs +13 -0
  365. package/src/lib/record/locales/later.mjs.map +1 -0
  366. package/src/lib/record/locales/tr.d.mts +6 -0
  367. package/src/lib/record/locales/tr.d.ts +6 -0
  368. package/src/lib/record/locales/tr.js +118 -0
  369. package/src/lib/record/locales/tr.js.map +1 -0
  370. package/src/lib/record/locales/tr.mjs +115 -0
  371. package/src/lib/record/locales/tr.mjs.map +1 -0
  372. package/src/lib/record/locales/ur.d.mts +9 -0
  373. package/src/lib/record/locales/ur.d.ts +9 -0
  374. package/src/lib/record/locales/ur.js +118 -0
  375. package/src/lib/record/locales/ur.js.map +1 -0
  376. package/src/lib/record/locales/ur.mjs +115 -0
  377. package/src/lib/record/locales/ur.mjs.map +1 -0
  378. package/src/lib/record/memory-codes.d.mts +37 -0
  379. package/src/lib/record/memory-codes.d.ts +37 -0
  380. package/src/lib/record/memory-codes.js +50 -0
  381. package/src/lib/record/memory-codes.js.map +1 -0
  382. package/src/lib/record/memory-codes.mjs +47 -0
  383. package/src/lib/record/memory-codes.mjs.map +1 -0
  384. package/src/lib/record/memory-data-source.d.mts +56 -2
  385. package/src/lib/record/memory-data-source.d.ts +56 -2
  386. package/src/lib/record/memory-data-source.js +67 -1
  387. package/src/lib/record/memory-data-source.js.map +1 -1
  388. package/src/lib/record/memory-data-source.mjs +67 -1
  389. package/src/lib/record/memory-data-source.mjs.map +1 -1
  390. package/src/lib/record/memory-kept.d.mts +3 -1
  391. package/src/lib/record/memory-kept.d.ts +3 -1
  392. package/src/lib/record/memory-kept.js +7 -2
  393. package/src/lib/record/memory-kept.js.map +1 -1
  394. package/src/lib/record/memory-kept.mjs +7 -2
  395. package/src/lib/record/memory-kept.mjs.map +1 -1
  396. package/src/lib/record/memory-later.d.mts +3 -1
  397. package/src/lib/record/memory-later.d.ts +3 -1
  398. package/src/lib/record/memory-later.js +9 -5
  399. package/src/lib/record/memory-later.js.map +1 -1
  400. package/src/lib/record/memory-later.mjs +8 -4
  401. package/src/lib/record/memory-later.mjs.map +1 -1
  402. package/src/lib/record/memory-live.d.mts +8 -0
  403. package/src/lib/record/memory-live.d.ts +8 -0
  404. package/src/lib/record/memory-live.js +70 -0
  405. package/src/lib/record/memory-live.js.map +1 -0
  406. package/src/lib/record/memory-live.mjs +67 -0
  407. package/src/lib/record/memory-live.mjs.map +1 -0
  408. package/src/lib/record/memory-views.d.mts +11 -0
  409. package/src/lib/record/memory-views.d.ts +11 -0
  410. package/src/lib/record/memory-views.js +60 -0
  411. package/src/lib/record/memory-views.js.map +1 -0
  412. package/src/lib/record/memory-views.mjs +57 -0
  413. package/src/lib/record/memory-views.mjs.map +1 -0
  414. package/src/lib/record/messages.d.mts +21 -3
  415. package/src/lib/record/messages.d.ts +21 -3
  416. package/src/lib/record/messages.js +15 -2
  417. package/src/lib/record/messages.js.map +1 -1
  418. package/src/lib/record/messages.mjs +15 -2
  419. package/src/lib/record/messages.mjs.map +1 -1
  420. package/src/lib/record/order.d.mts +21 -0
  421. package/src/lib/record/order.d.ts +21 -0
  422. package/src/lib/record/order.js +129 -0
  423. package/src/lib/record/order.js.map +1 -0
  424. package/src/lib/record/order.mjs +122 -0
  425. package/src/lib/record/order.mjs.map +1 -0
  426. package/src/lib/record/outbox-form.d.mts +79 -0
  427. package/src/lib/record/outbox-form.d.ts +79 -0
  428. package/src/lib/record/outbox-form.js +291 -0
  429. package/src/lib/record/outbox-form.js.map +1 -0
  430. package/src/lib/record/outbox-form.mjs +286 -0
  431. package/src/lib/record/outbox-form.mjs.map +1 -0
  432. package/src/lib/record/outbox-part.d.mts +6 -0
  433. package/src/lib/record/outbox-part.d.ts +6 -0
  434. package/src/lib/record/outbox-part.js +13 -0
  435. package/src/lib/record/outbox-part.js.map +1 -0
  436. package/src/lib/record/outbox-part.mjs +7 -0
  437. package/src/lib/record/outbox-part.mjs.map +1 -0
  438. package/src/lib/record/pay-part.d.mts +6 -0
  439. package/src/lib/record/pay-part.d.ts +6 -0
  440. package/src/lib/record/pay-part.js +11 -0
  441. package/src/lib/record/pay-part.js.map +1 -0
  442. package/src/lib/record/pay-part.mjs +7 -0
  443. package/src/lib/record/pay-part.mjs.map +1 -0
  444. package/src/lib/record/payment-form.d.mts +25 -0
  445. package/src/lib/record/payment-form.d.ts +25 -0
  446. package/src/lib/record/payment-form.js +98 -0
  447. package/src/lib/record/payment-form.js.map +1 -0
  448. package/src/lib/record/payment-form.mjs +95 -0
  449. package/src/lib/record/payment-form.mjs.map +1 -0
  450. package/src/lib/record/prefill-part.d.mts +7 -0
  451. package/src/lib/record/prefill-part.d.ts +7 -0
  452. package/src/lib/record/prefill-part.js +15 -0
  453. package/src/lib/record/prefill-part.js.map +1 -0
  454. package/src/lib/record/prefill-part.mjs +8 -0
  455. package/src/lib/record/prefill-part.mjs.map +1 -0
  456. package/src/lib/record/press-undo.d.mts +42 -0
  457. package/src/lib/record/press-undo.d.ts +42 -0
  458. package/src/lib/record/press-undo.js +115 -0
  459. package/src/lib/record/press-undo.js.map +1 -0
  460. package/src/lib/record/press-undo.mjs +110 -0
  461. package/src/lib/record/press-undo.mjs.map +1 -0
  462. package/src/lib/record/quiz.d.mts +36 -0
  463. package/src/lib/record/quiz.d.ts +36 -0
  464. package/src/lib/record/quiz.js +90 -0
  465. package/src/lib/record/quiz.js.map +1 -0
  466. package/src/lib/record/quiz.mjs +87 -0
  467. package/src/lib/record/quiz.mjs.map +1 -0
  468. package/src/lib/record/record-words.js +1 -1
  469. package/src/lib/record/record-words.js.map +1 -1
  470. package/src/lib/record/record-words.mjs +1 -1
  471. package/src/lib/record/record-words.mjs.map +1 -1
  472. package/src/lib/record/run.d.mts +54 -2
  473. package/src/lib/record/run.d.ts +54 -2
  474. package/src/lib/record/run.js +30 -6
  475. package/src/lib/record/run.js.map +1 -1
  476. package/src/lib/record/run.mjs +28 -5
  477. package/src/lib/record/run.mjs.map +1 -1
  478. package/src/lib/record/survey-kit.d.mts +37 -0
  479. package/src/lib/record/survey-kit.d.ts +37 -0
  480. package/src/lib/record/survey-kit.js +99 -0
  481. package/src/lib/record/survey-kit.js.map +1 -0
  482. package/src/lib/record/survey-kit.mjs +96 -0
  483. package/src/lib/record/survey-kit.mjs.map +1 -0
  484. package/src/lib/record/survey.d.mts +16 -0
  485. package/src/lib/record/survey.d.ts +16 -0
  486. package/src/lib/record/survey.js +17 -0
  487. package/src/lib/record/survey.js.map +1 -0
  488. package/src/lib/record/survey.mjs +13 -0
  489. package/src/lib/record/survey.mjs.map +1 -0
  490. package/src/lib/record/surveyflow-part.d.mts +9 -0
  491. package/src/lib/record/surveyflow-part.d.ts +9 -0
  492. package/src/lib/record/surveyflow-part.js +20 -0
  493. package/src/lib/record/surveyflow-part.js.map +1 -0
  494. package/src/lib/record/surveyflow-part.mjs +10 -0
  495. package/src/lib/record/surveyflow-part.mjs.map +1 -0
  496. package/src/lib/record/timing.d.mts +76 -0
  497. package/src/lib/record/timing.d.ts +76 -0
  498. package/src/lib/record/timing.js +112 -0
  499. package/src/lib/record/timing.js.map +1 -0
  500. package/src/lib/record/timing.mjs +104 -0
  501. package/src/lib/record/timing.mjs.map +1 -0
  502. package/src/lib/record/undo-later.d.mts +9 -0
  503. package/src/lib/record/undo-later.d.ts +9 -0
  504. package/src/lib/record/undo-later.js +10 -0
  505. package/src/lib/record/undo-later.js.map +1 -0
  506. package/src/lib/record/undo-later.mjs +7 -0
  507. package/src/lib/record/undo-later.mjs.map +1 -0
  508. package/src/lib/record/undo-part.d.mts +8 -0
  509. package/src/lib/record/undo-part.d.ts +8 -0
  510. package/src/lib/record/undo-part.js +17 -0
  511. package/src/lib/record/undo-part.js.map +1 -0
  512. package/src/lib/record/undo-part.mjs +9 -0
  513. package/src/lib/record/undo-part.mjs.map +1 -0
  514. package/src/lib/record/upload-to-later.d.mts +10 -0
  515. package/src/lib/record/upload-to-later.d.ts +10 -0
  516. package/src/lib/record/upload-to-later.js +15 -0
  517. package/src/lib/record/upload-to-later.js.map +1 -0
  518. package/src/lib/record/upload-to-later.mjs +12 -0
  519. package/src/lib/record/upload-to-later.mjs.map +1 -0
  520. package/src/lib/record/uploads.d.mts +5 -0
  521. package/src/lib/record/uploads.d.ts +5 -0
  522. package/src/lib/record/uploads.js.map +1 -1
  523. package/src/lib/record/uploads.mjs.map +1 -1
  524. package/src/lib/record/values.d.mts +6 -0
  525. package/src/lib/record/values.d.ts +6 -0
  526. package/src/lib/record/values.js.map +1 -1
  527. package/src/lib/record/values.mjs.map +1 -1
  528. package/src/lib/record/verify-form.d.mts +24 -0
  529. package/src/lib/record/verify-form.d.ts +24 -0
  530. package/src/lib/record/verify-form.js +65 -0
  531. package/src/lib/record/verify-form.js.map +1 -0
  532. package/src/lib/record/verify-form.mjs +62 -0
  533. package/src/lib/record/verify-form.mjs.map +1 -0
  534. package/src/lib/record/verify-part.d.mts +6 -0
  535. package/src/lib/record/verify-part.d.ts +6 -0
  536. package/src/lib/record/verify-part.js +11 -0
  537. package/src/lib/record/verify-part.js.map +1 -0
  538. package/src/lib/record/verify-part.mjs +7 -0
  539. package/src/lib/record/verify-part.mjs.map +1 -0
  540. package/src/lib/record/words-chunks.d.mts +37 -0
  541. package/src/lib/record/words-chunks.d.ts +37 -0
  542. package/src/lib/record/words-chunks.js +94 -0
  543. package/src/lib/record/words-chunks.js.map +1 -0
  544. package/src/lib/record/words-chunks.mjs +86 -0
  545. package/src/lib/record/words-chunks.mjs.map +1 -0
  546. package/src/runtime.d.mts +28 -6
  547. package/src/runtime.d.ts +28 -6
  548. package/src/runtime.js +35 -6
  549. package/src/runtime.js.map +1 -1
  550. package/src/runtime.mjs +15 -3
  551. package/src/runtime.mjs.map +1 -1
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.memoryCodes = memoryCodes;
4
+ const data_source_1 = require("./data-source");
5
+ /** A memory source's `sendCode` and `checkCode`, over the codes it keeps. */
6
+ function memoryCodes(options = {}, codes) {
7
+ const now = options.now ?? (() => Date.now());
8
+ const length = options.length ?? 6;
9
+ const retryAfter = options.retryAfter ?? 30;
10
+ const sameValue = (request) => (code) => code.pageId === request.pageId && code.field === request.field && code.value === request.value;
11
+ return {
12
+ sendCode(request) {
13
+ const refused = options.refuse?.(request);
14
+ if (refused)
15
+ throw (0, data_source_1.saveRefused)({ kind: 'rule', message: refused });
16
+ const last = codes.filter(sameValue(request)).pop();
17
+ const wait = last ? Math.ceil(retryAfter - (now() - last.sentAt) / 1000) : 0;
18
+ if (wait > 0)
19
+ throw (0, data_source_1.saveRefused)({ kind: 'rule', message: `Wait ${wait} seconds before asking for another code` });
20
+ const code = options.code?.(request, codes.length + 1) ?? String(Math.floor(Math.random() * 10 ** length)).padStart(length, '0');
21
+ const sent = {
22
+ id: `code-${codes.length + 1}`,
23
+ pageId: request.pageId,
24
+ field: request.field,
25
+ value: request.value,
26
+ ...(request.by ? { by: request.by } : {}),
27
+ code,
28
+ sentAt: now(),
29
+ expiresAt: now() + (options.expiresIn ?? 600) * 1000,
30
+ triesLeft: options.tries ?? 3,
31
+ };
32
+ codes.push(sent);
33
+ return { id: sent.id, expiresAt: new Date(sent.expiresAt).toISOString(), retryAfter, length: code.length };
34
+ },
35
+ checkCode(request) {
36
+ const sent = (request.id ? codes.find((code) => code.id === request.id) : undefined) ?? codes.filter(sameValue(request)).pop();
37
+ if (!sent || sent.used || sent.value !== request.value || now() > sent.expiresAt)
38
+ return { ok: false, expired: true };
39
+ if (sent.triesLeft <= 0)
40
+ return { ok: false, triesLeft: 0 };
41
+ if (request.code !== sent.code) {
42
+ sent.triesLeft -= 1;
43
+ return { ok: false, triesLeft: sent.triesLeft };
44
+ }
45
+ sent.used = true;
46
+ return { ok: true, proof: `proved:${sent.id}` };
47
+ },
48
+ };
49
+ }
50
+ //# sourceMappingURL=memory-codes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-codes.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/memory-codes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import { saveRefused } from './data-source.mjs';
2
+ /** A memory source's `sendCode` and `checkCode`, over the codes it keeps. */
3
+ export function memoryCodes(options = {}, codes) {
4
+ const now = options.now ?? (() => Date.now());
5
+ const length = options.length ?? 6;
6
+ const retryAfter = options.retryAfter ?? 30;
7
+ const sameValue = (request) => (code) => code.pageId === request.pageId && code.field === request.field && code.value === request.value;
8
+ return {
9
+ sendCode(request) {
10
+ const refused = options.refuse?.(request);
11
+ if (refused)
12
+ throw saveRefused({ kind: 'rule', message: refused });
13
+ const last = codes.filter(sameValue(request)).pop();
14
+ const wait = last ? Math.ceil(retryAfter - (now() - last.sentAt) / 1000) : 0;
15
+ if (wait > 0)
16
+ throw saveRefused({ kind: 'rule', message: `Wait ${wait} seconds before asking for another code` });
17
+ const code = options.code?.(request, codes.length + 1) ?? String(Math.floor(Math.random() * 10 ** length)).padStart(length, '0');
18
+ const sent = {
19
+ id: `code-${codes.length + 1}`,
20
+ pageId: request.pageId,
21
+ field: request.field,
22
+ value: request.value,
23
+ ...(request.by ? { by: request.by } : {}),
24
+ code,
25
+ sentAt: now(),
26
+ expiresAt: now() + (options.expiresIn ?? 600) * 1000,
27
+ triesLeft: options.tries ?? 3,
28
+ };
29
+ codes.push(sent);
30
+ return { id: sent.id, expiresAt: new Date(sent.expiresAt).toISOString(), retryAfter, length: code.length };
31
+ },
32
+ checkCode(request) {
33
+ const sent = (request.id ? codes.find((code) => code.id === request.id) : undefined) ?? codes.filter(sameValue(request)).pop();
34
+ if (!sent || sent.used || sent.value !== request.value || now() > sent.expiresAt)
35
+ return { ok: false, expired: true };
36
+ if (sent.triesLeft <= 0)
37
+ return { ok: false, triesLeft: 0 };
38
+ if (request.code !== sent.code) {
39
+ sent.triesLeft -= 1;
40
+ return { ok: false, triesLeft: sent.triesLeft };
41
+ }
42
+ sent.used = true;
43
+ return { ok: true, proof: `proved:${sent.id}` };
44
+ },
45
+ };
46
+ }
47
+ //# sourceMappingURL=memory-codes.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-codes.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/memory-codes.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import type { Option, PropertyDefinition } from '../format/field.mjs';
2
- import type { DataSource, OptionsRequest, SubmitRequest, SubmitResult, ListedRecord, RecordPermissions, RecordVersion, UploadFile, SlotsRequest, SlotsResult, DuplicatesRequest, DuplicatesResult, LimitsResult, StoredDraft, SaveDraftRequest, ApprovalEntry, SuggestRequest, SuggestResult, RewriteRequest, RewriteResult, SearchToFilterRequest, SearchToFilterResult, ClustersRequest, ClustersResult } from './data-source.mjs';
2
+ import { type MemoryCodes, type SentCodeKept } from './memory-codes.mjs';
3
+ import type { PayRequest, PayResult, DataSource, OptionsRequest, SubmitRequest, SubmitResult, ListedRecord, RecordPermissions, RecordVersion, UploadFile, SlotsRequest, SlotsResult, DuplicatesRequest, DuplicatesResult, LimitsResult, StoredDraft, SaveDraftRequest, ApprovalEntry, SuggestRequest, SuggestResult, RewriteRequest, RewriteResult, SearchToFilterRequest, SearchToFilterResult, ClustersRequest, ClustersResult, SavedView, PresentPerson, RecordTemplate } from './data-source.mjs';
3
4
  import { type Scheduler } from './scheduler.mjs';
4
5
  import { type MemoryKept } from './memory-kept.mjs';
5
6
  import { type MemoryApprovalRoute } from './memory-approvals.mjs';
@@ -58,6 +59,19 @@ export interface MemoryDataSourceOptions {
58
59
  versions?: boolean | {
59
60
  by?: string;
60
61
  };
62
+ /**
63
+ * Live, as a server with a socket: a record's changes made with `changeElsewhere` are pushed to each page that has it
64
+ * open (`subscribe`), and who has a record open is told (`presence`): each page that opens it, and anyone `arrive`
65
+ * brings (`leave` takes them away). Without it the source has none of `subscribe`, `presence`, `arrive` and `leave`, as
66
+ * a source without a socket: a change elsewhere is found as a save meets it.
67
+ */
68
+ live?: boolean;
69
+ /**
70
+ * Record templates saved before, by page id: what `templates` answers first ("Botox package"), as an app's server
71
+ * keeps them — `{}` for none yet. Given, the source has `templates`, `saveTemplate` and `deleteTemplate`; else none,
72
+ * and a page keeps its templates in the viewer's `preferences`.
73
+ */
74
+ templates?: Record<string, RecordTemplate[]>;
61
75
  /**
62
76
  * What the person may do with each record, by model: given with its load
63
77
  * and its row in a list, and kept to as a backend would — a save, a
@@ -146,6 +160,29 @@ export interface MemoryDataSourceOptions {
146
160
  * them. Without it, the source has no `clusters`, and every map gathers its records in the browser.
147
161
  */
148
162
  clusters?: (request: ClustersRequest, records: Readonly<Record<string, Record<string, Values>>>, row: (id: RecordId, values: Values) => ListedRecord) => ClustersResult | false | Promise<ClustersResult | false>;
163
+ /**
164
+ * Keep lists' saved views, as an app's server does (`views`, `saveView`, `deleteView`): those it starts with, by page
165
+ * id — the team's shared ones, each with who made it (`by`), and this person's own (`mine`) — `{}` for none yet.
166
+ * Without it, the source has none of the three, and a list keeps its favourites in the browser, as before.
167
+ */
168
+ views?: Record<string, SavedView[]>;
169
+ /**
170
+ * How the codes that prove an email or a phone are made and checked (`sendCode`, `checkCode`), as an app's own
171
+ * service would: their digits, how long each works, how soon another may be asked for, the wrong ones taken. Each
172
+ * code sent is kept in `codes`, where a demo shows it as the message would. See `MemoryCodes`.
173
+ */
174
+ codes?: MemoryCodes;
175
+ /**
176
+ * How a payment the answers wait for ends (`pay`), as an app's provider would answer: paid, with a reference of its
177
+ * own, unless this says otherwise — a demo's stand-in checkout drawn in the request's `slot`, a test's decline. Each
178
+ * payment asked for is kept in `payments`.
179
+ */
180
+ pay?: (request: PayRequest, count: number) => PayResult | Promise<PayResult>;
181
+ /**
182
+ * Whether there is no signal now: while it says so, a save, a send and a file's upload fail as a network does
183
+ * (`TypeError: Failed to fetch`) — a demo's "Work offline", a test's outbox. Signal always, unless said.
184
+ */
185
+ offline?: () => boolean;
149
186
  }
150
187
  /** What a memory source's AI help answers with (`MemoryDataSourceOptions.assist`): each given, from its records. */
151
188
  export interface MemoryAssist {
@@ -155,14 +192,21 @@ export interface MemoryAssist {
155
192
  }
156
193
  /** The members of AI help a memory source has only where its `assist` answers them. */
157
194
  type AssistMembers = 'suggest' | 'rewrite' | 'searchToFilter';
195
+ /**
196
+ * The members a memory source has only where an option says how it answers: AI help's (`assist`), a list's map's
197
+ * `clusters`, lists' saved views (`views`), record templates (`templates`) and live updates (`live`).
198
+ */
199
+ type OptionalMembers = AssistMembers | 'clusters' | 'views' | 'saveView' | 'deleteView' | 'templates' | 'saveTemplate' | 'deleteTemplate' | 'subscribe' | 'presence';
158
200
  /**
159
201
  * Every member of a data source but `exportRecords` and `importRecords`: a
160
202
  * memory source leaves an export and an import to the browser, as a source
161
203
  * without a server of its own does. A test or a demo gives it one by setting
162
204
  * it. AI help's (`suggest`, `rewrite`, `searchToFilter`) where its `assist`
163
205
  * option answers them. `clusters` is there where its option says how it answers.
206
+ * Saved views (`views`, `saveView`, `deleteView`) where it is given `views`; record templates (`templates`,
207
+ * `saveTemplate`, `deleteTemplate`) where it is given `templates`; `subscribe` and `presence` with `live`.
164
208
  */
165
- export interface MemoryDataSource extends Required<Omit<DataSource, 'exportRecords' | 'importRecords' | AssistMembers | 'clusters'>>, Pick<DataSource, 'exportRecords' | 'importRecords' | AssistMembers | 'clusters'> {
209
+ export interface MemoryDataSource extends Required<Omit<DataSource, 'exportRecords' | 'importRecords' | OptionalMembers>>, Pick<DataSource, 'exportRecords' | 'importRecords' | OptionalMembers> {
166
210
  readonly records: Record<string, Record<string, Values>>;
167
211
  /**
168
212
  * The records said to be someone else for one another, by model: each pair of ids, in the order kept, through
@@ -183,6 +227,10 @@ export interface MemoryDataSource extends Required<Omit<DataSource, 'exportRecor
183
227
  by: string;
184
228
  at?: string;
185
229
  }): RecordVersion;
230
+ /** Someone else opens a record, or changes whether they are editing it: told to each page that has it open. With `live`. */
231
+ arrive?(model: string, id: RecordId, person: PresentPerson): void;
232
+ /** Someone else closes it. With `live`. */
233
+ leave?(model: string, id: RecordId, person: RecordId): void;
186
234
  /** Drafts kept by `saveDraft`, by key, each with its page's id and the request's `later`: the partial answers an app sees. */
187
235
  readonly drafts: Record<string, StoredDraft & {
188
236
  pageId: string;
@@ -190,6 +238,12 @@ export interface MemoryDataSource extends Required<Omit<DataSource, 'exportRecor
190
238
  }>;
191
239
  /** Take a response to a page as someone else would, on another screen: counted by `limits`, never as this person's. */
192
240
  answeredElsewhere(pageId: string, values: Values): void;
241
+ /** The codes `sendCode` sent, in order: each with the value it proves and the code itself, as its message would say it. */
242
+ readonly codes: SentCodeKept[];
243
+ /** The payments `pay` was asked for, in order (without their slot and signal), and how each ended. */
244
+ readonly payments: (Omit<PayRequest, 'slot' | 'signal'> & {
245
+ result: PayResult;
246
+ })[];
193
247
  }
194
248
  /**
195
249
  * A data source that keeps everything in memory. It implements the whole
@@ -1,5 +1,6 @@
1
1
  import type { Option, PropertyDefinition } from '../format/field';
2
- import type { DataSource, OptionsRequest, SubmitRequest, SubmitResult, ListedRecord, RecordPermissions, RecordVersion, UploadFile, SlotsRequest, SlotsResult, DuplicatesRequest, DuplicatesResult, LimitsResult, StoredDraft, SaveDraftRequest, ApprovalEntry, SuggestRequest, SuggestResult, RewriteRequest, RewriteResult, SearchToFilterRequest, SearchToFilterResult, ClustersRequest, ClustersResult } from './data-source';
2
+ import { type MemoryCodes, type SentCodeKept } from './memory-codes';
3
+ import type { PayRequest, PayResult, DataSource, OptionsRequest, SubmitRequest, SubmitResult, ListedRecord, RecordPermissions, RecordVersion, UploadFile, SlotsRequest, SlotsResult, DuplicatesRequest, DuplicatesResult, LimitsResult, StoredDraft, SaveDraftRequest, ApprovalEntry, SuggestRequest, SuggestResult, RewriteRequest, RewriteResult, SearchToFilterRequest, SearchToFilterResult, ClustersRequest, ClustersResult, SavedView, PresentPerson, RecordTemplate } from './data-source';
3
4
  import { type Scheduler } from './scheduler';
4
5
  import { type MemoryKept } from './memory-kept';
5
6
  import { type MemoryApprovalRoute } from './memory-approvals';
@@ -58,6 +59,19 @@ export interface MemoryDataSourceOptions {
58
59
  versions?: boolean | {
59
60
  by?: string;
60
61
  };
62
+ /**
63
+ * Live, as a server with a socket: a record's changes made with `changeElsewhere` are pushed to each page that has it
64
+ * open (`subscribe`), and who has a record open is told (`presence`): each page that opens it, and anyone `arrive`
65
+ * brings (`leave` takes them away). Without it the source has none of `subscribe`, `presence`, `arrive` and `leave`, as
66
+ * a source without a socket: a change elsewhere is found as a save meets it.
67
+ */
68
+ live?: boolean;
69
+ /**
70
+ * Record templates saved before, by page id: what `templates` answers first ("Botox package"), as an app's server
71
+ * keeps them — `{}` for none yet. Given, the source has `templates`, `saveTemplate` and `deleteTemplate`; else none,
72
+ * and a page keeps its templates in the viewer's `preferences`.
73
+ */
74
+ templates?: Record<string, RecordTemplate[]>;
61
75
  /**
62
76
  * What the person may do with each record, by model: given with its load
63
77
  * and its row in a list, and kept to as a backend would — a save, a
@@ -146,6 +160,29 @@ export interface MemoryDataSourceOptions {
146
160
  * them. Without it, the source has no `clusters`, and every map gathers its records in the browser.
147
161
  */
148
162
  clusters?: (request: ClustersRequest, records: Readonly<Record<string, Record<string, Values>>>, row: (id: RecordId, values: Values) => ListedRecord) => ClustersResult | false | Promise<ClustersResult | false>;
163
+ /**
164
+ * Keep lists' saved views, as an app's server does (`views`, `saveView`, `deleteView`): those it starts with, by page
165
+ * id — the team's shared ones, each with who made it (`by`), and this person's own (`mine`) — `{}` for none yet.
166
+ * Without it, the source has none of the three, and a list keeps its favourites in the browser, as before.
167
+ */
168
+ views?: Record<string, SavedView[]>;
169
+ /**
170
+ * How the codes that prove an email or a phone are made and checked (`sendCode`, `checkCode`), as an app's own
171
+ * service would: their digits, how long each works, how soon another may be asked for, the wrong ones taken. Each
172
+ * code sent is kept in `codes`, where a demo shows it as the message would. See `MemoryCodes`.
173
+ */
174
+ codes?: MemoryCodes;
175
+ /**
176
+ * How a payment the answers wait for ends (`pay`), as an app's provider would answer: paid, with a reference of its
177
+ * own, unless this says otherwise — a demo's stand-in checkout drawn in the request's `slot`, a test's decline. Each
178
+ * payment asked for is kept in `payments`.
179
+ */
180
+ pay?: (request: PayRequest, count: number) => PayResult | Promise<PayResult>;
181
+ /**
182
+ * Whether there is no signal now: while it says so, a save, a send and a file's upload fail as a network does
183
+ * (`TypeError: Failed to fetch`) — a demo's "Work offline", a test's outbox. Signal always, unless said.
184
+ */
185
+ offline?: () => boolean;
149
186
  }
150
187
  /** What a memory source's AI help answers with (`MemoryDataSourceOptions.assist`): each given, from its records. */
151
188
  export interface MemoryAssist {
@@ -155,14 +192,21 @@ export interface MemoryAssist {
155
192
  }
156
193
  /** The members of AI help a memory source has only where its `assist` answers them. */
157
194
  type AssistMembers = 'suggest' | 'rewrite' | 'searchToFilter';
195
+ /**
196
+ * The members a memory source has only where an option says how it answers: AI help's (`assist`), a list's map's
197
+ * `clusters`, lists' saved views (`views`), record templates (`templates`) and live updates (`live`).
198
+ */
199
+ type OptionalMembers = AssistMembers | 'clusters' | 'views' | 'saveView' | 'deleteView' | 'templates' | 'saveTemplate' | 'deleteTemplate' | 'subscribe' | 'presence';
158
200
  /**
159
201
  * Every member of a data source but `exportRecords` and `importRecords`: a
160
202
  * memory source leaves an export and an import to the browser, as a source
161
203
  * without a server of its own does. A test or a demo gives it one by setting
162
204
  * it. AI help's (`suggest`, `rewrite`, `searchToFilter`) where its `assist`
163
205
  * option answers them. `clusters` is there where its option says how it answers.
206
+ * Saved views (`views`, `saveView`, `deleteView`) where it is given `views`; record templates (`templates`,
207
+ * `saveTemplate`, `deleteTemplate`) where it is given `templates`; `subscribe` and `presence` with `live`.
164
208
  */
165
- export interface MemoryDataSource extends Required<Omit<DataSource, 'exportRecords' | 'importRecords' | AssistMembers | 'clusters'>>, Pick<DataSource, 'exportRecords' | 'importRecords' | AssistMembers | 'clusters'> {
209
+ export interface MemoryDataSource extends Required<Omit<DataSource, 'exportRecords' | 'importRecords' | OptionalMembers>>, Pick<DataSource, 'exportRecords' | 'importRecords' | OptionalMembers> {
166
210
  readonly records: Record<string, Record<string, Values>>;
167
211
  /**
168
212
  * The records said to be someone else for one another, by model: each pair of ids, in the order kept, through
@@ -183,6 +227,10 @@ export interface MemoryDataSource extends Required<Omit<DataSource, 'exportRecor
183
227
  by: string;
184
228
  at?: string;
185
229
  }): RecordVersion;
230
+ /** Someone else opens a record, or changes whether they are editing it: told to each page that has it open. With `live`. */
231
+ arrive?(model: string, id: RecordId, person: PresentPerson): void;
232
+ /** Someone else closes it. With `live`. */
233
+ leave?(model: string, id: RecordId, person: RecordId): void;
186
234
  /** Drafts kept by `saveDraft`, by key, each with its page's id and the request's `later`: the partial answers an app sees. */
187
235
  readonly drafts: Record<string, StoredDraft & {
188
236
  pageId: string;
@@ -190,6 +238,12 @@ export interface MemoryDataSource extends Required<Omit<DataSource, 'exportRecor
190
238
  }>;
191
239
  /** Take a response to a page as someone else would, on another screen: counted by `limits`, never as this person's. */
192
240
  answeredElsewhere(pageId: string, values: Values): void;
241
+ /** The codes `sendCode` sent, in order: each with the value it proves and the code itself, as its message would say it. */
242
+ readonly codes: SentCodeKept[];
243
+ /** The payments `pay` was asked for, in order (without their slot and signal), and how each ended. */
244
+ readonly payments: (Omit<PayRequest, 'slot' | 'signal'> & {
245
+ result: PayResult;
246
+ })[];
193
247
  }
194
248
  /**
195
249
  * A data source that keeps everything in memory. It implements the whole
@@ -3,12 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createMemoryDataSource = createMemoryDataSource;
4
4
  exports.memorySource = memorySource;
5
5
  const input_rules_1 = require("./input-rules");
6
+ const memory_codes_1 = require("./memory-codes");
6
7
  const data_source_1 = require("./data-source");
8
+ const memory_live_1 = require("./memory-live");
7
9
  const filter_1 = require("./filter");
8
10
  const periods_1 = require("./periods");
9
11
  const scheduler_1 = require("./scheduler");
10
12
  const memory_kept_1 = require("./memory-kept");
11
13
  const memory_approvals_1 = require("./memory-approvals");
14
+ const memory_views_1 = require("./memory-views");
12
15
  const values_1 = require("./values");
13
16
  /**
14
17
  * A data source that keeps everything in memory. It implements the whole
@@ -20,7 +23,8 @@ function createMemoryDataSource(options = {}) {
20
23
  }
21
24
  /** A memory source's members, working on what it keeps (`memoryKept`): the one-tag script's memory part. */
22
25
  function memorySource(options, kept) {
23
- const { records, notDuplicatePairs, responses, calls, elsewhere, drafts, table, versionOf, moveOn } = kept;
26
+ const { records, notDuplicatePairs, responses, calls, elsewhere, drafts, codes, payments, table, versionOf, moveOn } = kept;
27
+ const proving = (0, memory_codes_1.memoryCodes)(options.codes, codes);
24
28
  let draftIds = 0;
25
29
  /** A record's approvals, as an approval engine keeps them (memory-approvals.ts). */
26
30
  const approving = (0, memory_approvals_1.memoryApprovals)({
@@ -63,6 +67,40 @@ function memorySource(options, kept) {
63
67
  const pause = () => (options.delayMs ? (0, scheduler_1.wait)(options.delayMs, options.scheduler) : Promise.resolve());
64
68
  /** A record's name, or its names in each language it is kept in (`{ ar, en }`). */
65
69
  const nameOf = (model, id) => table(model)[String(id)]?.[options.labelField?.[model] ?? 'name'];
70
+ /** No signal now (`offline`): fail as a network does. */
71
+ const noSignal = () => {
72
+ if (options.offline?.())
73
+ throw new TypeError('Failed to fetch');
74
+ };
75
+ /** Each page's record templates, as saved: those given first, then each kept, numbered on. */
76
+ const savedTemplates = (0, values_1.structuredCopy)(options.templates ?? {});
77
+ const templatesOf = (pageId) => (savedTemplates[pageId] ??= []);
78
+ let templateIds = 0;
79
+ async function templates(request) {
80
+ calls.push({ method: 'templates', request });
81
+ await pause();
82
+ return (0, values_1.structuredCopy)(templatesOf(request.pageId));
83
+ }
84
+ async function saveTemplate(request) {
85
+ calls.push({ method: 'saveTemplate', request });
86
+ await pause();
87
+ const list = templatesOf(request.pageId);
88
+ const kept = { id: request.template.id ?? `template-${++templateIds}`, name: request.template.name, values: (0, values_1.structuredCopy)(request.template.values) };
89
+ const at = list.findIndex((one) => String(one.id) === String(kept.id));
90
+ if (at >= 0)
91
+ list[at] = kept;
92
+ else
93
+ list.push(kept);
94
+ return (0, values_1.structuredCopy)(kept);
95
+ }
96
+ async function deleteTemplate(request) {
97
+ calls.push({ method: 'deleteTemplate', request });
98
+ await pause();
99
+ const list = templatesOf(request.pageId);
100
+ const at = list.findIndex((one) => String(one.id) === String(request.id));
101
+ if (at >= 0)
102
+ list.splice(at, 1);
103
+ }
66
104
  const labelOf = (model, id) => {
67
105
  const value = nameOf(model, id);
68
106
  const name = oneText(value, options.language);
@@ -188,8 +226,31 @@ function memorySource(options, kept) {
188
226
  responses,
189
227
  calls,
190
228
  drafts,
229
+ codes,
230
+ payments,
191
231
  answeredElsewhere: kept.answeredElsewhere,
232
+ async pay(request) {
233
+ const { slot: _slot, signal: _signal, ...asked } = request;
234
+ calls.push({ method: 'pay', request: asked });
235
+ await pause();
236
+ const result = options.pay ? await options.pay(request, payments.length + 1) : { status: 'paid', reference: `PAY-${payments.length + 1}` };
237
+ payments.push({ ...(0, values_1.structuredCopy)(asked), result: (0, values_1.structuredCopy)(result) });
238
+ return result;
239
+ },
192
240
  changeElsewhere: kept.changeElsewhere,
241
+ ...(0, memory_live_1.memoryLive)(options, kept),
242
+ // Record templates, as an app's server keeps them: where it was given some (`templates`, `{}` for none yet).
243
+ ...(options.templates ? { templates, saveTemplate, deleteTemplate } : {}),
244
+ async sendCode(request) {
245
+ calls.push({ method: 'sendCode', request });
246
+ await pause();
247
+ return proving.sendCode(request);
248
+ },
249
+ async checkCode(request) {
250
+ calls.push({ method: 'checkCode', request });
251
+ await pause();
252
+ return proving.checkCode(request);
253
+ },
193
254
  async limits(request) {
194
255
  calls.push({ method: 'limits', request });
195
256
  await pause();
@@ -264,6 +325,7 @@ function memorySource(options, kept) {
264
325
  async save(request) {
265
326
  calls.push({ method: 'save', request });
266
327
  await pause();
328
+ noSignal();
267
329
  const saved = write(request);
268
330
  // Saved: the draft its changes were kept in is let go, as a server does.
269
331
  if (request.draft)
@@ -441,6 +503,7 @@ function memorySource(options, kept) {
441
503
  },
442
504
  async upload(file, request) {
443
505
  calls.push({ method: 'upload', request: { ...request, file } });
506
+ noSignal();
444
507
  const stopped = () => Object.assign(new Error('The upload was stopped'), { name: 'AbortError' });
445
508
  // A store slow or failing as `storage` says: a refusal at once, a failure partway, the bytes paced as they go.
446
509
  const tried = `${file.name}:${file.size}`;
@@ -487,6 +550,7 @@ function memorySource(options, kept) {
487
550
  async submit(request) {
488
551
  calls.push({ method: 'submit', request });
489
552
  await pause();
553
+ noSignal();
490
554
  responses.push((0, values_1.structuredCopy)(request));
491
555
  // Sent: the draft it was kept in is let go, as a server does.
492
556
  if (request.draft)
@@ -562,6 +626,8 @@ function memorySource(options, kept) {
562
626
  const own = options.definitions?.[request.list]?.(request.values) ?? [];
563
627
  addedDefinitions.set(`${request.list}:${JSON.stringify(own)}`, (0, values_1.structuredCopy)(request.definitions.filter((d) => !own.some((o) => o.name === d.name))));
564
628
  },
629
+ // Lists' saved views, where it was given some (memory-views.ts).
630
+ ...(options.views ? (0, memory_views_1.memoryViews)(options.views, calls, pause) : {}),
565
631
  };
566
632
  // AI help's members, where the app gave what answers them (`assist`): each called as a server would be, after the
567
633
  // source's pause, from the records it keeps.