@forumulate/cli 0.8.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.
Files changed (94) hide show
  1. package/README.md +8 -0
  2. package/dist/api/operations.json +1 -1
  3. package/dist/commands/completion.d.ts.map +1 -1
  4. package/dist/commands/completion.js +16 -0
  5. package/dist/commands/completion.js.map +1 -1
  6. package/dist/commands/groups-site.d.ts.map +1 -1
  7. package/dist/commands/groups-site.js +15 -8
  8. package/dist/commands/groups-site.js.map +1 -1
  9. package/dist/dev/command.d.ts +41 -0
  10. package/dist/dev/command.d.ts.map +1 -0
  11. package/dist/dev/command.js +158 -0
  12. package/dist/dev/command.js.map +1 -0
  13. package/dist/help.d.ts +1 -1
  14. package/dist/help.d.ts.map +1 -1
  15. package/dist/help.js +17 -0
  16. package/dist/help.js.map +1 -1
  17. package/dist/publish/api.d.ts +30 -12
  18. package/dist/publish/api.d.ts.map +1 -1
  19. package/dist/publish/api.js +62 -10
  20. package/dist/publish/api.js.map +1 -1
  21. package/dist/publish/client.d.ts +19 -0
  22. package/dist/publish/client.d.ts.map +1 -0
  23. package/dist/publish/client.js +3 -0
  24. package/dist/publish/client.js.map +1 -0
  25. package/dist/publish/command.d.ts +31 -2
  26. package/dist/publish/command.d.ts.map +1 -1
  27. package/dist/publish/command.js +62 -15
  28. package/dist/publish/command.js.map +1 -1
  29. package/dist/publish/context.d.ts +4 -1
  30. package/dist/publish/context.d.ts.map +1 -1
  31. package/dist/publish/context.js.map +1 -1
  32. package/dist/publish/diff.d.ts +21 -0
  33. package/dist/publish/diff.d.ts.map +1 -0
  34. package/dist/publish/diff.js +96 -0
  35. package/dist/publish/diff.js.map +1 -0
  36. package/dist/publish/docs-apply.d.ts +8 -1
  37. package/dist/publish/docs-apply.d.ts.map +1 -1
  38. package/dist/publish/docs-apply.js +37 -10
  39. package/dist/publish/docs-apply.js.map +1 -1
  40. package/dist/publish/docs-plan.d.ts +16 -3
  41. package/dist/publish/docs-plan.d.ts.map +1 -1
  42. package/dist/publish/docs-plan.js +57 -6
  43. package/dist/publish/docs-plan.js.map +1 -1
  44. package/dist/publish/frontmatter.d.ts +1 -1
  45. package/dist/publish/frontmatter.d.ts.map +1 -1
  46. package/dist/publish/frontmatter.js +1 -0
  47. package/dist/publish/frontmatter.js.map +1 -1
  48. package/dist/publish/index.d.ts +12 -0
  49. package/dist/publish/index.d.ts.map +1 -0
  50. package/dist/publish/index.js +17 -0
  51. package/dist/publish/index.js.map +1 -0
  52. package/dist/publish/manifest.d.ts.map +1 -1
  53. package/dist/publish/manifest.js +23 -3
  54. package/dist/publish/manifest.js.map +1 -1
  55. package/dist/publish/names.d.ts +28 -0
  56. package/dist/publish/names.d.ts.map +1 -0
  57. package/dist/publish/names.js +80 -0
  58. package/dist/publish/names.js.map +1 -0
  59. package/dist/publish/posts.d.ts.map +1 -1
  60. package/dist/publish/posts.js +46 -13
  61. package/dist/publish/posts.js.map +1 -1
  62. package/dist/publish/reserved.d.ts +49 -0
  63. package/dist/publish/reserved.d.ts.map +1 -0
  64. package/dist/publish/reserved.js +118 -0
  65. package/dist/publish/reserved.js.map +1 -0
  66. package/dist/publish/rewrite.d.ts +12 -0
  67. package/dist/publish/rewrite.d.ts.map +1 -1
  68. package/dist/publish/rewrite.js +22 -0
  69. package/dist/publish/rewrite.js.map +1 -1
  70. package/dist/publish/scan-docs.d.ts +10 -0
  71. package/dist/publish/scan-docs.d.ts.map +1 -0
  72. package/dist/publish/scan-docs.js +160 -0
  73. package/dist/publish/scan-docs.js.map +1 -0
  74. package/dist/publish/scan.d.ts +21 -17
  75. package/dist/publish/scan.d.ts.map +1 -1
  76. package/dist/publish/scan.js +99 -232
  77. package/dist/publish/scan.js.map +1 -1
  78. package/dist/publish/slots.d.ts +39 -0
  79. package/dist/publish/slots.d.ts.map +1 -0
  80. package/dist/publish/slots.js +64 -0
  81. package/dist/publish/slots.js.map +1 -0
  82. package/dist/publish/tags.d.ts +9 -0
  83. package/dist/publish/tags.d.ts.map +1 -0
  84. package/dist/publish/tags.js +194 -0
  85. package/dist/publish/tags.js.map +1 -0
  86. package/dist/publish/types.d.ts +62 -0
  87. package/dist/publish/types.d.ts.map +1 -1
  88. package/dist/publish/types.js +0 -10
  89. package/dist/publish/types.js.map +1 -1
  90. package/dist/run.d.ts +1 -1
  91. package/dist/run.d.ts.map +1 -1
  92. package/dist/run.js +79 -32
  93. package/dist/run.js.map +1 -1
  94. package/package.json +2 -2
