@caretcms/core 0.1.2 → 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 +109 -13
- package/dist/contracts.d.ts +1 -0
- package/dist/contracts.d.ts.map +1 -1
- package/dist/contracts.js +1 -0
- package/dist/contracts.js.map +1 -1
- package/dist/index.d.ts +31 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +146 -30
- package/dist/index.js.map +1 -1
- package/dist/loader.d.ts +17 -6
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +57 -14
- package/dist/loader.js.map +1 -1
- package/dist/markdown/block-context.d.ts +21 -0
- package/dist/markdown/block-context.d.ts.map +1 -0
- package/dist/markdown/block-context.js +27 -0
- package/dist/markdown/block-context.js.map +1 -0
- package/dist/markdown/canonical-body.d.ts +30 -0
- package/dist/markdown/canonical-body.d.ts.map +1 -0
- package/dist/markdown/canonical-body.js +54 -0
- package/dist/markdown/canonical-body.js.map +1 -0
- package/dist/markdown/contracts.d.ts +66 -0
- package/dist/markdown/contracts.d.ts.map +1 -0
- package/dist/markdown/contracts.js +102 -0
- package/dist/markdown/contracts.js.map +1 -0
- package/dist/markdown/html-to-snodes.d.ts +26 -0
- package/dist/markdown/html-to-snodes.d.ts.map +1 -0
- package/dist/markdown/html-to-snodes.js +118 -0
- package/dist/markdown/html-to-snodes.js.map +1 -0
- package/dist/markdown/remark.d.ts +35 -0
- package/dist/markdown/remark.d.ts.map +1 -0
- package/dist/markdown/remark.js +66 -0
- package/dist/markdown/remark.js.map +1 -0
- package/dist/markdown/satteri.d.ts +19 -0
- package/dist/markdown/satteri.d.ts.map +1 -0
- package/dist/markdown/satteri.js +144 -0
- package/dist/markdown/satteri.js.map +1 -0
- package/dist/markdown/serialize.d.ts +60 -0
- package/dist/markdown/serialize.d.ts.map +1 -0
- package/dist/markdown/serialize.js +264 -0
- package/dist/markdown/serialize.js.map +1 -0
- package/dist/markdown/splice.d.ts +32 -0
- package/dist/markdown/splice.d.ts.map +1 -0
- package/dist/markdown/splice.js +44 -0
- package/dist/markdown/splice.js.map +1 -0
- package/dist/markdown/stamp.d.ts +68 -0
- package/dist/markdown/stamp.d.ts.map +1 -0
- package/dist/markdown/stamp.js +131 -0
- package/dist/markdown/stamp.js.map +1 -0
- package/dist/runtime/auth/rate-limiter.d.ts.map +1 -1
- package/dist/runtime/auth/rate-limiter.js +5 -0
- package/dist/runtime/auth/rate-limiter.js.map +1 -1
- package/dist/runtime/auth/session.d.ts +3 -3
- package/dist/runtime/auth/session.d.ts.map +1 -1
- package/dist/runtime/auth/session.js +68 -21
- 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/content.d.ts.map +1 -1
- package/dist/runtime/content.js +4 -2
- package/dist/runtime/content.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 +61 -6
- package/dist/runtime/middleware.js.map +1 -1
- package/dist/runtime/mutations/contracts.d.ts +28 -1
- package/dist/runtime/mutations/contracts.d.ts.map +1 -1
- package/dist/runtime/mutations/contracts.js +76 -0
- package/dist/runtime/mutations/contracts.js.map +1 -1
- package/dist/runtime/mutations/engine.d.ts +6 -1
- package/dist/runtime/mutations/engine.d.ts.map +1 -1
- package/dist/runtime/mutations/engine.js +271 -51
- 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 +13 -1
- package/dist/runtime/publish.d.ts.map +1 -1
- package/dist/runtime/publish.js +80 -4
- package/dist/runtime/publish.js.map +1 -1
- package/dist/runtime/request-context.d.ts +14 -2
- 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/rewrite.d.ts.map +1 -1
- package/dist/runtime/rewrite.js +109 -3
- package/dist/runtime/rewrite.js.map +1 -1
- package/dist/runtime/rich-allowlist.d.ts.map +1 -1
- package/dist/runtime/rich-allowlist.js +5 -1
- package/dist/runtime/rich-allowlist.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 +33 -15
- 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 +16 -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 +50 -22
- package/dist/runtime/routes/history.js.map +1 -1
- package/dist/runtime/routes/mutate.d.ts.map +1 -1
- package/dist/runtime/routes/mutate.js +40 -6
- package/dist/runtime/routes/mutate.js.map +1 -1
- package/dist/runtime/routes/publish.d.ts.map +1 -1
- package/dist/runtime/routes/publish.js +5 -2
- package/dist/runtime/routes/publish.js.map +1 -1
- package/dist/runtime/routes/schema.d.ts.map +1 -1
- package/dist/runtime/routes/schema.js +11 -3
- 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/routes/theme-stylesheet.d.ts.map +1 -1
- package/dist/runtime/routes/theme-stylesheet.js +11 -1
- package/dist/runtime/routes/theme-stylesheet.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/storage/atomic-write.d.ts.map +1 -1
- package/dist/runtime/storage/atomic-write.js +8 -3
- package/dist/runtime/storage/atomic-write.js.map +1 -1
- package/dist/runtime/storage/markdown-adapter.d.ts +19 -0
- package/dist/runtime/storage/markdown-adapter.d.ts.map +1 -1
- package/dist/runtime/storage/markdown-adapter.js +41 -0
- package/dist/runtime/storage/markdown-adapter.js.map +1 -1
- package/dist/runtime/storage/session-overlay-adapter.d.ts +8 -0
- package/dist/runtime/storage/session-overlay-adapter.d.ts.map +1 -1
- package/dist/runtime/storage/session-overlay-adapter.js +24 -2
- package/dist/runtime/storage/session-overlay-adapter.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/utils.d.ts +10 -0
- package/dist/runtime/utils.d.ts.map +1 -1
- package/dist/runtime/utils.js +16 -0
- package/dist/runtime/utils.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 +83 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/static/cms/admin-entry.css +135 -13
- package/static/cms/admin-entry.js +509 -86
- package/static/cms/editor/guards.js +1 -1
- package/static/cms/editor/image-edit.js +42 -11
- package/static/cms/editor/image.css +7 -1
- package/static/cms/editor/md-block-edit.js +176 -0
- package/static/cms/editor/md-serialize.js +301 -0
- package/static/cms/editor/panel.css +69 -25
- package/static/cms/editor/panel.js +58 -1
- package/static/cms/editor/rich-toolbar.js +4 -3
- package/static/cms/editor/sanitize.js +2 -1
- package/static/cms/editor/sync.js +277 -56
- package/static/cms/editor/text-edit.js +68 -17
- package/static/cms/editor/text-link-interactions.js +4 -4
- package/static/cms/editor/toast.css +114 -2
- package/static/cms/editor/toast.js +121 -22
- package/static/cms/editor/tokens-and-text.css +73 -3
- package/static/cms/editor/toolbar.css +19 -6
- package/static/cms/editor/toolbar.js +64 -23
- package/static/cms/editor.css +1 -1
- package/static/cms/editor.js +14 -3
- package/static/cms/studio-tokens.css +4 -4
- package/static/cms/studio.css +24 -0
|
@@ -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"}
|
package/dist/runtime/utils.d.ts
CHANGED
|
@@ -5,6 +5,16 @@
|
|
|
5
5
|
* existed as three hand-rolled copies, one of which refused arrays — so
|
|
6
6
|
* `items.0.title` resolved server-side but not in the cloud live-sync path).
|
|
7
7
|
*/
|
|
8
|
+
/**
|
|
9
|
+
* Remove the reserved markdown body-draft map from entry data before it
|
|
10
|
+
* reaches any consumer. `__body` is draft plumbing between the md_block
|
|
11
|
+
* mutation and publish; every read boundary (entries route, loadEntry /
|
|
12
|
+
* loadCollection, caretLoader, schema inference) strips it so it never leaks
|
|
13
|
+
* into rendered pages, loader output, or inferred schemas. Deliberately NOT
|
|
14
|
+
* done inside the adapters — the preview rewrite and the publish flush are
|
|
15
|
+
* legitimate consumers and must see it.
|
|
16
|
+
*/
|
|
17
|
+
export declare function stripBodyOverlay(data: Record<string, unknown>): Record<string, unknown>;
|
|
8
18
|
/** Set a deeply nested value by dot-path. Mutates `obj` in place. */
|
|
9
19
|
export declare function setNestedValue(obj: Record<string, unknown>, path: string, value: unknown): void;
|
|
10
20
|
/** Read a deeply nested value by dot-path (object keys + numeric array
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/runtime/utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/runtime/utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAIvF;AAQD,qEAAqE;AACrE,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,GACb,IAAI,CAmBN;AAED;;uEAEuE;AACvE,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CASnE"}
|
package/dist/runtime/utils.js
CHANGED
|
@@ -5,7 +5,23 @@
|
|
|
5
5
|
* existed as three hand-rolled copies, one of which refused arrays — so
|
|
6
6
|
* `items.0.title` resolved server-side but not in the cloud live-sync path).
|
|
7
7
|
*/
|
|
8
|
+
import { BODY_OVERLAY_KEY } from "../markdown/contracts.js";
|
|
8
9
|
const FORBIDDEN_KEYS = new Set(["__proto__", "prototype", "constructor"]);
|
|
10
|
+
/**
|
|
11
|
+
* Remove the reserved markdown body-draft map from entry data before it
|
|
12
|
+
* reaches any consumer. `__body` is draft plumbing between the md_block
|
|
13
|
+
* mutation and publish; every read boundary (entries route, loadEntry /
|
|
14
|
+
* loadCollection, caretLoader, schema inference) strips it so it never leaks
|
|
15
|
+
* into rendered pages, loader output, or inferred schemas. Deliberately NOT
|
|
16
|
+
* done inside the adapters — the preview rewrite and the publish flush are
|
|
17
|
+
* legitimate consumers and must see it.
|
|
18
|
+
*/
|
|
19
|
+
export function stripBodyOverlay(data) {
|
|
20
|
+
if (!Object.prototype.hasOwnProperty.call(data, BODY_OVERLAY_KEY))
|
|
21
|
+
return data;
|
|
22
|
+
const { [BODY_OVERLAY_KEY]: _omitted, ...rest } = data;
|
|
23
|
+
return rest;
|
|
24
|
+
}
|
|
9
25
|
function assertSafeKey(key) {
|
|
10
26
|
if (FORBIDDEN_KEYS.has(key)) {
|
|
11
27
|
throw new Error(`Forbidden key in path: ${key}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/runtime/utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC;AAE1E,SAAS,aAAa,CAAC,GAAW;IAChC,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,cAAc,CAC5B,GAA4B,EAC5B,IAAY,EACZ,KAAc;IAEd,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC7D,IAAI,OAAO,GAA4B,GAAG,CAAC;IAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,aAAa,CAAC,GAAG,CAAC,CAAC;QAEnB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,GAAG,CAA4B,CAAC;IACpD,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnC,aAAa,CAAC,IAAI,CAAC,CAAC;IACpB,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AACxB,CAAC;AAED;;uEAEuE;AACvE,MAAM,UAAU,cAAc,CAAC,IAAa,EAAE,IAAY;IACxD,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,OAAO,GAAY,IAAI,CAAC;IAC5B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QAC9C,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QACtE,OAAO,GAAI,OAAmC,CAAC,GAAG,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/runtime/utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC;AAE1E;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAA6B;IAC5D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/E,MAAM,EAAE,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;IACvD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,cAAc,CAC5B,GAA4B,EAC5B,IAAY,EACZ,KAAc;IAEd,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC7D,IAAI,OAAO,GAA4B,GAAG,CAAC;IAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,aAAa,CAAC,GAAG,CAAC,CAAC;QAEnB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,GAAG,CAA4B,CAAC;IACpD,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnC,aAAa,CAAC,IAAI,CAAC,CAAC;IACpB,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AACxB,CAAC;AAED;;uEAEuE;AACvE,MAAM,UAAU,cAAc,CAAC,IAAa,EAAE,IAAY;IACxD,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,OAAO,GAAY,IAAI,CAAC;IAC5B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QAC9C,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QACtE,OAAO,GAAI,OAAmC,CAAC,GAAG,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,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
|
@@ -6,9 +6,17 @@ export type HistoryEntry = {
|
|
|
6
6
|
ts: number;
|
|
7
7
|
data: unknown;
|
|
8
8
|
action: string;
|
|
9
|
+
/**
|
|
10
|
+
* Present on `publish` snapshots that spliced markdown body blocks: the full
|
|
11
|
+
* pre-publish source file, so a restore can put the prose back (`data` alone
|
|
12
|
+
* only covers frontmatter for source-file-backed adapters).
|
|
13
|
+
*/
|
|
14
|
+
bodySource?: string;
|
|
15
|
+
/** Named editor/session responsible for the mutation, when available. */
|
|
16
|
+
editor?: EditorIdentity;
|
|
9
17
|
};
|
|
10
18
|
export type CaretMode = "embedded" | "cloud";
|
|
11
|
-
export type CaretProviderKind = "storage" | "uploads";
|
|
19
|
+
export type CaretProviderKind = "storage" | "uploads" | "identity";
|
|
12
20
|
export type RuntimeProviderReference<TKind extends CaretProviderKind = CaretProviderKind> = {
|
|
13
21
|
kind: TKind;
|
|
14
22
|
entrypoint: string;
|
|
@@ -17,6 +25,30 @@ export type RuntimeProviderReference<TKind extends CaretProviderKind = CaretProv
|
|
|
17
25
|
};
|
|
18
26
|
export type CaretStorageProvider = RuntimeProviderReference<"storage">;
|
|
19
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
|
+
}
|
|
20
52
|
export type CollectionSchema = {
|
|
21
53
|
type: "object";
|
|
22
54
|
properties: Record<string, unknown>;
|
|
@@ -24,6 +56,19 @@ export type CollectionSchema = {
|
|
|
24
56
|
title?: string;
|
|
25
57
|
description?: string;
|
|
26
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
|
+
};
|
|
27
72
|
export type CollectionMetadata = {
|
|
28
73
|
id: string;
|
|
29
74
|
label: string;
|
|
@@ -31,6 +76,9 @@ export type CollectionMetadata = {
|
|
|
31
76
|
icon?: string;
|
|
32
77
|
creatable?: boolean;
|
|
33
78
|
orderable?: boolean;
|
|
79
|
+
deletable?: boolean;
|
|
80
|
+
singletonId?: string;
|
|
81
|
+
order?: number;
|
|
34
82
|
schema: CollectionSchema;
|
|
35
83
|
created_at: number;
|
|
36
84
|
updated_at: number;
|
|
@@ -74,6 +122,40 @@ export interface StorageAdapter {
|
|
|
74
122
|
* filesystem presence (KV/R2, in-memory) omit it, so git-on-publish no-ops.
|
|
75
123
|
*/
|
|
76
124
|
committablePath?(): string;
|
|
125
|
+
/**
|
|
126
|
+
* Optional: the raw source text an entry's markdown BODY lives in (the full
|
|
127
|
+
* `.md` file, frontmatter included). Backs body inline editing: the mutation
|
|
128
|
+
* engine hash-checks a block's `data-caret-md-src` range against this before
|
|
129
|
+
* accepting a draft, and publish splices edited blocks back into it. Only
|
|
130
|
+
* source-file-backed adapters (markdown) implement it; overlay wrappers must
|
|
131
|
+
* delegate to their BASE (the body source is always the published file).
|
|
132
|
+
*/
|
|
133
|
+
readBodySource?(collection: string, id: string): Promise<string | null>;
|
|
134
|
+
/**
|
|
135
|
+
* Optional: apply drafted body-block edits to the entry's source file,
|
|
136
|
+
* all-or-nothing (see `markdown/splice.ts`). Returns the splice outcome;
|
|
137
|
+
* `stale`/`overlap` failures leave the file untouched. Publish calls this
|
|
138
|
+
* BEFORE the frontmatter write so a failed splice aborts the whole entry.
|
|
139
|
+
*/
|
|
140
|
+
spliceBodyBlocks?(collection: string, id: string, blocks: ReadonlyArray<{
|
|
141
|
+
md: string;
|
|
142
|
+
src: {
|
|
143
|
+
start: number;
|
|
144
|
+
end: number;
|
|
145
|
+
hash: string;
|
|
146
|
+
};
|
|
147
|
+
}>): Promise<{
|
|
148
|
+
ok: true;
|
|
149
|
+
} | {
|
|
150
|
+
ok: false;
|
|
151
|
+
reason: "stale" | "overlap" | "missing";
|
|
152
|
+
}>;
|
|
153
|
+
/**
|
|
154
|
+
* Optional: overwrite an entry's full source file (frontmatter + body).
|
|
155
|
+
* Backs history restore of `bodySource` snapshots. Source-file-backed
|
|
156
|
+
* adapters only.
|
|
157
|
+
*/
|
|
158
|
+
writeBodySource?(collection: string, id: string, source: string): Promise<void>;
|
|
77
159
|
}
|
|
78
160
|
export interface UploadContext {
|
|
79
161
|
sessionId?: string;
|
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;
|
|
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;IACpB,yEAAyE;IACzE,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB,CAAC;AACF,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;AAC7C,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AAEnE,MAAM,MAAM,wBAAwB,CAAC,KAAK,SAAS,iBAAiB,GAAG,iBAAiB,IAAI;IAC1F,IAAI,EAAE,KAAK,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;AACvE,MAAM,MAAM,mBAAmB,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;AACtE,MAAM,MAAM,qBAAqB,GAAG,wBAAwB,CAAC,UAAU,CAAC,CAAC;AAEzE,MAAM,MAAM,cAAc,GAAG;IAC3B,6DAA6D;IAC7D,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC/D,QAAQ,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpF,SAAS,CAAC,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACvF;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,sEAAsE;AACtE,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,gBAAgB,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IACpE,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACpD,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACtD,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzF,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7D,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9D,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACpE,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAGlF,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IAC9E,sBAAsB,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAExD;;;;OAIG;IACH,kBAAkB,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAEhE;;;;;;;;OAQG;IACH,iBAAiB,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAE9D;;;;;OAKG;IACH,eAAe,CAAC,IAAI,MAAM,CAAC;IAE3B;;;;;;;OAOG;IACH,cAAc,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAExE;;;;;OAKG;IACH,gBAAgB,CAAC,CACf,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,aAAa,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC,GACvF,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAA;KAAE,CAAC,CAAC;IAElF;;;;OAIG;IACH,eAAe,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjF;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAElE;;;;;OAKG;IACH,kBAAkB,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CAChE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@caretcms/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Platform-neutral core for CaretCMS: attribute-first inline editing, mutation engine, studio admin, StorageAdapter interface.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
"access": "public"
|
|
87
87
|
},
|
|
88
88
|
"peerDependencies": {
|
|
89
|
-
"astro": "^
|
|
89
|
+
"astro": "^6.0.0 || ^7.0.0"
|
|
90
90
|
},
|
|
91
91
|
"devDependencies": {
|
|
92
92
|
"@types/node": "25.6.0",
|