@forumulate/cli 0.3.6 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -3
- package/dist/cli.js +25 -1
- package/dist/cli.js.map +1 -1
- package/dist/publish/api.d.ts +95 -0
- package/dist/publish/api.d.ts.map +1 -0
- package/dist/publish/api.js +265 -0
- package/dist/publish/api.js.map +1 -0
- package/dist/publish/command.d.ts +44 -0
- package/dist/publish/command.d.ts.map +1 -0
- package/dist/publish/command.js +246 -0
- package/dist/publish/command.js.map +1 -0
- package/dist/publish/compare.d.ts +45 -0
- package/dist/publish/compare.d.ts.map +1 -0
- package/dist/publish/compare.js +124 -0
- package/dist/publish/compare.js.map +1 -0
- package/dist/publish/context.d.ts +46 -0
- package/dist/publish/context.d.ts.map +1 -0
- package/dist/publish/context.js +54 -0
- package/dist/publish/context.js.map +1 -0
- package/dist/publish/docs-apply.d.ts +39 -0
- package/dist/publish/docs-apply.d.ts.map +1 -0
- package/dist/publish/docs-apply.js +178 -0
- package/dist/publish/docs-apply.js.map +1 -0
- package/dist/publish/docs-plan.d.ts +40 -0
- package/dist/publish/docs-plan.d.ts.map +1 -0
- package/dist/publish/docs-plan.js +211 -0
- package/dist/publish/docs-plan.js.map +1 -0
- package/dist/publish/docs-reconcile.d.ts +26 -0
- package/dist/publish/docs-reconcile.d.ts.map +1 -0
- package/dist/publish/docs-reconcile.js +162 -0
- package/dist/publish/docs-reconcile.js.map +1 -0
- package/dist/publish/extras.d.ts +25 -0
- package/dist/publish/extras.d.ts.map +1 -0
- package/dist/publish/extras.js +218 -0
- package/dist/publish/extras.js.map +1 -0
- package/dist/publish/frontmatter.d.ts +45 -0
- package/dist/publish/frontmatter.d.ts.map +1 -0
- package/dist/publish/frontmatter.js +265 -0
- package/dist/publish/frontmatter.js.map +1 -0
- package/dist/publish/manifest.d.ts +5 -0
- package/dist/publish/manifest.d.ts.map +1 -0
- package/dist/publish/manifest.js +144 -0
- package/dist/publish/manifest.js.map +1 -0
- package/dist/publish/posts.d.ts +39 -0
- package/dist/publish/posts.d.ts.map +1 -0
- package/dist/publish/posts.js +350 -0
- package/dist/publish/posts.js.map +1 -0
- package/dist/publish/rewrite.d.ts +20 -0
- package/dist/publish/rewrite.d.ts.map +1 -0
- package/dist/publish/rewrite.js +82 -0
- package/dist/publish/rewrite.js.map +1 -0
- package/dist/publish/scan.d.ts +25 -0
- package/dist/publish/scan.d.ts.map +1 -0
- package/dist/publish/scan.js +351 -0
- package/dist/publish/scan.js.map +1 -0
- package/dist/publish/types.d.ts +155 -0
- package/dist/publish/types.d.ts.map +1 -0
- package/dist/publish/types.js +13 -0
- package/dist/publish/types.js.map +1 -0
- package/dist/run.d.ts +10 -1
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +58 -45
- package/dist/run.js.map +1 -1
- package/package.json +3 -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 @@
|
|
|
1
|
+
{"version":3,"file":"docs-reconcile.js","sourceRoot":"","sources":["../../src/publish/docs-reconcile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type SpaceCtx } from './context';
|
|
2
|
+
import type { PublishApi } from './api';
|
|
3
|
+
import type { LiveCollection, PlanLine, SiteSpec } from './types';
|
|
4
|
+
/**
|
|
5
|
+
* The manifest's other half: everything about a space that is not a page.
|
|
6
|
+
*
|
|
7
|
+
* Each of these is compared before it is written, the way pages are: a PATCH
|
|
8
|
+
* of a theme that already holds every key is a write with nothing in it, and a
|
|
9
|
+
* publisher that writes on every run cannot tell anybody what changed.
|
|
10
|
+
*/
|
|
11
|
+
/** `settings`, `name`, `visibility`: `PATCH /orgs/{o}/spaces/{s}` merges settings at the top level. */
|
|
12
|
+
export declare function syncSpace(ctx: SpaceCtx, apply: boolean): Promise<void>;
|
|
13
|
+
/** `theme`: `PATCH …/theme` deep-merges, so only the differing top-level keys are sent. */
|
|
14
|
+
export declare function syncTheme(ctx: SpaceCtx, apply: boolean): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* `openapi`: an API reference from a spec file or URL, through the importer
|
|
17
|
+
* that builds it atomically and converges when re-run against a changed spec.
|
|
18
|
+
* The collection it lands in is found by name, or created.
|
|
19
|
+
*/
|
|
20
|
+
export declare function syncOpenApi(ctx: SpaceCtx, apply: boolean, manifestFile: string | null, collections: LiveCollection[]): Promise<void>;
|
|
21
|
+
/** `monitors`: matched by name; created, patched where they differ, pruned with `--prune`. */
|
|
22
|
+
export declare function syncMonitors(ctx: SpaceCtx, apply: boolean): Promise<void>;
|
|
23
|
+
/** `site`: `PATCH /orgs/{o}/sites/{id}` deep-merges `config`, so only differing keys are sent. */
|
|
24
|
+
export declare function syncSite(api: PublishApi, org: string, site: SiteSpec, apply: boolean, line: (l: PlanLine) => void): Promise<void>;
|
|
25
|
+
//# sourceMappingURL=extras.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extras.d.ts","sourceRoot":"","sources":["../../src/publish/extras.ts"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAElE;;;;;;GAMG;AAEH,uGAAuG;AACvG,wBAAsB,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA0B5E;AAED,2FAA2F;AAC3F,wBAAsB,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB5E;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,OAAO,EACd,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,WAAW,EAAE,cAAc,EAAE,GAC5B,OAAO,CAAC,IAAI,CAAC,CA6Df;AAED,8FAA8F;AAC9F,wBAAsB,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAyD/E;AAED,kGAAkG;AAClG,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,UAAU,EACf,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,GAC1B,OAAO,CAAC,IAAI,CAAC,CA+Bf"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.syncSpace = syncSpace;
|
|
4
|
+
exports.syncTheme = syncTheme;
|
|
5
|
+
exports.syncOpenApi = syncOpenApi;
|
|
6
|
+
exports.syncMonitors = syncMonitors;
|
|
7
|
+
exports.syncSite = syncSite;
|
|
8
|
+
const node_fs_1 = require("node:fs");
|
|
9
|
+
const node_path_1 = require("node:path");
|
|
10
|
+
const yaml_1 = require("yaml");
|
|
11
|
+
const compare_1 = require("./compare");
|
|
12
|
+
const context_1 = require("./context");
|
|
13
|
+
/**
|
|
14
|
+
* The manifest's other half: everything about a space that is not a page.
|
|
15
|
+
*
|
|
16
|
+
* Each of these is compared before it is written, the way pages are: a PATCH
|
|
17
|
+
* of a theme that already holds every key is a write with nothing in it, and a
|
|
18
|
+
* publisher that writes on every run cannot tell anybody what changed.
|
|
19
|
+
*/
|
|
20
|
+
/** `settings`, `name`, `visibility`: `PATCH /orgs/{o}/spaces/{s}` merges settings at the top level. */
|
|
21
|
+
async function syncSpace(ctx, apply) {
|
|
22
|
+
const { spec } = ctx;
|
|
23
|
+
if (!ctx.only.part('settings', spec) || (!spec.settings && !spec.name && !spec.visibility))
|
|
24
|
+
return;
|
|
25
|
+
if (!ctx.api.opts.authed) {
|
|
26
|
+
ctx.line({ verb: 'patch', what: 'space settings', detail: 'cannot compare without a token' });
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const { space } = await ctx.api.get((0, context_1.spacePath)(ctx, ''));
|
|
30
|
+
const body = {};
|
|
31
|
+
if (spec.name && spec.name !== space.name)
|
|
32
|
+
body.name = spec.name;
|
|
33
|
+
if (spec.visibility && spec.visibility !== space.visibility)
|
|
34
|
+
body.visibility = spec.visibility;
|
|
35
|
+
const keys = spec.settings ? (0, compare_1.differingKeys)(space.settings, spec.settings) : [];
|
|
36
|
+
if (keys.length)
|
|
37
|
+
body.settings = Object.fromEntries(keys.map((k) => [k, spec.settings[k]]));
|
|
38
|
+
if (!Object.keys(body).length)
|
|
39
|
+
return;
|
|
40
|
+
ctx.line({
|
|
41
|
+
verb: 'patch',
|
|
42
|
+
what: 'space',
|
|
43
|
+
detail: [
|
|
44
|
+
...Object.keys(body).filter((k) => k !== 'settings'),
|
|
45
|
+
...keys.map((k) => `settings.${k}`),
|
|
46
|
+
].join(', '),
|
|
47
|
+
});
|
|
48
|
+
if (apply)
|
|
49
|
+
await ctx.api.patch((0, context_1.spacePath)(ctx, ''), body);
|
|
50
|
+
}
|
|
51
|
+
/** `theme`: `PATCH …/theme` deep-merges, so only the differing top-level keys are sent. */
|
|
52
|
+
async function syncTheme(ctx, apply) {
|
|
53
|
+
const want = ctx.spec.theme;
|
|
54
|
+
if (!want || !ctx.only.part('theme', ctx.spec))
|
|
55
|
+
return;
|
|
56
|
+
let current;
|
|
57
|
+
if (ctx.api.opts.authed)
|
|
58
|
+
current = (await ctx.api.get((0, context_1.spacePath)(ctx, '/theme')))
|
|
59
|
+
.theme;
|
|
60
|
+
else {
|
|
61
|
+
const r = await ctx.api
|
|
62
|
+
.get(`/public/orgs/${ctx.org}/spaces/${ctx.spaceId}`)
|
|
63
|
+
.catch(() => ({ theme: undefined }));
|
|
64
|
+
current = r.theme;
|
|
65
|
+
}
|
|
66
|
+
const keys = (0, compare_1.differingKeys)(current, want);
|
|
67
|
+
if (!keys.length)
|
|
68
|
+
return;
|
|
69
|
+
ctx.line({ verb: 'patch', what: 'theme', detail: keys.join(', ') });
|
|
70
|
+
if (apply)
|
|
71
|
+
await ctx.api.patch((0, context_1.spacePath)(ctx, '/theme'), Object.fromEntries(keys.map((k) => [k, want[k]])));
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* `openapi`: an API reference from a spec file or URL, through the importer
|
|
75
|
+
* that builds it atomically and converges when re-run against a changed spec.
|
|
76
|
+
* The collection it lands in is found by name, or created.
|
|
77
|
+
*/
|
|
78
|
+
async function syncOpenApi(ctx, apply, manifestFile, collections) {
|
|
79
|
+
if (!ctx.only.part('openapi', ctx.spec))
|
|
80
|
+
return;
|
|
81
|
+
for (const entry of ctx.spec.openapi ?? []) {
|
|
82
|
+
const { spec: file, url, collection, ...rest } = entry;
|
|
83
|
+
let spec;
|
|
84
|
+
if (file) {
|
|
85
|
+
const abs = (0, node_path_1.resolve)(manifestFile ? (0, node_path_1.dirname)(manifestFile) : ctx.root, file);
|
|
86
|
+
const text = (0, node_fs_1.readFileSync)(abs, 'utf8');
|
|
87
|
+
spec = /\.json$/i.test(abs) ? JSON.parse(text) : (0, yaml_1.parse)(text);
|
|
88
|
+
}
|
|
89
|
+
const target = collections.find((c) => c.name.toLowerCase() === collection.toLowerCase() || c.slug === collection);
|
|
90
|
+
const what = `openapi ${file ?? url} → "${collection}"`;
|
|
91
|
+
if (!ctx.api.opts.authed) {
|
|
92
|
+
ctx.line({
|
|
93
|
+
verb: 'import',
|
|
94
|
+
what,
|
|
95
|
+
detail: target ? 'replace (not compared without a token)' : 'into a new collection',
|
|
96
|
+
});
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
const body = {
|
|
100
|
+
...rest,
|
|
101
|
+
...(spec ? { spec } : { url }),
|
|
102
|
+
onExisting: rest.onExisting ?? 'replace',
|
|
103
|
+
};
|
|
104
|
+
if (!apply) {
|
|
105
|
+
if (!target) {
|
|
106
|
+
ctx.line({ verb: 'import', what, detail: 'into a new collection' });
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
// The importer's own dry run: writes nothing, reports collisions first.
|
|
110
|
+
const r = await ctx.api.opts.client.request('POST', (0, context_1.spacePath)(ctx, '/docs/openapi/import'), {
|
|
111
|
+
body: { ...body, collectionId: target.id, dryRun: true },
|
|
112
|
+
});
|
|
113
|
+
ctx.line({
|
|
114
|
+
verb: 'import',
|
|
115
|
+
what,
|
|
116
|
+
detail: `${r.created} new, ${r.replaced} replaced${r.collisions?.length ? `, collisions: ${r.collisions.join(', ')}` : ''}`,
|
|
117
|
+
});
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
const id = target?.id ??
|
|
121
|
+
(await ctx.api.post((0, context_1.spacePath)(ctx, '/collections'), {
|
|
122
|
+
name: collection,
|
|
123
|
+
})).collection.id;
|
|
124
|
+
const r = await ctx.api.post((0, context_1.spacePath)(ctx, '/docs/openapi/import'), { ...body, collectionId: id });
|
|
125
|
+
ctx.line({ verb: 'import', what, detail: `${r.created} new, ${r.replaced} replaced` });
|
|
126
|
+
for (const w of r.warnings ?? [])
|
|
127
|
+
ctx.line({ verb: 'warn', what, detail: w });
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/** `monitors`: matched by name; created, patched where they differ, pruned with `--prune`. */
|
|
131
|
+
async function syncMonitors(ctx, apply) {
|
|
132
|
+
const want = ctx.spec.monitors;
|
|
133
|
+
if (!want || !ctx.only.part('monitors', ctx.spec))
|
|
134
|
+
return;
|
|
135
|
+
if (ctx.type !== 'STATUS') {
|
|
136
|
+
ctx.errors.push(`monitors belong on a STATUS space; ${ctx.spec.space} is ${ctx.type}`);
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
if (!ctx.api.opts.authed) {
|
|
140
|
+
ctx.line({
|
|
141
|
+
verb: 'patch',
|
|
142
|
+
what: 'monitors',
|
|
143
|
+
detail: `${want.length} declared — cannot compare without a token`,
|
|
144
|
+
});
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
const live = await ctx.api.all((0, context_1.spacePath)(ctx, '/status/monitors'), 'monitors', { limit: 500 });
|
|
148
|
+
const byName = new Map(live.map((m) => [m.name, m]));
|
|
149
|
+
for (const m of want) {
|
|
150
|
+
const name = String(m.name);
|
|
151
|
+
const current = byName.get(name);
|
|
152
|
+
if (!current) {
|
|
153
|
+
ctx.line({ verb: 'create', what: `monitor ${name}`, detail: String(m.url ?? m.kind ?? '') });
|
|
154
|
+
if (apply)
|
|
155
|
+
await ctx.api.post((0, context_1.spacePath)(ctx, '/status/monitors'), m);
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
// Header VALUES are write-only (the API answers with their names), so a
|
|
159
|
+
// monitor is compared on the names and re-sent only when those differ.
|
|
160
|
+
const comparable = { ...m };
|
|
161
|
+
const headers = comparable.requestHeaders;
|
|
162
|
+
delete comparable.requestHeaders;
|
|
163
|
+
const keys = (0, compare_1.differingKeys)(current, comparable);
|
|
164
|
+
if (headers &&
|
|
165
|
+
!(0, compare_1.holds)([...(current.requestHeaderNames ?? [])].sort(), Object.keys(headers).sort()))
|
|
166
|
+
keys.push('requestHeaders');
|
|
167
|
+
if (!keys.length)
|
|
168
|
+
continue;
|
|
169
|
+
ctx.line({ verb: 'patch', what: `monitor ${name}`, detail: keys.join(', ') });
|
|
170
|
+
if (apply)
|
|
171
|
+
await ctx.api.patch((0, context_1.spacePath)(ctx, `/status/monitors/${current.id}`), Object.fromEntries(keys.map((k) => [k, m[k]])));
|
|
172
|
+
}
|
|
173
|
+
if (!ctx.prune || !ctx.only.all)
|
|
174
|
+
return;
|
|
175
|
+
const declared = new Set(want.map((m) => String(m.name)));
|
|
176
|
+
for (const m of live) {
|
|
177
|
+
if (declared.has(m.name))
|
|
178
|
+
continue;
|
|
179
|
+
ctx.line({
|
|
180
|
+
verb: 'prune',
|
|
181
|
+
what: `monitor ${m.name}`,
|
|
182
|
+
detail: 'not in the manifest — its history goes with it',
|
|
183
|
+
});
|
|
184
|
+
if (apply)
|
|
185
|
+
await ctx.api.del((0, context_1.spacePath)(ctx, `/status/monitors/${m.id}`));
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/** `site`: `PATCH /orgs/{o}/sites/{id}` deep-merges `config`, so only differing keys are sent. */
|
|
189
|
+
async function syncSite(api, org, site, apply, line) {
|
|
190
|
+
if (!api.opts.authed) {
|
|
191
|
+
line({
|
|
192
|
+
verb: 'patch',
|
|
193
|
+
what: `site ${site.slug ?? site.id}`,
|
|
194
|
+
detail: 'cannot compare without a token',
|
|
195
|
+
});
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
const sites = await api.all(`/orgs/${org}/sites`, 'sites', { limit: 500 });
|
|
199
|
+
const live = sites.find((s) => s.id === site.id || s.slug === site.slug);
|
|
200
|
+
if (!live)
|
|
201
|
+
throw new Error(`No site "${site.slug ?? site.id}" in this organization (it has: ${sites.map((s) => s.slug).join(', ') || 'none'})`);
|
|
202
|
+
const body = {};
|
|
203
|
+
if (site.name && site.name !== live.name)
|
|
204
|
+
body.name = site.name;
|
|
205
|
+
const keys = site.config ? (0, compare_1.differingKeys)(live.config, site.config) : [];
|
|
206
|
+
if (keys.length)
|
|
207
|
+
body.config = Object.fromEntries(keys.map((k) => [k, site.config[k]]));
|
|
208
|
+
if (!Object.keys(body).length)
|
|
209
|
+
return;
|
|
210
|
+
line({
|
|
211
|
+
verb: 'patch',
|
|
212
|
+
what: `site ${live.slug}`,
|
|
213
|
+
detail: [...(body.name ? ['name'] : []), ...keys.map((k) => `config.${k}`)].join(', '),
|
|
214
|
+
});
|
|
215
|
+
if (apply)
|
|
216
|
+
await api.patch(`/orgs/${org}/sites/${live.id}`, body);
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=extras.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extras.js","sourceRoot":"","sources":["../../src/publish/extras.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { MetaPatch } from './types';
|
|
2
|
+
export declare function splitFront(text: string): {
|
|
3
|
+
data: Record<string, unknown>;
|
|
4
|
+
body: string;
|
|
5
|
+
raw: string | null;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Put `slug: <slug>` in a file's front matter, replacing one already there.
|
|
9
|
+
*
|
|
10
|
+
* The CLI decides every address before anything is sent and DECLARES it, so
|
|
11
|
+
* the importer cannot disagree with the plan: its own filename rule keeps a
|
|
12
|
+
* `01-` prefix the CLI strips, and a plan that names one address while the
|
|
13
|
+
* write lands at another is the failure a dry run exists to prevent. Only the
|
|
14
|
+
* slug is injected. A title is not — the importer treats a declared title as
|
|
15
|
+
* "the body's heading is not a duplicate" and the page would show it twice.
|
|
16
|
+
*/
|
|
17
|
+
export declare function declareSlug(text: string, slug: string): string;
|
|
18
|
+
/** `seo_title`, `seo-title`, `SeoTitle` → `seoTitle`. */
|
|
19
|
+
export declare function camel(key: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* Every field `PATCH …/pages/{id}/metadata` takes. A front matter key that is
|
|
22
|
+
* one of these (in any casing) is sent as written; the API validates it.
|
|
23
|
+
*/
|
|
24
|
+
export declare const PAGE_META_KEYS: readonly ["tags", "audience", "fields", "icon", "hideFromNav", "externalUrl", "navTitle", "badge", "navKind", "navFont", "searchExclude", "coverUrl", "layout", "hideTitle", "subtitle", "hideUpdated", "hideCover", "template", "hero", "tocLevels", "pageChrome", "titleAlign", "themePatch", "onThisPage", "apiMethod", "apiPage", "seoTitle", "seoDescription", "noindex", "contentLanguage", "canonicalUrl", "hideFeedback", "editUrl", "sourcePath", "pager", "hidePager", "keywords", "commentsEnabled", "customCss", "theme", "shareImageUrl", "ogTitle", "ogDescription", "twitterCard", "jsonLd"];
|
|
25
|
+
/** Keys that position a page among its siblings. Read here, never sent. */
|
|
26
|
+
export declare const ORDER_KEYS: string[];
|
|
27
|
+
/** A front matter `order`, wherever the tool put it. */
|
|
28
|
+
export declare function declaredOrder(data: Record<string, unknown>): number | undefined;
|
|
29
|
+
/** A front matter `draft: true` — the page is left out, and the plan says so. */
|
|
30
|
+
export declare function isDraft(data: Record<string, unknown>): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Front matter → the metadata patch for a docs page.
|
|
33
|
+
*
|
|
34
|
+
* `fieldKeys` are the parameters the space's type declares (`audience`,
|
|
35
|
+
* `appliesTo`, `deprecated` for docs); those go under `fields`, everything the
|
|
36
|
+
* page model takes goes at the top, `metadata:` is an escape hatch merged as
|
|
37
|
+
* written, and the rest is returned as `unknown` for the plan to name. A key
|
|
38
|
+
* nobody reads, published silently, is how a page ships without the thing its
|
|
39
|
+
* author thought they set.
|
|
40
|
+
*/
|
|
41
|
+
export declare function pageMeta(data: Record<string, unknown>, fieldKeys: string[]): {
|
|
42
|
+
meta: MetaPatch;
|
|
43
|
+
unknown: string[];
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=frontmatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../../src/publish/frontmatter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAczC,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG;IACxC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB,CAeA;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAK9D;AAED,yDAAyD;AACzD,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUzC;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,6kBA8CjB,CAAC;AA4BX,2EAA2E;AAC3E,eAAO,MAAM,UAAU,UAAiE,CAAC;AAsDzF,wDAAwD;AACxD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS,CAO/E;AAED,iFAAiF;AACjF,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAE9D;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,SAAS,EAAE,MAAM,EAAE,GAClB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CA+CxC"}
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ORDER_KEYS = exports.PAGE_META_KEYS = void 0;
|
|
4
|
+
exports.splitFront = splitFront;
|
|
5
|
+
exports.declareSlug = declareSlug;
|
|
6
|
+
exports.camel = camel;
|
|
7
|
+
exports.declaredOrder = declaredOrder;
|
|
8
|
+
exports.isDraft = isDraft;
|
|
9
|
+
exports.pageMeta = pageMeta;
|
|
10
|
+
const yaml_1 = require("yaml");
|
|
11
|
+
/**
|
|
12
|
+
* Front matter, read as the YAML it is.
|
|
13
|
+
*
|
|
14
|
+
* The directory publisher this replaces read `key: value` lines and nothing
|
|
15
|
+
* else, so `tags:` written as a list (which is how every static-site generator
|
|
16
|
+
* writes it) arrived as an empty string and a `hero:` block vanished. Four
|
|
17
|
+
* customers wrote their own publishers rather than live with that. A file that
|
|
18
|
+
* is not valid YAML is an error naming the file, not a silently empty map: a
|
|
19
|
+
* page published without the icon its author gave it is a bug nobody reports.
|
|
20
|
+
*/
|
|
21
|
+
const FRONT = /^\ufeff?---\r?\n([\s\S]*?)\r?\n---[ \t]*(?:\r?\n|$)/;
|
|
22
|
+
function splitFront(text) {
|
|
23
|
+
const m = FRONT.exec(text);
|
|
24
|
+
if (!m)
|
|
25
|
+
return { data: {}, body: text, raw: null };
|
|
26
|
+
const parsed = (0, yaml_1.parse)(m[1] ?? '');
|
|
27
|
+
if (parsed !== null &&
|
|
28
|
+
parsed !== undefined &&
|
|
29
|
+
(typeof parsed !== 'object' || Array.isArray(parsed)))
|
|
30
|
+
throw new Error('front matter is not a map of keys');
|
|
31
|
+
return {
|
|
32
|
+
data: (parsed ?? {}),
|
|
33
|
+
body: text.slice(m[0].length),
|
|
34
|
+
raw: m[1] ?? '',
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Put `slug: <slug>` in a file's front matter, replacing one already there.
|
|
39
|
+
*
|
|
40
|
+
* The CLI decides every address before anything is sent and DECLARES it, so
|
|
41
|
+
* the importer cannot disagree with the plan: its own filename rule keeps a
|
|
42
|
+
* `01-` prefix the CLI strips, and a plan that names one address while the
|
|
43
|
+
* write lands at another is the failure a dry run exists to prevent. Only the
|
|
44
|
+
* slug is injected. A title is not — the importer treats a declared title as
|
|
45
|
+
* "the body's heading is not a duplicate" and the page would show it twice.
|
|
46
|
+
*/
|
|
47
|
+
function declareSlug(text, slug) {
|
|
48
|
+
const m = FRONT.exec(text);
|
|
49
|
+
if (!m)
|
|
50
|
+
return `---\nslug: ${slug}\n---\n${text}`;
|
|
51
|
+
const lines = (m[1] ?? '').split(/\r?\n/).filter((l) => !/^slug\s*:/i.test(l));
|
|
52
|
+
return `---\n${[...lines, `slug: ${slug}`].join('\n')}\n---\n${text.slice(m[0].length)}`;
|
|
53
|
+
}
|
|
54
|
+
/** `seo_title`, `seo-title`, `SeoTitle` → `seoTitle`. */
|
|
55
|
+
function camel(key) {
|
|
56
|
+
const parts = key
|
|
57
|
+
.trim()
|
|
58
|
+
.split(/[-_\s]+/)
|
|
59
|
+
.filter(Boolean);
|
|
60
|
+
return parts
|
|
61
|
+
.map((p, i) => i === 0 ? p.charAt(0).toLowerCase() + p.slice(1) : p.charAt(0).toUpperCase() + p.slice(1))
|
|
62
|
+
.join('');
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Every field `PATCH …/pages/{id}/metadata` takes. A front matter key that is
|
|
66
|
+
* one of these (in any casing) is sent as written; the API validates it.
|
|
67
|
+
*/
|
|
68
|
+
exports.PAGE_META_KEYS = [
|
|
69
|
+
'tags',
|
|
70
|
+
'audience',
|
|
71
|
+
'fields',
|
|
72
|
+
'icon',
|
|
73
|
+
'hideFromNav',
|
|
74
|
+
'externalUrl',
|
|
75
|
+
'navTitle',
|
|
76
|
+
'badge',
|
|
77
|
+
'navKind',
|
|
78
|
+
'navFont',
|
|
79
|
+
'searchExclude',
|
|
80
|
+
'coverUrl',
|
|
81
|
+
'layout',
|
|
82
|
+
'hideTitle',
|
|
83
|
+
'subtitle',
|
|
84
|
+
'hideUpdated',
|
|
85
|
+
'hideCover',
|
|
86
|
+
'template',
|
|
87
|
+
'hero',
|
|
88
|
+
'tocLevels',
|
|
89
|
+
'pageChrome',
|
|
90
|
+
'titleAlign',
|
|
91
|
+
'themePatch',
|
|
92
|
+
'onThisPage',
|
|
93
|
+
'apiMethod',
|
|
94
|
+
'apiPage',
|
|
95
|
+
'seoTitle',
|
|
96
|
+
'seoDescription',
|
|
97
|
+
'noindex',
|
|
98
|
+
'contentLanguage',
|
|
99
|
+
'canonicalUrl',
|
|
100
|
+
'hideFeedback',
|
|
101
|
+
'editUrl',
|
|
102
|
+
'sourcePath',
|
|
103
|
+
'pager',
|
|
104
|
+
'hidePager',
|
|
105
|
+
'keywords',
|
|
106
|
+
'commentsEnabled',
|
|
107
|
+
'customCss',
|
|
108
|
+
'theme',
|
|
109
|
+
'shareImageUrl',
|
|
110
|
+
'ogTitle',
|
|
111
|
+
'ogDescription',
|
|
112
|
+
'twitterCard',
|
|
113
|
+
'jsonLd',
|
|
114
|
+
];
|
|
115
|
+
const META_BY_LOWER = new Map(exports.PAGE_META_KEYS.map((k) => [k.toLowerCase(), k]));
|
|
116
|
+
/**
|
|
117
|
+
* The names other tools use for the same idea, so a Docusaurus, Jekyll, Hugo
|
|
118
|
+
* or MkDocs tree publishes without being rewritten first.
|
|
119
|
+
*/
|
|
120
|
+
const ALIASES = {
|
|
121
|
+
description: 'seoDescription',
|
|
122
|
+
summary: 'seoDescription',
|
|
123
|
+
sidebarlabel: 'navTitle',
|
|
124
|
+
navlabel: 'navTitle',
|
|
125
|
+
shorttitle: 'navTitle',
|
|
126
|
+
linktitle: 'navTitle',
|
|
127
|
+
hidden: 'hideFromNav',
|
|
128
|
+
navexclude: 'hideFromNav',
|
|
129
|
+
sidebarhidden: 'hideFromNav',
|
|
130
|
+
image: 'coverUrl',
|
|
131
|
+
cover: 'coverUrl',
|
|
132
|
+
coverimage: 'coverUrl',
|
|
133
|
+
ogimage: 'shareImageUrl',
|
|
134
|
+
socialimage: 'shareImageUrl',
|
|
135
|
+
canonical: 'canonicalUrl',
|
|
136
|
+
lang: 'contentLanguage',
|
|
137
|
+
language: 'contentLanguage',
|
|
138
|
+
toc: 'onThisPage',
|
|
139
|
+
};
|
|
140
|
+
/** Keys that position a page among its siblings. Read here, never sent. */
|
|
141
|
+
exports.ORDER_KEYS = ['order', 'sidebarposition', 'navorder', 'weight', 'position'];
|
|
142
|
+
/**
|
|
143
|
+
* Keys the importer itself reads (`title`, `slug`, `redirect_from`, `author`,
|
|
144
|
+
* `api`) or that only mean something to the tool a tree came from. Neither is
|
|
145
|
+
* an "unknown key" worth a warning.
|
|
146
|
+
*/
|
|
147
|
+
const HANDLED = new Set([
|
|
148
|
+
'title',
|
|
149
|
+
'slug',
|
|
150
|
+
'redirectfrom',
|
|
151
|
+
'author',
|
|
152
|
+
'api',
|
|
153
|
+
'openapi',
|
|
154
|
+
'draft',
|
|
155
|
+
'metadata',
|
|
156
|
+
'id',
|
|
157
|
+
'permalink',
|
|
158
|
+
'parent',
|
|
159
|
+
'haschildren',
|
|
160
|
+
'grandparent',
|
|
161
|
+
'sidebarclassname',
|
|
162
|
+
'paginationnext',
|
|
163
|
+
'paginationprev',
|
|
164
|
+
'date',
|
|
165
|
+
'lastmod',
|
|
166
|
+
'authors',
|
|
167
|
+
'type',
|
|
168
|
+
'kind',
|
|
169
|
+
'menu',
|
|
170
|
+
'url',
|
|
171
|
+
'aliases',
|
|
172
|
+
...exports.ORDER_KEYS,
|
|
173
|
+
]);
|
|
174
|
+
/** Enumerated fields whose other-tool spellings must not reach the API as a 422. */
|
|
175
|
+
const ENUMS = {
|
|
176
|
+
layout: ['narrow', 'default', 'wide', 'full', 'center', 'custom'],
|
|
177
|
+
template: ['doc', 'splash'],
|
|
178
|
+
titleAlign: ['start', 'center'],
|
|
179
|
+
};
|
|
180
|
+
/** `a, b` and `[a, b]` and a YAML list all mean the same list. */
|
|
181
|
+
function list(v) {
|
|
182
|
+
if (Array.isArray(v))
|
|
183
|
+
return v.map((x) => String(x).trim()).filter(Boolean);
|
|
184
|
+
if (typeof v === 'string')
|
|
185
|
+
return v
|
|
186
|
+
.replace(/^\[|\]$/g, '')
|
|
187
|
+
.split(',')
|
|
188
|
+
.map((s) => s.trim())
|
|
189
|
+
.filter(Boolean);
|
|
190
|
+
return undefined;
|
|
191
|
+
}
|
|
192
|
+
/** A front matter `order`, wherever the tool put it. */
|
|
193
|
+
function declaredOrder(data) {
|
|
194
|
+
for (const [k, v] of Object.entries(data)) {
|
|
195
|
+
if (!exports.ORDER_KEYS.includes(k.toLowerCase().replace(/[-_]/g, '')))
|
|
196
|
+
continue;
|
|
197
|
+
const n = typeof v === 'number' ? v : Number(v);
|
|
198
|
+
if (Number.isFinite(n))
|
|
199
|
+
return n;
|
|
200
|
+
}
|
|
201
|
+
return undefined;
|
|
202
|
+
}
|
|
203
|
+
/** A front matter `draft: true` — the page is left out, and the plan says so. */
|
|
204
|
+
function isDraft(data) {
|
|
205
|
+
return data.draft === true || data.draft === 'true';
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Front matter → the metadata patch for a docs page.
|
|
209
|
+
*
|
|
210
|
+
* `fieldKeys` are the parameters the space's type declares (`audience`,
|
|
211
|
+
* `appliesTo`, `deprecated` for docs); those go under `fields`, everything the
|
|
212
|
+
* page model takes goes at the top, `metadata:` is an escape hatch merged as
|
|
213
|
+
* written, and the rest is returned as `unknown` for the plan to name. A key
|
|
214
|
+
* nobody reads, published silently, is how a page ships without the thing its
|
|
215
|
+
* author thought they set.
|
|
216
|
+
*/
|
|
217
|
+
function pageMeta(data, fieldKeys) {
|
|
218
|
+
const meta = {};
|
|
219
|
+
const fields = {};
|
|
220
|
+
const unknown = [];
|
|
221
|
+
const declared = new Map(fieldKeys.map((k) => [k.toLowerCase(), k]));
|
|
222
|
+
for (const [rawKey, value] of Object.entries(data)) {
|
|
223
|
+
const lower = rawKey.toLowerCase().replace(/[-_\s]/g, '');
|
|
224
|
+
if (lower === 'metadata' && value && typeof value === 'object') {
|
|
225
|
+
Object.assign(meta, value);
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
// A declared parameter wins over a same-named page field: `audience:
|
|
229
|
+
// Administrators` is "written for", not the audience gate (an object).
|
|
230
|
+
const field = declared.get(lower);
|
|
231
|
+
if (field &&
|
|
232
|
+
field !== 'author' &&
|
|
233
|
+
!(lower === 'audience' && value && typeof value === 'object')) {
|
|
234
|
+
fields[field] = value;
|
|
235
|
+
continue;
|
|
236
|
+
}
|
|
237
|
+
if (HANDLED.has(lower))
|
|
238
|
+
continue;
|
|
239
|
+
const key = META_BY_LOWER.get(lower) ?? ALIASES[lower] ?? META_BY_LOWER.get(camel(rawKey).toLowerCase());
|
|
240
|
+
if (!key) {
|
|
241
|
+
unknown.push(rawKey);
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
if (key === 'tags' || key === 'keywords') {
|
|
245
|
+
const l = list(value);
|
|
246
|
+
if (l)
|
|
247
|
+
meta[key] = l;
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
const allowed = ENUMS[key];
|
|
251
|
+
if (allowed && !allowed.includes(String(value))) {
|
|
252
|
+
unknown.push(`${rawKey} (${String(value)} is not one of ${allowed.join('/')})`);
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
if (key === 'onThisPage' && typeof value === 'boolean') {
|
|
256
|
+
meta[key] = value ? 'always' : 'never';
|
|
257
|
+
continue;
|
|
258
|
+
}
|
|
259
|
+
meta[key] = value instanceof Date ? value.toISOString() : value;
|
|
260
|
+
}
|
|
261
|
+
if (Object.keys(fields).length)
|
|
262
|
+
meta.fields = { ...(meta.fields ?? {}), ...fields };
|
|
263
|
+
return { meta, unknown };
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=frontmatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/publish/frontmatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Manifest } from './types';
|
|
2
|
+
export declare function findManifest(root: string, explicit?: string): string | null;
|
|
3
|
+
/** Read and check the manifest; `null` file → the one-space default. */
|
|
4
|
+
export declare function loadManifest(file: string | null): Manifest;
|
|
5
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/publish/manifest.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAuB,MAAM,SAAS,CAAC;AAwC7D,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAW3E;AAmDD,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,QAAQ,CA2B1D"}
|