@@ -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: one top-level folder per collection, files at the root in the root
16
- * collection, nested folders as parent pages (the folder's `index.md` or
17
- * `README.md` is the parent; a folder without one gets a title-only stub so its
18
- * children still have somewhere to hang). Everything else — blog, changelog,
19
- * any type whose pieces are posts — is a flat set of posts, folders or not.
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
- const MD = /\.(md|mdx|markdown)$/i;
22
- /** What a reference may point at to be uploaded rather than linked. */
23
- const ASSET = /\.(png|jpe?g|gif|webp|svg|avif|ico|pdf|mp4|webm|mp3|zip)$/i;
24
- exports.MANIFEST_NAMES = ['forumulate.yaml', 'forumulate.yml', 'forumulate.json'];
25
- const NUMERIC = /^(\d+)[-_. ]+/;
26
- const DATED = /^(\d{4}-\d{2}-\d{2})[-_]/;
27
- const BIG = Number.MAX_SAFE_INTEGER;
28
- /** The product's slug rule (packages/shared `slugify`), mirrored: this package ships alone. */
29
- function slugify(input, fallback = 'page', max = 70) {
30
- return (input
31
- .normalize('NFC')
32
- .toLowerCase()
33
- .normalize('NFD')
34
- .replace(/[̀-ͯ]/g, '')
35
- .normalize('NFC')
36
- .replace(/[^\p{Letter}\p{Number}]+/gu, '-')
37
- .replace(/^-+|-+$/g, '')
38
- .slice(0, max)
39
- .replace(/-+$/, '') || fallback);
40
- }
41
- /**
42
- * The product's TAG rule (apps/api `normalizeTag`), mirrored for the same reason
43
- * as `slugify`. Used to compare a front-matter tag list with the stored one: an
44
- * ASCII-only fold here turned every Japanese or Cyrillic tag into `-`, so two
45
- * different non-Latin tag lists compared equal and the update was skipped.
46
- */
47
- function tagKey(raw) {
48
- const t = String(raw ?? '')
49
- .normalize('NFC')
50
- .toLowerCase()
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
- function hasMarkdown(dir) {
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 (skipEntry(e))
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
- /** `_collection.yml` / `.yaml` / `.json` beside a collection's files. */
89
- function folderMeta(dir) {
90
- for (const n of ['_collection.yml', '_collection.yaml', '_collection.json']) {
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
- return ((0, yaml_1.parse)((0, node_fs_1.readFileSync)(p, 'utf8')) ?? {});
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
- const abs = (0, node_path_1.resolve)(fileDir, decodeURI(clean));
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, fieldKeys) {
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, fieldKeys);
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
- if (skipEntry(e))
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.warnings.push(`${f.rel}: draft — left 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 stem = e.replace(MD, '');
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;
@@ -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"}