@sealcode/sealgen 0.11.8 → 0.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (539) hide show
  1. package/@types/components/components.d.ts +2 -2
  2. package/@types/components/toggle-modal.d.ts +1 -1
  3. package/@types/example.test.d.ts +1 -0
  4. package/@types/forms/controls/array.d.ts +7 -7
  5. package/@types/forms/controls/autocomplete.d.ts +3 -3
  6. package/@types/forms/controls/big-radio-group.d.ts +3 -3
  7. package/@types/forms/controls/checkbox-group.d.ts +4 -4
  8. package/@types/forms/controls/checkbox.d.ts +3 -3
  9. package/@types/forms/controls/checkboxed-list-input.d.ts +4 -4
  10. package/@types/forms/controls/collapsible-checkbox-group.d.ts +3 -3
  11. package/@types/forms/controls/collapsible-field-group.d.ts +2 -2
  12. package/@types/forms/controls/controls.d.ts +29 -29
  13. package/@types/forms/controls/derived-frame.d.ts +6 -6
  14. package/@types/forms/controls/derived.d.ts +3 -3
  15. package/@types/forms/controls/dropdown.d.ts +4 -4
  16. package/@types/forms/controls/editable-collection-subset.d.ts +3 -3
  17. package/@types/forms/controls/field-group.d.ts +2 -2
  18. package/@types/forms/controls/file.d.ts +5 -5
  19. package/@types/forms/controls/form-control.d.ts +2 -2
  20. package/@types/forms/controls/form-field-control.d.ts +3 -3
  21. package/@types/forms/controls/form-header.d.ts +2 -2
  22. package/@types/forms/controls/form-paragraph.d.ts +1 -1
  23. package/@types/forms/controls/frame.d.ts +1 -1
  24. package/@types/forms/controls/hidden-input.d.ts +3 -3
  25. package/@types/forms/controls/html.d.ts +2 -2
  26. package/@types/forms/controls/multiple-files.d.ts +5 -5
  27. package/@types/forms/controls/multiple-photos.d.ts +5 -5
  28. package/@types/forms/controls/number.d.ts +3 -3
  29. package/@types/forms/controls/photo.d.ts +7 -7
  30. package/@types/forms/controls/radio.d.ts +3 -3
  31. package/@types/forms/controls/reverse-single-reference.d.ts +1 -0
  32. package/@types/forms/controls/simple-input.d.ts +4 -4
  33. package/@types/forms/controls/textarea.d.ts +4 -4
  34. package/@types/forms/controls/tickable.d.ts +4 -4
  35. package/@types/forms/fields/boolean.d.ts +2 -2
  36. package/@types/forms/fields/checkboxed-list.d.ts +2 -2
  37. package/@types/forms/fields/collection-field.d.ts +2 -2
  38. package/@types/forms/fields/email.d.ts +1 -1
  39. package/@types/forms/fields/enum-multiple.d.ts +2 -2
  40. package/@types/forms/fields/enum.d.ts +2 -2
  41. package/@types/forms/fields/existing-sealious-value.d.ts +1 -1
  42. package/@types/forms/fields/field.d.ts +16 -16
  43. package/@types/forms/fields/file.d.ts +2 -2
  44. package/@types/forms/fields/multiple-files.d.ts +1 -1
  45. package/@types/forms/fields/number.d.ts +2 -2
  46. package/@types/forms/fields/pick-from-list.d.ts +3 -3
  47. package/@types/forms/fields/proxy-field.d.ts +1 -1
  48. package/@types/forms/fields/regexp.d.ts +2 -2
  49. package/@types/forms/fields/reverse-single-reference.d.ts +1 -1
  50. package/@types/forms/fields/simple-form-field.d.ts +2 -2
  51. package/@types/forms/fields/structured-array.d.ts +2 -2
  52. package/@types/forms/form.d.ts +3 -3
  53. package/@types/forms/form.test.d.ts +1 -1
  54. package/@types/forms/multiform.d.ts +4 -4
  55. package/@types/index.d.ts +17 -17
  56. package/@types/make-hidden-inputs.d.ts +2 -2
  57. package/@types/mount.d.ts +2 -2
  58. package/@types/page/list.d.ts +4 -4
  59. package/@types/page/mountable-with-fields.d.ts +4 -4
  60. package/@types/page/mountable.d.ts +1 -1
  61. package/@types/page/page.d.ts +4 -4
  62. package/@types/page/props-parser.d.ts +2 -2
  63. package/@types/page/sealious-list.d.ts +1 -1
  64. package/@types/page/stateful-page.d.ts +3 -3
  65. package/@types/remove-named-imports.d.ts +4 -0
  66. package/@types/run.d.ts +1 -0
  67. package/@types/src/add-collection.d.ts +1 -0
  68. package/@types/src/add-jdd-component.d.ts +1 -0
  69. package/@types/src/add-route.d.ts +3 -0
  70. package/@types/src/add-route.test.d.ts +1 -0
  71. package/@types/src/build.d.ts +3 -0
  72. package/@types/src/cli.d.ts +2 -0
  73. package/@types/src/components/components.d.ts +2 -0
  74. package/@types/src/components/tabs.d.ts +2 -0
  75. package/@types/src/components/toggle-modal.d.ts +7 -0
  76. package/@types/src/example.test.d.ts +1 -0
  77. package/@types/src/find-css-includes.d.ts +1 -0
  78. package/@types/src/forms/controls/array.d.ts +35 -0
  79. package/@types/src/forms/controls/autocomplete.d.ts +22 -0
  80. package/@types/src/forms/controls/big-radio-group.d.ts +14 -0
  81. package/@types/src/forms/controls/checkbox-group.d.ts +22 -0
  82. package/@types/src/forms/controls/checkbox.d.ts +15 -0
  83. package/@types/src/forms/controls/checkboxed-list-input.d.ts +14 -0
  84. package/@types/src/forms/controls/collapsible-checkbox-group.d.ts +11 -0
  85. package/@types/src/forms/controls/collapsible-field-group.d.ts +21 -0
  86. package/@types/src/forms/controls/controls.d.ts +29 -0
  87. package/@types/src/forms/controls/derived-frame.d.ts +22 -0
  88. package/@types/src/forms/controls/derived.d.ts +13 -0
  89. package/@types/src/forms/controls/dropdown.d.ts +30 -0
  90. package/@types/src/forms/controls/editable-collection-subset.d.ts +20 -0
  91. package/@types/src/forms/controls/field-group.d.ts +23 -0
  92. package/@types/src/forms/controls/file.d.ts +16 -0
  93. package/@types/src/forms/controls/form-control.d.ts +19 -0
  94. package/@types/src/forms/controls/form-field-control.d.ts +13 -0
  95. package/@types/src/forms/controls/form-header.d.ts +8 -0
  96. package/@types/src/forms/controls/form-paragraph.d.ts +7 -0
  97. package/@types/src/forms/controls/frame.d.ts +17 -0
  98. package/@types/src/forms/controls/hidden-input.d.ts +9 -0
  99. package/@types/src/forms/controls/html.d.ts +11 -0
  100. package/@types/src/forms/controls/multiple-files.d.ts +40 -0
  101. package/@types/src/forms/controls/multiple-photos.d.ts +18 -0
  102. package/@types/src/forms/controls/number.d.ts +13 -0
  103. package/@types/src/forms/controls/photo.d.ts +22 -0
  104. package/@types/src/forms/controls/radio.d.ts +16 -0
  105. package/@types/src/forms/controls/reverse-single-reference.d.ts +1 -0
  106. package/@types/src/forms/controls/simple-input.d.ts +32 -0
  107. package/@types/src/forms/controls/textarea.d.ts +25 -0
  108. package/@types/src/forms/controls/tickable.d.ts +24 -0
  109. package/@types/src/forms/fields/boolean.d.ts +17 -0
  110. package/@types/src/forms/fields/boolean.test.d.ts +1 -0
  111. package/@types/src/forms/fields/checkboxed-list.d.ts +20 -0
  112. package/@types/src/forms/fields/collection-field.d.ts +15 -0
  113. package/@types/src/forms/fields/email.d.ts +7 -0
  114. package/@types/src/forms/fields/email.test.d.ts +1 -0
  115. package/@types/src/forms/fields/enum-multiple.d.ts +18 -0
  116. package/@types/src/forms/fields/enum-multiple.test.d.ts +1 -0
  117. package/@types/src/forms/fields/enum.d.ts +18 -0
  118. package/@types/src/forms/fields/enum.test.d.ts +1 -0
  119. package/@types/src/forms/fields/existing-sealious-value.d.ts +6 -0
  120. package/@types/src/forms/fields/field.d.ts +43 -0
  121. package/@types/src/forms/fields/fields.d.ts +15 -0
  122. package/@types/src/forms/fields/file.d.ts +16 -0
  123. package/@types/src/forms/fields/multiple-files.d.ts +14 -0
  124. package/@types/src/forms/fields/number.d.ts +23 -0
  125. package/@types/src/forms/fields/number.test.d.ts +1 -0
  126. package/@types/src/forms/fields/pick-from-list.d.ts +14 -0
  127. package/@types/src/forms/fields/pick-from-list.test.d.ts +1 -0
  128. package/@types/src/forms/fields/proxy-field.d.ts +13 -0
  129. package/@types/src/forms/fields/regexp.d.ts +16 -0
  130. package/@types/src/forms/fields/regexp.test.d.ts +1 -0
  131. package/@types/src/forms/fields/reverse-single-reference.d.ts +13 -0
  132. package/@types/src/forms/fields/simple-form-field.d.ts +9 -0
  133. package/@types/src/forms/fields/structured-array.d.ts +14 -0
  134. package/@types/src/forms/form-types.d.ts +26 -0
  135. package/@types/src/forms/form.d.ts +31 -0
  136. package/@types/src/forms/form.test.d.ts +6 -0
  137. package/@types/src/forms/multiform.d.ts +24 -0
  138. package/@types/src/forms/multiform.test.d.ts +1 -0
  139. package/@types/src/generate-collections.d.ts +2 -0
  140. package/@types/src/generate-components.d.ts +1 -0
  141. package/@types/src/generate-routes.d.ts +1 -0
  142. package/@types/src/hehe.test.d.ts +1 -0
  143. package/@types/src/index.d.ts +27 -0
  144. package/@types/src/make-env.d.ts +1 -0
  145. package/@types/src/make-hidden-inputs.d.ts +5 -0
  146. package/@types/src/mount.d.ts +6 -0
  147. package/@types/src/notifier.d.ts +1 -0
  148. package/@types/src/page/access-control.d.ts +6 -0
  149. package/@types/src/page/default-list-filters.d.ts +6 -0
  150. package/@types/src/page/list.d.ts +47 -0
  151. package/@types/src/page/mountable-with-fields.d.ts +36 -0
  152. package/@types/src/page/mountable.d.ts +11 -0
  153. package/@types/src/page/page.d.ts +19 -0
  154. package/@types/src/page/props-parser.d.ts +16 -0
  155. package/@types/src/page/sealious-list.d.ts +19 -0
  156. package/@types/src/page/stateful-page.d.ts +34 -0
  157. package/@types/src/run.d.ts +1 -0
  158. package/@types/src/sample-index.d.ts +1 -0
  159. package/@types/src/sample-lib.d.ts +3 -0
  160. package/@types/src/sanitize.d.ts +1 -0
  161. package/@types/src/templates/collection.d.ts +1 -0
  162. package/@types/src/templates/form.d.ts +1 -0
  163. package/@types/src/templates/jdd-component.d.ts +1 -0
  164. package/@types/src/templates/list.d.ts +1 -0
  165. package/@types/src/templates/long-running-process.d.ts +1 -0
  166. package/@types/src/templates/multiform.d.ts +1 -0
  167. package/@types/src/templates/page.d.ts +1 -0
  168. package/@types/src/templates/post.d.ts +1 -0
  169. package/@types/src/templates/redirect.d.ts +1 -0
  170. package/@types/src/templates/route-test.d.ts +1 -0
  171. package/@types/src/templates/stateful-page.d.ts +1 -0
  172. package/@types/src/templates/templates.d.ts +19 -0
  173. package/@types/src/test_utils/locator_is_visible.d.ts +2 -0
  174. package/@types/src/utils/assert-throws.d.ts +1 -0
  175. package/@types/src/utils/base64.d.ts +2 -0
  176. package/@types/src/utils/browser-creator.d.ts +1 -0
  177. package/@types/src/utils/escape-url-params.d.ts +2 -0
  178. package/@types/src/utils/exec.d.ts +5 -0
  179. package/@types/src/utils/extract-fields-from-collection.d.ts +4 -0
  180. package/@types/src/utils/format-external-url.d.ts +1 -0
  181. package/@types/src/utils/import-path.d.ts +2 -0
  182. package/@types/src/utils/input-wrapper.d.ts +5 -0
  183. package/@types/src/utils/list-collections.d.ts +1 -0
  184. package/@types/src/utils/make-slug.d.ts +1 -0
  185. package/@types/src/utils/natural-numbers.d.ts +1 -0
  186. package/@types/src/utils/prettier.d.ts +2 -0
  187. package/@types/src/utils/question.d.ts +1 -0
  188. package/@types/src/utils/render-attributes.d.ts +1 -0
  189. package/@types/src/utils/sleep.d.ts +1 -0
  190. package/@types/src/utils/translate.d.ts +3 -0
  191. package/@types/src/utils/url-with-new-params.d.ts +2 -0
  192. package/@types/src/utils/utils.d.ts +16 -0
  193. package/@types/src/utils/walk.d.ts +1 -0
  194. package/@types/src/vitest.config.d.ts +2 -0
  195. package/@types/templates/templates.d.ts +8 -8
  196. package/@types/utils/input-wrapper.d.ts +1 -1
  197. package/@types/utils/utils.d.ts +12 -12
  198. package/@types/vitest.config.d.ts +2 -0
  199. package/build.js +18 -0
  200. package/dist/add-collection.js +31 -0
  201. package/dist/add-jdd-component.js +42 -0
  202. package/dist/add-route.js +67 -0
  203. package/dist/add-route.test.js +90 -0
  204. package/dist/back/routes/sample.page.js +17 -0
  205. package/dist/back/routes/sample.test.js +39 -0
  206. package/dist/build.js +149 -0
  207. package/dist/cli.js +35 -0
  208. package/dist/components/components.js +3 -0
  209. package/{lib → dist}/components/tabs.js +32 -23
  210. package/{lib → dist}/components/toggle-modal.js +9 -10
  211. package/dist/example.test.js +5 -0
  212. package/dist/find-css-includes.js +27 -0
  213. package/dist/forms/controls/array.js +171 -0
  214. package/dist/forms/controls/autocomplete.js +34 -0
  215. package/dist/forms/controls/big-radio-group.js +38 -0
  216. package/dist/forms/controls/checkbox-group.js +46 -0
  217. package/dist/forms/controls/checkbox.js +28 -0
  218. package/dist/forms/controls/checkboxed-list-input.js +44 -0
  219. package/dist/forms/controls/collapsible-checkbox-group.js +16 -0
  220. package/{lib → dist}/forms/controls/collapsible-field-group.js +32 -27
  221. package/dist/forms/controls/controls.js +44 -0
  222. package/dist/forms/controls/derived-frame.js +77 -0
  223. package/dist/forms/controls/derived.js +81 -0
  224. package/dist/forms/controls/dropdown.js +62 -0
  225. package/dist/forms/controls/editable-collection-subset.js +82 -0
  226. package/dist/forms/controls/field-group.js +52 -0
  227. package/dist/forms/controls/file.js +38 -0
  228. package/dist/forms/controls/form-control.js +19 -0
  229. package/dist/forms/controls/form-field-control.js +12 -0
  230. package/dist/forms/controls/form-header.js +17 -0
  231. package/dist/forms/controls/form-paragraph.js +15 -0
  232. package/dist/forms/controls/frame.js +22 -0
  233. package/dist/forms/controls/hidden-input.js +17 -0
  234. package/dist/forms/controls/html.js +23 -0
  235. package/dist/forms/controls/multiple-files.js +190 -0
  236. package/dist/forms/controls/multiple-photos.js +36 -0
  237. package/dist/forms/controls/number.js +24 -0
  238. package/dist/forms/controls/photo.js +56 -0
  239. package/dist/forms/controls/radio.js +28 -0
  240. package/dist/forms/controls/reverse-single-reference.js +1 -0
  241. package/dist/forms/controls/simple-input.js +85 -0
  242. package/dist/forms/controls/textarea.js +40 -0
  243. package/dist/forms/controls/tickable.js +72 -0
  244. package/dist/forms/fields/boolean.js +49 -0
  245. package/dist/forms/fields/boolean.test.js +33 -0
  246. package/dist/forms/fields/checkboxed-list.js +49 -0
  247. package/dist/forms/fields/collection-field.js +47 -0
  248. package/dist/forms/fields/email.js +19 -0
  249. package/dist/forms/fields/email.test.js +20 -0
  250. package/dist/forms/fields/enum-multiple.js +47 -0
  251. package/dist/forms/fields/enum-multiple.test.js +27 -0
  252. package/dist/forms/fields/enum.js +41 -0
  253. package/dist/forms/fields/enum.test.js +21 -0
  254. package/dist/forms/fields/existing-sealious-value.js +21 -0
  255. package/dist/forms/fields/field.js +82 -0
  256. package/dist/forms/fields/fields.js +16 -0
  257. package/dist/forms/fields/file.js +63 -0
  258. package/dist/forms/fields/multiple-files.js +18 -0
  259. package/dist/forms/fields/number.js +42 -0
  260. package/dist/forms/fields/number.test.js +31 -0
  261. package/dist/forms/fields/pick-from-list.js +34 -0
  262. package/dist/forms/fields/pick-from-list.test.js +17 -0
  263. package/dist/forms/fields/proxy-field.js +23 -0
  264. package/dist/forms/fields/regexp.js +42 -0
  265. package/dist/forms/fields/regexp.test.js +21 -0
  266. package/dist/forms/fields/reverse-single-reference.js +17 -0
  267. package/dist/forms/fields/simple-form-field.js +22 -0
  268. package/dist/forms/fields/structured-array.js +21 -0
  269. package/dist/forms/form-types.js +1 -0
  270. package/dist/forms/form.js +203 -0
  271. package/dist/forms/form.test.js +316 -0
  272. package/dist/forms/multiform.js +200 -0
  273. package/dist/forms/multiform.test.js +486 -0
  274. package/dist/generate-collections.js +65 -0
  275. package/dist/generate-components.js +41 -0
  276. package/dist/generate-routes.js +90 -0
  277. package/dist/hehe.test.js +7 -0
  278. package/dist/index.js +26 -0
  279. package/dist/make-env.js +17 -0
  280. package/dist/make-hidden-inputs.js +15 -0
  281. package/dist/mount.js +66 -0
  282. package/dist/notifier.js +21 -0
  283. package/dist/page/access-control.js +19 -0
  284. package/dist/page/default-list-filters.js +46 -0
  285. package/dist/page/list.js +199 -0
  286. package/dist/page/mountable-with-fields.js +106 -0
  287. package/dist/page/mountable.js +9 -0
  288. package/dist/page/page.js +31 -0
  289. package/dist/page/props-parser.js +24 -0
  290. package/dist/page/sealious-list.js +61 -0
  291. package/dist/page/stateful-page.js +123 -0
  292. package/dist/run.js +1 -0
  293. package/dist/sample-index.js +3 -0
  294. package/dist/sample-lib.js +9 -0
  295. package/dist/sanitize.js +10 -0
  296. package/dist/templates/collection.js +15 -0
  297. package/{lib → dist}/templates/form.js +8 -9
  298. package/dist/templates/jdd-component.js +44 -0
  299. package/{lib → dist}/templates/list.js +47 -49
  300. package/{lib → dist}/templates/long-running-process.js +7 -8
  301. package/{lib → dist}/templates/multiform.js +7 -8
  302. package/{lib → dist}/templates/page.js +7 -8
  303. package/{lib → dist}/templates/post.js +5 -6
  304. package/{lib → dist}/templates/redirect.js +5 -6
  305. package/{lib → dist}/templates/route-test.js +12 -9
  306. package/{lib → dist}/templates/stateful-page.js +7 -8
  307. package/dist/templates/templates.js +24 -0
  308. package/dist/test_utils/locator_is_visible.js +14 -0
  309. package/dist/utils/assert-throws.js +18 -0
  310. package/dist/utils/base64.js +11 -0
  311. package/dist/utils/browser-creator.js +11 -0
  312. package/dist/utils/escape-url-params.js +11 -0
  313. package/dist/utils/exec.js +29 -0
  314. package/dist/utils/extract-fields-from-collection.js +33 -0
  315. package/dist/utils/format-external-url.js +11 -0
  316. package/dist/utils/import-path.js +23 -0
  317. package/dist/utils/input-wrapper.js +19 -0
  318. package/dist/utils/list-collections.js +13 -0
  319. package/dist/utils/make-slug.js +7 -0
  320. package/dist/utils/natural-numbers.js +9 -0
  321. package/dist/utils/prettier.js +15 -0
  322. package/dist/utils/question.js +20 -0
  323. package/dist/utils/render-attributes.js +18 -0
  324. package/dist/utils/sleep.js +7 -0
  325. package/dist/utils/translate.js +12 -0
  326. package/dist/utils/url-with-new-params.js +8 -0
  327. package/dist/utils/utils.js +28 -0
  328. package/dist/utils/walk.js +23 -0
  329. package/dist/vitest.config.js +23 -0
  330. package/package.json +22 -21
  331. package/remove-named-imports.js +65 -0
  332. package/src/add-collection.ts +3 -3
  333. package/src/add-jdd-component.ts +3 -3
  334. package/src/add-route.test.ts +38 -10
  335. package/src/add-route.ts +5 -5
  336. package/src/build.ts +16 -90
  337. package/src/cli.ts +14 -13
  338. package/src/components/components.ts +2 -2
  339. package/src/components/toggle-modal.ts +1 -1
  340. package/src/find-css-includes.ts +1 -1
  341. package/src/forms/controls/array.ts +9 -8
  342. package/src/forms/controls/autocomplete.ts +4 -4
  343. package/src/forms/controls/big-radio-group.ts +3 -3
  344. package/src/forms/controls/checkbox-group.ts +7 -6
  345. package/src/forms/controls/checkbox.ts +3 -3
  346. package/src/forms/controls/checkboxed-list-input.ts +4 -6
  347. package/src/forms/controls/collapsible-checkbox-group.ts +4 -7
  348. package/src/forms/controls/collapsible-field-group.ts +2 -2
  349. package/src/forms/controls/controls.ts +29 -29
  350. package/src/forms/controls/derived-frame.ts +4 -4
  351. package/src/forms/controls/derived.ts +3 -3
  352. package/src/forms/controls/dropdown.ts +6 -5
  353. package/src/forms/controls/editable-collection-subset.ts +4 -4
  354. package/src/forms/controls/field-group.ts +2 -4
  355. package/src/forms/controls/file.ts +4 -4
  356. package/src/forms/controls/form-control.ts +1 -1
  357. package/src/forms/controls/form-field-control.ts +3 -4
  358. package/src/forms/controls/form-header.ts +1 -3
  359. package/src/forms/controls/form-paragraph.ts +1 -1
  360. package/src/forms/controls/frame.ts +2 -2
  361. package/src/forms/controls/hidden-input.ts +5 -5
  362. package/src/forms/controls/html.ts +1 -4
  363. package/src/forms/controls/multiple-files.ts +24 -26
  364. package/src/forms/controls/multiple-photos.ts +4 -4
  365. package/src/forms/controls/number.ts +3 -6
  366. package/src/forms/controls/photo.ts +9 -8
  367. package/src/forms/controls/radio.ts +3 -3
  368. package/src/forms/controls/simple-input.ts +6 -6
  369. package/src/forms/controls/textarea.ts +4 -4
  370. package/src/forms/controls/tickable.ts +6 -6
  371. package/src/forms/fields/boolean.test.ts +2 -1
  372. package/src/forms/fields/boolean.ts +2 -2
  373. package/src/forms/fields/checkboxed-list.ts +2 -2
  374. package/src/forms/fields/collection-field.ts +2 -2
  375. package/src/forms/fields/email.test.ts +1 -1
  376. package/src/forms/fields/email.ts +1 -1
  377. package/src/forms/fields/enum-multiple.test.ts +1 -1
  378. package/src/forms/fields/enum-multiple.ts +2 -2
  379. package/src/forms/fields/enum.test.ts +1 -1
  380. package/src/forms/fields/enum.ts +2 -2
  381. package/src/forms/fields/existing-sealious-value.ts +1 -1
  382. package/src/forms/fields/field.ts +2 -18
  383. package/src/forms/fields/fields.ts +15 -0
  384. package/src/forms/fields/file.ts +8 -9
  385. package/src/forms/fields/multiple-files.ts +1 -1
  386. package/src/forms/fields/number.test.ts +2 -1
  387. package/src/forms/fields/number.ts +2 -2
  388. package/src/forms/fields/pick-from-list.test.ts +1 -1
  389. package/src/forms/fields/pick-from-list.ts +3 -3
  390. package/src/forms/fields/proxy-field.ts +1 -1
  391. package/src/forms/fields/regexp.test.ts +1 -1
  392. package/src/forms/fields/regexp.ts +2 -2
  393. package/src/forms/fields/reverse-single-reference.ts +1 -1
  394. package/src/forms/fields/simple-form-field.ts +2 -2
  395. package/src/forms/fields/structured-array.ts +2 -2
  396. package/src/forms/form-types.ts +30 -0
  397. package/src/forms/form.test.ts +16 -13
  398. package/src/forms/form.ts +11 -31
  399. package/src/forms/multiform.test.ts +33 -28
  400. package/src/forms/multiform.ts +4 -3
  401. package/src/generate-collections.ts +1 -1
  402. package/src/generate-components.ts +3 -1
  403. package/src/generate-routes.ts +5 -5
  404. package/src/index.ts +19 -17
  405. package/src/make-hidden-inputs.ts +3 -3
  406. package/src/mount.ts +5 -5
  407. package/src/page/list.ts +8 -6
  408. package/src/page/mountable-with-fields.ts +8 -4
  409. package/src/page/page.ts +3 -4
  410. package/src/page/props-parser.ts +2 -2
  411. package/src/page/sealious-list.ts +2 -2
  412. package/src/page/stateful-page.ts +3 -3
  413. package/src/templates/form.ts +1 -1
  414. package/src/templates/list.ts +6 -6
  415. package/src/templates/long-running-process.ts +1 -1
  416. package/src/templates/multiform.ts +1 -1
  417. package/src/templates/page.ts +1 -1
  418. package/src/templates/route-test.ts +1 -1
  419. package/src/templates/stateful-page.ts +1 -1
  420. package/src/templates/templates.ts +9 -9
  421. package/src/test_utils/locator_is_visible.ts +1 -1
  422. package/src/utils/extract-fields-from-collection.ts +1 -1
  423. package/src/utils/list-collections.ts +1 -1
  424. package/src/utils/prettier.ts +2 -2
  425. package/src/utils/render-attributes.ts +1 -1
  426. package/src/utils/utils.ts +12 -12
  427. package/src/vitest.config.ts +21 -0
  428. package/tsconfig.json +12 -5
  429. package/lib/add-collection.js +0 -31
  430. package/lib/add-jdd-component.js +0 -34
  431. package/lib/add-route.js +0 -72
  432. package/lib/add-route.test.js +0 -66
  433. package/lib/build.js +0 -217
  434. package/lib/cli.js +0 -36
  435. package/lib/components/components.js +0 -19
  436. package/lib/example.test.js +0 -4
  437. package/lib/find-css-includes.js +0 -30
  438. package/lib/find-scss-includes.js +0 -30
  439. package/lib/forms/controls/array.js +0 -148
  440. package/lib/forms/controls/autocomplete.js +0 -27
  441. package/lib/forms/controls/big-radio-group.js +0 -38
  442. package/lib/forms/controls/checkbox-group.js +0 -33
  443. package/lib/forms/controls/checkbox.js +0 -29
  444. package/lib/forms/controls/checkboxed-list-input.js +0 -39
  445. package/lib/forms/controls/collapsible-checkbox-group.js +0 -17
  446. package/lib/forms/controls/controls.js +0 -60
  447. package/lib/forms/controls/derived-frame.js +0 -56
  448. package/lib/forms/controls/derived.js +0 -81
  449. package/lib/forms/controls/dropdown.js +0 -60
  450. package/lib/forms/controls/editable-collection-subset.js +0 -72
  451. package/lib/forms/controls/field-group.js +0 -57
  452. package/lib/forms/controls/file.js +0 -39
  453. package/lib/forms/controls/form-control.js +0 -19
  454. package/lib/forms/controls/form-field-control.js +0 -13
  455. package/lib/forms/controls/form-header.js +0 -18
  456. package/lib/forms/controls/form-paragraph.js +0 -16
  457. package/lib/forms/controls/frame.js +0 -29
  458. package/lib/forms/controls/hidden-input.js +0 -18
  459. package/lib/forms/controls/html.js +0 -27
  460. package/lib/forms/controls/multiple-files.js +0 -164
  461. package/lib/forms/controls/multiple-photos.js +0 -37
  462. package/lib/forms/controls/number.js +0 -29
  463. package/lib/forms/controls/photo.js +0 -61
  464. package/lib/forms/controls/radio.js +0 -29
  465. package/lib/forms/controls/reverse-single-reference.js +0 -46
  466. package/lib/forms/controls/simple-input.js +0 -82
  467. package/lib/forms/controls/textarea.js +0 -37
  468. package/lib/forms/controls/tickable.js +0 -79
  469. package/lib/forms/fields/boolean.js +0 -55
  470. package/lib/forms/fields/boolean.test.js +0 -37
  471. package/lib/forms/fields/checkboxed-list.js +0 -44
  472. package/lib/forms/fields/collection-field.js +0 -33
  473. package/lib/forms/fields/email.js +0 -15
  474. package/lib/forms/fields/email.test.js +0 -25
  475. package/lib/forms/fields/enum-multiple.js +0 -51
  476. package/lib/forms/fields/enum-multiple.test.js +0 -32
  477. package/lib/forms/fields/enum.js +0 -43
  478. package/lib/forms/fields/enum.test.js +0 -26
  479. package/lib/forms/fields/existing-sealious-value.js +0 -20
  480. package/lib/forms/fields/field.js +0 -100
  481. package/lib/forms/fields/file.js +0 -57
  482. package/lib/forms/fields/multiple-files.js +0 -19
  483. package/lib/forms/fields/number.js +0 -49
  484. package/lib/forms/fields/number.test.js +0 -35
  485. package/lib/forms/fields/pick-from-list.js +0 -35
  486. package/lib/forms/fields/pick-from-list.test.js +0 -22
  487. package/lib/forms/fields/proxy-field.js +0 -24
  488. package/lib/forms/fields/regexp.js +0 -44
  489. package/lib/forms/fields/regexp.test.js +0 -26
  490. package/lib/forms/fields/reverse-single-reference.js +0 -18
  491. package/lib/forms/fields/simple-form-field.js +0 -23
  492. package/lib/forms/fields/structured-array.js +0 -22
  493. package/lib/forms/form.js +0 -183
  494. package/lib/forms/form.test.js +0 -275
  495. package/lib/forms/multiform.js +0 -178
  496. package/lib/forms/multiform.test.js +0 -431
  497. package/lib/generate-collections.js +0 -83
  498. package/lib/generate-components.js +0 -63
  499. package/lib/generate-routes.js +0 -105
  500. package/lib/index.js +0 -46
  501. package/lib/make-env.js +0 -21
  502. package/lib/make-hidden-inputs.js +0 -18
  503. package/lib/mount.js +0 -74
  504. package/lib/notifier.js +0 -26
  505. package/lib/page/access-control.js +0 -20
  506. package/lib/page/default-list-filters.js +0 -45
  507. package/lib/page/list.js +0 -190
  508. package/lib/page/mountable-with-fields.js +0 -89
  509. package/lib/page/mountable.js +0 -9
  510. package/lib/page/page.js +0 -30
  511. package/lib/page/props-parser.js +0 -31
  512. package/lib/page/sealious-list.js +0 -66
  513. package/lib/page/stateful-page.js +0 -104
  514. package/lib/run.js +0 -1
  515. package/lib/sanitize.js +0 -14
  516. package/lib/templates/collection.js +0 -16
  517. package/lib/templates/jdd-component.js +0 -43
  518. package/lib/templates/templates.js +0 -24
  519. package/lib/test_utils/locator_is_visible.js +0 -15
  520. package/lib/utils/assert-throws.js +0 -24
  521. package/lib/utils/base64.js +0 -12
  522. package/lib/utils/browser-creator.js +0 -14
  523. package/lib/utils/escape-url-params.js +0 -19
  524. package/lib/utils/exec.js +0 -26
  525. package/lib/utils/extract-fields-from-collection.js +0 -32
  526. package/lib/utils/format-external-url.js +0 -15
  527. package/lib/utils/import-path.js +0 -24
  528. package/lib/utils/input-wrapper.js +0 -20
  529. package/lib/utils/list-collections.js +0 -20
  530. package/lib/utils/make-slug.js +0 -10
  531. package/lib/utils/natural-numbers.js +0 -10
  532. package/lib/utils/prettier.js +0 -40
  533. package/lib/utils/question.js +0 -23
  534. package/lib/utils/render-attributes.js +0 -23
  535. package/lib/utils/sleep.js +0 -8
  536. package/lib/utils/translate.js +0 -10
  537. package/lib/utils/url-with-new-params.js +0 -12
  538. package/lib/utils/utils.js +0 -43
  539. package/lib/utils/walk.js +0 -27
