@sealcode/sealgen 0.8.44 → 0.8.48

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 (423) hide show
  1. package/@types/index.d.ts +1 -0
  2. package/@types/page/stateful-page.d.ts +34 -0
  3. package/@types/templates/stateful-page.d.ts +1 -0
  4. package/@types/utils/base64.d.ts +2 -0
  5. package/@types/utils/utils.d.ts +3 -0
  6. package/lib/add-route.js +3 -0
  7. package/lib/generate-routes.js +2 -1
  8. package/lib/index.js +1 -0
  9. package/lib/make-env.js +1 -1
  10. package/lib/mount.js +1 -1
  11. package/lib/page/stateful-page.js +117 -0
  12. package/lib/templates/stateful-page.js +66 -0
  13. package/lib/utils/base64.js +12 -0
  14. package/lib/utils/utils.js +6 -1
  15. package/package.json +2 -1
  16. package/tsconfig.json +0 -1
  17. package/.arcconfig +0 -12
  18. package/.arclint +0 -18
  19. package/.eslintrc.js +0 -38
  20. package/.mocharc.js +0 -10
  21. package/.nyc_output/00b15432-2e8d-4b16-9dd6-7e23314363c9.json +0 -1
  22. package/.nyc_output/0190dc00-d309-48d0-a5db-e9484e3c7334.json +0 -1
  23. package/.nyc_output/04bfea78-9274-4d35-b7e4-d0bf42636911.json +0 -1
  24. package/.nyc_output/0d4efe84-14e0-4bf0-bf22-b95472fe2be4.json +0 -1
  25. package/.nyc_output/1faea508-9cb4-46f4-b7ad-94a816e1ee7d.json +0 -1
  26. package/.nyc_output/2b2df469-dc31-48c9-ab34-68a74266e2c2.json +0 -1
  27. package/.nyc_output/32b5e63b-c8f8-4d9d-a09b-d97656c0e3f6.json +0 -1
  28. package/.nyc_output/442ce939-4f43-496b-a8a9-2f1fb9cfa619.json +0 -1
  29. package/.nyc_output/4573bb03-90d4-4408-ba15-b6835c618b33.json +0 -1
  30. package/.nyc_output/468fbd9c-6a27-4e33-8423-dbaec01e62a9.json +0 -1
  31. package/.nyc_output/51894388-b88d-4f0b-8d5b-4a1dd71cf668.json +0 -1
  32. package/.nyc_output/56263b22-3ed5-4ce2-9bbb-f2c9575cdeee.json +0 -1
  33. package/.nyc_output/6934a9dd-6431-48aa-93f1-4eeef0095773.json +0 -1
  34. package/.nyc_output/70979008-f285-481b-bb09-ca48a1376f81.json +0 -1
  35. package/.nyc_output/817c9485-a0ef-486d-8dee-906456fe77fb.json +0 -1
  36. package/.nyc_output/9f725153-f783-4948-81d3-c4cc792738bf.json +0 -1
  37. package/.nyc_output/cd4d852c-f8fc-4cb1-807b-7d053a0ef8fc.json +0 -1
  38. package/.nyc_output/ec3011f0-8180-492e-8d85-4d92484ccb44.json +0 -1
  39. package/.nyc_output/f78b831a-65ca-497d-9f9e-001a3efa6f54.json +0 -1
  40. package/.nyc_output/processinfo/00b15432-2e8d-4b16-9dd6-7e23314363c9.json +0 -1
  41. package/.nyc_output/processinfo/0190dc00-d309-48d0-a5db-e9484e3c7334.json +0 -1
  42. package/.nyc_output/processinfo/04bfea78-9274-4d35-b7e4-d0bf42636911.json +0 -1
  43. package/.nyc_output/processinfo/0d4efe84-14e0-4bf0-bf22-b95472fe2be4.json +0 -1
  44. package/.nyc_output/processinfo/1faea508-9cb4-46f4-b7ad-94a816e1ee7d.json +0 -1
  45. package/.nyc_output/processinfo/2b2df469-dc31-48c9-ab34-68a74266e2c2.json +0 -1
  46. package/.nyc_output/processinfo/32b5e63b-c8f8-4d9d-a09b-d97656c0e3f6.json +0 -1
  47. package/.nyc_output/processinfo/442ce939-4f43-496b-a8a9-2f1fb9cfa619.json +0 -1
  48. package/.nyc_output/processinfo/4573bb03-90d4-4408-ba15-b6835c618b33.json +0 -1
  49. package/.nyc_output/processinfo/468fbd9c-6a27-4e33-8423-dbaec01e62a9.json +0 -1
  50. package/.nyc_output/processinfo/51894388-b88d-4f0b-8d5b-4a1dd71cf668.json +0 -1
  51. package/.nyc_output/processinfo/56263b22-3ed5-4ce2-9bbb-f2c9575cdeee.json +0 -1
  52. package/.nyc_output/processinfo/6934a9dd-6431-48aa-93f1-4eeef0095773.json +0 -1
  53. package/.nyc_output/processinfo/70979008-f285-481b-bb09-ca48a1376f81.json +0 -1
  54. package/.nyc_output/processinfo/817c9485-a0ef-486d-8dee-906456fe77fb.json +0 -1
  55. package/.nyc_output/processinfo/9f725153-f783-4948-81d3-c4cc792738bf.json +0 -1
  56. package/.nyc_output/processinfo/cd4d852c-f8fc-4cb1-807b-7d053a0ef8fc.json +0 -1
  57. package/.nyc_output/processinfo/ec3011f0-8180-492e-8d85-4d92484ccb44.json +0 -1
  58. package/.nyc_output/processinfo/f78b831a-65ca-497d-9f9e-001a3efa6f54.json +0 -1
  59. package/.nyc_output/processinfo/index.json +0 -1
  60. package/.nycrc +0 -6
  61. package/.prettierrc +0 -21
  62. package/.xunit +0 -47
  63. package/@types/forms/fields/files-multiple.d.ts +0 -12
  64. package/@types/sealgen-url.d.ts +0 -0
  65. package/@types/tests/manual/multiform.d.ts +0 -1
  66. package/coverage/clover.xml +0 -2240
  67. package/coverage/lcov-report/base.css +0 -224
  68. package/coverage/lcov-report/block-navigation.js +0 -79
  69. package/coverage/lcov-report/favicon.png +0 -0
  70. package/coverage/lcov-report/index.html +0 -231
  71. package/coverage/lcov-report/prettify.css +0 -1
  72. package/coverage/lcov-report/prettify.js +0 -2
  73. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  74. package/coverage/lcov-report/sorter.js +0 -170
  75. package/coverage/lcov-report/src/add-collection.ts.html +0 -173
  76. package/coverage/lcov-report/src/add-route.test.ts.html +0 -254
  77. package/coverage/lcov-report/src/add-route.ts.html +0 -338
  78. package/coverage/lcov-report/src/build.ts.html +0 -359
  79. package/coverage/lcov-report/src/cli.ts.html +0 -188
  80. package/coverage/lcov-report/src/components/components.ts.html +0 -86
  81. package/coverage/lcov-report/src/components/index.html +0 -141
  82. package/coverage/lcov-report/src/components/tabs.ts.html +0 -365
  83. package/coverage/lcov-report/src/components/toggle-modal.ts.html +0 -236
  84. package/coverage/lcov-report/src/example.test.ts.html +0 -89
  85. package/coverage/lcov-report/src/find-scss-includes.ts.html +0 -176
  86. package/coverage/lcov-report/src/forms/controls/array.ts.html +0 -758
  87. package/coverage/lcov-report/src/forms/controls/autocomplete.ts.html +0 -179
  88. package/coverage/lcov-report/src/forms/controls/big-radio-group.ts.html +0 -224
  89. package/coverage/lcov-report/src/forms/controls/checkbox-group.ts.html +0 -293
  90. package/coverage/lcov-report/src/forms/controls/checkbox.ts.html +0 -182
  91. package/coverage/lcov-report/src/forms/controls/checkboxed-list-input.ts.html +0 -230
  92. package/coverage/lcov-report/src/forms/controls/collapsible-checkbox-group.ts.html +0 -164
  93. package/coverage/lcov-report/src/forms/controls/collapsible-field-group.ts.html +0 -362
  94. package/coverage/lcov-report/src/forms/controls/controls.ts.html +0 -170
  95. package/coverage/lcov-report/src/forms/controls/derived-frame.ts.html +0 -353
  96. package/coverage/lcov-report/src/forms/controls/derived.ts.html +0 -404
  97. package/coverage/lcov-report/src/forms/controls/dropdown.ts.html +0 -341
  98. package/coverage/lcov-report/src/forms/controls/editable-collection-subset.ts.html +0 -371
  99. package/coverage/lcov-report/src/forms/controls/field-group.ts.html +0 -287
  100. package/coverage/lcov-report/src/forms/controls/file.ts.html +0 -221
  101. package/coverage/lcov-report/src/forms/controls/form-control.ts.html +0 -152
  102. package/coverage/lcov-report/src/forms/controls/form-field-control.ts.html +0 -146
  103. package/coverage/lcov-report/src/forms/controls/form-header.ts.html +0 -137
  104. package/coverage/lcov-report/src/forms/controls/form-paragraph.ts.html +0 -113
  105. package/coverage/lcov-report/src/forms/controls/frame.ts.html +0 -158
  106. package/coverage/lcov-report/src/forms/controls/hidden-input.ts.html +0 -146
  107. package/coverage/lcov-report/src/forms/controls/html.ts.html +0 -194
  108. package/coverage/lcov-report/src/forms/controls/index.html +0 -561
  109. package/coverage/lcov-report/src/forms/controls/multiple-files.ts.html +0 -848
  110. package/coverage/lcov-report/src/forms/controls/multiple-photos.ts.html +0 -212
  111. package/coverage/lcov-report/src/forms/controls/number.ts.html +0 -194
  112. package/coverage/lcov-report/src/forms/controls/photo.ts.html +0 -302
  113. package/coverage/lcov-report/src/forms/controls/radio.ts.html +0 -209
  114. package/coverage/lcov-report/src/forms/controls/reverse-single-reference.ts.html +0 -230
  115. package/coverage/lcov-report/src/forms/controls/simple-input.ts.html +0 -524
  116. package/coverage/lcov-report/src/forms/controls/textarea.ts.html +0 -260
  117. package/coverage/lcov-report/src/forms/controls/tickable.ts.html +0 -461
  118. package/coverage/lcov-report/src/forms/fields/boolean.test.ts.html +0 -188
  119. package/coverage/lcov-report/src/forms/fields/boolean.ts.html +0 -269
  120. package/coverage/lcov-report/src/forms/fields/checkboxed-list.ts.html +0 -278
  121. package/coverage/lcov-report/src/forms/fields/collection-field.ts.html +0 -266
  122. package/coverage/lcov-report/src/forms/fields/email.test.ts.html +0 -152
  123. package/coverage/lcov-report/src/forms/fields/email.ts.html +0 -140
  124. package/coverage/lcov-report/src/forms/fields/enum-multiple.test.ts.html +0 -173
  125. package/coverage/lcov-report/src/forms/fields/enum-multiple.ts.html +0 -266
  126. package/coverage/lcov-report/src/forms/fields/enum.test.ts.html +0 -155
  127. package/coverage/lcov-report/src/forms/fields/enum.ts.html +0 -248
  128. package/coverage/lcov-report/src/forms/fields/existing-sealious-value.ts.html +0 -146
  129. package/coverage/lcov-report/src/forms/fields/field.ts.html +0 -596
  130. package/coverage/lcov-report/src/forms/fields/file.ts.html +0 -347
  131. package/coverage/lcov-report/src/forms/fields/index.html +0 -456
  132. package/coverage/lcov-report/src/forms/fields/multiple-files.ts.html +0 -140
  133. package/coverage/lcov-report/src/forms/fields/number.test.ts.html +0 -182
  134. package/coverage/lcov-report/src/forms/fields/number.ts.html +0 -290
  135. package/coverage/lcov-report/src/forms/fields/pick-from-list.test.ts.html +0 -137
  136. package/coverage/lcov-report/src/forms/fields/pick-from-list.ts.html +0 -236
  137. package/coverage/lcov-report/src/forms/fields/proxy-field.ts.html +0 -152
  138. package/coverage/lcov-report/src/forms/fields/regexp.test.ts.html +0 -155
  139. package/coverage/lcov-report/src/forms/fields/regexp.ts.html +0 -239
  140. package/coverage/lcov-report/src/forms/fields/reverse-single-reference.ts.html +0 -140
  141. package/coverage/lcov-report/src/forms/fields/simple-form-field.ts.html +0 -170
  142. package/coverage/lcov-report/src/forms/fields/structured-array.ts.html +0 -161
  143. package/coverage/lcov-report/src/forms/form.test.ts.html +0 -1133
  144. package/coverage/lcov-report/src/forms/form.ts.html +0 -962
  145. package/coverage/lcov-report/src/forms/index.html +0 -156
  146. package/coverage/lcov-report/src/forms/multiform.test.ts.html +0 -1700
  147. package/coverage/lcov-report/src/forms/multiform.ts.html +0 -788
  148. package/coverage/lcov-report/src/generate-collections.ts.html +0 -311
  149. package/coverage/lcov-report/src/generate-routes.ts.html +0 -440
  150. package/coverage/lcov-report/src/index.html +0 -321
  151. package/coverage/lcov-report/src/index.ts.html +0 -152
  152. package/coverage/lcov-report/src/make-env.ts.html +0 -125
  153. package/coverage/lcov-report/src/make-hidden-inputs.ts.html +0 -152
  154. package/coverage/lcov-report/src/mount.ts.html +0 -335
  155. package/coverage/lcov-report/src/page/access-control.ts.html +0 -134
  156. package/coverage/lcov-report/src/page/index.html +0 -186
  157. package/coverage/lcov-report/src/page/list.ts.html +0 -800
  158. package/coverage/lcov-report/src/page/mountable-with-fields.ts.html +0 -554
  159. package/coverage/lcov-report/src/page/mountable.ts.html +0 -119
  160. package/coverage/lcov-report/src/page/page.ts.html +0 -218
  161. package/coverage/lcov-report/src/page/props-parser.ts.html +0 -194
  162. package/coverage/lcov-report/src/run.ts.html +0 -80
  163. package/coverage/lcov-report/src/sanitize.ts.html +0 -107
  164. package/coverage/lcov-report/src/templates/collection.ts.html +0 -113
  165. package/coverage/lcov-report/src/templates/form.ts.html +0 -260
  166. package/coverage/lcov-report/src/templates/index.html +0 -216
  167. package/coverage/lcov-report/src/templates/list.ts.html +0 -305
  168. package/coverage/lcov-report/src/templates/multiform.ts.html +0 -254
  169. package/coverage/lcov-report/src/templates/page.ts.html +0 -155
  170. package/coverage/lcov-report/src/templates/post.ts.html +0 -143
  171. package/coverage/lcov-report/src/templates/redirect.ts.html +0 -146
  172. package/coverage/lcov-report/src/templates/route-test.ts.html +0 -161
  173. package/coverage/lcov-report/src/test_utils/index.html +0 -111
  174. package/coverage/lcov-report/src/test_utils/locator_is_visible.ts.html +0 -131
  175. package/coverage/lcov-report/src/utils/assert-throws.ts.html +0 -134
  176. package/coverage/lcov-report/src/utils/browser-creator.js.html +0 -110
  177. package/coverage/lcov-report/src/utils/escape-url-params.ts.html +0 -122
  178. package/coverage/lcov-report/src/utils/exec.ts.html +0 -170
  179. package/coverage/lcov-report/src/utils/format-external-url.ts.html +0 -119
  180. package/coverage/lcov-report/src/utils/import-path.ts.html +0 -155
  181. package/coverage/lcov-report/src/utils/index.html +0 -366
  182. package/coverage/lcov-report/src/utils/input-wrapper.ts.html +0 -143
  183. package/coverage/lcov-report/src/utils/list-collections.ts.html +0 -128
  184. package/coverage/lcov-report/src/utils/make-slug.ts.html +0 -95
  185. package/coverage/lcov-report/src/utils/natural-numbers.ts.html +0 -95
  186. package/coverage/lcov-report/src/utils/prettier.ts.html +0 -119
  187. package/coverage/lcov-report/src/utils/question.ts.html +0 -149
  188. package/coverage/lcov-report/src/utils/render-attributes.ts.html +0 -131
  189. package/coverage/lcov-report/src/utils/sleep.ts.html +0 -89
  190. package/coverage/lcov-report/src/utils/translate.ts.html +0 -119
  191. package/coverage/lcov-report/src/utils/url-with-new-params.ts.html +0 -107
  192. package/coverage/lcov-report/src/utils/utils.ts.html +0 -122
  193. package/coverage/lcov-report/src/utils/walk.ts.html +0 -140
  194. package/coverage/lcov.info +0 -4697
  195. package/jenkins.sanity.sh +0 -3
  196. package/lib/add-collection.js.map +0 -1
  197. package/lib/add-route.js.map +0 -1
  198. package/lib/add-route.test.js.map +0 -1
  199. package/lib/build.js.map +0 -1
  200. package/lib/cli.js.map +0 -1
  201. package/lib/components/components.js.map +0 -1
  202. package/lib/components/tabs.js.map +0 -1
  203. package/lib/components/toggle-modal.js.map +0 -1
  204. package/lib/example.test.js.map +0 -1
  205. package/lib/find-scss-includes.js.map +0 -1
  206. package/lib/forms/controls/array.js.map +0 -1
  207. package/lib/forms/controls/autocomplete.js.map +0 -1
  208. package/lib/forms/controls/big-radio-group.js.map +0 -1
  209. package/lib/forms/controls/checkbox-group.js.map +0 -1
  210. package/lib/forms/controls/checkbox.js.map +0 -1
  211. package/lib/forms/controls/checkboxed-list-input.js.map +0 -1
  212. package/lib/forms/controls/collapsible-checkbox-group.js.map +0 -1
  213. package/lib/forms/controls/collapsible-field-group.js.map +0 -1
  214. package/lib/forms/controls/controls.js.map +0 -1
  215. package/lib/forms/controls/derived-frame.js.map +0 -1
  216. package/lib/forms/controls/derived.js.map +0 -1
  217. package/lib/forms/controls/dropdown.js.map +0 -1
  218. package/lib/forms/controls/editable-collection-subset.js.map +0 -1
  219. package/lib/forms/controls/field-group.js.map +0 -1
  220. package/lib/forms/controls/file.js.map +0 -1
  221. package/lib/forms/controls/form-control.js.map +0 -1
  222. package/lib/forms/controls/form-field-control.js.map +0 -1
  223. package/lib/forms/controls/form-header.js.map +0 -1
  224. package/lib/forms/controls/form-paragraph.js.map +0 -1
  225. package/lib/forms/controls/frame.js.map +0 -1
  226. package/lib/forms/controls/hidden-input.js.map +0 -1
  227. package/lib/forms/controls/html.js.map +0 -1
  228. package/lib/forms/controls/multiple-files.js.map +0 -1
  229. package/lib/forms/controls/multiple-photos.js.map +0 -1
  230. package/lib/forms/controls/number.js.map +0 -1
  231. package/lib/forms/controls/photo.js.map +0 -1
  232. package/lib/forms/controls/radio.js.map +0 -1
  233. package/lib/forms/controls/reverse-single-reference.js.map +0 -1
  234. package/lib/forms/controls/simple-input.js.map +0 -1
  235. package/lib/forms/controls/textarea.js.map +0 -1
  236. package/lib/forms/controls/tickable.js.map +0 -1
  237. package/lib/forms/fields/boolean.js.map +0 -1
  238. package/lib/forms/fields/boolean.test.js.map +0 -1
  239. package/lib/forms/fields/checkboxed-list.js.map +0 -1
  240. package/lib/forms/fields/collection-field.js.map +0 -1
  241. package/lib/forms/fields/email.js.map +0 -1
  242. package/lib/forms/fields/email.test.js.map +0 -1
  243. package/lib/forms/fields/enum-multiple.js.map +0 -1
  244. package/lib/forms/fields/enum-multiple.test.js.map +0 -1
  245. package/lib/forms/fields/enum.js.map +0 -1
  246. package/lib/forms/fields/enum.test.js.map +0 -1
  247. package/lib/forms/fields/existing-sealious-value.js.map +0 -1
  248. package/lib/forms/fields/field.js.map +0 -1
  249. package/lib/forms/fields/file.js.map +0 -1
  250. package/lib/forms/fields/files-multiple.js +0 -18
  251. package/lib/forms/fields/files-multiple.js.map +0 -1
  252. package/lib/forms/fields/multiple-files.js.map +0 -1
  253. package/lib/forms/fields/number.js.map +0 -1
  254. package/lib/forms/fields/number.test.js.map +0 -1
  255. package/lib/forms/fields/pick-from-list.js.map +0 -1
  256. package/lib/forms/fields/pick-from-list.test.js.map +0 -1
  257. package/lib/forms/fields/proxy-field.js.map +0 -1
  258. package/lib/forms/fields/regexp.js.map +0 -1
  259. package/lib/forms/fields/regexp.test.js.map +0 -1
  260. package/lib/forms/fields/reverse-single-reference.js.map +0 -1
  261. package/lib/forms/fields/simple-form-field.js.map +0 -1
  262. package/lib/forms/fields/structured-array.js.map +0 -1
  263. package/lib/forms/form.js.map +0 -1
  264. package/lib/forms/form.test.js.map +0 -1
  265. package/lib/forms/multiform.js.map +0 -1
  266. package/lib/forms/multiform.test.js.map +0 -1
  267. package/lib/generate-collections.js.map +0 -1
  268. package/lib/generate-routes.js.map +0 -1
  269. package/lib/index.js.map +0 -1
  270. package/lib/make-env.js.map +0 -1
  271. package/lib/make-hidden-inputs.js.map +0 -1
  272. package/lib/mount.js.map +0 -1
  273. package/lib/page/access-control.js.map +0 -1
  274. package/lib/page/list.js.map +0 -1
  275. package/lib/page/mountable-with-fields.js.map +0 -1
  276. package/lib/page/mountable.js.map +0 -1
  277. package/lib/page/page.js.map +0 -1
  278. package/lib/page/props-parser.js.map +0 -1
  279. package/lib/run.js.map +0 -1
  280. package/lib/sanitize.js.map +0 -1
  281. package/lib/sealgen-url.js +0 -1
  282. package/lib/sealgen-url.js.map +0 -1
  283. package/lib/templates/collection.js.map +0 -1
  284. package/lib/templates/form.js.map +0 -1
  285. package/lib/templates/list.js.map +0 -1
  286. package/lib/templates/multiform.js.map +0 -1
  287. package/lib/templates/page.js.map +0 -1
  288. package/lib/templates/post.js.map +0 -1
  289. package/lib/templates/redirect.js.map +0 -1
  290. package/lib/templates/route-test.js.map +0 -1
  291. package/lib/test_utils/locator_is_visible.js.map +0 -1
  292. package/lib/tests/manual/multiform.js +0 -95
  293. package/lib/tests/manual/multiform.js.map +0 -1
  294. package/lib/utils/assert-throws.js.map +0 -1
  295. package/lib/utils/browser-creator.js.map +0 -1
  296. package/lib/utils/escape-url-params.js.map +0 -1
  297. package/lib/utils/exec.js.map +0 -1
  298. package/lib/utils/format-external-url.js.map +0 -1
  299. package/lib/utils/import-path.js.map +0 -1
  300. package/lib/utils/input-wrapper.js.map +0 -1
  301. package/lib/utils/list-collections.js.map +0 -1
  302. package/lib/utils/make-slug.js.map +0 -1
  303. package/lib/utils/natural-numbers.js.map +0 -1
  304. package/lib/utils/prettier.js.map +0 -1
  305. package/lib/utils/question.js.map +0 -1
  306. package/lib/utils/render-attributes.js.map +0 -1
  307. package/lib/utils/sleep.js.map +0 -1
  308. package/lib/utils/translate.js.map +0 -1
  309. package/lib/utils/url-with-new-params.js.map +0 -1
  310. package/lib/utils/utils.js.map +0 -1
  311. package/lib/utils/walk.js.map +0 -1
  312. package/mocha_root_hooks.js +0 -6
  313. package/src/add-collection.ts +0 -31
  314. package/src/add-route.test.ts +0 -58
  315. package/src/add-route.ts +0 -86
  316. package/src/build.ts +0 -94
  317. package/src/cli.ts +0 -36
  318. package/src/components/components.ts +0 -2
  319. package/src/components/tabs.ts +0 -95
  320. package/src/components/toggle-modal.ts +0 -52
  321. package/src/example.test.ts +0 -3
  322. package/src/find-scss-includes.ts +0 -32
  323. package/src/forms/controls/array.ts +0 -226
  324. package/src/forms/controls/autocomplete.ts +0 -33
  325. package/src/forms/controls/big-radio-group.ts +0 -48
  326. package/src/forms/controls/checkbox-group.ts +0 -71
  327. package/src/forms/controls/checkbox.ts +0 -34
  328. package/src/forms/controls/checkboxed-list-input.ts +0 -50
  329. package/src/forms/controls/collapsible-checkbox-group.ts +0 -28
  330. package/src/forms/controls/collapsible-field-group.ts +0 -94
  331. package/src/forms/controls/controls.ts +0 -30
  332. package/src/forms/controls/derived-frame.ts +0 -91
  333. package/src/forms/controls/derived.ts +0 -108
  334. package/src/forms/controls/dropdown.ts +0 -87
  335. package/src/forms/controls/editable-collection-subset.ts +0 -97
  336. package/src/forms/controls/field-group.ts +0 -69
  337. package/src/forms/controls/file.ts +0 -47
  338. package/src/forms/controls/form-control.ts +0 -24
  339. package/src/forms/controls/form-field-control.ts +0 -22
  340. package/src/forms/controls/form-header.ts +0 -19
  341. package/src/forms/controls/form-paragraph.ts +0 -11
  342. package/src/forms/controls/frame.ts +0 -26
  343. package/src/forms/controls/hidden-input.ts +0 -22
  344. package/src/forms/controls/html.ts +0 -38
  345. package/src/forms/controls/multiple-files.ts +0 -256
  346. package/src/forms/controls/multiple-photos.ts +0 -44
  347. package/src/forms/controls/number.ts +0 -38
  348. package/src/forms/controls/photo.ts +0 -74
  349. package/src/forms/controls/radio.ts +0 -43
  350. package/src/forms/controls/reverse-single-reference.ts +0 -50
  351. package/src/forms/controls/simple-input.ts +0 -148
  352. package/src/forms/controls/textarea.ts +0 -60
  353. package/src/forms/controls/tickable.ts +0 -127
  354. package/src/forms/fields/boolean.test.ts +0 -36
  355. package/src/forms/fields/boolean.ts +0 -63
  356. package/src/forms/fields/checkboxed-list.ts +0 -66
  357. package/src/forms/fields/collection-field.ts +0 -62
  358. package/src/forms/fields/email.test.ts +0 -24
  359. package/src/forms/fields/email.ts +0 -20
  360. package/src/forms/fields/enum-multiple.test.ts +0 -31
  361. package/src/forms/fields/enum-multiple.ts +0 -62
  362. package/src/forms/fields/enum.test.ts +0 -25
  363. package/src/forms/fields/enum.ts +0 -56
  364. package/src/forms/fields/existing-sealious-value.ts +0 -22
  365. package/src/forms/fields/field.ts +0 -172
  366. package/src/forms/fields/file.ts +0 -89
  367. package/src/forms/fields/multiple-files.ts +0 -20
  368. package/src/forms/fields/number.test.ts +0 -34
  369. package/src/forms/fields/number.ts +0 -70
  370. package/src/forms/fields/pick-from-list.test.ts +0 -19
  371. package/src/forms/fields/pick-from-list.ts +0 -52
  372. package/src/forms/fields/proxy-field.ts +0 -24
  373. package/src/forms/fields/regexp.test.ts +0 -25
  374. package/src/forms/fields/regexp.ts +0 -53
  375. package/src/forms/fields/reverse-single-reference.ts +0 -20
  376. package/src/forms/fields/simple-form-field.ts +0 -30
  377. package/src/forms/fields/structured-array.ts +0 -27
  378. package/src/forms/form.test.ts +0 -351
  379. package/src/forms/form.ts +0 -294
  380. package/src/forms/forms.scss +0 -85
  381. package/src/forms/multiform.test.ts +0 -540
  382. package/src/forms/multiform.ts +0 -236
  383. package/src/generate-collections.ts +0 -77
  384. package/src/generate-routes.ts +0 -120
  385. package/src/index.ts +0 -24
  386. package/src/make-env.ts +0 -15
  387. package/src/make-hidden-inputs.ts +0 -24
  388. package/src/mount.ts +0 -85
  389. package/src/page/access-control.ts +0 -18
  390. package/src/page/list.ts +0 -240
  391. package/src/page/mountable-with-fields.ts +0 -158
  392. package/src/page/mountable.ts +0 -13
  393. package/src/page/page.ts +0 -46
  394. package/src/page/props-parser.ts +0 -38
  395. package/src/run.ts +0 -0
  396. package/src/sanitize.ts +0 -9
  397. package/src/templates/collection.ts +0 -11
  398. package/src/templates/form.ts +0 -60
  399. package/src/templates/list.ts +0 -75
  400. package/src/templates/multiform.ts +0 -58
  401. package/src/templates/page.ts +0 -25
  402. package/src/templates/post.ts +0 -21
  403. package/src/templates/redirect.ts +0 -22
  404. package/src/templates/route-test.ts +0 -27
  405. package/src/test_utils/locator_is_visible.ts +0 -17
  406. package/src/utils/assert-throws.ts +0 -18
  407. package/src/utils/browser-creator.js +0 -10
  408. package/src/utils/escape-url-params.ts +0 -14
  409. package/src/utils/exec.ts +0 -30
  410. package/src/utils/format-external-url.ts +0 -13
  411. package/src/utils/import-path.ts +0 -25
  412. package/src/utils/input-wrapper.ts +0 -21
  413. package/src/utils/list-collections.ts +0 -16
  414. package/src/utils/make-slug.ts +0 -5
  415. package/src/utils/natural-numbers.ts +0 -5
  416. package/src/utils/prettier.ts +0 -13
  417. package/src/utils/question.ts +0 -23
  418. package/src/utils/render-attributes.ts +0 -17
  419. package/src/utils/sleep.ts +0 -3
  420. package/src/utils/translate.ts +0 -13
  421. package/src/utils/url-with-new-params.ts +0 -9
  422. package/src/utils/utils.ts +0 -14
  423. package/src/utils/walk.ts +0 -20
