@sealcode/sealgen 0.11.7 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (694) hide show
  1. package/.madgerc +7 -0
  2. package/@types/components/components.d.ts +2 -2
  3. package/@types/components/toggle-modal.d.ts +1 -1
  4. package/@types/example.test.d.ts +1 -0
  5. package/@types/forms/controls/array.d.ts +7 -7
  6. package/@types/forms/controls/autocomplete.d.ts +3 -3
  7. package/@types/forms/controls/big-radio-group.d.ts +3 -3
  8. package/@types/forms/controls/checkbox-group.d.ts +4 -4
  9. package/@types/forms/controls/checkbox.d.ts +3 -3
  10. package/@types/forms/controls/checkboxed-list-input.d.ts +4 -4
  11. package/@types/forms/controls/collapsible-checkbox-group.d.ts +3 -3
  12. package/@types/forms/controls/collapsible-field-group.d.ts +2 -2
  13. package/@types/forms/controls/controls.d.ts +29 -29
  14. package/@types/forms/controls/derived-frame.d.ts +6 -6
  15. package/@types/forms/controls/derived.d.ts +3 -3
  16. package/@types/forms/controls/dropdown.d.ts +4 -4
  17. package/@types/forms/controls/editable-collection-subset.d.ts +3 -3
  18. package/@types/forms/controls/field-group.d.ts +2 -2
  19. package/@types/forms/controls/file.d.ts +5 -5
  20. package/@types/forms/controls/form-control.d.ts +2 -2
  21. package/@types/forms/controls/form-field-control.d.ts +3 -3
  22. package/@types/forms/controls/form-header.d.ts +2 -2
  23. package/@types/forms/controls/form-paragraph.d.ts +1 -1
  24. package/@types/forms/controls/frame.d.ts +1 -1
  25. package/@types/forms/controls/hidden-input.d.ts +3 -3
  26. package/@types/forms/controls/html.d.ts +2 -2
  27. package/@types/forms/controls/multiple-files.d.ts +5 -5
  28. package/@types/forms/controls/multiple-photos.d.ts +5 -5
  29. package/@types/forms/controls/number.d.ts +3 -3
  30. package/@types/forms/controls/photo.d.ts +7 -7
  31. package/@types/forms/controls/radio.d.ts +3 -3
  32. package/@types/forms/controls/reverse-single-reference.d.ts +1 -0
  33. package/@types/forms/controls/simple-input.d.ts +4 -4
  34. package/@types/forms/controls/textarea.d.ts +4 -4
  35. package/@types/forms/controls/tickable.d.ts +4 -4
  36. package/@types/forms/fields/boolean.d.ts +2 -2
  37. package/@types/forms/fields/checkboxed-list.d.ts +2 -2
  38. package/@types/forms/fields/collection-field.d.ts +2 -2
  39. package/@types/forms/fields/email.d.ts +1 -1
  40. package/@types/forms/fields/enum-multiple.d.ts +2 -2
  41. package/@types/forms/fields/enum.d.ts +2 -2
  42. package/@types/forms/fields/existing-sealious-value.d.ts +1 -1
  43. package/@types/forms/fields/field.d.ts +16 -16
  44. package/@types/forms/fields/file.d.ts +2 -2
  45. package/@types/forms/fields/multiple-files.d.ts +1 -1
  46. package/@types/forms/fields/number.d.ts +2 -2
  47. package/@types/forms/fields/pick-from-list.d.ts +3 -3
  48. package/@types/forms/fields/proxy-field.d.ts +1 -1
  49. package/@types/forms/fields/regexp.d.ts +2 -2
  50. package/@types/forms/fields/reverse-single-reference.d.ts +1 -1
  51. package/@types/forms/fields/simple-form-field.d.ts +2 -2
  52. package/@types/forms/fields/structured-array.d.ts +2 -2
  53. package/@types/forms/form.d.ts +3 -3
  54. package/@types/forms/form.test.d.ts +1 -1
  55. package/@types/forms/multiform.d.ts +4 -4
  56. package/@types/index.d.ts +17 -17
  57. package/@types/make-hidden-inputs.d.ts +2 -2
  58. package/@types/mount.d.ts +2 -2
  59. package/@types/page/list.d.ts +4 -4
  60. package/@types/page/mountable-with-fields.d.ts +4 -4
  61. package/@types/page/mountable.d.ts +1 -1
  62. package/@types/page/page.d.ts +4 -4
  63. package/@types/page/props-parser.d.ts +2 -2
  64. package/@types/page/sealious-list.d.ts +1 -1
  65. package/@types/page/stateful-page.d.ts +3 -3
  66. package/@types/remove-named-imports.d.ts +4 -0
  67. package/@types/run.d.ts +1 -0
  68. package/@types/src/add-collection.d.ts +1 -0
  69. package/@types/src/add-jdd-component.d.ts +1 -0
  70. package/@types/src/add-route.d.ts +3 -0
  71. package/@types/src/add-route.test.d.ts +1 -0
  72. package/@types/src/build.d.ts +3 -0
  73. package/@types/src/cli.d.ts +2 -0
  74. package/@types/src/components/components.d.ts +2 -0
  75. package/@types/src/components/tabs.d.ts +2 -0
  76. package/@types/src/components/toggle-modal.d.ts +7 -0
  77. package/@types/src/example.test.d.ts +1 -0
  78. package/@types/src/find-css-includes.d.ts +1 -0
  79. package/@types/src/forms/controls/array.d.ts +35 -0
  80. package/@types/src/forms/controls/autocomplete.d.ts +22 -0
  81. package/@types/src/forms/controls/big-radio-group.d.ts +14 -0
  82. package/@types/src/forms/controls/checkbox-group.d.ts +22 -0
  83. package/@types/src/forms/controls/checkbox.d.ts +15 -0
  84. package/@types/src/forms/controls/checkboxed-list-input.d.ts +14 -0
  85. package/@types/src/forms/controls/collapsible-checkbox-group.d.ts +11 -0
  86. package/@types/src/forms/controls/collapsible-field-group.d.ts +21 -0
  87. package/@types/src/forms/controls/controls.d.ts +29 -0
  88. package/@types/src/forms/controls/derived-frame.d.ts +22 -0
  89. package/@types/src/forms/controls/derived.d.ts +13 -0
  90. package/@types/src/forms/controls/dropdown.d.ts +30 -0
  91. package/@types/src/forms/controls/editable-collection-subset.d.ts +20 -0
  92. package/@types/src/forms/controls/field-group.d.ts +23 -0
  93. package/@types/src/forms/controls/file.d.ts +16 -0
  94. package/@types/src/forms/controls/form-control.d.ts +19 -0
  95. package/@types/src/forms/controls/form-field-control.d.ts +13 -0
  96. package/@types/src/forms/controls/form-header.d.ts +8 -0
  97. package/@types/src/forms/controls/form-paragraph.d.ts +7 -0
  98. package/@types/src/forms/controls/frame.d.ts +17 -0
  99. package/@types/src/forms/controls/hidden-input.d.ts +9 -0
  100. package/@types/src/forms/controls/html.d.ts +11 -0
  101. package/@types/src/forms/controls/multiple-files.d.ts +40 -0
  102. package/@types/src/forms/controls/multiple-photos.d.ts +18 -0
  103. package/@types/src/forms/controls/number.d.ts +13 -0
  104. package/@types/src/forms/controls/photo.d.ts +22 -0
  105. package/@types/src/forms/controls/radio.d.ts +16 -0
  106. package/@types/src/forms/controls/reverse-single-reference.d.ts +1 -0
  107. package/@types/src/forms/controls/simple-input.d.ts +32 -0
  108. package/@types/src/forms/controls/textarea.d.ts +25 -0
  109. package/@types/src/forms/controls/tickable.d.ts +24 -0
  110. package/@types/src/forms/fields/boolean.d.ts +17 -0
  111. package/@types/src/forms/fields/boolean.test.d.ts +1 -0
  112. package/@types/src/forms/fields/checkboxed-list.d.ts +20 -0
  113. package/@types/src/forms/fields/collection-field.d.ts +15 -0
  114. package/@types/src/forms/fields/email.d.ts +7 -0
  115. package/@types/src/forms/fields/email.test.d.ts +1 -0
  116. package/@types/src/forms/fields/enum-multiple.d.ts +18 -0
  117. package/@types/src/forms/fields/enum-multiple.test.d.ts +1 -0
  118. package/@types/src/forms/fields/enum.d.ts +18 -0
  119. package/@types/src/forms/fields/enum.test.d.ts +1 -0
  120. package/@types/src/forms/fields/existing-sealious-value.d.ts +6 -0
  121. package/@types/src/forms/fields/field.d.ts +43 -0
  122. package/@types/src/forms/fields/fields.d.ts +15 -0
  123. package/@types/src/forms/fields/file.d.ts +16 -0
  124. package/@types/src/forms/fields/multiple-files.d.ts +14 -0
  125. package/@types/src/forms/fields/number.d.ts +23 -0
  126. package/@types/src/forms/fields/number.test.d.ts +1 -0
  127. package/@types/src/forms/fields/pick-from-list.d.ts +14 -0
  128. package/@types/src/forms/fields/pick-from-list.test.d.ts +1 -0
  129. package/@types/src/forms/fields/proxy-field.d.ts +13 -0
  130. package/@types/src/forms/fields/regexp.d.ts +16 -0
  131. package/@types/src/forms/fields/regexp.test.d.ts +1 -0
  132. package/@types/src/forms/fields/reverse-single-reference.d.ts +13 -0
  133. package/@types/src/forms/fields/simple-form-field.d.ts +9 -0
  134. package/@types/src/forms/fields/structured-array.d.ts +14 -0
  135. package/@types/src/forms/form-types.d.ts +26 -0
  136. package/@types/src/forms/form.d.ts +31 -0
  137. package/@types/src/forms/form.test.d.ts +6 -0
  138. package/@types/src/forms/multiform.d.ts +24 -0
  139. package/@types/src/forms/multiform.test.d.ts +1 -0
  140. package/@types/src/generate-collections.d.ts +2 -0
  141. package/@types/src/generate-components.d.ts +1 -0
  142. package/@types/src/generate-routes.d.ts +1 -0
  143. package/@types/src/hehe.test.d.ts +1 -0
  144. package/@types/src/index.d.ts +27 -0
  145. package/@types/src/make-env.d.ts +1 -0
  146. package/@types/src/make-hidden-inputs.d.ts +5 -0
  147. package/@types/src/mount.d.ts +6 -0
  148. package/@types/src/notifier.d.ts +1 -0
  149. package/@types/src/page/access-control.d.ts +6 -0
  150. package/@types/src/page/default-list-filters.d.ts +6 -0
  151. package/@types/src/page/list.d.ts +47 -0
  152. package/@types/src/page/mountable-with-fields.d.ts +36 -0
  153. package/@types/src/page/mountable.d.ts +11 -0
  154. package/@types/src/page/page.d.ts +19 -0
  155. package/@types/src/page/props-parser.d.ts +16 -0
  156. package/@types/src/page/sealious-list.d.ts +19 -0
  157. package/@types/src/page/stateful-page.d.ts +34 -0
  158. package/@types/src/run.d.ts +1 -0
  159. package/@types/src/sample-index.d.ts +1 -0
  160. package/@types/src/sample-lib.d.ts +3 -0
  161. package/@types/src/sanitize.d.ts +1 -0
  162. package/@types/src/templates/collection.d.ts +1 -0
  163. package/@types/src/templates/form.d.ts +1 -0
  164. package/@types/src/templates/jdd-component.d.ts +1 -0
  165. package/@types/src/templates/list.d.ts +1 -0
  166. package/@types/src/templates/long-running-process.d.ts +1 -0
  167. package/@types/src/templates/multiform.d.ts +1 -0
  168. package/@types/src/templates/page.d.ts +1 -0
  169. package/@types/src/templates/post.d.ts +1 -0
  170. package/@types/src/templates/redirect.d.ts +1 -0
  171. package/@types/src/templates/route-test.d.ts +1 -0
  172. package/@types/src/templates/stateful-page.d.ts +1 -0
  173. package/@types/src/templates/templates.d.ts +19 -0
  174. package/@types/src/test_utils/locator_is_visible.d.ts +2 -0
  175. package/@types/src/utils/assert-throws.d.ts +1 -0
  176. package/@types/src/utils/base64.d.ts +2 -0
  177. package/@types/src/utils/browser-creator.d.ts +1 -0
  178. package/@types/src/utils/escape-url-params.d.ts +2 -0
  179. package/@types/src/utils/exec.d.ts +5 -0
  180. package/@types/src/utils/extract-fields-from-collection.d.ts +4 -0
  181. package/@types/src/utils/format-external-url.d.ts +1 -0
  182. package/@types/src/utils/import-path.d.ts +2 -0
  183. package/@types/src/utils/input-wrapper.d.ts +5 -0
  184. package/@types/src/utils/list-collections.d.ts +1 -0
  185. package/@types/src/utils/make-slug.d.ts +1 -0
  186. package/@types/src/utils/natural-numbers.d.ts +1 -0
  187. package/@types/src/utils/prettier.d.ts +2 -0
  188. package/@types/src/utils/question.d.ts +1 -0
  189. package/@types/src/utils/render-attributes.d.ts +1 -0
  190. package/@types/src/utils/sleep.d.ts +1 -0
  191. package/@types/src/utils/translate.d.ts +3 -0
  192. package/@types/src/utils/url-with-new-params.d.ts +2 -0
  193. package/@types/src/utils/utils.d.ts +16 -0
  194. package/@types/src/utils/walk.d.ts +1 -0
  195. package/@types/src/vitest.config.d.ts +2 -0
  196. package/@types/templates/templates.d.ts +8 -8
  197. package/@types/utils/input-wrapper.d.ts +1 -1
  198. package/@types/utils/utils.d.ts +12 -12
  199. package/@types/vitest.config.d.ts +2 -0
  200. package/build.js +18 -0
  201. package/coverage/.tmp/coverage-15.json +1 -0
  202. package/coverage/.tmp/coverage-16.json +1 -0
  203. package/coverage/.tmp/coverage-17.json +1 -0
  204. package/coverage/.tmp/coverage-18.json +1 -0
  205. package/coverage/.tmp/coverage-19.json +1 -0
  206. package/coverage/.tmp/coverage-20.json +1 -0
  207. package/coverage/.tmp/coverage-21.json +1 -0
  208. package/coverage/.tmp/coverage-22.json +1 -0
  209. package/coverage/.tmp/coverage-23.json +1 -0
  210. package/coverage/.tmp/coverage-24.json +1 -0
  211. package/coverage/.tmp/coverage-25.json +1 -0
  212. package/coverage/.tmp/coverage-26.json +1 -0
  213. package/dist/add-collection.js +31 -0
  214. package/dist/add-jdd-component.js +42 -0
  215. package/dist/add-route.js +67 -0
  216. package/dist/add-route.test.js +90 -0
  217. package/dist/back/routes/sample.page.js +17 -0
  218. package/dist/back/routes/sample.test.js +39 -0
  219. package/dist/build.js +149 -0
  220. package/dist/cli.js +35 -0
  221. package/dist/components/components.js +3 -0
  222. package/dist/components/tabs.js +101 -0
  223. package/dist/components/toggle-modal.js +49 -0
  224. package/dist/example.test.js +5 -0
  225. package/dist/find-css-includes.js +27 -0
  226. package/dist/forms/controls/array.js +171 -0
  227. package/dist/forms/controls/autocomplete.js +34 -0
  228. package/dist/forms/controls/big-radio-group.js +38 -0
  229. package/dist/forms/controls/checkbox-group.js +46 -0
  230. package/dist/forms/controls/checkbox.js +28 -0
  231. package/dist/forms/controls/checkboxed-list-input.js +44 -0
  232. package/dist/forms/controls/collapsible-checkbox-group.js +16 -0
  233. package/dist/forms/controls/collapsible-field-group.js +87 -0
  234. package/dist/forms/controls/controls.js +44 -0
  235. package/dist/forms/controls/derived-frame.js +77 -0
  236. package/dist/forms/controls/derived.js +81 -0
  237. package/dist/forms/controls/dropdown.js +62 -0
  238. package/dist/forms/controls/editable-collection-subset.js +82 -0
  239. package/dist/forms/controls/field-group.js +52 -0
  240. package/dist/forms/controls/file.js +38 -0
  241. package/dist/forms/controls/form-control.js +19 -0
  242. package/dist/forms/controls/form-field-control.js +12 -0
  243. package/dist/forms/controls/form-header.js +17 -0
  244. package/dist/forms/controls/form-paragraph.js +15 -0
  245. package/dist/forms/controls/frame.js +22 -0
  246. package/dist/forms/controls/hidden-input.js +17 -0
  247. package/dist/forms/controls/html.js +23 -0
  248. package/dist/forms/controls/multiple-files.js +190 -0
  249. package/dist/forms/controls/multiple-photos.js +36 -0
  250. package/dist/forms/controls/number.js +24 -0
  251. package/dist/forms/controls/photo.js +56 -0
  252. package/dist/forms/controls/radio.js +28 -0
  253. package/dist/forms/controls/reverse-single-reference.js +1 -0
  254. package/dist/forms/controls/simple-input.js +85 -0
  255. package/dist/forms/controls/textarea.js +40 -0
  256. package/dist/forms/controls/tickable.js +72 -0
  257. package/dist/forms/fields/boolean.js +49 -0
  258. package/dist/forms/fields/boolean.test.js +33 -0
  259. package/dist/forms/fields/checkboxed-list.js +49 -0
  260. package/dist/forms/fields/collection-field.js +47 -0
  261. package/dist/forms/fields/email.js +19 -0
  262. package/dist/forms/fields/email.test.js +20 -0
  263. package/dist/forms/fields/enum-multiple.js +47 -0
  264. package/dist/forms/fields/enum-multiple.test.js +27 -0
  265. package/dist/forms/fields/enum.js +41 -0
  266. package/dist/forms/fields/enum.test.js +21 -0
  267. package/dist/forms/fields/existing-sealious-value.js +21 -0
  268. package/dist/forms/fields/field.js +82 -0
  269. package/dist/forms/fields/fields.js +16 -0
  270. package/dist/forms/fields/file.js +63 -0
  271. package/dist/forms/fields/multiple-files.js +18 -0
  272. package/dist/forms/fields/number.js +42 -0
  273. package/dist/forms/fields/number.test.js +31 -0
  274. package/dist/forms/fields/pick-from-list.js +34 -0
  275. package/dist/forms/fields/pick-from-list.test.js +17 -0
  276. package/dist/forms/fields/proxy-field.js +23 -0
  277. package/dist/forms/fields/regexp.js +42 -0
  278. package/dist/forms/fields/regexp.test.js +21 -0
  279. package/dist/forms/fields/reverse-single-reference.js +17 -0
  280. package/dist/forms/fields/simple-form-field.js +22 -0
  281. package/dist/forms/fields/structured-array.js +21 -0
  282. package/dist/forms/form-types.js +1 -0
  283. package/dist/forms/form.js +203 -0
  284. package/dist/forms/form.test.js +316 -0
  285. package/dist/forms/multiform.js +200 -0
  286. package/dist/forms/multiform.test.js +486 -0
  287. package/dist/generate-collections.js +65 -0
  288. package/dist/generate-components.js +41 -0
  289. package/dist/generate-routes.js +90 -0
  290. package/dist/hehe.test.js +7 -0
  291. package/dist/index.js +26 -0
  292. package/dist/make-env.js +17 -0
  293. package/dist/make-hidden-inputs.js +15 -0
  294. package/dist/mount.js +66 -0
  295. package/dist/notifier.js +21 -0
  296. package/dist/page/access-control.js +19 -0
  297. package/dist/page/default-list-filters.js +46 -0
  298. package/dist/page/list.js +199 -0
  299. package/dist/page/mountable-with-fields.js +106 -0
  300. package/dist/page/mountable.js +9 -0
  301. package/dist/page/page.js +31 -0
  302. package/dist/page/props-parser.js +24 -0
  303. package/dist/page/sealious-list.js +61 -0
  304. package/dist/page/stateful-page.js +123 -0
  305. package/dist/run.js +1 -0
  306. package/dist/sample-index.js +3 -0
  307. package/dist/sample-lib.js +9 -0
  308. package/dist/sanitize.js +10 -0
  309. package/dist/templates/collection.js +15 -0
  310. package/dist/templates/form.js +60 -0
  311. package/dist/templates/jdd-component.js +44 -0
  312. package/dist/templates/list.js +144 -0
  313. package/dist/templates/long-running-process.js +63 -0
  314. package/dist/templates/multiform.js +58 -0
  315. package/dist/templates/page.js +26 -0
  316. package/dist/templates/post.js +25 -0
  317. package/dist/templates/redirect.js +26 -0
  318. package/dist/templates/route-test.js +61 -0
  319. package/dist/templates/stateful-page.js +69 -0
  320. package/dist/templates/templates.js +24 -0
  321. package/dist/test_utils/locator_is_visible.js +14 -0
  322. package/dist/utils/assert-throws.js +18 -0
  323. package/dist/utils/base64.js +11 -0
  324. package/dist/utils/browser-creator.js +11 -0
  325. package/dist/utils/escape-url-params.js +11 -0
  326. package/dist/utils/exec.js +29 -0
  327. package/dist/utils/extract-fields-from-collection.js +33 -0
  328. package/dist/utils/format-external-url.js +11 -0
  329. package/dist/utils/import-path.js +23 -0
  330. package/dist/utils/input-wrapper.js +19 -0
  331. package/dist/utils/list-collections.js +13 -0
  332. package/dist/utils/make-slug.js +7 -0
  333. package/dist/utils/natural-numbers.js +9 -0
  334. package/dist/utils/prettier.js +15 -0
  335. package/dist/utils/question.js +20 -0
  336. package/dist/utils/render-attributes.js +18 -0
  337. package/dist/utils/sleep.js +7 -0
  338. package/dist/utils/translate.js +12 -0
  339. package/dist/utils/url-with-new-params.js +8 -0
  340. package/dist/utils/utils.js +28 -0
  341. package/dist/utils/walk.js +23 -0
  342. package/dist/vitest.config.js +23 -0
  343. package/lib/add-collection.js +14 -21
  344. package/lib/add-jdd-component.js +17 -24
  345. package/lib/add-route.js +18 -25
  346. package/lib/add-route.test.js +15 -21
  347. package/lib/build.js +51 -56
  348. package/lib/cli.js +20 -21
  349. package/lib/components/components.js +2 -18
  350. package/lib/components/tabs.js +4 -8
  351. package/lib/components/toggle-modal.js +5 -9
  352. package/lib/example.test.js +1 -0
  353. package/lib/find-css-includes.js +9 -16
  354. package/lib/forms/controls/array.js +16 -24
  355. package/lib/forms/controls/autocomplete.js +2 -6
  356. package/lib/forms/controls/big-radio-group.js +5 -9
  357. package/lib/forms/controls/checkbox-group.js +6 -10
  358. package/lib/forms/controls/checkbox.js +3 -8
  359. package/lib/forms/controls/checkboxed-list-input.js +8 -12
  360. package/lib/forms/controls/collapsible-checkbox-group.js +4 -8
  361. package/lib/forms/controls/collapsible-field-group.js +4 -8
  362. package/lib/forms/controls/controls.js +29 -58
  363. package/lib/forms/controls/derived-frame.js +13 -17
  364. package/lib/forms/controls/derived.js +6 -10
  365. package/lib/forms/controls/dropdown.js +7 -12
  366. package/lib/forms/controls/editable-collection-subset.js +7 -11
  367. package/lib/forms/controls/field-group.js +4 -8
  368. package/lib/forms/controls/file.js +4 -8
  369. package/lib/forms/controls/form-control.js +2 -7
  370. package/lib/forms/controls/form-field-control.js +2 -6
  371. package/lib/forms/controls/form-header.js +2 -6
  372. package/lib/forms/controls/form-paragraph.js +2 -6
  373. package/lib/forms/controls/frame.js +2 -6
  374. package/lib/forms/controls/hidden-input.js +5 -9
  375. package/lib/forms/controls/html.js +2 -6
  376. package/lib/forms/controls/multiple-files.js +13 -17
  377. package/lib/forms/controls/multiple-photos.js +4 -8
  378. package/lib/forms/controls/number.js +2 -6
  379. package/lib/forms/controls/photo.js +6 -10
  380. package/lib/forms/controls/radio.js +2 -6
  381. package/lib/forms/controls/reverse-single-reference.js +1 -0
  382. package/lib/forms/controls/simple-input.js +7 -11
  383. package/lib/forms/controls/textarea.js +2 -6
  384. package/lib/forms/controls/tickable.js +7 -11
  385. package/lib/forms/fields/boolean.js +7 -11
  386. package/lib/forms/fields/boolean.test.js +19 -24
  387. package/lib/forms/fields/checkboxed-list.js +7 -11
  388. package/lib/forms/fields/collection-field.js +4 -8
  389. package/lib/forms/fields/email.js +4 -8
  390. package/lib/forms/fields/email.test.js +10 -15
  391. package/lib/forms/fields/enum-multiple.js +7 -11
  392. package/lib/forms/fields/enum-multiple.test.js +15 -20
  393. package/lib/forms/fields/enum.js +6 -10
  394. package/lib/forms/fields/enum.test.js +11 -16
  395. package/lib/forms/fields/existing-sealious-value.js +2 -6
  396. package/lib/forms/fields/field.js +21 -40
  397. package/lib/forms/fields/file.js +15 -19
  398. package/lib/forms/fields/multiple-files.js +2 -6
  399. package/lib/forms/fields/number.js +9 -13
  400. package/lib/forms/fields/number.test.js +18 -23
  401. package/lib/forms/fields/pick-from-list.js +5 -9
  402. package/lib/forms/fields/pick-from-list.test.js +6 -11
  403. package/lib/forms/fields/proxy-field.js +2 -6
  404. package/lib/forms/fields/regexp.js +6 -10
  405. package/lib/forms/fields/regexp.test.js +11 -16
  406. package/lib/forms/fields/reverse-single-reference.js +2 -6
  407. package/lib/forms/fields/simple-form-field.js +5 -8
  408. package/lib/forms/fields/structured-array.js +2 -6
  409. package/lib/forms/form.js +16 -23
  410. package/lib/forms/form.test.js +1 -275
  411. package/lib/forms/multiform.js +10 -14
  412. package/lib/forms/multiform.test.js +65 -70
  413. package/lib/generate-collections.js +12 -43
  414. package/lib/generate-components.js +14 -44
  415. package/lib/generate-routes.js +22 -52
  416. package/lib/index.js +16 -45
  417. package/lib/make-env.js +7 -14
  418. package/lib/make-hidden-inputs.js +6 -10
  419. package/lib/mount.js +5 -9
  420. package/lib/notifier.js +3 -10
  421. package/lib/page/access-control.js +1 -5
  422. package/lib/page/default-list-filters.js +6 -11
  423. package/lib/page/list.js +24 -31
  424. package/lib/page/mountable-with-fields.js +7 -11
  425. package/lib/page/mountable.js +1 -5
  426. package/lib/page/page.js +6 -10
  427. package/lib/page/props-parser.js +4 -12
  428. package/lib/page/sealious-list.js +8 -15
  429. package/lib/page/stateful-page.js +18 -25
  430. package/lib/remove-named-imports.js +47 -0
  431. package/lib/run.js +1 -0
  432. package/lib/sanitize.js +1 -5
  433. package/lib/src/add-collection.js +24 -0
  434. package/lib/src/add-jdd-component.js +27 -0
  435. package/lib/src/add-route.js +65 -0
  436. package/lib/src/add-route.test.js +72 -0
  437. package/lib/src/build.js +142 -0
  438. package/lib/src/cli.js +37 -0
  439. package/lib/src/components/components.js +3 -0
  440. package/lib/src/components/tabs.js +88 -0
  441. package/lib/src/components/toggle-modal.js +46 -0
  442. package/lib/src/example.test.js +5 -0
  443. package/lib/src/find-css-includes.js +23 -0
  444. package/lib/src/forms/controls/array.js +141 -0
  445. package/lib/src/forms/controls/autocomplete.js +23 -0
  446. package/lib/src/forms/controls/big-radio-group.js +34 -0
  447. package/lib/src/forms/controls/checkbox-group.js +30 -0
  448. package/lib/src/forms/controls/checkbox.js +24 -0
  449. package/lib/src/forms/controls/checkboxed-list-input.js +35 -0
  450. package/lib/src/forms/controls/collapsible-checkbox-group.js +13 -0
  451. package/lib/src/forms/controls/collapsible-field-group.js +78 -0
  452. package/lib/src/forms/controls/controls.js +31 -0
  453. package/lib/src/forms/controls/derived-frame.js +52 -0
  454. package/lib/src/forms/controls/derived.js +77 -0
  455. package/lib/src/forms/controls/dropdown.js +55 -0
  456. package/lib/src/forms/controls/editable-collection-subset.js +68 -0
  457. package/lib/src/forms/controls/field-group.js +53 -0
  458. package/lib/src/forms/controls/file.js +35 -0
  459. package/lib/src/forms/controls/form-control.js +14 -0
  460. package/lib/src/forms/controls/form-field-control.js +9 -0
  461. package/lib/src/forms/controls/form-header.js +14 -0
  462. package/lib/src/forms/controls/form-paragraph.js +12 -0
  463. package/lib/src/forms/controls/frame.js +25 -0
  464. package/lib/src/forms/controls/hidden-input.js +14 -0
  465. package/lib/src/forms/controls/html.js +23 -0
  466. package/lib/src/forms/controls/multiple-files.js +160 -0
  467. package/lib/src/forms/controls/multiple-photos.js +33 -0
  468. package/lib/src/forms/controls/number.js +25 -0
  469. package/lib/src/forms/controls/photo.js +57 -0
  470. package/lib/src/forms/controls/radio.js +25 -0
  471. package/lib/src/forms/controls/reverse-single-reference.js +47 -0
  472. package/lib/src/forms/controls/simple-input.js +78 -0
  473. package/lib/src/forms/controls/textarea.js +33 -0
  474. package/lib/src/forms/controls/tickable.js +75 -0
  475. package/lib/src/forms/fields/boolean.js +51 -0
  476. package/lib/src/forms/fields/boolean.test.js +33 -0
  477. package/lib/src/forms/fields/checkboxed-list.js +40 -0
  478. package/lib/src/forms/fields/collection-field.js +29 -0
  479. package/lib/src/forms/fields/email.js +11 -0
  480. package/lib/src/forms/fields/email.test.js +20 -0
  481. package/lib/src/forms/fields/enum-multiple.js +47 -0
  482. package/lib/src/forms/fields/enum-multiple.test.js +27 -0
  483. package/lib/src/forms/fields/enum.js +39 -0
  484. package/lib/src/forms/fields/enum.test.js +21 -0
  485. package/lib/src/forms/fields/existing-sealious-value.js +16 -0
  486. package/lib/src/forms/fields/field.js +66 -0
  487. package/lib/src/forms/fields/fields.js +16 -0
  488. package/lib/src/forms/fields/file.js +53 -0
  489. package/lib/src/forms/fields/multiple-files.js +15 -0
  490. package/lib/src/forms/fields/number.js +45 -0
  491. package/lib/src/forms/fields/number.test.js +31 -0
  492. package/lib/src/forms/fields/pick-from-list.js +31 -0
  493. package/lib/src/forms/fields/pick-from-list.test.js +17 -0
  494. package/lib/src/forms/fields/proxy-field.js +20 -0
  495. package/lib/src/forms/fields/regexp.js +40 -0
  496. package/lib/src/forms/fields/regexp.test.js +21 -0
  497. package/lib/src/forms/fields/reverse-single-reference.js +14 -0
  498. package/lib/src/forms/fields/simple-form-field.js +19 -0
  499. package/lib/src/forms/fields/structured-array.js +18 -0
  500. package/lib/src/forms/form-types.js +2 -0
  501. package/lib/src/forms/form.js +176 -0
  502. package/lib/src/forms/form.test.js +271 -0
  503. package/lib/src/forms/multiform.js +174 -0
  504. package/lib/src/forms/multiform.test.js +430 -0
  505. package/lib/src/generate-collections.js +52 -0
  506. package/lib/src/generate-components.js +33 -0
  507. package/lib/src/generate-routes.js +75 -0
  508. package/lib/src/hehe.test.js +7 -0
  509. package/lib/src/index.js +19 -0
  510. package/lib/src/make-env.js +14 -0
  511. package/lib/src/make-hidden-inputs.js +14 -0
  512. package/lib/src/mount.js +70 -0
  513. package/lib/src/notifier.js +19 -0
  514. package/lib/src/page/access-control.js +16 -0
  515. package/lib/src/page/default-list-filters.js +40 -0
  516. package/lib/src/page/list.js +184 -0
  517. package/lib/src/page/mountable-with-fields.js +85 -0
  518. package/lib/src/page/mountable.js +5 -0
  519. package/lib/src/page/page.js +26 -0
  520. package/lib/src/page/props-parser.js +23 -0
  521. package/lib/src/page/sealious-list.js +59 -0
  522. package/lib/src/page/stateful-page.js +97 -0
  523. package/lib/src/run.js +2 -0
  524. package/lib/src/sample-index.js +3 -0
  525. package/lib/src/sample-lib.js +6 -0
  526. package/lib/src/sanitize.js +10 -0
  527. package/lib/src/templates/collection.js +12 -0
  528. package/lib/src/templates/form.js +57 -0
  529. package/lib/src/templates/jdd-component.js +39 -0
  530. package/lib/src/templates/list.js +139 -0
  531. package/lib/src/templates/long-running-process.js +60 -0
  532. package/lib/src/templates/multiform.js +55 -0
  533. package/lib/src/templates/page.js +23 -0
  534. package/lib/src/templates/post.js +22 -0
  535. package/lib/src/templates/redirect.js +23 -0
  536. package/lib/src/templates/route-test.js +54 -0
  537. package/lib/src/templates/stateful-page.js +66 -0
  538. package/lib/src/templates/templates.js +21 -0
  539. package/lib/src/test_utils/locator_is_visible.js +11 -0
  540. package/lib/src/utils/assert-throws.js +17 -0
  541. package/lib/src/utils/base64.js +7 -0
  542. package/lib/src/utils/browser-creator.js +10 -0
  543. package/lib/src/utils/escape-url-params.js +14 -0
  544. package/lib/src/utils/exec.js +22 -0
  545. package/lib/src/utils/extract-fields-from-collection.js +26 -0
  546. package/lib/src/utils/format-external-url.js +11 -0
  547. package/lib/src/utils/import-path.js +16 -0
  548. package/lib/src/utils/input-wrapper.js +15 -0
  549. package/lib/src/utils/list-collections.js +13 -0
  550. package/lib/src/utils/make-slug.js +6 -0
  551. package/lib/src/utils/natural-numbers.js +6 -0
  552. package/lib/src/utils/prettier.js +10 -0
  553. package/lib/src/utils/question.js +19 -0
  554. package/lib/src/utils/render-attributes.js +19 -0
  555. package/lib/src/utils/sleep.js +4 -0
  556. package/lib/src/utils/translate.js +6 -0
  557. package/lib/src/utils/url-with-new-params.js +5 -0
  558. package/lib/src/utils/utils.js +16 -0
  559. package/lib/src/utils/walk.js +23 -0
  560. package/lib/src/vitest.config.js +20 -0
  561. package/lib/templates/collection.js +1 -5
  562. package/lib/templates/form.js +3 -7
  563. package/lib/templates/jdd-component.js +5 -9
  564. package/lib/templates/list.js +14 -21
  565. package/lib/templates/long-running-process.js +3 -7
  566. package/lib/templates/multiform.js +3 -7
  567. package/lib/templates/page.js +3 -7
  568. package/lib/templates/post.js +1 -5
  569. package/lib/templates/redirect.js +1 -5
  570. package/lib/templates/route-test.js +3 -7
  571. package/lib/templates/stateful-page.js +3 -7
  572. package/lib/templates/templates.js +19 -22
  573. package/lib/test_utils/locator_is_visible.js +3 -7
  574. package/lib/utils/assert-throws.js +3 -10
  575. package/lib/utils/base64.js +2 -7
  576. package/lib/utils/browser-creator.js +3 -7
  577. package/lib/utils/escape-url-params.js +2 -7
  578. package/lib/utils/exec.js +3 -7
  579. package/lib/utils/extract-fields-from-collection.js +9 -15
  580. package/lib/utils/format-external-url.js +1 -5
  581. package/lib/utils/import-path.js +6 -14
  582. package/lib/utils/input-wrapper.js +4 -9
  583. package/lib/utils/list-collections.js +5 -12
  584. package/lib/utils/make-slug.js +1 -5
  585. package/lib/utils/natural-numbers.js +1 -5
  586. package/lib/utils/prettier.js +4 -34
  587. package/lib/utils/question.js +3 -7
  588. package/lib/utils/render-attributes.js +3 -7
  589. package/lib/utils/sleep.js +1 -5
  590. package/lib/utils/translate.js +1 -5
  591. package/lib/utils/url-with-new-params.js +3 -10
  592. package/lib/utils/utils.js +13 -40
  593. package/lib/utils/walk.js +6 -10
  594. package/lib/vitest.config.js +22 -0
  595. package/package.json +23 -22
  596. package/remove-named-imports.js +65 -0
  597. package/src/add-collection.ts +3 -3
  598. package/src/add-jdd-component.ts +3 -3
  599. package/src/add-route.test.ts +38 -10
  600. package/src/add-route.ts +5 -5
  601. package/src/build.ts +46 -90
  602. package/src/cli.ts +14 -13
  603. package/src/components/components.ts +2 -2
  604. package/src/components/toggle-modal.ts +1 -1
  605. package/src/find-css-includes.ts +1 -1
  606. package/src/forms/controls/array.ts +9 -8
  607. package/src/forms/controls/autocomplete.ts +4 -4
  608. package/src/forms/controls/big-radio-group.ts +3 -3
  609. package/src/forms/controls/checkbox-group.ts +7 -6
  610. package/src/forms/controls/checkbox.ts +3 -3
  611. package/src/forms/controls/checkboxed-list-input.ts +4 -6
  612. package/src/forms/controls/collapsible-checkbox-group.ts +4 -7
  613. package/src/forms/controls/collapsible-field-group.ts +2 -2
  614. package/src/forms/controls/controls.ts +29 -29
  615. package/src/forms/controls/derived-frame.ts +4 -4
  616. package/src/forms/controls/derived.ts +3 -3
  617. package/src/forms/controls/dropdown.ts +6 -5
  618. package/src/forms/controls/editable-collection-subset.ts +4 -4
  619. package/src/forms/controls/field-group.ts +2 -4
  620. package/src/forms/controls/file.ts +4 -4
  621. package/src/forms/controls/form-control.ts +1 -1
  622. package/src/forms/controls/form-field-control.ts +3 -4
  623. package/src/forms/controls/form-header.ts +1 -3
  624. package/src/forms/controls/form-paragraph.ts +1 -1
  625. package/src/forms/controls/frame.ts +2 -2
  626. package/src/forms/controls/hidden-input.ts +5 -5
  627. package/src/forms/controls/html.ts +1 -4
  628. package/src/forms/controls/multiple-files.ts +24 -26
  629. package/src/forms/controls/multiple-photos.ts +4 -4
  630. package/src/forms/controls/number.ts +3 -6
  631. package/src/forms/controls/photo.ts +9 -8
  632. package/src/forms/controls/radio.ts +3 -3
  633. package/src/forms/controls/simple-input.ts +6 -6
  634. package/src/forms/controls/textarea.ts +4 -4
  635. package/src/forms/controls/tickable.ts +6 -6
  636. package/src/forms/fields/boolean.test.ts +2 -1
  637. package/src/forms/fields/boolean.ts +2 -2
  638. package/src/forms/fields/checkboxed-list.ts +2 -2
  639. package/src/forms/fields/collection-field.ts +2 -2
  640. package/src/forms/fields/email.test.ts +1 -1
  641. package/src/forms/fields/email.ts +1 -1
  642. package/src/forms/fields/enum-multiple.test.ts +1 -1
  643. package/src/forms/fields/enum-multiple.ts +2 -2
  644. package/src/forms/fields/enum.test.ts +1 -1
  645. package/src/forms/fields/enum.ts +2 -2
  646. package/src/forms/fields/existing-sealious-value.ts +1 -1
  647. package/src/forms/fields/field.ts +2 -18
  648. package/src/forms/fields/fields.ts +15 -0
  649. package/src/forms/fields/file.ts +8 -9
  650. package/src/forms/fields/multiple-files.ts +1 -1
  651. package/src/forms/fields/number.test.ts +2 -1
  652. package/src/forms/fields/number.ts +2 -2
  653. package/src/forms/fields/pick-from-list.test.ts +1 -1
  654. package/src/forms/fields/pick-from-list.ts +3 -3
  655. package/src/forms/fields/proxy-field.ts +1 -1
  656. package/src/forms/fields/regexp.test.ts +1 -1
  657. package/src/forms/fields/regexp.ts +2 -2
  658. package/src/forms/fields/reverse-single-reference.ts +1 -1
  659. package/src/forms/fields/simple-form-field.ts +2 -2
  660. package/src/forms/fields/structured-array.ts +2 -2
  661. package/src/forms/form-types.ts +30 -0
  662. package/src/forms/form.test.ts +16 -13
  663. package/src/forms/form.ts +11 -31
  664. package/src/forms/multiform.test.ts +33 -28
  665. package/src/forms/multiform.ts +4 -3
  666. package/src/generate-collections.ts +1 -1
  667. package/src/generate-components.ts +3 -1
  668. package/src/generate-routes.ts +5 -5
  669. package/src/index.ts +19 -17
  670. package/src/make-hidden-inputs.ts +3 -3
  671. package/src/mount.ts +5 -5
  672. package/src/page/list.ts +8 -6
  673. package/src/page/mountable-with-fields.ts +8 -4
  674. package/src/page/page.ts +3 -4
  675. package/src/page/props-parser.ts +2 -2
  676. package/src/page/sealious-list.ts +2 -2
  677. package/src/page/stateful-page.ts +3 -3
  678. package/src/templates/form.ts +1 -1
  679. package/src/templates/list.ts +6 -6
  680. package/src/templates/long-running-process.ts +1 -1
  681. package/src/templates/multiform.ts +1 -1
  682. package/src/templates/page.ts +1 -1
  683. package/src/templates/route-test.ts +1 -1
  684. package/src/templates/stateful-page.ts +1 -1
  685. package/src/templates/templates.ts +9 -9
  686. package/src/test_utils/locator_is_visible.ts +1 -1
  687. package/src/utils/extract-fields-from-collection.ts +1 -1
  688. package/src/utils/list-collections.ts +1 -1
  689. package/src/utils/prettier.ts +2 -2
  690. package/src/utils/render-attributes.ts +1 -1
  691. package/src/utils/utils.ts +12 -12
  692. package/src/vitest.config.ts +21 -0
  693. package/tsconfig.json +12 -5
  694. package/lib/find-scss-includes.js +0 -30
