@sealcode/sealgen 0.18.10 → 0.19.2

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 (444) hide show
  1. package/.xunit +74 -69
  2. package/@types/add-crud.d.sync-conflict-20250918-184311-TFDLWFG.ts +1 -0
  3. package/@types/builders/colors-builder.d.sync-conflict-20250918-184323-TFDLWFG.ts +10 -0
  4. package/@types/builders/colors-builder.d.ts +1 -1
  5. package/@types/builders/fonts-builder.d.sync-conflict-20250918-184322-TFDLWFG.ts +7 -0
  6. package/@types/builders/fonts-builder.d.ts +1 -1
  7. package/@types/controllers/table-add-button.d.ts +6 -0
  8. package/@types/controllers/table-add-button.stimulus.d.ts +6 -0
  9. package/@types/crud-field-snippets.d.sync-conflict-20250918-184323-TFDLWFG.ts +1 -0
  10. package/@types/crud-field-snippets.d.ts +1 -3
  11. package/@types/forms/controls/array.d.sync-conflict-20250918-184306-TFDLWFG.ts +33 -0
  12. package/@types/forms/controls/array.d.ts +1 -3
  13. package/@types/forms/controls/array.sync-conflict-20250918-222045-TFDLWFG.d.ts +33 -0
  14. package/@types/forms/controls/autocomplete.d.sync-conflict-20250918-222042-TFDLWFG.ts +22 -0
  15. package/@types/forms/controls/autocomplete.d.ts +1 -1
  16. package/@types/forms/controls/checkbox-group.d.sync-conflict-20250918-184319-TFDLWFG.ts +21 -0
  17. package/@types/forms/controls/checkbox-group.d.ts +3 -3
  18. package/@types/forms/controls/checkboxed-list-input.d.sync-conflict-20250918-184323-TFDLWFG.ts +21 -0
  19. package/@types/forms/controls/checkboxed-list-input.d.ts +3 -3
  20. package/@types/forms/controls/controls.d.ts +2 -2
  21. package/@types/forms/controls/derived-frame.d.sync-conflict-20250918-184314-TFDLWFG.ts +19 -0
  22. package/@types/forms/controls/derived-frame.d.ts +0 -2
  23. package/@types/forms/controls/dropdown.d.sync-conflict-20250918-222044-TFDLWFG.ts +30 -0
  24. package/@types/forms/controls/dropdown.d.ts +1 -1
  25. package/@types/forms/controls/file.d.sync-conflict-20250918-222045-TFDLWFG.ts +13 -0
  26. package/@types/forms/controls/file.d.ts +1 -2
  27. package/@types/forms/controls/form-control.d.sync-conflict-20250918-184322-TFDLWFG.ts +19 -0
  28. package/@types/forms/controls/form-control.d.sync-conflict-20250918-222046-TFDLWFG.ts +19 -0
  29. package/@types/forms/controls/form-control.d.ts +7 -4
  30. package/@types/forms/controls/image.d.ts +19 -0
  31. package/@types/forms/controls/image.test.d.ts +1 -0
  32. package/@types/forms/controls/multiple-files.d.sync-conflict-20250918-184318-TFDLWFG.ts +42 -0
  33. package/@types/forms/controls/multiple-files.d.ts +3 -1
  34. package/@types/forms/controls/multiple-images.d.ts +19 -0
  35. package/@types/forms/controls/number.d.sync-conflict-20250918-222046-TFDLWFG.ts +13 -0
  36. package/@types/forms/controls/number.d.ts +1 -1
  37. package/@types/forms/controls/photo.d.sync-conflict-20250918-184321-TFDLWFG.ts +19 -0
  38. package/@types/forms/controls/photo.d.ts +3 -5
  39. package/@types/forms/controls/simple-input.d.sync-conflict-20250918-184310-TFDLWFG.ts +33 -0
  40. package/@types/forms/controls/simple-input.d.sync-conflict-20250918-222042-TFDLWFG.ts +33 -0
  41. package/@types/forms/controls/simple-input.d.ts +5 -4
  42. package/@types/forms/controls/simple-input.sync-conflict-20250918-222045-TFDLWFG.d.ts +33 -0
  43. package/@types/forms/controls/single-reference.d.ts +3 -2
  44. package/@types/forms/controls/table.d.sync-conflict-20250918-184302-TFDLWFG.ts +39 -0
  45. package/@types/forms/controls/table.d.ts +8 -3
  46. package/@types/forms/controls/table.sync-conflict-20250918-222042-TFDLWFG.d.ts +39 -0
  47. package/@types/forms/controls/textarea.d.sync-conflict-20250918-222045-TFDLWFG.ts +25 -0
  48. package/@types/forms/controls/textarea.d.ts +3 -3
  49. package/@types/forms/fields/boolean.d.sync-conflict-20250918-184325-TFDLWFG.ts +22 -0
  50. package/@types/forms/fields/boolean.d.ts +6 -1
  51. package/@types/forms/fields/boolean.sync-conflict-20250918-222042-TFDLWFG.d.ts +22 -0
  52. package/@types/forms/fields/checkboxed-list.d.sync-conflict-20250918-184325-TFDLWFG.ts +23 -0
  53. package/@types/forms/fields/checkboxed-list.d.ts +3 -1
  54. package/@types/forms/fields/collection-field.d.sync-conflict-20250918-184319-TFDLWFG.ts +22 -0
  55. package/@types/forms/fields/collection-field.d.sync-conflict-20250918-222047-TFDLWFG.ts +22 -0
  56. package/@types/forms/fields/collection-field.d.ts +8 -1
  57. package/@types/forms/fields/color.d.ts +4 -0
  58. package/@types/forms/fields/coordinates.d.sync-conflict-20250918-222044-TFDLWFG.ts +14 -0
  59. package/@types/forms/fields/coordinates.d.ts +14 -0
  60. package/@types/forms/fields/date.d.ts +13 -0
  61. package/@types/forms/fields/datetime.d.sync-conflict-20250918-222050-TFDLWFG.ts +4 -0
  62. package/@types/forms/fields/datetime.d.ts +14 -0
  63. package/@types/forms/fields/deep-reverse-single-reference-list.d.ts +20 -0
  64. package/@types/forms/fields/deep-reverse-single-reference-table.d.ts +16 -0
  65. package/@types/forms/fields/email.d.sync-conflict-20250918-184303-TFDLWFG.ts +8 -0
  66. package/@types/forms/fields/email.d.ts +3 -0
  67. package/@types/forms/fields/enum-multiple-sealious.d.ts +16 -0
  68. package/@types/forms/fields/enum-multiple-sealious.sync-conflict-20250918-222047-TFDLWFG.d.ts +16 -0
  69. package/@types/forms/fields/field.d.sync-conflict-20250918-184306-TFDLWFG.ts +70 -0
  70. package/@types/forms/fields/field.d.ts +37 -5
  71. package/@types/forms/fields/fields.d.sync-conflict-20250918-184314-TFDLWFG.ts +29 -0
  72. package/@types/forms/fields/fields.d.ts +23 -8
  73. package/@types/forms/fields/file.d.sync-conflict-20250918-184310-TFDLWFG.ts +23 -0
  74. package/@types/forms/fields/file.d.sync-conflict-20250918-222046-TFDLWFG.ts +23 -0
  75. package/@types/forms/fields/file.d.ts +11 -5
  76. package/@types/forms/fields/file.sync-conflict-20250918-222049-TFDLWFG.d.ts +23 -0
  77. package/@types/forms/fields/float.d.ts +4 -0
  78. package/@types/forms/fields/get-field-for-sealious.d.sync-conflict-20250918-222046-TFDLWFG.ts +29 -0
  79. package/@types/forms/fields/get-field-for-sealious.d.ts +31 -0
  80. package/@types/forms/fields/get-field-for-sealious.sync-conflict-20250918-222042-TFDLWFG.d.ts +29 -0
  81. package/@types/forms/fields/html.d.ts +6 -0
  82. package/@types/forms/fields/image.d.sync-conflict-20250918-222042-TFDLWFG.ts +5 -0
  83. package/@types/forms/fields/image.d.ts +5 -0
  84. package/@types/forms/fields/int.d.ts +6 -0
  85. package/@types/forms/fields/json.d.ts +13 -0
  86. package/@types/forms/fields/markdown.d.ts +6 -0
  87. package/@types/forms/fields/multiple-files.d.sync-conflict-20250918-184304-TFDLWFG.ts +16 -0
  88. package/@types/forms/fields/multiple-files.d.ts +3 -1
  89. package/@types/forms/fields/number.d.sync-conflict-20250918-184317-TFDLWFG.ts +25 -0
  90. package/@types/forms/fields/number.d.sync-conflict-20250918-222047-TFDLWFG.ts +25 -0
  91. package/@types/forms/fields/number.d.ts +3 -1
  92. package/@types/forms/fields/password.d.ts +5 -0
  93. package/@types/forms/fields/pick-from-list-sealious.d.ts +11 -0
  94. package/@types/forms/fields/pick-from-list.d.sync-conflict-20250918-184322-TFDLWFG.ts +15 -0
  95. package/@types/forms/fields/pick-from-list.d.ts +4 -3
  96. package/@types/forms/fields/proxy-field.d.sync-conflict-20250918-184307-TFDLWFG.ts +15 -0
  97. package/@types/forms/fields/proxy-field.d.ts +3 -1
  98. package/@types/forms/fields/regexp.d.sync-conflict-20250918-184305-TFDLWFG.ts +21 -0
  99. package/@types/forms/fields/regexp.d.sync-conflict-20250918-222045-TFDLWFG.ts +21 -0
  100. package/@types/forms/fields/regexp.d.ts +6 -1
  101. package/@types/forms/fields/regexp.sync-conflict-20250918-222047-TFDLWFG.d.ts +21 -0
  102. package/@types/forms/fields/simple-form-field.d.sync-conflict-20250918-184309-TFDLWFG.ts +29 -0
  103. package/@types/forms/fields/simple-form-field.d.sync-conflict-20250918-222044-TFDLWFG.ts +29 -0
  104. package/@types/forms/fields/simple-form-field.d.ts +23 -3
  105. package/@types/forms/fields/simple-form-field.sync-conflict-20250918-222049-TFDLWFG.d.ts +29 -0
  106. package/@types/forms/fields/single-reference.d.ts +19 -0
  107. package/@types/forms/fields/single-reference.sync-conflict-20250918-222043-TFDLWFG.d.ts +10 -0
  108. package/@types/forms/fields/structured-array.d.sync-conflict-20250918-184302-TFDLWFG.ts +27 -0
  109. package/@types/forms/fields/structured-array.d.sync-conflict-20250918-222049-TFDLWFG.ts +27 -0
  110. package/@types/forms/fields/structured-array.d.ts +19 -10
  111. package/@types/forms/fields/structured-array.sync-conflict-20250918-222047-TFDLWFG.d.ts +27 -0
  112. package/@types/forms/fields/table.d.sync-conflict-20250918-184303-TFDLWFG.ts +16 -0
  113. package/@types/forms/fields/table.d.ts +3 -0
  114. package/@types/forms/fields/text.d.ts +6 -0
  115. package/@types/forms/fields/url.d.ts +6 -0
  116. package/@types/forms/form-types.d.sync-conflict-20250918-222045-TFDLWFG.ts +26 -0
  117. package/@types/forms/form-types.d.ts +2 -0
  118. package/@types/forms/form.d.sync-conflict-20250918-184315-TFDLWFG.ts +32 -0
  119. package/@types/forms/form.d.sync-conflict-20250918-222049-TFDLWFG.ts +32 -0
  120. package/@types/forms/form.d.ts +10 -8
  121. package/@types/forms/form.sync-conflict-20250918-222049-TFDLWFG.d.ts +33 -0
  122. package/@types/forms/form.test.d.sync-conflict-20250918-184318-TFDLWFG.ts +6 -0
  123. package/@types/forms/form.test.d.sync-conflict-20250918-222047-TFDLWFG.ts +6 -0
  124. package/@types/forms/form.test.d.ts +2 -2
  125. package/@types/forms/multiform.d.sync-conflict-20250918-184308-TFDLWFG.ts +23 -0
  126. package/@types/forms/multiform.d.ts +1 -2
  127. package/@types/forms/multiform.sync-conflict-20250918-222044-TFDLWFG.d.ts +23 -0
  128. package/@types/index.d.sync-conflict-20250918-184316-TFDLWFG.ts +46 -0
  129. package/@types/index.d.ts +2 -2
  130. package/@types/mount.d.sync-conflict-20250918-184320-TFDLWFG.ts +6 -0
  131. package/@types/mount.d.ts +0 -1
  132. package/@types/page/list.d.sync-conflict-20250918-184318-TFDLWFG.ts +48 -0
  133. package/@types/page/list.d.sync-conflict-20250918-222046-TFDLWFG.ts +48 -0
  134. package/@types/page/list.d.ts +2 -2
  135. package/@types/page/list.sync-conflict-20250918-222048-TFDLWFG.d.ts +48 -0
  136. package/@types/page/mountable-with-fields.d.sync-conflict-20250918-184321-TFDLWFG.ts +42 -0
  137. package/@types/page/mountable-with-fields.d.sync-conflict-20250918-222046-TFDLWFG.ts +42 -0
  138. package/@types/page/mountable-with-fields.d.ts +3 -3
  139. package/@types/page/mountable-with-fields.sync-conflict-20250918-222044-TFDLWFG.d.ts +42 -0
  140. package/@types/page/mountable.d.sync-conflict-20250918-184306-TFDLWFG.ts +10 -0
  141. package/@types/page/mountable.d.ts +0 -1
  142. package/@types/page/page.d.sync-conflict-20250918-184320-TFDLWFG.ts +18 -0
  143. package/@types/page/page.d.ts +0 -1
  144. package/@types/page/props-parser.d.sync-conflict-20250918-184305-TFDLWFG.ts +15 -0
  145. package/@types/page/props-parser.d.ts +0 -1
  146. package/@types/page/stateful-page.d.sync-conflict-20250918-184326-TFDLWFG.ts +62 -0
  147. package/@types/page/stateful-page.d.ts +0 -1
  148. package/@types/register-external.d.ts +2 -2
  149. package/@types/templates/form.d.ts +1 -3
  150. package/@types/templates/jdd-component.d.ts +1 -1
  151. package/@types/templates/page.d.ts +1 -1
  152. package/@types/templates/shared/shared-crud-form-fields.d.sync-conflict-20250918-184306-TFDLWFG.ts +1 -0
  153. package/@types/templates/shared/shared-crud-form-fields.d.ts +1 -68
  154. package/@types/templates/templates.d.ts +1 -21
  155. package/@types/test_utils/test-on-real-app.d.sync-conflict-20250918-184320-TFDLWFG.ts +26 -0
  156. package/@types/test_utils/test-on-real-app.d.ts +0 -1
  157. package/@types/utils/extract-fields-from-collection.d.sync-conflict-20250918-184312-TFDLWFG.ts +18 -0
  158. package/@types/utils/extract-fields-from-collection.d.ts +5 -1
  159. package/@types/utils/extract-fields-from-collection.sync-conflict-20250918-222045-TFDLWFG.d.ts +18 -0
  160. package/@types/utils/wrap-attributes.d.ts +3 -0
  161. package/README.md +5 -0
  162. package/assets/file-icon.svg +5 -0
  163. package/eslint.config.mjs +56 -0
  164. package/lib/add-crud.js +77 -89
  165. package/lib/add-jdd-component.js +3 -3
  166. package/lib/add-list-route.test.js +1 -1
  167. package/lib/add-route.js +2 -9
  168. package/lib/build.js +6 -4
  169. package/lib/builders/backend-ts-builder.js +0 -1
  170. package/lib/builders/colors-builder.js +11 -8
  171. package/lib/builders/fonts-builder.js +0 -1
  172. package/lib/builders/frontend-ts-builder.js +0 -1
  173. package/lib/cli.js +4 -7
  174. package/lib/components/tabs.js +36 -36
  175. package/lib/controllers/table-add-button.stimulus.js +35 -0
  176. package/lib/esbuild-plugins/rewrite-asset-imports.js +7 -10
  177. package/lib/forms/controls/array.js +25 -22
  178. package/lib/forms/controls/big-radio-group.js +2 -2
  179. package/lib/forms/controls/checkbox-group.js +7 -7
  180. package/lib/forms/controls/checkboxed-list-input.js +7 -1
  181. package/lib/forms/controls/checkboxed-list-input.test.js +6 -6
  182. package/lib/forms/controls/controls.js +2 -2
  183. package/lib/forms/controls/derived-frame.js +8 -4
  184. package/lib/forms/controls/derived.js +1 -1
  185. package/lib/forms/controls/dropdown.js +5 -3
  186. package/lib/forms/controls/editable-collection-subset.js +2 -2
  187. package/lib/forms/controls/file.js +26 -2
  188. package/lib/forms/controls/file.test.js +2 -2
  189. package/lib/forms/controls/form-control.js +1 -1
  190. package/lib/forms/controls/hidden-input.js +4 -1
  191. package/lib/forms/controls/{photo.js → image.js} +6 -7
  192. package/lib/forms/controls/{photo.test.js → image.test.js} +8 -23
  193. package/lib/forms/controls/multiple-files.js +10 -1
  194. package/lib/forms/controls/{multiple-photos.js → multiple-images.js} +3 -3
  195. package/lib/forms/controls/simple-input.js +13 -12
  196. package/lib/forms/controls/single-reference.js +4 -0
  197. package/lib/forms/controls/single-reference.test.js +1 -1
  198. package/lib/forms/controls/table.js +62 -25
  199. package/lib/forms/controls/textarea.js +5 -3
  200. package/lib/forms/controls/tickable.js +13 -5
  201. package/lib/forms/fields/boolean.js +14 -0
  202. package/lib/forms/fields/checkboxed-list.js +4 -0
  203. package/lib/forms/fields/collection-field.js +9 -0
  204. package/lib/forms/fields/color.js +10 -0
  205. package/lib/forms/fields/coordinates.js +49 -0
  206. package/lib/forms/fields/date.js +34 -0
  207. package/lib/forms/fields/datetime.js +46 -0
  208. package/lib/forms/fields/deep-reverse-single-reference-list.js +81 -0
  209. package/lib/forms/fields/deep-reverse-single-reference-table.js +122 -0
  210. package/lib/forms/fields/email.js +7 -0
  211. package/lib/forms/fields/enum-multiple-sealious.js +32 -0
  212. package/lib/forms/fields/field.js +32 -4
  213. package/lib/forms/fields/field.test.js +8 -8
  214. package/lib/forms/fields/fields.js +23 -8
  215. package/lib/forms/fields/file.js +33 -9
  216. package/lib/forms/fields/file.test.js +5 -17
  217. package/lib/forms/fields/float.js +10 -0
  218. package/lib/forms/fields/get-field-for-sealious.js +213 -0
  219. package/lib/forms/fields/html.js +14 -0
  220. package/lib/forms/fields/image.js +13 -0
  221. package/lib/forms/fields/int.js +23 -0
  222. package/lib/forms/fields/json.js +31 -0
  223. package/lib/forms/fields/markdown.js +14 -0
  224. package/lib/forms/fields/multiple-files.js +4 -0
  225. package/lib/forms/fields/number.js +6 -0
  226. package/lib/forms/fields/password.js +13 -0
  227. package/lib/forms/fields/pick-from-list-sealious.js +17 -0
  228. package/lib/forms/fields/pick-from-list.js +6 -2
  229. package/lib/forms/fields/proxy-field.js +3 -0
  230. package/lib/forms/fields/regexp.js +14 -0
  231. package/lib/forms/fields/simple-form-field.js +61 -2
  232. package/lib/forms/fields/single-reference.js +44 -0
  233. package/lib/forms/fields/structured-array.js +61 -12
  234. package/lib/forms/fields/table.js +29 -2
  235. package/lib/forms/fields/text.js +17 -0
  236. package/lib/forms/fields/url.js +17 -0
  237. package/lib/forms/form.js +30 -14
  238. package/lib/forms/form.test.js +5 -7
  239. package/lib/forms/multiform.js +10 -9
  240. package/lib/forms/multiform.test.js +5 -5
  241. package/lib/generate-collections.js +2 -3
  242. package/lib/generate-components.js +2 -3
  243. package/lib/generate-routes.js +3 -5
  244. package/lib/generate-routes.test.js +7 -16
  245. package/lib/generate-stimulus.js +4 -4
  246. package/lib/get-fonts.js +29 -27
  247. package/lib/index.js +1 -0
  248. package/lib/make-env.js +1 -1
  249. package/lib/make-hidden-inputs.js +4 -4
  250. package/lib/mount.js +11 -1
  251. package/lib/notifier.js +3 -4
  252. package/lib/page/list.js +20 -15
  253. package/lib/page/mountable-with-fields.js +14 -6
  254. package/lib/page/mountable-with-fields.test.js +1 -1
  255. package/lib/page/mountable.js +0 -1
  256. package/lib/page/page.js +0 -1
  257. package/lib/register-external.js +4 -4
  258. package/lib/templates/form.js +9 -10
  259. package/lib/templates/jdd-component.js +1 -1
  260. package/lib/templates/jdd-editor.js +1 -1
  261. package/lib/templates/multiform.js +4 -4
  262. package/lib/templates/page.js +1 -3
  263. package/lib/templates/shared/collection-create-form.js +31 -44
  264. package/lib/templates/shared/collection-edit-form.js +43 -81
  265. package/lib/templates/shared/collection-list.js +13 -21
  266. package/lib/templates/shared/shared-crud-form-fields.js +28 -98
  267. package/lib/test_utils/exec_async.js +3 -3
  268. package/lib/test_utils/test-on-real-app.js +12 -14
  269. package/lib/utils/extract-fields-from-collection.js +60 -20
  270. package/lib/utils/make-slug.js +1 -1
  271. package/lib/utils/wrap-attributes.js +20 -0
  272. package/lib/utils/write-file.js +1 -1
  273. package/package.json +11 -9
  274. package/src/add-collection.ts +1 -3
  275. package/src/add-crud.ts +84 -100
  276. package/src/add-jdd-component.ts +4 -5
  277. package/src/add-list-route.test.ts +1 -1
  278. package/src/add-route.ts +3 -13
  279. package/src/build.ts +6 -4
  280. package/src/builders/backend-ts-builder.ts +0 -1
  281. package/src/builders/builder.ts +4 -1
  282. package/src/builders/colors-builder.ts +11 -9
  283. package/src/builders/css-builder.ts +4 -1
  284. package/src/builders/fonts-builder.ts +0 -1
  285. package/src/builders/frontend-ts-builder.ts +0 -1
  286. package/src/cli.ts +5 -7
  287. package/src/components/tabs.ts +38 -37
  288. package/src/components/toggle-modal.ts +1 -1
  289. package/src/controllers/table-add-button.stimulus.ts +35 -0
  290. package/src/esbuild-plugins/rewrite-asset-imports.ts +7 -10
  291. package/src/forms/controls/array.ts +35 -36
  292. package/src/forms/controls/autocomplete.ts +2 -2
  293. package/src/forms/controls/big-radio-group.ts +4 -4
  294. package/src/forms/controls/checkbox-group.ts +10 -10
  295. package/src/forms/controls/checkboxed-list-input.test.ts +6 -6
  296. package/src/forms/controls/checkboxed-list-input.ts +16 -8
  297. package/src/forms/controls/controls.ts +2 -2
  298. package/src/forms/controls/derived-frame.ts +16 -11
  299. package/src/forms/controls/derived.ts +7 -6
  300. package/src/forms/controls/dropdown.ts +13 -13
  301. package/src/forms/controls/editable-collection-subset.ts +4 -3
  302. package/src/forms/controls/field-group.ts +1 -1
  303. package/src/forms/controls/file.test.ts +4 -2
  304. package/src/forms/controls/file.ts +30 -7
  305. package/src/forms/controls/form-control.ts +8 -3
  306. package/src/forms/controls/hidden-input.ts +5 -1
  307. package/src/forms/controls/html.ts +1 -0
  308. package/src/forms/controls/{photo.test.ts → image.test.ts} +7 -24
  309. package/src/forms/controls/{photo.ts → image.ts} +4 -6
  310. package/src/forms/controls/multiple-files.ts +23 -8
  311. package/src/forms/controls/{multiple-photos.ts → multiple-images.ts} +2 -2
  312. package/src/forms/controls/number.ts +1 -1
  313. package/src/forms/controls/simple-input.ts +21 -33
  314. package/src/forms/controls/single-reference.test.ts +1 -1
  315. package/src/forms/controls/single-reference.ts +11 -3
  316. package/src/forms/controls/table.ts +87 -33
  317. package/src/forms/controls/textarea.ts +7 -5
  318. package/src/forms/controls/tickable.ts +13 -7
  319. package/src/forms/fields/boolean.ts +27 -2
  320. package/src/forms/fields/checkboxed-list.ts +11 -2
  321. package/src/forms/fields/collection-field.ts +21 -3
  322. package/src/forms/fields/color.ts +9 -0
  323. package/src/forms/fields/coordinates.ts +66 -0
  324. package/src/forms/fields/date.ts +50 -0
  325. package/src/forms/fields/datetime.ts +66 -0
  326. package/src/forms/fields/deep-reverse-single-reference-list.ts +130 -0
  327. package/src/forms/fields/deep-reverse-single-reference-table.ts +213 -0
  328. package/src/forms/fields/email.ts +10 -1
  329. package/src/forms/fields/enum-multiple-sealious.ts +48 -0
  330. package/src/forms/fields/existing-sealious-value.ts +1 -1
  331. package/src/forms/fields/field.test.ts +8 -8
  332. package/src/forms/fields/field.ts +98 -11
  333. package/src/forms/fields/fields.ts +23 -8
  334. package/src/forms/fields/file.test.ts +5 -17
  335. package/src/forms/fields/file.ts +44 -16
  336. package/src/forms/fields/float.ts +9 -0
  337. package/src/forms/fields/get-field-for-sealious.ts +337 -0
  338. package/src/forms/fields/html.ts +15 -0
  339. package/src/forms/fields/image.ts +12 -0
  340. package/src/forms/fields/int.ts +25 -0
  341. package/src/forms/fields/json.ts +48 -0
  342. package/src/forms/fields/markdown.ts +15 -0
  343. package/src/forms/fields/multiple-files.ts +10 -1
  344. package/src/forms/fields/number.ts +10 -3
  345. package/src/forms/fields/password.ts +13 -0
  346. package/src/forms/fields/pick-from-list-sealious.ts +22 -0
  347. package/src/forms/fields/pick-from-list.ts +8 -4
  348. package/src/forms/fields/proxy-field.ts +7 -1
  349. package/src/forms/fields/regexp.ts +27 -1
  350. package/src/forms/fields/simple-form-field.ts +103 -7
  351. package/src/forms/fields/single-reference.ts +62 -0
  352. package/src/forms/fields/structured-array.ts +111 -18
  353. package/src/forms/fields/table.ts +39 -16
  354. package/src/forms/fields/text.ts +18 -0
  355. package/src/forms/fields/url.ts +20 -0
  356. package/src/forms/form-types.ts +5 -4
  357. package/src/forms/form.test.ts +5 -7
  358. package/src/forms/form.ts +42 -23
  359. package/src/forms/forms.css +0 -85
  360. package/src/forms/multiform.test.ts +9 -9
  361. package/src/forms/multiform.ts +12 -10
  362. package/src/generate-collections.ts +2 -3
  363. package/src/generate-components.ts +2 -3
  364. package/src/generate-routes.test.ts +7 -16
  365. package/src/generate-routes.ts +6 -10
  366. package/src/generate-stimulus.ts +4 -5
  367. package/src/get-fonts.ts +32 -30
  368. package/src/index.ts +2 -1
  369. package/src/make-env.ts +1 -1
  370. package/src/make-hidden-inputs.ts +8 -7
  371. package/src/mount.ts +16 -7
  372. package/src/notifier.ts +4 -7
  373. package/src/page/default-list-filters.ts +1 -0
  374. package/src/page/list.ts +33 -28
  375. package/src/page/mountable-with-fields.test.ts +1 -1
  376. package/src/page/mountable-with-fields.ts +21 -12
  377. package/src/page/mountable.ts +0 -1
  378. package/src/page/page.ts +2 -3
  379. package/src/page/props-parser.ts +1 -1
  380. package/src/page/sealious-list.ts +1 -1
  381. package/src/page/stateful-page.ts +6 -10
  382. package/src/register-external.ts +5 -5
  383. package/src/templates/form.ts +9 -11
  384. package/src/templates/jdd-component.ts +1 -1
  385. package/src/templates/jdd-editor.ts +2 -4
  386. package/src/templates/list.ts +0 -1
  387. package/src/templates/multiform.ts +4 -4
  388. package/src/templates/page.ts +1 -6
  389. package/src/templates/shared/collection-create-form.ts +34 -71
  390. package/src/templates/shared/collection-edit-form.ts +46 -108
  391. package/src/templates/shared/collection-list.ts +13 -21
  392. package/src/templates/shared/item-delete.ts +0 -1
  393. package/src/templates/shared/shared-crud-form-fields.ts +38 -177
  394. package/src/templates/templates.ts +5 -1
  395. package/src/test_utils/exec_async.ts +3 -4
  396. package/src/test_utils/test-on-real-app.ts +13 -14
  397. package/src/utils/browser-creator.js +0 -1
  398. package/src/utils/exec.ts +0 -1
  399. package/src/utils/extract-fields-from-collection.ts +76 -25
  400. package/src/utils/input-wrapper.ts +1 -1
  401. package/src/utils/make-slug.ts +1 -1
  402. package/src/utils/wrap-attributes.ts +17 -0
  403. package/src/utils/write-file.ts +1 -1
  404. package/.eslintrc.cjs +0 -39
  405. package/lib/add-verbose-crud.js +0 -119
  406. package/lib/crud-field-snippets.js +0 -52
  407. package/lib/find-css-includes.js +0 -3
  408. package/lib/forms/controls/reverse-single-reference.js +0 -1
  409. package/lib/forms/fields/enum-multiple.js +0 -47
  410. package/lib/forms/fields/enum-multiple.test.js +0 -27
  411. package/lib/forms/fields/enum.js +0 -41
  412. package/lib/forms/fields/enum.test.js +0 -21
  413. package/lib/forms/fields/reverse-single-reference.js +0 -17
  414. package/lib/templates/shared/handlers/boolean.js +0 -14
  415. package/lib/templates/shared/handlers/date.js +0 -8
  416. package/lib/templates/shared/handlers/deep-reverse-single-reference.js +0 -209
  417. package/lib/templates/shared/handlers/default.js +0 -49
  418. package/lib/templates/shared/handlers/enum.js +0 -19
  419. package/lib/templates/shared/handlers/file.js +0 -23
  420. package/lib/templates/shared/handlers/image.js +0 -32
  421. package/lib/templates/shared/handlers/int.js +0 -11
  422. package/lib/templates/shared/handlers/jdd.js +0 -10
  423. package/lib/templates/shared/handlers/single-reference.js +0 -12
  424. package/lib/templates/shared/handlers/structured-array.js +0 -33
  425. package/src/add-verbose-crud.ts +0 -138
  426. package/src/crud-field-snippets.ts +0 -57
  427. package/src/find-css-includes.ts +0 -3
  428. package/src/forms/controls/reverse-single-reference.ts +0 -50
  429. package/src/forms/fields/enum-multiple.test.ts +0 -31
  430. package/src/forms/fields/enum-multiple.ts +0 -62
  431. package/src/forms/fields/enum.test.ts +0 -25
  432. package/src/forms/fields/enum.ts +0 -56
  433. package/src/forms/fields/reverse-single-reference.ts +0 -20
  434. package/src/templates/shared/handlers/boolean.ts +0 -18
  435. package/src/templates/shared/handlers/date.ts +0 -12
  436. package/src/templates/shared/handlers/deep-reverse-single-reference.ts +0 -244
  437. package/src/templates/shared/handlers/default.ts +0 -64
  438. package/src/templates/shared/handlers/enum.ts +0 -23
  439. package/src/templates/shared/handlers/file.ts +0 -27
  440. package/src/templates/shared/handlers/image.ts +0 -45
  441. package/src/templates/shared/handlers/int.ts +0 -15
  442. package/src/templates/shared/handlers/jdd.ts +0 -14
  443. package/src/templates/shared/handlers/single-reference.ts +0 -16
  444. package/src/templates/shared/handlers/structured-array.ts +0 -42
