@caretcms/core 0.1.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/README.md +109 -13
  2. package/dist/contracts.d.ts +1 -0
  3. package/dist/contracts.d.ts.map +1 -1
  4. package/dist/contracts.js +1 -0
  5. package/dist/contracts.js.map +1 -1
  6. package/dist/index.d.ts +31 -9
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +146 -30
  9. package/dist/index.js.map +1 -1
  10. package/dist/loader.d.ts +17 -6
  11. package/dist/loader.d.ts.map +1 -1
  12. package/dist/loader.js +57 -14
  13. package/dist/loader.js.map +1 -1
  14. package/dist/markdown/block-context.d.ts +21 -0
  15. package/dist/markdown/block-context.d.ts.map +1 -0
  16. package/dist/markdown/block-context.js +27 -0
  17. package/dist/markdown/block-context.js.map +1 -0
  18. package/dist/markdown/canonical-body.d.ts +30 -0
  19. package/dist/markdown/canonical-body.d.ts.map +1 -0
  20. package/dist/markdown/canonical-body.js +54 -0
  21. package/dist/markdown/canonical-body.js.map +1 -0
  22. package/dist/markdown/contracts.d.ts +66 -0
  23. package/dist/markdown/contracts.d.ts.map +1 -0
  24. package/dist/markdown/contracts.js +102 -0
  25. package/dist/markdown/contracts.js.map +1 -0
  26. package/dist/markdown/html-to-snodes.d.ts +26 -0
  27. package/dist/markdown/html-to-snodes.d.ts.map +1 -0
  28. package/dist/markdown/html-to-snodes.js +118 -0
  29. package/dist/markdown/html-to-snodes.js.map +1 -0
  30. package/dist/markdown/remark.d.ts +35 -0
  31. package/dist/markdown/remark.d.ts.map +1 -0
  32. package/dist/markdown/remark.js +66 -0
  33. package/dist/markdown/remark.js.map +1 -0
  34. package/dist/markdown/satteri.d.ts +19 -0
  35. package/dist/markdown/satteri.d.ts.map +1 -0
  36. package/dist/markdown/satteri.js +144 -0
  37. package/dist/markdown/satteri.js.map +1 -0
  38. package/dist/markdown/serialize.d.ts +60 -0
  39. package/dist/markdown/serialize.d.ts.map +1 -0
  40. package/dist/markdown/serialize.js +264 -0
  41. package/dist/markdown/serialize.js.map +1 -0
  42. package/dist/markdown/splice.d.ts +32 -0
  43. package/dist/markdown/splice.d.ts.map +1 -0
  44. package/dist/markdown/splice.js +44 -0
  45. package/dist/markdown/splice.js.map +1 -0
  46. package/dist/markdown/stamp.d.ts +68 -0
  47. package/dist/markdown/stamp.d.ts.map +1 -0
  48. package/dist/markdown/stamp.js +131 -0
  49. package/dist/markdown/stamp.js.map +1 -0
  50. package/dist/runtime/auth/rate-limiter.d.ts.map +1 -1
  51. package/dist/runtime/auth/rate-limiter.js +5 -0
  52. package/dist/runtime/auth/rate-limiter.js.map +1 -1
  53. package/dist/runtime/auth/session.d.ts +3 -3
  54. package/dist/runtime/auth/session.d.ts.map +1 -1
  55. package/dist/runtime/auth/session.js +68 -21
  56. package/dist/runtime/auth/session.js.map +1 -1
  57. package/dist/runtime/config.d.ts +3 -0
  58. package/dist/runtime/config.d.ts.map +1 -1
  59. package/dist/runtime/config.js +4 -1
  60. package/dist/runtime/config.js.map +1 -1
  61. package/dist/runtime/content.d.ts.map +1 -1
  62. package/dist/runtime/content.js +4 -2
  63. package/dist/runtime/content.js.map +1 -1
  64. package/dist/runtime/i18n.d.ts +86 -0
  65. package/dist/runtime/i18n.d.ts.map +1 -0
  66. package/dist/runtime/i18n.js +168 -0
  67. package/dist/runtime/i18n.js.map +1 -0
  68. package/dist/runtime/middleware.d.ts.map +1 -1
  69. package/dist/runtime/middleware.js +61 -6
  70. package/dist/runtime/middleware.js.map +1 -1
  71. package/dist/runtime/mutations/contracts.d.ts +28 -1
  72. package/dist/runtime/mutations/contracts.d.ts.map +1 -1
  73. package/dist/runtime/mutations/contracts.js +76 -0
  74. package/dist/runtime/mutations/contracts.js.map +1 -1
  75. package/dist/runtime/mutations/engine.d.ts +6 -1
  76. package/dist/runtime/mutations/engine.d.ts.map +1 -1
  77. package/dist/runtime/mutations/engine.js +271 -51
  78. package/dist/runtime/mutations/engine.js.map +1 -1
  79. package/dist/runtime/providers.d.ts +2 -1
  80. package/dist/runtime/providers.d.ts.map +1 -1
  81. package/dist/runtime/providers.js +7 -1
  82. package/dist/runtime/providers.js.map +1 -1
  83. package/dist/runtime/publish.d.ts +13 -1
  84. package/dist/runtime/publish.d.ts.map +1 -1
  85. package/dist/runtime/publish.js +80 -4
  86. package/dist/runtime/publish.js.map +1 -1
  87. package/dist/runtime/request-context.d.ts +14 -2
  88. package/dist/runtime/request-context.d.ts.map +1 -1
  89. package/dist/runtime/request-context.js +7 -1
  90. package/dist/runtime/request-context.js.map +1 -1
  91. package/dist/runtime/rewrite.d.ts.map +1 -1
  92. package/dist/runtime/rewrite.js +109 -3
  93. package/dist/runtime/rewrite.js.map +1 -1
  94. package/dist/runtime/rich-allowlist.d.ts.map +1 -1
  95. package/dist/runtime/rich-allowlist.js +5 -1
  96. package/dist/runtime/rich-allowlist.js.map +1 -1
  97. package/dist/runtime/routes/admin-entry.d.ts.map +1 -1
  98. package/dist/runtime/routes/admin-entry.js +114 -18
  99. package/dist/runtime/routes/admin-entry.js.map +1 -1
  100. package/dist/runtime/routes/admin.d.ts.map +1 -1
  101. package/dist/runtime/routes/admin.js +33 -15
  102. package/dist/runtime/routes/admin.js.map +1 -1
  103. package/dist/runtime/routes/auth-login.d.ts.map +1 -1
  104. package/dist/runtime/routes/auth-login.js +4 -0
  105. package/dist/runtime/routes/auth-login.js.map +1 -1
  106. package/dist/runtime/routes/auth-logout.d.ts.map +1 -1
  107. package/dist/runtime/routes/auth-logout.js +7 -2
  108. package/dist/runtime/routes/auth-logout.js.map +1 -1
  109. package/dist/runtime/routes/auth-session.d.ts.map +1 -1
  110. package/dist/runtime/routes/auth-session.js +4 -2
  111. package/dist/runtime/routes/auth-session.js.map +1 -1
  112. package/dist/runtime/routes/collection-list.d.ts.map +1 -1
  113. package/dist/runtime/routes/collection-list.js +64 -41
  114. package/dist/runtime/routes/collection-list.js.map +1 -1
  115. package/dist/runtime/routes/entries.d.ts.map +1 -1
  116. package/dist/runtime/routes/entries.js +16 -6
  117. package/dist/runtime/routes/entries.js.map +1 -1
  118. package/dist/runtime/routes/history.d.ts.map +1 -1
  119. package/dist/runtime/routes/history.js +50 -22
  120. package/dist/runtime/routes/history.js.map +1 -1
  121. package/dist/runtime/routes/mutate.d.ts.map +1 -1
  122. package/dist/runtime/routes/mutate.js +40 -6
  123. package/dist/runtime/routes/mutate.js.map +1 -1
  124. package/dist/runtime/routes/publish.d.ts.map +1 -1
  125. package/dist/runtime/routes/publish.js +5 -2
  126. package/dist/runtime/routes/publish.js.map +1 -1
  127. package/dist/runtime/routes/schema.d.ts.map +1 -1
  128. package/dist/runtime/routes/schema.js +11 -3
  129. package/dist/runtime/routes/schema.js.map +1 -1
  130. package/dist/runtime/routes/studio-home.d.ts.map +1 -1
  131. package/dist/runtime/routes/studio-home.js +38 -19
  132. package/dist/runtime/routes/studio-home.js.map +1 -1
  133. package/dist/runtime/routes/theme-stylesheet.d.ts.map +1 -1
  134. package/dist/runtime/routes/theme-stylesheet.js +11 -1
  135. package/dist/runtime/routes/theme-stylesheet.js.map +1 -1
  136. package/dist/runtime/schema-registry.d.ts +8 -1
  137. package/dist/runtime/schema-registry.d.ts.map +1 -1
  138. package/dist/runtime/schema-registry.js +47 -3
  139. package/dist/runtime/schema-registry.js.map +1 -1
  140. package/dist/runtime/storage/atomic-write.d.ts.map +1 -1
  141. package/dist/runtime/storage/atomic-write.js +8 -3
  142. package/dist/runtime/storage/atomic-write.js.map +1 -1
  143. package/dist/runtime/storage/markdown-adapter.d.ts +19 -0
  144. package/dist/runtime/storage/markdown-adapter.d.ts.map +1 -1
  145. package/dist/runtime/storage/markdown-adapter.js +41 -0
  146. package/dist/runtime/storage/markdown-adapter.js.map +1 -1
  147. package/dist/runtime/storage/session-overlay-adapter.d.ts +8 -0
  148. package/dist/runtime/storage/session-overlay-adapter.d.ts.map +1 -1
  149. package/dist/runtime/storage/session-overlay-adapter.js +24 -2
  150. package/dist/runtime/storage/session-overlay-adapter.js.map +1 -1
  151. package/dist/runtime/themes/preset-tokens.js +4 -4
  152. package/dist/runtime/themes/preset-tokens.js.map +1 -1
  153. package/dist/runtime/utils.d.ts +10 -0
  154. package/dist/runtime/utils.d.ts.map +1 -1
  155. package/dist/runtime/utils.js +16 -0
  156. package/dist/runtime/utils.js.map +1 -1
  157. package/dist/runtime/views/studio-layout.d.ts +3 -0
  158. package/dist/runtime/views/studio-layout.d.ts.map +1 -1
  159. package/dist/runtime/views/studio-layout.js +36 -13
  160. package/dist/runtime/views/studio-layout.js.map +1 -1
  161. package/dist/schema-utils.d.ts +7 -0
  162. package/dist/schema-utils.d.ts.map +1 -1
  163. package/dist/schema-utils.js +143 -0
  164. package/dist/schema-utils.js.map +1 -1
  165. package/dist/types.d.ts +83 -1
  166. package/dist/types.d.ts.map +1 -1
  167. package/package.json +2 -2
  168. package/static/cms/admin-entry.css +135 -13
  169. package/static/cms/admin-entry.js +509 -86
  170. package/static/cms/editor/guards.js +1 -1
  171. package/static/cms/editor/image-edit.js +42 -11
  172. package/static/cms/editor/image.css +7 -1
  173. package/static/cms/editor/md-block-edit.js +176 -0
  174. package/static/cms/editor/md-serialize.js +301 -0
  175. package/static/cms/editor/panel.css +69 -25
  176. package/static/cms/editor/panel.js +58 -1
  177. package/static/cms/editor/rich-toolbar.js +4 -3
  178. package/static/cms/editor/sanitize.js +2 -1
  179. package/static/cms/editor/sync.js +277 -56
  180. package/static/cms/editor/text-edit.js +68 -17
  181. package/static/cms/editor/text-link-interactions.js +4 -4
  182. package/static/cms/editor/toast.css +114 -2
  183. package/static/cms/editor/toast.js +121 -22
  184. package/static/cms/editor/tokens-and-text.css +73 -3
  185. package/static/cms/editor/toolbar.css +19 -6
  186. package/static/cms/editor/toolbar.js +64 -23
  187. package/static/cms/editor.css +1 -1
  188. package/static/cms/editor.js +14 -3
  189. package/static/cms/studio-tokens.css +4 -4
  190. package/static/cms/studio.css +24 -0
