@forumulate/cli 0.8.0 → 0.10.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 +11 -3
- package/dist/api/args.d.ts.map +1 -1
- package/dist/api/args.js +1 -0
- package/dist/api/args.js.map +1 -1
- package/dist/api/command.d.ts +1 -1
- package/dist/api/command.d.ts.map +1 -1
- package/dist/api/command.js +86 -11
- package/dist/api/command.js.map +1 -1
- package/dist/api/http.d.ts +8 -0
- package/dist/api/http.d.ts.map +1 -1
- package/dist/api/http.js +3 -2
- package/dist/api/http.js.map +1 -1
- package/dist/api/live-spec.d.ts +48 -0
- package/dist/api/live-spec.d.ts.map +1 -0
- package/dist/api/live-spec.js +72 -0
- package/dist/api/live-spec.js.map +1 -0
- package/dist/api/operations.json +1 -1
- package/dist/api/request.d.ts.map +1 -1
- package/dist/api/request.js +25 -1
- package/dist/api/request.js.map +1 -1
- package/dist/api/send.d.ts +10 -1
- package/dist/api/send.d.ts.map +1 -1
- package/dist/api/send.js +14 -3
- package/dist/api/send.js.map +1 -1
- package/dist/api/slim.d.ts +14 -0
- package/dist/api/slim.d.ts.map +1 -0
- package/dist/api/slim.js +174 -0
- package/dist/api/slim.js.map +1 -0
- package/dist/cache-command.d.ts +12 -0
- package/dist/cache-command.d.ts.map +1 -0
- package/dist/cache-command.js +93 -0
- package/dist/cache-command.js.map +1 -0
- package/dist/check/command.d.ts +48 -0
- package/dist/check/command.d.ts.map +1 -0
- package/dist/check/command.js +256 -0
- package/dist/check/command.js.map +1 -0
- package/dist/check/external.d.ts +66 -0
- package/dist/check/external.d.ts.map +1 -0
- package/dist/check/external.js +177 -0
- package/dist/check/external.js.map +1 -0
- package/dist/check/markdown-links.d.ts +38 -0
- package/dist/check/markdown-links.d.ts.map +1 -0
- package/dist/check/markdown-links.js +166 -0
- package/dist/check/markdown-links.js.map +1 -0
- package/dist/cli.js +42 -7
- package/dist/cli.js.map +1 -1
- package/dist/commands/completion.d.ts.map +1 -1
- package/dist/commands/completion.js +17 -0
- package/dist/commands/completion.js.map +1 -1
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +6 -2
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/groups-api.d.ts.map +1 -1
- package/dist/commands/groups-api.js +20 -2
- package/dist/commands/groups-api.js.map +1 -1
- package/dist/commands/groups-docs.d.ts.map +1 -1
- package/dist/commands/groups-docs.js +8 -2
- package/dist/commands/groups-docs.js.map +1 -1
- package/dist/commands/groups-jobs.d.ts +10 -0
- package/dist/commands/groups-jobs.d.ts.map +1 -0
- package/dist/commands/groups-jobs.js +89 -0
- package/dist/commands/groups-jobs.js.map +1 -0
- package/dist/commands/groups-org.d.ts.map +1 -1
- package/dist/commands/groups-org.js +59 -2
- package/dist/commands/groups-org.js.map +1 -1
- package/dist/commands/groups-site.d.ts.map +1 -1
- package/dist/commands/groups-site.js +47 -10
- package/dist/commands/groups-site.js.map +1 -1
- package/dist/commands/groups-spaces.d.ts.map +1 -1
- package/dist/commands/groups-spaces.js +11 -5
- package/dist/commands/groups-spaces.js.map +1 -1
- package/dist/commands/groups-types.d.ts.map +1 -1
- package/dist/commands/groups-types.js +74 -0
- package/dist/commands/groups-types.js.map +1 -1
- package/dist/commands/groups.d.ts.map +1 -1
- package/dist/commands/groups.js +2 -0
- package/dist/commands/groups.js.map +1 -1
- package/dist/commands/index.d.ts +9 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +18 -3
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/job-wait.d.ts +64 -0
- package/dist/commands/job-wait.d.ts.map +1 -0
- package/dist/commands/job-wait.js +91 -0
- package/dist/commands/job-wait.js.map +1 -0
- package/dist/commands/resource.d.ts +19 -0
- package/dist/commands/resource.d.ts.map +1 -1
- package/dist/commands/resource.js +65 -3
- package/dist/commands/resource.js.map +1 -1
- package/dist/content/library.d.ts +8 -0
- package/dist/content/library.d.ts.map +1 -1
- package/dist/content/library.js +10 -2
- package/dist/content/library.js.map +1 -1
- package/dist/credentials.d.ts +43 -4
- package/dist/credentials.d.ts.map +1 -1
- package/dist/credentials.js +67 -4
- package/dist/credentials.js.map +1 -1
- package/dist/dev/command.d.ts +41 -0
- package/dist/dev/command.d.ts.map +1 -0
- package/dist/dev/command.js +158 -0
- package/dist/dev/command.js.map +1 -0
- package/dist/doctor/address-checks.d.ts +56 -0
- package/dist/doctor/address-checks.d.ts.map +1 -0
- package/dist/doctor/address-checks.js +183 -0
- package/dist/doctor/address-checks.js.map +1 -0
- package/dist/doctor/boilerplate.d.ts +33 -0
- package/dist/doctor/boilerplate.d.ts.map +1 -0
- package/dist/doctor/boilerplate.js +78 -0
- package/dist/doctor/boilerplate.js.map +1 -0
- package/dist/doctor/command.d.ts +18 -0
- package/dist/doctor/command.d.ts.map +1 -0
- package/dist/doctor/command.js +234 -0
- package/dist/doctor/command.js.map +1 -0
- package/dist/doctor/crawl.d.ts +49 -0
- package/dist/doctor/crawl.d.ts.map +1 -0
- package/dist/doctor/crawl.js +210 -0
- package/dist/doctor/crawl.js.map +1 -0
- package/dist/doctor/extended.d.ts +52 -0
- package/dist/doctor/extended.d.ts.map +1 -0
- package/dist/doctor/extended.js +150 -0
- package/dist/doctor/extended.js.map +1 -0
- package/dist/doctor/page-checks.d.ts +42 -0
- package/dist/doctor/page-checks.d.ts.map +1 -0
- package/dist/doctor/page-checks.js +200 -0
- package/dist/doctor/page-checks.js.map +1 -0
- package/dist/doctor/probe.d.ts +63 -0
- package/dist/doctor/probe.d.ts.map +1 -0
- package/dist/doctor/probe.js +170 -0
- package/dist/doctor/probe.js.map +1 -0
- package/dist/doctor/reader-auth-atlas.d.ts +18 -0
- package/dist/doctor/reader-auth-atlas.d.ts.map +1 -0
- package/dist/doctor/reader-auth-atlas.js +50 -0
- package/dist/doctor/reader-auth-atlas.js.map +1 -0
- package/dist/doctor/robots-params.d.ts +36 -0
- package/dist/doctor/robots-params.d.ts.map +1 -0
- package/dist/doctor/robots-params.js +97 -0
- package/dist/doctor/robots-params.js.map +1 -0
- package/dist/doctor/site.d.ts +42 -0
- package/dist/doctor/site.d.ts.map +1 -0
- package/dist/doctor/site.js +82 -0
- package/dist/doctor/site.js.map +1 -0
- package/dist/doctor.d.ts +21 -0
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +94 -3
- package/dist/doctor.js.map +1 -1
- package/dist/exit-codes.d.ts +40 -0
- package/dist/exit-codes.d.ts.map +1 -0
- package/dist/exit-codes.js +66 -0
- package/dist/exit-codes.js.map +1 -0
- package/dist/help-commands.d.ts +13 -0
- package/dist/help-commands.d.ts.map +1 -0
- package/dist/help-commands.js +215 -0
- package/dist/help-commands.js.map +1 -0
- package/dist/help.d.ts +1 -1
- package/dist/help.d.ts.map +1 -1
- package/dist/help.js +74 -11
- package/dist/help.js.map +1 -1
- package/dist/io.d.ts +33 -0
- package/dist/io.d.ts.map +1 -0
- package/dist/io.js +81 -0
- package/dist/io.js.map +1 -0
- package/dist/preview-comment.d.ts +20 -0
- package/dist/preview-comment.d.ts.map +1 -0
- package/dist/preview-comment.js +88 -0
- package/dist/preview-comment.js.map +1 -0
- package/dist/publish/about.d.ts +23 -0
- package/dist/publish/about.d.ts.map +1 -0
- package/dist/publish/about.js +66 -0
- package/dist/publish/about.js.map +1 -0
- package/dist/publish/api.d.ts +30 -12
- package/dist/publish/api.d.ts.map +1 -1
- package/dist/publish/api.js +62 -10
- package/dist/publish/api.js.map +1 -1
- package/dist/publish/client.d.ts +19 -0
- package/dist/publish/client.d.ts.map +1 -0
- package/dist/publish/client.js +3 -0
- package/dist/publish/client.js.map +1 -0
- package/dist/publish/command.d.ts +51 -2
- package/dist/publish/command.d.ts.map +1 -1
- package/dist/publish/command.js +157 -17
- package/dist/publish/command.js.map +1 -1
- package/dist/publish/context.d.ts +12 -1
- package/dist/publish/context.d.ts.map +1 -1
- package/dist/publish/context.js.map +1 -1
- package/dist/publish/diff.d.ts +21 -0
- package/dist/publish/diff.d.ts.map +1 -0
- package/dist/publish/diff.js +96 -0
- package/dist/publish/diff.js.map +1 -0
- package/dist/publish/docs-apply.d.ts +8 -1
- package/dist/publish/docs-apply.d.ts.map +1 -1
- package/dist/publish/docs-apply.js +49 -10
- package/dist/publish/docs-apply.js.map +1 -1
- package/dist/publish/docs-plan.d.ts +16 -3
- package/dist/publish/docs-plan.d.ts.map +1 -1
- package/dist/publish/docs-plan.js +57 -6
- package/dist/publish/docs-plan.js.map +1 -1
- package/dist/publish/extras.d.ts +10 -0
- package/dist/publish/extras.d.ts.map +1 -1
- package/dist/publish/extras.js +54 -2
- package/dist/publish/extras.js.map +1 -1
- package/dist/publish/frontmatter.d.ts +1 -1
- package/dist/publish/frontmatter.d.ts.map +1 -1
- package/dist/publish/frontmatter.js +1 -0
- package/dist/publish/frontmatter.js.map +1 -1
- package/dist/publish/index.d.ts +12 -0
- package/dist/publish/index.d.ts.map +1 -0
- package/dist/publish/index.js +17 -0
- package/dist/publish/index.js.map +1 -0
- package/dist/publish/manifest.d.ts.map +1 -1
- package/dist/publish/manifest.js +48 -3
- package/dist/publish/manifest.js.map +1 -1
- package/dist/publish/names.d.ts +28 -0
- package/dist/publish/names.d.ts.map +1 -0
- package/dist/publish/names.js +80 -0
- package/dist/publish/names.js.map +1 -0
- package/dist/publish/posts.d.ts.map +1 -1
- package/dist/publish/posts.js +46 -13
- package/dist/publish/posts.js.map +1 -1
- package/dist/publish/preview.d.ts +56 -0
- package/dist/publish/preview.d.ts.map +1 -0
- package/dist/publish/preview.js +133 -0
- package/dist/publish/preview.js.map +1 -0
- package/dist/publish/redirects.d.ts +13 -0
- package/dist/publish/redirects.d.ts.map +1 -0
- package/dist/publish/redirects.js +154 -0
- package/dist/publish/redirects.js.map +1 -0
- package/dist/publish/reserved.d.ts +49 -0
- package/dist/publish/reserved.d.ts.map +1 -0
- package/dist/publish/reserved.js +118 -0
- package/dist/publish/reserved.js.map +1 -0
- package/dist/publish/rewrite.d.ts +12 -0
- package/dist/publish/rewrite.d.ts.map +1 -1
- package/dist/publish/rewrite.js +22 -0
- package/dist/publish/rewrite.js.map +1 -1
- package/dist/publish/scan-docs.d.ts +10 -0
- package/dist/publish/scan-docs.d.ts.map +1 -0
- package/dist/publish/scan-docs.js +160 -0
- package/dist/publish/scan-docs.js.map +1 -0
- package/dist/publish/scan.d.ts +21 -17
- package/dist/publish/scan.d.ts.map +1 -1
- package/dist/publish/scan.js +99 -232
- package/dist/publish/scan.js.map +1 -1
- package/dist/publish/slots.d.ts +39 -0
- package/dist/publish/slots.d.ts.map +1 -0
- package/dist/publish/slots.js +64 -0
- package/dist/publish/slots.js.map +1 -0
- package/dist/publish/studio-edits.d.ts +25 -0
- package/dist/publish/studio-edits.d.ts.map +1 -0
- package/dist/publish/studio-edits.js +53 -0
- package/dist/publish/studio-edits.js.map +1 -0
- package/dist/publish/tags.d.ts +9 -0
- package/dist/publish/tags.d.ts.map +1 -0
- package/dist/publish/tags.js +194 -0
- package/dist/publish/tags.js.map +1 -0
- package/dist/publish/types.d.ts +84 -1
- package/dist/publish/types.d.ts.map +1 -1
- package/dist/publish/types.js +0 -10
- package/dist/publish/types.js.map +1 -1
- package/dist/publish-command.d.ts +55 -0
- package/dist/publish-command.d.ts.map +1 -0
- package/dist/publish-command.js +197 -0
- package/dist/publish-command.js.map +1 -0
- package/dist/run.d.ts +3 -10
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +171 -112
- package/dist/run.js.map +1 -1
- package/dist/translations/target.d.ts.map +1 -1
- package/dist/translations/target.js +2 -2
- package/dist/translations/target.js.map +1 -1
- package/dist/validate.d.ts +39 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +166 -0
- package/dist/validate.js.map +1 -0
- package/dist/version.d.ts +8 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +11 -0
- package/dist/version.js.map +1 -0
- package/dist/whoami.d.ts +41 -0
- package/dist/whoami.d.ts.map +1 -0
- package/dist/whoami.js +161 -0
- package/dist/whoami.js.map +1 -0
- package/package.json +2 -2
- package/dist/publish-dir.d.ts +0 -54
- package/dist/publish-dir.d.ts.map +0 -1
- package/dist/publish-dir.js +0 -119
- package/dist/publish-dir.js.map +0 -1
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.studioConflicts = studioConflicts;
|
|
4
|
+
exports.conflictText = conflictText;
|
|
5
|
+
const context_1 = require("./context");
|
|
6
|
+
/** The pages this plan would overwrite that were edited since the last publish. */
|
|
7
|
+
async function studioConflicts(ctx, plan, live) {
|
|
8
|
+
const bySlug = new Map(live.pages.map((p) => [p.slug, p]));
|
|
9
|
+
const touched = new Map();
|
|
10
|
+
for (const sends of plan.sends.values())
|
|
11
|
+
for (const s of sends) {
|
|
12
|
+
const page = s.why === 'update' ? bySlug.get(s.page.slug) : undefined;
|
|
13
|
+
if (page)
|
|
14
|
+
touched.set(page.id, page.slug);
|
|
15
|
+
}
|
|
16
|
+
for (const p of plan.slotWrites) {
|
|
17
|
+
const page = bySlug.get(p.slug);
|
|
18
|
+
if (page)
|
|
19
|
+
touched.set(page.id, page.slug);
|
|
20
|
+
}
|
|
21
|
+
if (touched.size === 0)
|
|
22
|
+
return [];
|
|
23
|
+
let rows = [];
|
|
24
|
+
try {
|
|
25
|
+
// Chunked: a query string has a limit, and a big docs space has hundreds.
|
|
26
|
+
const ids = [...touched.keys()];
|
|
27
|
+
for (let i = 0; i < ids.length; i += 100) {
|
|
28
|
+
const res = await ctx.api.get((0, context_1.spacePath)(ctx, '/sync-state'), {
|
|
29
|
+
pageIds: ids.slice(i, i + 100).join(','),
|
|
30
|
+
});
|
|
31
|
+
rows.push(...(res.pages ?? []));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch (e) {
|
|
35
|
+
// An API from before the baseline existed: nothing to compare with, which
|
|
36
|
+
// is the state every page was in before this check — publish as before.
|
|
37
|
+
if (e.status === 404)
|
|
38
|
+
return [];
|
|
39
|
+
throw e;
|
|
40
|
+
}
|
|
41
|
+
rows = rows.filter((r) => r.editedSinceSync && touched.has(r.pageId));
|
|
42
|
+
return rows.map((r) => ({
|
|
43
|
+
slug: r.slug,
|
|
44
|
+
pageId: r.pageId,
|
|
45
|
+
by: r.lastEdit?.by.name ?? r.lastEdit?.by.email ?? 'someone',
|
|
46
|
+
at: r.lastEdit?.at ?? 'an unknown time',
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
49
|
+
/** The line and the error a conflict prints, in the words the docs promise. */
|
|
50
|
+
function conflictText(c) {
|
|
51
|
+
return `CONFLICT ${c.slug} edited in studio by ${c.by} at ${c.at}`;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=studio-edits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"studio-edits.js","sourceRoot":"","sources":["../../src/publish/studio-edits.ts"],"names":[],"mappings":";;AA8BA,0CAwCC;AAGD,oCAEC;AA3ED,uCAAqD;AA6BrD,mFAAmF;AAC5E,KAAK,UAAU,eAAe,CACnC,GAAa,EACb,IAAc,EACd,IAAc;IAEd,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;QACrC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACtE,IAAI,IAAI;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC;IACH,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,IAAI,IAAI,GAAmB,EAAE,CAAC;IAC9B,IAAI,CAAC;QACH,0EAA0E;QAC1E,MAAM,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC;YACzC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAA4B,IAAA,mBAAS,EAAC,GAAG,EAAE,aAAa,CAAC,EAAE;gBACtF,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;aACzC,CAAC,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,0EAA0E;QAC1E,wEAAwE;QACxE,IAAK,CAAyB,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,EAAE,CAAC;QACzD,MAAM,CAAC,CAAC;IACV,CAAC;IACD,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACtE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,IAAI,SAAS;QAC5D,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,IAAI,iBAAiB;KACxC,CAAC,CAAC,CAAC;AACN,CAAC;AAED,+EAA+E;AAC/E,SAAgB,YAAY,CAAC,CAAiB;IAC5C,OAAO,YAAY,CAAC,CAAC,IAAI,wBAAwB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type SpaceCtx } from './context';
|
|
2
|
+
import type { TagSpec } from './types';
|
|
3
|
+
/** One declared tag → the body its door takes, and the keys nothing here understands. */
|
|
4
|
+
export declare function tagBody(spec: TagSpec): {
|
|
5
|
+
body: Record<string, unknown>;
|
|
6
|
+
unknown: string[];
|
|
7
|
+
};
|
|
8
|
+
export declare function syncTags(ctx: SpaceCtx, apply: boolean, existingAssets: Map<string, string>): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=tags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../src/publish/tags.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AAIrD,OAAO,KAAK,EAAW,OAAO,EAAE,MAAM,SAAS,CAAC;AA+DhD,yFAAyF;AACzF,wBAAgB,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAc3F;AAkBD,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,OAAO,EACd,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAClC,OAAO,CAAC,IAAI,CAAC,CAsFf"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.tagBody = tagBody;
|
|
4
|
+
exports.syncTags = syncTags;
|
|
5
|
+
const node_fs_1 = require("node:fs");
|
|
6
|
+
const node_path_1 = require("node:path");
|
|
7
|
+
const compare_1 = require("./compare");
|
|
8
|
+
const context_1 = require("./context");
|
|
9
|
+
const diff_1 = require("./diff");
|
|
10
|
+
const api_1 = require("./api");
|
|
11
|
+
const names_1 = require("./names");
|
|
12
|
+
/**
|
|
13
|
+
* A blog's categories: how each tag looks — label, colours, description,
|
|
14
|
+
* cover, icon, the tag it sits under.
|
|
15
|
+
*
|
|
16
|
+
* Declared in the manifest (`tags:` on the space) or in `_tags.yml` beside the
|
|
17
|
+
* posts; the manifest wins key by key. Matched by slug, compared key by key
|
|
18
|
+
* against `GET …/blog/tag-info`, and only a tag that differs is written
|
|
19
|
+
* (`PUT …/blog/tags/{slug}`, which merges). A local `cover:` or image `icon:`
|
|
20
|
+
* is uploaded once, by content hash, like any image a post points at.
|
|
21
|
+
*
|
|
22
|
+
* Only a BLOG has this door; a tag list on another type is reported, not
|
|
23
|
+
* silently dropped.
|
|
24
|
+
*/
|
|
25
|
+
/** `PUT …/blog/tags/{slug}`'s own keys. */
|
|
26
|
+
const TAG_KEYS = [
|
|
27
|
+
'label',
|
|
28
|
+
'color',
|
|
29
|
+
'textColor',
|
|
30
|
+
'colorDark',
|
|
31
|
+
'textColorDark',
|
|
32
|
+
'gradient',
|
|
33
|
+
'description',
|
|
34
|
+
'pageScheme',
|
|
35
|
+
'pagePalette',
|
|
36
|
+
'coverUrl',
|
|
37
|
+
'icon',
|
|
38
|
+
'parent',
|
|
39
|
+
'translations',
|
|
40
|
+
'internal',
|
|
41
|
+
];
|
|
42
|
+
const BY_FOLD = new Map(TAG_KEYS.map((k) => [k.toLowerCase(), k]));
|
|
43
|
+
/** The spellings people write first. */
|
|
44
|
+
const ALIAS = {
|
|
45
|
+
name: 'label',
|
|
46
|
+
title: 'label',
|
|
47
|
+
colour: 'color',
|
|
48
|
+
textcolour: 'textColor',
|
|
49
|
+
colourdark: 'colorDark',
|
|
50
|
+
textcolourdark: 'textColorDark',
|
|
51
|
+
cover: 'coverUrl',
|
|
52
|
+
coverimage: 'coverUrl',
|
|
53
|
+
image: 'coverUrl',
|
|
54
|
+
scheme: 'pageScheme',
|
|
55
|
+
palette: 'pagePalette',
|
|
56
|
+
};
|
|
57
|
+
const COLOR_KEYS = new Set(['color', 'textColor', 'colorDark', 'textColorDark']);
|
|
58
|
+
/** A value that is a path to a local image, to upload rather than send. */
|
|
59
|
+
const IMAGE = /\.(png|jpe?g|gif|webp|svg|avif|ico)$/i;
|
|
60
|
+
/** The API's colour rule (lower-case, a hex gets its `#`), so a compare is not fooled by spelling. */
|
|
61
|
+
function canonColor(v) {
|
|
62
|
+
if (typeof v !== 'string')
|
|
63
|
+
return v;
|
|
64
|
+
const raw = v.trim().toLowerCase();
|
|
65
|
+
return /^#?([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/.test(raw) && !raw.startsWith('#')
|
|
66
|
+
? `#${raw}`
|
|
67
|
+
: raw;
|
|
68
|
+
}
|
|
69
|
+
/** One declared tag → the body its door takes, and the keys nothing here understands. */
|
|
70
|
+
function tagBody(spec) {
|
|
71
|
+
const body = {};
|
|
72
|
+
const unknown = [];
|
|
73
|
+
for (const [k, v] of Object.entries(spec ?? {})) {
|
|
74
|
+
const fold = k.toLowerCase().replace(/[-_\s]/g, '');
|
|
75
|
+
const key = BY_FOLD.get(fold) ?? ALIAS[fold];
|
|
76
|
+
if (!key) {
|
|
77
|
+
unknown.push(k);
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
body[key] = COLOR_KEYS.has(key) ? canonColor(v) : typeof v === 'string' ? v.trim() : v;
|
|
81
|
+
}
|
|
82
|
+
if (typeof body.parent === 'string')
|
|
83
|
+
body.parent = (0, names_1.slugify)(body.parent, '');
|
|
84
|
+
return { body, unknown };
|
|
85
|
+
}
|
|
86
|
+
/** A live tag in the same terms as a declared one. */
|
|
87
|
+
function liveBody(t) {
|
|
88
|
+
const out = {};
|
|
89
|
+
for (const k of TAG_KEYS)
|
|
90
|
+
out[k] = k in t ? t[k] : null;
|
|
91
|
+
// `label` reads back as the slug when nobody named the tag.
|
|
92
|
+
if (out.label === t.slug)
|
|
93
|
+
out.label = null;
|
|
94
|
+
for (const k of COLOR_KEYS)
|
|
95
|
+
out[k] = canonColor(out[k]);
|
|
96
|
+
return out;
|
|
97
|
+
}
|
|
98
|
+
/** Does a tag hold any display of its own (beyond being used by a post)? */
|
|
99
|
+
function described(t) {
|
|
100
|
+
const b = liveBody(t);
|
|
101
|
+
return TAG_KEYS.some((k) => b[k] !== null && b[k] !== undefined && b[k] !== false);
|
|
102
|
+
}
|
|
103
|
+
async function syncTags(ctx, apply, existingAssets) {
|
|
104
|
+
const declared = { ...ctx.scan.tags };
|
|
105
|
+
for (const [slug, spec] of Object.entries(ctx.spec.tags ?? {}))
|
|
106
|
+
declared[slug] = { ...(declared[slug] ?? {}), ...(spec ?? {}) };
|
|
107
|
+
if (!Object.keys(declared).length || !ctx.only.part('tags', ctx.spec))
|
|
108
|
+
return;
|
|
109
|
+
if (ctx.type !== 'BLOG') {
|
|
110
|
+
ctx.line({
|
|
111
|
+
verb: 'warn',
|
|
112
|
+
what: 'tags',
|
|
113
|
+
detail: `a ${ctx.type} space has no tag display to set — only a blog's categories are synced`,
|
|
114
|
+
});
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const live = await ctx.api.tagInfo(ctx.org, ctx.spaceId);
|
|
118
|
+
if (live === null) {
|
|
119
|
+
ctx.line({ verb: 'meta', what: 'tags', detail: 'cannot compare without a token' });
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const bySlug = new Map(live.map((t) => [t.slug, t]));
|
|
123
|
+
const seen = new Set();
|
|
124
|
+
for (const [raw, spec] of Object.entries(declared)) {
|
|
125
|
+
const slug = (0, names_1.slugify)(raw, '');
|
|
126
|
+
if (!slug) {
|
|
127
|
+
ctx.errors.push(`tags: "${raw}" is not a tag slug (letters, numbers and dashes)`);
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
seen.add(slug);
|
|
131
|
+
const { body, unknown } = tagBody(spec);
|
|
132
|
+
if (unknown.length)
|
|
133
|
+
ctx.line({
|
|
134
|
+
verb: 'warn',
|
|
135
|
+
what: `tag ${slug}`,
|
|
136
|
+
detail: `not understood, not sent: ${unknown.join(', ')}`,
|
|
137
|
+
});
|
|
138
|
+
for (const k of ['coverUrl', 'icon']) {
|
|
139
|
+
const v = body[k];
|
|
140
|
+
if (typeof v !== 'string' || !IMAGE.test(v) || /^[a-z][a-z0-9+.-]*:|^\//i.test(v))
|
|
141
|
+
continue;
|
|
142
|
+
const abs = (0, node_path_1.resolve)(ctx.scan.absDir, v);
|
|
143
|
+
if (!(0, node_fs_1.existsSync)(abs) || !(0, node_fs_1.statSync)(abs).isFile()) {
|
|
144
|
+
ctx.errors.push(`tag ${slug}: ${k} ${v} is not a file in ${ctx.scan.dir || '.'}/`);
|
|
145
|
+
delete body[k];
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
// Uploaded once, by content; a plan names it by the URL it already has.
|
|
149
|
+
const known = (0, api_1.lookupAsset)(existingAssets, abs);
|
|
150
|
+
if (known)
|
|
151
|
+
body[k] = known;
|
|
152
|
+
else if (!apply)
|
|
153
|
+
ctx.line({
|
|
154
|
+
verb: 'upload',
|
|
155
|
+
what: abs.slice(ctx.root.length + 1) || abs,
|
|
156
|
+
detail: `tag ${slug}'s ${k} — uploaded by a real run`,
|
|
157
|
+
});
|
|
158
|
+
else {
|
|
159
|
+
const had = existingAssets.size;
|
|
160
|
+
body[k] = await ctx.api.upload(ctx.org, ctx.spaceId, abs, existingAssets);
|
|
161
|
+
if (existingAssets.size > had)
|
|
162
|
+
ctx.line({ verb: 'upload', what: abs.slice(ctx.root.length + 1) || abs, detail: String(body[k]) });
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
const current = bySlug.get(slug);
|
|
166
|
+
const was = current ? liveBody(current) : undefined;
|
|
167
|
+
const keys = (0, compare_1.differingKeys)(was, body);
|
|
168
|
+
if (!keys.length)
|
|
169
|
+
continue;
|
|
170
|
+
ctx.line({
|
|
171
|
+
verb: current && described(current) ? 'update' : 'create',
|
|
172
|
+
what: `tag ${slug}`,
|
|
173
|
+
detail: keys.join(', '),
|
|
174
|
+
diff: (0, diff_1.fieldDiff)(was, body, keys),
|
|
175
|
+
});
|
|
176
|
+
if (apply)
|
|
177
|
+
await ctx.api.put((0, context_1.spacePath)(ctx, `/blog/tags/${encodeURIComponent(slug)}`), Object.fromEntries(keys.map((k) => [k, body[k]])));
|
|
178
|
+
}
|
|
179
|
+
// `--prune`: a described tag the folder no longer describes loses its look.
|
|
180
|
+
// Its posts keep the tag; only the display is cleared (`DELETE …/tags/{slug}`).
|
|
181
|
+
if (!ctx.prune)
|
|
182
|
+
return;
|
|
183
|
+
if (!ctx.only.all)
|
|
184
|
+
return;
|
|
185
|
+
const keep = new Set(ctx.spec.keep ?? []);
|
|
186
|
+
for (const t of live) {
|
|
187
|
+
if (seen.has(t.slug) || keep.has(t.slug) || !described(t))
|
|
188
|
+
continue;
|
|
189
|
+
ctx.line({ verb: 'prune', what: `tag ${t.slug}`, detail: 'not declared — display cleared, posts keep the tag' });
|
|
190
|
+
if (apply)
|
|
191
|
+
await ctx.api.del((0, context_1.spacePath)(ctx, `/blog/tags/${encodeURIComponent(t.slug)}`));
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=tags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/publish/tags.ts"],"names":[],"mappings":";;AAuEA,0BAcC;AAkBD,4BA0FC;AAjMD,qCAA+C;AAC/C,yCAAoC;AACpC,uCAA0C;AAC1C,uCAAqD;AACrD,iCAAmC;AACnC,+BAAoC;AACpC,mCAAkC;AAGlC;;;;;;;;;;;;GAYG;AAEH,2CAA2C;AAC3C,MAAM,QAAQ,GAAG;IACf,OAAO;IACP,OAAO;IACP,WAAW;IACX,WAAW;IACX,eAAe;IACf,UAAU;IACV,aAAa;IACb,YAAY;IACZ,aAAa;IACb,UAAU;IACV,MAAM;IACN,QAAQ;IACR,cAAc;IACd,UAAU;CACF,CAAC;AACX,MAAM,OAAO,GAAG,IAAI,GAAG,CAAiB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAEnF,wCAAwC;AACxC,MAAM,KAAK,GAA2B;IACpC,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,OAAO;IACf,UAAU,EAAE,WAAW;IACvB,UAAU,EAAE,WAAW;IACvB,cAAc,EAAE,eAAe;IAC/B,KAAK,EAAE,UAAU;IACjB,UAAU,EAAE,UAAU;IACtB,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,aAAa;CACvB,CAAC;AAEF,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC;AACjF,2EAA2E;AAC3E,MAAM,KAAK,GAAG,uCAAuC,CAAC;AAEtD,sGAAsG;AACtG,SAAS,UAAU,CAAC,CAAU;IAC5B,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACnC,OAAO,6CAA6C,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;QACpF,CAAC,CAAC,IAAI,GAAG,EAAE;QACX,CAAC,CAAC,GAAG,CAAC;AACV,CAAC;AAED,yFAAyF;AACzF,SAAgB,OAAO,CAAC,IAAa;IACnC,MAAM,IAAI,GAA4B,EAAE,CAAC;IACzC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;QAAE,IAAI,CAAC,MAAM,GAAG,IAAA,eAAO,EAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC5E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3B,CAAC;AAED,sDAAsD;AACtD,SAAS,QAAQ,CAAC,CAAU;IAC1B,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,QAAQ;QAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,CAA6B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrF,4DAA4D;IAC5D,IAAI,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI;QAAE,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,UAAU;QAAE,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,4EAA4E;AAC5E,SAAS,SAAS,CAAC,CAAU;IAC3B,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtB,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;AACrF,CAAC;AAEM,KAAK,UAAU,QAAQ,CAC5B,GAAa,EACb,KAAc,EACd,cAAmC;IAEnC,MAAM,QAAQ,GAA4B,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC/D,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5D,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;IAClE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO;IAC9E,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACxB,GAAG,CAAC,IAAI,CAAC;YACP,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,KAAK,GAAG,CAAC,IAAI,wEAAwE;SAC9F,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACzD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gCAAgC,EAAE,CAAC,CAAC;QACnF,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,GAAG,mDAAmD,CAAC,CAAC;YAClF,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACf,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,OAAO,CAAC,MAAM;YAChB,GAAG,CAAC,IAAI,CAAC;gBACP,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,OAAO,IAAI,EAAE;gBACnB,MAAM,EAAE,6BAA6B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aAC1D,CAAC,CAAC;QACL,KAAK,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAU,EAAE,CAAC;YAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,SAAS;YAC5F,MAAM,GAAG,GAAG,IAAA,mBAAO,EAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACxC,IAAI,CAAC,IAAA,oBAAU,EAAC,GAAG,CAAC,IAAI,CAAC,IAAA,kBAAQ,EAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;gBAChD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,qBAAqB,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC;gBACnF,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;gBACf,SAAS;YACX,CAAC;YACD,wEAAwE;YACxE,MAAM,KAAK,GAAG,IAAA,iBAAW,EAAC,cAAc,EAAE,GAAG,CAAC,CAAC;YAC/C,IAAI,KAAK;gBAAE,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;iBACtB,IAAI,CAAC,KAAK;gBACb,GAAG,CAAC,IAAI,CAAC;oBACP,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG;oBAC3C,MAAM,EAAE,OAAO,IAAI,MAAM,CAAC,2BAA2B;iBACtD,CAAC,CAAC;iBACA,CAAC;gBACJ,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC;gBAChC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC;gBAC1E,IAAI,cAAc,CAAC,IAAI,GAAG,GAAG;oBAC3B,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACvG,CAAC;QACH,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpD,MAAM,IAAI,GAAG,IAAA,uBAAa,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,SAAS;QAC3B,GAAG,CAAC,IAAI,CAAC;YACP,IAAI,EAAE,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;YACzD,IAAI,EAAE,OAAO,IAAI,EAAE;YACnB,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACvB,IAAI,EAAE,IAAA,gBAAS,EAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;SACjC,CAAC,CAAC;QACH,IAAI,KAAK;YACP,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CACf,IAAA,mBAAS,EAAC,GAAG,EAAE,cAAc,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,EACxD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAClD,CAAC;IACN,CAAC;IAED,4EAA4E;IAC5E,gFAAgF;IAChF,IAAI,CAAC,GAAG,CAAC,KAAK;QAAE,OAAO;IACvB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG;QAAE,OAAO;IAC1B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAC1C,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YAAE,SAAS;QACpE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,oDAAoD,EAAE,CAAC,CAAC;QACjH,IAAI,KAAK;YAAE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAA,mBAAS,EAAC,GAAG,EAAE,cAAc,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3F,CAAC;AACH,CAAC"}
|
package/dist/publish/types.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Slot } from './slots';
|
|
1
2
|
/**
|
|
2
3
|
* The shapes `forumulate publish <folder>` works in.
|
|
3
4
|
*
|
|
@@ -34,6 +35,12 @@ export interface LocalPage {
|
|
|
34
35
|
unknown: string[];
|
|
35
36
|
/** Synthesised to stand for a folder that has no index file of its own. */
|
|
36
37
|
stub?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Named slots the front matter fills (`short-answer:` on an FAQ question),
|
|
40
|
+
* by the shape's own keys. Empty when the file declares none, which is the
|
|
41
|
+
* common case: the body alone is the page.
|
|
42
|
+
*/
|
|
43
|
+
sections: Record<string, string>;
|
|
37
44
|
}
|
|
38
45
|
/** One top-level folder of a docs space. */
|
|
39
46
|
export interface LocalCollection {
|
|
@@ -65,7 +72,25 @@ export interface LocalSpace {
|
|
|
65
72
|
/** Local files (images, PDFs) referenced from pages or posts, absolute paths. */
|
|
66
73
|
assets: Set<string>;
|
|
67
74
|
warnings: string[];
|
|
75
|
+
/**
|
|
76
|
+
* Slugs of the files marked `draft: true`. Never created or published — and
|
|
77
|
+
* never pruned either: marking a live post as a draft must not delete it.
|
|
78
|
+
*/
|
|
79
|
+
drafts: Set<string>;
|
|
80
|
+
/** Markdown files left out because of their name (README, `_drafts/…`, `ignore:`). */
|
|
81
|
+
skipped: {
|
|
82
|
+
file: string;
|
|
83
|
+
reason: string;
|
|
84
|
+
}[];
|
|
85
|
+
/** Blog categories declared in `_tags.yml` beside the files (the manifest's `tags:` wins). */
|
|
86
|
+
tags: Record<string, TagSpec>;
|
|
68
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* How one blog category looks, as written in the manifest or `_tags.yml`.
|
|
90
|
+
* The keys are `PUT …/blog/tags/{slug}`'s own, plus the spellings people
|
|
91
|
+
* reach for first (`name`, `colour`, `cover`, `image`), mapped in `tags.ts`.
|
|
92
|
+
*/
|
|
93
|
+
export type TagSpec = Record<string, unknown>;
|
|
69
94
|
/** A space as the manifest describes it. */
|
|
70
95
|
export interface SpaceSpec {
|
|
71
96
|
/** Folder under the publish root. */
|
|
@@ -93,8 +118,35 @@ export interface SpaceSpec {
|
|
|
93
118
|
}>;
|
|
94
119
|
openapi?: OpenApiSpec[];
|
|
95
120
|
monitors?: Record<string, unknown>[];
|
|
121
|
+
/** An ABOUT space's parts (`PUT …/about`), inline or a YAML/JSON file beside the manifest. */
|
|
122
|
+
about?: Record<string, unknown> | string;
|
|
96
123
|
/** Slugs (pages/posts) or collection slugs that `--prune` must never remove. */
|
|
97
124
|
keep?: string[];
|
|
125
|
+
/**
|
|
126
|
+
* What a README is in this space: `index` (a folder's own page, GitBook's
|
|
127
|
+
* convention, and the default for page-backed spaces) or `skip`. A posts
|
|
128
|
+
* space always skips it — see `reserved.ts`.
|
|
129
|
+
*/
|
|
130
|
+
readme?: 'index' | 'skip';
|
|
131
|
+
/** Extra names to leave out, as globs relative to the space folder. */
|
|
132
|
+
ignore?: string[];
|
|
133
|
+
/** Blog categories by slug: label, colours, description, cover, icon, parent. */
|
|
134
|
+
tags?: Record<string, TagSpec>;
|
|
135
|
+
/**
|
|
136
|
+
* Redirects this space keeps (FMU-F09): a list of rules, or a CSV file
|
|
137
|
+
* (relative to the manifest) in the redirect manager's columns. Merged into
|
|
138
|
+
* the space's table by `publish` — never deletes a rule the file does not
|
|
139
|
+
* name, and never touches the platform's own rename rules.
|
|
140
|
+
*/
|
|
141
|
+
redirects?: ManifestRedirect[] | string;
|
|
142
|
+
}
|
|
143
|
+
/** One redirect a manifest declares — the same keys as `PUT …/redirects`. */
|
|
144
|
+
export interface ManifestRedirect {
|
|
145
|
+
from: string;
|
|
146
|
+
to: string;
|
|
147
|
+
status?: 301 | 302 | 307 | 308;
|
|
148
|
+
type?: 'redirect' | 'rewrite';
|
|
149
|
+
passQuery?: boolean;
|
|
98
150
|
}
|
|
99
151
|
export interface OpenApiSpec {
|
|
100
152
|
/** A file relative to the manifest, JSON or YAML. */
|
|
@@ -145,11 +197,42 @@ export interface LivePost {
|
|
|
145
197
|
markdown?: string;
|
|
146
198
|
sections?: Record<string, string>;
|
|
147
199
|
}
|
|
200
|
+
/** A tag's display as `GET …/blog/tag-info` answers it. */
|
|
201
|
+
export interface LiveTag {
|
|
202
|
+
slug: string;
|
|
203
|
+
[key: string]: unknown;
|
|
204
|
+
}
|
|
148
205
|
/** What a piece of the plan does — one line in the dry run, one or more calls in the real one. */
|
|
149
|
-
export type Verb = 'create' | 'update' | 'meta' | 'move' | 'order' | 'prune' | 'upload' | 'patch' | 'import' | 'same' | 'skip' | 'warn'
|
|
206
|
+
export type Verb = 'create' | 'update' | 'meta' | 'move' | 'order' | 'prune' | 'upload' | 'patch' | 'import' | 'same' | 'skip' | 'warn'
|
|
207
|
+
/** A page edited in the studio since the last publish (FMU-D18). */
|
|
208
|
+
| 'conflict'
|
|
209
|
+
/** A page sent to a pull-request preview instead of published (FMU-F01). */
|
|
210
|
+
| 'preview';
|
|
150
211
|
export interface PlanLine {
|
|
151
212
|
verb: Verb;
|
|
152
213
|
what: string;
|
|
153
214
|
detail?: string;
|
|
215
|
+
/** For an update: the changed lines, `-` live and `+` the file (printed with `--diff`). */
|
|
216
|
+
diff?: string[];
|
|
217
|
+
}
|
|
218
|
+
export interface ScanResult extends LocalSpace {
|
|
219
|
+
/** Per file (relative to the space folder): reference as written → absolute asset path. */
|
|
220
|
+
refs: Map<string, Map<string, string>>;
|
|
221
|
+
/** Every Markdown file of the space (relative to the space folder) → its slug. */
|
|
222
|
+
slugByFile: Map<string, string>;
|
|
223
|
+
}
|
|
224
|
+
export type Reader = (abs: string) => {
|
|
225
|
+
rel: string;
|
|
226
|
+
text: string;
|
|
227
|
+
data: Record<string, unknown>;
|
|
228
|
+
body: string;
|
|
229
|
+
};
|
|
230
|
+
/** Shared with `scan-docs.ts`, which walks the docs half. */
|
|
231
|
+
export interface DocsWalk {
|
|
232
|
+
fieldKeys: string[];
|
|
233
|
+
slots: Slot[];
|
|
234
|
+
skip: (abs: string, name: string) => boolean;
|
|
235
|
+
hasMarkdown: (dir: string) => boolean;
|
|
236
|
+
isIndex: (file: string) => boolean;
|
|
154
237
|
}
|
|
155
238
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/publish/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,kFAAkF;AAClF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEhD,oDAAoD;AACpD,MAAM,WAAW,SAAS;IACxB,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,UAAU,EAAE,MAAM,CAAC;IACnB,oFAAoF;IACpF,IAAI,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,kFAAkF;IAClF,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxB,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,yFAAyF;IACzF,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,IAAI,EAAE,SAAS,CAAC;IAChB,yEAAyE;IACzE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/publish/types.ts"],"names":[],"mappings":"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"}
|
package/dist/publish/types.js
CHANGED
|
@@ -1,13 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* The shapes `forumulate publish <folder>` works in.
|
|
4
|
-
*
|
|
5
|
-
* Three layers, kept apart on purpose: what is ON DISK (`Local*`), what is
|
|
6
|
-
* LIVE (`Live*`), and what would change (`Plan`). Every customer publisher we
|
|
7
|
-
* were shown (four of them, in three languages) mixed the first two — they
|
|
8
|
-
* wrote while they read — so a dry run was a different code path from the real
|
|
9
|
-
* one and drifted from it. Here a plan is computed from the two snapshots and
|
|
10
|
-
* nothing else, and the real run executes that same plan.
|
|
11
|
-
*/
|
|
12
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
3
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/publish/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/publish/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { ForumulateClient } from '@forumulate/sdk';
|
|
2
|
+
/**
|
|
3
|
+
* `forumulate publish` and `forumulate sync` as the CLI runs them: the
|
|
4
|
+
* argument forms, the purge, and the run report (FMU-DOC07, D04, D16).
|
|
5
|
+
*
|
|
6
|
+
* Three argument forms grew up over time — a page id, a folder, and the folder
|
|
7
|
+
* with org and space as positionals — and the guides used all three, so an
|
|
8
|
+
* integrator could not tell which was current. One form is documented now
|
|
9
|
+
* (`publish <folder> --org … --space …`); the others still work and say so on
|
|
10
|
+
* stderr, with the line to use instead.
|
|
11
|
+
*/
|
|
12
|
+
export interface PublishCliDeps {
|
|
13
|
+
client: ForumulateClient;
|
|
14
|
+
authed: boolean;
|
|
15
|
+
out: (l: string) => void;
|
|
16
|
+
err: (l: string) => void;
|
|
17
|
+
env?: NodeJS.ProcessEnv;
|
|
18
|
+
upload?: (path: string, form: FormData) => Promise<unknown>;
|
|
19
|
+
sleep?: (ms: number) => Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
export interface FolderFlags {
|
|
22
|
+
org?: string;
|
|
23
|
+
space?: string;
|
|
24
|
+
manifest?: string;
|
|
25
|
+
dryRun: boolean;
|
|
26
|
+
prune: boolean;
|
|
27
|
+
force: boolean;
|
|
28
|
+
verify: boolean;
|
|
29
|
+
only?: string[];
|
|
30
|
+
paceMs: number;
|
|
31
|
+
json: boolean;
|
|
32
|
+
diff: boolean;
|
|
33
|
+
purge?: string;
|
|
34
|
+
report: boolean;
|
|
35
|
+
command: 'publish' | 'sync';
|
|
36
|
+
/** `--preview <name>` (FMU-F01): send the plan's pages to a preview, publish nothing. */
|
|
37
|
+
preview?: string;
|
|
38
|
+
/** `--preview-ttl <days>`. */
|
|
39
|
+
previewTtl?: string;
|
|
40
|
+
/** `--comment`: post (or update) the preview's comment on the pull request. */
|
|
41
|
+
comment?: boolean;
|
|
42
|
+
}
|
|
43
|
+
/** `publish …` in any of its forms. */
|
|
44
|
+
export declare function runPublishCli(rest: string[], flags: Omit<FolderFlags, 'command'>, deps: PublishCliDeps): Promise<number>;
|
|
45
|
+
/** The folder publish/sync, its run reported to the API, its summary printed. */
|
|
46
|
+
export declare function runFolder(folder: string, flags: FolderFlags, deps: PublishCliDeps): Promise<number>;
|
|
47
|
+
/** Many `purged` answers (one per import batch) as one. */
|
|
48
|
+
export declare function mergePurged(answers: Record<string, unknown>[]): {
|
|
49
|
+
scope: string;
|
|
50
|
+
urlCount: number;
|
|
51
|
+
urls: string[];
|
|
52
|
+
edge: string;
|
|
53
|
+
edges: unknown[];
|
|
54
|
+
} | null;
|
|
55
|
+
//# sourceMappingURL=publish-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish-command.d.ts","sourceRoot":"","sources":["../src/publish-command.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAKxD;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACzB,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,SAAS,GAAG,MAAM,CAAC;IAC5B,yFAAyF;IACzF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAaD,uCAAuC;AACvC,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,EACnC,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,MAAM,CAAC,CAgCjB;AAED,iFAAiF;AACjF,wBAAsB,SAAS,CAC7B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,MAAM,CAAC,CA4FjB;AAgDD,2DAA2D;AAC3D,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GACjC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,EAAE,CAAA;CAAE,GAAG,IAAI,CAuB5F"}
|