@@ -1,4 +1,4 @@
1
- /// <reference types="node" />
1
+ /// <reference types="node" resolution-mode="require"/>
2
2
  import { Readable } from "stream";
3
3
  import { FlatTemplatable } from "tempstream";
4
4
  export declare function getRequiredClass(isRequired: boolean): string;
@@ -2,15 +2,15 @@ export type Awaited<T> = T extends Promise<infer U> ? U : T;
2
2
  export type UnwrapArray<T> = T extends Array<infer U> ? U : T;
3
3
  export declare function keys<S extends string>(object: Record<S, unknown>): S[];
4
4
  export type ExtractTail<T extends any[]> = T extends [infer _, ...infer Tail] ? Tail : never;
5
- export { sleep } from "./sleep";
6
- export { naturalNumbers } from "./natural-numbers";
7
- export { UrlWithNewParams } from "./url-with-new-params";
8
- export { exec } from "./exec";
9
- export { importPath, curryImportPath } from "./import-path";
10
- export { listCollections } from "./list-collections";
11
- export { walkDir } from "./walk";
12
- export { assertThrowsAsync } from "./assert-throws";
13
- export * from "./make-slug";
14
- export * from "./render-attributes";
15
- export * from "./format-external-url";
16
- export * from "./base64";
5
+ export { sleep } from "./sleep.js";
6
+ export { naturalNumbers } from "./natural-numbers.js";
7
+ export { UrlWithNewParams } from "./url-with-new-params.js";
8
+ export { exec } from "./exec.js";
9
+ export { importPath, curryImportPath } from "./import-path.js";
10
+ export { listCollections } from "./list-collections.js";
11
+ export { walkDir } from "./walk.js";
12
+ export { assertThrowsAsync } from "./assert-throws.js";
13
+ export * from "./make-slug.js";
14
+ export * from "./render-attributes.js";
15
+ export * from "./format-external-url.js";
16
+ export * from "./base64.js";
@@ -0,0 +1,2 @@
1
+ declare const _default: import("vite").UserConfig;
2
+ export default _default;
package/build.js ADDED
@@ -0,0 +1,18 @@
1
+ import * as esbuild from "esbuild";
2
+ import { default as glob } from "tiny-glob";
3
+ import { remove_named_imports } from "./remove-named-imports.js";
4
+
5
+ const entryPoints = (await glob("./src/**/*.{js,ts,tsx}")).filter(
6
+ (path) => !path.includes(".#")
7
+ );
8
+
9
+ await esbuild.build({
10
+ entryPoints,
11
+ sourcemap: true,
12
+ bundle: false,
13
+ outdir: "./dist/",
14
+ logLevel: "info",
15
+ platform: "node",
16
+ target: "es2022",
17
+ format: "esm",
18
+ });
@@ -0,0 +1,31 @@
1
+ import { resolve } from "path";
2
+ import _locreq from "locreq";
3
+ import { promises as fs, existsSync } from "fs";
4
+ import { question } from "./utils/question.js";
5
+ import { collectionTemplate } from "./templates/collection.js";
6
+ import { generateCollections } from "./generate-collections.js";
7
+ const target_locreq = _locreq(process.cwd());
8
+ async function addCollection() {
9
+ const regex_pattern = /^([A-Z_$][a-zA-Z0-9_$]*)$/;
10
+ const collection_name = await question(
11
+ `What's the name of the collection class (e.g. "SecretDocuments", must start with a capital letter): `,
12
+ (s) => s.length > 3 && regex_pattern.test(s)
13
+ );
14
+ const url = await question(
15
+ "Enter the url-friendly name for the collection (e.g. secret-documents): ",
16
+ (s) => !s.includes("/") && !s.includes(" ")
17
+ );
18
+ const file_path = target_locreq.resolve(`src/back/collections/${url}.ts`);
19
+ if (existsSync(file_path)) {
20
+ console.error(`ERROR: File ${file_path} already exists.`);
21
+ return;
22
+ }
23
+ await fs.mkdir(resolve(file_path, "../"), { recursive: true });
24
+ await fs.writeFile(file_path, collectionTemplate(collection_name));
25
+ console.log(`${file_path} created`);
26
+ await generateCollections();
27
+ }
28
+ export {
29
+ addCollection
30
+ };
31
+ //# sourceMappingURL=add-collection.js.map
@@ -0,0 +1,42 @@
1
+ import { resolve } from "path";
2
+ import _locreq from "locreq";
3
+ import { promises as fs, existsSync } from "fs";
4
+ import { question } from "./utils/question.js";
5
+ const target_locreq = _locreq(process.cwd());
6
+ import { jddComponentTemplate } from "./templates/jdd-component.js";
7
+ import { generateComponents } from "./generate-components.js";
8
+ import { toKebabCase } from "js-convert-case";
9
+ async function addJDDComponent() {
10
+ const component_name = await question(
11
+ "What's the name of the component? > ",
12
+ (s) => s.length > 3
13
+ );
14
+ const file_path = target_locreq.resolve(
15
+ `src/back/jdd-components/${toKebabCase(component_name)}/${toKebabCase(
16
+ component_name
17
+ )}.jdd.tsx`
18
+ );
19
+ if (existsSync(file_path)) {
20
+ console.error(`ERROR: File ${file_path} already exists.`);
21
+ return;
22
+ }
23
+ await fs.mkdir(resolve(file_path, "../"), { recursive: true });
24
+ await fs.writeFile(file_path, jddComponentTemplate(component_name));
25
+ const css_file_path = target_locreq.resolve(
26
+ `src/back/jdd-components/${toKebabCase(component_name)}/${toKebabCase(
27
+ component_name
28
+ )}.css`
29
+ );
30
+ await fs.writeFile(
31
+ css_file_path,
32
+ `.${toKebabCase(component_name)} {
33
+ }`
34
+ );
35
+ console.log(`Created ${file_path}`);
36
+ console.log(`Created ${css_file_path}`);
37
+ await generateComponents();
38
+ }
39
+ export {
40
+ addJDDComponent
41
+ };
42
+ //# sourceMappingURL=add-jdd-component.js.map
@@ -0,0 +1,67 @@
1
+ import { existsSync, promises as fs } from "fs";
2
+ import _locreq from "locreq";
3
+ import { resolve } from "path";
4
+ import { generateRoutes } from "./generate-routes.js";
5
+ import { testTemplate } from "./templates/route-test.js";
6
+ import { escape_url_params } from "./utils/escape-url-params.js";
7
+ import prompts from "prompts";
8
+ import { Templates } from "./templates/templates.js";
9
+ async function addRoute(params, app_directory = process.cwd()) {
10
+ const target_locreq = _locreq(app_directory);
11
+ prompts.override(params);
12
+ const response = await prompts([
13
+ {
14
+ type: "text",
15
+ name: "action",
16
+ message: `What's the name of the action (e.g. "AddUser"): `,
17
+ validate: (s) => s.length > 3 ? true : "Should be at least 3 characters long"
18
+ },
19
+ {
20
+ type: "text",
21
+ name: "url",
22
+ message: "Enter a full absolute path for the new route (for example: /admin/users/:id/edit): ",
23
+ validate: (s) => s.trim()[0] == "/" ? true : "Should start with a '/'"
24
+ },
25
+ {
26
+ type: "select",
27
+ name: "mode",
28
+ message: "What kind of route is it?",
29
+ choices: [
30
+ { title: "page", value: "page" },
31
+ { title: "stateful page", value: "sreact" },
32
+ { title: "form", value: "form" },
33
+ { title: "list", value: "list" },
34
+ { title: "multiform", value: "multiform" },
35
+ { title: "redirect", value: "redirect" },
36
+ { title: "raw POST", value: "post" },
37
+ { title: "Long Running Process status page", value: "lpr" }
38
+ ]
39
+ }
40
+ ]);
41
+ const { action, url, mode } = response;
42
+ const extension = ["list", "lpr", "page", "sreact"].includes(mode) ? "tsx" : "ts";
43
+ const file_path = target_locreq.resolve(
44
+ `src/back/routes/${escape_url_params(url)}.${mode}.${extension}`
45
+ );
46
+ const test_file_path = target_locreq.resolve(
47
+ `src/back/routes/${escape_url_params(url)}.test.ts`
48
+ );
49
+ const template = Templates[mode];
50
+ if (!template) {
51
+ throw new Error(`Could not get template ${mode}`);
52
+ }
53
+ if (existsSync(file_path)) {
54
+ console.error(`ERROR: File ${file_path} already exists.`);
55
+ return;
56
+ }
57
+ await fs.mkdir(resolve(file_path, "../"), { recursive: true });
58
+ await fs.writeFile(file_path, await template(action, file_path));
59
+ await fs.writeFile(test_file_path, testTemplate(action, file_path));
60
+ console.log(`${file_path} created`);
61
+ console.log(`${test_file_path} created`);
62
+ await generateRoutes();
63
+ }
64
+ export {
65
+ addRoute
66
+ };
67
+ //# sourceMappingURL=add-route.js.map
@@ -0,0 +1,90 @@
1
+ import { promises as fs } from "fs";
2
+ import { exec, spawn } from "child_process";
3
+ import axios from "axios";
4
+ import waitPort from "wait-port";
5
+ import getPort from "get-port";
6
+ import _locreq from "locreq";
7
+ const locreq = _locreq(__dirname);
8
+ const execAsync = (cmd) => {
9
+ return new Promise((resolve, reject) => {
10
+ const process2 = exec(cmd);
11
+ console.log("EXECUTING", cmd);
12
+ process2?.stdout?.on("data", (data) => {
13
+ console.log(`stdout: ${data}`);
14
+ });
15
+ process2?.stderr?.on("data", (data) => {
16
+ console.log(`stdout: ${data}`);
17
+ });
18
+ process2.on("exit", (code) => {
19
+ if (code == 0) {
20
+ resolve();
21
+ } else {
22
+ reject();
23
+ }
24
+ });
25
+ });
26
+ };
27
+ const callSealgenBin = () => `node ${locreq.resolve("dist/cli.js")}`;
28
+ describe("add route test", () => {
29
+ let node_pid = 0;
30
+ const timestamp = Date.now();
31
+ const app_path = `/tmp/sealious-minimal-${timestamp}`;
32
+ const container_name = `sealgen-test-mongo-${timestamp}`;
33
+ afterEach(async function() {
34
+ try {
35
+ if (node_pid != 0)
36
+ await execAsync(`kill -9 ${node_pid}`);
37
+ } catch (error) {
38
+ throw new Error("node process exited unexpectedly, please inspect the output");
39
+ }
40
+ await Promise.all([
41
+ fs.rm(app_path, { recursive: true, force: true }),
42
+ execAsync(`docker rm -f ${container_name}`)
43
+ ]);
44
+ });
45
+ it("creates minimal sealious app", async function() {
46
+ console.log(" cloning sealious-minimal...");
47
+ await execAsync(
48
+ `git clone https://hub.sealcode.org/source/sealious-minimal.git ${app_path} && cd ${app_path} && git checkout 710b873`
49
+ );
50
+ console.log(" installing dependencies and sealgen...");
51
+ await execAsync(
52
+ `cd ${app_path} && npm ci && rm -rf node_modules/@sealcode/sealgen && ln -s $OLDPWD node_modules/@sealcode/sealgen`
53
+ );
54
+ console.log(" running add-route and building app...");
55
+ await execAsync(
56
+ `cd ${app_path} && ${callSealgenBin()} add-route --url=/sample --action=Sample --mode=page && ${callSealgenBin()} build`
57
+ );
58
+ console.log(
59
+ " starting the database...(if timeouts here, run 'docker pull mongo:4.4-bionic' to solve)"
60
+ );
61
+ const port = await getPort();
62
+ await execAsync(`docker run -p ${port}:27017 --name ${container_name} -d mongo:4.4-bionic`);
63
+ console.log(" running app and making request to the generated url...");
64
+ const env = { ...process.env, SEALIOUS_MONGO_PORT: port.toString() };
65
+ const node_args = [`${app_path}/dist/back/index.js`];
66
+ console.log(
67
+ "EXECUTING",
68
+ `${Object.entries(env).map(([key, value]) => `${key}=${value}`).join(" ")} node ${node_args.join(" ")}`
69
+ );
70
+ let app_start = spawn(`node`, node_args, {
71
+ env
72
+ });
73
+ app_start.stdout.on("data", (data) => console.log(data.toString()));
74
+ app_start.stderr.on("data", (data) => console.log(data.toString()));
75
+ if (app_start.pid == void 0)
76
+ throw new Error("node failed to start");
77
+ node_pid = app_start.pid;
78
+ await waitPort({
79
+ host: "localhost",
80
+ port: 8080,
81
+ output: "silent",
82
+ timeout: 6e3
83
+ });
84
+ const res = await axios.get("http://localhost:8080/sample");
85
+ if (res.status != 200) {
86
+ throw new Error("url generated by add-route exists but doesnt return 200");
87
+ }
88
+ }, 25e4);
89
+ });
90
+ //# sourceMappingURL=add-route.test.js.map
@@ -0,0 +1,17 @@
1
+ import { Page } from "@sealcode/sealgen";
2
+ import html from "../html.js";
3
+ const actionName = "Sample";
4
+ var sample_page_default = new class SamplePage extends Page {
5
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
6
+ async canAccess(_) {
7
+ return { canAccess: true, message: "" };
8
+ }
9
+ async render(ctx) {
10
+ return html(ctx, "Sample", /* @__PURE__ */ React.createElement("div", null));
11
+ }
12
+ }();
13
+ export {
14
+ actionName,
15
+ sample_page_default as default
16
+ };
17
+ //# sourceMappingURL=sample.page.js.map
@@ -0,0 +1,39 @@
1
+ import { withProdApp } from "../test_utils/with-prod-app.js";
2
+ import { VERY_LONG_TEST_TIMEOUT, webhintURL } from "../test_utils/webhint.js";
3
+ import { SampleURL } from "./urls.js";
4
+ import { getBrowser } from "../test_utils/browser-creator.js";
5
+ describe("Sample webhint", () => {
6
+ it(
7
+ "doesn't crash",
8
+ async function() {
9
+ return withProdApp(async ({ base_url, rest_api }) => {
10
+ await rest_api.get(SampleURL);
11
+ await webhintURL(base_url + SampleURL);
12
+ });
13
+ },
14
+ VERY_LONG_TEST_TIMEOUT
15
+ );
16
+ });
17
+ describe("Sample", () => {
18
+ let page;
19
+ let browser;
20
+ let context;
21
+ beforeEach(async () => {
22
+ browser = await getBrowser();
23
+ context = await browser.newContext();
24
+ page = await context.newPage();
25
+ });
26
+ afterEach(async () => {
27
+ await context.close();
28
+ });
29
+ it(
30
+ "works as expected",
31
+ async function() {
32
+ return withProdApp(async ({ base_url }) => {
33
+ await page.goto(base_url + SampleURL);
34
+ });
35
+ },
36
+ VERY_LONG_TEST_TIMEOUT
37
+ );
38
+ });
39
+ //# sourceMappingURL=sample.test.js.map
package/dist/build.js ADDED
@@ -0,0 +1,149 @@
1
+ import { build, context } from "esbuild";
2
+ import { promises as fs } from "fs";
3
+ import * as chokidar from "chokidar";
4
+ import { default as glob } from "tiny-glob";
5
+ import { generate_css_includes } from "./find-css-includes.js";
6
+ import { sleep } from "./utils/sleep.js";
7
+ import { generateCollections } from "./generate-collections.js";
8
+ import { generateRoutes } from "./generate-routes.js";
9
+ import { generateComponents } from "./generate-components.js";
10
+ import { make_notifier } from "./notifier.js";
11
+ import getPort from "get-port";
12
+ import { remove_named_imports } from "../remove-named-imports.js";
13
+ import _locreq from "locreq";
14
+ const target_locreq = _locreq(process.cwd());
15
+ async function get_notifier_port() {
16
+ return getPort({ port: 4e3 });
17
+ }
18
+ async function write_notifier_config(watch, port) {
19
+ const config = { watch };
20
+ if (port) {
21
+ config.port = port;
22
+ }
23
+ await fs.writeFile(
24
+ target_locreq.resolve("public/dist/notifier.json"),
25
+ JSON.stringify(config)
26
+ );
27
+ }
28
+ async function build_ts() {
29
+ await Promise.all([
30
+ generateCollections(),
31
+ generateRoutes(),
32
+ generateComponents()
33
+ ]);
34
+ const entryPoints = (await glob("./src/back/**/*.{ts,tsx}")).filter(
35
+ (path) => !path.includes(".#")
36
+ );
37
+ try {
38
+ await build({
39
+ entryPoints,
40
+ sourcemap: true,
41
+ bundle: false,
42
+ jsxFactory: "TempstreamJSX.createElement",
43
+ outdir: "./dist/back",
44
+ logLevel: "info",
45
+ platform: "node",
46
+ target: "es2022",
47
+ format: "esm",
48
+ plugins: [remove_named_imports]
49
+ });
50
+ } catch (e) {
51
+ console.error(e.message);
52
+ }
53
+ }
54
+ async function complex_build(watch) {
55
+ const loader = Object.fromEntries(
56
+ ["png", "svg", "jpg", "gif", "jpeg", "otf", "ttf"].map(
57
+ (ext) => ["." + ext, "file"]
58
+ )
59
+ );
60
+ let css_build = await context({
61
+ entryPoints: ["./src/main.css"],
62
+ sourcemap: true,
63
+ bundle: true,
64
+ outdir: "./public/dist",
65
+ logLevel: "info",
66
+ // plugins: [sassPlugin()],
67
+ loader
68
+ });
69
+ let ongoing_ts = false;
70
+ let ongoing_css = false;
71
+ let ongoing_ts_promise = null;
72
+ if (watch) {
73
+ const watcher = chokidar.watch("src", { ignoreInitial: true });
74
+ const port = await get_notifier_port();
75
+ const notifier = make_notifier(port);
76
+ await write_notifier_config(watch, port);
77
+ watcher.on("all", async (_, path) => {
78
+ if (!css_build)
79
+ return;
80
+ if (path.includes(".#"))
81
+ return;
82
+ if (path.endsWith(".css") && !path.endsWith("/includes.css")) {
83
+ if (ongoing_css) {
84
+ return;
85
+ }
86
+ ongoing_css = true;
87
+ await generate_css_includes();
88
+ try {
89
+ await css_build?.rebuild?.();
90
+ console.log(`Built main.css [on ${path}]`);
91
+ } catch (e) {
92
+ console.error(e.message);
93
+ await sleep(200);
94
+ css_build?.rebuild?.().catch((e2) => console.error(e2?.message));
95
+ }
96
+ if (ongoing_ts_promise) {
97
+ await ongoing_ts_promise;
98
+ }
99
+ notifier("css");
100
+ ongoing_css = false;
101
+ }
102
+ if ((path.endsWith(".ts") || path.endsWith(".tsx")) && !path.endsWith("src/back/collections/collections.ts") && !path.endsWith("src/back/routes/routes.ts") && !path.endsWith("src/back/routes/urls.ts")) {
103
+ if (ongoing_ts) {
104
+ return;
105
+ }
106
+ ongoing_ts = true;
107
+ ongoing_ts_promise = build_ts();
108
+ await ongoing_ts_promise;
109
+ notifier("ts");
110
+ ongoing_ts_promise = null;
111
+ console.log(`Finished TS build [on ${path}]`);
112
+ ongoing_ts = false;
113
+ }
114
+ });
115
+ } else {
116
+ await write_notifier_config(watch);
117
+ }
118
+ await generate_css_includes();
119
+ await Promise.all([css_build.rebuild(), build_ts()]);
120
+ if (watch) {
121
+ css_build?.rebuild?.();
122
+ } else {
123
+ css_build.dispose();
124
+ }
125
+ }
126
+ async function buildProject({
127
+ watch
128
+ }) {
129
+ try {
130
+ await build({
131
+ entryPoints: ["./src/front/index.ts"],
132
+ sourcemap: true,
133
+ outfile: "./public/dist/bundle.js",
134
+ logLevel: "info",
135
+ bundle: true
136
+ });
137
+ await complex_build(watch);
138
+ } catch (e) {
139
+ console.log("CAUGHT!");
140
+ console.error(e.message);
141
+ if (!watch) {
142
+ process.exit(1);
143
+ }
144
+ }
145
+ }
146
+ export {
147
+ buildProject
148
+ };
149
+ //# sourceMappingURL=build.js.map
package/dist/cli.js ADDED
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env node
2
+ import { addCollection } from "./add-collection.js";
3
+ import { addJDDComponent } from "./add-jdd-component.js";
4
+ import { addRoute } from "./add-route.js";
5
+ import { buildProject } from "./build.js";
6
+ import { generate_css_includes } from "./find-css-includes.js";
7
+ import { generateCollections } from "./generate-collections.js";
8
+ import { generateComponents } from "./generate-components.js";
9
+ import { generateRoutes } from "./generate-routes.js";
10
+ import { makeEnv } from "./make-env.js";
11
+ import yargs from "yargs/yargs";
12
+ const actions = {
13
+ "add-collection": addCollection,
14
+ "add-route": addRoute,
15
+ "generate-collections": generateCollections,
16
+ "generate-components": generateComponents,
17
+ "generate-routes": generateRoutes,
18
+ "generate-css-includes": generate_css_includes,
19
+ build: buildProject,
20
+ default: async function() {
21
+ console.log("Usage: `npx sealgen <action>`");
22
+ console.log(
23
+ `Available actions: ${Object.keys(actions).filter((e) => e != "default").join(", ")}`
24
+ );
25
+ },
26
+ "make-env": makeEnv,
27
+ "add-component": addJDDComponent
28
+ };
29
+ void async function() {
30
+ const action = process.argv.at(2);
31
+ const fn = actions[action || "default"] || actions.default;
32
+ const args = yargs(process.argv).argv;
33
+ await fn(args);
34
+ }();
35
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1,3 @@
1
+ export * from "./tabs.js";
2
+ export * from "./toggle-modal.js";
3
+ //# sourceMappingURL=components.js.map
@@ -1,11 +1,10 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.tabs = void 0;
4
- const tempstream_1 = require("tempstream");
1
+ import { tempstream } from "tempstream";
5
2
  function name_to_id(str) {
6
- return str.replace(/\W/g, "-");
3
+ return str.replace(/\W/g, "-");
7
4
  }