package/src/page/list.ts DELETED
@@ -1,240 +0,0 @@
1
- import { Context } from "koa";
2
- import {
3
- Collection,
4
- CollectionItem,
5
- ItemList,
6
- Context as SealiousContext,
7
- CollectionInput,
8
- } from "sealious";
9
-
10
- import { Templatable, tempstream, FlatTemplatable } from "tempstream";
11
- import { peopleWhoCan } from "./access-control";
12
- import { Page } from "./page";
13
- import { ShapeToType } from "@sealcode/ts-predicates";
14
- import { FormControl } from "../forms/controls/controls";
15
- import { FormField, NumberField } from "../forms/fields/field";
16
- import { naturalNumbers, UrlWithNewParams } from "../utils/utils";
17
- import { FormDataValue } from "..";
18
- import { makeHiddenInputs } from "../make-hidden-inputs";
19
-
20
- export const BasePagePropsShape = <const>{};
21
- export type BasePageProps = ShapeToType<typeof BasePagePropsShape>;
22
-
23
- export const BaseListPageFields = <const>{
24
- page: new NumberField(false, 1),
25
- itemsPerPage: new NumberField(false, 12),
26
- };
27
-
28
- export abstract class ListPage<
29
- ItemType,
30
- F extends typeof BaseListPageFields
31
- > extends Page<F> {
32
- abstract getItems(
33
- ctx: Context,
34
- page: number,
35
- itemsPerPage: number,
36
- values: Record<string, FormDataValue>
37
- ): Promise<ItemType[]>;
38
-
39
- abstract getTotalPages(
40
- ctx: Context,
41
- itemsPerPage: number,
42
- values: Record<string, FormDataValue>
43
- ): Promise<number>;
44
-
45
- abstract renderItem(
46
- ctx: Context,
47
- item: ItemType,
48
- index: number
49
- ): Promise<FlatTemplatable>;
50
-
51
- filterFields: Record<string, FormField> = {};
52
- filterControls: FormControl[] = [];
53
-
54
- init(): void {
55
- super.init();
56
- for (const [fieldname, field] of Object.entries(this.filterFields)) {
57
- field.init(fieldname);
58
- }
59
- }
60
-
61
- renderListContainer(_: Context, content: Templatable): FlatTemplatable {
62
- return tempstream`<div>${content}</div>`;
63
- }
64
-
65
- async getPaginationConfig(ctx: Context) {
66
- const values = await this.extractRawValues(ctx);
67
- const { parsed: page } = await this.fields.page.getValue(ctx, values);
68
- const { parsed: itemsPerPage } =
69
- await this.fields.itemsPerPage.getValue(ctx, values);
70
- return { page, itemsPerPage };
71
- }
72
-
73
- async renderItems(
74
- ctx: Context,
75
- values?: Record<string, FormDataValue>,
76
- items?: ItemType[]
77
- ): Promise<FlatTemplatable> {
78
- if (!values) {
79
- values = await this.extractRawValues(ctx);
80
- }
81
- const { itemsPerPage, page } = await this.getPaginationConfig(ctx);
82
- const items_promise = this.getItems(ctx, page, itemsPerPage, values);
83
- return tempstream`${(items
84
- ? Promise.resolve(items)
85
- : items_promise
86
- ).then((items) =>
87
- items.map((item, index) => this.renderItem(ctx, item, index))
88
- )}`;
89
- }
90
-
91
- async render(ctx: Context): Promise<FlatTemplatable> {
92
- const values = await this.extractRawValues(ctx);
93
-
94
- return tempstream`${this.renderPagination(ctx, values)}
95
- ${this.renderFilters(ctx)}
96
- ${this.renderListContainer(ctx, this.renderItems(ctx, values))}`;
97
- }
98
-
99
- async renderPagination(
100
- ctx: Context,
101
- values: Record<string, FormDataValue>
102
- ): Promise<FlatTemplatable> {
103
- const { itemsPerPage, page } = await this.getPaginationConfig(ctx);
104
- const totalIems = await this.getTotalPages(ctx, itemsPerPage, values);
105
-
106
- return tempstream/* HTML */ `<center>
107
- ${page > 1 ? this.renderPageButton(ctx, 1, "Pierwsza strona") : ""}
108
- ${page > 1
109
- ? this.renderPageButton(ctx, page - 1, "Poprzednia strona")
110
- : ""}
111
-
112
- <select onchange="if (this.value) Turbo.visit(this.value)">
113
- ${Array.from(naturalNumbers(1, totalIems)).map(
114
- (n) => /* HTML */ `<option
115
- value="${UrlWithNewParams(
116
- ctx,
117
- //eslint-disable-next-line @typescript-eslint/consistent-type-assertions
118
- this.propsParser.overwriteProp(ctx, {
119
- page: n,
120
- } as Partial<Record<string, unknown>>)
121
- )}"
122
- ${page === n ? "selected" : ""}
123
- >
124
- ${n}
125
- </option>`
126
- )}
127
- </select>
128
- ${page < totalIems
129
- ? this.renderPageButton(ctx, page + 1, "Następna strona")
130
- : ""}
131
- ${page < totalIems
132
- ? this.renderPageButton(ctx, totalIems, "Ostatnia strona")
133
- : ""}
134
- </center>`;
135
- }
136
-
137
- private renderPageButton(ctx: Context, page: number, text: string) {
138
- return /* HTML */ `<a
139
- href="${UrlWithNewParams(
140
- ctx,
141
- //eslint-disable-next-line @typescript-eslint/consistent-type-assertions
142
- this.propsParser.overwriteProp(ctx, {
143
- page,
144
- } as Partial<Record<string, unknown>>)
145
- )}"
146
- >${text}</a
147
- >`;
148
- }
149
-
150
- async getFilterValues(ctx: Context): Promise<Record<string, unknown>> {
151
- const filter = {} as Record<string, unknown>;
152
- const raw_values = await this.extractRawValues(ctx);
153
- for (const [fieldname, field] of Object.entries(this.filterFields)) {
154
- // eslint-disable-next-line no-await-in-loop
155
- const { parsed } = await field.getValue(ctx, raw_values);
156
- filter[fieldname] = field.mapToFilter(parsed);
157
- }
158
- return filter;
159
- }
160
-
161
- async renderFilters(ctx: Context): Promise<FlatTemplatable> {
162
- const values = await this.extractRawValues(ctx);
163
- return tempstream/* HTML */ `<form method="GET">
164
- ${makeHiddenInputs(ctx, this.fields, values, [
165
- "page",
166
- ...Object.values(this.filterFields).map((f) => f.name),
167
- ])}
168
- ${this.filterControls.map((control) => {
169
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
170
- return control.render(
171
- this.makeFormControlContext(
172
- ctx,
173
- { raw_values: values, messages: [] },
174
- false
175
- )
176
- );
177
- })}
178
- </form>`;
179
- }
180
- }
181
-
182
- export abstract class SealiousItemListPage<
183
- C extends Collection,
184
- F extends typeof BaseListPageFields
185
- > extends ListPage<CollectionItem<C>, F> {
186
- constructor(public collection: C) {
187
- super();
188
- }
189
-
190
- async getContextForList(ctx: Context): Promise<SealiousContext> {
191
- return ctx.$context;
192
- }
193
-
194
- async getTotalPages(ctx: Context, itemsPerPage: number): Promise<number> {
195
- const query = this.collection.list(await this.getContextForList(ctx));
196
- await this.addFilter(ctx, query);
197
- const { items } = await query.fetch();
198
- return Math.ceil(items.length / itemsPerPage);
199
- }
200
-
201
- protected async addFilter(ctx: Context, list: ItemList<C>): Promise<void> {
202
- const filters = await this.getFilterValues(ctx);
203
-
204
- for (const key in filters) {
205
- if (filters[key] === undefined || filters[key] == "") {
206
- delete filters[key];
207
- }
208
- }
209
- if (Object.keys(filters).length) {
210
- list.filter(filters as Partial<CollectionInput<C>>);
211
- }
212
- }
213
-
214
- async makeQuery(ctx: Context): Promise<ItemList<C>> {
215
- return this.collection.list(await this.getContextForList(ctx));
216
- }
217
-
218
- async getItems(
219
- ctx: Context,
220
- page: number,
221
- itemsPerPage: number
222
- ): Promise<CollectionItem<C>[]> {
223
- const query = await this.makeQuery(ctx);
224
- await this.addFilter(ctx, query);
225
- const { items } = await query
226
- .paginate({ items: itemsPerPage, page })
227
- .fetch();
228
- return items;
229
- }
230
-
231
- async renderItem(
232
- _: Context,
233
- item: CollectionItem<C>,
234
- index: number
235
- ): Promise<FlatTemplatable> {
236
- return `<div>${item.id}</div>`;
237
- }
238
-
239
- canAccess = peopleWhoCan("list", this.collection);
240
- }
@@ -1,158 +0,0 @@
1
- import { ShapeToType } from "@sealcode/ts-predicates";
2
- import { Context } from "koa";
3
- import { FlatTemplatable, tempstream } from "tempstream";
4
- import {
5
- FormControl,
6
- FormControlContext,
7
- } from "../forms/controls/form-control";
8
- import { FieldsToShape, FormField } from "../forms/fields/field";
9
- import { FormData, FormDataValue, FormMessage } from "../forms/form";
10
- import { Mountable } from "./mountable";
11
-
12
- export type PageErrorMessage = { type: "access" | "internal"; message: string };
13
-
14
- export type Fields = Record<string, FormField<boolean, any>>;
15
-
16
- export abstract class MountableWithFields<
17
- F extends Fields = Fields
18
- > extends Mountable {
19
- fields: F;
20
- field_names_prefix = ""; // useful for multiform, where many forms are merged into one and field assignment is made using the prefix
21
- form_id = ""; // all fields within this mountable will be tied to form of this id
22
- abstract controls: FormControl[];
23
-
24
- constructor() {
25
- super();
26
- if (!this.fields) this.fields = {} as F;
27
- }
28
-
29
- init(): void {
30
- for (const [name, field] of Object.entries(this.fields)) {
31
- field.init(name);
32
- }
33
- }
34
-
35
- makeFormControlContext(
36
- ctx: Context,
37
- data: FormData,
38
- validate: boolean,
39
- field_name_prefix = this.field_names_prefix,
40
- form_id = this.form_id
41
- ) {
42
- return new FormControlContext(
43
- ctx,
44
- data.raw_values,
45
- data.messages,
46
- field_name_prefix,
47
- form_id,
48
- validate
49
- );
50
- }
51
-
52
- // this one is meant to be overwritten
53
- async validateValues(
54
- ctx: Context,
55
- data: Record<string, FormDataValue>
56
- ): Promise<{ valid: boolean; error: string }> {
57
- return {
58
- valid: true,
59
- error: "",
60
- };
61
- }
62
-
63
- async validate(
64
- ctx: Context,
65
- values: Record<string, FormDataValue>
66
- ): Promise<{
67
- valid: boolean;
68
- field_errors: Partial<Record<keyof Fields, string>>;
69
- form_messages: FormMessage[];
70
- }> {
71
- const field_errors = {} as Record<keyof Fields, string>;
72
- let valid = true;
73
- const form_messages = [] as FormMessage[];
74
- await Promise.all(
75
- Object.entries(values)
76
- .filter(([fieldname]) => fieldname in this.fields)
77
- .map(async ([key]: [keyof F, FormDataValue]) => {
78
- const field = this.fields[key];
79
- const { valid: fieldvalid, message: fieldmessage } =
80
- await field.getValue(ctx, values);
81
- if (!fieldvalid) {
82
- valid = false;
83
- field_errors[field.name] = fieldmessage;
84
- }
85
- })
86
- );
87
- const formValidationResult = await this.validateValues(ctx, values);
88
- if (!formValidationResult.valid) {
89
- form_messages.push({
90
- type: "error",
91
- text: formValidationResult.error,
92
- });
93
- valid = false;
94
- }
95
- return { valid, field_errors, form_messages };
96
- }
97
-
98
- public renderControls(fctx: FormControlContext): FlatTemplatable {
99
- return tempstream/* HTML */ `${this.controls.map((control) =>
100
- control.render(fctx)
101
- )}`;
102
- }
103
-
104
- async renderError(
105
- _: Context,
106
- error: PageErrorMessage
107
- ): Promise<FlatTemplatable> {
108
- return error.message;
109
- }
110
-
111
- public renderMessages(
112
- _: Context,
113
- data: FormData<keyof Fields>
114
- ): FlatTemplatable {
115
- return tempstream/* HTML */ `<div class="form-messages">
116
- ${data.messages.map(
117
- (message) =>
118
- `<div class="form-message form-message--${message.type}">${message.text}</div>`
119
- )}
120
- </div>`;
121
- }
122
-
123
- abstract extractRawValues(
124
- ctx: Context
125
- ): Promise<Record<string, FormDataValue>>;
126
-
127
- async getParsedValues(
128
- ctx: Context
129
- ): Promise<ShapeToType<FieldsToShape<F>>> {
130
- const raw_values = await this.extractRawValues(ctx);
131
- const result: Record<string, unknown> = {};
132
- const promises = Object.entries(this.fields).map(
133
- async ([key, field]) => {
134
- const { parsed } = await field.getValue(ctx, raw_values);
135
- result[key] = parsed;
136
- }
137
- );
138
- await Promise.all(promises);
139
- return result as ShapeToType<FieldsToShape<F>>;
140
- }
141
-
142
- async getDatabaseValues(
143
- ctx: Context
144
- ): Promise<ShapeToType<FieldsToShape<F>>> {
145
- const raw_values = await this.extractRawValues(ctx);
146
- const result: Record<string, unknown> = {};
147
- const promises = Object.entries(this.fields).map(
148
- async ([key, field]) => {
149
- const db_value = await field.getDatabaseValue(ctx, raw_values);
150
- if (db_value !== undefined) {
151
- result[key] = db_value;
152
- }
153
- }
154
- );
155
- await Promise.all(promises);
156
- return result as ShapeToType<FieldsToShape<F>>;
157
- }
158
- }
@@ -1,13 +0,0 @@
1
- import Router from "@koa/router";
2
-
3
- import { Context } from "koa";
4
-
5
- export abstract class Mountable {
6
- // eslint-disable-next-line @typescript-eslint/no-empty-function
7
- init(): void {}
8
- abstract mount(router: Router, path: string): void;
9
-
10
- abstract canAccess(
11
- ctx: Context
12
- ): Promise<{ canAccess: boolean; message: string }>;
13
- }
package/src/page/page.ts DELETED
@@ -1,46 +0,0 @@
1
- import Router from "@koa/router";
2
- import { Context } from "koa";
3
-
4
- import { FlatTemplatable, tempstream } from "tempstream";
5
- import { AllQueryParams } from "..";
6
- import { FormDataValue } from "../forms/form";
7
- import {
8
- Fields,
9
- MountableWithFields,
10
- PageErrorMessage,
11
- } from "./mountable-with-fields";
12
- import { PagePropsParser } from "./props-parser";
13
-
14
- export abstract class Page<
15
- F extends Fields = Record<string, never>
16
- > extends MountableWithFields<F> {
17
- propsParser: PagePropsParser<Record<keyof Fields, unknown>> =
18
- new AllQueryParams();
19
- controls = [];
20
-
21
- mount(router: Router, path: string): void {
22
- router.get(path, async (ctx) => {
23
- ctx.body = await this.render(ctx);
24
- });
25
- }
26
-
27
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
28
- async canAccess(_: Context) {
29
- return { canAccess: true, message: "" };
30
- }
31
-
32
- async renderError(
33
- _: Context,
34
- error: PageErrorMessage
35
- ): Promise<FlatTemplatable> {
36
- return tempstream/* HTML */ `<div>${error.message}</div>`;
37
- }
38
-
39
- public abstract render(ctx: Context): Promise<FlatTemplatable>;
40
-
41
- async extractRawValues(
42
- ctx: Context
43
- ): Promise<Record<string, FormDataValue>> {
44
- return this.propsParser.decode(ctx) || {};
45
- }
46
- }
@@ -1,38 +0,0 @@
1
- import { Context } from "koa";
2
- import merge from "merge";
3
- import { FormData, FormDataValue } from "..";
4
- import { BasePageProps } from "./list";
5
-
6
- export type EncodedProps = Record<string, unknown>;
7
-
8
- // page props parser is only tasked with getting the raw props from *somewhere*
9
- // and being able to put new values back to that somewhere. Parsing to numbers
10
- // or any other exotic types is done by fields logic.
11
-
12
- export abstract class PagePropsParser<PropsType> {
13
- abstract decode(ctx: Context): Record<string, FormDataValue>;
14
- abstract encode(props: Record<string, FormData>): EncodedProps;
15
- abstract getHTMLInputName(prop_name: string): string;
16
-
17
- overwriteProp(ctx: Context, new_props: Partial<PropsType>): EncodedProps {
18
- const result = {};
19
- merge.recursive(result, this.decode(ctx), new_props);
20
- return result;
21
- }
22
- }
23
-
24
- export class AllQueryParams<
25
- PropsType extends BasePageProps
26
- > extends PagePropsParser<PropsType> {
27
- decode(ctx: Context): Record<string, FormDataValue> {
28
- return ctx.query;
29
- }
30
-
31
- encode(props: PropsType): Record<string, unknown> {
32
- return props;
33
- }
34
-
35
- getHTMLInputName(prop_name: string): string {
36
- return prop_name;
37
- }
38
- }
package/src/run.ts DELETED
File without changes
package/src/sanitize.ts DELETED
@@ -1,9 +0,0 @@
1
- export function attribute(raw: string | number): string {
2
- if (typeof raw !== "string") {
3
- raw = raw.toString();
4
- }
5
- return (raw || "")
6
- .replaceAll("<", "&lt;")
7
- .replace('"', "&quot;")
8
- .replaceAll("'", "&#39;");
9
- }
@@ -1,11 +0,0 @@
1
- export function collectionTemplate(collection_name: string) {
2
- return `import { Collection, FieldTypes, Policies } from "sealious";
3
-
4
- export default class ${collection_name} extends Collection {
5
- fields = {
6
- content: new FieldTypes.Text(),
7
- };
8
- defaultPolicy = new Policies.Public();
9
- }
10
- `;
11
- }
@@ -1,60 +0,0 @@
1
- import { curryImportPath } from "../utils/import-path";
2
-
3
- export async function formTemplate(
4
- action_name: string,
5
- newfilefullpath: string
6
- ): Promise<string> {
7
- const rel = curryImportPath(newfilefullpath);
8
- return `import { Context } from "koa";
9
- import { Form, FormData, FormDataValue, Fields, Controls } from "@sealcode/sealgen";
10
- import html from "${rel("src/back/html")}";
11
- import { Users } from "${rel("src/back/collections/collections")}";
12
-
13
- export const actionName = "${action_name}";
14
-
15
- const fields = {
16
- email: new Fields.CollectionField(true, Users.fields.email),
17
- password: new Fields.SimpleFormField(true),
18
- };
19
-
20
- export const ${action_name}Shape = Fields.fieldsToShape(fields);
21
-
22
- export default new (class ${action_name}Form extends Form<typeof fields, void> {
23
- defaultSuccessMessage = "Formularz wypełniony poprawnie";
24
- fields = fields;
25
-
26
- controls = [
27
- new Controls.SimpleInput(fields.email, { label: "Email:", type: "email" }),
28
- new Controls.SimpleInput(fields.password, { label: "Password:", type: "password" }),
29
- ];
30
-
31
- async validateValues(
32
- ctx: Context,
33
- data: Record<string, FormDataValue>
34
- ): Promise<{ valid: boolean; error: string }> {
35
- // just an example
36
- const { parsed: email } = await this.fields.email.getValue(ctx, data);
37
- const { parsed: password } = await this.fields.password.getValue(ctx, data);
38
- if ((password || "").length > (email || "").length) {
39
- return { valid: false, error: "Password cannot be longer than email" };
40
- } else {
41
- return { valid: true, error: "" };
42
- }
43
- }
44
-
45
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
46
- async canAccess(_: Context) {
47
- return { canAccess: true, message: "" };
48
- }
49
-
50
- async onSubmit() {
51
- //noop
52
- return;
53
- }
54
-
55
- async render(ctx: Context, data: FormData, show_field_errors: boolean) {
56
- return html(ctx, "${action_name}", await super.render(ctx, data, show_field_errors));
57
- }
58
- })();
59
- `;
60
- }
@@ -1,75 +0,0 @@
1
- import { curryImportPath } from "../utils/import-path";
2
- import prompts = require("prompts");
3
- import { listCollections } from "../utils/list-collections";
4
-
5
- export const listTemplate = async (
6
- action_name: string,
7
- newfilefullpath: string
8
- ): Promise<string> => {
9
- const response = await prompts({
10
- type: "autocomplete",
11
- name: "collection",
12
- message: "Which sealious collection do you want to list?",
13
- choices: (
14
- await listCollections()
15
- ).map((collection) => ({
16
- title: collection,
17
- value: collection,
18
- })),
19
- });
20
- const collection = response.collection as string;
21
- const uppercase_collection =
22
- collection[0].toLocaleUpperCase() + collection.slice(1);
23
- const rel = curryImportPath(newfilefullpath);
24
- return `import { Context } from "koa";
25
- import { CollectionItem } from "sealious";
26
- import { tempstream } from "tempstream";
27
- import { ${uppercase_collection} } from "${rel(
28
- "src/back/collections/collections"
29
- )}";
30
- import html from "${rel("src/back/html.ts")}";
31
- import { SealiousItemListPage, BaseListPageFields } from "@sealcode/sealgen";
32
-
33
- export const actionName = "${action_name}";
34
-
35
- const filterFields = {};
36
-
37
- export default new (class ${action_name}Page extends SealiousItemListPage<
38
- typeof ${uppercase_collection},
39
- typeof BaseListPageFields
40
- > {
41
- fields = BaseListPageFields;
42
-
43
- filterFields = filterFields;
44
- filterControls = [];
45
-
46
- async render(ctx: Context) {
47
- return html(
48
- ctx,
49
- "${uppercase_collection}",
50
- tempstream/* HTML */ \`<div>
51
- <h2>${uppercase_collection} List</h2>
52
- <table>
53
- <thead>
54
- <th>id</th>
55
- \${Object.keys(${uppercase_collection}.fields).map(
56
- (fieldname) => \`<th>\${fieldname}</th>\`
57
- )}
58
- </thead>
59
- <tbody>
60
- \${super.render(ctx)}
61
- </tbody>
62
- </table>
63
- </div>\`
64
- );
65
- }
66
-
67
- async renderItem(_: Context, item: CollectionItem<typeof ${uppercase_collection}>) {
68
- return tempstream\`<tr><td>\${item.id}</td>\${Object.keys(${uppercase_collection}.fields).map(
69
- (fieldname: keyof typeof ${uppercase_collection}["fields"]) =>
70
- tempstream\`<td>\${item.get(fieldname)}</td>\`
71
- )}</tr>\`;
72
- }
73
- })(${uppercase_collection});
74
- `;
75
- };