@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
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { canPerform } from "../authorization.js";
|
|
1
2
|
export const prerender = false;
|
|
2
3
|
import { isEditorAuthenticated } from "../auth/session.js";
|
|
3
4
|
import { getRuntimeConfig } from "../config.js";
|
|
4
5
|
import { resolveAdapter } from "./_helpers.js";
|
|
5
6
|
import { isKnownStudioCollection, resolveCollectionStudioConfig, } from "../schema-registry.js";
|
|
7
|
+
import { publicationField } from "../collection-policy.js";
|
|
6
8
|
import { escapeHtml, htmlResponse, redirectResponse, renderStudioPage, serializeJsonForScript, } from "../views/studio-layout.js";
|
|
7
9
|
function humanize(name) {
|
|
8
10
|
return name.replace(/[-_]+/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
|
|
@@ -27,8 +29,9 @@ export async function GET(context) {
|
|
|
27
29
|
}
|
|
28
30
|
const label = collectionConfig.label || humanize(collection);
|
|
29
31
|
const messages = runtime.messages;
|
|
30
|
-
const creatable = collectionConfig.creatable !== false;
|
|
31
|
-
const orderable = collectionConfig.orderable !== false;
|
|
32
|
+
const creatable = collectionConfig.creatable !== false && await canPerform("edit", collection);
|
|
33
|
+
const orderable = collectionConfig.orderable !== false && await canPerform("edit", collection);
|
|
34
|
+
const publicationFieldName = publicationField(collectionConfig);
|
|
32
35
|
const safeCollection = escapeHtml(collection);
|
|
33
36
|
const extraStyles = `
|
|
34
37
|
.entry-card {
|
|
@@ -67,6 +70,8 @@ export async function GET(context) {
|
|
|
67
70
|
.reorder-handle { color: var(--studio-text-dim); font-size: 16px; line-height: 1; flex-shrink: 0; }
|
|
68
71
|
.reorder-label { flex: 1; font-size: 14px; color: var(--studio-text); }
|
|
69
72
|
.reorder-order { font-size: 11px; color: var(--studio-text-dim); font-variant-numeric: tabular-nums; min-width: 24px; text-align: right; }
|
|
73
|
+
.reorder-controls { display: flex; gap: 0.35rem; flex-shrink: 0; }
|
|
74
|
+
.reorder-move { min-width: 32px; padding: 4px 8px; }
|
|
70
75
|
.modal-backdrop {
|
|
71
76
|
position: fixed;
|
|
72
77
|
inset: 0;
|
|
@@ -107,7 +112,7 @@ export async function GET(context) {
|
|
|
107
112
|
<div style="display:flex;align-items:center;gap:0.75rem;flex-wrap:wrap;">
|
|
108
113
|
<label for="search-input" style="font-size:0.7rem;color:var(--studio-text-dim);">${escapeHtml(messages["collection.search"])}</label>
|
|
109
114
|
<input id="search-input" name="search" type="search" placeholder="${escapeHtml(messages["collection.searchPlaceholder"])}" class="studio-input" style="max-width:240px;" />
|
|
110
|
-
${orderable ? `<button id="btn-reorder" class="studio-btn-ghost">${escapeHtml(messages["collection.reorder"])}</button>` : ""}
|
|
115
|
+
${orderable ? `<button id="btn-reorder" type="button" class="studio-btn-ghost" aria-controls="reorder-container" aria-expanded="false">${escapeHtml(messages["collection.reorder"])}</button>` : ""}
|
|
111
116
|
${creatable ? `<button id="btn-new" class="studio-btn-primary">${escapeHtml(messages["collection.new"])}</button>` : ""}
|
|
112
117
|
</div>
|
|
113
118
|
</div>
|
|
@@ -128,30 +133,37 @@ export async function GET(context) {
|
|
|
128
133
|
|
|
129
134
|
<div id="entries-grid" hidden style="display:grid;gap:1rem;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));"></div>
|
|
130
135
|
|
|
131
|
-
<
|
|
132
|
-
<
|
|
136
|
+
<nav id="pagination" aria-label="${escapeHtml(messages["collection.pagination"])}" hidden style="display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-top:1rem;">
|
|
137
|
+
<button id="page-prev" type="button" class="studio-btn-ghost">${escapeHtml(messages["collection.previous"])}</button>
|
|
138
|
+
<span id="page-range" role="status" aria-live="polite"></span>
|
|
139
|
+
<button id="page-next" type="button" class="studio-btn-ghost">${escapeHtml(messages["collection.next"])}</button>
|
|
140
|
+
</nav>
|
|
141
|
+
<p id="reorder-scope" hidden style="font-size:0.8rem;color:var(--studio-text-dim);">${escapeHtml(messages["collection.reorderScope"])}</p>
|
|
142
|
+
|
|
143
|
+
<div id="reorder-container" role="region" aria-label="${escapeHtml(messages["collection.reorder"])}" hidden>
|
|
144
|
+
<div id="reorder-list" role="list" style="display:flex;flex-direction:column;gap:0.25rem;"></div>
|
|
133
145
|
<div style="display:flex;justify-content:flex-end;gap:0.75rem;margin-top:1.5rem;padding-top:1rem;border-top:1px solid var(--studio-border);">
|
|
134
|
-
<button id="btn-reorder-cancel" class="studio-btn-ghost">${escapeHtml(messages["common.cancel"])}</button>
|
|
135
|
-
<button id="btn-reorder-save" class="studio-btn-primary">${escapeHtml(messages["collection.saveOrder"])}</button>
|
|
146
|
+
<button id="btn-reorder-cancel" type="button" class="studio-btn-ghost">${escapeHtml(messages["common.cancel"])}</button>
|
|
147
|
+
<button id="btn-reorder-save" type="button" class="studio-btn-primary">${escapeHtml(messages["collection.saveOrder"])}</button>
|
|
136
148
|
</div>
|
|
137
149
|
</div>
|
|
138
150
|
</div>
|
|
139
151
|
|
|
140
|
-
<div id="create-dialog" class="modal-backdrop" hidden>
|
|
152
|
+
<div id="create-dialog" class="modal-backdrop" role="dialog" aria-modal="true" aria-labelledby="create-dialog-title" aria-describedby="create-hint" hidden>
|
|
141
153
|
<div class="modal-card">
|
|
142
154
|
<div class="modal-header">
|
|
143
|
-
<
|
|
144
|
-
<button id="btn-create-close" class="studio-btn-ghost" style="padding:4px 10px;">${escapeHtml(messages["common.close"])}</button>
|
|
155
|
+
<h2 id="create-dialog-title" style="font:inherit;letter-spacing:inherit;text-transform:inherit;margin:0;">${escapeHtml(messages["collection.newEntry"])}</h2>
|
|
156
|
+
<button id="btn-create-close" type="button" class="studio-btn-ghost" style="padding:4px 10px;">${escapeHtml(messages["common.close"])}</button>
|
|
145
157
|
</div>
|
|
146
158
|
<div class="modal-body">
|
|
147
159
|
<label for="create-id-input" class="studio-label">${escapeHtml(messages["collection.entryId"])}</label>
|
|
148
160
|
<input id="create-id-input" type="text" class="studio-input" placeholder="${escapeHtml(messages["collection.entryIdPlaceholder"])}" autocomplete="off" spellcheck="false" />
|
|
149
161
|
<p id="create-hint" style="font-size:10px;margin:0.5rem 0 0.35rem;color:var(--studio-text-dim);">${escapeHtml(messages["collection.idHint"])}</p>
|
|
150
|
-
|
|
162
|
+
${publicationFieldName ? `<p style="font-size:10px;margin:0 0 1rem;color:var(--studio-text-dim);">${escapeHtml(messages["collection.publishHint"])}</p>` : ""}
|
|
151
163
|
<p id="create-error" class="studio-error-text" hidden></p>
|
|
152
164
|
<div style="display:flex;justify-content:flex-end;gap:0.75rem;">
|
|
153
|
-
<button id="btn-create-cancel" class="studio-btn-ghost">${escapeHtml(messages["common.cancel"])}</button>
|
|
154
|
-
<button id="btn-create-confirm" class="studio-btn-primary" disabled>${escapeHtml(messages["collection.create"])}</button>
|
|
165
|
+
<button id="btn-create-cancel" type="button" class="studio-btn-ghost">${escapeHtml(messages["common.cancel"])}</button>
|
|
166
|
+
<button id="btn-create-confirm" type="button" class="studio-btn-primary" disabled>${escapeHtml(messages["collection.create"])}</button>
|
|
155
167
|
</div>
|
|
156
168
|
</div>
|
|
157
169
|
</div>
|
|
@@ -161,8 +173,18 @@ export async function GET(context) {
|
|
|
161
173
|
var API = ${serializeJsonForScript(runtime.apiBasePath)};
|
|
162
174
|
var MOUNT = ${serializeJsonForScript(runtime.mountPath)};
|
|
163
175
|
var MSG = ${serializeJsonForScript(messages)};
|
|
176
|
+
var PUBLICATION_FIELD = ${serializeJsonForScript(publicationFieldName)};
|
|
164
177
|
var ID_RE = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
165
178
|
var allEntries = [];
|
|
179
|
+
var currentPage = 1;
|
|
180
|
+
var query = '';
|
|
181
|
+
var requestVersion = 0;
|
|
182
|
+
var searchTimer;
|
|
183
|
+
var pagination = document.getElementById('pagination');
|
|
184
|
+
var previousPage = document.getElementById('page-prev');
|
|
185
|
+
var nextPage = document.getElementById('page-next');
|
|
186
|
+
var pageRange = document.getElementById('page-range');
|
|
187
|
+
var reorderScope = document.getElementById('reorder-scope');
|
|
166
188
|
|
|
167
189
|
var grid = document.getElementById('entries-grid');
|
|
168
190
|
var loading = document.getElementById('loading');
|
|
@@ -182,6 +204,10 @@ export async function GET(context) {
|
|
|
182
204
|
var idInput = document.getElementById('create-id-input');
|
|
183
205
|
var errorEl = document.getElementById('create-error');
|
|
184
206
|
var confirmBtn = document.getElementById('btn-create-confirm');
|
|
207
|
+
var createCloseBtn = document.getElementById('btn-create-close');
|
|
208
|
+
var createCancelBtn = document.getElementById('btn-create-cancel');
|
|
209
|
+
var dialogTrigger = null;
|
|
210
|
+
var knownDuplicateIds = new Set();
|
|
185
211
|
|
|
186
212
|
function htmlEsc(s) { return String(s).replace(/[&<>"']/g, function (c) {
|
|
187
213
|
return { '&':'&','<':'<','>':'>','"':'"',"'":''' }[c]; });
|
|
@@ -226,11 +252,11 @@ export async function GET(context) {
|
|
|
226
252
|
grid.hidden = false;
|
|
227
253
|
for (var i = 0; i < entries.length; i++) {
|
|
228
254
|
var entry = entries[i];
|
|
229
|
-
var title = getTitle(entry.data);
|
|
255
|
+
var title = entry.readError ? entry.id : getTitle(entry.data);
|
|
230
256
|
var thumb = getThumb(entry.data);
|
|
231
257
|
var subtitle = getSubtitle(entry.data);
|
|
232
|
-
var publication = entry.data && typeof entry.data
|
|
233
|
-
? (entry.data
|
|
258
|
+
var publication = PUBLICATION_FIELD && entry.data && typeof entry.data[PUBLICATION_FIELD] === 'boolean'
|
|
259
|
+
? (entry.data[PUBLICATION_FIELD]
|
|
234
260
|
? '<span style="font-size:0.62rem;color:var(--studio-green);">' + htmlEsc(MSG['collection.published']) + '</span>'
|
|
235
261
|
: '<span style="font-size:0.62rem;color:var(--studio-text-dim);">' + htmlEsc(MSG['collection.unpublished']) + '</span>')
|
|
236
262
|
: '';
|
|
@@ -248,7 +274,7 @@ export async function GET(context) {
|
|
|
248
274
|
'<div style="padding:1rem;">' +
|
|
249
275
|
'<h2 style="font-size:0.875rem;font-weight:500;margin:0 0 0.25rem;color:var(--studio-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">' + htmlEsc(title) + '</h2>' +
|
|
250
276
|
(subtitle ? '<p style="font-size:0.7rem;margin:0 0 0.25rem;color:var(--studio-text-dim);text-transform:capitalize;">' + htmlEsc(subtitle) + '</p>' : '') +
|
|
251
|
-
invalid +
|
|
277
|
+
(entry.readError ? '<p role="note">' + htmlEsc(MSG['collection.unreadable']) + '</p>' : invalid) +
|
|
252
278
|
publication +
|
|
253
279
|
'<p style="font-size:0.65rem;margin:0;color:var(--studio-text-dim);font-family:var(--studio-font-mono);">' + htmlEsc(entry.id) + '</p>' +
|
|
254
280
|
'</div>';
|
|
@@ -257,11 +283,14 @@ export async function GET(context) {
|
|
|
257
283
|
}
|
|
258
284
|
|
|
259
285
|
function loadEntries() {
|
|
286
|
+
var version = ++requestVersion;
|
|
287
|
+
pagination.hidden = true;
|
|
288
|
+
if (reorderBtn) reorderBtn.disabled = true;
|
|
260
289
|
loading.hidden = false;
|
|
261
290
|
errorState.hidden = true;
|
|
262
291
|
empty.hidden = true;
|
|
263
292
|
grid.hidden = true;
|
|
264
|
-
fetch(API + '/entries?collection=' + encodeURIComponent(COLLECTION))
|
|
293
|
+
return fetch(API + '/entries?collection=' + encodeURIComponent(COLLECTION) + '&page=' + currentPage + '&q=' + encodeURIComponent(query))
|
|
265
294
|
.then(function (res) {
|
|
266
295
|
if (res.status === 401) {
|
|
267
296
|
window.location.href = MOUNT + '?redirect=' + encodeURIComponent(window.location.pathname);
|
|
@@ -271,15 +300,27 @@ export async function GET(context) {
|
|
|
271
300
|
return res.json();
|
|
272
301
|
})
|
|
273
302
|
.then(function (json) {
|
|
274
|
-
if (!json) return;
|
|
303
|
+
if (!json || version !== requestVersion) return;
|
|
275
304
|
allEntries = Array.isArray(json.entries) ? json.entries : [];
|
|
276
305
|
loading.hidden = true;
|
|
277
|
-
|
|
306
|
+
var paging = json.pagination;
|
|
307
|
+
currentPage = paging.page;
|
|
308
|
+
countEl.textContent = paging.total + ' ' + (paging.total === 1 ? MSG['count.entry'] : MSG['count.entries']);
|
|
309
|
+
previousPage.disabled = !paging.hasPrev;
|
|
310
|
+
nextPage.disabled = !paging.hasNext;
|
|
311
|
+
pageRange.textContent = MSG['collection.range'].replace('{start}', paging.total ? (paging.page - 1) * paging.pageSize + 1 : 0).replace('{end}', Math.min(paging.page * paging.pageSize, paging.total)).replace('{total}', paging.total);
|
|
312
|
+
pagination.hidden = paging.total === 0;
|
|
313
|
+
empty.querySelector('p').textContent = query ? MSG['collection.noResults'] : MSG['collection.noEntries'];
|
|
314
|
+
if (emptyCreateBtn) emptyCreateBtn.hidden = Boolean(query);
|
|
315
|
+
var limited = Boolean(query) || paging.totalPages > 1 || allEntries.some(function (entry) { return entry.readError; });
|
|
316
|
+
if (reorderBtn) { reorderBtn.disabled = limited; reorderScope.hidden = !limited; }
|
|
317
|
+
|
|
278
318
|
renderEntries(allEntries);
|
|
279
319
|
})
|
|
280
320
|
.catch(function () {
|
|
321
|
+
if (version !== requestVersion) return;
|
|
281
322
|
loading.hidden = true;
|
|
282
|
-
countEl.textContent = '
|
|
323
|
+
countEl.textContent = MSG['common.error'];
|
|
283
324
|
errorState.hidden = false;
|
|
284
325
|
});
|
|
285
326
|
}
|
|
@@ -287,30 +328,39 @@ export async function GET(context) {
|
|
|
287
328
|
loadEntries();
|
|
288
329
|
retryBtn.addEventListener('click', loadEntries);
|
|
289
330
|
|
|
331
|
+
previousPage.addEventListener('click', function () { currentPage--; loadEntries(); });
|
|
332
|
+
nextPage.addEventListener('click', function () { currentPage++; loadEntries(); });
|
|
290
333
|
searchInput.addEventListener('input', function () {
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
334
|
+
clearTimeout(searchTimer);
|
|
335
|
+
++requestVersion; // ignore older responses immediately, including during debounce
|
|
336
|
+
if (reorderBtn) reorderBtn.disabled = true;
|
|
337
|
+
previousPage.disabled = true; nextPage.disabled = true;
|
|
338
|
+
searchTimer = setTimeout(function () {
|
|
339
|
+
query = searchInput.value.trim(); currentPage = 1; loadEntries();
|
|
340
|
+
}, 180);
|
|
298
341
|
});
|
|
299
342
|
|
|
300
343
|
/* ─── Create dialog ─────────────────────────────────────────────── */
|
|
301
344
|
function openDialog() {
|
|
345
|
+
dialogTrigger = document.activeElement instanceof HTMLElement ? document.activeElement : null;
|
|
302
346
|
dialog.hidden = false;
|
|
303
347
|
idInput.value = '';
|
|
304
348
|
errorEl.hidden = true;
|
|
305
349
|
confirmBtn.disabled = true;
|
|
306
350
|
idInput.focus();
|
|
307
351
|
}
|
|
308
|
-
function closeDialog() {
|
|
352
|
+
function closeDialog() {
|
|
353
|
+
if (dialog.hidden) return;
|
|
354
|
+
dialog.hidden = true;
|
|
355
|
+
var trigger = dialogTrigger;
|
|
356
|
+
dialogTrigger = null;
|
|
357
|
+
if (trigger && trigger.isConnected) trigger.focus();
|
|
358
|
+
}
|
|
309
359
|
function validate() {
|
|
310
360
|
var v = idInput.value.trim();
|
|
311
361
|
if (!v) { confirmBtn.disabled = true; errorEl.hidden = true; return; }
|
|
312
362
|
if (!ID_RE.test(v)) { errorEl.textContent = MSG['collection.invalidId']; errorEl.hidden = false; confirmBtn.disabled = true; return; }
|
|
313
|
-
if (allEntries.some(function (e) { return e.id === v; })) { errorEl.textContent = MSG['collection.duplicateId']; errorEl.hidden = false; confirmBtn.disabled = true; return; }
|
|
363
|
+
if (knownDuplicateIds.has(v) || allEntries.some(function (e) { return e.id === v; })) { errorEl.textContent = MSG['collection.duplicateId']; errorEl.hidden = false; confirmBtn.disabled = true; return; }
|
|
314
364
|
errorEl.hidden = true; confirmBtn.disabled = false;
|
|
315
365
|
}
|
|
316
366
|
function createEntry() {
|
|
@@ -328,12 +378,22 @@ export async function GET(context) {
|
|
|
328
378
|
method: 'POST',
|
|
329
379
|
headers: { 'Content-Type': 'application/json', 'x-caret-request': '1' },
|
|
330
380
|
credentials: 'same-origin',
|
|
331
|
-
body: JSON.stringify({ type: 'put_entry', collection: COLLECTION, id: entryId, data: template }),
|
|
381
|
+
body: JSON.stringify({ type: 'put_entry', collection: COLLECTION, id: entryId, data: template, createOnly: true }),
|
|
332
382
|
});
|
|
333
383
|
})
|
|
334
384
|
.then(function (res) {
|
|
335
385
|
if (!res) return;
|
|
336
386
|
if (res.status === 401) { window.location.href = MOUNT + '?redirect=' + encodeURIComponent(window.location.pathname); return; }
|
|
387
|
+
if (res.status === 409) {
|
|
388
|
+
knownDuplicateIds.add(entryId);
|
|
389
|
+
errorEl.textContent = MSG['collection.duplicateId'];
|
|
390
|
+
errorEl.hidden = false;
|
|
391
|
+
confirmBtn.disabled = true;
|
|
392
|
+
confirmBtn.textContent = MSG['collection.create'];
|
|
393
|
+
idInput.focus();
|
|
394
|
+
idInput.select();
|
|
395
|
+
return;
|
|
396
|
+
}
|
|
337
397
|
if (!res.ok) throw new Error('mutate failed');
|
|
338
398
|
window.location.href = MOUNT + '/cms/' + encodeURIComponent(COLLECTION) + '/' + encodeURIComponent(entryId) + '?new=1';
|
|
339
399
|
})
|
|
@@ -346,18 +406,50 @@ export async function GET(context) {
|
|
|
346
406
|
}
|
|
347
407
|
if (newBtn) newBtn.addEventListener('click', openDialog);
|
|
348
408
|
if (emptyCreateBtn) emptyCreateBtn.addEventListener('click', openDialog);
|
|
349
|
-
|
|
350
|
-
|
|
409
|
+
createCloseBtn.addEventListener('click', closeDialog);
|
|
410
|
+
createCancelBtn.addEventListener('click', closeDialog);
|
|
351
411
|
confirmBtn.addEventListener('click', createEntry);
|
|
352
412
|
idInput.addEventListener('input', validate);
|
|
353
413
|
idInput.addEventListener('keydown', function (e) { if (e.key === 'Enter' && !confirmBtn.disabled) createEntry(); });
|
|
354
414
|
dialog.addEventListener('click', function (e) { if (e.target === dialog) closeDialog(); });
|
|
355
|
-
document.addEventListener('keydown', function (e) {
|
|
415
|
+
document.addEventListener('keydown', function (e) {
|
|
416
|
+
if (!dialog.hidden) {
|
|
417
|
+
if (e.key === 'Escape') {
|
|
418
|
+
e.preventDefault();
|
|
419
|
+
e.stopPropagation();
|
|
420
|
+
closeDialog();
|
|
421
|
+
return;
|
|
422
|
+
}
|
|
423
|
+
if (e.key !== 'Tab') return;
|
|
424
|
+
var focusable = [createCloseBtn, idInput, createCancelBtn, confirmBtn].filter(function (element) {
|
|
425
|
+
return !element.disabled && !element.hidden;
|
|
426
|
+
});
|
|
427
|
+
var first = focusable[0];
|
|
428
|
+
var last = focusable[focusable.length - 1];
|
|
429
|
+
if (e.shiftKey && document.activeElement === first) {
|
|
430
|
+
e.preventDefault();
|
|
431
|
+
last.focus();
|
|
432
|
+
} else if (!e.shiftKey && document.activeElement === last) {
|
|
433
|
+
e.preventDefault();
|
|
434
|
+
first.focus();
|
|
435
|
+
}
|
|
436
|
+
return;
|
|
437
|
+
}
|
|
438
|
+
if (e.key === 'Escape' && reorderMode) {
|
|
439
|
+
e.preventDefault();
|
|
440
|
+
e.stopPropagation();
|
|
441
|
+
exitReorder();
|
|
442
|
+
}
|
|
443
|
+
}, true);
|
|
356
444
|
|
|
357
445
|
/* ─── Reorder mode ──────────────────────────────────────────────── */
|
|
358
446
|
var reorderMode = false;
|
|
359
447
|
var ordered = [];
|
|
448
|
+
var reorderTrigger = null;
|
|
360
449
|
function enterReorder() {
|
|
450
|
+
if (reorderBtn.disabled) return;
|
|
451
|
+
reorderTrigger = document.activeElement instanceof HTMLElement ? document.activeElement : reorderBtn;
|
|
452
|
+
pagination.hidden = true;
|
|
361
453
|
reorderMode = true;
|
|
362
454
|
ordered = allEntries.slice().sort(function (a, b) {
|
|
363
455
|
var ao = (a.data && typeof a.data.order === 'number') ? a.data.order : 0;
|
|
@@ -365,17 +457,38 @@ export async function GET(context) {
|
|
|
365
457
|
return ao - bo;
|
|
366
458
|
});
|
|
367
459
|
grid.hidden = true; empty.hidden = true;
|
|
368
|
-
searchInput.style.display = 'none'; newBtn.style.display = 'none';
|
|
460
|
+
searchInput.style.display = 'none'; if (newBtn) newBtn.style.display = 'none';
|
|
369
461
|
reorderBtn.textContent = MSG['collection.reordering']; reorderBtn.disabled = true;
|
|
462
|
+
reorderBtn.setAttribute('aria-expanded', 'true');
|
|
370
463
|
reorderContainer.hidden = false;
|
|
371
464
|
renderReorderList();
|
|
465
|
+
var firstMove = reorderList.querySelector('button:not(:disabled)');
|
|
466
|
+
(firstMove || reorderCancel).focus();
|
|
372
467
|
}
|
|
373
468
|
function exitReorder() {
|
|
374
469
|
reorderMode = false;
|
|
375
470
|
reorderContainer.hidden = true;
|
|
376
|
-
searchInput.style.display = ''; newBtn.style.display = '';
|
|
471
|
+
searchInput.style.display = ''; if (newBtn) newBtn.style.display = '';
|
|
377
472
|
reorderBtn.textContent = MSG['collection.reorder']; reorderBtn.disabled = false;
|
|
378
|
-
|
|
473
|
+
reorderBtn.setAttribute('aria-expanded', 'false');
|
|
474
|
+
var trigger = reorderTrigger;
|
|
475
|
+
reorderTrigger = null;
|
|
476
|
+
loadEntries().then(function () {
|
|
477
|
+
if (trigger && trigger.isConnected) trigger.focus();
|
|
478
|
+
});
|
|
479
|
+
}
|
|
480
|
+
function moveReorderEntry(index, direction) {
|
|
481
|
+
var target = index + direction;
|
|
482
|
+
if (target < 0 || target >= ordered.length) return;
|
|
483
|
+
var moved = ordered.splice(index, 1)[0];
|
|
484
|
+
if (!moved) return;
|
|
485
|
+
ordered.splice(target, 0, moved);
|
|
486
|
+
renderReorderList();
|
|
487
|
+
var nextItem = reorderList.children[target];
|
|
488
|
+
var sameDirection = nextItem && nextItem.querySelector('[data-move="' + direction + '"]');
|
|
489
|
+
var oppositeDirection = nextItem && nextItem.querySelector('[data-move="' + (-direction) + '"]');
|
|
490
|
+
var focusTarget = sameDirection && !sameDirection.disabled ? sameDirection : oppositeDirection;
|
|
491
|
+
if (focusTarget) focusTarget.focus();
|
|
379
492
|
}
|
|
380
493
|
function renderReorderList() {
|
|
381
494
|
reorderList.innerHTML = '';
|
|
@@ -383,12 +496,23 @@ export async function GET(context) {
|
|
|
383
496
|
ordered.forEach(function (entry, idx) {
|
|
384
497
|
var item = document.createElement('div');
|
|
385
498
|
item.className = 'reorder-item';
|
|
499
|
+
item.setAttribute('role', 'listitem');
|
|
386
500
|
item.draggable = true;
|
|
387
501
|
item.dataset.idx = String(idx);
|
|
502
|
+
var title = getTitle(entry.data);
|
|
388
503
|
item.innerHTML =
|
|
389
|
-
'<span class="reorder-handle">☰</span>' +
|
|
390
|
-
'<span class="reorder-label">' + htmlEsc(
|
|
391
|
-
'<span class="reorder-order">' + (idx + 1) + '</span>'
|
|
504
|
+
'<span class="reorder-handle" aria-hidden="true">☰</span>' +
|
|
505
|
+
'<span class="reorder-label">' + htmlEsc(title) + '</span>' +
|
|
506
|
+
'<span class="reorder-order">' + (idx + 1) + '</span>' +
|
|
507
|
+
'<span class="reorder-controls">' +
|
|
508
|
+
'<button type="button" class="studio-btn-ghost reorder-move" data-move="-1" aria-label="' + htmlEsc(MSG['field.moveUp'] + ' ' + title) + '"' + (idx === 0 ? ' disabled' : '') + '>↑</button>' +
|
|
509
|
+
'<button type="button" class="studio-btn-ghost reorder-move" data-move="1" aria-label="' + htmlEsc(MSG['field.moveDown'] + ' ' + title) + '"' + (idx === ordered.length - 1 ? ' disabled' : '') + '>↓</button>' +
|
|
510
|
+
'</span>';
|
|
511
|
+
item.querySelectorAll('[data-move]').forEach(function (button) {
|
|
512
|
+
button.addEventListener('click', function () {
|
|
513
|
+
moveReorderEntry(idx, Number(button.dataset.move));
|
|
514
|
+
});
|
|
515
|
+
});
|
|
392
516
|
item.addEventListener('dragstart', function () { dragIdx = idx; item.classList.add('dragging'); });
|
|
393
517
|
item.addEventListener('dragend', function () {
|
|
394
518
|
dragIdx = null; item.classList.remove('dragging');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection-list.js","sourceRoot":"","sources":["../../../src/runtime/routes/collection-list.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,uBAAuB,EACvB,6BAA6B,GAC9B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,2BAA2B,CAAC;AAEnC,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAmB;IAC3C,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACnC,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IAChE,MAAM,aAAa,GAAG,GAAG,OAAO,CAAC,SAAS,aAAa,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;IAElG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,OAAO,gBAAgB,CAAC,aAAa,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,gBAAgB,CAAC,GAAG,OAAO,CAAC,SAAS,MAAM,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,cAAc,EAAE,CAAC;IACvC,IAAI,CAAC,CAAC,MAAM,uBAAuB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;QAC1D,OAAO,gBAAgB,CAAC,GAAG,OAAO,CAAC,SAAS,MAAM,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,gBAAgB,GAAG,MAAM,6BAA6B,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAClF,IAAI,gBAAgB,CAAC,WAAW,EAAE,CAAC;QACjC,OAAO,gBAAgB,CACrB,GAAG,OAAO,CAAC,SAAS,QAAQ,kBAAkB,CAAC,UAAU,CAAC,IAAI,kBAAkB,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,CACjH,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,KAAK,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"collection-list.js","sourceRoot":"","sources":["../../../src/runtime/routes/collection-list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const prerender = false;
|
|
2
|
+
import type { APIContext } from "astro";
|
|
3
|
+
/** GET /api/cms/deployment — provider-backed status for the editor's latest deploy. */
|
|
4
|
+
export declare function GET(context: APIContext): Promise<Response>;
|
|
5
|
+
//# sourceMappingURL=deployment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment.d.ts","sourceRoot":"","sources":["../../../src/runtime/routes/deployment.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,QAAQ,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAMxC,uFAAuF;AACvF,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CA6BhE"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export const prerender = false;
|
|
2
|
+
import { getEditorId, isEditorAuthenticated } from "../auth/session.js";
|
|
3
|
+
import { normalizeDeploymentEvidence } from "../deployment-status.js";
|
|
4
|
+
import { getRuntimeServices } from "../providers.js";
|
|
5
|
+
import { json } from "./_helpers.js";
|
|
6
|
+
/** GET /api/cms/deployment — provider-backed status for the editor's latest deploy. */
|
|
7
|
+
export async function GET(context) {
|
|
8
|
+
if (!isEditorAuthenticated(context))
|
|
9
|
+
return json({ error: "Unauthorized" }, 401);
|
|
10
|
+
const editorId = getEditorId(context);
|
|
11
|
+
const services = await getRuntimeServices();
|
|
12
|
+
const provider = services.deploymentStatusProvider;
|
|
13
|
+
if (!provider)
|
|
14
|
+
return json({ configured: false, state: "unknown" });
|
|
15
|
+
if (!editorId || !services.adapter.makeEditorOverlay) {
|
|
16
|
+
return json({ configured: true, state: "unknown", target: null });
|
|
17
|
+
}
|
|
18
|
+
const overlay = await services.adapter.makeEditorOverlay(editorId);
|
|
19
|
+
const target = await overlay.getDeploymentTarget?.() ?? null;
|
|
20
|
+
if (!target)
|
|
21
|
+
return json({ configured: true, state: "unknown", target: null });
|
|
22
|
+
try {
|
|
23
|
+
const evidence = await provider.getDeploymentStatus({ target, request: context.request });
|
|
24
|
+
return json(normalizeDeploymentEvidence(target, evidence));
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
console.error("[caretcms] Deployment status provider failed:", error);
|
|
28
|
+
return json({
|
|
29
|
+
configured: true,
|
|
30
|
+
state: "unknown",
|
|
31
|
+
buildId: null,
|
|
32
|
+
target,
|
|
33
|
+
checkedAt: Date.now(),
|
|
34
|
+
message: "Deployment status is temporarily unavailable",
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=deployment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment.js","sourceRoot":"","sources":["../../../src/runtime/routes/deployment.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC;AAG/B,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,uFAAuF;AACvF,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAmB;IAC3C,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,GAAG,CAAC,CAAC;IAEjF,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAC5C,MAAM,QAAQ,GAAG,QAAQ,CAAC,wBAAwB,CAAC;IACnD,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACpE,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,mBAAmB,EAAE,EAAE,IAAI,IAAI,CAAC;IAC7D,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/E,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1F,OAAO,IAAI,CAAC,2BAA2B,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,KAAK,CAAC,CAAC;QACtE,OAAO,IAAI,CAAC;YACV,UAAU,EAAE,IAAI;YAChB,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,IAAI;YACb,MAAM;YACN,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,OAAO,EAAE,8CAA8C;SACxD,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"draft.d.ts","sourceRoot":"","sources":["../../../src/runtime/routes/draft.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"draft.d.ts","sourceRoot":"","sources":["../../../src/runtime/routes/draft.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,QAAQ,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAMxC;;GAEG;AACH,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAYhE;AAED;;;;GAIG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CA6BnE"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { getRequestContext } from "../request-context.js";
|
|
2
|
+
import { canPublishOverlay } from "../publish.js";
|
|
1
3
|
export const prerender = false;
|
|
2
4
|
import { isEditorAuthenticated, getEditorId } from "../auth/session.js";
|
|
3
5
|
import { getRuntimeServices } from "../providers.js";
|
|
@@ -17,7 +19,7 @@ export async function GET(context) {
|
|
|
17
19
|
return json({ hasDrafts: false, count: 0 });
|
|
18
20
|
const overlay = await base.makeEditorOverlay(editorId);
|
|
19
21
|
const count = await countOverlayDrafts(overlay);
|
|
20
|
-
return json({ hasDrafts: count > 0, count });
|
|
22
|
+
return json({ ...(getRequestContext()?.authorize ? { canPublish: await canPublishOverlay(overlay) } : {}), hasDrafts: count > 0, count, retryRebuild: Boolean(await overlay.getRebuildReceipt?.()) });
|
|
21
23
|
}
|
|
22
24
|
/**
|
|
23
25
|
* DELETE /api/cms/draft — discard the current editor's draft(s) without
|
|
@@ -49,7 +51,12 @@ export async function DELETE(context) {
|
|
|
49
51
|
return json({ error: "Drafts are not supported by the configured storage adapter" }, 400);
|
|
50
52
|
}
|
|
51
53
|
const overlay = await base.makeEditorOverlay(editorId);
|
|
52
|
-
|
|
53
|
-
|
|
54
|
+
try {
|
|
55
|
+
const cleared = await discardOverlay(overlay, scope);
|
|
56
|
+
return json({ ok: true, cleared });
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return json({ error: "Some drafts require publish recovery. Retry Publish before discarding them." }, 409);
|
|
60
|
+
}
|
|
54
61
|
}
|
|
55
62
|
//# sourceMappingURL=draft.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"draft.js","sourceRoot":"","sources":["../../../src/runtime/routes/draft.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,kBAAkB,EAAE,cAAc,EAAqB,MAAM,eAAe,CAAC;AACtF,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAExD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAmB;IAC3C,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,GAAG,CAAC,CAAC;IAEjF,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAE3D,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,kBAAkB,EAAE,CAAC;IACrD,IAAI,CAAC,IAAI,CAAC,iBAAiB;QAAE,OAAO,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAEzE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAChD,OAAO,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"draft.js","sourceRoot":"","sources":["../../../src/runtime/routes/draft.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entries.d.ts","sourceRoot":"","sources":["../../../src/runtime/routes/entries.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,QAAQ,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"entries.d.ts","sourceRoot":"","sources":["../../../src/runtime/routes/entries.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,QAAQ,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAoFxC,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CA4FhE"}
|