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,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getFieldAtPath } from '../core/fields/util.js';
|
|
2
2
|
import { withLocalesSuffix } from '../core/naming.js';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
3
|
+
import { BlocksBuilder } from '../fields/blocks/index.js';
|
|
4
|
+
import { RelationFieldBuilder } from '../fields/relation/index.js';
|
|
5
|
+
import { TreeBuilder } from '../fields/tree/index.js';
|
|
6
6
|
import { asc, eq, getTableColumns, or, SQL } from 'drizzle-orm';
|
|
7
|
-
import { getBlocksTableNames, getTreeTableNames } from './generate-schema/util.js';
|
|
7
|
+
import { getBlocksTableNames, getTreeTableNames } from './generate-schema/util.server.js';
|
|
8
8
|
export const buildWithParam = (args) => {
|
|
9
9
|
const { slug, select = [], locale, tables, config: documentConfig } = args;
|
|
10
10
|
if (!select.length) {
|
|
@@ -22,12 +22,12 @@ export const buildWithParam = (args) => {
|
|
|
22
22
|
for (const path of select) {
|
|
23
23
|
// Convert dot notation to double underscore notation for SQLite queries
|
|
24
24
|
const sqlPath = path.replace(/\./g, '__');
|
|
25
|
-
const fieldConfig =
|
|
26
|
-
if (fieldConfig
|
|
25
|
+
const fieldConfig = getFieldAtPath(path, documentConfig.fields);
|
|
26
|
+
if (fieldConfig instanceof RelationFieldBuilder) {
|
|
27
27
|
// Handle relation fields
|
|
28
28
|
directRelationPaths.push(path);
|
|
29
29
|
}
|
|
30
|
-
else if (fieldConfig
|
|
30
|
+
else if (fieldConfig instanceof BlocksBuilder) {
|
|
31
31
|
// Handle blocks fields
|
|
32
32
|
blockPaths.push(path);
|
|
33
33
|
const blocksTables = getBlocksTableNames(slug, tables);
|
|
@@ -56,7 +56,7 @@ export const buildWithParam = (args) => {
|
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
|
-
else if (fieldConfig
|
|
59
|
+
else if (fieldConfig instanceof TreeBuilder) {
|
|
60
60
|
// Handle tree fields
|
|
61
61
|
treePaths.push(path);
|
|
62
62
|
const treeTables = getTreeTableNames(slug, tables);
|
|
@@ -87,7 +87,7 @@ export const buildWithParam = (args) => {
|
|
|
87
87
|
}
|
|
88
88
|
else if (fieldConfig) {
|
|
89
89
|
// Handle regular fields
|
|
90
|
-
if (fieldConfig.localized && locale) {
|
|
90
|
+
if (fieldConfig.get.localized && locale) {
|
|
91
91
|
const localesTableName = withLocalesSuffix(slug);
|
|
92
92
|
if (localesTableName in tables) {
|
|
93
93
|
const tableLocales = tables[localesTableName];
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import type { AreaSlug } from '../../types/doc.js';
|
|
2
1
|
import { type RequestEvent } from '@sveltejs/kit';
|
|
3
|
-
|
|
2
|
+
/**
|
|
3
|
+
* GET handler for the area API endpoint.
|
|
4
|
+
*/
|
|
5
|
+
export declare function restGet(event: RequestEvent): Promise<Response | import("@sveltejs/kit").ActionFailure<{
|
|
4
6
|
form: Record<string, any>;
|
|
5
7
|
errors: import("../../../types").FormErrors;
|
|
6
8
|
}> | import("@sveltejs/kit").ActionFailure<{
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { PARAMS } from '../../constant.js';
|
|
2
|
+
import { RimeError } from '../../errors/index.js';
|
|
3
|
+
import { handleError } from '../../errors/handler.server.js';
|
|
4
|
+
import { trycatch } from '../../../util/function.js';
|
|
5
|
+
import { json } from '@sveltejs/kit';
|
|
6
|
+
/**
|
|
7
|
+
* GET handler for the area API endpoint.
|
|
8
|
+
*/
|
|
9
|
+
export async function restGet(event) {
|
|
10
|
+
//
|
|
11
|
+
const { rime } = event.locals;
|
|
12
|
+
// Check if the slug corresponds to a valid area
|
|
13
|
+
const slug = event.params.slug;
|
|
14
|
+
if (!rime.config.isArea(slug)) {
|
|
15
|
+
return handleError(new RimeError(RimeError.NOT_FOUND), { context: 'api' });
|
|
16
|
+
}
|
|
17
|
+
const params = event.url.searchParams;
|
|
18
|
+
const areaAPI = rime.area(slug);
|
|
19
|
+
// Build the select parameter for the API call based on the request parameters
|
|
20
|
+
function buildSelect(params) {
|
|
21
|
+
const paramSelect = params.get(PARAMS.SELECT)
|
|
22
|
+
? params.get(PARAMS.SELECT).split(',')
|
|
23
|
+
: undefined;
|
|
24
|
+
if (paramSelect &&
|
|
25
|
+
paramSelect.includes('title') &&
|
|
26
|
+
!paramSelect.includes(areaAPI.config.asTitle)) {
|
|
27
|
+
paramSelect.push(areaAPI.config.asTitle);
|
|
28
|
+
}
|
|
29
|
+
return paramSelect;
|
|
30
|
+
}
|
|
31
|
+
// Prepare the parameters for the API call to find the area document
|
|
32
|
+
const apiParams = {
|
|
33
|
+
locale: rime.getLocale(),
|
|
34
|
+
draft: params.get(PARAMS.DRAFT) ? params.get(PARAMS.DRAFT) === 'true' : undefined,
|
|
35
|
+
versionId: params.get(PARAMS.VERSION_ID) || undefined,
|
|
36
|
+
depth: params.get(PARAMS.DEPTH) ? parseInt(params.get(PARAMS.DEPTH)) : 0,
|
|
37
|
+
select: buildSelect(params)
|
|
38
|
+
};
|
|
39
|
+
// Call the area API to find the document based on the prepared parameters
|
|
40
|
+
const [error, doc] = await trycatch(() => rime.area(slug).find(apiParams));
|
|
41
|
+
if (error) {
|
|
42
|
+
return handleError(error, { context: 'api' });
|
|
43
|
+
}
|
|
44
|
+
return json({ doc });
|
|
45
|
+
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import type { AreaSlug } from '../../types/doc.js';
|
|
2
1
|
import { type RequestEvent } from '@sveltejs/kit';
|
|
3
|
-
|
|
2
|
+
/**
|
|
3
|
+
* POST handler for the area API endpoint.
|
|
4
|
+
*/
|
|
5
|
+
export declare function restUpdate(event: RequestEvent): Promise<Response | import("@sveltejs/kit").ActionFailure<{
|
|
4
6
|
form: Record<string, any>;
|
|
5
7
|
errors: import("../../../types").FormErrors;
|
|
6
8
|
}> | import("@sveltejs/kit").ActionFailure<{
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { PARAMS } from '../../constant.js';
|
|
2
|
+
import { RimeError } from '../../errors/index.js';
|
|
3
|
+
import { ERROR_CONTEXT, handleError } from '../../errors/handler.server.js';
|
|
4
|
+
import { extractData } from '../../operations/extract-data.server.js';
|
|
5
|
+
import { trycatch } from '../../../util/function.js';
|
|
6
|
+
import { json } from '@sveltejs/kit';
|
|
7
|
+
/**
|
|
8
|
+
* POST handler for the area API endpoint.
|
|
9
|
+
*/
|
|
10
|
+
export async function restUpdate(event) {
|
|
11
|
+
//
|
|
12
|
+
const { rime } = event.locals;
|
|
13
|
+
const slug = event.params.slug;
|
|
14
|
+
// Check if the slug corresponds to a valid area
|
|
15
|
+
if (!rime.config.isArea(slug)) {
|
|
16
|
+
return handleError(new RimeError(RimeError.NOT_FOUND), { context: ERROR_CONTEXT.API });
|
|
17
|
+
}
|
|
18
|
+
// Extract versionId and draft parameters from the request URL
|
|
19
|
+
const versionId = event.url.searchParams.get(PARAMS.VERSION_ID) || undefined;
|
|
20
|
+
const draft = event.url.searchParams.get(PARAMS.DRAFT)
|
|
21
|
+
? event.url.searchParams.get(PARAMS.DRAFT) === 'true'
|
|
22
|
+
: undefined;
|
|
23
|
+
// Extract data from the request body
|
|
24
|
+
const [extractError, data] = await trycatch(() => extractData(event.request));
|
|
25
|
+
if (extractError) {
|
|
26
|
+
return handleError(extractError, { context: ERROR_CONTEXT.API });
|
|
27
|
+
}
|
|
28
|
+
// Set the locale if provided in the data
|
|
29
|
+
if (data.locale) {
|
|
30
|
+
rime.setLocale(data.locale);
|
|
31
|
+
}
|
|
32
|
+
// Update the area with the extracted data, versionId, draft status, and current locale
|
|
33
|
+
const [error, doc] = await trycatch(() => rime.area(slug).update({
|
|
34
|
+
data,
|
|
35
|
+
versionId,
|
|
36
|
+
draft,
|
|
37
|
+
locale: rime.getLocale()
|
|
38
|
+
}));
|
|
39
|
+
if (error) {
|
|
40
|
+
return handleError(error, { context: ERROR_CONTEXT.API });
|
|
41
|
+
}
|
|
42
|
+
return json({ doc });
|
|
43
|
+
}
|
|
@@ -1,190 +1,10 @@
|
|
|
1
|
-
declare const emailField:
|
|
2
|
-
_metaUrl: string;
|
|
3
|
-
layout(layout: "compact" | "default"): /*elided*/ any;
|
|
4
|
-
readonly component: import("svelte").Component<import("../../../fields/email/component/props").EmailFieldProps, {}, "">;
|
|
5
|
-
unique(bool?: boolean): /*elided*/ any;
|
|
6
|
-
defaultValue(value: string | import("../../../types").DefaultValueFn<string>): /*elided*/ any;
|
|
7
|
-
isTitle(): /*elided*/ any;
|
|
8
|
-
_generateSchema: null | ((args: {
|
|
9
|
-
camel: string;
|
|
10
|
-
snake: string;
|
|
11
|
-
suffix: string;
|
|
12
|
-
}) => string);
|
|
13
|
-
readonly name: string;
|
|
14
|
-
label(label: string): /*elided*/ any;
|
|
15
|
-
hidden(): /*elided*/ any;
|
|
16
|
-
localized(): /*elided*/ any;
|
|
17
|
-
validate(validateFunction: import("../../../types").FieldValidationFunc<import("../../../fields/email/index.js").EmailField>): /*elided*/ any;
|
|
18
|
-
condition(conditionFunction: (doc: import("../../../util/types").Dic, siblings: import("../../../util/types").Dic) => boolean): /*elided*/ any;
|
|
19
|
-
table(params?: import("../../../types").FieldPanelTableConfig | number): /*elided*/ any;
|
|
20
|
-
width(value: import("../../../types").FieldWidth): /*elided*/ any;
|
|
21
|
-
required(bool?: boolean): /*elided*/ any;
|
|
22
|
-
access(access: {
|
|
23
|
-
create?: import("../../../types").FieldAccess;
|
|
24
|
-
read?: import("../../../types").FieldAccess;
|
|
25
|
-
update?: import("../../../types").FieldAccess;
|
|
26
|
-
}): /*elided*/ any;
|
|
27
|
-
onChange(hook: import("../../../types").FieldHookClient): /*elided*/ any;
|
|
28
|
-
hint(hint: string): /*elided*/ any;
|
|
29
|
-
clone(): /*elided*/ any;
|
|
30
|
-
$generateSchema(fn: (args: {
|
|
31
|
-
camel: string;
|
|
32
|
-
snake: string;
|
|
33
|
-
suffix: string;
|
|
34
|
-
}) => string): /*elided*/ any;
|
|
35
|
-
$beforeRead(hook: import("../../../types").FieldHook<import("../../../fields/email/index.js").EmailField>): /*elided*/ any;
|
|
36
|
-
$beforeSave(hook: import("../../../types").FieldHook<import("../../../fields/email/index.js").EmailField>): /*elided*/ any;
|
|
37
|
-
beforeValidate(hook: import("../../../types").FieldHookShared): /*elided*/ any;
|
|
38
|
-
field: import("../../../fields/email/index.js").EmailField;
|
|
39
|
-
className(str: string): /*elided*/ any;
|
|
40
|
-
compile(): {
|
|
41
|
-
type: "email";
|
|
42
|
-
live?: boolean | undefined;
|
|
43
|
-
condition?: ((doc: any, siblings: any) => boolean) | undefined;
|
|
44
|
-
width?: import("../../../types").FieldWidth | undefined;
|
|
45
|
-
className?: string | undefined;
|
|
46
|
-
component: import("svelte").Component<any>;
|
|
47
|
-
cell: import("svelte").Component<any> | undefined;
|
|
48
|
-
access: {
|
|
49
|
-
create: import("../../../types").FieldAccess;
|
|
50
|
-
read: import("../../../types").FieldAccess;
|
|
51
|
-
update: import("../../../types").FieldAccess;
|
|
52
|
-
};
|
|
53
|
-
name: string;
|
|
54
|
-
hidden?: boolean | undefined;
|
|
55
|
-
validate?: import("../../../types").FieldValidationFunc<any> | undefined;
|
|
56
|
-
required?: boolean | undefined;
|
|
57
|
-
localized?: boolean | undefined;
|
|
58
|
-
label?: string | undefined;
|
|
59
|
-
hint?: string | undefined;
|
|
60
|
-
table?: {
|
|
61
|
-
cell?: import("svelte").Component<{
|
|
62
|
-
value: any;
|
|
63
|
-
}> | undefined;
|
|
64
|
-
sort?: boolean | undefined;
|
|
65
|
-
position: number;
|
|
66
|
-
} | undefined;
|
|
67
|
-
hooks?: {
|
|
68
|
-
beforeRead?: import("../../../types").FieldHook<any>[] | undefined;
|
|
69
|
-
beforeSave?: import("../../../types").FieldHook<any>[] | undefined;
|
|
70
|
-
beforeValidate?: import("../../../types").FieldHookShared<any>[] | undefined;
|
|
71
|
-
onChange?: import("../../../types").FieldHookClient[] | undefined;
|
|
72
|
-
} | undefined;
|
|
73
|
-
defaultValue?: string | import("../../../types").DefaultValueFn<string> | undefined;
|
|
74
|
-
isEmpty: (value: unknown) => boolean;
|
|
75
|
-
placeholder?: string | undefined;
|
|
76
|
-
layout?: "compact" | "default" | undefined;
|
|
77
|
-
unique?: boolean | undefined;
|
|
78
|
-
isTitle?: true | undefined;
|
|
79
|
-
} & {
|
|
80
|
-
component: import("svelte").Component<any>;
|
|
81
|
-
cell?: import("svelte").Component<{
|
|
82
|
-
value: any;
|
|
83
|
-
}> | null;
|
|
84
|
-
};
|
|
85
|
-
live(bool: boolean): /*elided*/ any;
|
|
86
|
-
readonly type: string;
|
|
87
|
-
readonly raw: import("../../../fields/email/index.js").EmailField;
|
|
88
|
-
readonly cell: import("svelte").Component<{
|
|
89
|
-
value: any;
|
|
90
|
-
}> | null;
|
|
91
|
-
};
|
|
1
|
+
declare const emailField: import("../../../fields/email/index.js").EmailFieldBuilder;
|
|
92
2
|
declare const name: import("../../../fields/text/index.js").TextFieldBuilder;
|
|
93
3
|
declare const roles: import("../../../fields/select/index.js").SelectFieldBuilder;
|
|
94
4
|
declare const password: import("../../../fields/text/index.js").TextFieldBuilder;
|
|
95
5
|
declare const confirmPassword: import("../../../fields/text/index.js").TextFieldBuilder;
|
|
96
6
|
export declare const usersFields: {
|
|
97
|
-
email:
|
|
98
|
-
_metaUrl: string;
|
|
99
|
-
layout(layout: "compact" | "default"): /*elided*/ any;
|
|
100
|
-
readonly component: import("svelte").Component<import("../../../fields/email/component/props").EmailFieldProps, {}, "">;
|
|
101
|
-
unique(bool?: boolean): /*elided*/ any;
|
|
102
|
-
defaultValue(value: string | import("../../../types").DefaultValueFn<string>): /*elided*/ any;
|
|
103
|
-
isTitle(): /*elided*/ any;
|
|
104
|
-
_generateSchema: null | ((args: {
|
|
105
|
-
camel: string;
|
|
106
|
-
snake: string;
|
|
107
|
-
suffix: string;
|
|
108
|
-
}) => string);
|
|
109
|
-
readonly name: string;
|
|
110
|
-
label(label: string): /*elided*/ any;
|
|
111
|
-
hidden(): /*elided*/ any;
|
|
112
|
-
localized(): /*elided*/ any;
|
|
113
|
-
validate(validateFunction: import("../../../types").FieldValidationFunc<import("../../../fields/email/index.js").EmailField>): /*elided*/ any;
|
|
114
|
-
condition(conditionFunction: (doc: import("../../../util/types").Dic, siblings: import("../../../util/types").Dic) => boolean): /*elided*/ any;
|
|
115
|
-
table(params?: import("../../../types").FieldPanelTableConfig | number): /*elided*/ any;
|
|
116
|
-
width(value: import("../../../types").FieldWidth): /*elided*/ any;
|
|
117
|
-
required(bool?: boolean): /*elided*/ any;
|
|
118
|
-
access(access: {
|
|
119
|
-
create?: import("../../../types").FieldAccess;
|
|
120
|
-
read?: import("../../../types").FieldAccess;
|
|
121
|
-
update?: import("../../../types").FieldAccess;
|
|
122
|
-
}): /*elided*/ any;
|
|
123
|
-
onChange(hook: import("../../../types").FieldHookClient): /*elided*/ any;
|
|
124
|
-
hint(hint: string): /*elided*/ any;
|
|
125
|
-
clone(): /*elided*/ any;
|
|
126
|
-
$generateSchema(fn: (args: {
|
|
127
|
-
camel: string;
|
|
128
|
-
snake: string;
|
|
129
|
-
suffix: string;
|
|
130
|
-
}) => string): /*elided*/ any;
|
|
131
|
-
$beforeRead(hook: import("../../../types").FieldHook<import("../../../fields/email/index.js").EmailField>): /*elided*/ any;
|
|
132
|
-
$beforeSave(hook: import("../../../types").FieldHook<import("../../../fields/email/index.js").EmailField>): /*elided*/ any;
|
|
133
|
-
beforeValidate(hook: import("../../../types").FieldHookShared): /*elided*/ any;
|
|
134
|
-
field: import("../../../fields/email/index.js").EmailField;
|
|
135
|
-
className(str: string): /*elided*/ any;
|
|
136
|
-
compile(): {
|
|
137
|
-
type: "email";
|
|
138
|
-
live?: boolean | undefined;
|
|
139
|
-
condition?: ((doc: any, siblings: any) => boolean) | undefined;
|
|
140
|
-
width?: import("../../../types").FieldWidth | undefined;
|
|
141
|
-
className?: string | undefined;
|
|
142
|
-
component: import("svelte").Component<any>;
|
|
143
|
-
cell: import("svelte").Component<any> | undefined;
|
|
144
|
-
access: {
|
|
145
|
-
create: import("../../../types").FieldAccess;
|
|
146
|
-
read: import("../../../types").FieldAccess;
|
|
147
|
-
update: import("../../../types").FieldAccess;
|
|
148
|
-
};
|
|
149
|
-
name: string;
|
|
150
|
-
hidden?: boolean | undefined;
|
|
151
|
-
validate?: import("../../../types").FieldValidationFunc<any> | undefined;
|
|
152
|
-
required?: boolean | undefined;
|
|
153
|
-
localized?: boolean | undefined;
|
|
154
|
-
label?: string | undefined;
|
|
155
|
-
hint?: string | undefined;
|
|
156
|
-
table?: {
|
|
157
|
-
cell?: import("svelte").Component<{
|
|
158
|
-
value: any;
|
|
159
|
-
}> | undefined;
|
|
160
|
-
sort?: boolean | undefined;
|
|
161
|
-
position: number;
|
|
162
|
-
} | undefined;
|
|
163
|
-
hooks?: {
|
|
164
|
-
beforeRead?: import("../../../types").FieldHook<any>[] | undefined;
|
|
165
|
-
beforeSave?: import("../../../types").FieldHook<any>[] | undefined;
|
|
166
|
-
beforeValidate?: import("../../../types").FieldHookShared<any>[] | undefined;
|
|
167
|
-
onChange?: import("../../../types").FieldHookClient[] | undefined;
|
|
168
|
-
} | undefined;
|
|
169
|
-
defaultValue?: string | import("../../../types").DefaultValueFn<string> | undefined;
|
|
170
|
-
isEmpty: (value: unknown) => boolean;
|
|
171
|
-
placeholder?: string | undefined;
|
|
172
|
-
layout?: "compact" | "default" | undefined;
|
|
173
|
-
unique?: boolean | undefined;
|
|
174
|
-
isTitle?: true | undefined;
|
|
175
|
-
} & {
|
|
176
|
-
component: import("svelte").Component<any>;
|
|
177
|
-
cell?: import("svelte").Component<{
|
|
178
|
-
value: any;
|
|
179
|
-
}> | null;
|
|
180
|
-
};
|
|
181
|
-
live(bool: boolean): /*elided*/ any;
|
|
182
|
-
readonly type: string;
|
|
183
|
-
readonly raw: import("../../../fields/email/index.js").EmailField;
|
|
184
|
-
readonly cell: import("svelte").Component<{
|
|
185
|
-
value: any;
|
|
186
|
-
}> | null;
|
|
187
|
-
};
|
|
7
|
+
email: import("../../../fields/email/index.js").EmailFieldBuilder;
|
|
188
8
|
name: import("../../../fields/text/index.js").TextFieldBuilder;
|
|
189
9
|
roles: import("../../../fields/select/index.js").SelectFieldBuilder;
|
|
190
10
|
password: import("../../../fields/text/index.js").TextFieldBuilder;
|
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
* add fields password and confirmPassword
|
|
4
4
|
* to add validations
|
|
5
5
|
*/
|
|
6
|
-
export declare const augmentFieldsPassword: import("../../../../operations/hooks/index.server.js").Hook<"auth", "
|
|
6
|
+
export declare const augmentFieldsPassword: import("../../../../operations/hooks/index.server.js").Hook<"auth", "update" | "create", "before">;
|
|
@@ -11,7 +11,7 @@ export const augmentAuthServer = (config) => {
|
|
|
11
11
|
function addSchemaStaffReferenceForAPIKeys() {
|
|
12
12
|
(collection.fields || []).forEach((field) => {
|
|
13
13
|
if (field instanceof FormFieldBuilder && field.name === 'ownerId') {
|
|
14
|
-
field
|
|
14
|
+
field.$references('staff', { onDelete: 'cascade' });
|
|
15
15
|
}
|
|
16
16
|
});
|
|
17
17
|
return collection;
|
|
@@ -8,7 +8,7 @@ export const augmentNestedServer = (config) => {
|
|
|
8
8
|
const fields = [...(config.fields || [])];
|
|
9
9
|
if (config.nested) {
|
|
10
10
|
const _parentField = text('_parent')
|
|
11
|
-
.$
|
|
11
|
+
.$references(config.slug, { onDelete: 'set null', selfReferencing: true })
|
|
12
12
|
.hidden()
|
|
13
13
|
._root();
|
|
14
14
|
fields.push(_parentField);
|
|
@@ -46,10 +46,10 @@ export const augmentUpload = (config) => {
|
|
|
46
46
|
// Add validation if accept is defined
|
|
47
47
|
if ('accept' in upload && Array.isArray(upload.accept)) {
|
|
48
48
|
const allowedMimeTypes = upload.accept;
|
|
49
|
-
mimeType.
|
|
49
|
+
mimeType.validate((value) => {
|
|
50
50
|
return ((typeof value === 'string' && allowedMimeTypes.includes(value)) ||
|
|
51
51
|
`File should be the type of ${allowedMimeTypes.toString()}`);
|
|
52
|
-
};
|
|
52
|
+
});
|
|
53
53
|
}
|
|
54
54
|
const _pathField = text('_path')._root().hidden().validate(validatePath);
|
|
55
55
|
// Add hidden fields
|
|
@@ -9,7 +9,10 @@ export const augmentUploadServer = (config) => {
|
|
|
9
9
|
const collection = augmentUpload(config);
|
|
10
10
|
(collection.fields || []).forEach((field) => {
|
|
11
11
|
if (field instanceof FormFieldBuilder && field.name === '_path') {
|
|
12
|
-
field
|
|
12
|
+
field.$references(withDirectoriesSuffix(config.slug), {
|
|
13
|
+
onDelete: 'cascade',
|
|
14
|
+
onUpdate: 'cascade'
|
|
15
|
+
});
|
|
13
16
|
}
|
|
14
17
|
});
|
|
15
18
|
return collection;
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { VERSIONS_STATUS } from '../../constant.js';
|
|
2
2
|
import { buildConfigMap } from '../../operations/configMap/index.js';
|
|
3
|
-
import {
|
|
4
|
-
import { isJSONContent } from '../../../fields/rich-text';
|
|
5
|
-
import {
|
|
6
|
-
import { isTreeFieldRaw } from '../../../fields/tree/index.js';
|
|
3
|
+
import { BlocksBuilder } from '../../../fields/blocks/index.js';
|
|
4
|
+
import { isJSONContent, richTextJSONToText } from '../../../fields/rich-text/index.js';
|
|
5
|
+
import { TreeBuilder } from '../../../fields/tree/index.js';
|
|
7
6
|
import { getValueAtPath, isObjectLiteral, matchStructure, omitId, setValueAtPath } from '../../../util/object.js';
|
|
8
7
|
// If block is localized should not keep its id so it created a new one
|
|
9
8
|
// If block is not localized than it should keep its id so block is updated
|
|
@@ -15,6 +14,13 @@ export const duplicate = async (args) => {
|
|
|
15
14
|
* on the given document
|
|
16
15
|
*/
|
|
17
16
|
function setCopyTitle(doc) {
|
|
17
|
+
// For upload collections with no real title field, asTitle falls back to
|
|
18
|
+
// 'filename' (see augmentTitle) — that's a display fallback, not a
|
|
19
|
+
// mutable title. filename must keep matching the actual file on disk
|
|
20
|
+
// (saveFile dedupes by content), so leave it alone rather than
|
|
21
|
+
// corrupting the reference with a suffix no file on disk has.
|
|
22
|
+
if (config.upload && config.asTitle === 'filename')
|
|
23
|
+
return doc;
|
|
18
24
|
const getTitle = () => {
|
|
19
25
|
const title = getValueAtPath(config.asTitle, doc);
|
|
20
26
|
return isJSONContent(title)
|
|
@@ -32,7 +38,7 @@ export const duplicate = async (args) => {
|
|
|
32
38
|
*/
|
|
33
39
|
function prepareDuplicate(doc, locale, keepIds) {
|
|
34
40
|
let data = setCopyTitle(doc);
|
|
35
|
-
data.
|
|
41
|
+
data.status = data.status ? VERSIONS_STATUS.DRAFT : undefined;
|
|
36
42
|
data = normalizeProps(data, locale, keepIds);
|
|
37
43
|
delete data.id;
|
|
38
44
|
return data;
|
|
@@ -46,8 +52,11 @@ export const duplicate = async (args) => {
|
|
|
46
52
|
// Set locale to the default one
|
|
47
53
|
if (defaultLocale)
|
|
48
54
|
rime.setLocale(defaultLocale);
|
|
49
|
-
// Fetch document to copy
|
|
50
|
-
|
|
55
|
+
// Fetch document to copy — draft: true, since the source document may
|
|
56
|
+
// never have been published (buildPublishedOrLatestVersionParams treats a
|
|
57
|
+
// missing draft flag as "published only" for versioned-with-draft
|
|
58
|
+
// collections, which would 404 on a draft-only source).
|
|
59
|
+
const document = await collection.findById({ id, locale: defaultLocale, draft: true });
|
|
51
60
|
// Prepare data
|
|
52
61
|
const data = prepareDuplicate(document, defaultLocale, false);
|
|
53
62
|
// Create document
|
|
@@ -61,11 +70,11 @@ export const duplicate = async (args) => {
|
|
|
61
70
|
rime.setLocale(locale);
|
|
62
71
|
// Get localized document
|
|
63
72
|
let source = await collection.findById({ id, locale, draft: true });
|
|
64
|
-
const configMap = buildConfigMap(source, config.fields
|
|
73
|
+
const configMap = buildConfigMap(source, config.fields);
|
|
65
74
|
// Id mapping
|
|
66
75
|
for (const [key, field] of Object.entries(configMap)) {
|
|
67
76
|
// Process only tree and blocks
|
|
68
|
-
if (!
|
|
77
|
+
if (!(field instanceof BlocksBuilder) && !(field instanceof TreeBuilder))
|
|
69
78
|
continue;
|
|
70
79
|
const handleField = {
|
|
71
80
|
// For localized blocks just remove the id so a new one will be created
|
|
@@ -93,12 +102,22 @@ export const duplicate = async (args) => {
|
|
|
93
102
|
});
|
|
94
103
|
}
|
|
95
104
|
};
|
|
96
|
-
handleField[field.localized ? 'localized' : 'unlocalized']();
|
|
105
|
+
handleField[field.get.localized ? 'localized' : 'unlocalized']();
|
|
97
106
|
}
|
|
98
107
|
// Prepare data
|
|
99
108
|
const data = prepareDuplicate(source, locale, true);
|
|
100
|
-
// Update document for this locale
|
|
101
|
-
|
|
109
|
+
// Update document for this locale — target newDocument's own version
|
|
110
|
+
// directly (versionId, not draft: true). draft: true with no versionId
|
|
111
|
+
// resolves to NEW_DRAFT_FROM_PUBLISHED, which still fetches the
|
|
112
|
+
// *published* original to branch from; newDocument was just created as
|
|
113
|
+
// a draft copy with no published version yet, so that 404s the same way
|
|
114
|
+
// an unqualified update would.
|
|
115
|
+
await collection.updateById({
|
|
116
|
+
id: newDocument.id,
|
|
117
|
+
data,
|
|
118
|
+
locale,
|
|
119
|
+
versionId: newDocument.versionId
|
|
120
|
+
});
|
|
102
121
|
}
|
|
103
122
|
// Reset event locale
|
|
104
123
|
rime.setLocale(currentLocale);
|
|
@@ -45,16 +45,17 @@ export const updateById = async (args) => {
|
|
|
45
45
|
data = result.data;
|
|
46
46
|
}
|
|
47
47
|
const makeMessage = (name) => `missing ${name} @uppdateById`;
|
|
48
|
+
const makeError = (name) => new RimeError(RimeError.OPERATION_ERROR, makeMessage(name));
|
|
48
49
|
if (!context.configMap)
|
|
49
|
-
throw
|
|
50
|
+
throw makeError('configMap');
|
|
50
51
|
if (!context.originalConfigMap)
|
|
51
|
-
throw
|
|
52
|
+
throw makeError('originalConfigMap');
|
|
52
53
|
if (!context.originalDoc)
|
|
53
|
-
throw
|
|
54
|
+
throw makeError('originalDoc');
|
|
54
55
|
if (!context.versionOperation)
|
|
55
|
-
throw
|
|
56
|
+
throw makeError('versionOperation');
|
|
56
57
|
if (!context.params.versionId)
|
|
57
|
-
throw
|
|
58
|
+
throw makeError('versionId');
|
|
58
59
|
const incomingPaths = Object.keys(context.configMap);
|
|
59
60
|
const { id: updatedId } = await rime.adapter.collection.update({
|
|
60
61
|
id,
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import type { CollectionSlug } from '../../types/doc.js';
|
|
2
1
|
import { type RequestEvent } from '@sveltejs/kit';
|
|
3
|
-
|
|
2
|
+
/**
|
|
3
|
+
* POST handler for the collection API endpoint.
|
|
4
|
+
*/
|
|
5
|
+
export declare function restCreate(event: RequestEvent): Promise<Response | import("@sveltejs/kit").ActionFailure<{
|
|
4
6
|
form: Record<string, any>;
|
|
5
7
|
errors: import("../../../types.js").FormErrors;
|
|
6
8
|
}> | import("@sveltejs/kit").ActionFailure<{
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ERROR_CONTEXT, handleError } from '../../errors/handler.server.js';
|
|
2
|
+
import { RimeError } from '../../errors/index.js';
|
|
3
|
+
import { extractData } from '../../operations/extract-data.server.js';
|
|
4
|
+
import { trycatch } from '../../../util/function.js';
|
|
5
|
+
import { json } from '@sveltejs/kit';
|
|
6
|
+
import { isAuthConfig } from '../auth/util.js';
|
|
7
|
+
/**
|
|
8
|
+
* POST handler for the collection API endpoint.
|
|
9
|
+
*/
|
|
10
|
+
export async function restCreate(event) {
|
|
11
|
+
//
|
|
12
|
+
const { rime } = event.locals;
|
|
13
|
+
// Check if the slug corresponds to a valid collection
|
|
14
|
+
const slug = event.params.slug;
|
|
15
|
+
if (!rime.config.isCollection(slug)) {
|
|
16
|
+
return handleError(new RimeError(RimeError.NOT_FOUND), { context: ERROR_CONTEXT.API });
|
|
17
|
+
}
|
|
18
|
+
const collection = rime.collection(slug);
|
|
19
|
+
// Extract data from the request body
|
|
20
|
+
const [extractError, data] = await trycatch(() => extractData(event.request));
|
|
21
|
+
if (extractError) {
|
|
22
|
+
return handleError(extractError, { context: ERROR_CONTEXT.API });
|
|
23
|
+
}
|
|
24
|
+
// Bypass confirm password for api auth collection creation calls
|
|
25
|
+
if (isAuthConfig(collection.config) && 'password' in data) {
|
|
26
|
+
data.confirmPassword = data.password;
|
|
27
|
+
}
|
|
28
|
+
// Set the locale if provided in the data
|
|
29
|
+
if (data.locale) {
|
|
30
|
+
rime.setLocale(data.locale);
|
|
31
|
+
}
|
|
32
|
+
const [error, document] = await trycatch(() => collection.create({ data, locale: rime.getLocale() }));
|
|
33
|
+
if (error) {
|
|
34
|
+
return handleError(error, { context: ERROR_CONTEXT.API });
|
|
35
|
+
}
|
|
36
|
+
return json({ doc: document });
|
|
37
|
+
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import type { CollectionSlug } from '../../types/doc.js';
|
|
2
1
|
import { type RequestEvent } from '@sveltejs/kit';
|
|
3
|
-
|
|
2
|
+
/**
|
|
3
|
+
* DELETE handler for the collection API endpoint.
|
|
4
|
+
*/
|
|
5
|
+
export declare function restDelete(event: RequestEvent): Promise<Response | import("@sveltejs/kit").ActionFailure<{
|
|
4
6
|
form: Record<string, any>;
|
|
5
7
|
errors: import("../../../types").FormErrors;
|
|
6
8
|
}> | import("@sveltejs/kit").ActionFailure<{
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { normalizeQuery } from '../../../adapter-sqlite/util.server.js';
|
|
2
|
+
import { PARAMS } from '../../constant.js';
|
|
3
|
+
import { RimeError } from '../../errors/index.js';
|
|
4
|
+
import { handleError } from '../../errors/handler.server.js';
|
|
5
|
+
import { trycatch } from '../../../util/function.js';
|
|
6
|
+
import { json } from '@sveltejs/kit';
|
|
7
|
+
/**
|
|
8
|
+
* DELETE handler for the collection API endpoint.
|
|
9
|
+
*/
|
|
10
|
+
export async function restDelete(event) {
|
|
11
|
+
//
|
|
12
|
+
const { rime } = event.locals;
|
|
13
|
+
const slug = event.params.slug;
|
|
14
|
+
if (!rime.config.isCollection(slug)) {
|
|
15
|
+
return handleError(new RimeError(RimeError.NOT_FOUND), { context: 'api' });
|
|
16
|
+
}
|
|
17
|
+
const params = event.url.searchParams;
|
|
18
|
+
const hasQueryParams = !!params
|
|
19
|
+
.keys()
|
|
20
|
+
.filter((key) => key.startsWith('where'))
|
|
21
|
+
.toArray().length;
|
|
22
|
+
const query = hasQueryParams ? normalizeQuery(event.url.search.substring(1)) : undefined;
|
|
23
|
+
const apiParams = {
|
|
24
|
+
locale: rime.getLocale(),
|
|
25
|
+
sort: params.get(PARAMS.SORT) || undefined,
|
|
26
|
+
depth: params.get(PARAMS.DEPTH) ? parseInt(params.get(PARAMS.DEPTH)) : 0,
|
|
27
|
+
limit: params.get(PARAMS.LIMIT) ? parseInt(params.get(PARAMS.LIMIT)) : undefined,
|
|
28
|
+
offset: params.get(PARAMS.OFFSET) ? parseInt(params.get(PARAMS.OFFSET)) : undefined,
|
|
29
|
+
query,
|
|
30
|
+
select: params.get(PARAMS.SELECT) ? params.get(PARAMS.SELECT).split(',') : undefined
|
|
31
|
+
};
|
|
32
|
+
const [error, docs] = await trycatch(() => rime.collection(slug).delete(apiParams));
|
|
33
|
+
if (error) {
|
|
34
|
+
return handleError(error, { context: 'api' });
|
|
35
|
+
}
|
|
36
|
+
return json({ docs }, { status: 200 });
|
|
37
|
+
}
|