rimecms 0.30.2 → 0.31.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 +2 -40
- package/dist/.rime-modules.d.ts +23 -0
- package/dist/.rime-modules.json +1 -0
- package/dist/adapter-sqlite/generate-schema/column.server.js +1 -4
- package/dist/adapter-sqlite/generate-schema/write.server.js +7 -9
- package/dist/core/areas/config/builder.server.d.ts +0 -1
- package/dist/core/collections/auth/hooks/before-upsert/augment-fields-password.server.d.ts +1 -1
- package/dist/core/collections/config/builder.server.d.ts +0 -1
- package/dist/core/collections/upload/hooks/convert-base64.server.d.ts +1 -1
- package/dist/core/collections/upload/hooks/extract-path.server.d.ts +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/config/auth/better-auth-hooks.server.js +6 -3
- package/dist/core/config/auth/better-auth.server.d.ts +3 -3
- package/dist/core/config/client/augment-plugins.d.ts +1 -5
- package/dist/core/config/client/augment-plugins.js +3 -3
- package/dist/core/config/client/build-config.d.ts +1 -5
- package/dist/core/config/config-context.server.d.ts +1 -1
- package/dist/core/config/server/augment-plugins.server.d.ts +2 -42
- package/dist/core/config/server/augment-plugins.server.js +11 -6
- package/dist/core/config/server/build-config.server.d.ts +9 -4007
- package/dist/core/config/types.d.ts +12 -11
- package/dist/core/dev/cache/index.server.js +1 -1
- package/dist/core/dev/cli/build/index.d.ts +1 -0
- package/dist/core/dev/cli/build/index.js +10 -5
- package/dist/core/dev/cli/build/templates.d.ts +1 -1
- package/dist/core/dev/cli/build/templates.js +10 -7
- package/dist/core/dev/cli/clear/index.server.js +2 -0
- package/dist/core/dev/cli/generate-manifest/index.server.d.ts +17 -0
- package/dist/core/dev/cli/generate-manifest/index.server.js +221 -0
- package/dist/core/dev/cli/index.js +43 -0
- package/dist/core/dev/cli/init/index.server.js +13 -6
- package/dist/core/dev/cli/init/templates.d.ts +1 -1
- package/dist/core/dev/cli/init/templates.js +13 -4
- package/dist/core/dev/cli/util/package-manager.server.js +29 -26
- package/dist/core/dev/constants.d.ts +21 -2
- package/dist/core/dev/constants.js +26 -0
- package/dist/core/dev/generate/routes/common.server.js +4 -7
- package/dist/core/dev/generate/routes/index.server.js +25 -4
- package/dist/core/dev/generate/runtime/index.server.d.ts +40 -0
- package/dist/core/dev/generate/runtime/index.server.js +85 -0
- package/dist/core/dev/generate/runtime/parse-exports.server.d.ts +7 -0
- package/dist/core/dev/generate/runtime/parse-exports.server.js +40 -0
- package/dist/core/dev/generate/sanitize/index.server.d.ts +0 -7
- package/dist/core/dev/generate/sanitize/index.server.js +57 -5
- package/dist/core/dev/generate/types/index.server.js +21 -20
- package/dist/core/dev/vite/index.server.js +227 -33
- package/dist/core/ensure.server.d.ts +4 -3
- package/dist/core/ensure.server.js +8 -8
- package/dist/core/fields/builders/boolean-builder.d.ts +1 -2
- package/dist/core/fields/builders/field-builder.d.ts +11 -6
- package/dist/core/fields/builders/field-builder.js +12 -5
- package/dist/core/fields/builders/form-field-builder.d.ts +11 -14
- package/dist/core/fields/builders/form-field-builder.js +17 -15
- package/dist/core/fields/util.js +1 -1
- package/dist/core/handlers/index.js +2 -2
- package/dist/core/operations/blocks/extract.server.js +1 -1
- package/dist/core/operations/hooks/before-read/process-document-fields.server.js +3 -3
- package/dist/core/operations/hooks/before-upsert/data-config-map.server.d.ts +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/set-default-values.server.d.ts +1 -1
- package/dist/core/operations/hooks/before-upsert/set-default-values.server.js +3 -3
- 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 +7 -7
- package/dist/core/operations/hooks/index.server.d.ts +0 -4
- package/dist/core/operations/hooks/index.server.js +0 -4
- package/dist/core/operations/shared/fallback-data-from-original.js +1 -1
- package/dist/core/operations/tree/extract.server.js +1 -1
- package/dist/core/plugins/api-init/index.d.ts +2 -0
- package/dist/core/plugins/api-init/index.js +1 -0
- package/dist/core/plugins/api-init/{index.server.d.ts → module.server.d.ts} +0 -1
- package/dist/core/plugins/api-init/{index.server.js → module.server.js} +2 -3
- package/dist/core/plugins/cache/index.d.ts +2 -5
- package/dist/core/plugins/cache/index.js +1 -21
- package/dist/core/plugins/cache/module.d.ts +4 -0
- package/dist/core/plugins/cache/module.js +22 -0
- package/dist/core/plugins/cache/{index.server.d.ts → module.server.d.ts} +1 -2
- package/dist/core/plugins/cache/{index.server.js → module.server.js} +0 -1
- package/dist/core/plugins/index.d.ts +1 -8
- package/dist/core/plugins/index.js +0 -3
- package/dist/core/plugins/mailer/index.d.ts +2 -0
- package/dist/core/plugins/mailer/index.js +1 -0
- package/dist/core/plugins/mailer/{index.server.d.ts → module.server.d.ts} +0 -1
- package/dist/core/plugins/mailer/{index.server.js → module.server.js} +0 -1
- package/dist/core/plugins/sse/index.d.ts +2 -0
- package/dist/core/plugins/sse/index.js +1 -0
- package/dist/core/plugins/sse/{index.server.d.ts → module.server.d.ts} +0 -1
- package/dist/core/plugins/sse/{index.server.js → module.server.js} +0 -1
- package/dist/core/rime.server.d.ts +16 -16
- package/dist/fields/blocks/index.d.ts +1 -1
- package/dist/fields/blocks/index.js +5 -2
- package/dist/fields/checkbox/index.d.ts +1 -1
- package/dist/fields/checkbox/index.js +3 -2
- package/dist/fields/combobox/index.d.ts +1 -1
- package/dist/fields/combobox/index.js +4 -2
- package/dist/fields/date/index.d.ts +2 -2
- package/dist/fields/date/index.js +7 -5
- package/dist/fields/email/index.d.ts +3 -3
- package/dist/fields/email/index.js +9 -8
- package/dist/fields/group/component/Group.svelte +1 -1
- package/dist/fields/group/index.d.ts +1 -1
- package/dist/fields/group/index.js +4 -2
- package/dist/fields/link/index.d.ts +1 -1
- package/dist/fields/link/index.js +63 -56
- package/dist/fields/link/module.server.d.ts +2 -0
- package/dist/fields/link/{runtime.server.js → module.server.js} +0 -8
- package/dist/fields/number/index.d.ts +1 -1
- package/dist/fields/number/index.js +3 -2
- package/dist/fields/radio/index.d.ts +1 -1
- package/dist/fields/radio/index.js +4 -2
- package/dist/fields/relation/index.d.ts +2 -6
- package/dist/fields/relation/index.js +64 -75
- package/dist/fields/relation/{runtime.d.ts → module.d.ts} +2 -2
- package/dist/fields/relation/module.js +4 -0
- package/dist/fields/relation/module.server.d.ts +5 -0
- package/dist/fields/relation/{runtime.server.js → module.server.js} +3 -6
- package/dist/fields/rich-text/index.d.ts +1 -1
- package/dist/fields/rich-text/index.js +3 -2
- package/dist/fields/select/index.d.ts +1 -1
- package/dist/fields/select/index.js +4 -1
- package/dist/fields/slug/index.d.ts +1 -1
- package/dist/fields/slug/index.js +3 -2
- package/dist/fields/tabs/index.d.ts +1 -1
- package/dist/fields/tabs/index.js +10 -2
- package/dist/fields/text/index.d.ts +1 -1
- package/dist/fields/text/index.js +3 -2
- package/dist/fields/textarea/index.d.ts +1 -1
- package/dist/fields/textarea/index.js +3 -2
- package/dist/fields/time/index.d.ts +1 -1
- package/dist/fields/time/index.js +3 -2
- package/dist/fields/toggle/index.d.ts +1 -1
- package/dist/fields/toggle/index.js +3 -3
- package/dist/fields/tree/index.d.ts +1 -1
- package/dist/fields/tree/index.js +4 -2
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -3
- package/dist/panel/components/fields/RenderFields.svelte +1 -1
- package/dist/panel/context/collection.svelte.js +5 -3
- package/dist/panel/context/config.svelte.d.ts +2 -2
- package/dist/panel/context/documentForm.svelte.d.ts +2 -2
- package/dist/panel/context/documentForm.svelte.js +47 -28
- package/dist/panel/context/form.svelte.js +3 -3
- package/dist/panel/context/live.svelte.js +1 -1
- package/dist/panel/pages/auth/sign-in/SignIn.svelte +6 -1
- package/dist/server.d.ts +4 -4
- package/dist/server.js +4 -4
- package/dist/types.d.ts +1 -1
- package/dist/util/doc.js +1 -1
- package/package.json +2 -9
- package/dist/fields/blocks/index.server.d.ts +0 -3
- package/dist/fields/blocks/index.server.js +0 -5
- package/dist/fields/checkbox/index.server.d.ts +0 -3
- package/dist/fields/checkbox/index.server.js +0 -3
- package/dist/fields/combobox/index.server.d.ts +0 -3
- package/dist/fields/combobox/index.server.js +0 -4
- package/dist/fields/date/index.server.d.ts +0 -3
- package/dist/fields/date/index.server.js +0 -3
- package/dist/fields/email/index.server.d.ts +0 -4
- package/dist/fields/email/index.server.js +0 -3
- package/dist/fields/group/index.server.d.ts +0 -2
- package/dist/fields/group/index.server.js +0 -12
- package/dist/fields/index.server.d.ts +0 -14
- package/dist/fields/index.server.js +0 -65
- package/dist/fields/link/runtime.server.d.ts +0 -5
- package/dist/fields/number/index.server.d.ts +0 -3
- package/dist/fields/number/index.server.js +0 -3
- package/dist/fields/radio/index.server.d.ts +0 -3
- package/dist/fields/radio/index.server.js +0 -4
- package/dist/fields/relation/runtime.js +0 -4
- package/dist/fields/relation/runtime.server.d.ts +0 -8
- package/dist/fields/rich-text/index.server.d.ts +0 -3
- package/dist/fields/rich-text/index.server.js +0 -3
- package/dist/fields/select/index.server.d.ts +0 -3
- package/dist/fields/select/index.server.js +0 -4
- package/dist/fields/slug/index.server.d.ts +0 -3
- package/dist/fields/slug/index.server.js +0 -3
- package/dist/fields/tabs/index.server.d.ts +0 -3
- package/dist/fields/tabs/index.server.js +0 -18
- package/dist/fields/text/index.server.d.ts +0 -3
- package/dist/fields/text/index.server.js +0 -3
- package/dist/fields/textarea/index.server.d.ts +0 -3
- package/dist/fields/textarea/index.server.js +0 -3
- package/dist/fields/time/index.server.d.ts +0 -3
- package/dist/fields/time/index.server.js +0 -3
- package/dist/fields/toggle/index.server.d.ts +0 -3
- package/dist/fields/toggle/index.server.js +0 -3
- package/dist/fields/tree/index.server.d.ts +0 -3
- package/dist/fields/tree/index.server.js +0 -4
- /package/dist/fields/link/{runtime.d.ts → module.d.ts} +0 -0
- /package/dist/fields/link/{runtime.js → module.js} +0 -0
|
@@ -5,7 +5,7 @@ export function extractBlocks({ data, configMap }) {
|
|
|
5
5
|
Object.entries(configMap).forEach(([path, config]) => {
|
|
6
6
|
if (config.type === 'blocks') {
|
|
7
7
|
const value = getValueAtPath(path, data);
|
|
8
|
-
const isEmptyValue = config.
|
|
8
|
+
const isEmptyValue = config.use.isEmpty(value);
|
|
9
9
|
if (value && !isEmptyValue) {
|
|
10
10
|
value.forEach((block, index) => {
|
|
11
11
|
if (block.type) {
|
|
@@ -10,12 +10,12 @@ export const processDocumentFields = Hooks.beforeRead(async (args) => {
|
|
|
10
10
|
for (const [key, config] of Object.entries(configMap)) {
|
|
11
11
|
let value = getValueAtPath(key, doc);
|
|
12
12
|
let isEmpty;
|
|
13
|
-
if (!config.
|
|
13
|
+
if (!config.use.accessRead(event.locals.user)) {
|
|
14
14
|
doc = deleteValueAtPath(doc, key);
|
|
15
15
|
continue;
|
|
16
16
|
}
|
|
17
17
|
if (value !== undefined && value !== null) {
|
|
18
|
-
value = await config.
|
|
18
|
+
value = await config.use.beforeRead(value, {
|
|
19
19
|
event,
|
|
20
20
|
operation: args.context,
|
|
21
21
|
documentId: doc.id
|
|
@@ -23,7 +23,7 @@ export const processDocumentFields = Hooks.beforeRead(async (args) => {
|
|
|
23
23
|
doc = setValueAtPath(key, doc, value);
|
|
24
24
|
}
|
|
25
25
|
try {
|
|
26
|
-
isEmpty = config.
|
|
26
|
+
isEmpty = config.use.isEmpty(value);
|
|
27
27
|
}
|
|
28
28
|
catch {
|
|
29
29
|
isEmpty = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const buildDataConfigMap: import("../index.server.js").Hook<"raw", "
|
|
1
|
+
export declare const buildDataConfigMap: import("../index.server.js").Hook<"raw", "create" | "update", "before">;
|
|
@@ -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", "create" | "update", "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", "create" | "update", "before">;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Adapter } from '../../../../adapter-sqlite/index.server.js';
|
|
2
2
|
import type { FormFieldBuilder } from '../../../fields/builders/form-field-builder.js';
|
|
3
|
-
export declare const setDefaultValues: import("../index.server.js").Hook<"raw", "
|
|
3
|
+
export declare const setDefaultValues: import("../index.server.js").Hook<"raw", "create" | "update", "before">;
|
|
4
4
|
type GetDefaultValue = (args: {
|
|
5
5
|
key: string;
|
|
6
6
|
config: FormFieldBuilder;
|
|
@@ -17,7 +17,7 @@ export const setDefaultValues = Hooks.beforeUpsert(async (args) => {
|
|
|
17
17
|
let isEmpty;
|
|
18
18
|
const shouldAddDefault = operation === 'create' || (operation === 'update' && config.get.required);
|
|
19
19
|
try {
|
|
20
|
-
isEmpty = config.
|
|
20
|
+
isEmpty = config.use.isEmpty(value);
|
|
21
21
|
}
|
|
22
22
|
catch {
|
|
23
23
|
isEmpty = false;
|
|
@@ -60,11 +60,11 @@ const defaultRelationValue = async (config, key, adapter) => {
|
|
|
60
60
|
documentId: documentId
|
|
61
61
|
}));
|
|
62
62
|
};
|
|
63
|
-
return await buildRelation(config.
|
|
63
|
+
return await buildRelation(config.use.defaultValue({ event: getRequestEvent() }));
|
|
64
64
|
};
|
|
65
65
|
export const getDefaultValue = async ({ key, config, adapter }) => {
|
|
66
66
|
if (config instanceof RelationFieldBuilder) {
|
|
67
67
|
return await defaultRelationValue(config, key, adapter);
|
|
68
68
|
}
|
|
69
|
-
return config.
|
|
69
|
+
return config.use.defaultValue({ event: getRequestEvent() });
|
|
70
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", "create" | "update", "before">;
|
|
@@ -63,7 +63,7 @@ export const validateFields = Hooks.beforeUpsert(async (args) => {
|
|
|
63
63
|
/* Field hook before validate
|
|
64
64
|
/****************************************************/
|
|
65
65
|
if (value !== undefined && value !== null && !skipHooks) {
|
|
66
|
-
value = await config.
|
|
66
|
+
value = await config.use.beforeValidate(value, { config, data: args.data });
|
|
67
67
|
output = setValueAtPath(key, output, value);
|
|
68
68
|
}
|
|
69
69
|
/****************************************************/
|
|
@@ -71,7 +71,7 @@ export const validateFields = Hooks.beforeUpsert(async (args) => {
|
|
|
71
71
|
/****************************************************/
|
|
72
72
|
if (config.get.validate && value !== undefined && value !== null && !skipHooks) {
|
|
73
73
|
try {
|
|
74
|
-
const valid = config.
|
|
74
|
+
const valid = config.use.validate(value, {
|
|
75
75
|
data: output,
|
|
76
76
|
operation,
|
|
77
77
|
id: operation === 'update' ? args.context.originalDoc?.id : undefined,
|
|
@@ -93,7 +93,7 @@ export const validateFields = Hooks.beforeUpsert(async (args) => {
|
|
|
93
93
|
/* Field hook before Save
|
|
94
94
|
*/
|
|
95
95
|
if (value !== undefined && value !== null && !skipHooks) {
|
|
96
|
-
value = await config.
|
|
96
|
+
value = await config.use.beforeSave(value, {
|
|
97
97
|
config: config.get,
|
|
98
98
|
event,
|
|
99
99
|
operation: args.context
|
|
@@ -104,7 +104,7 @@ export const validateFields = Hooks.beforeUpsert(async (args) => {
|
|
|
104
104
|
/* Access
|
|
105
105
|
/****************************************************/
|
|
106
106
|
if (operation === 'update' && !skipAccess) {
|
|
107
|
-
const authorizedFieldUpdate = config.
|
|
107
|
+
const authorizedFieldUpdate = config.use.accessUpdate(user, {
|
|
108
108
|
id: args.context.originalDoc?.id
|
|
109
109
|
});
|
|
110
110
|
if (!authorizedFieldUpdate) {
|
|
@@ -114,7 +114,7 @@ export const validateFields = Hooks.beforeUpsert(async (args) => {
|
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
116
|
if (operation === 'create' && !skipAccess) {
|
|
117
|
-
const authorizedFieldCreate = config.
|
|
117
|
+
const authorizedFieldCreate = config.use.accessCreate(user, {
|
|
118
118
|
id: undefined
|
|
119
119
|
});
|
|
120
120
|
if (!authorizedFieldCreate) {
|
|
@@ -124,12 +124,12 @@ export const validateFields = Hooks.beforeUpsert(async (args) => {
|
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
// Required
|
|
127
|
-
if (config.get.required && config.
|
|
127
|
+
if (config.get.required && config.use.isEmpty(value)) {
|
|
128
128
|
if (skipRequired) {
|
|
129
129
|
// The field's own type-correct default (falling back to '' only
|
|
130
130
|
// when none is set) — a hardcoded '' here was wrong for every
|
|
131
131
|
// non-string required field (number, checkbox, date, ...).
|
|
132
|
-
output = setValueAtPath(key, output, config.
|
|
132
|
+
output = setValueAtPath(key, output, config.use.defaultValue({ event }) ?? '');
|
|
133
133
|
}
|
|
134
134
|
else {
|
|
135
135
|
errors[key] = RimeFormError.REQUIRED_FIELD;
|
|
@@ -81,10 +81,6 @@ export declare const Hooks: {
|
|
|
81
81
|
* Creates a before delete hook
|
|
82
82
|
*/
|
|
83
83
|
beforeDelete: <S extends DocType = "raw">(handler: Hook<S, "delete", "before">) => Hook<S, "delete", "before">;
|
|
84
|
-
/**
|
|
85
|
-
* Creates an after read hook
|
|
86
|
-
*/
|
|
87
|
-
afterRead: <S extends DocType = "raw">(handler: Hook<S, "read", "after">) => Hook<S, "read", "after">;
|
|
88
84
|
/**
|
|
89
85
|
* Creates an after create hook
|
|
90
86
|
*/
|
|
@@ -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.
|
|
25
|
+
const isEmptyValue = config.use.isEmpty(value);
|
|
26
26
|
if (value && !isEmptyValue) {
|
|
27
27
|
value.forEach((item, index) => {
|
|
28
28
|
processTreeItem(item, index, path, undefined);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { apiInit } from "$rime/modules/rimecms/core/plugins/api-init";
|
|
@@ -28,7 +28,7 @@ export const apiInit = definePlugin(() => {
|
|
|
28
28
|
});
|
|
29
29
|
}
|
|
30
30
|
event.locals.isInit = true;
|
|
31
|
-
const [signUpError] = await trycatch(() => event.locals.rime.auth.api.signUpEmail({
|
|
31
|
+
const [signUpError, response] = await trycatch(() => event.locals.rime.auth.api.signUpEmail({
|
|
32
32
|
body: {
|
|
33
33
|
email: data.email,
|
|
34
34
|
name: data.name,
|
|
@@ -42,11 +42,10 @@ export const apiInit = definePlugin(() => {
|
|
|
42
42
|
formData: { email: data.email }
|
|
43
43
|
});
|
|
44
44
|
}
|
|
45
|
-
return json({ initialized: true });
|
|
45
|
+
return json({ initialized: true, user: response.user });
|
|
46
46
|
};
|
|
47
47
|
return {
|
|
48
48
|
name: 'apiInit',
|
|
49
|
-
type: 'server',
|
|
50
49
|
routes: {
|
|
51
50
|
'/api/init': {
|
|
52
51
|
POST: requestHandler
|
|
@@ -1,5 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
readonly type: "client";
|
|
4
|
-
readonly configure: <const C extends import("../../config/types.js").SanitizedConfigClient>(config: C) => C;
|
|
5
|
-
};
|
|
1
|
+
/// <reference path="../../../.rime-modules.d.ts" />
|
|
2
|
+
export { cache } from "$rime/modules/rimecms/core/plugins/cache";
|
|
@@ -1,21 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import HeaderButton from './HeaderButton.svelte';
|
|
3
|
-
export const cacheClient = definePluginClient(() => {
|
|
4
|
-
return {
|
|
5
|
-
name: 'cache/client',
|
|
6
|
-
type: 'client',
|
|
7
|
-
configure: (config) => {
|
|
8
|
-
config = {
|
|
9
|
-
...config,
|
|
10
|
-
panel: {
|
|
11
|
-
...(config.panel || {}),
|
|
12
|
-
components: {
|
|
13
|
-
...(config.panel?.components || { header: [], collectionHeader: [] }),
|
|
14
|
-
header: [...(config.panel?.components?.header || []), HeaderButton]
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
};
|
|
18
|
-
return config;
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
});
|
|
1
|
+
export { cache } from "$rime/modules/rimecms/core/plugins/cache";
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { definePlugin } from '../index.js';
|
|
2
|
+
import HeaderButton from './HeaderButton.svelte';
|
|
3
|
+
// Signature has to match module.server.ts's — the same call site (whatever the consumer
|
|
4
|
+
// wrote in rime.config.ts) compiles against both, whichever one this build resolves to.
|
|
5
|
+
export const cache = definePlugin(() => {
|
|
6
|
+
return {
|
|
7
|
+
name: 'cache',
|
|
8
|
+
configure: (config) => {
|
|
9
|
+
config = {
|
|
10
|
+
...config,
|
|
11
|
+
panel: {
|
|
12
|
+
...(config.panel || {}),
|
|
13
|
+
components: {
|
|
14
|
+
...(config.panel?.components || { header: [], collectionHeader: [] }),
|
|
15
|
+
header: [...(config.panel?.components?.header || []), HeaderButton]
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
return config;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
});
|
|
@@ -26,8 +26,7 @@ type CacheOptions = {
|
|
|
26
26
|
export declare const toHash: (str: string) => string;
|
|
27
27
|
export declare const cache: (options?: CacheOptions) => {
|
|
28
28
|
readonly name: "cache";
|
|
29
|
-
readonly
|
|
30
|
-
readonly configure: <const C extends import("../../config/types.js").Config>(config: C) => C;
|
|
29
|
+
readonly configure: <const C extends import("../../config/types.js").Config | import("../../config/types.js").SanitizedConfigClient>(config: C) => C;
|
|
31
30
|
readonly routes: {
|
|
32
31
|
readonly '/api/clear-cache': {
|
|
33
32
|
readonly POST: () => Response;
|
|
@@ -2,19 +2,12 @@ import type { Config, RouteConfig } from '../../types.js';
|
|
|
2
2
|
import type { Handle } from '@sveltejs/kit';
|
|
3
3
|
import type { SanitizedConfigClient } from '../config/types.js';
|
|
4
4
|
type MaybeAsyncFunction = (...args: any[]) => any | Promise<any>;
|
|
5
|
-
export type PluginClient = {
|
|
6
|
-
name: string;
|
|
7
|
-
type: 'client';
|
|
8
|
-
configure?: <const C extends SanitizedConfigClient>(config: C) => C;
|
|
9
|
-
};
|
|
10
5
|
export type Plugin = {
|
|
11
6
|
name: string;
|
|
12
|
-
|
|
13
|
-
configure?: <const C extends Config>(config: C) => C;
|
|
7
|
+
configure?: <const C extends Config | SanitizedConfigClient>(config: C) => C;
|
|
14
8
|
actions?: Record<string, MaybeAsyncFunction>;
|
|
15
9
|
routes?: Record<string, RouteConfig>;
|
|
16
10
|
handler?: Handle;
|
|
17
11
|
};
|
|
18
12
|
export declare function definePlugin<const F extends (options?: any) => Plugin>(factory: F): F;
|
|
19
|
-
export declare function definePluginClient<const F extends (options?: any) => PluginClient>(factory: F): F;
|
|
20
13
|
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { mailer } from "$rime/modules/rimecms/core/plugins/mailer";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { sse } from "$rime/modules/rimecms/core/plugins/sse";
|
|
@@ -2,7 +2,6 @@ import { type RequestHandler } from '@sveltejs/kit';
|
|
|
2
2
|
import { broadcast } from './broadcast.js';
|
|
3
3
|
export declare const sse: () => {
|
|
4
4
|
readonly name: "sse";
|
|
5
|
-
readonly type: "server";
|
|
6
5
|
readonly actions: {
|
|
7
6
|
readonly broadcast: (data: import("./types.js").ContentUpdatePayload) => void;
|
|
8
7
|
};
|
|
@@ -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?: ("create" | "update" | "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?: ("create" | "update" | "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,18 +1982,18 @@ 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").
|
|
1985
|
+
getBySlug: (slug: string) => import("./config/types.js").BuiltCollection | import("./config/types.js").BuiltArea;
|
|
1986
1986
|
isCollection: (slug?: string) => slug is import("./types/doc.js").CollectionSlug;
|
|
1987
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: {
|
|
1991
|
-
cache: import("./plugins/cache/
|
|
1992
|
-
sse: import("./plugins/sse/
|
|
1993
|
-
} & (C["$smtp"] extends import("./plugins/mailer/
|
|
1994
|
-
mailer: import("./plugins/mailer/
|
|
1991
|
+
cache: import("./plugins/cache/module.server.js").CacheActions;
|
|
1992
|
+
sse: import("./plugins/sse/module.server.js").SSEActions;
|
|
1993
|
+
} & (C["$smtp"] extends import("./plugins/mailer/module.server.js").SMTPConfig ? {
|
|
1994
|
+
mailer: import("./plugins/mailer/module.server.js").MailerActions;
|
|
1995
1995
|
} : Record<string, never>) & (C extends {
|
|
1996
|
-
|
|
1996
|
+
plugins: readonly (infer P)[];
|
|
1997
1997
|
} ? P extends {
|
|
1998
1998
|
name: infer N;
|
|
1999
1999
|
actions?: infer A;
|
|
@@ -2009,12 +2009,12 @@ export declare function createRime<const C extends Config>(config: BuildConfig<C
|
|
|
2009
2009
|
error: (...args: any[]) => void;
|
|
2010
2010
|
};
|
|
2011
2011
|
} & {
|
|
2012
|
-
cache: import("./plugins/cache/
|
|
2013
|
-
sse: import("./plugins/sse/
|
|
2014
|
-
} & (C["$smtp"] extends import("./plugins/mailer/
|
|
2015
|
-
mailer: import("./plugins/mailer/
|
|
2012
|
+
cache: import("./plugins/cache/module.server.js").CacheActions;
|
|
2013
|
+
sse: import("./plugins/sse/module.server.js").SSEActions;
|
|
2014
|
+
} & (C["$smtp"] extends import("./plugins/mailer/module.server.js").SMTPConfig ? {
|
|
2015
|
+
mailer: import("./plugins/mailer/module.server.js").MailerActions;
|
|
2016
2016
|
} : Record<string, never>) & (C extends {
|
|
2017
|
-
|
|
2017
|
+
plugins: readonly (infer P)[];
|
|
2018
2018
|
} ? P extends {
|
|
2019
2019
|
name: infer N;
|
|
2020
2020
|
actions?: infer A;
|
|
@@ -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?: ("create" | "update" | "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?: ("create" | "update" | "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,7 +4004,7 @@ 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").
|
|
4007
|
+
getBySlug: (slug: string) => import("./config/types.js").BuiltCollection | import("./config/types.js").BuiltArea;
|
|
4008
4008
|
isCollection: (slug?: string) => slug is import("./types/doc.js").CollectionSlug;
|
|
4009
4009
|
isArea: (slug?: string) => slug is import("./types/doc.js").AreaSlug;
|
|
4010
4010
|
getDocumentPrototype(slug: import("./types/doc.js").PrototypeSlug): "area" | "collection";
|
|
@@ -7,7 +7,6 @@ import type { Component } from 'svelte';
|
|
|
7
7
|
export declare const blocks: (name: string, blocks: BlockBuilder[]) => BlocksBuilder;
|
|
8
8
|
export declare const block: (name: string) => BlockBuilder;
|
|
9
9
|
export declare class BlocksBuilder extends FormFieldBuilder<BlocksField> {
|
|
10
|
-
_metaUrl: string;
|
|
11
10
|
constructor(name: string, blocks: BlockBuilder[]);
|
|
12
11
|
get component(): Component<import("./component/props.js").BlocksProps, {}, "">;
|
|
13
12
|
get cell(): Component<{
|
|
@@ -17,6 +16,7 @@ export declare class BlocksBuilder extends FormFieldBuilder<BlocksField> {
|
|
|
17
16
|
}, {}, "">;
|
|
18
17
|
localized(): this;
|
|
19
18
|
compile(): any;
|
|
19
|
+
protected generateType(): string;
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
22
|
* Checks if a field is a blocks field.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { FormFieldBuilder } from '../../core/fields/builders/form-field-builder.js';
|
|
2
|
+
import { toPascalCase } from '../../util/string.js';
|
|
2
3
|
import { number } from '../number/index.js';
|
|
3
4
|
import { text } from '../text/index.js';
|
|
4
5
|
import Blocks from './component/Blocks.svelte';
|
|
@@ -6,8 +7,6 @@ import Cell from './component/Cell.svelte';
|
|
|
6
7
|
export const blocks = (name, blocks) => new BlocksBuilder(name, blocks);
|
|
7
8
|
export const block = (name) => new BlockBuilder(name);
|
|
8
9
|
export class BlocksBuilder extends FormFieldBuilder {
|
|
9
|
-
//
|
|
10
|
-
_metaUrl = import.meta.url;
|
|
11
10
|
constructor(name, blocks) {
|
|
12
11
|
super(name, 'blocks');
|
|
13
12
|
this.field.blocks = blocks;
|
|
@@ -67,6 +66,10 @@ export class BlocksBuilder extends FormFieldBuilder {
|
|
|
67
66
|
cell: this.cell || undefined
|
|
68
67
|
};
|
|
69
68
|
}
|
|
69
|
+
generateType() {
|
|
70
|
+
const blockNames = this.field.blocks.map((block) => `Block${toPascalCase(block.name)}`);
|
|
71
|
+
return `${this.name}: Array<${blockNames.join(' | ')}>,`;
|
|
72
|
+
}
|
|
70
73
|
}
|
|
71
74
|
/**
|
|
72
75
|
* Checks if a field is a blocks field.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { FormField } from '../types.js';
|
|
2
2
|
import { BooleanFieldBuilder } from '../../core/fields/builders/boolean-builder.js';
|
|
3
3
|
export declare class CheckboxFieldBuilder extends BooleanFieldBuilder<CheckboxField> {
|
|
4
|
-
_metaUrl: string;
|
|
5
4
|
get component(): import("svelte").Component<import("./component/props.js").CheckboxProps, {}, "">;
|
|
5
|
+
protected generateType(): string;
|
|
6
6
|
}
|
|
7
7
|
export declare const checkbox: (name: string) => CheckboxFieldBuilder;
|
|
8
8
|
/****************************************************/
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { BooleanFieldBuilder } from '../../core/fields/builders/boolean-builder.js';
|
|
2
2
|
import Checkbox from './component/Checkbox.svelte';
|
|
3
3
|
export class CheckboxFieldBuilder extends BooleanFieldBuilder {
|
|
4
|
-
//
|
|
5
|
-
_metaUrl = import.meta.url;
|
|
6
4
|
get component() {
|
|
7
5
|
return Checkbox;
|
|
8
6
|
}
|
|
7
|
+
generateType() {
|
|
8
|
+
return `${this.name}: boolean`;
|
|
9
|
+
}
|
|
9
10
|
}
|
|
10
11
|
export const checkbox = (name) => new CheckboxFieldBuilder(name, 'checkbox');
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { DefaultValueFn, FormField, OptionWithIcon } from '../types.js';
|
|
2
2
|
import { PickOneFieldBuilder } from '../../core/fields/builders/select-builder.js';
|
|
3
3
|
export declare class ComboBoxFieldBuilder extends PickOneFieldBuilder<ComboBoxField> {
|
|
4
|
-
_metaUrl: string;
|
|
5
4
|
get component(): import("svelte").Component<import("./component/props.js").ComboBoxProps, {}, "">;
|
|
6
5
|
options(...options: OptionWithIcon[] | string[]): this;
|
|
7
6
|
defaultValue(value: string | DefaultValueFn<string>): this;
|
|
7
|
+
protected generateType(): string;
|
|
8
8
|
}
|
|
9
9
|
export declare const combobox: (name: string) => ComboBoxFieldBuilder;
|
|
10
10
|
/****************************************************/
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { PickOneFieldBuilder } from '../../core/fields/builders/select-builder.js';
|
|
2
2
|
import Combobox from './component/ComboBox.svelte';
|
|
3
3
|
export class ComboBoxFieldBuilder extends PickOneFieldBuilder {
|
|
4
|
-
//
|
|
5
|
-
_metaUrl = import.meta.url;
|
|
6
4
|
get component() {
|
|
7
5
|
return Combobox;
|
|
8
6
|
}
|
|
@@ -13,5 +11,9 @@ export class ComboBoxFieldBuilder extends PickOneFieldBuilder {
|
|
|
13
11
|
this.field.defaultValue = value;
|
|
14
12
|
return this;
|
|
15
13
|
}
|
|
14
|
+
generateType() {
|
|
15
|
+
const optionsJoinedType = this.get.options.map((o) => `'${o.value}'`).join(' | ');
|
|
16
|
+
return `${this.name}${this.get.required ? '' : '?'}: ${optionsJoinedType}`;
|
|
17
|
+
}
|
|
16
18
|
}
|
|
17
19
|
export const combobox = (name) => new ComboBoxFieldBuilder(name, 'combobox');
|
|
@@ -3,8 +3,8 @@ import { FormFieldBuilder } from '../../core/fields/builders/form-field-builder.
|
|
|
3
3
|
import type { DefaultValueFn, FormField } from '../types.js';
|
|
4
4
|
export declare const date: (name: string) => DateFieldBuilder;
|
|
5
5
|
export declare class DateFieldBuilder extends FormFieldBuilder<DateField> {
|
|
6
|
-
_metaUrl: string;
|
|
7
6
|
constructor(name: string);
|
|
7
|
+
get dataType(): DataType;
|
|
8
8
|
get component(): import("svelte").Component<{
|
|
9
9
|
path: string;
|
|
10
10
|
config: DateFieldBuilder;
|
|
@@ -14,8 +14,8 @@ export declare class DateFieldBuilder extends FormFieldBuilder<DateField> {
|
|
|
14
14
|
value: Date | undefined;
|
|
15
15
|
}, {}, "">;
|
|
16
16
|
defaultValue(value: Date | DefaultValueFn<Date>): this;
|
|
17
|
-
get dataType(): DataType;
|
|
18
17
|
isTitle(): this;
|
|
18
|
+
protected generateType(): string;
|
|
19
19
|
}
|
|
20
20
|
/****************************************************/
|
|
21
21
|
export type DateField = FormField & {
|