@@ -13,8 +13,8 @@ import { FlatTemplatable } from "tempstream";
13
13
  export const actionName = "${action_name}";
14
14
 
15
15
  const fields1 = {
16
- email: new Fields.SimpleFormField(true),
17
- password: new Fields.SimpleFormField(true),
16
+ email: new Fields.TextBasedSimpleField(true),
17
+ password: new Fields.TextBasedSimpleField(true),
18
18
  };
19
19
 
20
20
  const form1 = new (class extends Form<typeof fields1, unknown> {
@@ -30,8 +30,8 @@ const form1 = new (class extends Form<typeof fields1, unknown> {
30
30
  })();
31
31
 
32
32
  const fields2 = {
33
- name: new Fields.SimpleFormField(true),
34
- surname: new Fields.SimpleFormField(true),
33
+ name: new Fields.TextBasedSimpleField(true),
34
+ surname: new Fields.TextBasedSimpleField(true),
35
35
  };
36
36
 
37
37
  const form2 = new (class extends Form<typeof fields2, unknown> {
@@ -1,9 +1,4 @@
1
- import { curryImportPath } from "../utils/import-path.js";
2
- export async function pageTemplate(
3
- action_name: string,
4
- newfilefullpath: string
5
- ): Promise<string> {
6
- const rel = curryImportPath(newfilefullpath);
1
+ export async function pageTemplate(action_name: string): Promise<string> {
7
2
  return `import type { Context } from "koa";
8
3
  import { TempstreamJSX } from "tempstream";
9
4
  import { Page } from "@sealcode/sealgen";
@@ -1,10 +1,8 @@
1
1
  import { toKebabCase, toPascalCase } from "js-convert-case";
2
2
  import { formTemplate } from "../form.js";
3
- import { curryImportPath } from "../../utils/import-path.js";
4
3
 
5
- import _locreq from "locreq";
6
4
  import extract_fields_from_collection from "../../utils/extract-fields-from-collection.js";
7
- import { getFieldHandler } from "./shared-crud-form-fields.js";
5
+ import { wrapAttribute } from "../../utils/wrap-attributes.js";
8
6
 
9
7
  export async function createItemFormTemplate(
10
8
  create_action_name: string,
@@ -12,36 +10,22 @@ export async function createItemFormTemplate(
12
10
  collection_name: string,
13
11
  list_action: string
14
12
  ): Promise<string> {
15
- const collection_fields = await extract_fields_from_collection(
16
- collection_name
17
- );
18
- const importPath = curryImportPath(newfilefullpath);
13
+ const collection_fields =
14
+ await extract_fields_from_collection(collection_name);
15
+ const formFieldsVar = `${toPascalCase(collection_name)}FormFields`;
19
16
 
20
- const field_handler_results = await Promise.all(
21
- collection_fields.map((field) =>
22
- getFieldHandler(collection_name, field, importPath)
23
- )
24
- );
25
-
26
- const post_create_actions = field_handler_results
27
- .map(({ post_create }) => post_create)
28
- .filter((e) => e != "");
29
-
30
- return formTemplate(create_action_name, newfilefullpath, {
17
+ return formTemplate(create_action_name, {
31
18
  success_message: "Created!",
32
- postimport: `import {${toPascalCase(
33
- collection_name
34
- )}FormFields, ${toPascalCase(
19
+ postimport: `import {${formFieldsVar}, get${toPascalCase(
35
20
  collection_name
36
21
  )}FormControls }from "./shared.js";
37
22
 
38
- import { ${toPascalCase(collection_name)} } from "${importPath(
39
- "src/back/collections/collections.js"
40
- )}";
41
-
42
- import { ${list_action}URL } from "${importPath("src/back/routes/urls.js")}";
23
+ import { ${toPascalCase(
24
+ collection_name
25
+ )} } from "src/back/collections/collections.js";
43
26
 
44
- import {tempstream} from "tempstream";
27
+ import { ${list_action}URL } from "src/back/routes/urls.js";
28
+ import {tempstream} from "tempstream";
45
29
  `,
46
30
 
47
31
  fields: `...${toPascalCase(collection_name)}FormFields`,
@@ -49,7 +33,7 @@ export async function createItemFormTemplate(
49
33
  new Controls.FormHeader("Create ${toPascalCase(
50
34
  collection_name
51
35
  )}"),
52
- ...${toPascalCase(collection_name)}FormControls`,
36
+ ...get${toPascalCase(collection_name)}FormControls()`,
53
37
 
54
38
  can_access: `canAccess = async (ctx: Context) => {
55
39
  const policy = ${toPascalCase(collection_name)}.getPolicy("create");
@@ -57,53 +41,32 @@ export async function createItemFormTemplate(
57
41
  return { canAccess: response?.allowed || false, message: response?.reason || "" };
58
42
  };`,
59
43
 
60
- get_initial_values: field_handler_results
61
- .filter((r) => !r.hide_initial_value_create)
62
- .map(({ initial_value_create }) => initial_value_create)
63
- .filter((e) => e != "").length
64
- ? `getInitialValues(ctx: Context){
65
- return {
66
- ${field_handler_results
67
- .filter((r) => !r.hide_initial_value_create)
68
- .map(
69
- ({ initial_value_create }) =>
70
- initial_value_create
71
- )
72
- .join(",\n")}
73
- }
74
- }`
75
- : ``,
44
+ get_initial_values: "",
76
45
 
77
46
  onsubmit: `
78
- async onSubmit(ctx: Context) {
79
- const data = await this.getParsedValues(ctx);
80
- if (!data) {
81
- throw new Error("Error when parsing the form values");
82
- }
47
+ async onSubmit(ctx: Context, formData: FormData) {
48
+ const fctx = this.makeFormControlContext(ctx, formData, true);
83
49
 
84
- ${field_handler_results
85
- .map(({ pre_create }) => pre_create)
86
- .filter((e) => e !== "")
87
- .join("\n")}
88
-
89
- ${
90
- post_create_actions.length ? `const created = ` : ""
91
- } await ctx.$app.collections["${toKebabCase(collection_name)}"].create(
50
+ const created = await ctx.$app.collections["${toKebabCase(
51
+ collection_name
52
+ )}"].createExtraSafe(
92
53
  ctx.$context,
93
- {
94
- ${field_handler_results
95
- .filter((result) => !result.hide_sealious_value)
96
- .map((result) => result.sealious_value(result))
97
- .filter((e) => e != "")
98
- .join(",\n")}
99
- }
100
- );
101
- ${
102
- post_create_actions.length
103
- ? `/* ==== POST CREATE ACTIONS ==== */`
104
- : ""
105
- }
106
- ${post_create_actions.join("\n")}
54
+ {
55
+ ${collection_fields
56
+ .map((field_info) =>
57
+ field_info.form_field.generateCreateValueGetter(field_info, {
58
+ form_field_types: formFieldsVar,
59
+ sealious_field: `fields${wrapAttribute(field_info.name)}`,
60
+ form_fields: "fields",
61
+ })
62
+ )
63
+ .join(",\n")}
64
+ });
65
+
66
+ for(const field of Object.values(${formFieldsVar})){
67
+ // eslint-disable-next-line no-await-in-loop
68
+ await field.postSealiousCreate(ctx, created, formData)
69
+ }
107
70
  }
108
71
  `,
109
72
  render: ` async render(ctx: Context, data: FormData, show_field_errors: boolean) {
@@ -1,11 +1,8 @@
1
1
  import { toKebabCase, toPascalCase } from "js-convert-case";
2
2
  import { formTemplate } from "../form.js";
3
- import { curryImportPath } from "../../utils/import-path.js";
4
3
 
5
- import _locreq from "locreq";
6
4
  import extract_fields_from_collection from "../../utils/extract-fields-from-collection.js";
7
-
8
- import { getFieldHandler } from "./shared-crud-form-fields.js";
5
+ import { wrapAttribute } from "../../utils/wrap-attributes.js";
9
6
 
10
7
  export async function editItemFormTemplate(
11
8
  edit_action_name: string,
@@ -13,41 +10,21 @@ export async function editItemFormTemplate(
13
10
  collection_name: string,
14
11
  list_action: string
15
12
  ): Promise<string> {
16
- const collection_fields = await extract_fields_from_collection(
17
- collection_name
18
- );
19
- const importPath = curryImportPath(newfilefullpath);
20
-
21
- const field_handler_results = await Promise.all(
22
- collection_fields.map(async (field) => {
23
- return getFieldHandler(collection_name, field, importPath);
24
- })
25
- );
26
-
27
- return formTemplate(edit_action_name, newfilefullpath, {
13
+ const collection_fields =
14
+ await extract_fields_from_collection(collection_name);
15
+ const formFieldsVar = `${toPascalCase(collection_name)}FormFields`;
16
+ const collectionVar = `${toPascalCase(collection_name)}`;
17
+
18
+ return formTemplate(edit_action_name, {
28
19
  success_message: "Changes saved!",
29
- postimport: `import {${toPascalCase(
30
- collection_name
31
- )}FormFields, ${toPascalCase(
20
+ postimport: `import {${formFieldsVar}, get${toPascalCase(
32
21
  collection_name
33
22
  )}FormControls }from "../shared.js";
34
- import { ${toPascalCase(collection_name)} } from "${importPath(
35
- "src/back/collections/collections.js"
36
- )}";
37
- import { ${list_action}URL, ${edit_action_name}URL } from "${importPath(
38
- "src/back/routes/urls.js"
39
- )}";
40
- import {tempstream} from "tempstream";
41
-
42
- ${Array.from(
43
- new Set(field_handler_results.map(({ imports }) => imports.edit))
44
- ).join("\n")}
45
-
46
- ${
47
- collection_fields.filter((e) => !e.is_required).length
48
- ? `import {withFallback} from "@sealcode/sealgen";`
49
- : ""
50
- }
23
+ import { ${collectionVar} } from "src/back/collections/collections.js";
24
+ import { ${list_action}URL } from "src/back/routes/urls.js";
25
+ import {tempstream} from "tempstream";
26
+ import type { FormDataValue } from "@sealcode/sealgen";
27
+ import type { CollectionInputWithAllKeys } from "sealious";
51
28
  `,
52
29
 
53
30
  fields: `...${toPascalCase(collection_name)}FormFields`,
@@ -55,7 +32,7 @@ export async function editItemFormTemplate(
55
32
  new Controls.FormHeader("Edit ${toPascalCase(
56
33
  collection_name
57
34
  )}"),
58
- ...${toPascalCase(collection_name)}FormControls`,
35
+ ...get${toPascalCase(collection_name)}FormControls()`,
59
36
 
60
37
  can_access: `canAccess = async (ctx: Context) => {
61
38
  const policy = ${toPascalCase(collection_name)}.getPolicy("edit");
@@ -64,8 +41,8 @@ export async function editItemFormTemplate(
64
41
  };`,
65
42
 
66
43
  onsubmit: `
67
- async onSubmit(ctx: Context) {
68
- const data = await this.getParsedValues(ctx);
44
+ async onSubmit(ctx: Context, formData: FormData) {
45
+ const fctx = this.makeFormControlContext(ctx, formData, true);
69
46
  const id = await this.getID(ctx);
70
47
  const {items: [item]} = await ctx.$app.collections["${toKebabCase(
71
48
  collection_name
@@ -78,50 +55,38 @@ export async function editItemFormTemplate(
78
55
  throw new Error("Unknown id: " + id);
79
56
  }
80
57
 
81
- if (!data) {
82
- throw new Error("Error when parsing the form values");
83
- }
84
58
 
85
- ${field_handler_results
86
- .map((result) => result.pre_edit)
87
- .filter((e) => e !== "")
88
- .join("\n")}
89
-
90
- item.setMultiple(
91
- {
92
- ${field_handler_results
93
- .filter((r) => !r.hide_sealious_value)
94
- .map((result) => result.sealious_value(result))
95
- .filter((e) => e != "")
96
- .join(",\n")}
97
- }
59
+ item.setMultipleExtraSafe(
60
+ {
61
+ ${collection_fields
62
+ .map((field_info) =>
63
+ field_info.form_field.generateCreateValueGetter(
64
+ field_info,
65
+ {
66
+ form_field_types: "FormFieldTypes",
67
+ sealious_field: `${collectionVar}.fields${wrapAttribute(
68
+ field_info.name
69
+ )}`,
70
+ form_fields: "fields",
71
+ }
72
+ )
73
+ )
74
+ .join(",\n")}
75
+ } as CollectionInputWithAllKeys<typeof ${collectionVar}>
98
76
  );
77
+
99
78
  await item.save(ctx.$context);
100
79
 
101
-
102
- ${
103
- field_handler_results
104
- .map((result) => result.post_edit)
105
- .filter((e) => e != "").length
106
- ? `// #### POST-EDIT ACTIONS ############`
107
- : ""
80
+ for(const field of Object.values(${formFieldsVar})){
81
+ // eslint-disable-next-line no-await-in-loop
82
+ await field.postSealiousEdit(ctx, item, formData)
108
83
  }
109
- ${field_handler_results
110
- .map((result) => result.post_edit)
111
- .filter((e) => e != "")
112
- .join("\n")}
113
84
  }
114
85
  `,
115
86
 
116
87
  other_methods: `
117
88
  async getID(ctx: Context): Promise<string>{
118
- // trying to automatically guess which param is the one that represents the ID
119
- // of the resource to edit.
120
- // If sealgen got it wrong, just return the param name that should be used here instead
121
- const param_name =
122
- ${edit_action_name}URL.params
123
- .find(param => param.toLowerCase().includes("id"))
124
- || ${edit_action_name}URL.params[0]
89
+ const param_name = "id";
125
90
  const id = ctx.params[param_name];
126
91
  if (!id) {
127
92
  throw new Error("Missing URL parameter: " + param_name);
@@ -130,7 +95,7 @@ export async function editItemFormTemplate(
130
95
  }
131
96
  `,
132
97
 
133
- get_initial_values: `async getInitialValues(ctx: Context) {
98
+ get_initial_values: `async getInitialValues(ctx: Context): Promise<{ [key in keyof typeof fields]: FormDataValue | undefined }> {
134
99
  const id = await this.getID(ctx);
135
100
 
136
101
  const {
@@ -146,42 +111,15 @@ export async function editItemFormTemplate(
146
111
  }
147
112
 
148
113
  return {
149
- ${field_handler_results
150
- .filter((r) => !r.hide_initial_value_edit)
151
- .map(({ initial_value_edit, is_required, name }) => {
152
- if (typeof initial_value_edit == "string") {
153
- if (initial_value_edit == "") {
154
- return "";
155
- }
156
- return `${name}: ${initial_value_edit}`;
157
- }
158
114
 
159
- const main_value = initial_value_edit.main_value;
160
- if (!main_value) {
161
- throw new Error(
162
- "Missing main_value for initial_value_edit"
163
- );
164
- }
165
- const { parsed_value, fallback_value } =
166
- initial_value_edit;
167
- if (is_required) {
168
- return `${name}: ${parsed_value || main_value}`;
169
- }
170
- if (main_value && parsed_value && fallback_value) {
171
- if (main_value == parsed_value) {
172
- return `${name}: withFallback(${main_value}, ${fallback_value})`;
173
- } else {
174
- return `${name}: withFallback(${main_value}, ${parsed_value}, ${fallback_value})`;
175
- }
176
- } else {
177
- console.error(initial_value_edit);
178
- throw new Error(
179
- "Missing field info for generating initial value"
180
- );
181
- }
115
+ ${collection_fields
116
+ .map((field_info) =>
117
+ field_info.form_field.generateInitialValue(field_info, {
118
+ form_field_types: "FieldTypes",
119
+ form_fields: "fields",
182
120
  })
183
- .filter((e) => e.trim() !== "")
184
- .join(",\n")}
121
+ )
122
+ .join(",\n")}
185
123
  };
186
124
  }
187
125
  `,
@@ -60,12 +60,12 @@ export function makeDefaultDisplayFields(
60
60
  return `{
61
61
  field: "${field.name}",
62
62
  label: "${field.name}",
63
- format: async (value: FilePointer) => {
64
- return imageRouter.image(await value.getPath(), {
63
+ format: async (value: FilePointer|null) => {
64
+ return value ? imageRouter.image(await value.getPath(), {
65
65
  container: { width: 45, height: 45 },
66
66
  crop: { width: 45, height: 45 },
67
67
  alt: "",
68
- });
68
+ }): "";
69
69
  },
70
70
  }`;
71
71
  }
@@ -118,7 +118,7 @@ import type { FlatTemplatable, Templatable } from "tempstream";
118
118
  import { TempstreamJSX, tempstream } from "tempstream";
119
119
  import { ${uppercase_collection} } from "src/back/collections/collections.js";
120
120
  import html from "src/back/html.js";
121
- import type { ListFilterRender } from "@sealcode/sealgen";
121
+ import type { ListFilterRender, FormDisplayInfo } from "@sealcode/sealgen";
122
122
  import {
123
123
  SealiousItemListPage,
124
124
  BaseListPageFields,
@@ -131,26 +131,18 @@ ${field_import_string}
131
131
 
132
132
  export const actionName = "${action_name}";
133
133
 
134
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
135
- const filterFields = [
136
- ${makeDefaultFilterFields(collection_fields)}
137
- ] as {
138
- field: keyof (typeof ${uppercase_collection})["fields"];
134
+ const filterFields:{
135
+ field: keyof (typeof ${uppercase_collection})["fields"];
139
136
  render?: ListFilterRender;
140
- prepareValue?: (filter_value: unknown)=>unknown; // set this function to change what filter value is passed to Sealious
141
- }[];
137
+ prepareValue?: (filter_value: unknown) => unknown; // set this function to change what filter value is passed to Sealious
138
+ }[] = [
139
+ ${makeDefaultFilterFields(collection_fields)}
140
+ ];
142
141
 
143
142
 
144
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
145
- const displayFields = [
143
+ const displayFields: FormDisplayInfo<typeof ${uppercase_collection}>[] = [
146
144
  ${makeDefaultDisplayFields(collection_fields)}
147
- ] as {
148
- field: string;
149
- label: string;
150
- format?: (value: unknown, item: CollectionItem<typeof ${toPascalCase(
151
- collection_name
152
- )}>) => FlatTemplatable;
153
- }[];
145
+ ];
154
146
 
155
147
  export default new (class ${action_name}Page extends SealiousItemListPage<
156
148
  typeof ${uppercase_collection},
@@ -215,7 +207,7 @@ export default new (class ${action_name}Page extends SealiousItemListPage<
215
207
  ctx: Context,
216
208
  fields: { field: string; label?: string }[]
217
209
  ): FlatTemplatable {
218
- return tempstream/* HTML */ \`<thead>
210
+ return tempstream /* HTML */ \`<thead>
219
211
  <tr>
220
212
  \${fields.map(({ label, field }) => this.renderHeading(ctx, field, label))}
221
213
  <th>Actions</th>
@@ -1,5 +1,4 @@
1
1
  import { toKebabCase, toPascalCase } from "js-convert-case";
2
- import { curryImportPath } from "../../utils/import-path.js";
3
2
  import { formatWithPrettier } from "../../utils/prettier.js";
4
3
 
5
4
  export function itemDeleteTemplate(