@@ -1,5 +1,15 @@
1
1
  import { setNestedValue } from "../utils.js";
2
+ import { sanitizeHtml } from "../sanitize-html.js";
3
+ import { canonicalBody } from "../../markdown/canonical-body.js";
4
+ import { BODY_OVERLAY_KEY, fnv1a32 } from "../../markdown/contracts.js";
5
+ import { deriveBlockContext } from "../../markdown/block-context.js";
6
+ import { htmlToSNodes, HtmlParseError } from "../../markdown/html-to-snodes.js";
7
+ import { serializeBlock, SerializeError } from "../../markdown/serialize.js";
2
8
  import { parseMutationCommand, isRecord, } from "./contracts.js";
9
+ import { resolveCollectionStudioConfig } from "../schema-registry.js";
10
+ import { getRegisteredSchema } from "../schema-registry.js";
11
+ import { validateJsonSchema } from "../../schema-utils.js";
12
+ import { getRequestContext } from "../request-context.js";
3
13
  /**
4
14
  * Per-key chained-promise serializer. Used so an entire
5
15
  * `getRevision → writeEntry → bumpRevision` sequence runs atomically
@@ -11,11 +21,19 @@ const mutationLocks = new Map();
11
21
  function withLock(key, task) {
12
22
  const previous = mutationLocks.get(key) ?? Promise.resolve();
13
23
  const next = previous.then(task, task);
14
- mutationLocks.set(key, next.finally(() => {
15
- if (mutationLocks.get(key) === next) {
24
+ // The value stored for the NEXT waiter must never reject: a rejected stored
25
+ // promise with no attached handler surfaces as a process-level unhandled
26
+ // rejection when `task` throws (e.g. a full or read-only disk). Chain the
27
+ // queue on a settled gate that swallows the rejection; the CALLER still
28
+ // observes `next` with its rejection intact. Mirrors the tail pattern in
29
+ // quota-upload-handler.ts.
30
+ const gate = next.then(() => { }, () => { });
31
+ const stored = gate.then(() => {
32
+ if (mutationLocks.get(key) === stored) {
16
33
  mutationLocks.delete(key);
17
34
  }
18
- }));
35
+ });
36
+ mutationLocks.set(key, stored);
19
37
  return next;
20
38
  }
21
39
  /**
@@ -54,6 +72,86 @@ function fail(status, error, extra) {
54
72
  },
55
73
  };
56
74
  }
75
+ async function appendHistory(adapter, collection, id, entry) {
76
+ const context = getRequestContext();
77
+ const editor = context?.identity ?? (context?.editorId ? { id: context.editorId } : null);
78
+ await adapter.appendHistory(collection, id, {
79
+ ...entry,
80
+ ...(editor ? { editor } : {}),
81
+ });
82
+ }
83
+ async function enforceCollectionCapabilities(adapter, command) {
84
+ if (command.type === "delete_collection") {
85
+ const config = await resolveCollectionStudioConfig(adapter, command.id);
86
+ if (config.deletable === false || config.singletonId) {
87
+ return fail(403, `Collection "${command.id}" cannot be deleted`);
88
+ }
89
+ return null;
90
+ }
91
+ if (!("collection" in command))
92
+ return null;
93
+ const config = await resolveCollectionStudioConfig(adapter, command.collection);
94
+ const id = "id" in command && typeof command.id === "string" ? command.id : null;
95
+ if (config.singletonId && id && id !== config.singletonId) {
96
+ return fail(403, `Collection "${command.collection}" only allows entry "${config.singletonId}"`);
97
+ }
98
+ if (command.type === "delete_entry" && (config.deletable === false || config.singletonId)) {
99
+ return fail(403, `Entries in collection "${command.collection}" cannot be deleted`);
100
+ }
101
+ if (command.type === "reorder_entries" && config.orderable === false) {
102
+ return fail(403, `Collection "${command.collection}" cannot be reordered`);
103
+ }
104
+ if (id
105
+ && config.creatable === false
106
+ && ["put_entry", "save_field", "update_page_layout", "md_block"].includes(command.type)) {
107
+ const exists = await adapter.getEntry(command.collection, id);
108
+ const initializingSingleton = config.singletonId === id;
109
+ if (!exists && !initializingSingleton) {
110
+ return fail(403, `New entries cannot be created in collection "${command.collection}"`);
111
+ }
112
+ }
113
+ return null;
114
+ }
115
+ async function collectionSchema(adapter, collection) {
116
+ const registered = getRegisteredSchema(collection);
117
+ if (registered)
118
+ return registered.schema;
119
+ return (await adapter.getCollectionMetadata(collection))?.schema ?? null;
120
+ }
121
+ function schemaAtPath(schema, path) {
122
+ let current = schema;
123
+ for (const segment of path.split(".")) {
124
+ if (!current)
125
+ return null;
126
+ current = /^\d+$/.test(segment)
127
+ ? current.items
128
+ : current.properties?.[segment];
129
+ }
130
+ return current ?? null;
131
+ }
132
+ function coerceFieldValue(value, schema) {
133
+ if (!schema)
134
+ return value;
135
+ if (schema.type === "number" || schema.type === "integer") {
136
+ const parsed = Number(value);
137
+ return value.trim() !== "" && Number.isFinite(parsed) ? parsed : value;
138
+ }
139
+ if (schema.type === "boolean") {
140
+ if (value === "true")
141
+ return true;
142
+ if (value === "false")
143
+ return false;
144
+ }
145
+ return value;
146
+ }
147
+ function validateEntry(schema, data) {
148
+ if (!schema)
149
+ return null;
150
+ const issues = validateJsonSchema(data, schema);
151
+ return issues.length > 0
152
+ ? fail(400, "Entry does not match collection schema", { issues })
153
+ : null;
154
+ }
57
155
  async function ensureExpectedRevisionMatches(adapter, collection, id, expectedRevision) {
58
156
  const currentRevision = await adapter.getRevision(collection, id);
59
157
  if (expectedRevision !== undefined && expectedRevision !== currentRevision) {
@@ -71,19 +169,23 @@ async function applySaveField(adapter, command) {
71
169
  if (!revision.ok)
72
170
  return revision.result;
73
171
  const before = (await adapter.getEntry(collection, id))?.data ?? {};
74
- const current = { ...before };
172
+ const current = structuredClone(before);
173
+ const schema = await collectionSchema(adapter, collection);
75
174
  try {
76
- setNestedValue(current, field, value);
175
+ setNestedValue(current, field, coerceFieldValue(value, schema ? schemaAtPath(schema, field) : null));
77
176
  }
78
177
  catch (error) {
79
178
  const message = error instanceof Error ? error.message : "Set failed";
80
179
  return fail(400, message);
81
180
  }
181
+ const validationFailure = validateEntry(schema, current);
182
+ if (validationFailure)
183
+ return validationFailure;
82
184
  // Write first, then record history. If the write throws we surface the
83
185
  // error without leaving a history event for a save that never landed.
84
186
  await adapter.writeEntry(collection, id, current);
85
187
  const nextRevision = await adapter.bumpRevision(collection, id);
86
- await adapter.appendHistory(collection, id, {
188
+ await appendHistory(adapter, collection, id, {
87
189
  ts: Date.now(),
88
190
  action: "save",
89
191
  data: before,
@@ -98,10 +200,21 @@ async function applyPutEntry(adapter, command) {
98
200
  if (!revision.ok)
99
201
  return revision.result;
100
202
  const before = (await adapter.getEntry(collection, id))?.data ?? null;
101
- await adapter.writeEntry(collection, id, data);
203
+ // Carry drafted body blocks forward. The Studio form's payload never
204
+ // contains __body (read boundaries strip it and the parse contract rejects
205
+ // it), so a full-entry save must not clobber body drafts already stored in
206
+ // the overlay — a frontmatter edit and an inline body edit are separate
207
+ // concerns that both live on the same draft record.
208
+ const write = before && before[BODY_OVERLAY_KEY] !== undefined
209
+ ? { ...data, [BODY_OVERLAY_KEY]: before[BODY_OVERLAY_KEY] }
210
+ : data;
211
+ const validationFailure = validateEntry(await collectionSchema(adapter, collection), data);
212
+ if (validationFailure)
213
+ return validationFailure;
214
+ await adapter.writeEntry(collection, id, write);
102
215
  const nextRevision = await adapter.bumpRevision(collection, id);
103
216
  if (before !== null) {
104
- await adapter.appendHistory(collection, id, {
217
+ await appendHistory(adapter, collection, id, {
105
218
  ts: Date.now(),
106
219
  action: "put",
107
220
  data: before,
@@ -120,7 +233,7 @@ async function applyDeleteEntry(adapter, command) {
120
233
  await adapter.deleteEntry(collection, id);
121
234
  const nextRevision = await adapter.bumpRevision(collection, id);
122
235
  if (before !== null) {
123
- await adapter.appendHistory(collection, id, {
236
+ await appendHistory(adapter, collection, id, {
124
237
  ts: Date.now(),
125
238
  action: "delete",
126
239
  data: before,
@@ -151,15 +264,29 @@ async function applyReorderEntries(adapter, command) {
151
264
  }
152
265
  currentById.set(item.id, { data: entry.data, revision });
153
266
  }
154
- const revisions = {};
267
+ const schema = await collectionSchema(adapter, collection);
268
+ const pending = new Map();
155
269
  for (const item of items) {
156
270
  const current = currentById.get(item.id);
157
271
  if (!current)
158
272
  return fail(500, "Failed to load reorder item");
159
273
  const nextData = { ...current.data, order: item.order };
274
+ const validationFailure = validateEntry(schema, nextData);
275
+ if (validationFailure)
276
+ return validationFailure;
277
+ pending.set(item.id, nextData);
278
+ }
279
+ // Validate the complete batch before writing any member so one invalid
280
+ // entry cannot leave a partially reordered collection behind.
281
+ const revisions = {};
282
+ for (const item of items) {
283
+ const current = currentById.get(item.id);
284
+ const nextData = pending.get(item.id);
285
+ if (!current || !nextData)
286
+ return fail(500, "Failed to prepare reorder item");
160
287
  await adapter.writeEntry(collection, item.id, nextData);
161
288
  revisions[item.id] = await adapter.bumpRevision(collection, item.id);
162
- await adapter.appendHistory(collection, item.id, {
289
+ await appendHistory(adapter, collection, item.id, {
163
290
  ts: Date.now(),
164
291
  action: "reorder",
165
292
  data: current.data,
@@ -189,7 +316,7 @@ async function applyUpdatePageLayout(adapter, command) {
189
316
  current.layout = layout;
190
317
  await adapter.writeEntry(collection, id, current);
191
318
  const nextRevision = await adapter.bumpRevision(collection, id);
192
- await adapter.appendHistory(collection, id, {
319
+ await appendHistory(adapter, collection, id, {
193
320
  ts: Date.now(),
194
321
  action: "put",
195
322
  data: before,
@@ -197,56 +324,149 @@ async function applyUpdatePageLayout(adapter, command) {
197
324
  return { ok: true, body: { ok: true, revision: nextRevision } };
198
325
  });
199
326
  }
327
+ /**
328
+ * Store one edited markdown body block in the entry's draft data under the
329
+ * reserved `__body` key. The adapter here is ALWAYS the editor's draft overlay
330
+ * (the route builds it explicitly) — the base markdown adapter serializes
331
+ * entry data into frontmatter, where `__body` must never land.
332
+ *
333
+ * Trust model: the client sends only HTML. It is re-sanitized against the rich
334
+ * allowlist, parsed into the closed inline set, and the markdown that publish
335
+ * will eventually splice into the source file is derived HERE — a client can't
336
+ * inject raw markdown (and thus raw HTML blocks) into anyone's `.md`. The
337
+ * block's identity is proven by hashing the current source at the claimed
338
+ * range; any drift (external edit, prior publish) fails 409 and the client
339
+ * re-reads the freshly stamped page.
340
+ */
341
+ async function applyMdBlock(adapter, command, options) {
342
+ const { collection, id, blockPath, src, html, expectedRevision } = command;
343
+ return withLock(entryKey(collection, id), async () => {
344
+ const revision = await ensureExpectedRevisionMatches(adapter, collection, id, expectedRevision);
345
+ if (!revision.ok)
346
+ return revision.result;
347
+ if (typeof adapter.readBodySource !== "function") {
348
+ return fail(400, "Body editing requires a source-file storage adapter");
349
+ }
350
+ const file = await adapter.readBodySource(collection, id);
351
+ if (file === null)
352
+ return fail(404, "Entry source not found");
353
+ const { body } = canonicalBody(file);
354
+ if (src.end > body.length || fnv1a32(body.slice(src.start, src.end)) !== src.hash) {
355
+ return fail(409, "Body block is stale", { currentRevision: revision.currentRevision });
356
+ }
357
+ const clean = sanitizeHtml(html, { allowedClasses: options?.allowedClasses });
358
+ let md;
359
+ try {
360
+ md = serializeBlock(htmlToSNodes(clean), deriveBlockContext(body, src));
361
+ }
362
+ catch (error) {
363
+ if (error instanceof SerializeError || error instanceof HtmlParseError) {
364
+ return fail(400, error.message);
365
+ }
366
+ throw error;
367
+ }
368
+ // The source file exists (readBodySource succeeded above), so a null entry
369
+ // here means the entry is DRAFT-DELETED (the overlay hides it behind a
370
+ // tombstone). Writing a body draft would silently resurrect it.
371
+ const beforeEntry = await adapter.getEntry(collection, id);
372
+ if (beforeEntry === null) {
373
+ return fail(409, "Entry was deleted in this draft — publish or discard the deletion first", {
374
+ currentRevision: revision.currentRevision,
375
+ });
376
+ }
377
+ const before = beforeEntry.data;
378
+ // Write back the overlay's OWN prior data (draft deltas) plus this block —
379
+ // NEVER a base frontmatter snapshot. Snapshotting base here is what let a
380
+ // later publish flush stale frontmatter over a field edited straight to
381
+ // base in the meantime (Studio field saves bypass the overlay in server
382
+ // delivery). Fall back to the merged entry for non-overlay adapters, which
383
+ // have no separate base to protect.
384
+ const overlayRead = adapter;
385
+ const ownData = typeof overlayRead.getOwnEntry === "function"
386
+ ? (await overlayRead.getOwnEntry(collection, id))?.data ?? {}
387
+ : before;
388
+ const current = { ...ownData };
389
+ const drafts = isRecord(current[BODY_OVERLAY_KEY])
390
+ ? { ...current[BODY_OVERLAY_KEY] }
391
+ : {};
392
+ // blockPath is /^\d+(\.\d+)*$/ by the parse contract — safe as an own key.
393
+ drafts[blockPath] = { md, html: clean, src, ts: Date.now() };
394
+ current[BODY_OVERLAY_KEY] = drafts;
395
+ await adapter.writeEntry(collection, id, current);
396
+ const nextRevision = await adapter.bumpRevision(collection, id);
397
+ await appendHistory(adapter, collection, id, {
398
+ ts: Date.now(),
399
+ action: "save",
400
+ data: before,
401
+ });
402
+ return { ok: true, body: { ok: true, revision: nextRevision } };
403
+ });
404
+ }
200
405
  async function applyCreateCollection(adapter, command) {
201
- const { id, label, description, icon, creatable, orderable, schema } = command;
202
- // Check if collection already exists
203
- const exists = await adapter.isKnownCollection(id);
204
- if (exists) {
205
- return fail(409, `Collection "${id}" already exists`);
206
- }
207
- const metadata = {
208
- id,
209
- label,
210
- description,
211
- icon,
212
- creatable: creatable ?? true,
213
- orderable: orderable ?? false,
214
- schema,
215
- created_at: Date.now(),
216
- updated_at: Date.now(),
217
- };
218
- try {
219
- await adapter.createCollection(metadata);
220
- return { ok: true, body: { ok: true } };
221
- }
222
- catch (error) {
223
- const message = error instanceof Error ? error.message : "Failed to create collection";
224
- return fail(500, message);
225
- }
406
+ const { id, label, description, icon, creatable, orderable, deletable, singletonId, order, schema, } = command;
407
+ // Hold the collection lock so the exists-check → create is atomic (two
408
+ // concurrent creates can't both pass the check) and serializes against a
409
+ // concurrent delete_collection / reorder_entries on the same collection.
410
+ return withLock(collectionKey(id), async () => {
411
+ const exists = await adapter.isKnownCollection(id);
412
+ if (exists) {
413
+ return fail(409, `Collection "${id}" already exists`);
414
+ }
415
+ const metadata = {
416
+ id,
417
+ label,
418
+ description,
419
+ icon,
420
+ creatable: creatable ?? true,
421
+ orderable: orderable ?? false,
422
+ deletable: deletable ?? true,
423
+ singletonId,
424
+ order,
425
+ schema,
426
+ created_at: Date.now(),
427
+ updated_at: Date.now(),
428
+ };
429
+ try {
430
+ await adapter.createCollection(metadata);
431
+ return { ok: true, body: { ok: true } };
432
+ }
433
+ catch (error) {
434
+ const message = error instanceof Error ? error.message : "Failed to create collection";
435
+ return fail(500, message);
436
+ }
437
+ });
226
438
  }
