@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
package/dist/publish/scan.js
CHANGED
|
@@ -1,121 +1,95 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.extOf = exports.toPosix = exports.MANIFEST_NAMES = void 0;
|
|
4
|
-
exports.slugify = slugify;
|
|
5
|
-
exports.tagKey = tagKey;
|
|
6
|
-
exports.titleize = titleize;
|
|
3
|
+
exports.extOf = exports.toPosix = exports.MANIFEST_NAMES = exports.titleize = exports.tagKey = exports.slugify = void 0;
|
|
7
4
|
exports.scanSpace = scanSpace;
|
|
8
5
|
const node_fs_1 = require("node:fs");
|
|
9
6
|
const node_path_1 = require("node:path");
|
|
10
7
|
const yaml_1 = require("yaml");
|
|
11
8
|
const frontmatter_1 = require("./frontmatter");
|
|
9
|
+
const names_1 = require("./names");
|
|
10
|
+
const reserved_1 = require("./reserved");
|
|
11
|
+
Object.defineProperty(exports, "MANIFEST_NAMES", { enumerable: true, get: function () { return reserved_1.MANIFEST_NAMES; } });
|
|
12
|
+
const scan_docs_1 = require("./scan-docs");
|
|
12
13
|
/**
|
|
13
14
|
* A folder on disk, read into what it would publish.
|
|
14
15
|
*
|
|
15
|
-
* Docs
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
16
|
+
* Docs are walked in `scan-docs.ts` (collections, nesting, folder pages).
|
|
17
|
+
* Everything else — blog, changelog, any type whose pieces are posts — is a
|
|
18
|
+
* flat set of posts, folders or not. Both go through the same skip rules
|
|
19
|
+
* (`reserved.ts`) and the same reader, which records the local files each
|
|
20
|
+
* document points at for upload.
|
|
20
21
|
*/
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
exports
|
|
25
|
-
|
|
26
|
-
const
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
.
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
.normalize('NFD')
|
|
52
|
-
.replace(/[\u0300-\u036f]/g, '')
|
|
53
|
-
.normalize('NFC')
|
|
54
|
-
.replace(/[^\p{Letter}\p{Number}+#.-]+/gu, '-')
|
|
55
|
-
.replace(/^[-#]+/, '')
|
|
56
|
-
.replace(/^\.+(?![\p{Letter}\p{Number}])/u, '')
|
|
57
|
-
.replace(/^[-#]+/, '')
|
|
58
|
-
.replace(/[-.]+$/, '');
|
|
59
|
-
if (!/[\p{Letter}\p{Number}]/u.test(t))
|
|
60
|
-
return '';
|
|
61
|
-
return t.slice(0, 60).replace(/[-.]+$/, '');
|
|
62
|
-
}
|
|
63
|
-
/** `02-getting-started` → `Getting Started`. */
|
|
64
|
-
function titleize(name) {
|
|
65
|
-
const bare = name.replace(NUMERIC, '').replace(/[-_]+/g, ' ').trim();
|
|
66
|
-
return bare.replace(/\b\p{Letter}/gu, (c) => c.toUpperCase()) || name;
|
|
67
|
-
}
|
|
68
|
-
const isIndex = (file) => /^(index|readme)\.(md|mdx|markdown)$/i.test((0, node_path_1.basename)(file));
|
|
69
|
-
const skipEntry = (name) => name.startsWith('.') ||
|
|
70
|
-
name.startsWith('_') ||
|
|
71
|
-
name === 'node_modules' ||
|
|
72
|
-
exports.MANIFEST_NAMES.includes(name);
|
|
73
|
-
/** `[n, name]` from a numeric prefix, or "no position" sorted by name. */
|
|
74
|
-
function prefixOrder(name) {
|
|
75
|
-
const m = NUMERIC.exec(name);
|
|
76
|
-
return [m ? Number(m[1]) : BIG, name.replace(NUMERIC, '').toLowerCase()];
|
|
22
|
+
var names_2 = require("./names");
|
|
23
|
+
Object.defineProperty(exports, "slugify", { enumerable: true, get: function () { return names_2.slugify; } });
|
|
24
|
+
Object.defineProperty(exports, "tagKey", { enumerable: true, get: function () { return names_2.tagKey; } });
|
|
25
|
+
Object.defineProperty(exports, "titleize", { enumerable: true, get: function () { return names_2.titleize; } });
|
|
26
|
+
function skipperFor(out, spec, kind) {
|
|
27
|
+
const readmeIsIndex = kind === 'docs' && spec.readme !== 'skip';
|
|
28
|
+
const ignored = (0, reserved_1.ignoreMatcher)(spec.ignore);
|
|
29
|
+
const recorded = new Set();
|
|
30
|
+
const skip = ((abs, name) => {
|
|
31
|
+
const full = (0, node_path_1.join)(abs, name);
|
|
32
|
+
let isDir = false;
|
|
33
|
+
try {
|
|
34
|
+
isDir = (0, node_fs_1.statSync)(full).isDirectory();
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
const rel = (0, node_path_1.relative)(out.absDir, full).split(node_path_1.sep).join('/');
|
|
40
|
+
const reason = (0, reserved_1.reservedReason)(name, isDir, readmeIsIndex) ?? (ignored(rel) ? 'ignore: in the manifest' : null);
|
|
41
|
+
if (!reason)
|
|
42
|
+
return false;
|
|
43
|
+
// Folders are reported once by name when they would have held content.
|
|
44
|
+
if ((names_1.MD.test(name) || (isDir && !name.startsWith('.') && name !== 'node_modules')) && !recorded.has(rel)) {
|
|
45
|
+
recorded.add(rel);
|
|
46
|
+
out.skipped.push({ file: isDir ? `${rel}/` : rel, reason });
|
|
47
|
+
}
|
|
48
|
+
return true;
|
|
49
|
+
});
|
|
50
|
+
skip.readmeIsIndex = readmeIsIndex;
|
|
51
|
+
return skip;
|
|
77
52
|
}
|
|
78
|
-
|
|
53
|
+
const isIndexName = (file, readmeIsIndex) => /^index\.(md|mdx|markdown)$/i.test((0, node_path_1.basename)(file)) || (readmeIsIndex && (0, reserved_1.isReadme)((0, node_path_1.basename)(file)));
|
|
54
|
+
function hasMarkdown(dir, skip) {
|
|
79
55
|
for (const e of (0, node_fs_1.readdirSync)(dir)) {
|
|
80
|
-
if (
|
|
56
|
+
if (skip(dir, e))
|
|
81
57
|
continue;
|
|
82
58
|
const p = (0, node_path_1.join)(dir, e);
|
|
83
|
-
if ((0, node_fs_1.statSync)(p).isDirectory() ? hasMarkdown(p) : MD.test(e))
|
|
59
|
+
if ((0, node_fs_1.statSync)(p).isDirectory() ? hasMarkdown(p, skip) : names_1.MD.test(e))
|
|
84
60
|
return true;
|
|
85
61
|
}
|
|
86
62
|
return false;
|
|
87
63
|
}
|
|
88
|
-
/** `
|
|
89
|
-
function
|
|
90
|
-
for (const n of ['
|
|
64
|
+
/** `_tags.yml` / `.yaml` / `.json` at the top of a space folder: its blog categories. */
|
|
65
|
+
function tagsFile(dir) {
|
|
66
|
+
for (const n of ['_tags.yml', '_tags.yaml', '_tags.json']) {
|
|
91
67
|
const p = (0, node_path_1.join)(dir, n);
|
|
92
|
-
if ((0, node_fs_1.existsSync)(p))
|
|
93
|
-
|
|
68
|
+
if (!(0, node_fs_1.existsSync)(p))
|
|
69
|
+
continue;
|
|
70
|
+
const raw = (0, yaml_1.parse)((0, node_fs_1.readFileSync)(p, 'utf8'));
|
|
71
|
+
if (raw === null || raw === undefined)
|
|
72
|
+
return {};
|
|
73
|
+
if (typeof raw !== 'object' || Array.isArray(raw))
|
|
74
|
+
throw new Error(`${n}: must be a map of tag slug → how it looks`);
|
|
75
|
+
return raw;
|
|
94
76
|
}
|
|
95
77
|
return {};
|
|
96
78
|
}
|
|
97
|
-
/** The title a page will get: front matter, else the leading `# heading` (the importer's rule). */
|
|
98
|
-
function titleOf(front, body, fallback) {
|
|
99
|
-
if (typeof front.title === 'string' && front.title.trim())
|
|
100
|
-
return front.title.trim();
|
|
101
|
-
const first = body.split(/\r?\n/).find((l) => l.trim());
|
|
102
|
-
const h1 = first && /^#\s+(.+?)\s*#*\s*$/.exec(first);
|
|
103
|
-
// A title is stored as plain text: the importer keeps the heading's words and
|
|
104
|
-
// drops its marks, so `` `required` `` comes back as `required`.
|
|
105
|
-
const plain = h1?.[1]
|
|
106
|
-
?.replace(/!?\[([^\]]*)\]\([^)]*\)/g, '$1')
|
|
107
|
-
.replace(/[`*_~]/g, '')
|
|
108
|
-
.trim();
|
|
109
|
-
return plain || fallback;
|
|
110
|
-
}
|
|
111
79
|
/** Local files a document points at — images, PDFs — resolved from its own folder. */
|
|
112
80
|
function assetRefs(text, fileDir, front) {
|
|
113
81
|
const refs = new Map();
|
|
114
82
|
const consider = (ref) => {
|
|
115
83
|
const clean = ref.trim().replace(/^<|>$/g, '').split(/[?#]/)[0];
|
|
116
|
-
if (!clean || /^[a-z][a-z0-9+.-]*:/i.test(clean) || clean.startsWith('/') || !ASSET.test(clean))
|
|
84
|
+
if (!clean || /^[a-z][a-z0-9+.-]*:/i.test(clean) || clean.startsWith('/') || !names_1.ASSET.test(clean))
|
|
117
85
|
return;
|
|
118
|
-
|
|
86
|
+
let abs;
|
|
87
|
+
try {
|
|
88
|
+
abs = (0, node_path_1.resolve)(fileDir, decodeURI(clean));
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return; // a malformed %-escape is a reference to nothing on disk
|
|
92
|
+
}
|
|
119
93
|
if ((0, node_fs_1.existsSync)(abs) && (0, node_fs_1.statSync)(abs).isFile())
|
|
120
94
|
refs.set(ref.trim(), abs);
|
|
121
95
|
};
|
|
@@ -135,7 +109,8 @@ function assetRefs(text, fileDir, front) {
|
|
|
135
109
|
return refs;
|
|
136
110
|
}
|
|
137
111
|
/** Read one space folder. `kind` decides whether its files are pages or posts. */
|
|
138
|
-
function scanSpace(root, spec, kind,
|
|
112
|
+
function scanSpace(root, spec, kind, shape) {
|
|
113
|
+
const { fieldKeys, slots = [] } = Array.isArray(shape) ? { fieldKeys: shape } : shape;
|
|
139
114
|
const absDir = (0, node_path_1.resolve)(root, spec.path || '.');
|
|
140
115
|
const out = {
|
|
141
116
|
dir: spec.path || '',
|
|
@@ -144,6 +119,9 @@ function scanSpace(root, spec, kind, fieldKeys) {
|
|
|
144
119
|
posts: [],
|
|
145
120
|
assets: new Set(),
|
|
146
121
|
warnings: [],
|
|
122
|
+
drafts: new Set(),
|
|
123
|
+
skipped: [],
|
|
124
|
+
tags: {},
|
|
147
125
|
refs: new Map(),
|
|
148
126
|
slugByFile: new Map(),
|
|
149
127
|
};
|
|
@@ -151,6 +129,12 @@ function scanSpace(root, spec, kind, fieldKeys) {
|
|
|
151
129
|
out.warnings.push(`${absDir} is not a folder`);
|
|
152
130
|
return out;
|
|
153
131
|
}
|
|
132
|
+
try {
|
|
133
|
+
out.tags = tagsFile(absDir);
|
|
134
|
+
}
|
|
135
|
+
catch (e) {
|
|
136
|
+
throw new Error(`${spec.path || '.'}/${e.message}`);
|
|
137
|
+
}
|
|
154
138
|
const read = (abs) => {
|
|
155
139
|
const text = (0, node_fs_1.readFileSync)(abs, 'utf8');
|
|
156
140
|
const rel = (0, node_path_1.relative)(absDir, abs).split(node_path_1.sep).join('/');
|
|
@@ -167,49 +151,57 @@ function scanSpace(root, spec, kind, fieldKeys) {
|
|
|
167
151
|
throw new Error(`${rel}: ${e.message}`);
|
|
168
152
|
}
|
|
169
153
|
};
|
|
154
|
+
const skip = skipperFor(out, spec, kind);
|
|
170
155
|
if (kind === 'posts')
|
|
171
|
-
scanPosts(absDir, out, read);
|
|
156
|
+
scanPosts(absDir, out, read, skip);
|
|
172
157
|
else
|
|
173
|
-
scanDocs(absDir, spec, out, read,
|
|
158
|
+
(0, scan_docs_1.scanDocs)(absDir, spec, out, read, {
|
|
159
|
+
fieldKeys,
|
|
160
|
+
slots,
|
|
161
|
+
skip,
|
|
162
|
+
hasMarkdown: (d) => hasMarkdown(d, skip),
|
|
163
|
+
isIndex: (f) => isIndexName(f, skip.readmeIsIndex),
|
|
164
|
+
});
|
|
174
165
|
return out;
|
|
175
166
|
}
|
|
176
|
-
function scanPosts(absDir, out, read) {
|
|
167
|
+
function scanPosts(absDir, out, read, skip) {
|
|
177
168
|
const walk = (dir) => {
|
|
178
169
|
for (const e of (0, node_fs_1.readdirSync)(dir).sort()) {
|
|
179
|
-
|
|
170
|
+
// README (anywhere: a posts folder has no folder pages), `_drafts/`,
|
|
171
|
+
// dotfiles, the manifest and `ignore:` — see reserved.ts.
|
|
172
|
+
if (skip(dir, e))
|
|
180
173
|
continue;
|
|
181
174
|
const abs = (0, node_path_1.join)(dir, e);
|
|
182
175
|
if ((0, node_fs_1.statSync)(abs).isDirectory()) {
|
|
183
176
|
walk(abs);
|
|
184
177
|
continue;
|
|
185
178
|
}
|
|
186
|
-
if (!MD.test(e))
|
|
187
|
-
continue;
|
|
188
|
-
// A README at the top of a blog folder is a note about the folder.
|
|
189
|
-
if (dir === absDir && /^readme\./i.test(e)) {
|
|
190
|
-
out.warnings.push(`${e}: skipped — a README at the top of a posts folder is a note, not a post`);
|
|
179
|
+
if (!names_1.MD.test(e))
|
|
191
180
|
continue;
|
|
192
|
-
}
|
|
193
181
|
const f = read(abs);
|
|
182
|
+
const stem = e.replace(names_1.MD, '');
|
|
183
|
+
// A version-shaped name (`2-4-0.md`, `1.10.md`) IS the address, not an
|
|
184
|
+
// ordering prefix in front of one: stripping "2-" left a release at `4-0`.
|
|
185
|
+
const bare = stem.replace(names_1.DATED, '');
|
|
186
|
+
const slug = typeof f.data.slug === 'string' && f.data.slug.trim()
|
|
187
|
+
? (0, names_1.slugify)(f.data.slug)
|
|
188
|
+
: (0, names_1.slugify)(names_1.VERSION.test(bare) ? bare : bare.replace(names_1.NUMERIC, ''));
|
|
194
189
|
if ((0, frontmatter_1.isDraft)(f.data)) {
|
|
195
|
-
out.
|
|
190
|
+
out.drafts.add(slug);
|
|
191
|
+
out.warnings.push(`${f.rel}: draft — left out (and kept if it is live)`);
|
|
196
192
|
continue;
|
|
197
193
|
}
|
|
198
|
-
const
|
|
199
|
-
const dated = DATED.exec(stem);
|
|
194
|
+
const dated = names_1.DATED.exec(stem);
|
|
200
195
|
const front = { ...f.data };
|
|
201
196
|
if (dated && front.publishedAt === undefined && front.date === undefined)
|
|
202
197
|
front.publishedAt = dated[1];
|
|
203
198
|
if (front.date !== undefined && front.publishedAt === undefined)
|
|
204
199
|
front.publishedAt = front.date;
|
|
205
|
-
const slug = typeof f.data.slug === 'string' && f.data.slug.trim()
|
|
206
|
-
? slugify(f.data.slug)
|
|
207
|
-
: slugify(stem.replace(DATED, '').replace(NUMERIC, ''));
|
|
208
200
|
out.slugByFile.set(f.rel, slug);
|
|
209
201
|
out.posts.push({
|
|
210
202
|
file: f.rel,
|
|
211
203
|
slug,
|
|
212
|
-
title: titleOf(f.data, f.body, slug),
|
|
204
|
+
title: (0, names_1.titleOf)(f.data, f.body, slug),
|
|
213
205
|
source: f.text,
|
|
214
206
|
body: f.body,
|
|
215
207
|
front,
|
|
@@ -218,131 +210,6 @@ function scanPosts(absDir, out, read) {
|
|
|
218
210
|
};
|
|
219
211
|
walk(absDir);
|
|
220
212
|
}
|
|
221
|
-
function scanDocs(absDir, spec, out, read, fieldKeys) {
|
|
222
|
-
const rootName = spec.rootCollection ?? '';
|
|
223
|
-
const rootFiles = [];
|
|
224
|
-
const folders = [];
|
|
225
|
-
for (const e of (0, node_fs_1.readdirSync)(absDir).sort()) {
|
|
226
|
-
if (skipEntry(e))
|
|
227
|
-
continue;
|
|
228
|
-
const abs = (0, node_path_1.join)(absDir, e);
|
|
229
|
-
if ((0, node_fs_1.statSync)(abs).isDirectory()) {
|
|
230
|
-
if (hasMarkdown(abs))
|
|
231
|
-
folders.push(e);
|
|
232
|
-
}
|
|
233
|
-
else if (MD.test(e))
|
|
234
|
-
rootFiles.push(e);
|
|
235
|
-
}
|
|
236
|
-
if (rootFiles.length) {
|
|
237
|
-
out.collections.push(collectionOf(absDir, '', rootName ? slugify(rootName) : '', rootName, [-1, ''], {}, out, read, fieldKeys, rootFiles));
|
|
238
|
-
}
|
|
239
|
-
for (const name of folders) {
|
|
240
|
-
const abs = (0, node_path_1.join)(absDir, name);
|
|
241
|
-
const declared = { ...folderMeta(abs), ...(spec.collections?.[name] ?? {}) };
|
|
242
|
-
const [n, key] = prefixOrder(name);
|
|
243
|
-
const order = [typeof declared.order === 'number' ? declared.order : n, key];
|
|
244
|
-
const slug = typeof declared.slug === 'string'
|
|
245
|
-
? slugify(declared.slug)
|
|
246
|
-
: slugify(name.replace(NUMERIC, ''));
|
|
247
|
-
const title = typeof declared.name === 'string' ? declared.name : titleize(name);
|
|
248
|
-
out.collections.push(collectionOf(abs, name, slug, title, order, (declared.nav ?? undefined), out, read, fieldKeys));
|
|
249
|
-
}
|
|
250
|
-
out.collections.sort((a, b) => a.order[0] - b.order[0] || a.order[1].localeCompare(b.order[1]));
|
|
251
|
-
}
|
|
252
|
-
function collectionOf(abs, dir, slug, name, order, nav, out, read, fieldKeys, onlyFiles) {
|
|
253
|
-
const col = { dir, slug, name, order, nav, pages: [] };
|
|
254
|
-
/**
|
|
255
|
-
* Walk one folder. `own` is the page that stands for this folder (its files
|
|
256
|
-
* nest under it; null at the collection's top) and `above` is the page that
|
|
257
|
-
* one nests under — which is where the folder's own index file hangs.
|
|
258
|
-
*/
|
|
259
|
-
const walk = (folder, rel, own, above) => {
|
|
260
|
-
const entries = (onlyFiles ?? (0, node_fs_1.readdirSync)(folder).sort()).filter((e) => !skipEntry(e));
|
|
261
|
-
const files = entries.filter((e) => MD.test(e) && !(0, node_fs_1.statSync)((0, node_path_1.join)(folder, e)).isDirectory());
|
|
262
|
-
const dirs = onlyFiles
|
|
263
|
-
? []
|
|
264
|
-
: entries.filter((e) => (0, node_fs_1.statSync)((0, node_path_1.join)(folder, e)).isDirectory() && hasMarkdown((0, node_path_1.join)(folder, e)));
|
|
265
|
-
const index = rel ? files.find(isIndex) : undefined;
|
|
266
|
-
for (const f of files) {
|
|
267
|
-
const parentSlug = f === index ? above : own;
|
|
268
|
-
const page = pageOf((0, node_path_1.join)(folder, f), rel ? `${rel}/${f}` : f, rel, f === index, parentSlug, slug, out, read, fieldKeys);
|
|
269
|
-
if (page)
|
|
270
|
-
col.pages.push(page);
|
|
271
|
-
}
|
|
272
|
-
for (const d of dirs) {
|
|
273
|
-
const sub = (0, node_path_1.join)(folder, d);
|
|
274
|
-
const subRel = rel ? `${rel}/${d}` : d;
|
|
275
|
-
const subFiles = (0, node_fs_1.readdirSync)(sub).filter((e) => !skipEntry(e) && MD.test(e));
|
|
276
|
-
const subIndex = subFiles.find(isIndex);
|
|
277
|
-
let folderSlug;
|
|
278
|
-
if (subIndex) {
|
|
279
|
-
// The index decides the folder page's address; read it once for that.
|
|
280
|
-
const { data } = (0, frontmatter_1.splitFront)((0, node_fs_1.readFileSync)((0, node_path_1.join)(sub, subIndex), 'utf8'));
|
|
281
|
-
folderSlug =
|
|
282
|
-
typeof data.slug === 'string' && data.slug.trim()
|
|
283
|
-
? slugify(data.slug)
|
|
284
|
-
: slugify(d.replace(NUMERIC, ''));
|
|
285
|
-
}
|
|
286
|
-
else {
|
|
287
|
-
folderSlug = slugify(d.replace(NUMERIC, ''));
|
|
288
|
-
const title = titleize(d);
|
|
289
|
-
col.pages.push({
|
|
290
|
-
file: `${(0, node_path_1.relative)(out.absDir, sub).split(node_path_1.sep).join('/')}/ (no index.md)`,
|
|
291
|
-
importName: `${subRel}/index.md`,
|
|
292
|
-
slug: folderSlug,
|
|
293
|
-
parentSlug: own,
|
|
294
|
-
order: prefixOrder(d),
|
|
295
|
-
title,
|
|
296
|
-
source: `---\ntitle: ${JSON.stringify(title)}\nslug: ${folderSlug}\n---\n`,
|
|
297
|
-
body: '',
|
|
298
|
-
meta: {},
|
|
299
|
-
unknown: [],
|
|
300
|
-
stub: true,
|
|
301
|
-
});
|
|
302
|
-
}
|
|
303
|
-
walk(sub, subRel, folderSlug, own);
|
|
304
|
-
}
|
|
305
|
-
};
|
|
306
|
-
walk(abs, '', null, null);
|
|
307
|
-
return col;
|
|
308
|
-
}
|
|
309
|
-
function pageOf(abs, importName, rel, isFolderIndex, parentSlug, collectionSlug, out, read, fieldKeys) {
|
|
310
|
-
const f = read(abs);
|
|
311
|
-
if ((0, frontmatter_1.isDraft)(f.data)) {
|
|
312
|
-
out.warnings.push(`${f.rel}: draft — left out`);
|
|
313
|
-
return null;
|
|
314
|
-
}
|
|
315
|
-
const name = (0, node_path_1.basename)(abs);
|
|
316
|
-
const stem = name.replace(MD, '');
|
|
317
|
-
const declaredSlug = typeof f.data.slug === 'string' && f.data.slug.trim() ? slugify(f.data.slug) : '';
|
|
318
|
-
const folder = node_path_1.posix.basename(rel);
|
|
319
|
-
const atCollectionTop = isIndex(name) && !rel;
|
|
320
|
-
const slug = declaredSlug ||
|
|
321
|
-
(isFolderIndex
|
|
322
|
-
? slugify(folder.replace(NUMERIC, ''))
|
|
323
|
-
: atCollectionTop
|
|
324
|
-
? collectionSlug || slugify(titleOf(f.data, f.body, 'overview'))
|
|
325
|
-
: slugify(stem.replace(NUMERIC, '')));
|
|
326
|
-
const { meta, unknown } = (0, frontmatter_1.pageMeta)(f.data, fieldKeys);
|
|
327
|
-
const n = (0, frontmatter_1.declaredOrder)(f.data);
|
|
328
|
-
const [prefixN, key] = prefixOrder(isFolderIndex ? folder : stem);
|
|
329
|
-
// A folder's index is ordered among the folder's siblings, by the folder's
|
|
330
|
-
// prefix; a collection's own index leads it unless it says otherwise.
|
|
331
|
-
const order = [n ?? (atCollectionTop ? -1 : prefixN), key];
|
|
332
|
-
out.slugByFile.set(f.rel, slug);
|
|
333
|
-
return {
|
|
334
|
-
file: f.rel,
|
|
335
|
-
importName,
|
|
336
|
-
slug,
|
|
337
|
-
parentSlug,
|
|
338
|
-
order,
|
|
339
|
-
title: titleOf(f.data, f.body, slug),
|
|
340
|
-
source: f.text,
|
|
341
|
-
body: f.body,
|
|
342
|
-
meta,
|
|
343
|
-
unknown,
|
|
344
|
-
};
|
|
345
|
-
}
|
|
346
213
|
/** Every relative path → posix, for comparing with `importName`s. */
|
|
347
214
|
const toPosix = (p) => p.split(node_path_1.sep).join('/');
|
|
348
215
|
exports.toPosix = toPosix;
|
package/dist/publish/scan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/publish/scan.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/publish/scan.ts"],"names":[],"mappings":";;;AAiIA,8BAsDC;AAvLD,qCAA0E;AAC1E,yCAAqF;AACrF,+BAA0C;AAC1C,+CAAoD;AACpD,mCAA+E;AAC/E,yCAAqF;AAiB5E,+FAjByB,yBAAc,OAiBzB;AAhBvB,2CAAuC;AAIvC;;;;;;;;GAQG;AACH,iCAAoD;AAA3C,gGAAA,OAAO,OAAA;AAAE,+FAAA,MAAM,OAAA;AAAE,iGAAA,QAAQ,OAAA;AAkBlC,SAAS,UAAU,CAAC,GAAe,EAAE,IAAe,EAAE,IAAsB;IAC1E,MAAM,aAAa,GAAG,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC;IAChE,MAAM,OAAO,GAAG,IAAA,wBAAa,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,MAAM,IAAI,GAAG,CAAC,CAAC,GAAW,EAAE,IAAY,EAAE,EAAE;QAC1C,MAAM,IAAI,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC7B,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,CAAC;YACH,KAAK,GAAG,IAAA,kBAAQ,EAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,GAAG,GAAG,IAAA,oBAAQ,EAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,eAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5D,MAAM,MAAM,GACV,IAAA,yBAAc,EAAC,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAClG,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC1B,uEAAuE;QACvE,IAAI,CAAC,UAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,cAAc,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACzG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClB,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAY,CAAC;IACd,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACnC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,aAAsB,EAAE,EAAE,CAC3D,6BAA6B,CAAC,IAAI,CAAC,IAAA,oBAAQ,EAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,IAAA,mBAAQ,EAAC,IAAA,oBAAQ,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEpG,SAAS,WAAW,CAAC,GAAW,EAAE,IAAa;IAC7C,KAAK,MAAM,CAAC,IAAI,IAAA,qBAAW,EAAC,GAAG,CAAC,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAAE,SAAS;QAC3B,MAAM,CAAC,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACvB,IAAI,IAAA,kBAAQ,EAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,UAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IACjF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,yFAAyF;AACzF,SAAS,QAAQ,CAAC,GAAW;IAC3B,KAAK,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,CAAC;QAC1D,MAAM,CAAC,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,IAAA,oBAAU,EAAC,CAAC,CAAC;YAAE,SAAS;QAC7B,MAAM,GAAG,GAAG,IAAA,YAAS,EAAC,IAAA,sBAAY,EAAC,CAAC,EAAE,MAAM,CAAC,CAAY,CAAC;QAC1D,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;QACjD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QACpE,OAAO,GAA8B,CAAC;IACxC,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,sFAAsF;AACtF,SAAS,SAAS,CAChB,IAAY,EACZ,OAAe,EACf,KAA8B;IAE9B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE;QAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,CAAC;QACjE,IAAI,CAAC,KAAK,IAAI,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,aAAK,CAAC,IAAI,CAAC,KAAK,CAAC;YAC7F,OAAO;QACT,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACH,GAAG,GAAG,IAAA,mBAAO,EAAC,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,yDAAyD;QACnE,CAAC;QACD,IAAI,IAAA,oBAAU,EAAC,GAAG,CAAC,IAAI,IAAA,kBAAQ,EAAC,GAAG,CAAC,CAAC,MAAM,EAAE;YAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;IAC3E,CAAC,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,qCAAqC,CAAC;QAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;IACtF,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,+CAA+C,CAAC;QAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;IAChG,MAAM,IAAI,GAAG,CAAC,CAAU,EAAE,EAAE;QAC1B,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;aAClC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aACtC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,CAAC,CAAC;IACF,IAAI,CAAC,KAAK,CAAC,CAAC;IACZ,OAAO,IAAI,CAAC;AACd,CAAC;AAUD,kFAAkF;AAClF,SAAgB,SAAS,CACvB,IAAY,EACZ,IAAe,EACf,IAAsB,EACtB,KAA2B;IAE3B,MAAM,EAAE,SAAS,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IACtF,MAAM,MAAM,GAAG,IAAA,mBAAO,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAe;QACtB,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;QACpB,MAAM;QACN,WAAW,EAAE,EAAE;QACf,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,IAAI,GAAG,EAAE;QACjB,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,IAAI,GAAG,EAAE;QACjB,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,IAAI,GAAG,EAAE;QACf,UAAU,EAAE,IAAI,GAAG,EAAE;KACtB,CAAC;IACF,IAAI,CAAC,IAAA,oBAAU,EAAC,MAAM,CAAC,IAAI,CAAC,IAAA,kBAAQ,EAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QAC3D,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,kBAAkB,CAAC,CAAC;QAC/C,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,CAAC;QACH,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,IAAK,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,IAAI,GAAW,CAAC,GAAW,EAAE,EAAE;QACnC,MAAM,IAAI,GAAG,IAAA,sBAAY,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,IAAA,oBAAQ,EAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,eAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvD,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAA,wBAAU,EAAC,IAAI,CAAC,CAAC;YACxC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,IAAA,mBAAO,EAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;YACjD,IAAI,IAAI,CAAC,IAAI;gBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACvC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;gBAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACjD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACnC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,KAAM,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACzC,IAAI,IAAI,KAAK,OAAO;QAAE,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;;QAEvD,IAAA,oBAAQ,EAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;YAChC,SAAS;YACT,KAAK;YACL,IAAI;YACJ,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC;YACxC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC;SACnD,CAAC,CAAC;IACL,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,SAAS,CAAC,MAAc,EAAE,GAAe,EAAE,IAAY,EAAE,IAAa;IAC7E,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE;QAC3B,KAAK,MAAM,CAAC,IAAI,IAAA,qBAAW,EAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YACxC,qEAAqE;YACrE,0DAA0D;YAC1D,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBAAE,SAAS;YAC3B,MAAM,GAAG,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACzB,IAAI,IAAA,kBAAQ,EAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;gBAChC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,SAAS;YACX,CAAC;YACD,IAAI,CAAC,UAAE,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,SAAS;YAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACpB,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,UAAE,EAAE,EAAE,CAAC,CAAC;YAC/B,uEAAuE;YACvE,2EAA2E;YAC3E,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAK,EAAE,EAAE,CAAC,CAAC;YACrC,MAAM,IAAI,GACR,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBACnD,CAAC,CAAC,IAAA,eAAO,EAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBACtB,CAAC,CAAC,IAAA,eAAO,EAAC,eAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,eAAO,EAAE,EAAE,CAAC,CAAC,CAAC;YACrE,IAAI,IAAA,qBAAO,EAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACrB,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,6CAA6C,CAAC,CAAC;gBACzE,SAAS;YACX,CAAC;YACD,MAAM,KAAK,GAAG,aAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/B,MAAM,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,KAAK,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;gBACtE,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;gBAC7D,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC;YACjC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAChC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,CAAC,CAAC,GAAG;gBACX,IAAI;gBACJ,KAAK,EAAE,IAAA,eAAO,EAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC;gBACpC,MAAM,EAAE,CAAC,CAAC,IAAI;gBACd,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,KAAK;aACN,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,MAAM,CAAC,CAAC;AACf,CAAC;AAED,qEAAqE;AAC9D,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,eAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAAhD,QAAA,OAAO,WAAyC;AACtD,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAA,mBAAO,EAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAAhD,QAAA,KAAK,SAA2C"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A page's named slots, filled from front matter.
|
|
3
|
+
*
|
|
4
|
+
* Page-backed types declare slots of their own: an FAQ question has its
|
|
5
|
+
* `answer`, a `short-answer` most readers stop at, and a `related` list. The
|
|
6
|
+
* body of the file is the main slot; the others are the shape fields a file
|
|
7
|
+
* can only declare in front matter. The import door converts a file into one
|
|
8
|
+
* flat document and knows nothing of slots, so a slotted page is written
|
|
9
|
+
* through the page's markdown door instead, where an `## <slot label>` heading
|
|
10
|
+
* becomes that slot (`docFromMarkdownSlots`) — the same form the page's own
|
|
11
|
+
* markdown read prints, so what is compared is what was sent.
|
|
12
|
+
*/
|
|
13
|
+
export interface Slot {
|
|
14
|
+
key: string;
|
|
15
|
+
label?: string;
|
|
16
|
+
kind?: string;
|
|
17
|
+
render?: string;
|
|
18
|
+
required?: boolean;
|
|
19
|
+
role?: string;
|
|
20
|
+
schemaProperty?: string;
|
|
21
|
+
}
|
|
22
|
+
/** The slot a page's body fills: the first prose slot, else the first. */
|
|
23
|
+
export declare function mainSlot(slots: readonly Slot[]): Slot | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* Split front matter into the slots it fills and everything else.
|
|
26
|
+
*
|
|
27
|
+
* A key names a slot when it is the slot's key in any spelling (`short_answer`,
|
|
28
|
+
* `shortAnswer`, `short-answer`). The main slot is the body; front matter may
|
|
29
|
+
* fill it only when the body is empty, and is otherwise reported, because two
|
|
30
|
+
* answers to one question is a mistake somebody wants to hear about.
|
|
31
|
+
*/
|
|
32
|
+
export declare function pageSlots(data: Record<string, unknown>, body: string, slots: readonly Slot[]): {
|
|
33
|
+
sections: Record<string, string>;
|
|
34
|
+
rest: Record<string, unknown>;
|
|
35
|
+
notes: string[];
|
|
36
|
+
};
|
|
37
|
+
/** The page as the markdown door reads it: `## <label>` per filled slot, in the shape's order. */
|
|
38
|
+
export declare function slottedMarkdown(slots: readonly Slot[], sections: Record<string, string>): string;
|
|
39
|
+
//# sourceMappingURL=slots.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slots.d.ts","sourceRoot":"","sources":["../../src/publish/slots.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,IAAI;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAID,0EAA0E;AAC1E,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,GAAG,IAAI,GAAG,SAAS,CAEjE;AAYD;;;;;;;GAOG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS,IAAI,EAAE,GACrB;IAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAwBtF;AAED,kGAAkG;AAClG,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAKhG"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mainSlot = mainSlot;
|
|
4
|
+
exports.pageSlots = pageSlots;
|
|
5
|
+
exports.slottedMarkdown = slottedMarkdown;
|
|
6
|
+
const fold = (s) => s.toLowerCase().replace(/[-_\s]/g, '');
|
|
7
|
+
/** The slot a page's body fills: the first prose slot, else the first. */
|
|
8
|
+
function mainSlot(slots) {
|
|
9
|
+
return slots.find((s) => !s.kind || s.kind === 'prose') ?? slots[0];
|
|
10
|
+
}
|
|
11
|
+
/** A list slot written as a YAML list reads as a Markdown list. */
|
|
12
|
+
function slotText(v) {
|
|
13
|
+
if (typeof v === 'string')
|
|
14
|
+
return v.trim() ? v : null;
|
|
15
|
+
if (Array.isArray(v)) {
|
|
16
|
+
const items = v.map((x) => String(x ?? '').trim()).filter(Boolean);
|
|
17
|
+
return items.length ? items.map((x) => `- ${x}`).join('\n') : null;
|
|
18
|
+
}
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Split front matter into the slots it fills and everything else.
|
|
23
|
+
*
|
|
24
|
+
* A key names a slot when it is the slot's key in any spelling (`short_answer`,
|
|
25
|
+
* `shortAnswer`, `short-answer`). The main slot is the body; front matter may
|
|
26
|
+
* fill it only when the body is empty, and is otherwise reported, because two
|
|
27
|
+
* answers to one question is a mistake somebody wants to hear about.
|
|
28
|
+
*/
|
|
29
|
+
function pageSlots(data, body, slots) {
|
|
30
|
+
const sections = {};
|
|
31
|
+
const rest = {};
|
|
32
|
+
const notes = [];
|
|
33
|
+
if (!slots.length)
|
|
34
|
+
return { sections, rest: { ...data }, notes };
|
|
35
|
+
const byFold = new Map(slots.map((s) => [fold(s.key), s]));
|
|
36
|
+
const main = mainSlot(slots);
|
|
37
|
+
for (const [k, v] of Object.entries(data)) {
|
|
38
|
+
const slot = byFold.get(fold(k));
|
|
39
|
+
const text = slot ? slotText(v) : null;
|
|
40
|
+
if (!slot || text === null) {
|
|
41
|
+
rest[k] = v;
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
if (slot.key === main.key && body.trim()) {
|
|
45
|
+
notes.push(`${k} (the body is the ${main.label ?? main.key})`);
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
sections[slot.key] = text;
|
|
49
|
+
}
|
|
50
|
+
// Nothing besides the body: an ordinary page, imported as it is.
|
|
51
|
+
if (!Object.keys(sections).length)
|
|
52
|
+
return { sections, rest, notes };
|
|
53
|
+
if (!sections[main.key] && body.trim())
|
|
54
|
+
sections[main.key] = body.trim();
|
|
55
|
+
return { sections, rest, notes };
|
|
56
|
+
}
|
|
57
|
+
/** The page as the markdown door reads it: `## <label>` per filled slot, in the shape's order. */
|
|
58
|
+
function slottedMarkdown(slots, sections) {
|
|
59
|
+
return slots
|
|
60
|
+
.filter((s) => sections[s.key] !== undefined)
|
|
61
|
+
.map((s) => `## ${s.label ?? s.key}\n\n${sections[s.key].trim()}\n`)
|
|
62
|
+
.join('\n');
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=slots.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slots.js","sourceRoot":"","sources":["../../src/publish/slots.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type SpaceCtx } from './context';
|
|
2
|
+
import type { DocsLive, DocsPlan } from './docs-plan';
|
|
3
|
+
/**
|
|
4
|
+
* Studio edits made since the last publish (FMU-D18), found before anything
|
|
5
|
+
* is written.
|
|
6
|
+
*
|
|
7
|
+
* A docs-as-code publish compared each file with the live page and wrote over
|
|
8
|
+
* whatever differed. When somebody had fixed a typo in the studio, the next CI
|
|
9
|
+
* run put the typo back, and nothing anywhere said a change had been lost. The
|
|
10
|
+
* server now keeps a sync baseline per page (what the last publish made live);
|
|
11
|
+
* `GET …/sync-state` says which pages were edited after it, by whom and when.
|
|
12
|
+
* A page this run would UPDATE that was edited since is a conflict: the run
|
|
13
|
+
* stops before its first write and names each one. `--force` overwrites.
|
|
14
|
+
*/
|
|
15
|
+
export interface StudioConflict {
|
|
16
|
+
slug: string;
|
|
17
|
+
pageId: string;
|
|
18
|
+
by: string;
|
|
19
|
+
at: string;
|
|
20
|
+
}
|
|
21
|
+
/** The pages this plan would overwrite that were edited since the last publish. */
|
|
22
|
+
export declare function studioConflicts(ctx: SpaceCtx, plan: DocsPlan, live: DocsLive): Promise<StudioConflict[]>;
|
|
23
|
+
/** The line and the error a conflict prints, in the words the docs promise. */
|
|
24
|
+
export declare function conflictText(c: StudioConflict): string;
|
|
25
|
+
//# sourceMappingURL=studio-edits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"studio-edits.d.ts","sourceRoot":"","sources":["../../src/publish/studio-edits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEtD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AASD,mFAAmF;AACnF,wBAAsB,eAAe,CACnC,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,QAAQ,GACb,OAAO,CAAC,cAAc,EAAE,CAAC,CAoC3B;AAED,+EAA+E;AAC/E,wBAAgB,YAAY,CAAC,CAAC,EAAE,cAAc,GAAG,MAAM,CAEtD"}
|