8
- const style = (hide_tabs_width) => /* HTML */ `<style>
5
+ const style = (hide_tabs_width) => (
6
+ /* HTML */
7
+ `<style>
9
8
  .tab-label {
10
9
  height: 45px;
11
10
  line-height: 45px;
@@ -50,13 +49,17 @@ const style = (hide_tabs_width) => /* HTML */ `<style>
50
49
  display: block !important;
51
50
  }
52
51
  }
53
- </style>`;
54
- function tabs(tabs, selected_tab_style = "font-weight: bold;", selected_index = 0, hide_tabs_width = 0) {
55
- return /* HTML */ (0, tempstream_1.tempstream) `${style(hide_tabs_width)}
56
- ${Object.keys(tabs)
57
- .map((tab_title, index) => {
58
- const id = name_to_id(tab_title);
59
- return /* HTML */ `<input
52
+ </style>`
53
+ );
54
+ function tabs(tabs2, selected_tab_style = "font-weight: bold;", selected_index = 0, hide_tabs_width = 0) {
55
+ return (
56
+ /* HTML */
57
+ tempstream`${style(hide_tabs_width)}
58
+ ${Object.keys(tabs2).map((tab_title, index) => {
59
+ const id = name_to_id(tab_title);
60
+ return (
61
+ /* HTML */
62
+ `<input
60
63
  type="radio"
61
64
  name="tabs"
62
65
  id="${id}"
@@ -66,12 +69,14 @@ function tabs(tabs, selected_tab_style = "font-weight: bold;", selected_index =
66
69
  />
67
70
  <label class="tab-label tab-label--${id}" for="${id}">
68
71
  ${tab_title}
69
- </label>`;
70
- })
71
- .join("\n")}
72
- ${Object.entries(tabs).map(([title, content]) => {
73
- const id = name_to_id(title);
74
- return /* HTML */ (0, tempstream_1.tempstream) `<div class="tab-label tab-label--mobile">
72
+ </label>`
73
+ );
74
+ }).join("\n")}
75
+ ${Object.entries(tabs2).map(([title, content]) => {
76
+ const id = name_to_id(title);
77
+ return (
78
+ /* HTML */
79
+ tempstream`<div class="tab-label tab-label--mobile">
75
80
  ${title}
76
81
  </div>
77
82
  <div class="tab-content tab-content--${id}">${content}</div>
@@ -85,8 +90,12 @@ function tabs(tabs, selected_tab_style = "font-weight: bold;", selected_index =
85
90
  .tab-radio--${id}:checked ~ label.tab-label--${id} {
86
91
  ${selected_tab_style}
87
92
  }
88
- </style>`;
89
- })}`;
93
+ </style>`
94
+ );
95
+ })}`
96
+ );
90
97
  }
91
- exports.tabs = tabs;
92
- //# sourceMappingURL=tabs.js.map
98
+ export {
99
+ tabs
100
+ };
101
+ //# sourceMappingURL=tabs.js.map
@@ -1,12 +1,9 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.toggleModal = void 0;
4
- const tempstream_1 = require("tempstream");
5
- const utils_1 = require("../utils/utils");
1
+ import { tempstream } from "tempstream";
2
+ import { makeSlug } from "../utils/utils.js";
6
3
  function toggleModal(options) {
7
- const { contentWrapped, contentUnwrapped, name } = options;
8
- const id = (0, utils_1.makeSlug)(name);
9
- return (0, tempstream_1.tempstream /* HTML */) `<style>
4
+ const { contentWrapped, contentUnwrapped, name } = options;
5
+ const id = makeSlug(name);
6
+ return tempstream`<style>
10
7
  .toggle-modal__wrapped {
11
8
  display: none;
12
9
  }
@@ -46,5 +43,7 @@ function toggleModal(options) {
46
43
  <div class="toggle-modal__unwrapped">${contentUnwrapped(id)}</div>
47
44
  </div>`;
48
45
  }
49
- exports.toggleModal = toggleModal;
50
- //# sourceMappingURL=toggle-modal.js.map
46
+ export {
47
+ toggleModal
48
+ };
49
+ //# sourceMappingURL=toggle-modal.js.map
@@ -0,0 +1,5 @@
1
+ describe("empty test", () => {
2
+ it("empty test", () => {
3
+ });
4
+ });
5
+ //# sourceMappingURL=example.test.js.map