@@ -1,22 +1,17 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const assert_1 = __importDefault(require("assert"));
7
- const index_1 = require("../../index");
1
+ import assert from "assert";
2
+ import { Fields } from "../../index.js";
8
3
  describe("pick-from-list field", () => {
9
4
  const ctx = {};
10
5
  it("validation logic", async () => {
11
- const field = new index_1.Fields.PickFromListField(true, async () => {
6
+ const field = new Fields.PickFromListField(true, async () => {
12
7
  return [
13
8
  { value: "samplev", label: "samplel" },
14
9
  { value: "samplevv", label: "samplell" },
15
10
  ];
16
11
  });
17
- assert_1.default.strictEqual((await field.isValueValid(ctx, 42)).valid, false);
18
- assert_1.default.strictEqual((await field.isValueValid(ctx, "samplevv")).valid, true);
19
- assert_1.default.strictEqual((await field.isValueValid(ctx, "notvalid")).valid, false);
12
+ assert.strictEqual((await field.isValueValid(ctx, 42)).valid, false);
13
+ assert.strictEqual((await field.isValueValid(ctx, "samplevv")).valid, true);
14
+ assert.strictEqual((await field.isValueValid(ctx, "notvalid")).valid, false);
20
15
  });
21
16
  });
22
17
  //# sourceMappingURL=pick-from-list.test.js.map
@@ -1,8 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ProxyFormField = void 0;
4
- const field_1 = require("./field");
5
- class ProxyFormField extends field_1.FormField {
1
+ import { FormField } from "./field.js";
2
+ export class ProxyFormField extends FormField {
6
3
  constructor(required, name, empty_value, parsed_value) {
7
4
  super(required);
8
5
  this.name = name;
@@ -20,5 +17,4 @@ class ProxyFormField extends field_1.FormField {
20
17
  };
21
18
  }
22
19
  }
23
- exports.ProxyFormField = ProxyFormField;
24
20
  //# sourceMappingURL=proxy-field.js.map
@@ -1,18 +1,15 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RegExpField = void 0;
4
- const ts_predicates_1 = require("@sealcode/ts-predicates");
5
- const field_1 = require("./field");
6
- class RegExpField extends field_1.FormField {
1
+ import { is, predicates } from "@sealcode/ts-predicates";
2
+ import { FormField } from "./field.js";
3
+ export class RegExpField extends FormField {
7
4
  constructor(required, regexp, error_message, default_value = "") {
8
5
  super(required);
9
6
  this.regexp = regexp;
10
7
  this.error_message = error_message;
11
8
  this.default_value = default_value;
12
- this.predicate = ts_predicates_1.predicates.string;
9
+ this.predicate = predicates.string;
13
10
  }
14
11
  async isValueValid(_, value) {
15
- if (!(0, ts_predicates_1.is)(value, ts_predicates_1.predicates.string)) {
12
+ if (!is(value, predicates.string)) {
16
13
  return { valid: false, message: "expected a string" };
17
14
  }
18
15
  if (this.regexp.exec(value)) {
@@ -21,7 +18,7 @@ class RegExpField extends field_1.FormField {
21
18
  return { valid: false, message: this.error_message };
22
19
  }
23
20
  async parse(_, value) {
24
- if ((0, ts_predicates_1.is)(value, ts_predicates_1.predicates.string)) {
21
+ if (is(value, predicates.string)) {
25
22
  return {
26
23
  parsable: true,
27
24
  parsed_value: value,
@@ -40,5 +37,4 @@ class RegExpField extends field_1.FormField {
40
37
  return this.default_value || "";
41
38
  }
42
39
  }
43
- exports.RegExpField = RegExpField;
44
40
  //# sourceMappingURL=regexp.js.map
@@ -1,26 +1,21 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const assert_1 = __importDefault(require("assert"));
7
- const index_1 = require("../../index");
1
+ import assert from "assert";
2
+ import { Fields } from "../../index.js";
8
3
  describe("regexp field", () => {
9
4
  const ctx = {};
10
5
  it("validation logic", async () => {
11
- const field = new index_1.Fields.RegExpField(true, /^4/, "error");
12
- assert_1.default.strictEqual((await field.isValueValid(ctx, "42")).valid, true);
13
- assert_1.default.strictEqual((await field.isValueValid(ctx, "notvalid")).valid, false);
14
- assert_1.default.strictEqual((await field.isValueValid(ctx, 42)).valid, false);
6
+ const field = new Fields.RegExpField(true, /^4/, "error");
7
+ assert.strictEqual((await field.isValueValid(ctx, "42")).valid, true);
8
+ assert.strictEqual((await field.isValueValid(ctx, "notvalid")).valid, false);
9
+ assert.strictEqual((await field.isValueValid(ctx, 42)).valid, false);
15
10
  });
16
11
  it("parse function", async () => {
17
- const field = new index_1.Fields.RegExpField(true, /^4/, "error");
12
+ const field = new Fields.RegExpField(true, /^4/, "error");
18
13
  const string_response = await field.parse(ctx, "42");
19
14
  const number_response = await field.parse(ctx, 42);
20
- assert_1.default.strictEqual(string_response.parsable, true);
21
- assert_1.default.strictEqual(string_response.parsed_value, "42");
22
- assert_1.default.strictEqual(number_response.parsable, false);
23
- assert_1.default.strictEqual(number_response.error, "Please enter a string");
15
+ assert.strictEqual(string_response.parsable, true);
16
+ assert.strictEqual(string_response.parsed_value, "42");
17
+ assert.strictEqual(number_response.parsable, false);
18
+ assert.strictEqual(number_response.error, "Please enter a string");
24
19
  });
25
20
  });
26
21
  //# sourceMappingURL=regexp.test.js.map
@@ -1,8 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ReverseSingleReference = void 0;
4
- const field_1 = require("./field");
5
- class ReverseSingleReference extends field_1.FormField {
1
+ import { FormField } from "./field.js";
2
+ export class ReverseSingleReference extends FormField {
6
3
  constructor(required, sealious_field) {
7
4
  super(required);
8
5
  this.sealious_field = sealious_field;
@@ -14,5 +11,4 @@ class ReverseSingleReference extends field_1.FormField {
14
11
  return [];
15
12
  }
16
13
  }
17
- exports.ReverseSingleReference = ReverseSingleReference;
18
14
  //# sourceMappingURL=reverse-single-reference.js.map
@@ -1,9 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SimpleFormField = void 0;
4
- const field_1 = require("./field");
5
- const ts_predicates_1 = require("@sealcode/ts-predicates");
6
- class SimpleFormField extends field_1.FormField {
1
+ import { FormField } from "./field.js";
2
+ import { predicates } from "@sealcode/ts-predicates";
3
+ console.log({ FormField });
4
+ export class SimpleFormField extends FormField {
7
5
  async parse(_, raw_value) {
8
6
  return {
9
7
  parsed_value: (raw_value || "").toString(),
@@ -16,8 +14,7 @@ class SimpleFormField extends field_1.FormField {
16
14
  }
17
15
  constructor(required) {
18
16
  super(required);
19
- this.predicate = ts_predicates_1.predicates.string;
17
+ this.predicate = predicates.string;
20
18
  }
21
19
  }
22
- exports.SimpleFormField = SimpleFormField;
23
20
  //# sourceMappingURL=simple-form-field.js.map
@@ -1,8 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StructuredArrayField = void 0;
4
- const field_1 = require("./field");
5
- class StructuredArrayField extends field_1.FormField {
1
+ import { FormField } from "./field.js";
2
+ export class StructuredArrayField extends FormField {
6
3
  constructor(sealious_field) {
7
4
  super(true);
8
5
  this.sealious_field = sealious_field;
@@ -18,5 +15,4 @@ class StructuredArrayField extends field_1.FormField {
18
15
  return [];
19
16
  }
20
17
  }
21
- exports.StructuredArrayField = StructuredArrayField;
22
18
  //# sourceMappingURL=structured-array.js.map
package/lib/forms/form.js CHANGED
@@ -1,22 +1,16 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.Form = void 0;
7
- const crypto_1 = require("crypto");
8
- const router_1 = __importDefault(require("@koa/router"));
9
- const tempstream_1 = require("tempstream");
10
- const ts_predicates_1 = require("@sealcode/ts-predicates");
11
- const mountable_with_fields_1 = require("../page/mountable-with-fields");
12
- class Form extends mountable_with_fields_1.MountableWithFields {
1
+ import { randomUUID } from "crypto";
2
+ import Router from "@koa/router";
3
+ import { tempstream } from "tempstream";
4
+ import { hasFieldOfType, hasShape, is, predicates, } from "@sealcode/ts-predicates";
5
+ import { MountableWithFields, } from "../page/mountable-with-fields.js";
6
+ export class Form extends MountableWithFields {
13
7
  constructor() {
14
8
  super(...arguments);
15
9
  this.defaultSuccessMessage = "Done";
16
10
  this.submitButtonText = "Wyślij";
17
11
  this.action = "./";
18
12
  this.useTurbo = true;
19
- this.form_id = (0, crypto_1.randomUUID)();
13
+ this.form_id = randomUUID();
20
14
  }
21
15
  async canAccess(
22
16
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -24,7 +18,7 @@ class Form extends mountable_with_fields_1.MountableWithFields {
24
18
  return { canAccess: true, message: "" };
25
19
  }
26
20
  async renderError(_, error) {
27
- return (0, tempstream_1.tempstream /* HTML */) `<div>${error.message}</div>`;
21
+ return tempstream /* HTML */ `<div>${error.message}</div>`;
28
22
  }
29
23
  makeSubmitButton() {
30
24
  return /* HTML */ `<input
@@ -35,7 +29,7 @@ class Form extends mountable_with_fields_1.MountableWithFields {
35
29
  />`;
36
30
  }
37
31
  async render(ctx, data, show_field_errors) {
38
- return (0, tempstream_1.tempstream /* HTML */) `<div class="form-container">
32
+ return tempstream /* HTML */ `<div class="form-container">
39
33
  ${this.makeOpenFormTag(ctx)}
40
34
  ${!this.controls.some((control) => control.role == "messages")
41
35
  ? this.renderMessages(ctx, data)
@@ -52,7 +46,7 @@ class Form extends mountable_with_fields_1.MountableWithFields {
52
46
  return [];
53
47
  }
54
48
  makeOpenFormTag(ctx) {
55
- return (0, tempstream_1.tempstream) `<form enctype="multipart/form-data" method="POST" id="${this.form_id}" action="${this.action}" class="${this.makeFormClasses(ctx).then((classes) => classes.join(" "))}" ${this.useTurbo ? "" : `data-turbo="false"`}></form><div class="form">`;
49
+ return tempstream `<form enctype="multipart/form-data" method="POST" id="${this.form_id}" action="${this.action}" class="${this.makeFormClasses(ctx).then((classes) => classes.join(" "))}" ${this.useTurbo ? "" : `data-turbo="false"`}></form><div class="form">`;
56
50
  }
57
51
  makeCloseFormTag() {
58
52
  return `</div>`;
@@ -72,8 +66,8 @@ class Form extends mountable_with_fields_1.MountableWithFields {
72
66
  }
73
67
  async onError(ctx, data, error) {
74
68
  let error_message = "Unknown error has occured";
75
- if ((0, ts_predicates_1.is)(error, ts_predicates_1.predicates.object) &&
76
- (0, ts_predicates_1.hasShape)({ message: ts_predicates_1.predicates.string }, error)) {
69
+ if (is(error, predicates.object) &&
70
+ hasShape({ message: predicates.string }, error)) {
77
71
  error_message = error.message;
78
72
  }
79
73
  const messages = [{ type: "error", text: error_message }];
@@ -121,10 +115,10 @@ class Form extends mountable_with_fields_1.MountableWithFields {
121
115
  catch (e) {
122
116
  // eslint-disable-next-line no-console
123
117
  console.dir(e, { depth: 5 });
124
- const message = (0, ts_predicates_1.is)(e, ts_predicates_1.predicates.object) &&
125
- (0, ts_predicates_1.hasFieldOfType)(e, "message", ts_predicates_1.predicates.string)
118
+ const message = is(e, predicates.object) &&
119
+ hasFieldOfType(e, "message", predicates.string)
126
120
  ? e?.message
127
- : (0, ts_predicates_1.is)(e, ts_predicates_1.predicates.string)
121
+ : is(e, predicates.string)
128
122
  ? e
129
123
  : "Wystąpił błąd";
130
124
  return this.onError(ctx, {
@@ -169,7 +163,7 @@ class Form extends mountable_with_fields_1.MountableWithFields {
169
163
  ctx.redirect(reaction.url);
170
164
  }
171
165
  });
172
- const subrouter = new router_1.default(); // for use with other subroutes that individual controls might register
166
+ const subrouter = new Router(); // for use with other subroutes that individual controls might register
173
167
  for (const control of this.controls) {
174
168
  control.mount(subrouter);
175
169
  }
@@ -179,5 +173,4 @@ class Form extends mountable_with_fields_1.MountableWithFields {
179
173
  return ctx.$body;
180
174
  }
181
175
  }
182
- exports.Form = Form;
183
176
  //# sourceMappingURL=form.js.map
@@ -1,275 +1 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.form_factory = void 0;
7
- const router_1 = __importDefault(require("@koa/router"));
8
- const axios_1 = __importDefault(require("axios"));
9
- const koa_1 = __importDefault(require("koa"));
10
- const index_1 = require("../index");
11
- const mount_1 = require("../mount");
12
- const locator_is_visible_1 = require("../test_utils/locator_is_visible");
13
- const browser_creator_1 = require("../utils/browser-creator");
14
- const utils_1 = require("../utils/utils");
15
- const fields = {
16
- text: new index_1.Fields.SimpleFormField(true),
17
- };
18
- function form_factory(canAccessFun) {
19
- const result = new (class extends index_1.Form {
20
- constructor() {
21
- super(...arguments);
22
- this.fields = fields;
23
- this.submitButtonText = "Submit";
24
- this.controls = [
25
- new index_1.Controls.SimpleInput(fields.text, {
26
- label: "This is a test:",
27
- type: "password",
28
- }),
29
- ];
30
- }
31
- async onSubmit() {
32
- return;
33
- }
34
- })();
35
- if (canAccessFun)
36
- result.canAccess = canAccessFun;
37
- return result;
38
- }
39
- exports.form_factory = form_factory;
40
- describe("form test", () => {
41
- let page;
42
- before(async () => {
43
- const browser = await (0, browser_creator_1.getBrowser)();
44
- const context = await browser.newContext();
45
- page = await context.newPage();
46
- });
47
- describe("basic tests", async () => {
48
- let server;
49
- before(async () => {
50
- const app = new koa_1.default();
51
- const router = new router_1.default();
52
- (0, mount_1.mount)(router, "/", form_factory(), true);
53
- app.use(router.routes()).use(router.allowedMethods());
54
- server = app.listen(8080);
55
- await page.goto("http://localhost:8080");
56
- });
57
- after(async () => {
58
- server.close();
59
- });
60
- it("does not allow to submit an empty form when there's a required field", async () => {
61
- await page.getByRole("button", { name: "Submit", exact: true }).click();
62
- await (0, utils_1.assertThrowsAsync)(async () => {
63
- return page.getByText("Done").click({ timeout: 500 });
64
- });
65
- });
66
- it("allows to submit a form when all required fields have a value", async () => {
67
- await page.getByPlaceholder("password").click();
68
- await page.getByPlaceholder("password").fill("testpasswd");
69
- await page.getByRole("button", { name: "Submit", exact: true }).click();
70
- await page.getByText("Done").click();
71
- });
72
- it("does not allow submitting an empty form by circumventing HTML-based validation", async () => {
73
- const res_axios = await axios_1.default.post("http://localhost:8080", {
74
- text: "",
75
- }, {
76
- validateStatus: (status) => {
77
- if (status == 422)
78
- return true;
79
- return false;
80
- },
81
- });
82
- if (!res_axios.data.includes("Some fields are invalid")) {
83
- throw new Error("when sending a empty request with axios, the error didnt appear");
84
- }
85
- });
86
- });
87
- describe("canAccess tests", async () => {
88
- let server;
89
- afterEach(async () => {
90
- server.close();
91
- });
92
- it("allows visit when configured when canAccess returns true", async () => {
93
- const app = new koa_1.default();
94
- const router = new router_1.default();
95
- (0, mount_1.mount)(router, "/", form_factory(async (ctx) => {
96
- return { canAccess: true, message: "" };
97
- }), true);
98
- app.use(router.routes()).use(router.allowedMethods());
99
- server = app.listen(8080);
100
- const response = await page.goto("http://localhost:8080");
101
- if (response?.status() != 200) {
102
- throw new Error(`Should return 200 status and it returns ${response?.status()}`);
103
- }
104
- });
105
- describe("declines access when canAccess returns false", async () => {
106
- const app = new koa_1.default();
107
- const router = new router_1.default();
108
- before(async () => {
109
- (0, mount_1.mount)(router, "/", form_factory(async (ctx) => {
110
- return { canAccess: false, message: "" };
111
- }), true);
112
- app.use(router.routes()).use(router.allowedMethods());
113
- });
114
- beforeEach(async () => {
115
- server = app.listen(8080);
116
- });
117
- it("prevents the form from rendering", async () => {
118
- const response = await page.goto("http://localhost:8080");
119
- if (response?.status() != 403) {
120
- throw new Error(`Should return 403 status and it returns ${response?.status()}`);
121
- }
122
- });
123
- it("does not allow submitting of the form through axios", async () => {
124
- await axios_1.default.post("http://localhost:8080", {
125
- text: "sample",
126
- }, {
127
- validateStatus: (status) => {
128
- if (status == 403)
129
- return true;
130
- return false;
131
- },
132
- });
133
- });
134
- });
135
- it("passes the context to canAccess (false case)", async () => {
136
- const app = new koa_1.default();
137
- const router = new router_1.default();
138
- (0, mount_1.mount)(router, "/", form_factory(async (ctx) => {
139
- return ctx.$context && ctx.$context.user_id
140
- ? { canAccess: true, message: "" }
141
- : { canAccess: false, message: "" };
142
- }), true);
143
- app.use(router.routes()).use(router.allowedMethods());
144
- server = app.listen(8080);
145
- const response = await page.goto("http://localhost:8080");
146
- if (response?.status() != 403) {
147
- throw new Error(`Should return 403 status and it returns ${response?.status()}`);
148
- }
149
- });
150
- it("passes the context to canAccess (true case)", async () => {
151
- const app = new koa_1.default();
152
- const router = new router_1.default();
153
- router.use(async (ctx, next) => {
154
- ctx.$context = {
155
- user_id: "miguel",
156
- };
157
- await next();
158
- });
159
- (0, mount_1.mount)(router, "/", form_factory(async (ctx) => {
160
- return ctx.$context && ctx.$context.user_id
161
- ? { canAccess: true, message: "" }
162
- : { canAccess: false, message: "" };
163
- }), true);
164
- app.use(router.routes()).use(router.allowedMethods());
165
- server = app.listen(8080);
166
- const response = await page.goto("http://localhost:8080");
167
- if (response?.status() != 200) {
168
- throw new Error(`Should return 200 status and it returns ${response?.status()}`);
169
- }
170
- });
171
- });
172
- describe("validation e2e", async () => {
173
- describe("validation message", async () => {
174
- let server;
175
- before(async () => {
176
- const app = new koa_1.default();
177
- const router = new router_1.default();
178
- (0, mount_1.mount)(router, "/", new (class extends index_1.Form {
179
- constructor() {
180
- super(...arguments);
181
- this.fields = fields;
182
- this.submitButtonText = "Submit";
183
- this.controls = [
184
- new index_1.Controls.SimpleInput(fields.text, {
185
- label: "This is a test:",
186
- type: "password",
187
- }),
188
- ];
189
- }
190
- async onSubmit() {
191
- return;
192
- }
193
- async validateValues(ctx, data) {
194
- if (data.text === "incorrect")
195
- return {
196
- valid: false,
197
- error: "Incorrect input",
198
- };
199
- return { valid: true, error: "" };
200
- }
201
- })(), true);
202
- app.use(router.routes()).use(router.allowedMethods());
203
- server = app.listen(8080);
204
- await page.goto("http://localhost:8080");
205
- });
206
- after(async () => {
207
- server.close();
208
- });
209
- it("shows up when incorrect input is given", async () => {
210
- await page.getByPlaceholder("password").click();
211
- await page.getByPlaceholder("password").fill("incorrect");
212
- await page.getByRole("button", { name: "Submit" }).click();
213
- if (!(await (0, locator_is_visible_1.locator_is_visible)(page.getByText("Incorrect input"))))
214
- throw new Error("validation message doens't show up when input is incorrect");
215
- });
216
- it("doesn't show when correct input is given", async () => {
217
- await page.getByPlaceholder("password").click();
218
- await page.getByPlaceholder("password").fill("correct");
219
- await page.getByRole("button", { name: "Submit" }).click();
220
- await (0, utils_1.assertThrowsAsync)(async () => {
221
- return page.getByText("Incorrect input").click({ timeout: 500 });
222
- });
223
- });
224
- });
225
- describe("field specific validation message", async () => {
226
- let server;
227
- before(async () => {
228
- const app = new koa_1.default();
229
- const router = new router_1.default();
230
- const fields = {
231
- text: new index_1.Fields.EmailField(true),
232
- };
233
- (0, mount_1.mount)(router, "/", new (class extends index_1.Form {
234
- constructor() {
235
- super(...arguments);
236
- this.fields = fields;
237
- this.submitButtonText = "Submit";
238
- this.controls = [
239
- new index_1.Controls.SimpleInput(fields.text, {
240
- label: "This is a test:",
241
- type: "text",
242
- }),
243
- ];
244
- }
245
- async onSubmit() {
246
- return;
247
- }
248
- })(), true);
249
- app.use(router.routes()).use(router.allowedMethods());
250
- server = app.listen(8080);
251
- await page.goto("http://localhost:8080");
252
- });
253
- after(async () => {
254
- server.close();
255
- });
256
- it("shows up when incorrect input is given", async () => {
257
- await page.getByPlaceholder("text").click();
258
- await page.getByPlaceholder("text").fill("notanemail");
259
- await page.getByRole("button", { name: "Submit" }).click();
260
- await page.getByText("Please enter a proper email address").click();
261
- });
262
- it("doesn't show up when correct input is given", async () => {
263
- await page.getByPlaceholder("text").click();
264
- await page.getByPlaceholder("text").fill("yes@an.email");
265
- await page.getByRole("button", { name: "Submit" }).click();
266
- (0, utils_1.assertThrowsAsync)(async () => {
267
- return page
268
- .getByText("Please enter a proper email address")
269
- .click({ timeout: 500 });
270
- });
271
- });
272
- });
273
- });
274
- });
275
- //# sourceMappingURL=form.test.js.map
1
+
@@ -1,12 +1,9 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Multiform = void 0;
4
- const ts_predicates_1 = require("@sealcode/ts-predicates");
5
- const tempstream_1 = require("tempstream");
6
- const mountable_with_fields_1 = require("../page/mountable-with-fields");
7
- const sanitize_1 = require("../sanitize");
1
+ import { is, predicates } from "@sealcode/ts-predicates";
2
+ import { tempstream } from "tempstream";
3
+ import { MountableWithFields } from "../page/mountable-with-fields.js";
4
+ import { attribute } from "../sanitize.js";
8
5
  const FIELD_PREFIX_SEPARATOR = "___";
9
- class Multiform extends mountable_with_fields_1.MountableWithFields {
6
+ export class Multiform extends MountableWithFields {
10
7
  constructor() {
11
8
  super(...arguments);
12
9
  this.controls = [];
@@ -14,8 +11,8 @@ class Multiform extends mountable_with_fields_1.MountableWithFields {
14
11
  init() {
15
12
  super.init();
16
13
  for (const [key, form] of Object.entries(this.forms)) {
17
- if (key !== (0, sanitize_1.attribute)(key)) {
18
- throw new Error(`Form name "${key}" is not url-safe. Try: "${(0, sanitize_1.attribute)(key)}"`);
14
+ if (key !== attribute(key)) {
15
+ throw new Error(`Form name "${key}" is not url-safe. Try: "${attribute(key)}"`);
19
16
  }
20
17
  form.makeOpenFormTag = () => `<div>`;
21
18
  form.makeCloseFormTag = () => `</div>`;
@@ -53,7 +50,7 @@ class Multiform extends mountable_with_fields_1.MountableWithFields {
53
50
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
54
51
  getSubformsToRender(ctx) {
55
52
  const requested_frame = ctx.headers["turbo-frame"];
56
- if (!(0, ts_predicates_1.is)(requested_frame, ts_predicates_1.predicates.or(ts_predicates_1.predicates.undefined, ts_predicates_1.predicates.string))) {
53
+ if (!is(requested_frame, predicates.or(predicates.undefined, predicates.string))) {
57
54
  throw new Error("Wrong turbo-frame header value type");
58
55
  }
59
56
  const forms_to_render = requested_frame && this.forms[requested_frame]
@@ -82,7 +79,7 @@ class Multiform extends mountable_with_fields_1.MountableWithFields {
82
79
  return result;
83
80
  }
84
81
  async render(ctx, messages, prerenderedForms = {}, show_field_errors) {
85
- return (0, tempstream_1.tempstream /* HTML */) `${this.renderMessages(ctx, {
82
+ return tempstream /* HTML */ `${this.renderMessages(ctx, {
86
83
  raw_values: {},
87
84
  messages,
88
85
  })}
@@ -96,7 +93,7 @@ class Multiform extends mountable_with_fields_1.MountableWithFields {
96
93
  ></form>
97
94
  ${this.getSubformsToRender(ctx).map(([form_name]) => {
98
95
  const frame_form_id = this.name + "_" + form_name + "_frame_form";
99
- return (0, tempstream_1.tempstream /* HTML */) `<turbo-frame
96
+ return tempstream /* HTML */ `<turbo-frame
100
97
  id="${form_name}"
101
98
  contains-subform
102
99
  subform-id="${frame_form_id}"
@@ -174,5 +171,4 @@ class Multiform extends mountable_with_fields_1.MountableWithFields {
174
171
  }
175
172
  }
176
173
  }
177
- exports.Multiform = Multiform;
178
174
  //# sourceMappingURL=multiform.js.map