@caretcms/core 0.2.0 → 0.4.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 +195 -12
- package/dist/index.d.ts +26 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +113 -12
- package/dist/index.js.map +1 -1
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +35 -3
- package/dist/loader.js.map +1 -1
- package/dist/markdown/paragraphs.d.ts +14 -0
- package/dist/markdown/paragraphs.d.ts.map +1 -0
- package/dist/markdown/paragraphs.js +61 -0
- package/dist/markdown/paragraphs.js.map +1 -0
- package/dist/markdown/remark.d.ts.map +1 -1
- package/dist/markdown/remark.js +1 -0
- package/dist/markdown/remark.js.map +1 -1
- package/dist/markdown/satteri.d.ts.map +1 -1
- package/dist/markdown/satteri.js +35 -9
- package/dist/markdown/satteri.js.map +1 -1
- package/dist/markdown/stamp.d.ts +0 -9
- package/dist/markdown/stamp.d.ts.map +1 -1
- package/dist/markdown/stamp.js +6 -0
- package/dist/markdown/stamp.js.map +1 -1
- package/dist/providers/deployment/github.d.ts +27 -0
- package/dist/providers/deployment/github.d.ts.map +1 -0
- package/dist/providers/deployment/github.js +180 -0
- package/dist/providers/deployment/github.js.map +1 -0
- package/dist/providers/deployment/simulated.d.ts +10 -0
- package/dist/providers/deployment/simulated.d.ts.map +1 -0
- package/dist/providers/deployment/simulated.js +29 -0
- package/dist/providers/deployment/simulated.js.map +1 -0
- 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/authorization.d.ts +11 -0
- package/dist/runtime/authorization.d.ts.map +1 -0
- package/dist/runtime/authorization.js +29 -0
- package/dist/runtime/authorization.js.map +1 -0
- package/dist/runtime/collection-policy.d.ts +11 -0
- package/dist/runtime/collection-policy.d.ts.map +1 -0
- package/dist/runtime/collection-policy.js +44 -0
- package/dist/runtime/collection-policy.js.map +1 -0
- 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-errors.d.ts +9 -0
- package/dist/runtime/content-errors.d.ts.map +1 -0
- package/dist/runtime/content-errors.js +17 -0
- package/dist/runtime/content-errors.js.map +1 -0
- package/dist/runtime/content.d.ts.map +1 -1
- package/dist/runtime/content.js +13 -4
- package/dist/runtime/content.js.map +1 -1
- package/dist/runtime/deployment-status.d.ts +14 -0
- package/dist/runtime/deployment-status.d.ts.map +1 -0
- package/dist/runtime/deployment-status.js +57 -0
- package/dist/runtime/deployment-status.js.map +1 -0
- package/dist/runtime/draft-state.d.ts +16 -0
- package/dist/runtime/draft-state.d.ts.map +1 -0
- package/dist/runtime/draft-state.js +29 -0
- package/dist/runtime/draft-state.js.map +1 -0
- package/dist/runtime/i18n.d.ts +97 -0
- package/dist/runtime/i18n.d.ts.map +1 -0
- package/dist/runtime/i18n.js +190 -0
- package/dist/runtime/i18n.js.map +1 -0
- package/dist/runtime/index.d.ts +1 -0
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +1 -0
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/middleware.d.ts.map +1 -1
- package/dist/runtime/middleware.js +61 -4
- package/dist/runtime/middleware.js.map +1 -1
- package/dist/runtime/mutations/contracts.d.ts +12 -0
- package/dist/runtime/mutations/contracts.d.ts.map +1 -1
- package/dist/runtime/mutations/contracts.js +54 -4
- package/dist/runtime/mutations/contracts.js.map +1 -1
- package/dist/runtime/mutations/engine.d.ts +2 -0
- package/dist/runtime/mutations/engine.d.ts.map +1 -1
- package/dist/runtime/mutations/engine.js +220 -57
- package/dist/runtime/mutations/engine.js.map +1 -1
- package/dist/runtime/providers.d.ts +4 -1
- package/dist/runtime/providers.d.ts.map +1 -1
- package/dist/runtime/providers.js +18 -1
- package/dist/runtime/providers.js.map +1 -1
- package/dist/runtime/publish-recovery.d.ts +32 -0
- package/dist/runtime/publish-recovery.d.ts.map +1 -0
- package/dist/runtime/publish-recovery.js +98 -0
- package/dist/runtime/publish-recovery.js.map +1 -0
- package/dist/runtime/publish.d.ts +10 -4
- package/dist/runtime/publish.d.ts.map +1 -1
- package/dist/runtime/publish.js +105 -63
- package/dist/runtime/publish.js.map +1 -1
- package/dist/runtime/rebuild-webhook.d.ts +4 -0
- package/dist/runtime/rebuild-webhook.d.ts.map +1 -1
- package/dist/runtime/rebuild-webhook.js +12 -2
- package/dist/runtime/rebuild-webhook.js.map +1 -1
- package/dist/runtime/request-context.d.ts +7 -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/rewrite.d.ts.map +1 -1
- package/dist/runtime/rewrite.js +28 -2
- package/dist/runtime/rewrite.js.map +1 -1
- package/dist/runtime/rich-allowlist.js +1 -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 +129 -21
- 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 +10 -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 +213 -66
- package/dist/runtime/routes/collection-list.js.map +1 -1
- package/dist/runtime/routes/deployment.d.ts +5 -0
- package/dist/runtime/routes/deployment.d.ts.map +1 -0
- package/dist/runtime/routes/deployment.js +38 -0
- package/dist/runtime/routes/deployment.js.map +1 -0
- package/dist/runtime/routes/draft.d.ts.map +1 -1
- package/dist/runtime/routes/draft.js +10 -3
- package/dist/runtime/routes/draft.js.map +1 -1
- package/dist/runtime/routes/entries.d.ts.map +1 -1
- package/dist/runtime/routes/entries.js +87 -43
- 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 +40 -21
- 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 +4 -1
- 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 +127 -33
- 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 -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 +41 -20
- package/dist/runtime/routes/studio-home.js.map +1 -1
- package/dist/runtime/routes/upload.d.ts.map +1 -1
- package/dist/runtime/routes/upload.js +3 -0
- package/dist/runtime/routes/upload.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 +49 -3
- package/dist/runtime/schema-registry.js.map +1 -1
- package/dist/runtime/storage/entry-commit.d.ts +8 -0
- package/dist/runtime/storage/entry-commit.d.ts.map +1 -0
- package/dist/runtime/storage/entry-commit.js +45 -0
- package/dist/runtime/storage/entry-commit.js.map +1 -0
- package/dist/runtime/storage/filesystem-adapter.d.ts +5 -0
- package/dist/runtime/storage/filesystem-adapter.d.ts.map +1 -1
- package/dist/runtime/storage/filesystem-adapter.js +12 -3
- package/dist/runtime/storage/filesystem-adapter.js.map +1 -1
- package/dist/runtime/storage/frontmatter-codec.d.ts +5 -23
- package/dist/runtime/storage/frontmatter-codec.d.ts.map +1 -1
- package/dist/runtime/storage/frontmatter-codec.js +156 -13
- package/dist/runtime/storage/frontmatter-codec.js.map +1 -1
- package/dist/runtime/storage/in-memory-adapter.d.ts +7 -0
- package/dist/runtime/storage/in-memory-adapter.d.ts.map +1 -1
- package/dist/runtime/storage/in-memory-adapter.js +6 -0
- package/dist/runtime/storage/in-memory-adapter.js.map +1 -1
- package/dist/runtime/storage/markdown-adapter.d.ts.map +1 -1
- package/dist/runtime/storage/markdown-adapter.js +18 -20
- package/dist/runtime/storage/markdown-adapter.js.map +1 -1
- package/dist/runtime/storage/session-overlay-adapter.d.ts +12 -4
- package/dist/runtime/storage/session-overlay-adapter.d.ts.map +1 -1
- package/dist/runtime/storage/session-overlay-adapter.js +100 -13
- package/dist/runtime/storage/session-overlay-adapter.js.map +1 -1
- package/dist/runtime/storage/sidecar-meta-store.d.ts +5 -0
- package/dist/runtime/storage/sidecar-meta-store.d.ts.map +1 -1
- package/dist/runtime/storage/sidecar-meta-store.js +48 -5
- package/dist/runtime/storage/sidecar-meta-store.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.map +1 -1
- package/dist/runtime/utils.js +3 -4
- 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 +165 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +12 -3
- package/static/cms/admin-entry.css +144 -13
- package/static/cms/admin-entry.js +539 -586
- package/static/cms/dev-toolbar/app.js +78 -19
- package/static/cms/editor/config.js +35 -15
- package/static/cms/editor/content-map.css +8 -1
- package/static/cms/editor/content-map.js +62 -23
- package/static/cms/editor/deployment-status.js +66 -0
- package/static/cms/editor/draft-client.js +87 -0
- package/static/cms/editor/guards.js +20 -0
- package/static/cms/editor/helpers.js +30 -1
- package/static/cms/editor/highlight.js +1 -0
- package/static/cms/editor/image-edit.js +44 -1
- package/static/cms/editor/image-utils.js +23 -7
- package/static/cms/editor/link-follow.js +122 -41
- package/static/cms/editor/link-ui.css +10 -1
- package/static/cms/editor/linkify.js +2 -0
- package/static/cms/editor/md-block-edit.js +140 -37
- package/static/cms/editor/md-paragraphs.js +98 -0
- package/static/cms/editor/md-serialize.js +1 -1
- package/static/cms/editor/panel.js +53 -7
- package/static/cms/editor/preview-mode.js +44 -0
- package/static/cms/editor/publish-result.js +100 -0
- package/static/cms/editor/rich-toolbar.js +58 -15
- package/static/cms/editor/sanitize.js +6 -2
- package/static/cms/editor/save-queue.js +75 -17
- package/static/cms/editor/section-controls/activation.js +3 -0
- package/static/cms/editor/section-controls/api.js +25 -7
- package/static/cms/editor/section-controls/index.js +60 -8
- package/static/cms/editor/section-controls/model.js +39 -4
- package/static/cms/editor/section-controls/mutations.js +15 -0
- package/static/cms/editor/section-controls/page-context.js +9 -0
- package/static/cms/editor/section-controls/pickers.js +53 -2
- package/static/cms/editor/section-controls/reorder.js +23 -0
- package/static/cms/editor/section-controls/selection.js +6 -0
- package/static/cms/editor/section-controls/spacing-drag.js +16 -0
- package/static/cms/editor/section-controls/ui-elements.js +7 -0
- package/static/cms/editor/section-controls/utils.js +7 -0
- package/static/cms/editor/section-controls.css +18 -3
- package/static/cms/editor/security.js +13 -2
- package/static/cms/editor/stega-hydrate.js +17 -4
- package/static/cms/editor/sync.js +475 -56
- package/static/cms/editor/text-edit.js +37 -3
- package/static/cms/editor/text-link-interactions.js +59 -17
- package/static/cms/editor/toast.js +23 -9
- package/static/cms/editor/tokens-and-text.css +9 -0
- package/static/cms/editor/toolbar.css +5 -0
- package/static/cms/editor/toolbar.js +91 -101
- package/static/cms/editor.css +1 -1
- package/static/cms/editor.js +1 -0
- package/static/cms/studio/entry-loader.js +102 -0
- package/static/cms/studio/field-model.js +110 -0
- package/static/cms/studio/fields.js +319 -0
- package/static/cms/studio/history-client.js +74 -0
- package/static/cms/studio/mutation-client.js +74 -0
- package/static/cms/studio/sync-client.js +107 -0
- package/static/cms/studio/upload-client.js +109 -0
- package/static/cms/studio-tokens.css +4 -4
- package/static/cms/studio.css +24 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export const prerender = false;
|
|
2
2
|
import { isEditorAuthenticated } from "../auth/session.js";
|
|
3
|
-
import { getRegisteredSchema } from "../schema-registry.js";
|
|
3
|
+
import { getRegisteredSchema, isKnownStudioCollection, resolveCollectionStudioConfig, } from "../schema-registry.js";
|
|
4
4
|
import { inferJsonSchema, buildTemplate } from "../../schema-utils.js";
|
|
5
5
|
import { stripBodyOverlay } from "../utils.js";
|
|
6
6
|
import { json, resolveAdapter } from "./_helpers.js";
|
|
@@ -12,17 +12,19 @@ export async function GET(context) {
|
|
|
12
12
|
const collectionRaw = (context.url.searchParams.get("collection") ?? "")
|
|
13
13
|
.trim()
|
|
14
14
|
.toLowerCase();
|
|
15
|
-
if (!(await adapter
|
|
15
|
+
if (!(await isKnownStudioCollection(adapter, collectionRaw))) {
|
|
16
16
|
return json({ error: "Invalid collection" }, 400);
|
|
17
17
|
}
|
|
18
18
|
// 1. Check for explicit registered schema (from integration config)
|
|
19
19
|
const registered = getRegisteredSchema(collectionRaw);
|
|
20
20
|
if (registered) {
|
|
21
|
+
const metadata = await resolveCollectionStudioConfig(adapter, collectionRaw);
|
|
21
22
|
return json({
|
|
22
23
|
schema: registered.schema,
|
|
23
24
|
template: registered.template,
|
|
24
25
|
collection: collectionRaw,
|
|
25
26
|
source: "explicit",
|
|
27
|
+
metadata,
|
|
26
28
|
});
|
|
27
29
|
}
|
|
28
30
|
// 2. Check for dynamic schema (from collection metadata)
|
|
@@ -43,6 +45,11 @@ export async function GET(context) {
|
|
|
43
45
|
icon: metadata.icon,
|
|
44
46
|
creatable: metadata.creatable,
|
|
45
47
|
orderable: metadata.orderable,
|
|
48
|
+
deletable: metadata.deletable,
|
|
49
|
+
singletonId: metadata.singletonId,
|
|
50
|
+
order: metadata.order,
|
|
51
|
+
previewPath: metadata.previewPath,
|
|
52
|
+
publication: metadata.publication,
|
|
46
53
|
},
|
|
47
54
|
});
|
|
48
55
|
}
|
|
@@ -53,12 +60,14 @@ export async function GET(context) {
|
|
|
53
60
|
const firstEntry = stripBodyOverlay(entries[0]?.data ?? {});
|
|
54
61
|
const schema = inferJsonSchema(firstEntry);
|
|
55
62
|
const template = buildTemplate(schema);
|
|
63
|
+
const inferredMetadata = await resolveCollectionStudioConfig(adapter, collectionRaw);
|
|
56
64
|
return json({
|
|
57
65
|
schema,
|
|
58
66
|
template,
|
|
59
67
|
collection: collectionRaw,
|
|
60
68
|
source: "inferred",
|
|
61
69
|
inferredFrom: entries.length > 0 ? entries[0].id : null,
|
|
70
|
+
metadata: inferredMetadata,
|
|
62
71
|
});
|
|
63
72
|
}
|
|
64
73
|
//# sourceMappingURL=schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/runtime/routes/schema.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC;AAG/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/runtime/routes/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"studio-home.d.ts","sourceRoot":"","sources":["../../../src/runtime/routes/studio-home.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,QAAQ,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"studio-home.d.ts","sourceRoot":"","sources":["../../../src/runtime/routes/studio-home.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,QAAQ,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AA8CxC,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CA4FhE"}
|
|
@@ -2,7 +2,8 @@ export const prerender = false;
|
|
|
2
2
|
import { isEditorAuthenticated } from "../auth/session.js";
|
|
3
3
|
import { getRuntimeConfig } from "../config.js";
|
|
4
4
|
import { resolveAdapter } from "./_helpers.js";
|
|
5
|
-
import {
|
|
5
|
+
import { getStudioCollectionNames, resolveCollectionStudioConfig, } from "../schema-registry.js";
|
|
6
|
+
import { escapeHtml, htmlResponse, redirectResponse, renderStudioPage, serializeJsonForScript, } from "../views/studio-layout.js";
|
|
6
7
|
function humanizeCollection(name) {
|
|
7
8
|
return name
|
|
8
9
|
.replace(/[-_]+/g, " ")
|
|
@@ -28,6 +29,16 @@ function pickIcon(name) {
|
|
|
28
29
|
return "📅";
|
|
29
30
|
return "📁";
|
|
30
31
|
}
|
|
32
|
+
function configuredIcon(icon, name) {
|
|
33
|
+
const known = {
|
|
34
|
+
document: "📄",
|
|
35
|
+
image: "🖼️",
|
|
36
|
+
settings: "⚙️",
|
|
37
|
+
person: "👤",
|
|
38
|
+
collection: "📁",
|
|
39
|
+
};
|
|
40
|
+
return icon ? (known[icon] ?? icon) : pickIcon(name);
|
|
41
|
+
}
|
|
31
42
|
export async function GET(context) {
|
|
32
43
|
const runtime = getRuntimeConfig();
|
|
33
44
|
const loginRedirect = `${runtime.mountPath}?redirect=${encodeURIComponent(`${runtime.mountPath}/cms`)}`;
|
|
@@ -35,16 +46,24 @@ export async function GET(context) {
|
|
|
35
46
|
return redirectResponse(loginRedirect);
|
|
36
47
|
}
|
|
37
48
|
const adapter = await resolveAdapter();
|
|
38
|
-
const collections = await adapter
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
49
|
+
const collections = await getStudioCollectionNames(adapter);
|
|
50
|
+
const configuredCollections = await Promise.all(collections.map(async (name) => ({
|
|
51
|
+
name,
|
|
52
|
+
config: await resolveCollectionStudioConfig(adapter, name),
|
|
53
|
+
})));
|
|
54
|
+
configuredCollections.sort((a, b) => (a.config.order ?? 0) - (b.config.order ?? 0)
|
|
55
|
+
|| (a.config.label ?? a.name).localeCompare(b.config.label ?? b.name));
|
|
56
|
+
const cards = configuredCollections
|
|
57
|
+
.map(({ name, config }) => {
|
|
58
|
+
const label = config.label || humanizeCollection(name);
|
|
59
|
+
const icon = configuredIcon(config.icon, name);
|
|
60
|
+
const href = config.singletonId
|
|
61
|
+
? `${runtime.mountPath}/cms/${encodeURIComponent(name)}/${encodeURIComponent(config.singletonId)}`
|
|
62
|
+
: `${runtime.mountPath}/cms/${encodeURIComponent(name)}`;
|
|
44
63
|
return `<a href="${escapeHtml(href)}" class="studio-card-interactive" data-collection="${escapeHtml(name)}">
|
|
45
|
-
<div style="font-size:1.5rem;margin-bottom:0.75rem;">${icon}</div>
|
|
46
|
-
<
|
|
47
|
-
<p style="font-size:0.7rem;margin:0 0 0.5rem;color:var(--studio-text-dim);
|
|
64
|
+
<div style="font-size:1.5rem;margin-bottom:0.75rem;">${escapeHtml(icon)}</div>
|
|
65
|
+
<h2 style="font-size:0.875rem;font-weight:600;margin:0 0 0.25rem;color:var(--studio-text);">${escapeHtml(label)}</h2>
|
|
66
|
+
<p style="font-size:0.7rem;margin:0 0 0.5rem;color:var(--studio-text-dim);">${escapeHtml(config.description || name)}</p>
|
|
48
67
|
<span class="studio-count-label" data-collection="${escapeHtml(name)}" style="font-size:0.7rem;color:var(--studio-accent);font-weight:500;">…</span>
|
|
49
68
|
</a>`;
|
|
50
69
|
})
|
|
@@ -52,18 +71,18 @@ export async function GET(context) {
|
|
|
52
71
|
// Adapter-agnostic copy: where entries live depends on the configured
|
|
53
72
|
// storage (.caret/data for the filesystem adapter, src/content for markdown,
|
|
54
73
|
// KV for Cloudflare) — naming one path here misleads every other setup.
|
|
55
|
-
const emptyState = `<div class="studio-card" style="padding:2rem;text-align:center;color:var(--studio-text-dim);font-size:0.85rem;"
|
|
56
|
-
No collections yet. Create one from Studio, edit any <code style="font-family:var(--studio-font-mono);">data-caret</code> element on your site, or run <code style="font-family:var(--studio-font-mono);">npx @caretcms/caretize</code> to make existing pages editable.
|
|
57
|
-
</div>`;
|
|
74
|
+
const emptyState = `<div class="studio-card" style="padding:2rem;text-align:center;color:var(--studio-text-dim);font-size:0.85rem;">${escapeHtml(runtime.messages["home.empty"])}</div>`;
|
|
58
75
|
const body = `<div class="studio-fade-in studio-home">
|
|
59
|
-
<
|
|
76
|
+
<h1 class="studio-sr-only">${escapeHtml(runtime.messages["home.title"])}</h1>
|
|
77
|
+
<p class="studio-page-intro">${escapeHtml(runtime.messages["home.intro"])}</p>
|
|
60
78
|
|
|
61
79
|
${collections.length === 0
|
|
62
80
|
? emptyState
|
|
63
81
|
: `<div class="studio-home-grid">${cards}</div>`}
|
|
64
82
|
</div>`;
|
|
65
83
|
const inlineScript = `(function(){
|
|
66
|
-
var apiBase = ${
|
|
84
|
+
var apiBase = ${serializeJsonForScript(runtime.apiBasePath)};
|
|
85
|
+
var messages = ${serializeJsonForScript(runtime.messages)};
|
|
67
86
|
var labels = document.querySelectorAll('.studio-count-label');
|
|
68
87
|
labels.forEach(function (el) {
|
|
69
88
|
var collection = el.getAttribute('data-collection');
|
|
@@ -71,7 +90,7 @@ export async function GET(context) {
|
|
|
71
90
|
fetch(apiBase + '/entries?collection=' + encodeURIComponent(collection))
|
|
72
91
|
.then(function (res) {
|
|
73
92
|
if (res.status === 401) {
|
|
74
|
-
window.location.href = ${
|
|
93
|
+
window.location.href = ${serializeJsonForScript(runtime.mountPath)} + '?redirect=' + encodeURIComponent(window.location.pathname);
|
|
75
94
|
return null;
|
|
76
95
|
}
|
|
77
96
|
if (!res.ok) throw new Error('failed');
|
|
@@ -80,18 +99,20 @@ export async function GET(context) {
|
|
|
80
99
|
.then(function (data) {
|
|
81
100
|
if (!data) return;
|
|
82
101
|
var entries = Array.isArray(data.entries) ? data.entries : [];
|
|
83
|
-
var
|
|
84
|
-
|
|
102
|
+
var pagination = data && typeof data.pagination === 'object' ? data.pagination : null;
|
|
103
|
+
var total = pagination && pagination.total;
|
|
104
|
+
var n = Number.isSafeInteger(total) && total >= 0 ? total : entries.length;
|
|
105
|
+
el.textContent = n + ' ' + (n === 1 ? messages['count.entry'] : messages['count.entries']);
|
|
85
106
|
})
|
|
86
107
|
.catch(function () {
|
|
87
|
-
el.textContent = 'error';
|
|
108
|
+
el.textContent = messages['common.error'];
|
|
88
109
|
el.style.color = 'var(--studio-red)';
|
|
89
110
|
});
|
|
90
111
|
});
|
|
91
112
|
})();`;
|
|
92
113
|
return htmlResponse(renderStudioPage({
|
|
93
114
|
runtime,
|
|
94
|
-
title: "
|
|
115
|
+
title: runtime.messages["home.title"],
|
|
95
116
|
breadcrumb: [],
|
|
96
117
|
body,
|
|
97
118
|
inlineScript,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"studio-home.js","sourceRoot":"","sources":["../../../src/runtime/routes/studio-home.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC;AAG/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACL,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"studio-home.js","sourceRoot":"","sources":["../../../src/runtime/routes/studio-home.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/runtime/routes/upload.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/runtime/routes/upload.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,SAAS,QAAQ,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAYxC,wBAAsB,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAiDjE"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { canPerform } from "../authorization.js";
|
|
1
2
|
export const prerender = false;
|
|
2
3
|
import { isEditorAuthenticated } from "../auth/session.js";
|
|
3
4
|
import { UploadError } from "../storage/image-validation.js";
|
|
@@ -9,6 +10,8 @@ export async function POST(context) {
|
|
|
9
10
|
if (!isEditorAuthenticated(context)) {
|
|
10
11
|
return json({ error: "Unauthorized" }, 401);
|
|
11
12
|
}
|
|
13
|
+
if (!(await canPerform("upload")))
|
|
14
|
+
return json({ error: "Permission denied" }, 403);
|
|
12
15
|
const contentType = context.request.headers.get("content-type") ?? "";
|
|
13
16
|
if (!contentType.includes("multipart/form-data")) {
|
|
14
17
|
return json({ error: "Expected multipart/form-data" }, 400);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../src/runtime/routes/upload.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC;AAG/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EACL,IAAI,EACJ,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAEvB,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAmB;IAC5C,MAAM,WAAW,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC;IAEpC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IACtE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE,EAAE,GAAG,CAAC,CAAC;IAC9D,CAAC;IAED,0EAA0E;IAC1E,2EAA2E;IAC3E,wEAAwE;IACxE,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;IAC9E,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACpE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,GAAG,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,CAAC,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CACjC,IAAI,EACJ,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CACtC,CAAC;QACF,OAAO,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,0EAA0E;QAC1E,sEAAsE;QACtE,6CAA6C;QAC7C,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,GAAG,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../src/runtime/routes/upload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC;AAG/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EACL,IAAI,EACJ,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAEvB,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAmB;IAC5C,MAAM,WAAW,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC;IAEpC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,GAAG,CAAC,CAAC;IAEpF,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IACtE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE,EAAE,GAAG,CAAC,CAAC;IAC9D,CAAC;IAED,0EAA0E;IAC1E,2EAA2E;IAC3E,wEAAwE;IACxE,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;IAC9E,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACpE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,GAAG,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,CAAC,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CACjC,IAAI,EACJ,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CACtC,CAAC;QACF,OAAO,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,0EAA0E;QAC1E,sEAAsE;QACtE,6CAA6C;QAC7C,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,GAAG,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC"}
|
|
@@ -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,CAgBjC"}
|
|
@@ -6,11 +6,57 @@
|
|
|
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
|
+
previewPath: dynamic?.previewPath,
|
|
58
|
+
publication: dynamic?.publication,
|
|
59
|
+
...registered,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
16
62
|
//# 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,WAAW,EAAE,OAAO,EAAE,WAAW;QACjC,WAAW,EAAE,OAAO,EAAE,WAAW;QACjC,GAAG,UAAU;KACd,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { EntryCommit, EntryCommitResult, HistoryEntry, StorageAdapter } from "../../types.js";
|
|
2
|
+
export declare function historyForEditor(entry: HistoryEntry): HistoryEntry;
|
|
3
|
+
/**
|
|
4
|
+
* Use a distributed adapter's atomic primitive when available. The fallback is
|
|
5
|
+
* intended for adapters protected by the mutation engine's in-process locks.
|
|
6
|
+
*/
|
|
7
|
+
export declare function commitEntryChanges(adapter: StorageAdapter, changes: readonly EntryCommit[]): Promise<EntryCommitResult>;
|
|
8
|
+
//# sourceMappingURL=entry-commit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry-commit.d.ts","sourceRoot":"","sources":["../../../src/runtime/storage/entry-commit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACf,MAAM,gBAAgB,CAAC;AAGxB,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY,CAKlE;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,SAAS,WAAW,EAAE,GAC9B,OAAO,CAAC,iBAAiB,CAAC,CAgC5B"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { getRequestContext } from "../request-context.js";
|
|
2
|
+
export function historyForEditor(entry) {
|
|
3
|
+
const context = getRequestContext();
|
|
4
|
+
const editor = context?.identity ?? (context?.editorId ? { id: context.editorId } : null);
|
|
5
|
+
return { ...entry, ...(editor ? { editor } : {}) };
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Use a distributed adapter's atomic primitive when available. The fallback is
|
|
9
|
+
* intended for adapters protected by the mutation engine's in-process locks.
|
|
10
|
+
*/
|
|
11
|
+
export async function commitEntryChanges(adapter, changes) {
|
|
12
|
+
if (adapter.commitEntries)
|
|
13
|
+
return adapter.commitEntries(changes);
|
|
14
|
+
for (const change of changes) {
|
|
15
|
+
const [currentRevision, current] = await Promise.all([
|
|
16
|
+
adapter.getRevision(change.collection, change.id),
|
|
17
|
+
adapter.getEntry(change.collection, change.id),
|
|
18
|
+
]);
|
|
19
|
+
if (currentRevision !== change.expectedRevision || Boolean(current) !== change.expectedExists) {
|
|
20
|
+
return {
|
|
21
|
+
ok: false,
|
|
22
|
+
conflict: {
|
|
23
|
+
collection: change.collection,
|
|
24
|
+
id: change.id,
|
|
25
|
+
currentRevision,
|
|
26
|
+
exists: Boolean(current),
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const revisions = [];
|
|
32
|
+
for (const change of changes) {
|
|
33
|
+
if (change.data === null)
|
|
34
|
+
await adapter.deleteEntry(change.collection, change.id);
|
|
35
|
+
else
|
|
36
|
+
await adapter.writeEntry(change.collection, change.id, change.data);
|
|
37
|
+
const revision = await adapter.bumpRevision(change.collection, change.id);
|
|
38
|
+
if (change.history) {
|
|
39
|
+
await adapter.appendHistory(change.collection, change.id, change.history);
|
|
40
|
+
}
|
|
41
|
+
revisions.push({ collection: change.collection, id: change.id, revision });
|
|
42
|
+
}
|
|
43
|
+
return { ok: true, revisions };
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=entry-commit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry-commit.js","sourceRoot":"","sources":["../../../src/runtime/storage/entry-commit.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,UAAU,gBAAgB,CAAC,KAAmB;IAClD,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,MAAM,MAAM,GACV,OAAO,EAAE,QAAQ,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7E,OAAO,EAAE,GAAG,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACrD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAuB,EACvB,OAA+B;IAE/B,IAAI,OAAO,CAAC,aAAa;QAAE,OAAO,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAEjE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,CAAC,eAAe,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACnD,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC;YACjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC;SAC/C,CAAC,CAAC;QACH,IAAI,eAAe,KAAK,MAAM,CAAC,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,cAAc,EAAE,CAAC;YAC9F,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,QAAQ,EAAE;oBACR,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,EAAE,EAAE,MAAM,CAAC,EAAE;oBACb,eAAe;oBACf,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC;iBACzB;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAgE,EAAE,CAAC;IAClF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI;YAAE,MAAM,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;;YAC7E,MAAM,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACzE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1E,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5E,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AACjC,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { DeploymentTarget, RebuildReceipt } from "../../types.js";
|
|
1
2
|
import type { CollectionMetadata, EntryData, HistoryEntry, StorageAdapter } from "../../types.js";
|
|
2
3
|
/**
|
|
3
4
|
* Reference StorageAdapter that stores each entry as a JSON file under
|
|
@@ -13,6 +14,10 @@ export declare class FilesystemAdapter implements StorageAdapter {
|
|
|
13
14
|
metaRoot?: string;
|
|
14
15
|
draftsRoot?: string;
|
|
15
16
|
});
|
|
17
|
+
getRebuildReceipt(): Promise<RebuildReceipt | null>;
|
|
18
|
+
setRebuildReceipt(receipt: RebuildReceipt | null): Promise<void>;
|
|
19
|
+
getDeploymentTarget(): Promise<DeploymentTarget | null>;
|
|
20
|
+
setDeploymentTarget(target: DeploymentTarget | null): Promise<void>;
|
|
16
21
|
private collectionDir;
|
|
17
22
|
/** The data root — what git stages for commit-on-publish (a no-op if it's
|
|
18
23
|
* gitignored, e.g. the default `.caret/data`). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filesystem-adapter.d.ts","sourceRoot":"","sources":["../../../src/runtime/storage/filesystem-adapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"filesystem-adapter.d.ts","sourceRoot":"","sources":["../../../src/runtime/storage/filesystem-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAWlG;;;;GAIG;AACH,qBAAa,iBAAkB,YAAW,cAAc;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IASnF,iBAAiB,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IACnD,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAChE,mBAAmB,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IACvD,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAEnE,OAAO,CAAC,aAAa;IAIrB;uDACmD;IACnD,eAAe,IAAI,MAAM;IAIzB;uEACmE;IAC7D,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAW5D,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IASxC,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQvD,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAsBnE,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAcnD,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAMrD,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAUxF,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAchE,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI5D,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAM7D,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAInE,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3E,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAM7D,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzD,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAI7E,sBAAsB,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;CAGxD"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ContentReadError } from "../content-errors.js";
|
|
1
2
|
import { mkdir, readFile, readdir, rm, unlink } from "node:fs/promises";
|
|
2
3
|
import { dirname, join } from "node:path";
|
|
3
4
|
import { atomicWrite } from "./atomic-write.js";
|
|
@@ -26,6 +27,10 @@ export class FilesystemAdapter {
|
|
|
26
27
|
// Per-editor draft overlays live as sibling JSON stores under `<.caret>/drafts/`.
|
|
27
28
|
this.draftsRoot = options?.draftsRoot ?? join(dirname(this.dataRoot), "drafts");
|
|
28
29
|
}
|
|
30
|
+
getRebuildReceipt() { return this.meta.getRebuildReceipt(); }
|
|
31
|
+
setRebuildReceipt(receipt) { return this.meta.setRebuildReceipt(receipt); }
|
|
32
|
+
getDeploymentTarget() { return this.meta.getDeploymentTarget(); }
|
|
33
|
+
setDeploymentTarget(target) { return this.meta.setDeploymentTarget(target); }
|
|
29
34
|
collectionDir(collection) {
|
|
30
35
|
return join(this.dataRoot, collection);
|
|
31
36
|
}
|
|
@@ -75,11 +80,15 @@ export class FilesystemAdapter {
|
|
|
75
80
|
const parsed = JSON.parse(raw);
|
|
76
81
|
const data = asObjectRecord(parsed);
|
|
77
82
|
if (!data)
|
|
78
|
-
|
|
83
|
+
throw new ContentReadError("invalid_content");
|
|
79
84
|
return { id, data };
|
|
80
85
|
}
|
|
81
|
-
catch {
|
|
82
|
-
|
|
86
|
+
catch (error) {
|
|
87
|
+
if (error.code === "ENOENT")
|
|
88
|
+
return null;
|
|
89
|
+
if (error instanceof ContentReadError)
|
|
90
|
+
throw error;
|
|
91
|
+
throw new ContentReadError(error instanceof SyntaxError ? "invalid_content" : "storage_error");
|
|
83
92
|
}
|
|
84
93
|
}
|
|
85
94
|
async listEntryIds(collection) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filesystem-adapter.js","sourceRoot":"","sources":["../../../src/runtime/storage/filesystem-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAExF,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7E,OAAO,KAAgC,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;IACX,QAAQ,CAAS;IACjB,IAAI,CAAmB;IACvB,UAAU,CAAS;IAEpC,YAAY,OAAuE;QACjF,uBAAuB,EAAE,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC3E,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;QACvE,IAAI,CAAC,IAAI,GAAG,IAAI,gBAAgB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC/C,kFAAkF;QAClF,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;IAClF,CAAC;
|
|
1
|
+
{"version":3,"file":"filesystem-adapter.js","sourceRoot":"","sources":["../../../src/runtime/storage/filesystem-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Zero-dependency YAML-frontmatter codec for the markdown StorageAdapter.
|
|
3
|
-
*
|
|
4
|
-
* Core ships no runtime dependencies, so this is a hand-rolled parser/serializer
|
|
5
|
-
* for the SUBSET of YAML that appears in Astro content-collection frontmatter:
|
|
6
|
-
* block mappings, block sequences (of scalars or mappings), and scalars
|
|
7
|
-
* (quoted/plain strings, integers, floats, booleans, null), plus empty/scalar
|
|
8
|
-
* flow collections (`[]`, `{}`, `[a, b]`, `{a: b}`).
|
|
9
|
-
*
|
|
10
|
-
* Design rules:
|
|
11
|
-
* - **Fail loud, never lossy.** `parseFrontmatter` returns `{ ok: false }` for
|
|
12
|
-
* any construct it cannot faithfully represent (anchors, aliases, tags, block
|
|
13
|
-
* scalars `|`/`>`, tab indentation). The adapter turns that into a thrown
|
|
14
|
-
* error so a later whole-entry `writeEntry` can never silently drop the
|
|
15
|
-
* frontmatter it failed to read.
|
|
16
|
-
* - **Round-trip safe by construction.** A value is emitted as a plain scalar
|
|
17
|
-
* only when re-parsing that exact text yields the identical string; anything
|
|
18
|
-
* else is double-quoted with JSON escapes (valid YAML double-quote escapes),
|
|
19
|
-
* so `parse(serialize(x))` deep-equals `x` for every supported value.
|
|
20
|
-
* - **Comments are not preserved** on write (preserving them needs a full CST).
|
|
21
|
-
* Documented and accepted for v1; the markdown BODY, by contrast, is never
|
|
22
|
-
* touched — the adapter splices it back verbatim using `bodyStart`.
|
|
23
|
-
*/
|
|
24
1
|
export type ParseResult = {
|
|
25
2
|
ok: true;
|
|
26
3
|
data: Record<string, unknown>;
|
|
@@ -44,4 +21,9 @@ export declare function parseFrontmatter(source: string): ParseResult;
|
|
|
44
21
|
* the write is rejected before touching the file.
|
|
45
22
|
*/
|
|
46
23
|
export declare function serializeFrontmatter(data: Record<string, unknown>): SerializeResult;
|
|
24
|
+
/** Replace changed top-level fields; preserve untouched field blocks and body bytes.
|
|
25
|
+
* Changed fields are serialized canonically, including their nested contents.
|
|
26
|
+
* This is intentionally not a full YAML concrete-syntax-tree editor.
|
|
27
|
+
*/
|
|
28
|
+
export declare function rewriteFrontmatter(source: string, data: Record<string, unknown>): SerializeResult;
|
|
47
29
|
//# sourceMappingURL=frontmatter-codec.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontmatter-codec.d.ts","sourceRoot":"","sources":["../../../src/runtime/storage/frontmatter-codec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"frontmatter-codec.d.ts","sourceRoot":"","sources":["../../../src/runtime/storage/frontmatter-codec.ts"],"names":[],"mappings":"AA4BA,MAAM,MAAM,WAAW,GACnB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC9D;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAElC,MAAM,MAAM,eAAe,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AA4b5F,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAW5D;AA2ED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe,CAWnF;AAGD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe,CAkCjG"}
|