rimecms 0.28.10 → 0.30.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/README.md +3 -3
- package/dist/adapter-sqlite/area.server.js +8 -8
- package/dist/adapter-sqlite/generate-schema/column.server.d.ts +13 -0
- package/dist/adapter-sqlite/generate-schema/column.server.js +77 -0
- package/dist/adapter-sqlite/generate-schema/index.server.js +7 -12
- package/dist/adapter-sqlite/generate-schema/root.server.js +35 -39
- package/dist/adapter-sqlite/generate-schema/templates.server.d.ts +12 -0
- package/dist/adapter-sqlite/generate-schema/templates.server.js +19 -0
- package/dist/adapter-sqlite/generate-schema/{util.d.ts → util.server.d.ts} +2 -2
- package/dist/adapter-sqlite/generate-schema/{util.js → util.server.js} +2 -2
- package/dist/adapter-sqlite/generate-schema/write.server.js +1 -1
- package/dist/adapter-sqlite/relations.server.js +6 -1
- package/dist/adapter-sqlite/transform.server.js +1 -1
- package/dist/adapter-sqlite/util.server.d.ts +1 -6
- package/dist/adapter-sqlite/util.server.js +6 -0
- package/dist/adapter-sqlite/where.server.js +17 -16
- package/dist/adapter-sqlite/with.server.js +10 -10
- package/dist/core/areas/{api → rest}/get.server.d.ts +4 -2
- package/dist/core/areas/rest/get.server.js +45 -0
- package/dist/core/areas/rest/index.server.d.ts +6 -0
- package/dist/core/areas/rest/index.server.js +3 -0
- package/dist/core/areas/{api → rest}/update.server.d.ts +4 -2
- package/dist/core/areas/rest/update.server.js +43 -0
- package/dist/core/collections/auth/fields.d.ts +2 -182
- package/dist/core/collections/auth/hooks/before-upsert/augment-fields-password.server.d.ts +1 -1
- package/dist/core/collections/config/augment-auth.server.js +1 -1
- package/dist/core/collections/config/augment-nested.server.js +1 -1
- package/dist/core/collections/config/augment-panel.d.ts +1 -1
- package/dist/core/collections/config/augment-upload.js +2 -2
- package/dist/core/collections/config/augment-upload.server.js +4 -1
- package/dist/core/collections/operations/duplicate.js +31 -12
- package/dist/core/collections/operations/updateById.js +6 -5
- package/dist/core/collections/{api → rest}/create.server.d.ts +4 -2
- package/dist/core/collections/rest/create.server.js +37 -0
- package/dist/core/collections/{api → rest}/delete.server.d.ts +4 -2
- package/dist/core/collections/rest/delete.server.js +37 -0
- package/dist/core/collections/{api → rest}/deleteById.server.d.ts +4 -2
- package/dist/core/collections/rest/deleteById.server.js +21 -0
- package/dist/core/collections/{api → rest}/duplicate.server.d.ts +1 -1
- package/dist/core/collections/rest/duplicate.server.js +20 -0
- package/dist/core/collections/{api → rest}/get.server.d.ts +4 -2
- package/dist/core/collections/rest/get.server.js +50 -0
- package/dist/core/collections/{api → rest}/getById.server.d.ts +4 -2
- package/dist/core/collections/rest/getById.server.js +35 -0
- package/dist/core/collections/rest/index.server.d.ts +16 -0
- package/dist/core/collections/rest/index.server.js +16 -0
- package/dist/core/collections/{api → rest}/updateById.server.d.ts +4 -2
- package/dist/core/collections/rest/updateById.server.js +44 -0
- package/dist/core/collections/upload/disk/delete.server.d.ts +1 -1
- package/dist/core/collections/upload/disk/delete.server.js +48 -1
- package/dist/core/collections/upload/hooks/clean-up-files.server.js +2 -2
- package/dist/core/collections/upload/hooks/convert-base64.server.d.ts +1 -1
- package/dist/core/collections/upload/hooks/extract-path.server.d.ts +2 -2
- package/dist/core/collections/upload/hooks/extract-path.server.js +1 -1
- package/dist/core/collections/upload/hooks/handle-path-creation.server.d.ts +1 -1
- package/dist/core/collections/upload/hooks/process-file-upload.server.d.ts +1 -1
- package/dist/core/collections/upload/hooks/process-file-upload.server.js +3 -3
- package/dist/core/config/auth/better-auth.server.d.ts +2 -2
- package/dist/core/config/client/augment-directories.js +1 -1
- package/dist/core/config/config-context.server.d.ts +3 -3
- package/dist/core/config/server/augment-directories.server.js +1 -1
- package/dist/core/config/server/augment-panel-access.server.d.ts +1 -1
- package/dist/core/config/server/build-config.server.d.ts +11 -11
- package/dist/core/config/server/validate.server.js +51 -31
- package/dist/core/config/shared/find-thumbnail.js +13 -13
- package/dist/core/config/shared/find-title.js +13 -13
- package/dist/core/config/shared/upload-directories.js +1 -1
- package/dist/core/constant.d.ts +1 -1
- package/dist/core/constant.js +1 -1
- package/dist/core/constant.server.d.ts +1 -0
- package/dist/core/constant.server.js +2 -0
- package/dist/core/dev/cache/index.server.js +9 -9
- package/dist/core/dev/cli/build/index.d.ts +1 -0
- package/dist/core/dev/cli/build/index.js +37 -8
- package/dist/core/dev/cli/build/templates.d.ts +1 -0
- package/dist/core/dev/cli/build/templates.js +24 -0
- package/dist/core/dev/cli/clear/index.server.js +3 -2
- package/dist/core/dev/cli/generate/index.server.js +3 -2
- package/dist/core/dev/cli/index.js +20 -0
- package/dist/core/dev/cli/init/index.server.js +4 -4
- package/dist/core/dev/cli/init/templates.d.ts +1 -1
- package/dist/core/dev/cli/init/templates.js +2 -2
- package/dist/core/dev/cli/util/log.server.d.ts +1 -0
- package/dist/core/dev/cli/util/log.server.js +4 -0
- package/dist/core/dev/cli/util/package-manager.server.d.ts +9 -0
- package/dist/core/dev/cli/{init/package-manager-util.server.js → util/package-manager.server.js} +15 -0
- package/dist/core/dev/cli/util/package.server.d.ts +9 -0
- package/dist/core/dev/cli/{init/get-package-info.server.js → util/package.server.js} +10 -0
- package/dist/core/dev/generate/routes/common.server.d.ts +10 -1
- package/dist/core/dev/generate/routes/common.server.js +248 -29
- package/dist/core/dev/generate/routes/index.server.d.ts +7 -1
- package/dist/core/dev/generate/routes/index.server.js +16 -55
- package/dist/core/dev/generate/routes/util.server.d.ts +6 -16
- package/dist/core/dev/generate/routes/util.server.js +8 -21
- package/dist/core/dev/generate/types/index.server.js +22 -20
- package/dist/core/dev/vite/index.server.js +22 -6
- package/dist/core/errors/handler.server.d.ts +22 -1
- package/dist/core/errors/handler.server.js +25 -2
- package/dist/core/errors/index.d.ts +0 -1
- package/dist/core/errors/index.js +0 -1
- package/dist/core/fields/builders/boolean-builder.d.ts +3 -1
- package/dist/core/fields/builders/boolean-builder.js +3 -0
- package/dist/core/fields/builders/field-builder.d.ts +35 -2
- package/dist/core/fields/builders/field-builder.js +33 -2
- package/dist/core/fields/builders/form-field-builder.d.ts +71 -12
- package/dist/core/fields/builders/form-field-builder.js +96 -6
- package/dist/core/fields/builders/select-builder.d.ts +4 -1
- package/dist/core/fields/builders/select-builder.js +3 -0
- package/dist/core/fields/util.d.ts +9 -17
- package/dist/core/fields/util.js +49 -83
- package/dist/core/handlers/routes.server.d.ts +70 -1
- package/dist/core/handlers/routes.server.js +71 -4
- package/dist/core/naming.d.ts +34 -0
- package/dist/core/naming.js +39 -0
- package/dist/core/operations/blocks/diff.server.js +1 -1
- package/dist/core/operations/blocks/extract.server.js +1 -1
- package/dist/core/operations/configMap/buildTreeMap.d.ts +3 -2
- package/dist/core/operations/configMap/buildTreeMap.js +1 -1
- package/dist/core/operations/configMap/index.d.ts +2 -1
- package/dist/core/operations/configMap/index.js +13 -13
- package/dist/core/operations/configMap/types.d.ts +2 -2
- package/dist/core/operations/hooks/before-read/process-document-fields.server.js +14 -17
- package/dist/core/operations/hooks/before-upsert/data-config-map.server.d.ts +1 -1
- package/dist/core/operations/hooks/before-upsert/data-config-map.server.js +1 -1
- package/dist/core/operations/hooks/before-upsert/handle-new-version.server.d.ts +1 -1
- package/dist/core/operations/hooks/before-upsert/original-config-map.server.d.ts +1 -1
- package/dist/core/operations/hooks/before-upsert/original-config-map.server.js +1 -1
- package/dist/core/operations/hooks/before-upsert/set-default-values.server.d.ts +3 -5
- package/dist/core/operations/hooks/before-upsert/set-default-values.server.js +10 -15
- package/dist/core/operations/hooks/before-upsert/validate-fields.server.d.ts +1 -1
- package/dist/core/operations/hooks/before-upsert/validate-fields.server.js +49 -31
- package/dist/core/operations/relations/extract.server.js +5 -5
- package/dist/core/operations/shared/fallback-data-from-original.js +2 -2
- package/dist/core/operations/tree/diff.server.js +1 -1
- package/dist/core/operations/tree/extract.server.js +1 -1
- package/dist/core/plugins/api-init/index.server.js +10 -5
- package/dist/core/plugins/cache/cache.server.js +4 -4
- package/dist/core/rime.server.d.ts +10 -10
- package/dist/core/rime.server.js +5 -1
- package/dist/fields/blocks/component/AddBlockButton.svelte +7 -7
- package/dist/fields/blocks/component/AddBlockButton.svelte.d.ts +2 -2
- package/dist/fields/blocks/component/Blocks.svelte +6 -7
- package/dist/fields/blocks/component/props.d.ts +2 -2
- package/dist/fields/blocks/index.d.ts +1 -1
- package/dist/fields/blocks/index.js +3 -3
- package/dist/fields/blocks/index.server.js +1 -1
- package/dist/fields/checkbox/component/Checkbox.svelte +2 -2
- package/dist/fields/checkbox/component/props.d.ts +2 -2
- package/dist/fields/checkbox/index.server.d.ts +1 -2
- package/dist/fields/checkbox/index.server.js +1 -10
- package/dist/fields/combobox/component/ComboBox.svelte +3 -3
- package/dist/fields/combobox/component/props.d.ts +2 -2
- package/dist/fields/combobox/index.server.d.ts +1 -2
- package/dist/fields/combobox/index.server.js +2 -11
- package/dist/fields/component/index.d.ts +1 -1
- package/dist/fields/date/component/Date.svelte +4 -4
- package/dist/fields/date/component/Date.svelte.d.ts +2 -2
- package/dist/fields/date/index.d.ts +3 -1
- package/dist/fields/date/index.js +3 -0
- package/dist/fields/date/index.server.d.ts +1 -2
- package/dist/fields/date/index.server.js +1 -10
- package/dist/fields/email/component/Email.svelte +5 -6
- package/dist/fields/email/component/props.d.ts +2 -3
- package/dist/fields/email/index.d.ts +3 -2
- package/dist/fields/email/index.js +5 -2
- package/dist/fields/email/index.server.d.ts +0 -3
- package/dist/fields/email/index.server.js +0 -9
- package/dist/fields/group/component/Group.svelte +9 -15
- package/dist/fields/group/component/Group.svelte.d.ts +2 -2
- package/dist/fields/group/index.d.ts +4 -2
- package/dist/fields/group/index.server.js +2 -2
- package/dist/fields/index.server.d.ts +1 -4
- package/dist/fields/index.server.js +17 -13
- package/dist/fields/link/component/Link.svelte +5 -5
- package/dist/fields/link/component/RessourceInput.svelte +1 -1
- package/dist/fields/link/component/props.d.ts +2 -2
- package/dist/fields/link/index.d.ts +5 -2
- package/dist/fields/link/index.js +10 -11
- package/dist/fields/link/runtime.d.ts +2 -0
- package/dist/fields/link/runtime.js +1 -0
- package/dist/fields/link/{index.server.d.ts → runtime.server.d.ts} +1 -2
- package/dist/fields/link/{index.server.js → runtime.server.js} +2 -11
- package/dist/fields/number/component/Number.svelte +6 -6
- package/dist/fields/number/component/props.d.ts +2 -2
- package/dist/fields/number/index.d.ts +4 -10
- package/dist/fields/number/index.js +3 -4
- package/dist/fields/number/index.server.d.ts +1 -2
- package/dist/fields/number/index.server.js +1 -10
- package/dist/fields/radio/component/Radio.svelte +6 -7
- package/dist/fields/radio/component/props.d.ts +2 -2
- package/dist/fields/radio/index.server.d.ts +1 -2
- package/dist/fields/radio/index.server.js +2 -11
- package/dist/fields/relation/client.d.ts +1 -1
- package/dist/fields/relation/client.js +1 -1
- package/dist/fields/relation/component/Cell.svelte +1 -1
- package/dist/fields/relation/component/Relation.svelte +19 -15
- package/dist/fields/relation/component/Relation.svelte.d.ts +2 -2
- package/dist/fields/relation/component/upload/Browse.svelte +1 -1
- package/dist/fields/relation/index.d.ts +8 -5
- package/dist/fields/relation/index.js +8 -47
- package/dist/fields/relation/runtime.d.ts +5 -0
- package/dist/fields/relation/runtime.js +4 -0
- package/dist/fields/relation/runtime.server.d.ts +8 -0
- package/dist/fields/relation/runtime.server.js +49 -0
- package/dist/fields/rich-text/component/RichText.svelte +5 -5
- package/dist/fields/rich-text/component/props.d.ts +2 -2
- package/dist/fields/rich-text/core/features/fields/extension.d.ts +2 -2
- package/dist/fields/rich-text/core/features/fields/fields.svelte +2 -2
- package/dist/fields/rich-text/core/features/link/component/link-selector.svelte +1 -1
- package/dist/fields/rich-text/core/features/resource/resource-extension.d.ts +1 -1
- package/dist/fields/rich-text/core/features/resource/resource.svelte +1 -1
- package/dist/fields/rich-text/core/features/upload/upload-extension.d.ts +1 -1
- package/dist/fields/rich-text/core/features/upload/upload.svelte +1 -1
- package/dist/fields/rich-text/index.d.ts +2 -0
- package/dist/fields/rich-text/index.js +7 -2
- package/dist/fields/rich-text/index.server.d.ts +1 -2
- package/dist/fields/rich-text/index.server.js +1 -10
- package/dist/fields/select/component/Select.svelte +16 -16
- package/dist/fields/select/component/props.d.ts +2 -2
- package/dist/fields/select/index.d.ts +2 -0
- package/dist/fields/select/index.js +3 -0
- package/dist/fields/select/index.server.d.ts +1 -2
- package/dist/fields/select/index.server.js +2 -17
- package/dist/fields/slug/component/Slug.svelte +14 -10
- package/dist/fields/slug/component/Slug.svelte.d.ts +2 -2
- package/dist/fields/slug/index.d.ts +5 -2
- package/dist/fields/slug/index.js +3 -0
- package/dist/fields/slug/index.server.d.ts +1 -2
- package/dist/fields/slug/index.server.js +1 -10
- package/dist/fields/tabs/component/Tabs.svelte +15 -15
- package/dist/fields/tabs/component/Tabs.svelte.d.ts +2 -2
- package/dist/fields/tabs/index.d.ts +4 -16
- package/dist/fields/tabs/index.js +1 -8
- package/dist/fields/tabs/index.server.js +3 -3
- package/dist/fields/text/component/Text.svelte +5 -5
- package/dist/fields/text/component/props.d.ts +2 -3
- package/dist/fields/text/index.d.ts +4 -10
- package/dist/fields/text/index.js +3 -4
- package/dist/fields/text/index.server.d.ts +1 -2
- package/dist/fields/text/index.server.js +1 -10
- package/dist/fields/textarea/component/TextArea.svelte +3 -3
- package/dist/fields/textarea/component/props.d.ts +2 -2
- package/dist/fields/textarea/index.d.ts +4 -1
- package/dist/fields/textarea/index.js +3 -0
- package/dist/fields/textarea/index.server.d.ts +1 -2
- package/dist/fields/textarea/index.server.js +1 -10
- package/dist/fields/time/component/Time.svelte +5 -5
- package/dist/fields/time/component/Time.svelte.d.ts +1 -1
- package/dist/fields/time/component/props.d.ts +2 -2
- package/dist/fields/time/index.d.ts +2 -0
- package/dist/fields/time/index.js +3 -0
- package/dist/fields/time/index.server.d.ts +1 -2
- package/dist/fields/time/index.server.js +1 -10
- package/dist/fields/toggle/component/Toggle.svelte +3 -3
- package/dist/fields/toggle/component/Toggle.svelte.d.ts +1 -1
- package/dist/fields/toggle/component/props.d.ts +2 -2
- package/dist/fields/toggle/index.d.ts +2 -1
- package/dist/fields/toggle/index.server.d.ts +1 -2
- package/dist/fields/toggle/index.server.js +1 -10
- package/dist/fields/tree/component/AddItemButton.svelte +1 -2
- package/dist/fields/tree/component/Tree.svelte +6 -6
- package/dist/fields/tree/component/TreeBlock.svelte +5 -12
- package/dist/fields/tree/component/props.d.ts +3 -3
- package/dist/fields/tree/index.d.ts +3 -1
- package/dist/fields/tree/index.js +2 -2
- package/dist/fields/types.d.ts +11 -5
- package/dist/index.d.ts +8 -3
- package/dist/index.js +7 -3
- package/dist/panel/components/fields/FieldsPreview.svelte +4 -5
- package/dist/panel/components/fields/Hint.svelte +5 -4
- package/dist/panel/components/fields/Hint.svelte.d.ts +3 -2
- package/dist/panel/components/fields/Label.svelte +6 -11
- package/dist/panel/components/fields/Label.svelte.d.ts +3 -2
- package/dist/panel/components/fields/LabelFor.svelte +4 -4
- package/dist/panel/components/fields/LabelFor.svelte.d.ts +2 -1
- package/dist/panel/components/fields/RenderFields.svelte +11 -16
- package/dist/panel/components/fields/{root.svelte.d.ts → fieldset.svelte.d.ts} +1 -1
- package/dist/panel/components/fields/{root.svelte.js → fieldset.svelte.js} +1 -1
- package/dist/panel/components/fields/index.d.ts +5 -5
- package/dist/panel/components/fields/index.js +2 -2
- package/dist/panel/components/sections/collection/folder/FolderWithActions.svelte +1 -1
- package/dist/panel/components/sections/document/AuthFooter.svelte +2 -7
- package/dist/panel/components/sections/document/ButtonStatus.svelte +1 -1
- package/dist/panel/components/sections/document/CurrentlyEdited.svelte +1 -1
- package/dist/panel/components/sections/document/Settings.svelte +1 -1
- package/dist/panel/components/sections/live/LiveEditPanel.svelte +2 -2
- package/dist/panel/context/collection.svelte.js +10 -10
- package/dist/panel/context/documentForm.svelte.d.ts +8 -21
- package/dist/panel/context/documentForm.svelte.js +46 -54
- package/dist/panel/context/form.svelte.d.ts +6 -3
- package/dist/panel/context/form.svelte.js +22 -18
- package/dist/panel/context/live.svelte.js +1 -1
- package/dist/panel/index.d.ts +9 -1
- package/dist/panel/index.js +7 -1
- package/dist/panel/pages/area/actions.server.d.ts +2 -21
- package/dist/panel/pages/area/actions.server.js +28 -27
- package/dist/panel/pages/area/load.server.d.ts +2 -17
- package/dist/panel/pages/area/load.server.js +37 -46
- package/dist/panel/pages/auth/fields.d.ts +4 -4
- package/dist/panel/pages/auth/fields.js +6 -22
- package/dist/panel/pages/auth/reset-password/ResetPassword.svelte +3 -10
- package/dist/panel/pages/auth/sign-in/SignIn.svelte +7 -1
- package/dist/panel/pages/collection/load.server.d.ts +6 -6
- package/dist/panel/pages/collection/load.server.js +70 -72
- package/dist/panel/pages/collection-document/actions.server.d.ts +1 -1
- package/dist/panel/pages/collection-document/actions.server.js +78 -70
- package/dist/panel/pages/collection-document/load.server.d.ts +5 -20
- package/dist/panel/pages/collection-document/load.server.js +80 -82
- package/dist/server.d.ts +7 -0
- package/dist/server.js +7 -0
- package/dist/types.d.ts +1 -0
- package/dist/util/doc.js +15 -17
- package/dist/util/index.d.ts +9 -1
- package/dist/util/index.js +12 -1
- package/package.json +8 -50
- package/dist/core/api/index.d.ts +0 -7
- package/dist/core/api/index.js +0 -10
- package/dist/core/api/index.server.d.ts +0 -3
- package/dist/core/api/index.server.js +0 -3
- package/dist/core/areas/api/get.server.js +0 -36
- package/dist/core/areas/api/index.server.d.ts +0 -7
- package/dist/core/areas/api/index.server.js +0 -4
- package/dist/core/areas/api/update.server.js +0 -33
- package/dist/core/collections/api/create.server.js +0 -29
- package/dist/core/collections/api/delete.server.js +0 -32
- package/dist/core/collections/api/deleteById.server.js +0 -16
- package/dist/core/collections/api/duplicate.server.js +0 -18
- package/dist/core/collections/api/get.server.js +0 -45
- package/dist/core/collections/api/getById.server.js +0 -30
- package/dist/core/collections/api/index.server.d.ts +0 -17
- package/dist/core/collections/api/index.server.js +0 -9
- package/dist/core/collections/api/updateById.server.js +0 -38
- package/dist/core/dev/cli/init/get-package-info.server.d.ts +0 -1
- package/dist/core/dev/cli/init/package-manager-util.server.d.ts +0 -3
- package/dist/core/dev/generate/routes/area.server.d.ts +0 -7
- package/dist/core/dev/generate/routes/area.server.js +0 -69
- package/dist/core/dev/generate/routes/collection.server.d.ts +0 -14
- package/dist/core/dev/generate/routes/collection.server.js +0 -129
- package/dist/fields/relation/index.server.d.ts +0 -4
- package/dist/fields/relation/index.server.js +0 -13
- package/dist/live.d.ts +0 -4
- package/dist/live.js +0 -4
- package/dist/panel/index.server.d.ts +0 -4
- package/dist/panel/index.server.js +0 -4
- package/dist/panel/pages/auth/index.d.ts +0 -4
- package/dist/panel/pages/auth/index.js +0 -4
- package/dist/panel/pages/auth/index.server.d.ts +0 -18
- package/dist/panel/pages/auth/index.server.js +0 -12
- package/dist/panel/pages/index.actions.server.d.ts +0 -13
- package/dist/panel/pages/index.actions.server.js +0 -10
- package/dist/panel/pages/index.load.server.d.ts +0 -23
- package/dist/panel/pages/index.load.server.js +0 -16
- package/dist/panel/ui.d.ts +0 -4
- package/dist/panel/ui.js +0 -5
- /package/dist/core/dev/cli/{util.server.d.ts → util/prompt.server.d.ts} +0 -0
- /package/dist/core/dev/cli/{util.server.js → util/prompt.server.js} +0 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import type { FieldBuilder } from '../../fields/builders/field-builder.js';
|
|
1
2
|
import type { GenericDoc } from '../../types/doc.js';
|
|
2
3
|
import type { Field } from '../../../fields/types.js';
|
|
3
4
|
import type { DeepPartial } from '../../../util/types.js';
|
|
4
5
|
import type { ConfigMap } from './types.js';
|
|
5
|
-
export declare const buildConfigMap: (data: DeepPartial<GenericDoc>, incomingFields: Field[]) => ConfigMap;
|
|
6
|
+
export declare const buildConfigMap: (data: DeepPartial<GenericDoc>, incomingFields: FieldBuilder<Field>[]) => ConfigMap;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { isFormField } from '../../fields/util.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { BlocksBuilder } from '../../../fields/blocks/index.js';
|
|
3
|
+
import { GroupFieldBuilder } from '../../../fields/group/index.js';
|
|
4
|
+
import { TabsBuilder } from '../../../fields/tabs/index.js';
|
|
5
|
+
import { TreeBuilder } from '../../../fields/tree/index.js';
|
|
6
6
|
import { buildTreeFieldsMap } from './buildTreeMap.js';
|
|
7
7
|
export const buildConfigMap = (data, incomingFields) => {
|
|
8
8
|
let map = {};
|
|
@@ -11,10 +11,10 @@ export const buildConfigMap = (data, incomingFields) => {
|
|
|
11
11
|
return;
|
|
12
12
|
basePath = basePath === '' ? basePath : `${basePath}.`;
|
|
13
13
|
for (const field of fields) {
|
|
14
|
-
if (
|
|
15
|
-
for (const tab of field.tabs) {
|
|
14
|
+
if (field instanceof TabsBuilder) {
|
|
15
|
+
for (const tab of field.get.tabs) {
|
|
16
16
|
if (tab.name in data) {
|
|
17
|
-
traverseData(data[tab.name], tab.fields, tab.name);
|
|
17
|
+
traverseData(data[tab.name], tab.get.fields, tab.name);
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
continue;
|
|
@@ -26,13 +26,13 @@ export const buildConfigMap = (data, incomingFields) => {
|
|
|
26
26
|
const value = data[field.name];
|
|
27
27
|
const path = `${basePath}${field.name}`;
|
|
28
28
|
map[path] = field;
|
|
29
|
-
if (
|
|
29
|
+
if (field instanceof BlocksBuilder && value && Array.isArray(value)) {
|
|
30
30
|
const blocks = value;
|
|
31
31
|
for (const [index, block] of blocks.entries()) {
|
|
32
32
|
try {
|
|
33
|
-
const blockConfig = field.blocks.find((b) => b.name === block.type);
|
|
33
|
+
const blockConfig = field.get.blocks.find((b) => b.name === block.type);
|
|
34
34
|
if (blockConfig) {
|
|
35
|
-
traverseData(block, blockConfig.fields, `${path}.${index}`);
|
|
35
|
+
traverseData(block, blockConfig.get.fields, `${path}.${index}`);
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
catch {
|
|
@@ -40,12 +40,12 @@ export const buildConfigMap = (data, incomingFields) => {
|
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
-
else if (
|
|
43
|
+
else if (field instanceof TreeBuilder && value && Array.isArray(value)) {
|
|
44
44
|
const treeMap = buildTreeFieldsMap(field, value, path);
|
|
45
45
|
map = { ...map, ...treeMap };
|
|
46
46
|
}
|
|
47
|
-
else if (
|
|
48
|
-
traverseData(value, field.fields, path);
|
|
47
|
+
else if (field instanceof GroupFieldBuilder) {
|
|
48
|
+
traverseData(value, field.get.fields, path);
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export type ConfigMap = Record<string,
|
|
1
|
+
import type { FormFieldBuilder } from '../../fields/builders/form-field-builder.js';
|
|
2
|
+
export type ConfigMap = Record<string, FormFieldBuilder>;
|
|
@@ -1,38 +1,35 @@
|
|
|
1
1
|
import { logger } from '../../../logger/index.server.js';
|
|
2
|
-
import { deleteValueAtPath, getValueAtPath,
|
|
2
|
+
import { deleteValueAtPath, getValueAtPath, setValueAtPath } from '../../../../util/object.js';
|
|
3
3
|
import { buildConfigMap } from '../../configMap/index.js';
|
|
4
4
|
import { getDefaultValue } from '../before-upsert/set-default-values.server.js';
|
|
5
5
|
import { Hooks } from '../index.server.js';
|
|
6
6
|
export const processDocumentFields = Hooks.beforeRead(async (args) => {
|
|
7
7
|
const { event } = args;
|
|
8
8
|
let doc = args.doc;
|
|
9
|
-
const configMap = buildConfigMap(doc, args.config.fields
|
|
9
|
+
const configMap = buildConfigMap(doc, args.config.fields);
|
|
10
10
|
for (const [key, config] of Object.entries(configMap)) {
|
|
11
11
|
let value = getValueAtPath(key, doc);
|
|
12
12
|
let isEmpty;
|
|
13
|
-
if (config.
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
doc = deleteValueAtPath(doc, key);
|
|
17
|
-
continue;
|
|
18
|
-
}
|
|
13
|
+
if (!config.run.canRead(event.locals.user)) {
|
|
14
|
+
doc = deleteValueAtPath(doc, key);
|
|
15
|
+
continue;
|
|
19
16
|
}
|
|
20
|
-
if (
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
17
|
+
if (value !== undefined && value !== null) {
|
|
18
|
+
value = await config.run.beforeRead(value, {
|
|
19
|
+
event,
|
|
20
|
+
operation: args.context,
|
|
21
|
+
documentId: doc.id
|
|
22
|
+
});
|
|
23
|
+
doc = setValueAtPath(key, doc, value);
|
|
27
24
|
}
|
|
28
25
|
try {
|
|
29
|
-
isEmpty = config.isEmpty(value);
|
|
26
|
+
isEmpty = config.run.isEmpty(value);
|
|
30
27
|
}
|
|
31
28
|
catch {
|
|
32
29
|
isEmpty = false;
|
|
33
30
|
logger.warn(`Error in config.isEmpty for field ${key}`);
|
|
34
31
|
}
|
|
35
|
-
if (isEmpty &&
|
|
32
|
+
if (isEmpty && config.get.defaultValue !== undefined) {
|
|
36
33
|
value = await getDefaultValue({ key, config, adapter: args.event.locals.rime.adapter });
|
|
37
34
|
doc = setValueAtPath(key, doc, value);
|
|
38
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const buildDataConfigMap: import("../index.server.js").Hook<"raw", "
|
|
1
|
+
export declare const buildDataConfigMap: import("../index.server.js").Hook<"raw", "update" | "create", "before">;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { buildConfigMap } from '../../configMap/index.js';
|
|
2
2
|
import { Hooks } from '../index.server.js';
|
|
3
3
|
export const buildDataConfigMap = Hooks.beforeUpsert(async (args) => {
|
|
4
|
-
const configMap = buildConfigMap(args.data, args.config.fields
|
|
4
|
+
const configMap = buildConfigMap(args.data, args.config.fields);
|
|
5
5
|
return {
|
|
6
6
|
...args,
|
|
7
7
|
context: {
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
* Handles version-related operations for document updates
|
|
3
3
|
* Manages specific version updates and new version creation
|
|
4
4
|
*/
|
|
5
|
-
export declare const handleNewVersion: import("../index.server.js").Hook<"raw", "
|
|
5
|
+
export declare const handleNewVersion: import("../index.server.js").Hook<"raw", "update" | "create", "before">;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const buildOriginalDocConfigMap: import("../index.server.js").Hook<"raw", "
|
|
1
|
+
export declare const buildOriginalDocConfigMap: import("../index.server.js").Hook<"raw", "update" | "create", "before">;
|
|
@@ -5,7 +5,7 @@ export const buildOriginalDocConfigMap = Hooks.beforeUpsert(async (args) => {
|
|
|
5
5
|
const { originalDoc } = args.context;
|
|
6
6
|
if (!originalDoc)
|
|
7
7
|
throw new RimeError(RimeError.OPERATION_ERROR, 'missing originalDoc @buildDataConfigMap');
|
|
8
|
-
const originalConfigMap = buildConfigMap(originalDoc, args.config.fields
|
|
8
|
+
const originalConfigMap = buildConfigMap(originalDoc, args.config.fields);
|
|
9
9
|
return {
|
|
10
10
|
...args,
|
|
11
11
|
context: {
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import type { Adapter } from '../../../../adapter-sqlite/index.server.js';
|
|
2
|
-
import type {
|
|
3
|
-
export declare const setDefaultValues: import("../index.server.js").Hook<"raw", "
|
|
2
|
+
import type { FormFieldBuilder } from '../../../fields/builders/form-field-builder.js';
|
|
3
|
+
export declare const setDefaultValues: import("../index.server.js").Hook<"raw", "update" | "create", "before">;
|
|
4
4
|
type GetDefaultValue = (args: {
|
|
5
5
|
key: string;
|
|
6
|
-
config:
|
|
7
|
-
defaultValue: any;
|
|
8
|
-
};
|
|
6
|
+
config: FormFieldBuilder;
|
|
9
7
|
adapter: Adapter;
|
|
10
8
|
}) => Promise<any>;
|
|
11
9
|
export declare const getDefaultValue: GetDefaultValue;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { getRequestEvent } from '$app/server';
|
|
2
2
|
import { RimeError } from '../../../errors/index.js';
|
|
3
3
|
import { logger } from '../../../logger/index.server.js';
|
|
4
|
-
import {
|
|
5
|
-
import { getValueAtPath,
|
|
4
|
+
import { RelationFieldBuilder } from '../../../../fields/relation/index.js';
|
|
5
|
+
import { getValueAtPath, setValueAtPath } from '../../../../util/object.js';
|
|
6
6
|
import { eq, inArray } from 'drizzle-orm';
|
|
7
7
|
import { Hooks } from '../index.server.js';
|
|
8
8
|
export const setDefaultValues = Hooks.beforeUpsert(async (args) => {
|
|
@@ -15,15 +15,15 @@ export const setDefaultValues = Hooks.beforeUpsert(async (args) => {
|
|
|
15
15
|
for (const [key, config] of Object.entries(configMap)) {
|
|
16
16
|
let value = getValueAtPath(key, output);
|
|
17
17
|
let isEmpty;
|
|
18
|
-
const shouldAddDefault = operation === 'create' || (operation === 'update' && config.required);
|
|
18
|
+
const shouldAddDefault = operation === 'create' || (operation === 'update' && config.get.required);
|
|
19
19
|
try {
|
|
20
|
-
isEmpty = config.isEmpty(value);
|
|
20
|
+
isEmpty = config.run.isEmpty(value);
|
|
21
21
|
}
|
|
22
22
|
catch {
|
|
23
23
|
isEmpty = false;
|
|
24
24
|
logger.warn(`Error in config.isEmpty for field ${key}`);
|
|
25
25
|
}
|
|
26
|
-
if (shouldAddDefault && isEmpty &&
|
|
26
|
+
if (shouldAddDefault && isEmpty && config.get.defaultValue !== undefined) {
|
|
27
27
|
value = await getDefaultValue({ key, config, adapter: rime.adapter });
|
|
28
28
|
output = setValueAtPath(key, output, value);
|
|
29
29
|
}
|
|
@@ -41,7 +41,7 @@ const defaultRelationValue = async (config, key, adapter) => {
|
|
|
41
41
|
const buildRelation = async (defaultValue) => {
|
|
42
42
|
let condition;
|
|
43
43
|
//@TODO encapsulate this into adapter.relation.something
|
|
44
|
-
const relationTable = adapter.tables[config.relationTo];
|
|
44
|
+
const relationTable = adapter.tables[config.get.relationTo];
|
|
45
45
|
if (typeof defaultValue === 'string') {
|
|
46
46
|
condition = eq(relationTable.id, defaultValue);
|
|
47
47
|
}
|
|
@@ -54,22 +54,17 @@ const defaultRelationValue = async (config, key, adapter) => {
|
|
|
54
54
|
.where(condition));
|
|
55
55
|
return existing.map(({ documentId }, index) => ({
|
|
56
56
|
id: null,
|
|
57
|
-
relationTo: config.relationTo,
|
|
57
|
+
relationTo: config.get.relationTo,
|
|
58
58
|
path: key,
|
|
59
59
|
position: index,
|
|
60
60
|
documentId: documentId
|
|
61
61
|
}));
|
|
62
62
|
};
|
|
63
|
-
return await buildRelation(config.defaultValue);
|
|
63
|
+
return await buildRelation(config.run.defaultValue({ event: getRequestEvent() }));
|
|
64
64
|
};
|
|
65
65
|
export const getDefaultValue = async ({ key, config, adapter }) => {
|
|
66
|
-
if (
|
|
66
|
+
if (config instanceof RelationFieldBuilder) {
|
|
67
67
|
return await defaultRelationValue(config, key, adapter);
|
|
68
68
|
}
|
|
69
|
-
|
|
70
|
-
if (typeof config.defaultValue === 'function') {
|
|
71
|
-
return config.defaultValue({ event: getRequestEvent() });
|
|
72
|
-
}
|
|
73
|
-
return config.defaultValue;
|
|
74
|
-
}
|
|
69
|
+
return config.run.defaultValue({ event: getRequestEvent() });
|
|
75
70
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const validateFields: import("../index.server.js").Hook<"raw", "
|
|
1
|
+
export declare const validateFields: import("../index.server.js").Hook<"raw", "update" | "create", "before">;
|
|
@@ -7,7 +7,13 @@ export const validateFields = Hooks.beforeUpsert(async (args) => {
|
|
|
7
7
|
const errors = {};
|
|
8
8
|
const { event, operation } = args;
|
|
9
9
|
const { rime, user } = event.locals;
|
|
10
|
-
|
|
10
|
+
// Own copy — an access-denied field gets deleted from here too, not just
|
|
11
|
+
// from `output`. `updateById` turns this map's keys into `incomingPaths`,
|
|
12
|
+
// which saveRelations/saveBlocks/saveTreeBlocks use to decide which
|
|
13
|
+
// existing rows are even in scope for this request; leaving a denied
|
|
14
|
+
// field's path in there made its silently-dropped write look like an
|
|
15
|
+
// explicit "no relations/blocks here anymore" and delete the existing data.
|
|
16
|
+
const configMap = { ...args.context.configMap };
|
|
11
17
|
const locale = args.context.params.locale || args.event.locals.locale;
|
|
12
18
|
const slug = args.config.slug;
|
|
13
19
|
const isCollection = rime.config.isCollection(slug);
|
|
@@ -16,9 +22,15 @@ export const validateFields = Hooks.beforeUpsert(async (args) => {
|
|
|
16
22
|
throw new RimeError(RimeError.OPERATION_ERROR, 'missing configMap @validateFields');
|
|
17
23
|
// Get the skip parameter from the url
|
|
18
24
|
const paramSkip = event.url.searchParams.get(PARAMS.SKIP_VALIDATION) === 'true' || false;
|
|
19
|
-
// Skip validation on locale fallback
|
|
25
|
+
// Skip validation/hooks on locale fallback — this data is `omitId(document)`
|
|
26
|
+
// read back from the just-created document (see create.ts's other-locales
|
|
27
|
+
// loop), already fully processed once. skipHooks gates validate() as well
|
|
28
|
+
// as beforeValidate/beforeSave: a non-idempotent hook (e.g. appending a
|
|
29
|
+
// suffix) would otherwise re-apply itself on every other locale and
|
|
30
|
+
// corrupt non-localized fields, which share the same underlying storage
|
|
31
|
+
// across locales.
|
|
20
32
|
const skipUnique = args.context.isFallbackLocale || paramSkip;
|
|
21
|
-
const
|
|
33
|
+
const skipHooks = args.context.isFallbackLocale || paramSkip;
|
|
22
34
|
const skipRequired = args.context.isFallbackLocale || paramSkip;
|
|
23
35
|
const skipAccess = args.context.isFallbackLocale || args.context.isSystemOperation;
|
|
24
36
|
for (const [key, config] of Object.entries(configMap)) {
|
|
@@ -28,7 +40,7 @@ export const validateFields = Hooks.beforeUpsert(async (args) => {
|
|
|
28
40
|
/****************************************************/
|
|
29
41
|
// Unique
|
|
30
42
|
/** @TODO better unique check like relations, locale,... */
|
|
31
|
-
if ('unique' in config && config.unique && isCollection && !skipUnique) {
|
|
43
|
+
if ('unique' in config.get && config.get.unique && isCollection && !skipUnique) {
|
|
32
44
|
let query;
|
|
33
45
|
switch (operation) {
|
|
34
46
|
case 'create':
|
|
@@ -50,72 +62,74 @@ export const validateFields = Hooks.beforeUpsert(async (args) => {
|
|
|
50
62
|
/****************************************************/
|
|
51
63
|
/* Field hook before validate
|
|
52
64
|
/****************************************************/
|
|
53
|
-
if (
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
value = await hook(value, { config, data: args.data });
|
|
57
|
-
output = setValueAtPath(key, output, value);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
65
|
+
if (value !== undefined && value !== null && !skipHooks) {
|
|
66
|
+
value = await config.run.beforeValidate(value, { config, data: args.data });
|
|
67
|
+
output = setValueAtPath(key, output, value);
|
|
60
68
|
}
|
|
61
69
|
/****************************************************/
|
|
62
70
|
/* Validate
|
|
63
71
|
/****************************************************/
|
|
64
|
-
if (config.validate && value && !
|
|
72
|
+
if (config.get.validate && value !== undefined && value !== null && !skipHooks) {
|
|
65
73
|
try {
|
|
66
|
-
const valid = config.validate(value, {
|
|
74
|
+
const valid = config.run.validate(value, {
|
|
67
75
|
data: output,
|
|
68
76
|
operation,
|
|
69
77
|
id: operation === 'update' ? args.context.originalDoc?.id : undefined,
|
|
70
78
|
user: user,
|
|
71
79
|
locale,
|
|
72
|
-
config
|
|
80
|
+
config: config.get
|
|
73
81
|
});
|
|
74
82
|
if (valid !== true) {
|
|
75
83
|
errors[key] = valid;
|
|
76
84
|
}
|
|
77
85
|
}
|
|
78
|
-
catch {
|
|
86
|
+
catch (err) {
|
|
79
87
|
logger.warn(`Error while validating field ${key}`);
|
|
88
|
+
console.debug(`[validateFields] field "${key}" threw:`, err);
|
|
80
89
|
errors[key] = RimeFormError.VALIDATION_ERROR;
|
|
81
90
|
}
|
|
82
91
|
}
|
|
83
|
-
|
|
92
|
+
/*
|
|
84
93
|
/* Field hook before Save
|
|
85
|
-
|
|
86
|
-
if (
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
94
|
+
*/
|
|
95
|
+
if (value !== undefined && value !== null && !skipHooks) {
|
|
96
|
+
value = await config.run.beforeSave(value, {
|
|
97
|
+
config: config.get,
|
|
98
|
+
event,
|
|
99
|
+
operation: args.context
|
|
100
|
+
});
|
|
101
|
+
output = setValueAtPath(key, output, value);
|
|
93
102
|
}
|
|
94
103
|
/****************************************************/
|
|
95
104
|
/* Access
|
|
96
105
|
/****************************************************/
|
|
97
|
-
if (
|
|
98
|
-
const authorizedFieldUpdate = config.
|
|
106
|
+
if (operation === 'update' && !skipAccess) {
|
|
107
|
+
const authorizedFieldUpdate = config.run.canUpdate(user, {
|
|
99
108
|
id: args.context.originalDoc?.id
|
|
100
109
|
});
|
|
101
110
|
if (!authorizedFieldUpdate) {
|
|
102
111
|
output = deleteValueAtPath(output, key);
|
|
112
|
+
delete configMap[key];
|
|
103
113
|
value = undefined;
|
|
104
114
|
}
|
|
105
115
|
}
|
|
106
|
-
if (
|
|
107
|
-
const authorizedFieldCreate = config.
|
|
116
|
+
if (operation === 'create' && !skipAccess) {
|
|
117
|
+
const authorizedFieldCreate = config.run.canCreate(user, {
|
|
108
118
|
id: undefined
|
|
109
119
|
});
|
|
110
120
|
if (!authorizedFieldCreate) {
|
|
111
121
|
output = deleteValueAtPath(output, key);
|
|
122
|
+
delete configMap[key];
|
|
112
123
|
value = undefined;
|
|
113
124
|
}
|
|
114
125
|
}
|
|
115
126
|
// Required
|
|
116
|
-
if (config.required && config.isEmpty(value)) {
|
|
127
|
+
if (config.get.required && config.run.isEmpty(value)) {
|
|
117
128
|
if (skipRequired) {
|
|
118
|
-
|
|
129
|
+
// The field's own type-correct default (falling back to '' only
|
|
130
|
+
// when none is set) — a hardcoded '' here was wrong for every
|
|
131
|
+
// non-string required field (number, checkbox, date, ...).
|
|
132
|
+
output = setValueAtPath(key, output, config.run.defaultValue({ event }) ?? '');
|
|
119
133
|
}
|
|
120
134
|
else {
|
|
121
135
|
errors[key] = RimeFormError.REQUIRED_FIELD;
|
|
@@ -127,6 +141,10 @@ export const validateFields = Hooks.beforeUpsert(async (args) => {
|
|
|
127
141
|
}
|
|
128
142
|
return {
|
|
129
143
|
...args,
|
|
130
|
-
data: output
|
|
144
|
+
data: output,
|
|
145
|
+
context: {
|
|
146
|
+
...args.context,
|
|
147
|
+
configMap
|
|
148
|
+
}
|
|
131
149
|
};
|
|
132
150
|
});
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RelationFieldBuilder } from '../../../fields/relation/index.js';
|
|
2
2
|
import { getValueAtPath } from '../../../util/object.js';
|
|
3
3
|
export const extractRelations = ({ ownerId, data, configMap, locale }) => {
|
|
4
4
|
const relations = [];
|
|
5
5
|
for (const [path, config] of Object.entries(configMap)) {
|
|
6
|
-
if (
|
|
6
|
+
if (config instanceof RelationFieldBuilder) {
|
|
7
7
|
const value = getValueAtPath(path, data);
|
|
8
|
-
const localized = config.localized;
|
|
8
|
+
const localized = config.get.localized;
|
|
9
9
|
const relationRawValue = value;
|
|
10
10
|
let output = [];
|
|
11
11
|
const relationFromString = ({ value, position = 0 }) => {
|
|
12
12
|
const result = {
|
|
13
13
|
position,
|
|
14
|
-
relationTo: config.relationTo,
|
|
14
|
+
relationTo: config.get.relationTo,
|
|
15
15
|
documentId: value,
|
|
16
16
|
ownerId,
|
|
17
17
|
path
|
|
@@ -25,7 +25,7 @@ export const extractRelations = ({ ownerId, data, configMap, locale }) => {
|
|
|
25
25
|
const result = {
|
|
26
26
|
id: value.id || undefined,
|
|
27
27
|
position,
|
|
28
|
-
relationTo: config.relationTo,
|
|
28
|
+
relationTo: config.get.relationTo,
|
|
29
29
|
documentId: value.documentId,
|
|
30
30
|
ownerId,
|
|
31
31
|
path
|
|
@@ -10,13 +10,13 @@ export const fallbackDataFromOriginal = async (args) => {
|
|
|
10
10
|
if (ignore.includes(key))
|
|
11
11
|
continue;
|
|
12
12
|
// skip if not required and mode is 'required'
|
|
13
|
-
const shouldUpdate = (config.required && mode === 'required') || mode === 'all';
|
|
13
|
+
const shouldUpdate = (config.get.required && mode === 'required') || mode === 'all';
|
|
14
14
|
if (!shouldUpdate)
|
|
15
15
|
continue;
|
|
16
16
|
let value = getValueAtPath(key, output);
|
|
17
17
|
let isEmpty;
|
|
18
18
|
try {
|
|
19
|
-
isEmpty = config.isEmpty(value);
|
|
19
|
+
isEmpty = config.run.isEmpty(value);
|
|
20
20
|
}
|
|
21
21
|
catch {
|
|
22
22
|
isEmpty = false;
|
|
@@ -12,7 +12,7 @@ export function defineTreeBlocksDiff({ existingBlocks, incomingBlocks, context }
|
|
|
12
12
|
// - If a block is not localized than it should keep its id so block is updated
|
|
13
13
|
if (context.isFallbackLocale) {
|
|
14
14
|
incomingBlocks = incomingBlocks.map((block) => {
|
|
15
|
-
const isLocalized = configMap[block.path]?.localized || false;
|
|
15
|
+
const isLocalized = configMap[block.path]?.get.localized || false;
|
|
16
16
|
if (isLocalized) {
|
|
17
17
|
delete block.id;
|
|
18
18
|
block.locale = context.isFallbackLocale;
|
|
@@ -22,7 +22,7 @@ export function extractTreeBlocks({ data, configMap }) {
|
|
|
22
22
|
Object.entries(configMap).forEach(([path, config]) => {
|
|
23
23
|
if (config.type === 'tree') {
|
|
24
24
|
const value = getValueAtPath(path, data);
|
|
25
|
-
const isEmptyValue = config.isEmpty(value);
|
|
25
|
+
const isEmptyValue = config.run.isEmpty(value);
|
|
26
26
|
if (value && !isEmptyValue) {
|
|
27
27
|
value.forEach((item, index) => {
|
|
28
28
|
processTreeItem(item, index, path, undefined);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { dev } from '$app/environment';
|
|
2
|
-
import { handleError } from '../../errors/handler.server.js';
|
|
2
|
+
import { ERROR_CONTEXT, handleError } from '../../errors/handler.server.js';
|
|
3
3
|
import { RimeError, RimeFormError } from '../../errors/index.js';
|
|
4
4
|
import { extractData } from '../../operations/extract-data.server.js';
|
|
5
5
|
import { trycatch, trycatchSync } from '../../../util/function.js';
|
|
@@ -12,13 +12,18 @@ export const apiInit = definePlugin(() => {
|
|
|
12
12
|
throw new RimeError(RimeError.NOT_FOUND);
|
|
13
13
|
const hasAuthUser = await event.locals.rime.adapter.auth.hasAuthUser();
|
|
14
14
|
if (hasAuthUser || (!hasAuthUser && !dev)) {
|
|
15
|
-
throw handleError(new RimeError(RimeError.NOT_FOUND), { context:
|
|
15
|
+
throw handleError(new RimeError(RimeError.NOT_FOUND), { context: ERROR_CONTEXT.API });
|
|
16
|
+
}
|
|
17
|
+
const [extractError, data] = await trycatch(() => extractData(event.request));
|
|
18
|
+
if (extractError) {
|
|
19
|
+
throw handleError(new RimeError(RimeError.INVALID_DATA, extractError.message), {
|
|
20
|
+
context: ERROR_CONTEXT.API
|
|
21
|
+
});
|
|
16
22
|
}
|
|
17
|
-
const data = await extractData(event.request);
|
|
18
23
|
const [error] = trycatchSync(() => validateForm(data));
|
|
19
24
|
if (error) {
|
|
20
|
-
throw handleError(error, {
|
|
21
|
-
context:
|
|
25
|
+
throw handleError(new RimeError(RimeError.INVALID_DATA, error.message), {
|
|
26
|
+
context: ERROR_CONTEXT.ACTION,
|
|
22
27
|
formData: { email: data.email }
|
|
23
28
|
});
|
|
24
29
|
}
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import { getRequestEvent } from '$app/server';
|
|
2
|
-
import { RimeError } from '../../errors';
|
|
2
|
+
import { RimeError } from '../../errors/index.js';
|
|
3
3
|
import { logger } from '../../logger/index.server.js';
|
|
4
4
|
import fs from 'fs';
|
|
5
5
|
import path from 'path';
|
|
6
6
|
const cachePath = path.resolve(process.cwd(), '.cache');
|
|
7
|
-
if (!fs.existsSync(cachePath)) {
|
|
8
|
-
fs.mkdirSync(cachePath);
|
|
9
|
-
}
|
|
10
7
|
const IS_ENV_CACHE_ENABLED = process.env.RIME_CACHE_ENABLED === 'true';
|
|
11
8
|
export class Cache {
|
|
12
9
|
static memoryCache = new Map();
|
|
@@ -68,6 +65,9 @@ export class Cache {
|
|
|
68
65
|
this.memoryCache.set(key, value);
|
|
69
66
|
}
|
|
70
67
|
static async setToDisk(key, value) {
|
|
68
|
+
if (!fs.existsSync(cachePath)) {
|
|
69
|
+
fs.mkdirSync(cachePath);
|
|
70
|
+
}
|
|
71
71
|
const keyPath = path.join(cachePath, key + '.txt');
|
|
72
72
|
await fs.promises.writeFile(keyPath, value);
|
|
73
73
|
}
|
|
@@ -1761,13 +1761,13 @@ export declare function createRime<const C extends Config>(config: BuildConfig<C
|
|
|
1761
1761
|
$Infer: {
|
|
1762
1762
|
body: ({
|
|
1763
1763
|
permission: {
|
|
1764
|
-
readonly user?: ("
|
|
1764
|
+
readonly user?: ("update" | "create" | "delete" | "list" | "get" | "set-role" | "ban" | "impersonate" | "set-password")[] | undefined;
|
|
1765
1765
|
readonly session?: ("delete" | "list" | "revoke")[] | undefined;
|
|
1766
1766
|
};
|
|
1767
1767
|
permissions?: never | undefined;
|
|
1768
1768
|
} | {
|
|
1769
1769
|
permissions: {
|
|
1770
|
-
readonly user?: ("
|
|
1770
|
+
readonly user?: ("update" | "create" | "delete" | "list" | "get" | "set-role" | "ban" | "impersonate" | "set-password")[] | undefined;
|
|
1771
1771
|
readonly session?: ("delete" | "list" | "revoke")[] | undefined;
|
|
1772
1772
|
};
|
|
1773
1773
|
permission?: never | undefined;
|
|
@@ -1982,9 +1982,9 @@ export declare function createRime<const C extends Config>(config: BuildConfig<C
|
|
|
1982
1982
|
isValidLocale: (locale: string) => boolean;
|
|
1983
1983
|
getArea: (slug: string) => import("./config/types.js").BuiltArea;
|
|
1984
1984
|
getCollection: (slug: string) => import("./config/types.js").BuiltCollection;
|
|
1985
|
-
getBySlug: (slug: string) => import("./config/types.js").
|
|
1986
|
-
isCollection: (slug
|
|
1987
|
-
isArea: (slug
|
|
1985
|
+
getBySlug: (slug: string) => import("./config/types.js").BuiltArea | import("./config/types.js").BuiltCollection;
|
|
1986
|
+
isCollection: (slug?: string) => slug is import("./types/doc.js").CollectionSlug;
|
|
1987
|
+
isArea: (slug?: string) => slug is import("./types/doc.js").AreaSlug;
|
|
1988
1988
|
getDocumentPrototype(slug: import("./types/doc.js").PrototypeSlug): "area" | "collection";
|
|
1989
1989
|
};
|
|
1990
1990
|
readonly plugins: {
|
|
@@ -3767,13 +3767,13 @@ export declare function createRime<const C extends Config>(config: BuildConfig<C
|
|
|
3767
3767
|
$Infer: {
|
|
3768
3768
|
body: ({
|
|
3769
3769
|
permission: {
|
|
3770
|
-
readonly user?: ("
|
|
3770
|
+
readonly user?: ("update" | "create" | "delete" | "list" | "get" | "set-role" | "ban" | "impersonate" | "set-password")[] | undefined;
|
|
3771
3771
|
readonly session?: ("delete" | "list" | "revoke")[] | undefined;
|
|
3772
3772
|
};
|
|
3773
3773
|
permissions?: never | undefined;
|
|
3774
3774
|
} | {
|
|
3775
3775
|
permissions: {
|
|
3776
|
-
readonly user?: ("
|
|
3776
|
+
readonly user?: ("update" | "create" | "delete" | "list" | "get" | "set-role" | "ban" | "impersonate" | "set-password")[] | undefined;
|
|
3777
3777
|
readonly session?: ("delete" | "list" | "revoke")[] | undefined;
|
|
3778
3778
|
};
|
|
3779
3779
|
permission?: never | undefined;
|
|
@@ -4004,9 +4004,9 @@ export declare function createRime<const C extends Config>(config: BuildConfig<C
|
|
|
4004
4004
|
isValidLocale: (locale: string) => boolean;
|
|
4005
4005
|
getArea: (slug: string) => import("./config/types.js").BuiltArea;
|
|
4006
4006
|
getCollection: (slug: string) => import("./config/types.js").BuiltCollection;
|
|
4007
|
-
getBySlug: (slug: string) => import("./config/types.js").
|
|
4008
|
-
isCollection: (slug
|
|
4009
|
-
isArea: (slug
|
|
4007
|
+
getBySlug: (slug: string) => import("./config/types.js").BuiltArea | import("./config/types.js").BuiltCollection;
|
|
4008
|
+
isCollection: (slug?: string) => slug is import("./types/doc.js").CollectionSlug;
|
|
4009
|
+
isArea: (slug?: string) => slug is import("./types/doc.js").AreaSlug;
|
|
4010
4010
|
getDocumentPrototype(slug: import("./types/doc.js").PrototypeSlug): "area" | "collection";
|
|
4011
4011
|
};
|
|
4012
4012
|
/**
|
package/dist/core/rime.server.js
CHANGED
|
@@ -79,7 +79,11 @@ export async function createRime(config) {
|
|
|
79
79
|
function defineLocale(event) {
|
|
80
80
|
// locale present inside the url params ex : /en/foo
|
|
81
81
|
const params = event.params;
|
|
82
|
-
const paramLocale = 'locale' in params &&
|
|
82
|
+
const paramLocale = 'locale' in params &&
|
|
83
|
+
typeof params.locale === 'string' &&
|
|
84
|
+
configCtx.getLocalesCodes().includes(params.locale)
|
|
85
|
+
? params.locale
|
|
86
|
+
: null;
|
|
83
87
|
// locale present as a search param ex : ?locale=en
|
|
84
88
|
const searchParams = event.url.searchParams;
|
|
85
89
|
const hasParams = searchParams.toString();
|