227
439
  async function applyDeleteCollection(adapter, command) {
228
440
  const { id } = command;
229
- // Check if collection exists
230
- const exists = await adapter.isKnownCollection(id);
231
- if (!exists) {
232
- return fail(404, `Collection "${id}" not found`);
233
- }
234
- try {
235
- await adapter.deleteCollection(id);
236
- return { ok: true, body: { ok: true } };
237
- }
238
- catch (error) {
239
- const message = error instanceof Error ? error.message : "Failed to delete collection";
240
- return fail(500, message);
241
- }
441
+ // Hold the collection lock (same key reorder_entries acquires) so a delete
442
+ // can't interleave with an in-flight reorder/create on the same collection.
443
+ return withLock(collectionKey(id), async () => {
444
+ const exists = await adapter.isKnownCollection(id);
445
+ if (!exists) {
446
+ return fail(404, `Collection "${id}" not found`);
447
+ }
448
+ try {
449
+ await adapter.deleteCollection(id);
450
+ return { ok: true, body: { ok: true } };
451
+ }
452
+ catch (error) {
453
+ const message = error instanceof Error ? error.message : "Failed to delete collection";
454
+ return fail(500, message);
455
+ }
456
+ });
242
457
  }
243
- export async function executeMutation(adapter, input) {
458
+ export async function executeMutation(adapter, input, options) {
244
459
  const parsed = await parseMutationCommand(adapter, input);
245
460
  if (!parsed.ok) {
246
461
  return fail(400, "Invalid mutation command", { issues: parsed.issues });
247
462
  }
248
463
  const command = parsed.command;
464
+ const capabilityFailure = await enforceCollectionCapabilities(adapter, command);
465
+ if (capabilityFailure)
466
+ return capabilityFailure;
249
467
  switch (command.type) {
468
+ case "md_block":
469
+ return applyMdBlock(adapter, command, options);
250
470
  case "save_field":
251
471
  return applySaveField(adapter, command);
252
472
  case "put_entry":
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/runtime/mutations/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/runtime/mutations/engine.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
- import type { StorageAdapter, UploadHandler } from "../types.js";
1
+ import type { IdentityAdapter, StorageAdapter, UploadHandler } from "../types.js";
2
2
  type RuntimeServices = {
3
3
  adapter: StorageAdapter;
4
4
  uploadHandler: UploadHandler;
5
+ identityAdapter: IdentityAdapter | null;
5
6
  /** Per-tag class allowlist for rich-text sanitization (from caret() config). */
6
7
  allowedClasses: Record<string, string[]>;
7
8
  delivery: {
@@ -1 +1 @@
1
- {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/runtime/providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AASjE,KAAK,eAAe,GAAG;IACrB,OAAO,EAAE,cAAc,CAAC;IACxB,aAAa,EAAE,aAAa,CAAC;IAC7B,gFAAgF;IAChF,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACzC,QAAQ,EAAE;QACR,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;QAC1B,IAAI,EAAE,OAAO,CAAC;QACd,OAAO,EAAE;YACP,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;YAC1B,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;YACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SACjC,CAAC;KACH,CAAC;IACF,gFAAgF;IAChF,kBAAkB,EAAE,OAAO,CAAC;IAC5B,+EAA+E;IAC/E,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAoCF,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,eAAe,CAAC,CAkCnE;AAED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI,GACxC,IAAI,CAGN"}
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/runtime/providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AASlF,KAAK,eAAe,GAAG;IACrB,OAAO,EAAE,cAAc,CAAC;IACxB,aAAa,EAAE,aAAa,CAAC;IAC7B,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,gFAAgF;IAChF,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACzC,QAAQ,EAAE;QACR,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;QAC1B,IAAI,EAAE,OAAO,CAAC;QACd,OAAO,EAAE;YACP,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;YAC1B,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;YACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SACjC,CAAC;KACH,CAAC;IACF,gFAAgF;IAChF,kBAAkB,EAAE,OAAO,CAAC;IAC5B,+EAA+E;IAC/E,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAyCF,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,eAAe,CAAC,CAmCnE;AAED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI,GACxC,IAAI,CAGN"}
@@ -26,11 +26,17 @@ async function createUploadHandler() {
26
26
  }
27
27
  throw new Error("[caretcms] No upload provider was configured for the active runtime mode.");
28
28
  }
29
+ async function createIdentityAdapter() {
30
+ if (testServicesOverride?.identityAdapter)
31
+ return testServicesOverride.identityAdapter;
32
+ return await providerModule?.loadConfiguredIdentityAdapter?.() ?? null;
33
+ }
29
34
  export async function getRuntimeServices() {
30
35
  if (!runtimeServicesPromise) {
31
- const inflight = Promise.all([createAdapter(), createUploadHandler()]).then(([adapter, uploadHandler]) => ({
36
+ const inflight = Promise.all([createAdapter(), createUploadHandler(), createIdentityAdapter()]).then(([adapter, uploadHandler, identityAdapter]) => ({
32
37
  adapter,
33
38
  uploadHandler,
39
+ identityAdapter,
34
40
  allowedClasses: testServicesOverride?.allowedClasses ?? providerModule?.allowedClasses ?? {},
35
41
  delivery: testServicesOverride?.delivery ??
36
42
  providerModule?.delivery ?? {
@@ -1 +1 @@
1
- {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/runtime/providers.ts"],"names":[],"mappings":"AACA,+EAA+E;AAC/E,8EAA8E;AAC9E,+EAA+E;AAC/E,2EAA2E;AAC3E,OAAO,KAAK,gBAAgB,MAAM,4BAA4B,CAAC;AAyB/D,IAAI,sBAAsB,GAAoC,IAAI,CAAC;AACnE,IAAI,oBAAoB,GAAoC,IAAI,CAAC;AACjE,MAAM,cAAc,GAAG,gBAAkC,CAAC;AAE1D,KAAK,UAAU,aAAa;IAC1B,IAAI,oBAAoB,EAAE,OAAO,EAAE,CAAC;QAClC,OAAO,oBAAoB,CAAC,OAAO,CAAC;IACtC,CAAC;IAED,MAAM,iBAAiB,GAAG,MAAM,cAAc,EAAE,qBAAqB,EAAE,EAAE,CAAC;IAC1E,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,mBAAmB;IAChC,IAAI,oBAAoB,EAAE,aAAa,EAAE,CAAC;QACxC,OAAO,oBAAoB,CAAC,aAAa,CAAC;IAC5C,CAAC;IAED,MAAM,uBAAuB,GAAG,MAAM,cAAc,EAAE,2BAA2B,EAAE,EAAE,CAAC;IACtF,IAAI,uBAAuB,EAAE,CAAC;QAC5B,OAAO,uBAAuB,CAAC;IACjC,CAAC;IAED,MAAM,IAAI,KAAK,CACb,2EAA2E,CAC5E,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,IAAI,CACzE,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7B,OAAO;YACP,aAAa;YACb,cAAc,EACZ,oBAAoB,EAAE,cAAc,IAAI,cAAc,EAAE,cAAc,IAAI,EAAE;YAC9E,QAAQ,EACN,oBAAoB,EAAE,QAAQ;gBAC9B,cAAc,EAAE,QAAQ,IAAI;gBAC1B,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;aAC3D;YACH,kBAAkB,EAChB,oBAAoB,EAAE,kBAAkB;gBACxC,cAAc,EAAE,kBAAkB;gBAClC,KAAK;YACP,SAAS,EACP,oBAAoB,EAAE,SAAS,IAAI,cAAc,EAAE,SAAS,IAAI,QAAQ;YAC1E,WAAW,EACT,oBAAoB,EAAE,WAAW,IAAI,cAAc,EAAE,WAAW,IAAI,UAAU;SACjF,CAAC,CACH,CAAC;QACF,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE;YAClB,IAAI,sBAAsB,KAAK,QAAQ,EAAE,CAAC;gBACxC,sBAAsB,GAAG,IAAI,CAAC;YAChC,CAAC;QACH,CAAC,CAAC,CAAC;QACH,sBAAsB,GAAG,QAAQ,CAAC;IACpC,CAAC;IAED,OAAO,sBAAsB,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,QAAyC;IAEzC,oBAAoB,GAAG,QAAQ,CAAC;IAChC,sBAAsB,GAAG,IAAI,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/runtime/providers.ts"],"names":[],"mappings":"AACA,+EAA+E;AAC/E,8EAA8E;AAC9E,+EAA+E;AAC/E,2EAA2E;AAC3E,OAAO,KAAK,gBAAgB,MAAM,4BAA4B,CAAC;AA0B/D,IAAI,sBAAsB,GAAoC,IAAI,CAAC;AACnE,IAAI,oBAAoB,GAAoC,IAAI,CAAC;AACjE,MAAM,cAAc,GAAG,gBAAkC,CAAC;AAE1D,KAAK,UAAU,aAAa;IAC1B,IAAI,oBAAoB,EAAE,OAAO,EAAE,CAAC;QAClC,OAAO,oBAAoB,CAAC,OAAO,CAAC;IACtC,CAAC;IAED,MAAM,iBAAiB,GAAG,MAAM,cAAc,EAAE,qBAAqB,EAAE,EAAE,CAAC;IAC1E,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,mBAAmB;IAChC,IAAI,oBAAoB,EAAE,aAAa,EAAE,CAAC;QACxC,OAAO,oBAAoB,CAAC,aAAa,CAAC;IAC5C,CAAC;IAED,MAAM,uBAAuB,GAAG,MAAM,cAAc,EAAE,2BAA2B,EAAE,EAAE,CAAC;IACtF,IAAI,uBAAuB,EAAE,CAAC;QAC5B,OAAO,uBAAuB,CAAC;IACjC,CAAC;IAED,MAAM,IAAI,KAAK,CACb,2EAA2E,CAC5E,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,qBAAqB;IAClC,IAAI,oBAAoB,EAAE,eAAe;QAAE,OAAO,oBAAoB,CAAC,eAAe,CAAC;IACvF,OAAO,MAAM,cAAc,EAAE,6BAA6B,EAAE,EAAE,IAAI,IAAI,CAAC;AACzE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,mBAAmB,EAAE,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC,IAAI,CAClG,CAAC,CAAC,OAAO,EAAE,aAAa,EAAE,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9C,OAAO;YACP,aAAa;YACb,eAAe;YACf,cAAc,EACZ,oBAAoB,EAAE,cAAc,IAAI,cAAc,EAAE,cAAc,IAAI,EAAE;YAC9E,QAAQ,EACN,oBAAoB,EAAE,QAAQ;gBAC9B,cAAc,EAAE,QAAQ,IAAI;gBAC1B,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;aAC3D;YACH,kBAAkB,EAChB,oBAAoB,EAAE,kBAAkB;gBACxC,cAAc,EAAE,kBAAkB;gBAClC,KAAK;YACP,SAAS,EACP,oBAAoB,EAAE,SAAS,IAAI,cAAc,EAAE,SAAS,IAAI,QAAQ;YAC1E,WAAW,EACT,oBAAoB,EAAE,WAAW,IAAI,cAAc,EAAE,WAAW,IAAI,UAAU;SACjF,CAAC,CACH,CAAC;QACF,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE;YAClB,IAAI,sBAAsB,KAAK,QAAQ,EAAE,CAAC;gBACxC,sBAAsB,GAAG,IAAI,CAAC;YAChC,CAAC;QACH,CAAC,CAAC,CAAC;QACH,sBAAsB,GAAG,QAAQ,CAAC;IACpC,CAAC;IAED,OAAO,sBAAsB,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,QAAyC;IAEzC,oBAAoB,GAAG,QAAQ,CAAC;IAChC,sBAAsB,GAAG,IAAI,CAAC;AAChC,CAAC"}
@@ -19,6 +19,18 @@ export interface PublishedEntry {
19
19
  revision: number;
20
20
  deleted: boolean;
21
21
  }
22
+ export interface PublishConflict {
23
+ collection: string;
24
+ id: string;
25
+ /** `stale_body` = the source file changed since the body draft was made;
26
+ * `invalid_body` = the draft's body map is corrupt or the adapter can't
27
+ * splice. The entry was NOT published and its draft is preserved. */
28
+ reason: "stale_body" | "invalid_body";
29
+ }
30
+ export interface PublishOutcome {
31
+ published: PublishedEntry[];
32
+ conflicts: PublishConflict[];
33
+ }
22
34
  /**
23
35
  * Flush the overlay into the base. A tombstoned draft entry deletes from the
24
36
  * base; any other draft entry is written, the base revision bumped, and a
@@ -31,7 +43,7 @@ export interface PublishedEntry {
31
43
  * failure the returned list reflects exactly what was committed. Callers that
32
44
  * surface "publish all" should report that list.
33
45
  */
34
- export declare function publishOverlay(base: StorageAdapter, overlay: StorageAdapter, scope?: PublishScope): Promise<PublishedEntry[]>;
46
+ export declare function publishOverlay(base: StorageAdapter, overlay: StorageAdapter, scope?: PublishScope): Promise<PublishOutcome>;
35
47
  /** Count draft entries currently held in an editor overlay. */
36
48
  export declare function countOverlayDrafts(overlay: StorageAdapter, scope?: PublishScope): Promise<number>;
37
49
  /** Discard an editor's draft(s) within scope without touching the base. Returns
@@ -1 +1 @@
1
- {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/runtime/publish.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD,MAAM,WAAW,YAAY;IAC3B,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAyBD;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,cAAc,EACvB,KAAK,GAAE,YAAiB,GACvB,OAAO,CAAC,cAAc,EAAE,CAAC,CA8B3B;AAED,+DAA+D;AAC/D,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,cAAc,EACvB,KAAK,GAAE,YAAiB,GACvB,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED;6CAC6C;AAC7C,wBAAsB,cAAc,CAClC,OAAO,EAAE,cAAc,EACvB,KAAK,GAAE,YAAiB,GACvB,OAAO,CAAC,MAAM,CAAC,CAMjB"}
1
+ {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/runtime/publish.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAMlD,MAAM,WAAW,YAAY;IAC3B,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX;;0EAEsE;IACtE,MAAM,EAAE,YAAY,GAAG,cAAc,CAAC;CACvC;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,SAAS,EAAE,eAAe,EAAE,CAAC;CAC9B;AAoDD;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,cAAc,EACvB,KAAK,GAAE,YAAiB,GACvB,OAAO,CAAC,cAAc,CAAC,CAgFzB;AAED,+DAA+D;AAC/D,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,cAAc,EACvB,KAAK,GAAE,YAAiB,GACvB,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED;6CAC6C;AAC7C,wBAAsB,cAAc,CAClC,OAAO,EAAE,cAAc,EACvB,KAAK,GAAE,YAAiB,GACvB,OAAO,CAAC,MAAM,CAAC,CAMjB"}