@caretcms/core 0.3.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 +116 -11
- package/dist/index.d.ts +15 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +78 -5
- package/dist/index.js.map +1 -1
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +8 -0
- 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 +3 -1
- 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/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/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 +13 -2
- package/dist/runtime/i18n.d.ts.map +1 -1
- package/dist/runtime/i18n.js +26 -4
- package/dist/runtime/i18n.js.map +1 -1
- 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 +21 -2
- package/dist/runtime/middleware.js.map +1 -1
- package/dist/runtime/mutations/contracts.d.ts +9 -0
- package/dist/runtime/mutations/contracts.d.ts.map +1 -1
- package/dist/runtime/mutations/contracts.js +45 -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 +115 -63
- package/dist/runtime/mutations/engine.js.map +1 -1
- package/dist/runtime/providers.d.ts +3 -1
- package/dist/runtime/providers.d.ts.map +1 -1
- package/dist/runtime/providers.js +12 -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 +104 -67
- 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 +3 -1
- package/dist/runtime/request-context.d.ts.map +1 -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 +24 -12
- package/dist/runtime/routes/admin-entry.js.map +1 -1
- package/dist/runtime/routes/auth-session.d.ts.map +1 -1
- package/dist/runtime/routes/auth-session.js +6 -0
- 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 +164 -40
- 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 +74 -39
- 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 +37 -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 +4 -0
- 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 +3 -1
- 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.map +1 -1
- package/dist/runtime/schema-registry.js +2 -0
- 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/utils.d.ts.map +1 -1
- package/dist/runtime/utils.js +3 -4
- package/dist/runtime/utils.js.map +1 -1
- package/dist/types.d.ts +123 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +12 -3
- package/static/cms/admin-entry.css +9 -0
- package/static/cms/admin-entry.js +251 -687
- 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 +43 -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 +43 -15
- 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 +208 -10
- 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/toolbar.css +5 -0
- package/static/cms/editor/toolbar.js +91 -101
- package/static/cms/editor.js +2 -1
- 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
|
@@ -4,6 +4,7 @@ import { parseCollectionName, parseEntryId } from "../mutations/contracts.js";
|
|
|
4
4
|
import { stripBodyOverlay } from "../utils.js";
|
|
5
5
|
import { getRegisteredSchema } from "../schema-registry.js";
|
|
6
6
|
import { validateJsonSchema } from "../../schema-utils.js";
|
|
7
|
+
import { contentReadFailure } from "../content-errors.js";
|
|
7
8
|
import { json, resolveAdapter } from "./_helpers.js";
|
|
8
9
|
function withValidation(collection, entry, revision) {
|
|
9
10
|
const data = stripBodyOverlay(entry.data);
|
|
@@ -58,50 +59,84 @@ export async function GET(context) {
|
|
|
58
59
|
error: "Invalid query. Provide a valid collection name matching a known collection.",
|
|
59
60
|
}, 400);
|
|
60
61
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
62
|
+
try {
|
|
63
|
+
const adapter = await resolveAdapter();
|
|
64
|
+
const { collection, id: singleId, page, pageSize, q } = query;
|
|
65
|
+
if (singleId) {
|
|
66
|
+
const entry = await adapter.getEntry(collection, singleId);
|
|
67
|
+
const revision = entry ? await adapter.getRevision(collection, singleId) : 0;
|
|
68
|
+
const entries = entry
|
|
69
|
+
? [withValidation(collection, entry, revision)]
|
|
70
|
+
: [];
|
|
71
|
+
return json({
|
|
72
|
+
entries,
|
|
73
|
+
pagination: {
|
|
74
|
+
page: 1,
|
|
75
|
+
pageSize: 1,
|
|
76
|
+
total: entries.length,
|
|
77
|
+
totalPages: entries.length > 0 ? 1 : 0,
|
|
78
|
+
hasPrev: false,
|
|
79
|
+
hasNext: false,
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
const allIds = await adapter.listEntryIds(collection);
|
|
84
|
+
const cache = new Map();
|
|
85
|
+
async function readEntry(id) {
|
|
86
|
+
if (cache.has(id))
|
|
87
|
+
return cache.get(id);
|
|
88
|
+
let result;
|
|
89
|
+
try {
|
|
90
|
+
const entry = await adapter.getEntry(collection, id);
|
|
91
|
+
result = entry ? withValidation(collection, entry, await adapter.getRevision(collection, id)) : null;
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
result = { id, data: {}, revision: 0, readError: contentReadFailure(error) };
|
|
95
|
+
}
|
|
96
|
+
cache.set(id, result);
|
|
97
|
+
return result;
|
|
98
|
+
}
|
|
99
|
+
const titleKeys = ["name", "title", "question", "company_name", "headline", "label"];
|
|
100
|
+
const filteredIds = [];
|
|
101
|
+
// Bounded batches avoid unbounded simultaneous reads on remote adapters.
|
|
102
|
+
if (q) {
|
|
103
|
+
for (let offset = 0; offset < allIds.length; offset += 20) {
|
|
104
|
+
const batch = await Promise.all(allIds.slice(offset, offset + 20).map(readEntry));
|
|
105
|
+
for (const entry of batch) {
|
|
106
|
+
if (!entry)
|
|
107
|
+
continue;
|
|
108
|
+
const title = titleKeys.map(key => entry.data[key]).find(value => typeof value === "string" && value);
|
|
109
|
+
if (entry.id.toLowerCase().includes(q) || (typeof title === "string" && title.toLowerCase().includes(q)))
|
|
110
|
+
filteredIds.push(entry.id);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
else
|
|
115
|
+
filteredIds.push(...allIds);
|
|
116
|
+
const total = filteredIds.length;
|
|
117
|
+
const totalPages = total > 0 ? Math.ceil(total / pageSize) : 0;
|
|
118
|
+
const effectivePage = totalPages === 0 ? 1 : Math.min(page, totalPages);
|
|
119
|
+
const start = (effectivePage - 1) * pageSize;
|
|
120
|
+
const pageIds = filteredIds.slice(start, start + pageSize);
|
|
121
|
+
const entries = (await Promise.all(pageIds.map(readEntry))).filter((entry) => entry !== null);
|
|
69
122
|
return json({
|
|
70
123
|
entries,
|
|
71
124
|
pagination: {
|
|
72
|
-
page:
|
|
73
|
-
pageSize
|
|
74
|
-
total
|
|
75
|
-
totalPages
|
|
76
|
-
hasPrev:
|
|
77
|
-
hasNext:
|
|
125
|
+
page: effectivePage,
|
|
126
|
+
pageSize,
|
|
127
|
+
total,
|
|
128
|
+
totalPages,
|
|
129
|
+
hasPrev: effectivePage > 1,
|
|
130
|
+
hasNext: effectivePage < totalPages,
|
|
131
|
+
q,
|
|
78
132
|
},
|
|
133
|
+
collection,
|
|
134
|
+
source: "adapter",
|
|
79
135
|
});
|
|
80
136
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
const effectivePage = totalPages === 0 ? 1 : Math.min(page, totalPages);
|
|
86
|
-
const start = (effectivePage - 1) * pageSize;
|
|
87
|
-
const pageIds = filteredIds.slice(start, start + pageSize);
|
|
88
|
-
const rawEntries = await Promise.all(pageIds.map((entryId) => adapter.getEntry(collection, entryId)));
|
|
89
|
-
const entries = await Promise.all(rawEntries
|
|
90
|
-
.filter((entry) => Boolean(entry))
|
|
91
|
-
.map(async (entry) => withValidation(collection, entry, await adapter.getRevision(collection, entry.id))));
|
|
92
|
-
return json({
|
|
93
|
-
entries,
|
|
94
|
-
pagination: {
|
|
95
|
-
page: effectivePage,
|
|
96
|
-
pageSize,
|
|
97
|
-
total,
|
|
98
|
-
totalPages,
|
|
99
|
-
hasPrev: effectivePage > 1,
|
|
100
|
-
hasNext: effectivePage < totalPages,
|
|
101
|
-
q,
|
|
102
|
-
},
|
|
103
|
-
collection,
|
|
104
|
-
source: "adapter",
|
|
105
|
-
});
|
|
137
|
+
catch (error) {
|
|
138
|
+
const failure = contentReadFailure(error);
|
|
139
|
+
return json(failure, failure.code === "storage_error" ? 503 : 422);
|
|
140
|
+
}
|
|
106
141
|
}
|
|
107
142
|
//# sourceMappingURL=entries.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entries.js","sourceRoot":"","sources":["../../../src/runtime/routes/entries.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC;AAG/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAkC,MAAM,uBAAuB,CAAC;AAC3F,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"entries.js","sourceRoot":"","sources":["../../../src/runtime/routes/entries.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC;AAG/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAkC,MAAM,uBAAuB,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAUrD,SAAS,cAAc,CACrB,UAAkB,EAClB,KAAoD,EACpD,QAAgB;IAEhB,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,mBAAmB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IACvD,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxE,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,IAAI;QACJ,QAAQ;QACR,GAAG,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7D,CAAC;AACJ,CAAC;AAoBD,SAAS,aAAa,CAAC,KAAoB,EAAE,QAAgB;IAC3D,IAAI,CAAC,KAAK;QAAE,OAAO,QAAQ,CAAC;IAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC7D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,OAAmB;IAC3C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,0EAA0E;IAC1E,yEAAyE;IACzE,6EAA6E;IAC7E,wEAAwE;IACxE,MAAM,aAAa,GAAG,mBAAmB,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;IAC9E,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAEhC,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,EAAE,GAAG,UAAU,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7F,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAEnE,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IACpF,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAEtD,OAAO;QACL,UAAU,EAAE,aAAa;QACzB,EAAE,EAAE,EAAE,IAAI,SAAS;QACnB,IAAI;QACJ,QAAQ;QACR,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;KACpD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAmB;IAC3C,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,KAAK,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CACT;YACE,KAAK,EACH,6EAA6E;SAChF,EACD,GAAG,CACJ,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,cAAc,EAAE,CAAC;QACvC,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC;QAE9D,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7E,MAAM,OAAO,GAAuB,KAAK;gBACvC,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;gBAC/C,CAAC,CAAC,EAAE,CAAC;YAEP,OAAO,IAAI,CAAC;gBACV,OAAO;gBACP,UAAU,EAAE;oBACV,IAAI,EAAE,CAAC;oBACP,QAAQ,EAAE,CAAC;oBACX,KAAK,EAAE,OAAO,CAAC,MAAM;oBACrB,UAAU,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACtC,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,KAAK;iBACc;aAC/B,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAmC,CAAC;QACzD,KAAK,UAAU,SAAS,CAAC,EAAU;YACjC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,OAAO,KAAK,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;YACzC,IAAI,MAA+B,CAAC;YACpC,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;gBACrD,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACvG,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/E,CAAC;YACD,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACtB,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QACrF,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,yEAAyE;QACzE,IAAI,CAAC,EAAE,CAAC;YACN,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC;gBAC1D,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;gBAClF,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;oBAC1B,IAAI,CAAC,KAAK;wBAAE,SAAS;oBACrB,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,CAAC;oBACtG,IAAI,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;wBAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACvI,CAAC;YACH,CAAC;QACH,CAAC;;YAAM,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC;QACjC,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,MAAM,aAAa,GAAG,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACxE,MAAM,KAAK,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;QAC7C,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAA6B,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;QAEzH,OAAO,IAAI,CAAC;YACV,OAAO;YACP,UAAU,EAAE;gBACV,IAAI,EAAE,aAAa;gBACnB,QAAQ;gBACR,KAAK;gBACL,UAAU;gBACV,OAAO,EAAE,aAAa,GAAG,CAAC;gBAC1B,OAAO,EAAE,aAAa,GAAG,UAAU;gBACnC,CAAC;aAC2B;YAC9B,UAAU;YACV,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACrE,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../../src/runtime/routes/history.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../../src/runtime/routes/history.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,SAAS,QAAQ,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAOxC,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAiBhE;AAED,wBAAsB,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CA0FjE"}
|
|
@@ -1,13 +1,17 @@
|
|
|
1
|
+
import { canPerform } from "../authorization.js";
|
|
2
|
+
import { getRequestContext } from "../request-context.js";
|
|
3
|
+
import { getRuntimeServices } from "../providers.js";
|
|
1
4
|
export const prerender = false;
|
|
2
5
|
import { getEditorIdentity, isEditorAuthenticated } from "../auth/session.js";
|
|
3
6
|
import { parseEntryId } from "../mutations/contracts.js";
|
|
4
7
|
import { withEntryLock } from "../mutations/engine.js";
|
|
8
|
+
import { commitEntryChanges } from "../storage/entry-commit.js";
|
|
5
9
|
import { json, resolveAdapter, enforceCsrfHeader, readJsonBody } from "./_helpers.js";
|
|
6
10
|
export async function GET(context) {
|
|
7
11
|
if (!isEditorAuthenticated(context)) {
|
|
8
12
|
return json({ error: "Unauthorized" }, 401);
|
|
9
13
|
}
|
|
10
|
-
const adapter = await resolveAdapter();
|
|
14
|
+
const adapter = getRequestContext()?.authorize ? (await getRuntimeServices()).adapter : await resolveAdapter();
|
|
11
15
|
const collectionRaw = (context.url.searchParams.get("collection") ?? "")
|
|
12
16
|
.trim()
|
|
13
17
|
.toLowerCase();
|
|
@@ -33,7 +37,7 @@ export async function POST(context) {
|
|
|
33
37
|
: null;
|
|
34
38
|
if (!body)
|
|
35
39
|
return json({ error: "Invalid payload" }, 400);
|
|
36
|
-
const adapter = await resolveAdapter();
|
|
40
|
+
const adapter = getRequestContext()?.authorize ? (await getRuntimeServices()).adapter : await resolveAdapter();
|
|
37
41
|
const collectionRaw = typeof body.collection === "string"
|
|
38
42
|
? body.collection.trim().toLowerCase()
|
|
39
43
|
: "";
|
|
@@ -42,6 +46,9 @@ export async function POST(context) {
|
|
|
42
46
|
if (!(await adapter.isKnownCollection(collectionRaw)) || !id || !Number.isFinite(ts)) {
|
|
43
47
|
return json({ error: "Invalid restore payload" }, 400);
|
|
44
48
|
}
|
|
49
|
+
if (!(await canPerform("edit", collectionRaw, id)) || !(await canPerform("publish", collectionRaw, id))) {
|
|
50
|
+
return json({ error: "Permission denied" }, 403);
|
|
51
|
+
}
|
|
45
52
|
try {
|
|
46
53
|
const editor = getEditorIdentity(context);
|
|
47
54
|
const entries = await adapter.getHistory(collectionRaw, id);
|
|
@@ -55,37 +62,46 @@ export async function POST(context) {
|
|
|
55
62
|
// Hold the engine's per-entry lock so the restore can't interleave with a
|
|
56
63
|
// concurrent save_field/put_entry and tear the entry/revision pair. Write
|
|
57
64
|
// before appending history so a failed write doesn't record a phantom event.
|
|
58
|
-
const
|
|
65
|
+
const restored = await withEntryLock(collectionRaw, id, async () => {
|
|
66
|
+
const beforeRevision = await adapter.getRevision(collectionRaw, id);
|
|
67
|
+
const before = await adapter.getEntry(collectionRaw, id);
|
|
59
68
|
// A publish snapshot that spliced body blocks carries the full
|
|
60
|
-
// pre-publish source file — restore
|
|
61
|
-
//
|
|
62
|
-
//
|
|
69
|
+
// pre-publish source file — restore that exact file (prose + frontmatter
|
|
70
|
+
// formatting). Its frontmatter already represents snapshotData, so a
|
|
71
|
+
// follow-up writeEntry would only reserialize it and destroy byte parity.
|
|
63
72
|
if (typeof snapshot.bodySource === "string" && adapter.writeBodySource) {
|
|
64
|
-
const
|
|
73
|
+
const currentSource = await adapter.readBodySource?.(collectionRaw, id);
|
|
65
74
|
await adapter.writeBodySource(collectionRaw, id, snapshot.bodySource);
|
|
66
|
-
await adapter.writeEntry(collectionRaw, id, snapshotData);
|
|
67
75
|
const next = await adapter.bumpRevision(collectionRaw, id);
|
|
68
76
|
// Undo-of-the-undo: record what the file looked like before this restore.
|
|
69
77
|
await adapter.appendHistory(collectionRaw, id, {
|
|
70
78
|
ts: Date.now(),
|
|
71
79
|
action: "restore",
|
|
72
|
-
data: snapshotData,
|
|
73
|
-
...(typeof
|
|
80
|
+
data: before?.data ?? snapshotData,
|
|
81
|
+
...(typeof currentSource === "string" ? { bodySource: currentSource } : {}),
|
|
74
82
|
...(editor ? { editor } : {}),
|
|
75
83
|
});
|
|
76
|
-
return next;
|
|
84
|
+
return { revision: next, data: snapshotData };
|
|
77
85
|
}
|
|
78
|
-
await adapter
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
86
|
+
const committed = await commitEntryChanges(adapter, [{
|
|
87
|
+
collection: collectionRaw,
|
|
88
|
+
id,
|
|
89
|
+
expectedRevision: beforeRevision,
|
|
90
|
+
expectedExists: Boolean(before),
|
|
91
|
+
data: snapshotData,
|
|
92
|
+
history: {
|
|
93
|
+
ts: Date.now(),
|
|
94
|
+
action: "restore",
|
|
95
|
+
data: before?.data ?? snapshotData,
|
|
96
|
+
...(editor ? { editor } : {}),
|
|
97
|
+
},
|
|
98
|
+
}]);
|
|
99
|
+
if (!committed.ok)
|
|
100
|
+
throw new Error("Entry changed while restoring history");
|
|
101
|
+
const next = committed.revisions[0].revision;
|
|
102
|
+
return { revision: next, data: snapshotData };
|
|
87
103
|
});
|
|
88
|
-
return json({ ok: true, revision });
|
|
104
|
+
return json({ ok: true, revision: restored.revision, data: restored.data });
|
|
89
105
|
}
|
|
90
106
|
catch (error) {
|
|
91
107
|
// An adapter throw must not leak a stack/path via a framework 500.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../../src/runtime/routes/history.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC;AAG/B,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEtF,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAmB;IAC3C,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,OAAO,GAAG,MAAM,cAAc,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../../src/runtime/routes/history.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutate.d.ts","sourceRoot":"","sources":["../../../src/runtime/routes/mutate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mutate.d.ts","sourceRoot":"","sources":["../../../src/runtime/routes/mutate.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,SAAS,QAAQ,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AASxC,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAahE;AAED,wBAAsB,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAmDjE"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getRequestContext } from "../request-context.js";
|
|
1
2
|
export const prerender = false;
|
|
2
3
|
import { isEditorAuthenticated, getEditorId } from "../auth/session.js";
|
|
3
4
|
import { getRuntimeConfig } from "../config.js";
|
|
@@ -49,7 +50,9 @@ export async function POST(context) {
|
|
|
49
50
|
options = { allowedClasses: services.allowedClasses };
|
|
50
51
|
}
|
|
51
52
|
else {
|
|
52
|
-
|
|
53
|
+
const type = parsed.value?.type;
|
|
54
|
+
adapter = getRequestContext()?.authorize && (type === "create_collection" || type === "delete_collection")
|
|
55
|
+
? (await getRuntimeServices()).adapter : await resolveAdapter();
|
|
53
56
|
}
|
|
54
57
|
try {
|
|
55
58
|
const result = await executeMutation(adapter, parsed.value, options);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutate.js","sourceRoot":"","sources":["../../../src/runtime/routes/mutate.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC;AAI/B,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,eAAe,EAAwB,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEtF,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAmB;IAC3C,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IAEnC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,IAAI,CAAC;QACV,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,GAAG,OAAO,CAAC,WAAW,SAAS;QACtC,OAAO,EAAE,CAAC,MAAM,CAAC;QACjB,IAAI,EAAE,wEAAwE;KAC/E,CAAC,CAAC;AACL,CAAC;AAED,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,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC;IAEvC,6EAA6E;IAC7E,uEAAuE;IACvE,6EAA6E;IAC7E,4EAA4E;IAC5E,MAAM,SAAS,GACb,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;QAChC,MAAM,CAAC,KAAK,KAAK,IAAI;QACpB,MAAM,CAAC,KAA4B,CAAC,IAAI,KAAK,UAAU,CAAC;IAE3D,IAAI,OAAuB,CAAC;IAC5B,IAAI,OAAoC,CAAC;IACzC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,GAAG,CAAC,CAAC;QACtE,MAAM,QAAQ,GAAG,MAAM,kBAAkB,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,4DAA4D,EAAE,EAAE,GAAG,CAAC,CAAC;QAC5F,CAAC;QACD,OAAO,GAAG,IAAI,qBAAqB,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClF,OAAO,GAAG,EAAE,cAAc,EAAE,QAAQ,CAAC,cAAc,EAAE,CAAC;IACxD,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,MAAM,cAAc,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"mutate.js","sourceRoot":"","sources":["../../../src/runtime/routes/mutate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../../src/runtime/routes/publish.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../../src/runtime/routes/publish.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,SAAS,QAAQ,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAkCxC;;;;;GAKG;AACH,wBAAsB,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CA2HjE"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { requirePermission, PermissionDenied } from "../authorization.js";
|
|
1
2
|
export const prerender = false;
|
|
2
3
|
import { isEditorAuthenticated, getEditorId } from "../auth/session.js";
|
|
3
4
|
import { getRuntimeServices } from "../providers.js";
|
|
5
|
+
import { withEditorPublishLock } from "../mutations/engine.js";
|
|
4
6
|
import { publishOverlay } from "../publish.js";
|
|
5
7
|
import { isGitRepo, commitPaths } from "../git-journal.js";
|
|
6
8
|
import { triggerRebuildWebhook } from "../rebuild-webhook.js";
|
|
@@ -12,6 +14,19 @@ function commitMessage(scope, count) {
|
|
|
12
14
|
return `publish ${scope.collection} (${count})`;
|
|
13
15
|
return `publish content (${count} ${count === 1 ? "entry" : "entries"})`;
|
|
14
16
|
}
|
|
17
|
+
function deploymentTarget(payload) {
|
|
18
|
+
return {
|
|
19
|
+
...payload,
|
|
20
|
+
id: crypto.randomUUID(),
|
|
21
|
+
requestedAt: Date.now(),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
async function rememberAcceptedDeployment(overlay, target, enabled) {
|
|
25
|
+
if (!enabled || !overlay.setDeploymentTarget)
|
|
26
|
+
return false;
|
|
27
|
+
await overlay.setDeploymentTarget(target);
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
15
30
|
/**
|
|
16
31
|
* POST /api/cms/publish — flush the current editor's draft overlay into the base.
|
|
17
32
|
* Body: `{ collection?, id? }` to scope to one entry/collection, or `{}` for all.
|
|
@@ -39,40 +54,119 @@ export async function POST(context) {
|
|
|
39
54
|
if (scope.id && !scope.collection) {
|
|
40
55
|
return json({ error: "id requires a collection" }, 400);
|
|
41
56
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
const overlay = await base.makeEditorOverlay(editorId);
|
|
48
|
-
const { published, conflicts } = await publishOverlay(base, overlay, scope);
|
|
49
|
-
// Best-effort git journal (opt-in via CARET_GIT_ON_PUBLISH): turn the publish
|
|
50
|
-
// into a commit when content lives in a git repo. Runs AFTER the publish, so a
|
|
51
|
-
// git failure never blocks or reverts it; no-ops on non-filesystem adapters.
|
|
52
|
-
let commit = null;
|
|
53
|
-
if (published.length > 0 &&
|
|
54
|
-
process.env.CARET_GIT_ON_PUBLISH === "true" &&
|
|
55
|
-
base.committablePath) {
|
|
56
|
-
const cwd = process.cwd();
|
|
57
|
-
if (await isGitRepo(cwd)) {
|
|
58
|
-
commit = await commitPaths({
|
|
59
|
-
cwd,
|
|
60
|
-
paths: [base.committablePath()],
|
|
61
|
-
message: commitMessage(scope, published.length),
|
|
62
|
-
authorName: `CaretCMS editor ${editorId.slice(0, 8)}`,
|
|
63
|
-
authorEmail: "editor@caretcms.local",
|
|
64
|
-
});
|
|
57
|
+
try {
|
|
58
|
+
const services = await getRuntimeServices();
|
|
59
|
+
const { adapter: base } = services;
|
|
60
|
+
if (!base.makeEditorOverlay) {
|
|
61
|
+
return json({ error: "Drafts are not supported by the configured storage adapter" }, 400);
|
|
65
62
|
}
|
|
63
|
+
const overlay = await base.makeEditorOverlay(editorId);
|
|
64
|
+
return await withEditorPublishLock(editorId, async () => {
|
|
65
|
+
if (body.retryRebuild === true) {
|
|
66
|
+
const receipt = await overlay.getRebuildReceipt?.();
|
|
67
|
+
if (!receipt) {
|
|
68
|
+
await requirePermission("publish");
|
|
69
|
+
}
|
|
70
|
+
if (!receipt)
|
|
71
|
+
return json({ error: "No deployment retry is pending" }, 400);
|
|
72
|
+
for (const entry of receipt.published) {
|
|
73
|
+
await requirePermission("publish", entry.collection, entry.id);
|
|
74
|
+
if (entry.deleted)
|
|
75
|
+
await requirePermission("delete", entry.collection, entry.id);
|
|
76
|
+
}
|
|
77
|
+
const target = deploymentTarget(receipt);
|
|
78
|
+
const rebuild = await triggerRebuildWebhook(services.delivery.publish, {
|
|
79
|
+
...receipt,
|
|
80
|
+
deploymentId: target.id,
|
|
81
|
+
});
|
|
82
|
+
let receiptError = false;
|
|
83
|
+
let deploymentTracked = false;
|
|
84
|
+
if (rebuild.ok) {
|
|
85
|
+
try {
|
|
86
|
+
deploymentTracked = await rememberAcceptedDeployment(overlay, target, Boolean(services.deploymentStatusProvider));
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
deploymentTracked = false;
|
|
90
|
+
}
|
|
91
|
+
try {
|
|
92
|
+
await overlay.setRebuildReceipt?.(null);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
receiptError = true;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return json({ ok: true, published: [], conflicts: [], failed: [], rebuild,
|
|
99
|
+
deploymentTracked, retryAvailable: !rebuild.ok, receiptError });
|
|
100
|
+
}
|
|
101
|
+
const { published, conflicts, failed } = await publishOverlay(base, overlay, scope);
|
|
102
|
+
// Best-effort git journal (opt-in via CARET_GIT_ON_PUBLISH): turn the publish
|
|
103
|
+
// into a commit when content lives in a git repo. Runs AFTER the publish, so a
|
|
104
|
+
// git failure never blocks or reverts it; no-ops on non-filesystem adapters.
|
|
105
|
+
let commit = null;
|
|
106
|
+
if (published.length > 0 &&
|
|
107
|
+
process.env.CARET_GIT_ON_PUBLISH === "true" &&
|
|
108
|
+
base.committablePath) {
|
|
109
|
+
const cwd = process.cwd();
|
|
110
|
+
if (await isGitRepo(cwd)) {
|
|
111
|
+
commit = await commitPaths({
|
|
112
|
+
cwd,
|
|
113
|
+
paths: [base.committablePath()],
|
|
114
|
+
message: commitMessage(scope, published.length),
|
|
115
|
+
authorName: `CaretCMS editor ${editorId.slice(0, 8)}`,
|
|
116
|
+
authorEmail: "editor@caretcms.local",
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
let receiptError = false;
|
|
121
|
+
let payload = { published, commit };
|
|
122
|
+
if (published.length > 0 && services.delivery.publish.webhookUrl && overlay.setRebuildReceipt) {
|
|
123
|
+
try {
|
|
124
|
+
const previous = await overlay.getRebuildReceipt?.();
|
|
125
|
+
const entries = new Map([...(previous?.published ?? []), ...published].map(entry => [`${entry.collection}::${entry.id}`, entry]));
|
|
126
|
+
payload = { published: [...entries.values()], commit };
|
|
127
|
+
await overlay.setRebuildReceipt(payload);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
receiptError = true;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
const target = deploymentTarget(payload);
|
|
134
|
+
const rebuild = published.length > 0
|
|
135
|
+
? await triggerRebuildWebhook(services.delivery.publish, {
|
|
136
|
+
...payload,
|
|
137
|
+
deploymentId: target.id,
|
|
138
|
+
})
|
|
139
|
+
: { triggered: false, ok: true };
|
|
140
|
+
let deploymentTracked = false;
|
|
141
|
+
if (published.length > 0 && rebuild.triggered && rebuild.ok) {
|
|
142
|
+
try {
|
|
143
|
+
deploymentTracked = await rememberAcceptedDeployment(overlay, target, Boolean(services.deploymentStatusProvider));
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
deploymentTracked = false;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// Conflicted entries keep their drafts; the client surfaces them so the
|
|
150
|
+
// editor can reload (fresh stamps) and re-apply. `ok` reflects the whole
|
|
151
|
+
// request having been processed, not per-entry success — check `conflicts`.
|
|
152
|
+
if (published.length > 0 && rebuild.ok && !receiptError) {
|
|
153
|
+
try {
|
|
154
|
+
await overlay.setRebuildReceipt?.(null);
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
receiptError = true;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return json({ ok: true, published, conflicts, failed, commit, rebuild,
|
|
161
|
+
deploymentTracked,
|
|
162
|
+
retryAvailable: !rebuild.ok && !receiptError && Boolean(overlay.setRebuildReceipt), receiptError });
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
if (error instanceof PermissionDenied)
|
|
167
|
+
return json({ error: "Permission denied" }, 403);
|
|
168
|
+
console.error("[caretcms] Publish request failed:", error);
|
|
169
|
+
return json({ error: "Publication could not finish. Some content may already be published; retry to recover." }, 500);
|
|
66
170
|
}
|
|
67
|
-
const rebuild = published.length > 0
|
|
68
|
-
? await triggerRebuildWebhook(services.delivery.publish, {
|
|
69
|
-
published,
|
|
70
|
-
commit,
|
|
71
|
-
})
|
|
72
|
-
: { triggered: false, ok: true };
|
|
73
|
-
// Conflicted entries keep their drafts; the client surfaces them so the
|
|
74
|
-
// editor can reload (fresh stamps) and re-apply. `ok` reflects the whole
|
|
75
|
-
// request having been processed, not per-entry success — check `conflicts`.
|
|
76
|
-
return json({ ok: true, published, conflicts, commit, rebuild });
|
|
77
171
|
}
|
|
78
172
|
//# sourceMappingURL=publish.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/runtime/routes/publish.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC;AAG/B,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAqB,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/runtime/routes/publish.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/runtime/routes/schema.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,QAAQ,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAWxC,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/runtime/routes/schema.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,QAAQ,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAWxC,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAuEhE"}
|
|
@@ -48,6 +48,8 @@ export async function GET(context) {
|
|
|
48
48
|
deletable: metadata.deletable,
|
|
49
49
|
singletonId: metadata.singletonId,
|
|
50
50
|
order: metadata.order,
|
|
51
|
+
previewPath: metadata.previewPath,
|
|
52
|
+
publication: metadata.publication,
|
|
51
53
|
},
|
|
52
54
|
});
|
|
53
55
|
}
|
|
@@ -58,12 +60,14 @@ export async function GET(context) {
|
|
|
58
60
|
const firstEntry = stripBodyOverlay(entries[0]?.data ?? {});
|
|
59
61
|
const schema = inferJsonSchema(firstEntry);
|
|
60
62
|
const template = buildTemplate(schema);
|
|
63
|
+
const inferredMetadata = await resolveCollectionStudioConfig(adapter, collectionRaw);
|
|
61
64
|
return json({
|
|
62
65
|
schema,
|
|
63
66
|
template,
|
|
64
67
|
collection: collectionRaw,
|
|
65
68
|
source: "inferred",
|
|
66
69
|
inferredFrom: entries.length > 0 ? entries[0].id : null,
|
|
70
|
+
metadata: inferredMetadata,
|
|
67
71
|
});
|
|
68
72
|
}
|
|
69
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,EACL,mBAAmB,EACnB,uBAAuB,EACvB,6BAA6B,GAC9B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAmB;IAC3C,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,OAAO,GAAG,MAAM,cAAc,EAAE,CAAC;IACvC,MAAM,aAAa,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;SACrE,IAAI,EAAE;SACN,WAAW,EAAE,CAAC;IACjB,IAAI,CAAC,CAAC,MAAM,uBAAuB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC;QAC7D,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,GAAG,CAAC,CAAC;IACpD,CAAC;IAED,oEAAoE;IACpE,MAAM,UAAU,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC;IACtD,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,MAAM,6BAA6B,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC7E,OAAO,IAAI,CAAC;YACV,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,UAAU,EAAE,aAAa;YACzB,MAAM,EAAE,UAAU;YAClB,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAED,yDAAyD;IACzD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;IACpE,IAAI,QAAQ,EAAE,MAAM,EAAE,CAAC;QACrB,wEAAwE;QACxE,yEAAyE;QACzE,mEAAmE;QACnE,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACtD,OAAO,IAAI,CAAC;YACV,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,QAAQ;YACR,UAAU,EAAE,aAAa;YACzB,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE;gBACR,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,KAAK,EAAE,QAAQ,CAAC,KAAK;
|
|
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;AA8CxC,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,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"}
|
|
@@ -99,7 +99,9 @@ export async function GET(context) {
|
|
|
99
99
|
.then(function (data) {
|
|
100
100
|
if (!data) return;
|
|
101
101
|
var entries = Array.isArray(data.entries) ? data.entries : [];
|
|
102
|
-
var
|
|
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;
|
|
103
105
|
el.textContent = n + ' ' + (n === 1 ? messages['count.entry'] : messages['count.entries']);
|
|
104
106
|
})
|
|
105
107
|
.catch(function () {
|