@caretcms/core 0.2.0 → 0.3.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 +81 -3
- package/dist/index.d.ts +13 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -9
- package/dist/index.js.map +1 -1
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +27 -3
- package/dist/loader.js.map +1 -1
- package/dist/markdown/satteri.d.ts.map +1 -1
- package/dist/markdown/satteri.js +32 -8
- package/dist/markdown/satteri.js.map +1 -1
- package/dist/runtime/auth/session.d.ts +1 -0
- package/dist/runtime/auth/session.d.ts.map +1 -1
- package/dist/runtime/auth/session.js +16 -0
- package/dist/runtime/auth/session.js.map +1 -1
- package/dist/runtime/config.d.ts +3 -0
- package/dist/runtime/config.d.ts.map +1 -1
- package/dist/runtime/config.js +4 -1
- package/dist/runtime/config.js.map +1 -1
- package/dist/runtime/i18n.d.ts +86 -0
- package/dist/runtime/i18n.d.ts.map +1 -0
- package/dist/runtime/i18n.js +168 -0
- package/dist/runtime/i18n.js.map +1 -0
- package/dist/runtime/middleware.d.ts.map +1 -1
- package/dist/runtime/middleware.js +40 -2
- package/dist/runtime/middleware.js.map +1 -1
- package/dist/runtime/mutations/contracts.d.ts +3 -0
- package/dist/runtime/mutations/contracts.d.ts.map +1 -1
- package/dist/runtime/mutations/contracts.js +9 -0
- package/dist/runtime/mutations/contracts.js.map +1 -1
- package/dist/runtime/mutations/engine.d.ts.map +1 -1
- package/dist/runtime/mutations/engine.js +121 -10
- package/dist/runtime/mutations/engine.js.map +1 -1
- package/dist/runtime/providers.d.ts +2 -1
- package/dist/runtime/providers.d.ts.map +1 -1
- package/dist/runtime/providers.js +7 -1
- package/dist/runtime/providers.js.map +1 -1
- package/dist/runtime/publish.d.ts.map +1 -1
- package/dist/runtime/publish.js +5 -0
- package/dist/runtime/publish.js.map +1 -1
- package/dist/runtime/request-context.d.ts +5 -1
- package/dist/runtime/request-context.d.ts.map +1 -1
- package/dist/runtime/request-context.js +7 -1
- package/dist/runtime/request-context.js.map +1 -1
- package/dist/runtime/routes/admin-entry.d.ts.map +1 -1
- package/dist/runtime/routes/admin-entry.js +114 -18
- package/dist/runtime/routes/admin-entry.js.map +1 -1
- package/dist/runtime/routes/admin.d.ts.map +1 -1
- package/dist/runtime/routes/admin.js +28 -14
- package/dist/runtime/routes/admin.js.map +1 -1
- package/dist/runtime/routes/auth-login.d.ts.map +1 -1
- package/dist/runtime/routes/auth-login.js +4 -0
- package/dist/runtime/routes/auth-login.js.map +1 -1
- package/dist/runtime/routes/auth-logout.d.ts.map +1 -1
- package/dist/runtime/routes/auth-logout.js +7 -2
- package/dist/runtime/routes/auth-logout.js.map +1 -1
- package/dist/runtime/routes/auth-session.d.ts.map +1 -1
- package/dist/runtime/routes/auth-session.js +4 -2
- package/dist/runtime/routes/auth-session.js.map +1 -1
- package/dist/runtime/routes/collection-list.d.ts.map +1 -1
- package/dist/runtime/routes/collection-list.js +64 -41
- package/dist/runtime/routes/collection-list.js.map +1 -1
- package/dist/runtime/routes/entries.d.ts.map +1 -1
- package/dist/runtime/routes/entries.js +15 -6
- package/dist/runtime/routes/entries.js.map +1 -1
- package/dist/runtime/routes/history.d.ts.map +1 -1
- package/dist/runtime/routes/history.js +4 -1
- package/dist/runtime/routes/history.js.map +1 -1
- package/dist/runtime/routes/schema.d.ts.map +1 -1
- package/dist/runtime/routes/schema.js +7 -2
- package/dist/runtime/routes/schema.js.map +1 -1
- package/dist/runtime/routes/studio-home.d.ts.map +1 -1
- package/dist/runtime/routes/studio-home.js +38 -19
- package/dist/runtime/routes/studio-home.js.map +1 -1
- package/dist/runtime/schema-registry.d.ts +8 -1
- package/dist/runtime/schema-registry.d.ts.map +1 -1
- package/dist/runtime/schema-registry.js +47 -3
- package/dist/runtime/schema-registry.js.map +1 -1
- package/dist/runtime/themes/preset-tokens.js +4 -4
- package/dist/runtime/themes/preset-tokens.js.map +1 -1
- package/dist/runtime/views/studio-layout.d.ts +3 -0
- package/dist/runtime/views/studio-layout.d.ts.map +1 -1
- package/dist/runtime/views/studio-layout.js +36 -13
- package/dist/runtime/views/studio-layout.js.map +1 -1
- package/dist/schema-utils.d.ts +7 -0
- package/dist/schema-utils.d.ts.map +1 -1
- package/dist/schema-utils.js +143 -0
- package/dist/schema-utils.js.map +1 -1
- package/dist/types.d.ts +43 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/static/cms/admin-entry.css +135 -13
- package/static/cms/admin-entry.js +506 -117
- package/static/cms/editor/image-edit.js +1 -0
- package/static/cms/editor/panel.js +19 -1
- package/static/cms/editor/sync.js +277 -56
- package/static/cms/editor/tokens-and-text.css +9 -0
- package/static/cms/editor.css +1 -1
- package/static/cms/editor.js +1 -1
- package/static/cms/studio-tokens.css +4 -4
- package/static/cms/studio.css +24 -0
|
@@ -7,11 +7,18 @@
|
|
|
7
7
|
* no explicit schema is registered for a collection.
|
|
8
8
|
*/
|
|
9
9
|
import type { JsonSchemaNode } from "../schema-utils.js";
|
|
10
|
+
import type { CollectionStudioConfig, StorageAdapter } from "../types.js";
|
|
10
11
|
type CollectionSchemaEntry = {
|
|
11
12
|
schema: JsonSchemaNode;
|
|
12
13
|
template: Record<string, unknown> | null;
|
|
14
|
+
metadata?: CollectionStudioConfig;
|
|
13
15
|
};
|
|
14
|
-
export declare function registerCollectionSchema(collection: string, jsonSchema: JsonSchemaNode, template: Record<string, unknown> | null): void;
|
|
16
|
+
export declare function registerCollectionSchema(collection: string, jsonSchema: JsonSchemaNode, template: Record<string, unknown> | null, metadata?: CollectionStudioConfig): void;
|
|
17
|
+
export declare function registerCollectionStudioConfig(collection: string, metadata: CollectionStudioConfig): void;
|
|
15
18
|
export declare function getRegisteredSchema(collection: string): CollectionSchemaEntry | null;
|
|
19
|
+
export declare function getRegisteredCollectionNames(): string[];
|
|
20
|
+
export declare function getStudioCollectionNames(adapter: StorageAdapter): Promise<string[]>;
|
|
21
|
+
export declare function isKnownStudioCollection(adapter: StorageAdapter, collection: string): Promise<boolean>;
|
|
22
|
+
export declare function resolveCollectionStudioConfig(adapter: StorageAdapter, collection: string): Promise<CollectionStudioConfig>;
|
|
16
23
|
export {};
|
|
17
24
|
//# sourceMappingURL=schema-registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-registry.d.ts","sourceRoot":"","sources":["../../src/runtime/schema-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"schema-registry.d.ts","sourceRoot":"","sources":["../../src/runtime/schema-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE1E,KAAK,qBAAqB,GAAG;IAC3B,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,EAAE,sBAAsB,CAAC;CACnC,CAAC;AAmBF,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,cAAc,EAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EACxC,QAAQ,CAAC,EAAE,sBAAsB,GAChC,IAAI,CAGN;AAED,wBAAgB,8BAA8B,CAC5C,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,sBAAsB,GAC/B,IAAI,CAEN;AAED,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,GACjB,qBAAqB,GAAG,IAAI,CAE9B;AAED,wBAAgB,4BAA4B,IAAI,MAAM,EAAE,CAEvD;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,MAAM,EAAE,CAAC,CAKnB;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC,CAIlB;AAED,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,sBAAsB,CAAC,CAcjC"}
|
|
@@ -6,11 +6,55 @@
|
|
|
6
6
|
* route reads from this registry and falls back to inference only when
|
|
7
7
|
* no explicit schema is registered for a collection.
|
|
8
8
|
*/
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
// The virtual schema module and runtime routes can be loaded through different
|
|
10
|
+
// Vite module graphs in Astro dev. A namespaced global registry preserves their
|
|
11
|
+
// shared identity across dependency-optimization reloads.
|
|
12
|
+
const schemaRegistryKey = Symbol.for("@caretcms/core/schema-registry");
|
|
13
|
+
const globalSlots = globalThis;
|
|
14
|
+
const state = (globalSlots[schemaRegistryKey] ??= {
|
|
15
|
+
schemas: new Map(),
|
|
16
|
+
studioConfigs: new Map(),
|
|
17
|
+
});
|
|
18
|
+
const registry = state.schemas;
|
|
19
|
+
const studioConfigRegistry = state.studioConfigs;
|
|
20
|
+
export function registerCollectionSchema(collection, jsonSchema, template, metadata) {
|
|
21
|
+
registry.set(collection, { schema: jsonSchema, template, metadata });
|
|
22
|
+
if (metadata)
|
|
23
|
+
studioConfigRegistry.set(collection, metadata);
|
|
24
|
+
}
|
|
25
|
+
export function registerCollectionStudioConfig(collection, metadata) {
|
|
26
|
+
studioConfigRegistry.set(collection, metadata);
|
|
12
27
|
}
|
|
13
28
|
export function getRegisteredSchema(collection) {
|
|
14
29
|
return registry.get(collection) ?? null;
|
|
15
30
|
}
|
|
31
|
+
export function getRegisteredCollectionNames() {
|
|
32
|
+
return [...new Set([...registry.keys(), ...studioConfigRegistry.keys()])].sort();
|
|
33
|
+
}
|
|
34
|
+
export async function getStudioCollectionNames(adapter) {
|
|
35
|
+
return [...new Set([
|
|
36
|
+
...(await adapter.discoverCollections()),
|
|
37
|
+
...getRegisteredCollectionNames(),
|
|
38
|
+
])].sort();
|
|
39
|
+
}
|
|
40
|
+
export async function isKnownStudioCollection(adapter, collection) {
|
|
41
|
+
return registry.has(collection)
|
|
42
|
+
|| studioConfigRegistry.has(collection)
|
|
43
|
+
|| adapter.isKnownCollection(collection);
|
|
44
|
+
}
|
|
45
|
+
export async function resolveCollectionStudioConfig(adapter, collection) {
|
|
46
|
+
const dynamic = await adapter.getCollectionMetadata(collection);
|
|
47
|
+
const registered = studioConfigRegistry.get(collection);
|
|
48
|
+
return {
|
|
49
|
+
label: dynamic?.label,
|
|
50
|
+
description: dynamic?.description,
|
|
51
|
+
icon: dynamic?.icon,
|
|
52
|
+
order: dynamic?.order,
|
|
53
|
+
creatable: dynamic?.creatable,
|
|
54
|
+
orderable: dynamic?.orderable,
|
|
55
|
+
deletable: dynamic?.deletable,
|
|
56
|
+
singletonId: dynamic?.singletonId,
|
|
57
|
+
...registered,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
16
60
|
//# sourceMappingURL=schema-registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-registry.js","sourceRoot":"","sources":["../../src/runtime/schema-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"schema-registry.js","sourceRoot":"","sources":["../../src/runtime/schema-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgBH,+EAA+E;AAC/E,gFAAgF;AAChF,0DAA0D;AAC1D,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;AACvE,MAAM,WAAW,GAAG,UAAyD,CAAC;AAC9E,MAAM,KAAK,GAAG,CAAC,WAAW,CAAC,iBAAiB,CAAC,KAAK;IAChD,OAAO,EAAE,IAAI,GAAG,EAAiC;IACjD,aAAa,EAAE,IAAI,GAAG,EAAkC;CACzD,CAAwB,CAAC;AAC1B,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC;AAC/B,MAAM,oBAAoB,GAAG,KAAK,CAAC,aAAa,CAAC;AAEjD,MAAM,UAAU,wBAAwB,CACtC,UAAkB,EAClB,UAA0B,EAC1B,QAAwC,EACxC,QAAiC;IAEjC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IACrE,IAAI,QAAQ;QAAE,oBAAoB,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,UAAkB,EAClB,QAAgC;IAEhC,oBAAoB,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,UAAkB;IAElB,OAAO,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC1C,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,GAAG,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACnF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,OAAuB;IAEvB,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC;YACjB,GAAG,CAAC,MAAM,OAAO,CAAC,mBAAmB,EAAE,CAAC;YACxC,GAAG,4BAA4B,EAAE;SAClC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAuB,EACvB,UAAkB;IAElB,OAAO,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;WAC1B,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC;WACpC,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,OAAuB,EACvB,UAAkB;IAElB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxD,OAAO;QACL,KAAK,EAAE,OAAO,EAAE,KAAK;QACrB,WAAW,EAAE,OAAO,EAAE,WAAW;QACjC,IAAI,EAAE,OAAO,EAAE,IAAI;QACnB,KAAK,EAAE,OAAO,EAAE,KAAK;QACrB,SAAS,EAAE,OAAO,EAAE,SAAS;QAC7B,SAAS,EAAE,OAAO,EAAE,SAAS;QAC7B,SAAS,EAAE,OAAO,EAAE,SAAS;QAC7B,WAAW,EAAE,OAAO,EAAE,WAAW;QACjC,GAAG,UAAU;KACd,CAAC;AACJ,CAAC"}
|
|
@@ -20,14 +20,14 @@ const STUDIO = {
|
|
|
20
20
|
"--color-theme-border-subtle": "rgba(255, 255, 255, 0.06)",
|
|
21
21
|
"--color-theme-border": "rgba(255, 255, 255, 0.10)",
|
|
22
22
|
// Accent — matches the inline editor's "editable" blue (#3b82f6)
|
|
23
|
-
"--color-theme-accent": "#
|
|
23
|
+
"--color-theme-accent": "#60a5fa",
|
|
24
24
|
"--color-theme-accent-soft": "rgba(59, 130, 246, 0.12)",
|
|
25
25
|
"--color-theme-accent-strong": "rgba(59, 130, 246, 0.24)",
|
|
26
|
-
"--color-theme-on-accent": "#
|
|
26
|
+
"--color-theme-on-accent": "#07111f",
|
|
27
27
|
// Text
|
|
28
28
|
"--color-theme-text": "rgba(255, 255, 255, 0.92)",
|
|
29
|
-
"--color-theme-text-muted": "
|
|
30
|
-
"--color-theme-text-dim": "
|
|
29
|
+
"--color-theme-text-muted": "#b6bac3",
|
|
30
|
+
"--color-theme-text-dim": "#9298a3",
|
|
31
31
|
// State
|
|
32
32
|
"--color-theme-success": "#22c55e",
|
|
33
33
|
"--color-theme-danger": "#ef4444",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preset-tokens.js","sourceRoot":"","sources":["../../../src/runtime/themes/preset-tokens.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,MAAM,GAAgB;IAC1B,UAAU;IACV,uBAAuB,EAAE,SAAS;IAClC,uBAAuB,EAAE,SAAS;IAClC,gCAAgC,EAAE,SAAS;IAC3C,6BAA6B,EAAE,2BAA2B;IAC1D,SAAS;IACT,6BAA6B,EAAE,2BAA2B;IAC1D,sBAAsB,EAAE,2BAA2B;IACnD,iEAAiE;IACjE,sBAAsB,EAAE,SAAS;IACjC,2BAA2B,EAAE,0BAA0B;IACvD,6BAA6B,EAAE,0BAA0B;IACzD,yBAAyB,EAAE,SAAS;IACpC,OAAO;IACP,oBAAoB,EAAE,2BAA2B;IACjD,0BAA0B,EAAE,
|
|
1
|
+
{"version":3,"file":"preset-tokens.js","sourceRoot":"","sources":["../../../src/runtime/themes/preset-tokens.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,MAAM,GAAgB;IAC1B,UAAU;IACV,uBAAuB,EAAE,SAAS;IAClC,uBAAuB,EAAE,SAAS;IAClC,gCAAgC,EAAE,SAAS;IAC3C,6BAA6B,EAAE,2BAA2B;IAC1D,SAAS;IACT,6BAA6B,EAAE,2BAA2B;IAC1D,sBAAsB,EAAE,2BAA2B;IACnD,iEAAiE;IACjE,sBAAsB,EAAE,SAAS;IACjC,2BAA2B,EAAE,0BAA0B;IACvD,6BAA6B,EAAE,0BAA0B;IACzD,yBAAyB,EAAE,SAAS;IACpC,OAAO;IACP,oBAAoB,EAAE,2BAA2B;IACjD,0BAA0B,EAAE,SAAS;IACrC,wBAAwB,EAAE,SAAS;IACnC,QAAQ;IACR,uBAAuB,EAAE,SAAS;IAClC,sBAAsB,EAAE,SAAS;IACjC,oBAAoB,EAAE,SAAS;IAC/B,uBAAuB,EAAE,SAAS;IAClC,+DAA+D;IAC/D,mBAAmB,EAAE,yDAAyD;IAC9E,sBAAsB,EAAE,yDAAyD;CAClF,CAAC;AAEF,MAAM,aAAa,GAAgC;IACjD,MAAM,EAAE,MAAM;CACf,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAE1C,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,OAAO,aAAa,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC,iBAAiB,CAAC,CAAC;AACpE,CAAC"}
|
|
@@ -5,6 +5,9 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import type { CaretRuntimeConfig } from "../config.js";
|
|
7
7
|
export declare function escapeHtml(value: string): string;
|
|
8
|
+
/** Serialize trusted configuration for an inline script without allowing a
|
|
9
|
+
* `</script>` sequence to terminate the surrounding element. */
|
|
10
|
+
export declare function serializeJsonForScript(value: unknown): string;
|
|
8
11
|
export type Crumb = {
|
|
9
12
|
label: string;
|
|
10
13
|
href?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"studio-layout.d.ts","sourceRoot":"","sources":["../../../src/runtime/views/studio-layout.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOhD;AAED,MAAM,MAAM,KAAK,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;
|
|
1
|
+
{"version":3,"file":"studio-layout.d.ts","sourceRoot":"","sources":["../../../src/runtime/views/studio-layout.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOhD;AAED;gEACgE;AAChE,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE7D;AAED,MAAM,MAAM,KAAK,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAoCF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAuElE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAM,GAAG,QAAQ,CAKpE;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAK3D"}
|
|
@@ -11,6 +11,11 @@ export function escapeHtml(value) {
|
|
|
11
11
|
.replace(/"/g, """)
|
|
12
12
|
.replace(/'/g, "'");
|
|
13
13
|
}
|
|
14
|
+
/** Serialize trusted configuration for an inline script without allowing a
|
|
15
|
+
* `</script>` sequence to terminate the surrounding element. */
|
|
16
|
+
export function serializeJsonForScript(value) {
|
|
17
|
+
return JSON.stringify(value).replace(/</g, "\\u003c");
|
|
18
|
+
}
|
|
14
19
|
function renderBrandMark(logo) {
|
|
15
20
|
if (logo) {
|
|
16
21
|
return `<img src="${escapeHtml(logo)}" alt="" class="studio-brand-mark" style="object-fit: contain;" />`;
|
|
@@ -19,7 +24,7 @@ function renderBrandMark(logo) {
|
|
|
19
24
|
<path d="M12 2L2 9l10 13 10-13L12 2zm0 3.84L18.26 9 12 17.65 5.74 9 12 5.84z"/>
|
|
20
25
|
</svg>`;
|
|
21
26
|
}
|
|
22
|
-
function renderBreadcrumb(crumbs) {
|
|
27
|
+
function renderBreadcrumb(crumbs, label) {
|
|
23
28
|
if (crumbs.length === 0)
|
|
24
29
|
return "";
|
|
25
30
|
const items = crumbs
|
|
@@ -32,13 +37,14 @@ function renderBreadcrumb(crumbs) {
|
|
|
32
37
|
return `${sep}<a href="${escapeHtml(crumb.href)}">${escapeHtml(crumb.label)}</a>`;
|
|
33
38
|
})
|
|
34
39
|
.join("");
|
|
35
|
-
return `<nav class="studio-breadcrumb" aria-label="
|
|
40
|
+
return `<nav class="studio-breadcrumb" aria-label="${escapeHtml(label)}">${items}</nav>`;
|
|
36
41
|
}
|
|
37
|
-
function renderHeaderNav(
|
|
42
|
+
function renderHeaderNav(runtime, studioActive) {
|
|
38
43
|
const activeClass = studioActive ? " active" : "";
|
|
39
|
-
return `<nav class="studio-header-nav" aria-label="
|
|
40
|
-
<
|
|
41
|
-
<
|
|
44
|
+
return `<nav class="studio-header-nav" aria-label="${escapeHtml(runtime.messages["nav.studio"])}">
|
|
45
|
+
<span id="studio-editor-identity" class="studio-editor-identity" hidden></span>
|
|
46
|
+
<a href="${escapeHtml(`${runtime.mountPath}/cms`)}" class="studio-nav-link${activeClass}">${escapeHtml(runtime.messages["nav.studio"])}</a>
|
|
47
|
+
<button id="studio-logout-btn" class="studio-nav-link" type="button">${escapeHtml(runtime.messages["nav.signOut"])}</button>
|
|
42
48
|
</nav>`;
|
|
43
49
|
}
|
|
44
50
|
export function renderStudioPage(opts) {
|
|
@@ -50,7 +56,7 @@ export function renderStudioPage(opts) {
|
|
|
50
56
|
? `<link rel="icon" href="${escapeHtml(brand.faviconUrl)}" />`
|
|
51
57
|
: "";
|
|
52
58
|
return `<!doctype html>
|
|
53
|
-
<html lang="
|
|
59
|
+
<html lang="${escapeHtml(runtime.locale)}">
|
|
54
60
|
<head>
|
|
55
61
|
<meta charset="utf-8" />
|
|
56
62
|
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
|
@@ -67,8 +73,8 @@ export function renderStudioPage(opts) {
|
|
|
67
73
|
${renderBrandMark(brand.logo)}
|
|
68
74
|
<span>${escapeHtml(brand.name)}</span>
|
|
69
75
|
</a>
|
|
70
|
-
${renderBreadcrumb(breadcrumb)}
|
|
71
|
-
${renderHeaderNav(runtime
|
|
76
|
+
${renderBreadcrumb(breadcrumb, runtime.locale === "es" ? "Navegación jerárquica" : "Breadcrumb")}
|
|
77
|
+
${renderHeaderNav(runtime, breadcrumb.length === 0)}
|
|
72
78
|
</header>
|
|
73
79
|
<main class="studio-main studio-scroll">
|
|
74
80
|
${body}
|
|
@@ -78,14 +84,31 @@ export function renderStudioPage(opts) {
|
|
|
78
84
|
<script>
|
|
79
85
|
(function () {
|
|
80
86
|
var btn = document.getElementById('studio-logout-btn');
|
|
87
|
+
var identityEl = document.getElementById('studio-editor-identity');
|
|
88
|
+
if (identityEl) {
|
|
89
|
+
fetch(${serializeJsonForScript(`${runtime.apiBasePath}/auth/session`)}, { credentials: 'same-origin' })
|
|
90
|
+
.then(function (response) { return response.ok ? response.json() : null; })
|
|
91
|
+
.then(function (body) {
|
|
92
|
+
var identity = body && body.identity;
|
|
93
|
+
var label = identity && (identity.name || identity.email);
|
|
94
|
+
if (!label) return;
|
|
95
|
+
identityEl.textContent = label;
|
|
96
|
+
identityEl.hidden = false;
|
|
97
|
+
}).catch(function () {});
|
|
98
|
+
}
|
|
81
99
|
if (!btn) return;
|
|
82
100
|
btn.addEventListener('click', function () {
|
|
83
|
-
fetch(${
|
|
101
|
+
fetch(${serializeJsonForScript(`${runtime.apiBasePath}/auth/logout`)}, {
|
|
84
102
|
method: 'POST',
|
|
85
|
-
headers: { 'x-caret-request': '1' },
|
|
103
|
+
headers: { 'Content-Type': 'application/json', 'x-caret-request': '1' },
|
|
104
|
+
body: '{}',
|
|
86
105
|
credentials: 'same-origin'
|
|
87
|
-
}).
|
|
88
|
-
|
|
106
|
+
}).then(function (response) {
|
|
107
|
+
return response.json().catch(function () { return null; });
|
|
108
|
+
}).then(function (body) {
|
|
109
|
+
window.location.href = body && body.redirect ? body.redirect : ${serializeJsonForScript(runtime.mountPath)};
|
|
110
|
+
}).catch(function () {
|
|
111
|
+
window.location.href = ${serializeJsonForScript(runtime.mountPath)};
|
|
89
112
|
});
|
|
90
113
|
});
|
|
91
114
|
})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"studio-layout.js","sourceRoot":"","sources":["../../../src/runtime/views/studio-layout.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,KAAK;SACT,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5B,CAAC;AAeD,SAAS,eAAe,CAAC,IAAmB;IAC1C,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,aAAa,UAAU,CAAC,IAAI,CAAC,oEAAoE,CAAC;IAC3G,CAAC;IACD,OAAO;;SAEA,CAAC;AACV,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAe;
|
|
1
|
+
{"version":3,"file":"studio-layout.js","sourceRoot":"","sources":["../../../src/runtime/views/studio-layout.ts"],"names":[],"mappings":"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"}
|
package/dist/schema-utils.d.ts
CHANGED
|
@@ -11,6 +11,13 @@ export type JsonSchemaNode = {
|
|
|
11
11
|
default?: unknown;
|
|
12
12
|
[key: string]: unknown;
|
|
13
13
|
};
|
|
14
|
+
export type JsonSchemaValidationIssue = {
|
|
15
|
+
path: string;
|
|
16
|
+
code: string;
|
|
17
|
+
message: string;
|
|
18
|
+
};
|
|
19
|
+
/** Dependency-free validator for the JSON Schema subset Caret's Studio renders. */
|
|
20
|
+
export declare function validateJsonSchema(value: unknown, schema: JsonSchemaNode): JsonSchemaValidationIssue[];
|
|
14
21
|
export declare function inferJsonSchema(value: unknown): JsonSchemaNode;
|
|
15
22
|
export declare function buildTemplate(schema: unknown): Record<string, unknown> | null;
|
|
16
23
|
//# sourceMappingURL=schema-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-utils.d.ts","sourceRoot":"","sources":["../src/schema-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC5C,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CA0B9D;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CA4B7E"}
|
|
1
|
+
{"version":3,"file":"schema-utils.d.ts","sourceRoot":"","sources":["../src/schema-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC5C,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAsBF,mFAAmF;AACnF,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,cAAc,GACrB,yBAAyB,EAAE,CAoI7B;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CA0B9D;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CA4B7E"}
|
package/dist/schema-utils.js
CHANGED
|
@@ -2,6 +2,149 @@
|
|
|
2
2
|
* Shared schema utility functions used by both the schema route and the
|
|
3
3
|
* virtual schemas module to build default templates from JSON Schema.
|
|
4
4
|
*/
|
|
5
|
+
function valueType(value) {
|
|
6
|
+
if (value === null)
|
|
7
|
+
return "null";
|
|
8
|
+
if (Array.isArray(value))
|
|
9
|
+
return "array";
|
|
10
|
+
if (typeof value === "number" && Number.isInteger(value))
|
|
11
|
+
return "integer";
|
|
12
|
+
return typeof value;
|
|
13
|
+
}
|
|
14
|
+
function resolveLocalRef(root, ref) {
|
|
15
|
+
if (!ref.startsWith("#/"))
|
|
16
|
+
return null;
|
|
17
|
+
let current = root;
|
|
18
|
+
for (const raw of ref.slice(2).split("/")) {
|
|
19
|
+
const key = raw.replace(/~1/g, "/").replace(/~0/g, "~");
|
|
20
|
+
if (!current || typeof current !== "object" || Array.isArray(current))
|
|
21
|
+
return null;
|
|
22
|
+
current = current[key];
|
|
23
|
+
}
|
|
24
|
+
return current && typeof current === "object" && !Array.isArray(current)
|
|
25
|
+
? current
|
|
26
|
+
: null;
|
|
27
|
+
}
|
|
28
|
+
/** Dependency-free validator for the JSON Schema subset Caret's Studio renders. */
|
|
29
|
+
export function validateJsonSchema(value, schema) {
|
|
30
|
+
const issues = [];
|
|
31
|
+
const visit = (current, node, path) => {
|
|
32
|
+
const ref = typeof node.$ref === "string" ? resolveLocalRef(schema, node.$ref) : null;
|
|
33
|
+
if (ref)
|
|
34
|
+
node = ref;
|
|
35
|
+
const allOf = Array.isArray(node.allOf) ? node.allOf : [];
|
|
36
|
+
for (const child of allOf) {
|
|
37
|
+
if (child && typeof child === "object" && !Array.isArray(child)) {
|
|
38
|
+
visit(current, child, path);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const alternatives = Array.isArray(node.anyOf)
|
|
42
|
+
? node.anyOf
|
|
43
|
+
: Array.isArray(node.oneOf) ? node.oneOf : null;
|
|
44
|
+
if (alternatives) {
|
|
45
|
+
const valid = alternatives.some((candidate) => candidate && typeof candidate === "object" && !Array.isArray(candidate)
|
|
46
|
+
&& validateAgainst(current, candidate, path).length === 0);
|
|
47
|
+
if (!valid)
|
|
48
|
+
issues.push({ path, code: "invalid_union", message: "Value does not match an allowed schema" });
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
issues.push(...validateAgainst(current, node, path));
|
|
52
|
+
};
|
|
53
|
+
const validateAgainst = (current, node, path) => {
|
|
54
|
+
const local = [];
|
|
55
|
+
const allowedTypes = Array.isArray(node.type)
|
|
56
|
+
? node.type.filter((type) => typeof type === "string")
|
|
57
|
+
: typeof node.type === "string" ? [node.type] : [];
|
|
58
|
+
const actual = valueType(current);
|
|
59
|
+
const typeMatches = allowedTypes.length === 0
|
|
60
|
+
|| allowedTypes.includes(actual)
|
|
61
|
+
|| (actual === "integer" && allowedTypes.includes("number"));
|
|
62
|
+
if (!typeMatches) {
|
|
63
|
+
return [{ path, code: "invalid_type", message: `Expected ${allowedTypes.join(" or ")}, received ${actual}` }];
|
|
64
|
+
}
|
|
65
|
+
if (Array.isArray(node.enum) && !node.enum.some((candidate) => Object.is(candidate, current))) {
|
|
66
|
+
local.push({ path, code: "invalid_enum_value", message: "Value is not one of the allowed options" });
|
|
67
|
+
}
|
|
68
|
+
if (Object.prototype.hasOwnProperty.call(node, "const") && !Object.is(node.const, current)) {
|
|
69
|
+
local.push({ path, code: "invalid_literal", message: "Value does not match the required value" });
|
|
70
|
+
}
|
|
71
|
+
if (typeof current === "string") {
|
|
72
|
+
if (typeof node.minLength === "number" && current.length < node.minLength) {
|
|
73
|
+
local.push({ path, code: "too_small", message: `Must contain at least ${node.minLength} characters` });
|
|
74
|
+
}
|
|
75
|
+
if (typeof node.maxLength === "number" && current.length > node.maxLength) {
|
|
76
|
+
local.push({ path, code: "too_big", message: `Must contain at most ${node.maxLength} characters` });
|
|
77
|
+
}
|
|
78
|
+
if (typeof node.pattern === "string") {
|
|
79
|
+
try {
|
|
80
|
+
if (!new RegExp(node.pattern).test(current)) {
|
|
81
|
+
local.push({ path, code: "invalid_string", message: "Value has an invalid format" });
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch { /* an invalid schema pattern is ignored rather than blocking writes */ }
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (typeof current === "number") {
|
|
88
|
+
if (node.type === "integer" && !Number.isInteger(current)) {
|
|
89
|
+
local.push({ path, code: "invalid_type", message: "Expected an integer" });
|
|
90
|
+
}
|
|
91
|
+
if (typeof node.minimum === "number" && current < node.minimum) {
|
|
92
|
+
local.push({ path, code: "too_small", message: `Must be at least ${node.minimum}` });
|
|
93
|
+
}
|
|
94
|
+
if (typeof node.maximum === "number" && current > node.maximum) {
|
|
95
|
+
local.push({ path, code: "too_big", message: `Must be at most ${node.maximum}` });
|
|
96
|
+
}
|
|
97
|
+
if (typeof node.exclusiveMinimum === "number" && current <= node.exclusiveMinimum) {
|
|
98
|
+
local.push({ path, code: "too_small", message: `Must be greater than ${node.exclusiveMinimum}` });
|
|
99
|
+
}
|
|
100
|
+
if (typeof node.exclusiveMaximum === "number" && current >= node.exclusiveMaximum) {
|
|
101
|
+
local.push({ path, code: "too_big", message: `Must be less than ${node.exclusiveMaximum}` });
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (Array.isArray(current)) {
|
|
105
|
+
if (typeof node.minItems === "number" && current.length < node.minItems) {
|
|
106
|
+
local.push({ path, code: "too_small", message: `Must contain at least ${node.minItems} items` });
|
|
107
|
+
}
|
|
108
|
+
if (typeof node.maxItems === "number" && current.length > node.maxItems) {
|
|
109
|
+
local.push({ path, code: "too_big", message: `Must contain at most ${node.maxItems} items` });
|
|
110
|
+
}
|
|
111
|
+
if (node.items && typeof node.items === "object" && !Array.isArray(node.items)) {
|
|
112
|
+
current.forEach((item, index) => visit(item, node.items, path ? `${path}.${index}` : String(index)));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
if (current && typeof current === "object" && !Array.isArray(current)) {
|
|
116
|
+
const record = current;
|
|
117
|
+
for (const required of node.required ?? []) {
|
|
118
|
+
if (!Object.prototype.hasOwnProperty.call(record, required)) {
|
|
119
|
+
local.push({
|
|
120
|
+
path: path ? `${path}.${required}` : required,
|
|
121
|
+
code: "required",
|
|
122
|
+
message: "Required field is missing",
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
for (const [key, child] of Object.entries(node.properties ?? {})) {
|
|
127
|
+
if (Object.prototype.hasOwnProperty.call(record, key)) {
|
|
128
|
+
visit(record[key], child, path ? `${path}.${key}` : key);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
if (node.additionalProperties === false) {
|
|
132
|
+
for (const key of Object.keys(record)) {
|
|
133
|
+
if (!Object.prototype.hasOwnProperty.call(node.properties ?? {}, key)) {
|
|
134
|
+
local.push({
|
|
135
|
+
path: path ? `${path}.${key}` : key,
|
|
136
|
+
code: "unrecognized_key",
|
|
137
|
+
message: "Unknown field",
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return local;
|
|
144
|
+
};
|
|
145
|
+
visit(value, schema, "");
|
|
146
|
+
return issues;
|
|
147
|
+
}
|
|
5
148
|
export function inferJsonSchema(value) {
|
|
6
149
|
if (value === null || value === undefined) {
|
|
7
150
|
return { type: "string", default: "" };
|
package/dist/schema-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-utils.js","sourceRoot":"","sources":["../src/schema-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"schema-utils.js","sourceRoot":"","sources":["../src/schema-utils.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -12,9 +12,11 @@ export type HistoryEntry = {
|
|
|
12
12
|
* only covers frontmatter for source-file-backed adapters).
|
|
13
13
|
*/
|
|
14
14
|
bodySource?: string;
|
|
15
|
+
/** Named editor/session responsible for the mutation, when available. */
|
|
16
|
+
editor?: EditorIdentity;
|
|
15
17
|
};
|
|
16
18
|
export type CaretMode = "embedded" | "cloud";
|
|
17
|
-
export type CaretProviderKind = "storage" | "uploads";
|
|
19
|
+
export type CaretProviderKind = "storage" | "uploads" | "identity";
|
|
18
20
|
export type RuntimeProviderReference<TKind extends CaretProviderKind = CaretProviderKind> = {
|
|
19
21
|
kind: TKind;
|
|
20
22
|
entrypoint: string;
|
|
@@ -23,6 +25,30 @@ export type RuntimeProviderReference<TKind extends CaretProviderKind = CaretProv
|
|
|
23
25
|
};
|
|
24
26
|
export type CaretStorageProvider = RuntimeProviderReference<"storage">;
|
|
25
27
|
export type CaretUploadProvider = RuntimeProviderReference<"uploads">;
|
|
28
|
+
export type CaretIdentityProvider = RuntimeProviderReference<"identity">;
|
|
29
|
+
export type EditorIdentity = {
|
|
30
|
+
/** Stable, path-safe id matching /^[A-Za-z0-9_-]{1,64}$/. */
|
|
31
|
+
id: string;
|
|
32
|
+
name?: string;
|
|
33
|
+
email?: string;
|
|
34
|
+
roles?: string[];
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Optional authoritative authentication adapter. Returning an identity grants
|
|
38
|
+
* editor access; returning null denies it. When configured, password mode is
|
|
39
|
+
* disabled rather than used as a fallback.
|
|
40
|
+
*/
|
|
41
|
+
export interface IdentityAdapter {
|
|
42
|
+
authenticate(request: Request): Promise<EditorIdentity | null>;
|
|
43
|
+
loginUrl(input: {
|
|
44
|
+
request: Request;
|
|
45
|
+
redirectTo: string;
|
|
46
|
+
}): string | Promise<string>;
|
|
47
|
+
logoutUrl?(input: {
|
|
48
|
+
request: Request;
|
|
49
|
+
redirectTo: string;
|
|
50
|
+
}): string | Promise<string>;
|
|
51
|
+
}
|
|
26
52
|
export type CollectionSchema = {
|
|
27
53
|
type: "object";
|
|
28
54
|
properties: Record<string, unknown>;
|
|
@@ -30,6 +56,19 @@ export type CollectionSchema = {
|
|
|
30
56
|
title?: string;
|
|
31
57
|
description?: string;
|
|
32
58
|
};
|
|
59
|
+
/** Studio presentation and mutation capabilities for a collection. */
|
|
60
|
+
export type CollectionStudioConfig = {
|
|
61
|
+
label?: string;
|
|
62
|
+
description?: string;
|
|
63
|
+
icon?: string;
|
|
64
|
+
/** Lower values appear first on the Studio home screen. */
|
|
65
|
+
order?: number;
|
|
66
|
+
creatable?: boolean;
|
|
67
|
+
orderable?: boolean;
|
|
68
|
+
deletable?: boolean;
|
|
69
|
+
/** Fixed entry id for a singleton collection. */
|
|
70
|
+
singletonId?: string;
|
|
71
|
+
};
|
|
33
72
|
export type CollectionMetadata = {
|
|
34
73
|
id: string;
|
|
35
74
|
label: string;
|
|
@@ -37,6 +76,9 @@ export type CollectionMetadata = {
|
|
|
37
76
|
icon?: string;
|
|
38
77
|
creatable?: boolean;
|
|
39
78
|
orderable?: boolean;
|
|
79
|
+
deletable?: boolean;
|
|
80
|
+
singletonId?: string;
|
|
81
|
+
order?: number;
|
|
40
82
|
schema: CollectionSchema;
|
|
41
83
|
created_at: number;
|
|
42
84
|
updated_at: number;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AACtE,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED