@sealcode/sealgen 0.11.8 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.madgerc +7 -0
- package/@types/components/components.d.ts +2 -2
- package/@types/components/toggle-modal.d.ts +1 -1
- package/@types/example.test.d.ts +1 -0
- package/@types/forms/controls/array.d.ts +7 -7
- package/@types/forms/controls/autocomplete.d.ts +3 -3
- package/@types/forms/controls/big-radio-group.d.ts +3 -3
- package/@types/forms/controls/checkbox-group.d.ts +4 -4
- package/@types/forms/controls/checkbox.d.ts +3 -3
- package/@types/forms/controls/checkboxed-list-input.d.ts +4 -4
- package/@types/forms/controls/collapsible-checkbox-group.d.ts +3 -3
- package/@types/forms/controls/collapsible-field-group.d.ts +2 -2
- package/@types/forms/controls/controls.d.ts +29 -29
- package/@types/forms/controls/derived-frame.d.ts +6 -6
- package/@types/forms/controls/derived.d.ts +3 -3
- package/@types/forms/controls/dropdown.d.ts +4 -4
- package/@types/forms/controls/editable-collection-subset.d.ts +3 -3
- package/@types/forms/controls/field-group.d.ts +2 -2
- package/@types/forms/controls/file.d.ts +5 -5
- package/@types/forms/controls/form-control.d.ts +2 -2
- package/@types/forms/controls/form-field-control.d.ts +3 -3
- package/@types/forms/controls/form-header.d.ts +2 -2
- package/@types/forms/controls/form-paragraph.d.ts +1 -1
- package/@types/forms/controls/frame.d.ts +1 -1
- package/@types/forms/controls/hidden-input.d.ts +3 -3
- package/@types/forms/controls/html.d.ts +2 -2
- package/@types/forms/controls/multiple-files.d.ts +5 -5
- package/@types/forms/controls/multiple-photos.d.ts +5 -5
- package/@types/forms/controls/number.d.ts +3 -3
- package/@types/forms/controls/photo.d.ts +7 -7
- package/@types/forms/controls/radio.d.ts +3 -3
- package/@types/forms/controls/reverse-single-reference.d.ts +1 -0
- package/@types/forms/controls/simple-input.d.ts +4 -4
- package/@types/forms/controls/textarea.d.ts +4 -4
- package/@types/forms/controls/tickable.d.ts +4 -4
- package/@types/forms/fields/boolean.d.ts +2 -2
- package/@types/forms/fields/checkboxed-list.d.ts +2 -2
- package/@types/forms/fields/collection-field.d.ts +2 -2
- package/@types/forms/fields/email.d.ts +1 -1
- package/@types/forms/fields/enum-multiple.d.ts +2 -2
- package/@types/forms/fields/enum.d.ts +2 -2
- package/@types/forms/fields/existing-sealious-value.d.ts +1 -1
- package/@types/forms/fields/field.d.ts +16 -16
- package/@types/forms/fields/file.d.ts +2 -2
- package/@types/forms/fields/multiple-files.d.ts +1 -1
- package/@types/forms/fields/number.d.ts +2 -2
- package/@types/forms/fields/pick-from-list.d.ts +3 -3
- package/@types/forms/fields/proxy-field.d.ts +1 -1
- package/@types/forms/fields/regexp.d.ts +2 -2
- package/@types/forms/fields/reverse-single-reference.d.ts +1 -1
- package/@types/forms/fields/simple-form-field.d.ts +2 -2
- package/@types/forms/fields/structured-array.d.ts +2 -2
- package/@types/forms/form.d.ts +3 -3
- package/@types/forms/form.test.d.ts +1 -1
- package/@types/forms/multiform.d.ts +4 -4
- package/@types/index.d.ts +17 -17
- package/@types/make-hidden-inputs.d.ts +2 -2
- package/@types/mount.d.ts +2 -2
- package/@types/page/list.d.ts +4 -4
- package/@types/page/mountable-with-fields.d.ts +4 -4
- package/@types/page/mountable.d.ts +1 -1
- package/@types/page/page.d.ts +4 -4
- package/@types/page/props-parser.d.ts +2 -2
- package/@types/page/sealious-list.d.ts +1 -1
- package/@types/page/stateful-page.d.ts +3 -3
- package/@types/remove-named-imports.d.ts +4 -0
- package/@types/run.d.ts +1 -0
- package/@types/src/add-collection.d.ts +1 -0
- package/@types/src/add-jdd-component.d.ts +1 -0
- package/@types/src/add-route.d.ts +3 -0
- package/@types/src/add-route.test.d.ts +1 -0
- package/@types/src/build.d.ts +3 -0
- package/@types/src/cli.d.ts +2 -0
- package/@types/src/components/components.d.ts +2 -0
- package/@types/src/components/tabs.d.ts +2 -0
- package/@types/src/components/toggle-modal.d.ts +7 -0
- package/@types/src/example.test.d.ts +1 -0
- package/@types/src/find-css-includes.d.ts +1 -0
- package/@types/src/forms/controls/array.d.ts +35 -0
- package/@types/src/forms/controls/autocomplete.d.ts +22 -0
- package/@types/src/forms/controls/big-radio-group.d.ts +14 -0
- package/@types/src/forms/controls/checkbox-group.d.ts +22 -0
- package/@types/src/forms/controls/checkbox.d.ts +15 -0
- package/@types/src/forms/controls/checkboxed-list-input.d.ts +14 -0
- package/@types/src/forms/controls/collapsible-checkbox-group.d.ts +11 -0
- package/@types/src/forms/controls/collapsible-field-group.d.ts +21 -0
- package/@types/src/forms/controls/controls.d.ts +29 -0
- package/@types/src/forms/controls/derived-frame.d.ts +22 -0
- package/@types/src/forms/controls/derived.d.ts +13 -0
- package/@types/src/forms/controls/dropdown.d.ts +30 -0
- package/@types/src/forms/controls/editable-collection-subset.d.ts +20 -0
- package/@types/src/forms/controls/field-group.d.ts +23 -0
- package/@types/src/forms/controls/file.d.ts +16 -0
- package/@types/src/forms/controls/form-control.d.ts +19 -0
- package/@types/src/forms/controls/form-field-control.d.ts +13 -0
- package/@types/src/forms/controls/form-header.d.ts +8 -0
- package/@types/src/forms/controls/form-paragraph.d.ts +7 -0
- package/@types/src/forms/controls/frame.d.ts +17 -0
- package/@types/src/forms/controls/hidden-input.d.ts +9 -0
- package/@types/src/forms/controls/html.d.ts +11 -0
- package/@types/src/forms/controls/multiple-files.d.ts +40 -0
- package/@types/src/forms/controls/multiple-photos.d.ts +18 -0
- package/@types/src/forms/controls/number.d.ts +13 -0
- package/@types/src/forms/controls/photo.d.ts +22 -0
- package/@types/src/forms/controls/radio.d.ts +16 -0
- package/@types/src/forms/controls/reverse-single-reference.d.ts +1 -0
- package/@types/src/forms/controls/simple-input.d.ts +32 -0
- package/@types/src/forms/controls/textarea.d.ts +25 -0
- package/@types/src/forms/controls/tickable.d.ts +24 -0
- package/@types/src/forms/fields/boolean.d.ts +17 -0
- package/@types/src/forms/fields/boolean.test.d.ts +1 -0
- package/@types/src/forms/fields/checkboxed-list.d.ts +20 -0
- package/@types/src/forms/fields/collection-field.d.ts +15 -0
- package/@types/src/forms/fields/email.d.ts +7 -0
- package/@types/src/forms/fields/email.test.d.ts +1 -0
- package/@types/src/forms/fields/enum-multiple.d.ts +18 -0
- package/@types/src/forms/fields/enum-multiple.test.d.ts +1 -0
- package/@types/src/forms/fields/enum.d.ts +18 -0
- package/@types/src/forms/fields/enum.test.d.ts +1 -0
- package/@types/src/forms/fields/existing-sealious-value.d.ts +6 -0
- package/@types/src/forms/fields/field.d.ts +43 -0
- package/@types/src/forms/fields/fields.d.ts +15 -0
- package/@types/src/forms/fields/file.d.ts +16 -0
- package/@types/src/forms/fields/multiple-files.d.ts +14 -0
- package/@types/src/forms/fields/number.d.ts +23 -0
- package/@types/src/forms/fields/number.test.d.ts +1 -0
- package/@types/src/forms/fields/pick-from-list.d.ts +14 -0
- package/@types/src/forms/fields/pick-from-list.test.d.ts +1 -0
- package/@types/src/forms/fields/proxy-field.d.ts +13 -0
- package/@types/src/forms/fields/regexp.d.ts +16 -0
- package/@types/src/forms/fields/regexp.test.d.ts +1 -0
- package/@types/src/forms/fields/reverse-single-reference.d.ts +13 -0
- package/@types/src/forms/fields/simple-form-field.d.ts +9 -0
- package/@types/src/forms/fields/structured-array.d.ts +14 -0
- package/@types/src/forms/form-types.d.ts +26 -0
- package/@types/src/forms/form.d.ts +31 -0
- package/@types/src/forms/form.test.d.ts +6 -0
- package/@types/src/forms/multiform.d.ts +24 -0
- package/@types/src/forms/multiform.test.d.ts +1 -0
- package/@types/src/generate-collections.d.ts +2 -0
- package/@types/src/generate-components.d.ts +1 -0
- package/@types/src/generate-routes.d.ts +1 -0
- package/@types/src/hehe.test.d.ts +1 -0
- package/@types/src/index.d.ts +27 -0
- package/@types/src/make-env.d.ts +1 -0
- package/@types/src/make-hidden-inputs.d.ts +5 -0
- package/@types/src/mount.d.ts +6 -0
- package/@types/src/notifier.d.ts +1 -0
- package/@types/src/page/access-control.d.ts +6 -0
- package/@types/src/page/default-list-filters.d.ts +6 -0
- package/@types/src/page/list.d.ts +47 -0
- package/@types/src/page/mountable-with-fields.d.ts +36 -0
- package/@types/src/page/mountable.d.ts +11 -0
- package/@types/src/page/page.d.ts +19 -0
- package/@types/src/page/props-parser.d.ts +16 -0
- package/@types/src/page/sealious-list.d.ts +19 -0
- package/@types/src/page/stateful-page.d.ts +34 -0
- package/@types/src/run.d.ts +1 -0
- package/@types/src/sample-index.d.ts +1 -0
- package/@types/src/sample-lib.d.ts +3 -0
- package/@types/src/sanitize.d.ts +1 -0
- package/@types/src/templates/collection.d.ts +1 -0
- package/@types/src/templates/form.d.ts +1 -0
- package/@types/src/templates/jdd-component.d.ts +1 -0
- package/@types/src/templates/list.d.ts +1 -0
- package/@types/src/templates/long-running-process.d.ts +1 -0
- package/@types/src/templates/multiform.d.ts +1 -0
- package/@types/src/templates/page.d.ts +1 -0
- package/@types/src/templates/post.d.ts +1 -0
- package/@types/src/templates/redirect.d.ts +1 -0
- package/@types/src/templates/route-test.d.ts +1 -0
- package/@types/src/templates/stateful-page.d.ts +1 -0
- package/@types/src/templates/templates.d.ts +19 -0
- package/@types/src/test_utils/locator_is_visible.d.ts +2 -0
- package/@types/src/utils/assert-throws.d.ts +1 -0
- package/@types/src/utils/base64.d.ts +2 -0
- package/@types/src/utils/browser-creator.d.ts +1 -0
- package/@types/src/utils/escape-url-params.d.ts +2 -0
- package/@types/src/utils/exec.d.ts +5 -0
- package/@types/src/utils/extract-fields-from-collection.d.ts +4 -0
- package/@types/src/utils/format-external-url.d.ts +1 -0
- package/@types/src/utils/import-path.d.ts +2 -0
- package/@types/src/utils/input-wrapper.d.ts +5 -0
- package/@types/src/utils/list-collections.d.ts +1 -0
- package/@types/src/utils/make-slug.d.ts +1 -0
- package/@types/src/utils/natural-numbers.d.ts +1 -0
- package/@types/src/utils/prettier.d.ts +2 -0
- package/@types/src/utils/question.d.ts +1 -0
- package/@types/src/utils/render-attributes.d.ts +1 -0
- package/@types/src/utils/sleep.d.ts +1 -0
- package/@types/src/utils/translate.d.ts +3 -0
- package/@types/src/utils/url-with-new-params.d.ts +2 -0
- package/@types/src/utils/utils.d.ts +16 -0
- package/@types/src/utils/walk.d.ts +1 -0
- package/@types/src/vitest.config.d.ts +2 -0
- package/@types/templates/templates.d.ts +8 -8
- package/@types/utils/input-wrapper.d.ts +1 -1
- package/@types/utils/utils.d.ts +12 -12
- package/@types/vitest.config.d.ts +2 -0
- package/build.js +18 -0
- package/coverage/.tmp/coverage-15.json +1 -0
- package/coverage/.tmp/coverage-16.json +1 -0
- package/coverage/.tmp/coverage-17.json +1 -0
- package/coverage/.tmp/coverage-18.json +1 -0
- package/coverage/.tmp/coverage-19.json +1 -0
- package/coverage/.tmp/coverage-20.json +1 -0
- package/coverage/.tmp/coverage-21.json +1 -0
- package/coverage/.tmp/coverage-22.json +1 -0
- package/coverage/.tmp/coverage-23.json +1 -0
- package/coverage/.tmp/coverage-24.json +1 -0
- package/coverage/.tmp/coverage-25.json +1 -0
- package/coverage/.tmp/coverage-26.json +1 -0
- package/dist/add-collection.js +31 -0
- package/dist/add-jdd-component.js +42 -0
- package/dist/add-route.js +67 -0
- package/dist/add-route.test.js +90 -0
- package/dist/back/routes/sample.page.js +17 -0
- package/dist/back/routes/sample.test.js +39 -0
- package/dist/build.js +149 -0
- package/dist/cli.js +35 -0
- package/dist/components/components.js +3 -0
- package/dist/components/tabs.js +101 -0
- package/dist/components/toggle-modal.js +49 -0
- package/dist/example.test.js +5 -0
- package/dist/find-css-includes.js +27 -0
- package/dist/forms/controls/array.js +171 -0
- package/dist/forms/controls/autocomplete.js +34 -0
- package/dist/forms/controls/big-radio-group.js +38 -0
- package/dist/forms/controls/checkbox-group.js +46 -0
- package/dist/forms/controls/checkbox.js +28 -0
- package/dist/forms/controls/checkboxed-list-input.js +44 -0
- package/dist/forms/controls/collapsible-checkbox-group.js +16 -0
- package/dist/forms/controls/collapsible-field-group.js +87 -0
- package/dist/forms/controls/controls.js +44 -0
- package/dist/forms/controls/derived-frame.js +77 -0
- package/dist/forms/controls/derived.js +81 -0
- package/dist/forms/controls/dropdown.js +62 -0
- package/dist/forms/controls/editable-collection-subset.js +82 -0
- package/dist/forms/controls/field-group.js +52 -0
- package/dist/forms/controls/file.js +38 -0
- package/dist/forms/controls/form-control.js +19 -0
- package/dist/forms/controls/form-field-control.js +12 -0
- package/dist/forms/controls/form-header.js +17 -0
- package/dist/forms/controls/form-paragraph.js +15 -0
- package/dist/forms/controls/frame.js +22 -0
- package/dist/forms/controls/hidden-input.js +17 -0
- package/dist/forms/controls/html.js +23 -0
- package/dist/forms/controls/multiple-files.js +190 -0
- package/dist/forms/controls/multiple-photos.js +36 -0
- package/dist/forms/controls/number.js +24 -0
- package/dist/forms/controls/photo.js +56 -0
- package/dist/forms/controls/radio.js +28 -0
- package/dist/forms/controls/reverse-single-reference.js +1 -0
- package/dist/forms/controls/simple-input.js +85 -0
- package/dist/forms/controls/textarea.js +40 -0
- package/dist/forms/controls/tickable.js +72 -0
- package/dist/forms/fields/boolean.js +49 -0
- package/dist/forms/fields/boolean.test.js +33 -0
- package/dist/forms/fields/checkboxed-list.js +49 -0
- package/dist/forms/fields/collection-field.js +47 -0
- package/dist/forms/fields/email.js +19 -0
- package/dist/forms/fields/email.test.js +20 -0
- package/dist/forms/fields/enum-multiple.js +47 -0
- package/dist/forms/fields/enum-multiple.test.js +27 -0
- package/dist/forms/fields/enum.js +41 -0
- package/dist/forms/fields/enum.test.js +21 -0
- package/dist/forms/fields/existing-sealious-value.js +21 -0
- package/dist/forms/fields/field.js +82 -0
- package/dist/forms/fields/fields.js +16 -0
- package/dist/forms/fields/file.js +63 -0
- package/dist/forms/fields/multiple-files.js +18 -0
- package/dist/forms/fields/number.js +42 -0
- package/dist/forms/fields/number.test.js +31 -0
- package/dist/forms/fields/pick-from-list.js +34 -0
- package/dist/forms/fields/pick-from-list.test.js +17 -0
- package/dist/forms/fields/proxy-field.js +23 -0
- package/dist/forms/fields/regexp.js +42 -0
- package/dist/forms/fields/regexp.test.js +21 -0
- package/dist/forms/fields/reverse-single-reference.js +17 -0
- package/dist/forms/fields/simple-form-field.js +22 -0
- package/dist/forms/fields/structured-array.js +21 -0
- package/dist/forms/form-types.js +1 -0
- package/dist/forms/form.js +203 -0
- package/dist/forms/form.test.js +316 -0
- package/dist/forms/multiform.js +200 -0
- package/dist/forms/multiform.test.js +486 -0
- package/dist/generate-collections.js +65 -0
- package/dist/generate-components.js +41 -0
- package/dist/generate-routes.js +90 -0
- package/dist/hehe.test.js +7 -0
- package/dist/index.js +26 -0
- package/dist/make-env.js +17 -0
- package/dist/make-hidden-inputs.js +15 -0
- package/dist/mount.js +66 -0
- package/dist/notifier.js +21 -0
- package/dist/page/access-control.js +19 -0
- package/dist/page/default-list-filters.js +46 -0
- package/dist/page/list.js +199 -0
- package/dist/page/mountable-with-fields.js +106 -0
- package/dist/page/mountable.js +9 -0
- package/dist/page/page.js +31 -0
- package/dist/page/props-parser.js +24 -0
- package/dist/page/sealious-list.js +61 -0
- package/dist/page/stateful-page.js +123 -0
- package/dist/run.js +1 -0
- package/dist/sample-index.js +3 -0
- package/dist/sample-lib.js +9 -0
- package/dist/sanitize.js +10 -0
- package/dist/templates/collection.js +15 -0
- package/dist/templates/form.js +60 -0
- package/dist/templates/jdd-component.js +44 -0
- package/dist/templates/list.js +144 -0
- package/dist/templates/long-running-process.js +63 -0
- package/dist/templates/multiform.js +58 -0
- package/dist/templates/page.js +26 -0
- package/dist/templates/post.js +25 -0
- package/dist/templates/redirect.js +26 -0
- package/dist/templates/route-test.js +61 -0
- package/dist/templates/stateful-page.js +69 -0
- package/dist/templates/templates.js +24 -0
- package/dist/test_utils/locator_is_visible.js +14 -0
- package/dist/utils/assert-throws.js +18 -0
- package/dist/utils/base64.js +11 -0
- package/dist/utils/browser-creator.js +11 -0
- package/dist/utils/escape-url-params.js +11 -0
- package/dist/utils/exec.js +29 -0
- package/dist/utils/extract-fields-from-collection.js +33 -0
- package/dist/utils/format-external-url.js +11 -0
- package/dist/utils/import-path.js +23 -0
- package/dist/utils/input-wrapper.js +19 -0
- package/dist/utils/list-collections.js +13 -0
- package/dist/utils/make-slug.js +7 -0
- package/dist/utils/natural-numbers.js +9 -0
- package/dist/utils/prettier.js +15 -0
- package/dist/utils/question.js +20 -0
- package/dist/utils/render-attributes.js +18 -0
- package/dist/utils/sleep.js +7 -0
- package/dist/utils/translate.js +12 -0
- package/dist/utils/url-with-new-params.js +8 -0
- package/dist/utils/utils.js +28 -0
- package/dist/utils/walk.js +23 -0
- package/dist/vitest.config.js +23 -0
- package/lib/add-collection.js +14 -21
- package/lib/add-jdd-component.js +17 -24
- package/lib/add-route.js +18 -25
- package/lib/add-route.test.js +15 -21
- package/lib/build.js +30 -60
- package/lib/cli.js +20 -21
- package/lib/components/components.js +2 -18
- package/lib/components/tabs.js +4 -8
- package/lib/components/toggle-modal.js +5 -9
- package/lib/example.test.js +1 -0
- package/lib/find-css-includes.js +9 -16
- package/lib/forms/controls/array.js +16 -24
- package/lib/forms/controls/autocomplete.js +2 -6
- package/lib/forms/controls/big-radio-group.js +5 -9
- package/lib/forms/controls/checkbox-group.js +6 -10
- package/lib/forms/controls/checkbox.js +3 -8
- package/lib/forms/controls/checkboxed-list-input.js +8 -12
- package/lib/forms/controls/collapsible-checkbox-group.js +4 -8
- package/lib/forms/controls/collapsible-field-group.js +4 -8
- package/lib/forms/controls/controls.js +29 -58
- package/lib/forms/controls/derived-frame.js +13 -17
- package/lib/forms/controls/derived.js +6 -10
- package/lib/forms/controls/dropdown.js +7 -12
- package/lib/forms/controls/editable-collection-subset.js +7 -11
- package/lib/forms/controls/field-group.js +4 -8
- package/lib/forms/controls/file.js +4 -8
- package/lib/forms/controls/form-control.js +2 -7
- package/lib/forms/controls/form-field-control.js +2 -6
- package/lib/forms/controls/form-header.js +2 -6
- package/lib/forms/controls/form-paragraph.js +2 -6
- package/lib/forms/controls/frame.js +2 -6
- package/lib/forms/controls/hidden-input.js +5 -9
- package/lib/forms/controls/html.js +2 -6
- package/lib/forms/controls/multiple-files.js +13 -17
- package/lib/forms/controls/multiple-photos.js +4 -8
- package/lib/forms/controls/number.js +2 -6
- package/lib/forms/controls/photo.js +6 -10
- package/lib/forms/controls/radio.js +2 -6
- package/lib/forms/controls/reverse-single-reference.js +1 -0
- package/lib/forms/controls/simple-input.js +7 -11
- package/lib/forms/controls/textarea.js +2 -6
- package/lib/forms/controls/tickable.js +7 -11
- package/lib/forms/fields/boolean.js +7 -11
- package/lib/forms/fields/boolean.test.js +19 -24
- package/lib/forms/fields/checkboxed-list.js +7 -11
- package/lib/forms/fields/collection-field.js +4 -8
- package/lib/forms/fields/email.js +4 -8
- package/lib/forms/fields/email.test.js +10 -15
- package/lib/forms/fields/enum-multiple.js +7 -11
- package/lib/forms/fields/enum-multiple.test.js +15 -20
- package/lib/forms/fields/enum.js +6 -10
- package/lib/forms/fields/enum.test.js +11 -16
- package/lib/forms/fields/existing-sealious-value.js +2 -6
- package/lib/forms/fields/field.js +21 -40
- package/lib/forms/fields/file.js +15 -19
- package/lib/forms/fields/multiple-files.js +2 -6
- package/lib/forms/fields/number.js +9 -13
- package/lib/forms/fields/number.test.js +18 -23
- package/lib/forms/fields/pick-from-list.js +5 -9
- package/lib/forms/fields/pick-from-list.test.js +6 -11
- package/lib/forms/fields/proxy-field.js +2 -6
- package/lib/forms/fields/regexp.js +6 -10
- package/lib/forms/fields/regexp.test.js +11 -16
- package/lib/forms/fields/reverse-single-reference.js +2 -6
- package/lib/forms/fields/simple-form-field.js +5 -8
- package/lib/forms/fields/structured-array.js +2 -6
- package/lib/forms/form.js +16 -23
- package/lib/forms/form.test.js +1 -275
- package/lib/forms/multiform.js +10 -14
- package/lib/forms/multiform.test.js +65 -70
- package/lib/generate-collections.js +12 -43
- package/lib/generate-components.js +14 -44
- package/lib/generate-routes.js +22 -52
- package/lib/index.js +16 -45
- package/lib/make-env.js +7 -14
- package/lib/make-hidden-inputs.js +6 -10
- package/lib/mount.js +5 -9
- package/lib/notifier.js +3 -10
- package/lib/page/access-control.js +1 -5
- package/lib/page/default-list-filters.js +6 -11
- package/lib/page/list.js +24 -31
- package/lib/page/mountable-with-fields.js +7 -11
- package/lib/page/mountable.js +1 -5
- package/lib/page/page.js +6 -10
- package/lib/page/props-parser.js +4 -12
- package/lib/page/sealious-list.js +8 -15
- package/lib/page/stateful-page.js +18 -25
- package/lib/remove-named-imports.js +47 -0
- package/lib/run.js +1 -0
- package/lib/sanitize.js +1 -5
- package/lib/src/add-collection.js +24 -0
- package/lib/src/add-jdd-component.js +27 -0
- package/lib/src/add-route.js +65 -0
- package/lib/src/add-route.test.js +72 -0
- package/lib/src/build.js +142 -0
- package/lib/src/cli.js +37 -0
- package/lib/src/components/components.js +3 -0
- package/lib/src/components/tabs.js +88 -0
- package/lib/src/components/toggle-modal.js +46 -0
- package/lib/src/example.test.js +5 -0
- package/lib/src/find-css-includes.js +23 -0
- package/lib/src/forms/controls/array.js +141 -0
- package/lib/src/forms/controls/autocomplete.js +23 -0
- package/lib/src/forms/controls/big-radio-group.js +34 -0
- package/lib/src/forms/controls/checkbox-group.js +30 -0
- package/lib/src/forms/controls/checkbox.js +24 -0
- package/lib/src/forms/controls/checkboxed-list-input.js +35 -0
- package/lib/src/forms/controls/collapsible-checkbox-group.js +13 -0
- package/lib/src/forms/controls/collapsible-field-group.js +78 -0
- package/lib/src/forms/controls/controls.js +31 -0
- package/lib/src/forms/controls/derived-frame.js +52 -0
- package/lib/src/forms/controls/derived.js +77 -0
- package/lib/src/forms/controls/dropdown.js +55 -0
- package/lib/src/forms/controls/editable-collection-subset.js +68 -0
- package/lib/src/forms/controls/field-group.js +53 -0
- package/lib/src/forms/controls/file.js +35 -0
- package/lib/src/forms/controls/form-control.js +14 -0
- package/lib/src/forms/controls/form-field-control.js +9 -0
- package/lib/src/forms/controls/form-header.js +14 -0
- package/lib/src/forms/controls/form-paragraph.js +12 -0
- package/lib/src/forms/controls/frame.js +25 -0
- package/lib/src/forms/controls/hidden-input.js +14 -0
- package/lib/src/forms/controls/html.js +23 -0
- package/lib/src/forms/controls/multiple-files.js +160 -0
- package/lib/src/forms/controls/multiple-photos.js +33 -0
- package/lib/src/forms/controls/number.js +25 -0
- package/lib/src/forms/controls/photo.js +57 -0
- package/lib/src/forms/controls/radio.js +25 -0
- package/lib/src/forms/controls/reverse-single-reference.js +47 -0
- package/lib/src/forms/controls/simple-input.js +78 -0
- package/lib/src/forms/controls/textarea.js +33 -0
- package/lib/src/forms/controls/tickable.js +75 -0
- package/lib/src/forms/fields/boolean.js +51 -0
- package/lib/src/forms/fields/boolean.test.js +33 -0
- package/lib/src/forms/fields/checkboxed-list.js +40 -0
- package/lib/src/forms/fields/collection-field.js +29 -0
- package/lib/src/forms/fields/email.js +11 -0
- package/lib/src/forms/fields/email.test.js +20 -0
- package/lib/src/forms/fields/enum-multiple.js +47 -0
- package/lib/src/forms/fields/enum-multiple.test.js +27 -0
- package/lib/src/forms/fields/enum.js +39 -0
- package/lib/src/forms/fields/enum.test.js +21 -0
- package/lib/src/forms/fields/existing-sealious-value.js +16 -0
- package/lib/src/forms/fields/field.js +66 -0
- package/lib/src/forms/fields/fields.js +16 -0
- package/lib/src/forms/fields/file.js +53 -0
- package/lib/src/forms/fields/multiple-files.js +15 -0
- package/lib/src/forms/fields/number.js +45 -0
- package/lib/src/forms/fields/number.test.js +31 -0
- package/lib/src/forms/fields/pick-from-list.js +31 -0
- package/lib/src/forms/fields/pick-from-list.test.js +17 -0
- package/lib/src/forms/fields/proxy-field.js +20 -0
- package/lib/src/forms/fields/regexp.js +40 -0
- package/lib/src/forms/fields/regexp.test.js +21 -0
- package/lib/src/forms/fields/reverse-single-reference.js +14 -0
- package/lib/src/forms/fields/simple-form-field.js +19 -0
- package/lib/src/forms/fields/structured-array.js +18 -0
- package/lib/src/forms/form-types.js +2 -0
- package/lib/src/forms/form.js +176 -0
- package/lib/src/forms/form.test.js +271 -0
- package/lib/src/forms/multiform.js +174 -0
- package/lib/src/forms/multiform.test.js +430 -0
- package/lib/src/generate-collections.js +52 -0
- package/lib/src/generate-components.js +33 -0
- package/lib/src/generate-routes.js +75 -0
- package/lib/src/hehe.test.js +7 -0
- package/lib/src/index.js +19 -0
- package/lib/src/make-env.js +14 -0
- package/lib/src/make-hidden-inputs.js +14 -0
- package/lib/src/mount.js +70 -0
- package/lib/src/notifier.js +19 -0
- package/lib/src/page/access-control.js +16 -0
- package/lib/src/page/default-list-filters.js +40 -0
- package/lib/src/page/list.js +184 -0
- package/lib/src/page/mountable-with-fields.js +85 -0
- package/lib/src/page/mountable.js +5 -0
- package/lib/src/page/page.js +26 -0
- package/lib/src/page/props-parser.js +23 -0
- package/lib/src/page/sealious-list.js +59 -0
- package/lib/src/page/stateful-page.js +97 -0
- package/lib/src/run.js +2 -0
- package/lib/src/sample-index.js +3 -0
- package/lib/src/sample-lib.js +6 -0
- package/lib/src/sanitize.js +10 -0
- package/lib/src/templates/collection.js +12 -0
- package/lib/src/templates/form.js +57 -0
- package/lib/src/templates/jdd-component.js +39 -0
- package/lib/src/templates/list.js +139 -0
- package/lib/src/templates/long-running-process.js +60 -0
- package/lib/src/templates/multiform.js +55 -0
- package/lib/src/templates/page.js +23 -0
- package/lib/src/templates/post.js +22 -0
- package/lib/src/templates/redirect.js +23 -0
- package/lib/src/templates/route-test.js +54 -0
- package/lib/src/templates/stateful-page.js +66 -0
- package/lib/src/templates/templates.js +21 -0
- package/lib/src/test_utils/locator_is_visible.js +11 -0
- package/lib/src/utils/assert-throws.js +17 -0
- package/lib/src/utils/base64.js +7 -0
- package/lib/src/utils/browser-creator.js +10 -0
- package/lib/src/utils/escape-url-params.js +14 -0
- package/lib/src/utils/exec.js +22 -0
- package/lib/src/utils/extract-fields-from-collection.js +26 -0
- package/lib/src/utils/format-external-url.js +11 -0
- package/lib/src/utils/import-path.js +16 -0
- package/lib/src/utils/input-wrapper.js +15 -0
- package/lib/src/utils/list-collections.js +13 -0
- package/lib/src/utils/make-slug.js +6 -0
- package/lib/src/utils/natural-numbers.js +6 -0
- package/lib/src/utils/prettier.js +10 -0
- package/lib/src/utils/question.js +19 -0
- package/lib/src/utils/render-attributes.js +19 -0
- package/lib/src/utils/sleep.js +4 -0
- package/lib/src/utils/translate.js +6 -0
- package/lib/src/utils/url-with-new-params.js +5 -0
- package/lib/src/utils/utils.js +16 -0
- package/lib/src/utils/walk.js +23 -0
- package/lib/src/vitest.config.js +20 -0
- package/lib/templates/collection.js +1 -5
- package/lib/templates/form.js +3 -7
- package/lib/templates/jdd-component.js +5 -9
- package/lib/templates/list.js +14 -21
- package/lib/templates/long-running-process.js +3 -7
- package/lib/templates/multiform.js +3 -7
- package/lib/templates/page.js +3 -7
- package/lib/templates/post.js +1 -5
- package/lib/templates/redirect.js +1 -5
- package/lib/templates/route-test.js +3 -7
- package/lib/templates/stateful-page.js +3 -7
- package/lib/templates/templates.js +19 -22
- package/lib/test_utils/locator_is_visible.js +3 -7
- package/lib/utils/assert-throws.js +3 -10
- package/lib/utils/base64.js +2 -7
- package/lib/utils/browser-creator.js +3 -7
- package/lib/utils/escape-url-params.js +2 -7
- package/lib/utils/exec.js +3 -7
- package/lib/utils/extract-fields-from-collection.js +9 -15
- package/lib/utils/format-external-url.js +1 -5
- package/lib/utils/import-path.js +6 -14
- package/lib/utils/input-wrapper.js +4 -9
- package/lib/utils/list-collections.js +5 -12
- package/lib/utils/make-slug.js +1 -5
- package/lib/utils/natural-numbers.js +1 -5
- package/lib/utils/prettier.js +4 -34
- package/lib/utils/question.js +3 -7
- package/lib/utils/render-attributes.js +3 -7
- package/lib/utils/sleep.js +1 -5
- package/lib/utils/translate.js +1 -5
- package/lib/utils/url-with-new-params.js +3 -10
- package/lib/utils/utils.js +13 -40
- package/lib/utils/walk.js +6 -10
- package/lib/vitest.config.js +22 -0
- package/package.json +22 -21
- package/remove-named-imports.js +65 -0
- package/src/add-collection.ts +3 -3
- package/src/add-jdd-component.ts +3 -3
- package/src/add-route.test.ts +38 -10
- package/src/add-route.ts +5 -5
- package/src/build.ts +16 -90
- package/src/cli.ts +14 -13
- package/src/components/components.ts +2 -2
- package/src/components/toggle-modal.ts +1 -1
- package/src/find-css-includes.ts +1 -1
- package/src/forms/controls/array.ts +9 -8
- package/src/forms/controls/autocomplete.ts +4 -4
- package/src/forms/controls/big-radio-group.ts +3 -3
- package/src/forms/controls/checkbox-group.ts +7 -6
- package/src/forms/controls/checkbox.ts +3 -3
- package/src/forms/controls/checkboxed-list-input.ts +4 -6
- package/src/forms/controls/collapsible-checkbox-group.ts +4 -7
- package/src/forms/controls/collapsible-field-group.ts +2 -2
- package/src/forms/controls/controls.ts +29 -29
- package/src/forms/controls/derived-frame.ts +4 -4
- package/src/forms/controls/derived.ts +3 -3
- package/src/forms/controls/dropdown.ts +6 -5
- package/src/forms/controls/editable-collection-subset.ts +4 -4
- package/src/forms/controls/field-group.ts +2 -4
- package/src/forms/controls/file.ts +4 -4
- package/src/forms/controls/form-control.ts +1 -1
- package/src/forms/controls/form-field-control.ts +3 -4
- package/src/forms/controls/form-header.ts +1 -3
- package/src/forms/controls/form-paragraph.ts +1 -1
- package/src/forms/controls/frame.ts +2 -2
- package/src/forms/controls/hidden-input.ts +5 -5
- package/src/forms/controls/html.ts +1 -4
- package/src/forms/controls/multiple-files.ts +24 -26
- package/src/forms/controls/multiple-photos.ts +4 -4
- package/src/forms/controls/number.ts +3 -6
- package/src/forms/controls/photo.ts +9 -8
- package/src/forms/controls/radio.ts +3 -3
- package/src/forms/controls/simple-input.ts +6 -6
- package/src/forms/controls/textarea.ts +4 -4
- package/src/forms/controls/tickable.ts +6 -6
- package/src/forms/fields/boolean.test.ts +2 -1
- package/src/forms/fields/boolean.ts +2 -2
- package/src/forms/fields/checkboxed-list.ts +2 -2
- package/src/forms/fields/collection-field.ts +2 -2
- package/src/forms/fields/email.test.ts +1 -1
- package/src/forms/fields/email.ts +1 -1
- package/src/forms/fields/enum-multiple.test.ts +1 -1
- package/src/forms/fields/enum-multiple.ts +2 -2
- package/src/forms/fields/enum.test.ts +1 -1
- package/src/forms/fields/enum.ts +2 -2
- package/src/forms/fields/existing-sealious-value.ts +1 -1
- package/src/forms/fields/field.ts +2 -18
- package/src/forms/fields/fields.ts +15 -0
- package/src/forms/fields/file.ts +8 -9
- package/src/forms/fields/multiple-files.ts +1 -1
- package/src/forms/fields/number.test.ts +2 -1
- package/src/forms/fields/number.ts +2 -2
- package/src/forms/fields/pick-from-list.test.ts +1 -1
- package/src/forms/fields/pick-from-list.ts +3 -3
- package/src/forms/fields/proxy-field.ts +1 -1
- package/src/forms/fields/regexp.test.ts +1 -1
- package/src/forms/fields/regexp.ts +2 -2
- package/src/forms/fields/reverse-single-reference.ts +1 -1
- package/src/forms/fields/simple-form-field.ts +2 -2
- package/src/forms/fields/structured-array.ts +2 -2
- package/src/forms/form-types.ts +30 -0
- package/src/forms/form.test.ts +16 -13
- package/src/forms/form.ts +11 -31
- package/src/forms/multiform.test.ts +33 -28
- package/src/forms/multiform.ts +4 -3
- package/src/generate-collections.ts +1 -1
- package/src/generate-components.ts +3 -1
- package/src/generate-routes.ts +5 -5
- package/src/index.ts +19 -17
- package/src/make-hidden-inputs.ts +3 -3
- package/src/mount.ts +5 -5
- package/src/page/list.ts +8 -6
- package/src/page/mountable-with-fields.ts +8 -4
- package/src/page/page.ts +3 -4
- package/src/page/props-parser.ts +2 -2
- package/src/page/sealious-list.ts +2 -2
- package/src/page/stateful-page.ts +3 -3
- package/src/templates/form.ts +1 -1
- package/src/templates/list.ts +6 -6
- package/src/templates/long-running-process.ts +1 -1
- package/src/templates/multiform.ts +1 -1
- package/src/templates/page.ts +1 -1
- package/src/templates/route-test.ts +1 -1
- package/src/templates/stateful-page.ts +1 -1
- package/src/templates/templates.ts +9 -9
- package/src/test_utils/locator_is_visible.ts +1 -1
- package/src/utils/extract-fields-from-collection.ts +1 -1
- package/src/utils/list-collections.ts +1 -1
- package/src/utils/prettier.ts +2 -2
- package/src/utils/render-attributes.ts +1 -1
- package/src/utils/utils.ts +12 -12
- package/src/vitest.config.ts +21 -0
- package/tsconfig.json +12 -5
- package/lib/find-scss-includes.js +0 -30
|
@@ -1,27 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const mount_1 = require("../mount");
|
|
13
|
-
const multiform_1 = require("./multiform");
|
|
14
|
-
const utils_1 = require("../utils/utils");
|
|
15
|
-
const form_test_1 = require("./form.test");
|
|
16
|
-
const browser_creator_1 = require("../utils/browser-creator");
|
|
1
|
+
import Router from "@koa/router";
|
|
2
|
+
import Koa from "koa";
|
|
3
|
+
import axios from "axios";
|
|
4
|
+
import { expect } from "@playwright/test";
|
|
5
|
+
import { tempstream } from "tempstream";
|
|
6
|
+
import { Controls, Fields, Form } from "../index.js";
|
|
7
|
+
import { mount } from "../mount.js";
|
|
8
|
+
import { Multiform } from "./multiform.js";
|
|
9
|
+
import { assertThrowsAsync } from "../utils/utils.js";
|
|
10
|
+
import { form_factory } from "./form.test.js";
|
|
11
|
+
import { getBrowser } from "../utils/browser-creator.js";
|
|
17
12
|
const fields1 = {
|
|
18
|
-
email: new
|
|
13
|
+
email: new Fields.SimpleFormField(true),
|
|
19
14
|
};
|
|
20
|
-
const form1 = new (class extends
|
|
15
|
+
const form1 = new (class extends Form {
|
|
21
16
|
constructor() {
|
|
22
17
|
super(...arguments);
|
|
23
18
|
this.defaultSuccessMessage = "Form1 done!";
|
|
24
|
-
this.controls = [new
|
|
19
|
+
this.controls = [new Controls.FormHeader("form1"), new Controls.SimpleInput(fields1.email)];
|
|
25
20
|
this.fields = fields1;
|
|
26
21
|
}
|
|
27
22
|
onSubmit() {
|
|
@@ -29,13 +24,13 @@ const form1 = new (class extends __1.Form {
|
|
|
29
24
|
}
|
|
30
25
|
})();
|
|
31
26
|
const fields2 = {
|
|
32
|
-
name: new
|
|
27
|
+
name: new Fields.SimpleFormField(true),
|
|
33
28
|
};
|
|
34
|
-
const form2 = new (class extends
|
|
29
|
+
const form2 = new (class extends Form {
|
|
35
30
|
constructor() {
|
|
36
31
|
super(...arguments);
|
|
37
32
|
this.defaultSuccessMessage = "Form2 done!";
|
|
38
|
-
this.controls = [new
|
|
33
|
+
this.controls = [new Controls.FormHeader("form2"), new Controls.SimpleInput(fields2.name)];
|
|
39
34
|
this.fields = fields2;
|
|
40
35
|
}
|
|
41
36
|
onSubmit() {
|
|
@@ -43,17 +38,17 @@ const form2 = new (class extends __1.Form {
|
|
|
43
38
|
}
|
|
44
39
|
})();
|
|
45
40
|
function multiform_factory(canAccessFun1, canAccessFun2) {
|
|
46
|
-
return new (class extends
|
|
41
|
+
return new (class extends Multiform {
|
|
47
42
|
constructor() {
|
|
48
43
|
super(...arguments);
|
|
49
44
|
this.name = "multiform_test";
|
|
50
45
|
this.forms = {
|
|
51
|
-
form1:
|
|
52
|
-
form2:
|
|
46
|
+
form1: form_factory(canAccessFun1),
|
|
47
|
+
form2: form_factory(canAccessFun2),
|
|
53
48
|
};
|
|
54
49
|
}
|
|
55
50
|
async render(...args) {
|
|
56
|
-
return
|
|
51
|
+
return tempstream /* HTML */ `<!DOCTYPE html>
|
|
57
52
|
<html>
|
|
58
53
|
<head>
|
|
59
54
|
<title>Multiform Test - Sealgen</title>
|
|
@@ -71,7 +66,7 @@ function multiform_factory(canAccessFun1, canAccessFun2) {
|
|
|
71
66
|
async function tests(js_enabled) {
|
|
72
67
|
let page;
|
|
73
68
|
before(async () => {
|
|
74
|
-
const browser = await
|
|
69
|
+
const browser = await getBrowser();
|
|
75
70
|
const context = await browser.newContext({
|
|
76
71
|
javaScriptEnabled: js_enabled,
|
|
77
72
|
});
|
|
@@ -85,18 +80,18 @@ async function tests(js_enabled) {
|
|
|
85
80
|
});
|
|
86
81
|
it("checking whether only one submit handler is run", async () => {
|
|
87
82
|
await page.getByText("Form1 done!").click();
|
|
88
|
-
await
|
|
83
|
+
await assertThrowsAsync(async () => {
|
|
89
84
|
return page.getByText("Form2 done!").click({ timeout: 500 });
|
|
90
85
|
});
|
|
91
86
|
});
|
|
92
87
|
it("checking whether the input in the not submitted form prevails", async () => {
|
|
93
|
-
await
|
|
88
|
+
await expect(page.getByLabel("name")).toHaveValue("sample2");
|
|
94
89
|
});
|
|
95
90
|
}
|
|
96
91
|
async function general_form_validation_e2e_tests(js_enabled) {
|
|
97
92
|
let browser;
|
|
98
93
|
let page;
|
|
99
|
-
browser = await
|
|
94
|
+
browser = await getBrowser();
|
|
100
95
|
const context = await browser.newContext({
|
|
101
96
|
javaScriptEnabled: js_enabled,
|
|
102
97
|
});
|
|
@@ -107,7 +102,7 @@ async function general_form_validation_e2e_tests(js_enabled) {
|
|
|
107
102
|
await page.getByPlaceholder("password").click();
|
|
108
103
|
await page.getByPlaceholder("password").fill("test");
|
|
109
104
|
await page.locator("#multiform_test_form2_submit").click();
|
|
110
|
-
await
|
|
105
|
+
await assertThrowsAsync(async () => {
|
|
111
106
|
await page.getByText("Incorrect input").click({ timeout: 500 });
|
|
112
107
|
});
|
|
113
108
|
}
|
|
@@ -115,7 +110,7 @@ async function individual_field_validation_e2e_tests(javaScriptEnabled) {
|
|
|
115
110
|
let browser;
|
|
116
111
|
let page;
|
|
117
112
|
before(async () => {
|
|
118
|
-
browser = await
|
|
113
|
+
browser = await getBrowser();
|
|
119
114
|
const context = await browser.newContext({
|
|
120
115
|
javaScriptEnabled,
|
|
121
116
|
});
|
|
@@ -132,7 +127,7 @@ async function individual_field_validation_e2e_tests(javaScriptEnabled) {
|
|
|
132
127
|
await page.getByPlaceholder("text").click();
|
|
133
128
|
await page.getByPlaceholder("text").fill("yes@an.email");
|
|
134
129
|
await page.locator("#multiform_test_form1_submit").click();
|
|
135
|
-
|
|
130
|
+
assertThrowsAsync(async () => {
|
|
136
131
|
return page.getByText("Please enter a proper email address").click({ timeout: 500 });
|
|
137
132
|
});
|
|
138
133
|
});
|
|
@@ -141,16 +136,16 @@ describe("multiform test", () => {
|
|
|
141
136
|
describe("basic tests", async () => {
|
|
142
137
|
let server;
|
|
143
138
|
before(async () => {
|
|
144
|
-
const app = new
|
|
145
|
-
const router = new
|
|
146
|
-
|
|
139
|
+
const app = new Koa();
|
|
140
|
+
const router = new Router();
|
|
141
|
+
mount(router, "/", new (class extends Multiform {
|
|
147
142
|
constructor() {
|
|
148
143
|
super(...arguments);
|
|
149
144
|
this.name = "multiform_test";
|
|
150
145
|
this.forms = { form1, form2 };
|
|
151
146
|
}
|
|
152
147
|
async render(ctx, messages, prerenderedForms, show_field_errors = true) {
|
|
153
|
-
return
|
|
148
|
+
return tempstream /* HTML */ `<!DOCTYPE html>
|
|
154
149
|
<html>
|
|
155
150
|
<head>
|
|
156
151
|
<title>Multiform Test - Sealgen</title>
|
|
@@ -178,16 +173,16 @@ describe("multiform test", () => {
|
|
|
178
173
|
let server;
|
|
179
174
|
describe("allow access to both forms when both canAccess return true", async () => {
|
|
180
175
|
before(async () => {
|
|
181
|
-
const app = new
|
|
182
|
-
const router = new
|
|
183
|
-
|
|
176
|
+
const app = new Koa();
|
|
177
|
+
const router = new Router();
|
|
178
|
+
mount(router, "/", multiform_factory(async (ctx) => {
|
|
184
179
|
return { canAccess: true, message: "" };
|
|
185
180
|
}, async (ctx) => {
|
|
186
181
|
return { canAccess: true, message: "" };
|
|
187
182
|
}), true);
|
|
188
183
|
app.use(router.routes()).use(router.allowedMethods());
|
|
189
184
|
server = app.listen(8080);
|
|
190
|
-
const browser = await
|
|
185
|
+
const browser = await getBrowser();
|
|
191
186
|
const context = await browser.newContext();
|
|
192
187
|
page = await context.newPage();
|
|
193
188
|
});
|
|
@@ -203,7 +198,7 @@ describe("multiform test", () => {
|
|
|
203
198
|
await page.locator("#form2").getByText("This is a test:").click();
|
|
204
199
|
});
|
|
205
200
|
it("check wether you can submit through http (axios)", async () => {
|
|
206
|
-
await
|
|
201
|
+
await axios.post("http://localhost:8080/form2", {
|
|
207
202
|
form2__text: "pass",
|
|
208
203
|
}, {
|
|
209
204
|
validateStatus: (status) => {
|
|
@@ -216,16 +211,16 @@ describe("multiform test", () => {
|
|
|
216
211
|
});
|
|
217
212
|
describe("deny access to both forms", async () => {
|
|
218
213
|
before(async () => {
|
|
219
|
-
const app = new
|
|
220
|
-
const router = new
|
|
221
|
-
|
|
214
|
+
const app = new Koa();
|
|
215
|
+
const router = new Router();
|
|
216
|
+
mount(router, "/", multiform_factory(async (ctx) => {
|
|
222
217
|
return { canAccess: false, message: "" };
|
|
223
218
|
}, async (ctx) => {
|
|
224
219
|
return { canAccess: false, message: "" };
|
|
225
220
|
}), true);
|
|
226
221
|
app.use(router.routes()).use(router.allowedMethods());
|
|
227
222
|
server = app.listen(8080);
|
|
228
|
-
const browser = await
|
|
223
|
+
const browser = await getBrowser();
|
|
229
224
|
const context = await browser.newContext();
|
|
230
225
|
page = await context.newPage();
|
|
231
226
|
});
|
|
@@ -234,7 +229,7 @@ describe("multiform test", () => {
|
|
|
234
229
|
});
|
|
235
230
|
it("check wether forms didnt render", async () => {
|
|
236
231
|
await page.goto("http://localhost:8080");
|
|
237
|
-
await
|
|
232
|
+
await assertThrowsAsync(async () => {
|
|
238
233
|
return page
|
|
239
234
|
.locator("#form1")
|
|
240
235
|
.getByText("This is a test:")
|
|
@@ -242,7 +237,7 @@ describe("multiform test", () => {
|
|
|
242
237
|
});
|
|
243
238
|
});
|
|
244
239
|
it("check wether it's possible to submit through http", async () => {
|
|
245
|
-
await
|
|
240
|
+
await axios.post("http://localhost:8080/form2", {
|
|
246
241
|
form2__text: "pass",
|
|
247
242
|
}, {
|
|
248
243
|
validateStatus: (status) => {
|
|
@@ -255,16 +250,16 @@ describe("multiform test", () => {
|
|
|
255
250
|
});
|
|
256
251
|
describe("allow access to one form, deny to the other", async () => {
|
|
257
252
|
before(async () => {
|
|
258
|
-
const app = new
|
|
259
|
-
const router = new
|
|
260
|
-
|
|
253
|
+
const app = new Koa();
|
|
254
|
+
const router = new Router();
|
|
255
|
+
mount(router, "/", multiform_factory(async (ctx) => {
|
|
261
256
|
return { canAccess: true, message: "" };
|
|
262
257
|
}, async (ctx) => {
|
|
263
258
|
return { canAccess: false, message: "" };
|
|
264
259
|
}), true);
|
|
265
260
|
app.use(router.routes()).use(router.allowedMethods());
|
|
266
261
|
server = app.listen(8080);
|
|
267
|
-
const browser = await
|
|
262
|
+
const browser = await getBrowser();
|
|
268
263
|
const context = await browser.newContext({});
|
|
269
264
|
page = await context.newPage();
|
|
270
265
|
});
|
|
@@ -276,7 +271,7 @@ describe("multiform test", () => {
|
|
|
276
271
|
await page.locator("#form1").getByText("This is a test:").click({ timeout: 300 });
|
|
277
272
|
});
|
|
278
273
|
it("check wether it's possible to submit to form1 through http", async () => {
|
|
279
|
-
await
|
|
274
|
+
await axios.post("http://localhost:8080/form1", {
|
|
280
275
|
form1__text: "pass",
|
|
281
276
|
}, {
|
|
282
277
|
validateStatus: (status) => {
|
|
@@ -288,7 +283,7 @@ describe("multiform test", () => {
|
|
|
288
283
|
});
|
|
289
284
|
it("check wether form2 does not render", async () => {
|
|
290
285
|
await page.goto("http://localhost:8080");
|
|
291
|
-
await
|
|
286
|
+
await assertThrowsAsync(async () => {
|
|
292
287
|
return page
|
|
293
288
|
.locator("#form2")
|
|
294
289
|
.getByText("This is a test:")
|
|
@@ -296,7 +291,7 @@ describe("multiform test", () => {
|
|
|
296
291
|
});
|
|
297
292
|
});
|
|
298
293
|
it("check wether it's possible to submit to form2 through http", async () => {
|
|
299
|
-
await
|
|
294
|
+
await axios.post("http://localhost:8080/form2", {
|
|
300
295
|
form2__text: "pass",
|
|
301
296
|
}, {
|
|
302
297
|
validateStatus: (status) => {
|
|
@@ -312,20 +307,20 @@ describe("multiform test", () => {
|
|
|
312
307
|
describe("basic tests", async () => {
|
|
313
308
|
let server;
|
|
314
309
|
before(async () => {
|
|
315
|
-
const app = new
|
|
316
|
-
const router = new
|
|
317
|
-
|
|
310
|
+
const app = new Koa();
|
|
311
|
+
const router = new Router();
|
|
312
|
+
mount(router, "/", new (class extends Multiform {
|
|
318
313
|
constructor() {
|
|
319
314
|
super(...arguments);
|
|
320
315
|
this.name = "multiform_test";
|
|
321
316
|
this.forms = {
|
|
322
|
-
form1: new (class extends
|
|
317
|
+
form1: new (class extends Form {
|
|
323
318
|
constructor() {
|
|
324
319
|
super(...arguments);
|
|
325
320
|
this.fields = fields1;
|
|
326
321
|
this.submitButtonText = "Submit";
|
|
327
322
|
this.controls = [
|
|
328
|
-
new
|
|
323
|
+
new Controls.SimpleInput(fields1.email, {
|
|
329
324
|
label: "This is a test:",
|
|
330
325
|
type: "text",
|
|
331
326
|
}),
|
|
@@ -343,11 +338,11 @@ describe("multiform test", () => {
|
|
|
343
338
|
return { valid: true, error: "" };
|
|
344
339
|
}
|
|
345
340
|
})(),
|
|
346
|
-
form2:
|
|
341
|
+
form2: form_factory(),
|
|
347
342
|
};
|
|
348
343
|
}
|
|
349
344
|
async render(...args) {
|
|
350
|
-
return
|
|
345
|
+
return tempstream /* HTML */ `<!DOCTYPE html>
|
|
351
346
|
<html>
|
|
352
347
|
<head>
|
|
353
348
|
<title>Multiform Test - Sealgen</title>
|
|
@@ -373,23 +368,23 @@ describe("multiform test", () => {
|
|
|
373
368
|
describe("field specific validation", async () => {
|
|
374
369
|
let server;
|
|
375
370
|
before(async () => {
|
|
376
|
-
const app = new
|
|
377
|
-
const router = new
|
|
371
|
+
const app = new Koa();
|
|
372
|
+
const router = new Router();
|
|
378
373
|
const fields = {
|
|
379
|
-
text: new
|
|
374
|
+
text: new Fields.EmailField(true),
|
|
380
375
|
};
|
|
381
|
-
|
|
376
|
+
mount(router, "/", new (class extends Multiform {
|
|
382
377
|
constructor() {
|
|
383
378
|
super(...arguments);
|
|
384
379
|
this.name = "multiform_test";
|
|
385
380
|
this.forms = {
|
|
386
|
-
form1: new (class extends
|
|
381
|
+
form1: new (class extends Form {
|
|
387
382
|
constructor() {
|
|
388
383
|
super(...arguments);
|
|
389
384
|
this.fields = fields;
|
|
390
385
|
this.submitButtonText = "Submit";
|
|
391
386
|
this.controls = [
|
|
392
|
-
new
|
|
387
|
+
new Controls.SimpleInput(fields.text, {
|
|
393
388
|
label: "This is a test:",
|
|
394
389
|
type: "text",
|
|
395
390
|
}),
|
|
@@ -399,11 +394,11 @@ describe("multiform test", () => {
|
|
|
399
394
|
return;
|
|
400
395
|
}
|
|
401
396
|
})(),
|
|
402
|
-
form2:
|
|
397
|
+
form2: form_factory(),
|
|
403
398
|
};
|
|
404
399
|
}
|
|
405
400
|
async render(...args) {
|
|
406
|
-
return
|
|
401
|
+
return tempstream /* HTML */ `<!DOCTYPE html>
|
|
407
402
|
<html>
|
|
408
403
|
<head>
|
|
409
404
|
<title>Multiform Test - Sealgen</title>
|
|
@@ -1,50 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
-
};
|
|
28
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.generateCollections = exports.extractCollectionClassname = void 0;
|
|
30
|
-
const locreq_1 = __importDefault(require("locreq"));
|
|
31
|
-
const prettier = __importStar(require("prettier"));
|
|
32
|
-
const fs_1 = require("fs");
|
|
33
|
-
const ts_predicates_1 = require("@sealcode/ts-predicates");
|
|
34
|
-
const prettier_1 = require("./utils/prettier");
|
|
35
|
-
const target_locreq = (0, locreq_1.default)(process.cwd());
|
|
36
|
-
async function extractCollectionClassname(full_file_path) {
|
|
37
|
-
const file_content = await fs_1.promises.readFile(full_file_path, "utf-8");
|
|
1
|
+
import _locreq from "locreq";
|
|
2
|
+
import * as prettier from "prettier";
|
|
3
|
+
import { promises as fs } from "fs";
|
|
4
|
+
import { assertType, predicates } from "@sealcode/ts-predicates";
|
|
5
|
+
import { getPrettierConfig } from "./utils/prettier.js";
|
|
6
|
+
const target_locreq = _locreq(process.cwd());
|
|
7
|
+
export async function extractCollectionClassname(full_file_path) {
|
|
8
|
+
const file_content = await fs.readFile(full_file_path, "utf-8");
|
|
38
9
|
const result = /export default class (\w+)/.exec(file_content);
|
|
39
10
|
if (result === null) {
|
|
40
11
|
throw new Error("Missing 'export default class' statement?");
|
|
41
12
|
}
|
|
42
|
-
return
|
|
13
|
+
return assertType(result[1], predicates.string, `Missing export default class in '${full_file_path}'?`);
|
|
43
14
|
}
|
|
44
|
-
|
|
45
|
-
async function generateCollections() {
|
|
15
|
+
export async function generateCollections() {
|
|
46
16
|
const collections_dir = target_locreq.resolve("src/back/collections");
|
|
47
|
-
const files = (await
|
|
17
|
+
const files = (await fs.readdir(collections_dir)).filter((f) => !/\.(sub)?test\./.exec(f) &&
|
|
48
18
|
f != "collections.ts" &&
|
|
49
19
|
!f.includes(".#") &&
|
|
50
20
|
f.endsWith(".ts"));
|
|
@@ -75,9 +45,8 @@ ${file_data
|
|
|
75
45
|
.map(({ class_name, urlname }) => ` "${urlname}": ${class_name},`)
|
|
76
46
|
.join("\n")}
|
|
77
47
|
};`;
|
|
78
|
-
await
|
|
48
|
+
await fs.writeFile(target_locreq.resolve("src/back/collections/collections.ts"), prettier.format(content, await getPrettierConfig()));
|
|
79
49
|
// eslint-disable-next-line no-console
|
|
80
50
|
console.log("Successfuly generated new src/back/collections/collections.ts file");
|
|
81
51
|
}
|
|
82
|
-
exports.generateCollections = generateCollections;
|
|
83
52
|
//# sourceMappingURL=generate-collections.js.map
|
|
@@ -1,46 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
-
};
|
|
28
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.generateComponents = void 0;
|
|
30
|
-
const locreq_1 = __importDefault(require("locreq"));
|
|
31
|
-
const prettier = __importStar(require("prettier"));
|
|
32
|
-
const fs_1 = require("fs");
|
|
33
|
-
const prettier_1 = require("./utils/prettier");
|
|
34
|
-
const recursive_readdir_1 = __importDefault(require("recursive-readdir"));
|
|
35
|
-
const path_1 = __importDefault(require("path"));
|
|
36
|
-
const js_convert_case_1 = require("js-convert-case");
|
|
37
|
-
const target_locreq = (0, locreq_1.default)(process.cwd());
|
|
38
|
-
async function generateComponents() {
|
|
1
|
+
import _locreq from "locreq";
|
|
2
|
+
import * as prettier from "prettier";
|
|
3
|
+
import { promises as fs } from "fs";
|
|
4
|
+
import { getPrettierConfig } from "./utils/prettier.js";
|
|
5
|
+
import recursive from "recursive-readdir";
|
|
6
|
+
import path from "path";
|
|
7
|
+
import { toKebabCase, toPascalCase } from "js-convert-case";
|
|
8
|
+
const target_locreq = _locreq(process.cwd());
|
|
9
|
+
export async function generateComponents() {
|
|
39
10
|
const components_dir = target_locreq.resolve("src/back/jdd-components");
|
|
40
|
-
const component_names = (await (
|
|
11
|
+
const component_names = (await recursive(components_dir)).filter((c) => c.endsWith(".jdd.tsx"));
|
|
41
12
|
const component_data = component_names
|
|
42
13
|
.map((p) => "./" +
|
|
43
|
-
|
|
14
|
+
path.relative(components_dir, p).replace(/\.[tj]sx?$/, ".js"))
|
|
44
15
|
.map((relative_path) => {
|
|
45
16
|
const name = relative_path.match(/\/([^\/]+).jdd/)?.[1];
|
|
46
17
|
return { name, relative_path };
|
|
@@ -51,13 +22,12 @@ async function generateComponents() {
|
|
|
51
22
|
export const registry = new Registry();
|
|
52
23
|
${component_data
|
|
53
24
|
.map((c) => `
|
|
54
|
-
import { ${
|
|
55
|
-
registry.add("${
|
|
25
|
+
import { ${toPascalCase(c.name)} } from "${c.relative_path}";
|
|
26
|
+
registry.add("${toKebabCase(c.name)}", ${toPascalCase(c.name)});`)
|
|
56
27
|
.join("\n")}`;
|
|
57
28
|
const target = "src/back/jdd-components/components.ts";
|
|
58
|
-
await
|
|
29
|
+
await fs.writeFile(target_locreq.resolve(target), prettier.format(content, await getPrettierConfig()));
|
|
59
30
|
// eslint-disable-next-line no-console
|
|
60
31
|
console.log(`Successfuly generated new ${target} file`);
|
|
61
32
|
}
|
|
62
|
-
exports.generateComponents = generateComponents;
|
|
63
33
|
//# sourceMappingURL=generate-components.js.map
|
package/lib/generate-routes.js
CHANGED
|
@@ -1,50 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
-
};
|
|
28
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.generateRoutes = void 0;
|
|
30
|
-
const fs_1 = require("fs");
|
|
31
|
-
const prettier = __importStar(require("prettier"));
|
|
32
|
-
const path_1 = require("path");
|
|
33
|
-
const locreq_1 = __importDefault(require("locreq"));
|
|
34
|
-
const walk_1 = require("./utils/walk");
|
|
35
|
-
const import_path_1 = require("./utils/import-path");
|
|
36
|
-
const ts_predicates_1 = require("@sealcode/ts-predicates");
|
|
37
|
-
const escape_url_params_1 = require("./utils/escape-url-params");
|
|
38
|
-
const prettier_1 = require("./utils/prettier");
|
|
39
|
-
const templates_1 = require("./templates/templates");
|
|
40
|
-
const target_locreq = (0, locreq_1.default)(process.cwd());
|
|
1
|
+
import { promises as fs } from "fs";
|
|
2
|
+
import * as prettier from "prettier";
|
|
3
|
+
import { relative } from "path";
|
|
4
|
+
import _locreq from "locreq";
|
|
5
|
+
import { walkDir } from "./utils/walk.js";
|
|
6
|
+
import { importPath } from "./utils/import-path.js";
|
|
7
|
+
import { assertType, predicates } from "@sealcode/ts-predicates";
|
|
8
|
+
import { unescape_url_params } from "./utils/escape-url-params.js";
|
|
9
|
+
import { getPrettierConfig } from "./utils/prettier.js";
|
|
10
|
+
import { Templates } from "./templates/templates.js";
|
|
11
|
+
const target_locreq = _locreq(process.cwd());
|
|
41
12
|
async function extractActionName(full_file_path) {
|
|
42
|
-
const file_content = await
|
|
13
|
+
const file_content = await fs.readFile(full_file_path, "utf-8");
|
|
43
14
|
const result = /export const actionName = "(\w+)"/.exec(file_content);
|
|
44
15
|
if (result === null) {
|
|
45
16
|
throw new Error("Missing 'export const actionName' statement?");
|
|
46
17
|
}
|
|
47
|
-
return
|
|
18
|
+
return assertType(result[1], predicates.string, "Missing export default class?");
|
|
48
19
|
}
|
|
49
20
|
function generateURL(actionName, url) {
|
|
50
21
|
const parts = url.split("/");
|
|
@@ -64,14 +35,14 @@ function generateURL(actionName, url) {
|
|
|
64
35
|
.join(",")}];
|
|
65
36
|
${actionName}URL.rawURL = "${url}";`;
|
|
66
37
|
}
|
|
67
|
-
async function generateRoutes() {
|
|
68
|
-
const files = await Promise.all((await
|
|
69
|
-
.filter((f) => Object.keys(
|
|
38
|
+
export async function generateRoutes() {
|
|
39
|
+
const files = await Promise.all((await walkDir(target_locreq.resolve("src/back/routes")))
|
|
40
|
+
.filter((f) => Object.keys(Templates).some((key) => f.endsWith(`.${key}.ts`) || f.endsWith(`.${key}.tsx`)))
|
|
70
41
|
.map(async (fullpath) => ({
|
|
71
42
|
fullpath,
|
|
72
43
|
actionName: await extractActionName(fullpath),
|
|
73
|
-
url:
|
|
74
|
-
|
|
44
|
+
url: unescape_url_params("/" +
|
|
45
|
+
relative(target_locreq.resolve("src/back/routes"), fullpath).replace(/\..+/, "") +
|
|
75
46
|
"/" // trailing slash is important here, as it enables to use the entire path while building relative URLs. For example, while visiting /users/123, the path ./add-photo leads to /users/add-photo. While visiting /users/123/ (note the trailing slash), the path ./add-photo leads to /users/123/add-photo
|
|
76
47
|
),
|
|
77
48
|
})));
|
|
@@ -82,7 +53,7 @@ import { mount } from "@sealcode/sealgen";
|
|
|
82
53
|
import * as URLs from "./urls.js"
|
|
83
54
|
|
|
84
55
|
${files
|
|
85
|
-
.map(({ actionName, fullpath }) => `import { default as ${actionName} } from "${
|
|
56
|
+
.map(({ actionName, fullpath }) => `import { default as ${actionName} } from "${importPath(target_locreq.resolve("src/back/routes/routes.ts"), fullpath)}";`)
|
|
86
57
|
.join("\n")}
|
|
87
58
|
|
|
88
59
|
export default function mountAutoRoutes(router: Router) {
|
|
@@ -95,11 +66,10 @@ ${files
|
|
|
95
66
|
.map(({ actionName, url }) => generateURL(actionName, url))
|
|
96
67
|
.join("\n")}
|
|
97
68
|
`;
|
|
98
|
-
const prettier_config = await
|
|
99
|
-
await
|
|
100
|
-
await
|
|
69
|
+
const prettier_config = await getPrettierConfig();
|
|
70
|
+
await fs.writeFile(target_locreq.resolve("src/back/routes/routes.ts"), prettier.format(routes_content, prettier_config));
|
|
71
|
+
await fs.writeFile(target_locreq.resolve("src/back/routes/urls.ts"), prettier.format(urls_content, prettier_config));
|
|
101
72
|
// eslint-disable-next-line no-console
|
|
102
73
|
console.log("Successfuly generated new src/back/routes/routes.ts and src/back/routes/urls.ts");
|
|
103
74
|
}
|
|
104
|
-
exports.generateRoutes = generateRoutes;
|
|
105
75
|
//# sourceMappingURL=generate-routes.js.map
|