@forumulate/cli 0.5.0 → 0.9.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 +124 -5
- package/dist/api/args.d.ts +21 -0
- package/dist/api/args.d.ts.map +1 -0
- package/dist/api/args.js +81 -0
- package/dist/api/args.js.map +1 -0
- package/dist/api/command.d.ts +17 -0
- package/dist/api/command.d.ts.map +1 -0
- package/dist/api/command.js +182 -0
- package/dist/api/command.js.map +1 -0
- package/dist/api/describe.d.ts +5 -0
- package/dist/api/describe.d.ts.map +1 -0
- package/dist/api/describe.js +121 -0
- package/dist/api/describe.js.map +1 -0
- package/dist/api/http.d.ts +81 -0
- package/dist/api/http.d.ts.map +1 -0
- package/dist/api/http.js +183 -0
- package/dist/api/http.js.map +1 -0
- package/dist/api/operations.json +1 -0
- package/dist/api/output.d.ts +35 -0
- package/dist/api/output.d.ts.map +1 -0
- package/dist/api/output.js +176 -0
- package/dist/api/output.js.map +1 -0
- package/dist/api/request.d.ts +37 -0
- package/dist/api/request.d.ts.map +1 -0
- package/dist/api/request.js +230 -0
- package/dist/api/request.js.map +1 -0
- package/dist/api/send.d.ts +35 -0
- package/dist/api/send.d.ts.map +1 -0
- package/dist/api/send.js +85 -0
- package/dist/api/send.js.map +1 -0
- package/dist/api/spec.d.ts +96 -0
- package/dist/api/spec.d.ts.map +1 -0
- package/dist/api/spec.js +126 -0
- package/dist/api/spec.js.map +1 -0
- package/dist/commands/completion.d.ts +12 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +169 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/config.d.ts +33 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +144 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/context.d.ts +35 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +59 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/groups-api.d.ts +11 -0
- package/dist/commands/groups-api.d.ts.map +1 -0
- package/dist/commands/groups-api.js +140 -0
- package/dist/commands/groups-api.js.map +1 -0
- package/dist/commands/groups-community.d.ts +15 -0
- package/dist/commands/groups-community.d.ts.map +1 -0
- package/dist/commands/groups-community.js +344 -0
- package/dist/commands/groups-community.js.map +1 -0
- package/dist/commands/groups-content.d.ts +10 -0
- package/dist/commands/groups-content.d.ts.map +1 -0
- package/dist/commands/groups-content.js +331 -0
- package/dist/commands/groups-content.js.map +1 -0
- package/dist/commands/groups-docs.d.ts +12 -0
- package/dist/commands/groups-docs.d.ts.map +1 -0
- package/dist/commands/groups-docs.js +414 -0
- package/dist/commands/groups-docs.js.map +1 -0
- package/dist/commands/groups-org.d.ts +10 -0
- package/dist/commands/groups-org.d.ts.map +1 -0
- package/dist/commands/groups-org.js +405 -0
- package/dist/commands/groups-org.js.map +1 -0
- package/dist/commands/groups-site.d.ts +3 -0
- package/dist/commands/groups-site.d.ts.map +1 -0
- package/dist/commands/groups-site.js +237 -0
- package/dist/commands/groups-site.js.map +1 -0
- package/dist/commands/groups-spaces.d.ts +3 -0
- package/dist/commands/groups-spaces.d.ts.map +1 -0
- package/dist/commands/groups-spaces.js +273 -0
- package/dist/commands/groups-spaces.js.map +1 -0
- package/dist/commands/groups-types.d.ts +3 -0
- package/dist/commands/groups-types.d.ts.map +1 -0
- package/dist/commands/groups-types.js +251 -0
- package/dist/commands/groups-types.js.map +1 -0
- package/dist/commands/groups.d.ts +4 -0
- package/dist/commands/groups.d.ts.map +1 -0
- package/dist/commands/groups.js +71 -0
- package/dist/commands/groups.js.map +1 -0
- package/dist/commands/index.d.ts +25 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +118 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/resource.d.ts +86 -0
- package/dist/commands/resource.d.ts.map +1 -0
- package/dist/commands/resource.js +314 -0
- package/dist/commands/resource.js.map +1 -0
- package/dist/content/library.d.ts +1 -0
- package/dist/content/library.d.ts.map +1 -1
- package/dist/content/library.js +1 -0
- package/dist/content/library.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/help.d.ts +3 -0
- package/dist/help.d.ts.map +1 -0
- package/dist/help.js +159 -0
- package/dist/help.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 +31 -2
- package/dist/publish/command.d.ts.map +1 -1
- package/dist/publish/command.js +62 -15
- package/dist/publish/command.js.map +1 -1
- package/dist/publish/context.d.ts +4 -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 +37 -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/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 +23 -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/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/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 +62 -0
- 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/run.d.ts +16 -1
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +124 -117
- package/dist/run.js.map +1 -1
- package/dist/translations/command.d.ts +36 -0
- package/dist/translations/command.d.ts.map +1 -0
- package/dist/translations/command.js +411 -0
- package/dist/translations/command.js.map +1 -0
- package/dist/translations/extras.d.ts +29 -0
- package/dist/translations/extras.d.ts.map +1 -0
- package/dist/translations/extras.js +123 -0
- package/dist/translations/extras.js.map +1 -0
- package/dist/translations/files.d.ts +22 -0
- package/dist/translations/files.d.ts.map +1 -0
- package/dist/translations/files.js +75 -0
- package/dist/translations/files.js.map +1 -0
- package/dist/translations/sync.d.ts +89 -0
- package/dist/translations/sync.d.ts.map +1 -0
- package/dist/translations/sync.js +215 -0
- package/dist/translations/sync.js.map +1 -0
- package/dist/translations/target.d.ts +33 -0
- package/dist/translations/target.d.ts.map +1 -0
- package/dist/translations/target.js +54 -0
- package/dist/translations/target.js.map +1 -0
- package/dist/translations/xliff.d.ts +29 -0
- package/dist/translations/xliff.d.ts.map +1 -0
- package/dist/translations/xliff.js +62 -0
- package/dist/translations/xliff.js.map +1 -0
- package/package.json +6 -4
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":"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"}
|
|
@@ -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,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"}
|