@micacms/runtime 0.2.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 +16 -0
- package/dist/app.d.ts +62 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +107 -0
- package/dist/app.js.map +1 -0
- package/dist/config.d.ts +187 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +154 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +121 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +117 -0
- package/dist/context.js.map +1 -0
- package/dist/db/driver.d.ts +35 -0
- package/dist/db/driver.d.ts.map +1 -0
- package/dist/db/driver.js +95 -0
- package/dist/db/driver.js.map +1 -0
- package/dist/http.d.ts +40 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +38 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/errors.d.ts +39 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +52 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/file-type.d.ts +26 -0
- package/dist/lib/file-type.d.ts.map +1 -0
- package/dist/lib/file-type.js +89 -0
- package/dist/lib/file-type.js.map +1 -0
- package/dist/lib/git.d.ts +29 -0
- package/dist/lib/git.d.ts.map +1 -0
- package/dist/lib/git.js +62 -0
- package/dist/lib/git.js.map +1 -0
- package/dist/lib/id.d.ts +13 -0
- package/dist/lib/id.d.ts.map +1 -0
- package/dist/lib/id.js +56 -0
- package/dist/lib/id.js.map +1 -0
- package/dist/lib/logger.d.ts +20 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +65 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/ports.d.ts +17 -0
- package/dist/lib/ports.d.ts.map +1 -0
- package/dist/lib/ports.js +17 -0
- package/dist/lib/ports.js.map +1 -0
- package/dist/lib/rate-limit.d.ts +29 -0
- package/dist/lib/rate-limit.d.ts.map +1 -0
- package/dist/lib/rate-limit.js +47 -0
- package/dist/lib/rate-limit.js.map +1 -0
- package/dist/lib/schema-stats.d.ts +64 -0
- package/dist/lib/schema-stats.d.ts.map +1 -0
- package/dist/lib/schema-stats.js +103 -0
- package/dist/lib/schema-stats.js.map +1 -0
- package/dist/lib/version.d.ts +14 -0
- package/dist/lib/version.d.ts.map +1 -0
- package/dist/lib/version.js +25 -0
- package/dist/lib/version.js.map +1 -0
- package/dist/middleware/index.d.ts +41 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +142 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/routes/admin-content.d.ts +22 -0
- package/dist/routes/admin-content.d.ts.map +1 -0
- package/dist/routes/admin-content.js +194 -0
- package/dist/routes/admin-content.js.map +1 -0
- package/dist/routes/admin-media.d.ts +19 -0
- package/dist/routes/admin-media.d.ts.map +1 -0
- package/dist/routes/admin-media.js +81 -0
- package/dist/routes/admin-media.js.map +1 -0
- package/dist/routes/admin-spa.d.ts +13 -0
- package/dist/routes/admin-spa.d.ts.map +1 -0
- package/dist/routes/admin-spa.js +72 -0
- package/dist/routes/admin-spa.js.map +1 -0
- package/dist/routes/admin-staging.d.ts +15 -0
- package/dist/routes/admin-staging.d.ts.map +1 -0
- package/dist/routes/admin-staging.js +90 -0
- package/dist/routes/admin-staging.js.map +1 -0
- package/dist/routes/admin-system.d.ts +14 -0
- package/dist/routes/admin-system.d.ts.map +1 -0
- package/dist/routes/admin-system.js +153 -0
- package/dist/routes/admin-system.js.map +1 -0
- package/dist/routes/health.d.ts +12 -0
- package/dist/routes/health.d.ts.map +1 -0
- package/dist/routes/health.js +44 -0
- package/dist/routes/health.js.map +1 -0
- package/dist/schema.d.ts +56 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +173 -0
- package/dist/schema.js.map +1 -0
- package/dist/server.d.ts +28 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +47 -0
- package/dist/server.js.map +1 -0
- package/dist/services/media.d.ts +65 -0
- package/dist/services/media.d.ts.map +1 -0
- package/dist/services/media.js +180 -0
- package/dist/services/media.js.map +1 -0
- package/dist/services/staging-local.d.ts +58 -0
- package/dist/services/staging-local.d.ts.map +1 -0
- package/dist/services/staging-local.js +391 -0
- package/dist/services/staging-local.js.map +1 -0
- package/dist/services/staging.d.ts +167 -0
- package/dist/services/staging.d.ts.map +1 -0
- package/dist/services/staging.js +333 -0
- package/dist/services/staging.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content staging: the orchestration between "saved" and "published".
|
|
3
|
+
*
|
|
4
|
+
* Two implementations of one service, because the two deployment shapes have
|
|
5
|
+
* genuinely different draft workspaces:
|
|
6
|
+
*
|
|
7
|
+
* - working tree (`staging-local.ts`): the checkout is the draft. Autosave
|
|
8
|
+
* writes files the Astro dev server can hot-reload, which is the whole
|
|
9
|
+
* value of local mode; Recent changes is `git status`, and Publish is a
|
|
10
|
+
* real commit and push through the developer's own Git.
|
|
11
|
+
* - draft store (this file): the repository is remote and writing through
|
|
12
|
+
* its API would already be a commit, so saves accumulate in SQLite and
|
|
13
|
+
* Publish turns the whole set into one provider-side commit.
|
|
14
|
+
*
|
|
15
|
+
* The editor sees one API either way. What differs is only what Saved means —
|
|
16
|
+
* and the two must stay visibly different words in the UI, because in neither
|
|
17
|
+
* mode does Saved imply that a change is in Git.
|
|
18
|
+
*/
|
|
19
|
+
import { MANIFEST_PATH, ORDER_FILE, collectionEntryPath, entryLayout, entryTitle, isValidSlug, readCollection, readCollectionEntry, readSingleton, singletonPath, toContentChange, validateFields, } from "@micacms/core";
|
|
20
|
+
import { ApiError, badRequest } from "../lib/errors.js";
|
|
21
|
+
/**
|
|
22
|
+
* Reads one document from the repository (`published`) and from the pending
|
|
23
|
+
* workspace (`staged`) — the whole of a before/after comparison, shared by
|
|
24
|
+
* both staging implementations since a `ContentSource` is all it needs.
|
|
25
|
+
*
|
|
26
|
+
* An order target compares the collection's ordering rather than a document:
|
|
27
|
+
* each side becomes `{ order: [{ slug, title }] }`, in position order.
|
|
28
|
+
*/
|
|
29
|
+
export async function compareSources(model, published, staged, target) {
|
|
30
|
+
if (target.kind === "singleton") {
|
|
31
|
+
const def = model.singletons[target.name];
|
|
32
|
+
if (!def)
|
|
33
|
+
throw badRequest(`There is no singleton called "${target.name}".`);
|
|
34
|
+
return {
|
|
35
|
+
before: await readSingleton(published, def, target.name),
|
|
36
|
+
after: await readSingleton(staged, def, target.name),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
const def = model.collections[target.collection];
|
|
40
|
+
if (!def)
|
|
41
|
+
throw badRequest(`There is no collection called "${target.collection}".`);
|
|
42
|
+
if (target.kind === "entry") {
|
|
43
|
+
if (!isValidSlug(target.slug))
|
|
44
|
+
throw badRequest(`"${target.slug}" is not a slug.`);
|
|
45
|
+
return {
|
|
46
|
+
before: await readCollectionEntry(published, def, target.collection, target.slug),
|
|
47
|
+
after: await readCollectionEntry(staged, def, target.collection, target.slug),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
const ordering = async (source) => {
|
|
51
|
+
const entries = await readCollection(source, def, target.collection);
|
|
52
|
+
if (entries.length === 0)
|
|
53
|
+
return null;
|
|
54
|
+
return {
|
|
55
|
+
order: entries.map((entry) => ({ slug: entry.slug, title: entryTitle(def, entry.data) })),
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
return { before: await ordering(published), after: await ordering(staged) };
|
|
59
|
+
}
|
|
60
|
+
/* ------------------------------------------------------------------ *
|
|
61
|
+
* Understanding a change set
|
|
62
|
+
* ------------------------------------------------------------------ */
|
|
63
|
+
/**
|
|
64
|
+
* Annotates a change set with owners and validates the entries it touches.
|
|
65
|
+
*
|
|
66
|
+
* One pass on purpose: naming a change and validating it both need the same
|
|
67
|
+
* read of the same entries, and content trees are small enough to read the
|
|
68
|
+
* affected collections whole.
|
|
69
|
+
*
|
|
70
|
+
* Validation is scoped to *changed* documents. Content that was already in
|
|
71
|
+
* the repository is not this publication's problem — refusing
|
|
72
|
+
* to publish a fixed typo because somebody once hand-committed a broken entry
|
|
73
|
+
* elsewhere would make the editor hostage to history it cannot touch.
|
|
74
|
+
*/
|
|
75
|
+
export async function analyseChanges(model, source, changes) {
|
|
76
|
+
const owners = changes.map((change) => classifyPath(model, change.path));
|
|
77
|
+
/* ------------------------------------------------------- reading */
|
|
78
|
+
const collectionsToRead = new Set();
|
|
79
|
+
for (const owner of owners) {
|
|
80
|
+
if (owner.kind === "entry" || owner.kind === "order")
|
|
81
|
+
collectionsToRead.add(owner.collection);
|
|
82
|
+
}
|
|
83
|
+
const problems = [];
|
|
84
|
+
const titles = new Map();
|
|
85
|
+
const entriesByCollection = new Map();
|
|
86
|
+
for (const name of collectionsToRead) {
|
|
87
|
+
const def = model.collections[name];
|
|
88
|
+
try {
|
|
89
|
+
const entries = await readCollection(source, def, name);
|
|
90
|
+
const bySlug = new Map(entries.map((entry) => [entry.slug, entry.data]));
|
|
91
|
+
entriesByCollection.set(name, bySlug);
|
|
92
|
+
for (const [slug, data] of bySlug)
|
|
93
|
+
titles.set(`${name}/${slug}`, entryTitle(def, data));
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
// The collection cannot be read at all — a malformed file, possibly one
|
|
97
|
+
// this change set did not touch. Publication needs the whole picture,
|
|
98
|
+
// so the honest answer is the error, at the path it names.
|
|
99
|
+
const path = error.path ?? name;
|
|
100
|
+
problems.push({
|
|
101
|
+
path,
|
|
102
|
+
label: def.label,
|
|
103
|
+
issues: [{ path: "", message: error.message }],
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/* ---------------------------------------------------- validation */
|
|
108
|
+
const validated = new Set();
|
|
109
|
+
for (const owner of owners) {
|
|
110
|
+
if (owner.kind === "entry") {
|
|
111
|
+
const key = `${owner.collection}/${owner.slug}`;
|
|
112
|
+
if (validated.has(key))
|
|
113
|
+
continue;
|
|
114
|
+
validated.add(key);
|
|
115
|
+
const def = model.collections[owner.collection];
|
|
116
|
+
// Absent means the change set deletes this entry; there is nothing left
|
|
117
|
+
// to validate, which is exactly right.
|
|
118
|
+
const data = entriesByCollection.get(owner.collection)?.get(owner.slug);
|
|
119
|
+
if (!data)
|
|
120
|
+
continue;
|
|
121
|
+
const result = validateFields(def.fields, data, "storage");
|
|
122
|
+
if (!result.ok) {
|
|
123
|
+
problems.push({
|
|
124
|
+
path: entryDataPath(def, owner.collection, owner.slug),
|
|
125
|
+
label: labelEntry(def, owner.slug, titles.get(key)),
|
|
126
|
+
issues: result.issues,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (owner.kind === "singleton" && !validated.has(`singleton:${owner.name}`)) {
|
|
131
|
+
validated.add(`singleton:${owner.name}`);
|
|
132
|
+
const def = model.singletons[owner.name];
|
|
133
|
+
const dataPath = singletonPath(def.fields, owner.name);
|
|
134
|
+
try {
|
|
135
|
+
const data = await readSingleton(source, def, owner.name);
|
|
136
|
+
if (data === null)
|
|
137
|
+
continue;
|
|
138
|
+
const result = validateFields(def.fields, data, "storage");
|
|
139
|
+
if (!result.ok) {
|
|
140
|
+
problems.push({ path: dataPath, label: def.label, issues: result.issues });
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
problems.push({
|
|
145
|
+
path: error.path ?? dataPath,
|
|
146
|
+
label: def.label,
|
|
147
|
+
issues: [{ path: "", message: error.message }],
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/* ---------------------------------------------------- annotation */
|
|
153
|
+
const annotated = changes.map((change, index) => {
|
|
154
|
+
const owner = owners[index];
|
|
155
|
+
if (owner.kind === "entry") {
|
|
156
|
+
const def = model.collections[owner.collection];
|
|
157
|
+
return {
|
|
158
|
+
...change,
|
|
159
|
+
owner: { ...owner, label: labelEntry(def, owner.slug, titles.get(`${owner.collection}/${owner.slug}`)) },
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
return { ...change, owner };
|
|
163
|
+
});
|
|
164
|
+
return {
|
|
165
|
+
changes: annotated,
|
|
166
|
+
validation: { ok: problems.length === 0, problems },
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Which piece of content a file belongs to.
|
|
171
|
+
*
|
|
172
|
+
* The path layout is the model's own (`layout.ts`), so this is a reading of
|
|
173
|
+
* it, not a second convention: `collection/slug/…` or `collection/slug.json`,
|
|
174
|
+
* `singleton.json` or `singleton/…`, and the shared `media/` directory.
|
|
175
|
+
*/
|
|
176
|
+
export function classifyPath(model, path) {
|
|
177
|
+
const segments = path.split("/");
|
|
178
|
+
const head = segments[0] ?? "";
|
|
179
|
+
const collection = model.collections[head];
|
|
180
|
+
if (collection && segments.length > 1) {
|
|
181
|
+
if (segments.length === 2 && segments[1] === ORDER_FILE) {
|
|
182
|
+
return { kind: "order", collection: head, label: `${collection.label}: order` };
|
|
183
|
+
}
|
|
184
|
+
if (entryLayout(collection.fields) === "directory") {
|
|
185
|
+
const slug = segments[1];
|
|
186
|
+
if (segments.length >= 3 && isValidSlug(slug)) {
|
|
187
|
+
return { kind: "entry", collection: head, slug, label: slug };
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
else if (segments.length === 2 && segments[1].endsWith(".json")) {
|
|
191
|
+
const slug = segments[1].slice(0, -".json".length);
|
|
192
|
+
if (isValidSlug(slug))
|
|
193
|
+
return { kind: "entry", collection: head, slug, label: slug };
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
const singletonDir = model.singletons[head];
|
|
197
|
+
if (singletonDir && segments.length > 1) {
|
|
198
|
+
return { kind: "singleton", name: head, label: singletonDir.label };
|
|
199
|
+
}
|
|
200
|
+
if (head.endsWith(".json")) {
|
|
201
|
+
const name = head.slice(0, -".json".length);
|
|
202
|
+
const singleton = model.singletons[name];
|
|
203
|
+
if (singleton && segments.length === 1) {
|
|
204
|
+
return { kind: "singleton", name, label: singleton.label };
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
if (head === "media")
|
|
208
|
+
return { kind: "media", label: "Shared media" };
|
|
209
|
+
return { kind: "other", label: path };
|
|
210
|
+
}
|
|
211
|
+
function labelEntry(def, slug, title) {
|
|
212
|
+
return `${def.labelSingular ?? def.label}: ${title ?? slug}`;
|
|
213
|
+
}
|
|
214
|
+
function entryDataPath(def, collection, slug) {
|
|
215
|
+
const base = collectionEntryPath(def.fields, collection, slug);
|
|
216
|
+
return entryLayout(def.fields) === "directory" ? `${base}/index.json` : base;
|
|
217
|
+
}
|
|
218
|
+
export function createDraftStagingService(deps) {
|
|
219
|
+
const { model, drafts, repository, overlay } = deps;
|
|
220
|
+
// One publication at a time. Not a lock on editing — saves keep landing in
|
|
221
|
+
// the draft store — just a refusal to run two commits of the same set.
|
|
222
|
+
let publishing = false;
|
|
223
|
+
const statusOf = async () => {
|
|
224
|
+
const rows = await drafts.list();
|
|
225
|
+
const summary = rows.map(toContentChange);
|
|
226
|
+
const { changes, validation } = await analyseChanges(model, overlay, summary);
|
|
227
|
+
return { rows, changes, validation };
|
|
228
|
+
};
|
|
229
|
+
return {
|
|
230
|
+
async status() {
|
|
231
|
+
const { rows, changes, validation } = await statusOf();
|
|
232
|
+
return {
|
|
233
|
+
workspace: "draft-store",
|
|
234
|
+
publish: { enabled: true },
|
|
235
|
+
baseRevision: await drafts.base(),
|
|
236
|
+
branch: null,
|
|
237
|
+
ahead: null,
|
|
238
|
+
changes,
|
|
239
|
+
validation,
|
|
240
|
+
updatedAt: rows.reduce((latest, row) => (latest === null || row.updatedAt > latest ? row.updatedAt : latest), null),
|
|
241
|
+
};
|
|
242
|
+
},
|
|
243
|
+
async publish(input) {
|
|
244
|
+
const message = input.message.trim();
|
|
245
|
+
if (!message)
|
|
246
|
+
throw badRequest("A publication needs a commit message.");
|
|
247
|
+
if (publishing) {
|
|
248
|
+
throw new ApiError("conflict", "A publication is already running. Wait for it to finish.");
|
|
249
|
+
}
|
|
250
|
+
publishing = true;
|
|
251
|
+
try {
|
|
252
|
+
const snapshot = await drafts.list();
|
|
253
|
+
if (snapshot.length === 0)
|
|
254
|
+
throw badRequest("There is nothing to publish.");
|
|
255
|
+
/**
|
|
256
|
+
* The model drift gate: refuse, name the drift, require a restart.
|
|
257
|
+
* The staged set was validated against the model this
|
|
258
|
+
* process read at startup; a manifest that moved since may disagree,
|
|
259
|
+
* and publishing content the new model rejects would hand the next
|
|
260
|
+
* build a broken tree.
|
|
261
|
+
*/
|
|
262
|
+
const manifestNow = await repository.revision(MANIFEST_PATH);
|
|
263
|
+
if (manifestNow !== deps.schemaRevision) {
|
|
264
|
+
throw new ApiError("conflict", "The content model changed in the repository after this server started. " +
|
|
265
|
+
"Restart Mica to load the new model, then review the pending changes and " +
|
|
266
|
+
"publish again.");
|
|
267
|
+
}
|
|
268
|
+
const { validation } = await statusOf();
|
|
269
|
+
if (!validation.ok) {
|
|
270
|
+
throw new ApiError("validation_failed", describeProblems(validation.problems), {
|
|
271
|
+
issues: flattenProblems(validation.problems),
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
const changes = snapshot.map((row) => row.kind === "write"
|
|
275
|
+
? {
|
|
276
|
+
type: "write",
|
|
277
|
+
path: row.path,
|
|
278
|
+
contents: row.text ? new TextDecoder().decode(row.contents) : row.contents,
|
|
279
|
+
}
|
|
280
|
+
: { type: "delete", path: row.path });
|
|
281
|
+
// The per-path gate: every file this publication writes or removes,
|
|
282
|
+
// expected to be as it was when first staged. A branch that moved on
|
|
283
|
+
// other paths sails through, which is the point.
|
|
284
|
+
const result = await repository.commit({
|
|
285
|
+
message,
|
|
286
|
+
changes,
|
|
287
|
+
expect: Object.fromEntries(snapshot.map((row) => [row.path, row.baseRevision])),
|
|
288
|
+
author: input.author,
|
|
289
|
+
});
|
|
290
|
+
await drafts.clearPublished(snapshot.map(({ path, version }) => ({ path, version })));
|
|
291
|
+
// An autosave that landed while the commit ran survives — re-based
|
|
292
|
+
// onto what the repository now holds, so the next publication's gate
|
|
293
|
+
// is the commit that just happened rather than a stale ancestor.
|
|
294
|
+
const survivors = await drafts.list();
|
|
295
|
+
for (const row of survivors) {
|
|
296
|
+
await drafts.rebase(row.path, await repository.revision(row.path));
|
|
297
|
+
}
|
|
298
|
+
if (survivors.length > 0)
|
|
299
|
+
await drafts.setBase(await repository.head());
|
|
300
|
+
return { state: "published", revision: result.revision };
|
|
301
|
+
}
|
|
302
|
+
finally {
|
|
303
|
+
publishing = false;
|
|
304
|
+
}
|
|
305
|
+
},
|
|
306
|
+
async discard(paths) {
|
|
307
|
+
return { discarded: await drafts.discard(paths) };
|
|
308
|
+
},
|
|
309
|
+
async push() {
|
|
310
|
+
// A provider commit is already on the branch; there is no second step.
|
|
311
|
+
throw badRequest("Publications here are single repository commits. There is nothing to push.");
|
|
312
|
+
},
|
|
313
|
+
async compare(target) {
|
|
314
|
+
// "Before" is the repository the drafts have not touched; "after" is the
|
|
315
|
+
// overlay every other read already goes through.
|
|
316
|
+
return compareSources(model, repository, overlay, target);
|
|
317
|
+
},
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
/* ------------------------------------------------------------------ */
|
|
321
|
+
export function describeProblems(problems) {
|
|
322
|
+
const names = problems.map((problem) => problem.label);
|
|
323
|
+
const listed = names.slice(0, 3).join(", ") + (names.length > 3 ? ", …" : "");
|
|
324
|
+
return `The pending changes cannot be published until they are valid: ${listed}.`;
|
|
325
|
+
}
|
|
326
|
+
/** Field issues with the file path folded in, for the flat API envelope. */
|
|
327
|
+
export function flattenProblems(problems) {
|
|
328
|
+
return problems.flatMap((problem) => problem.issues.map((issue) => ({
|
|
329
|
+
path: issue.path ? `${problem.path}: ${issue.path}` : problem.path,
|
|
330
|
+
message: issue.message,
|
|
331
|
+
})));
|
|
332
|
+
}
|
|
333
|
+
//# sourceMappingURL=staging.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"staging.js","sourceRoot":"","sources":["../../src/services/staging.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@micacms/runtime",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "The Mica single-site runtime: the Hono API, application services and staging orchestration, authentication-neutral. Composed by @micacms/editor locally and @micacms/self-hosted behind OIDC.",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "Alexander Müdespacher",
|
|
8
|
+
"keywords": [
|
|
9
|
+
"mica",
|
|
10
|
+
"cms",
|
|
11
|
+
"runtime",
|
|
12
|
+
"hono"
|
|
13
|
+
],
|
|
14
|
+
"sideEffects": false,
|
|
15
|
+
"publishConfig": {
|
|
16
|
+
"access": "public"
|
|
17
|
+
},
|
|
18
|
+
"exports": {
|
|
19
|
+
".": {
|
|
20
|
+
"types": "./dist/index.d.ts",
|
|
21
|
+
"default": "./dist/index.js"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"dist"
|
|
26
|
+
],
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"@hono/node-server": "^1.13.8",
|
|
29
|
+
"hono": "^4.6.20",
|
|
30
|
+
"image-size": "^1.2.0",
|
|
31
|
+
"zod": "^4.3.6",
|
|
32
|
+
"@micacms/connectors": "0.2.0",
|
|
33
|
+
"@micacms/core": "0.2.0"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@types/node": "^22.20.1",
|
|
37
|
+
"tsx": "^4.19.2",
|
|
38
|
+
"typescript": "^5.7.3"
|
|
39
|
+
},
|
|
40
|
+
"engines": {
|
|
41
|
+
"node": ">=22.12.0"
|
|
42
|
+
},
|
|
43
|
+
"scripts": {
|
|
44
|
+
"build": "tsc -p tsconfig.json",
|
|
45
|
+
"dev": "tsc -p tsconfig.json --watch --preserveWatchOutput",
|
|
46
|
+
"typecheck": "tsc -p tsconfig.test.json",
|
|
47
|
+
"test": "tsc -p tsconfig.json && node --test --import tsx test/*.test.ts"
|
|
48
|
+
}
|
|
49
|
+
}
|