usedesign 1.4.1 → 1.4.3

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/dist/core.js CHANGED
@@ -3,8 +3,8 @@
3
3
  * tool needs. Nothing here decides anything about a card — the rules live in `validate.ts` and
4
4
  * `checks.ts`, so that a change to a rule never hides inside a helper.
5
5
  */
6
- import { readFileSync, existsSync, readdirSync, statSync } from "node:fs";
7
- import { dirname, join, resolve, sep } from "node:path";
6
+ import { closeSync, openSync, readFileSync, existsSync, lstatSync, readdirSync, realpathSync, statSync } from "node:fs";
7
+ import { basename, dirname, join, resolve, sep } from "node:path";
8
8
  import { parse as parseYaml } from "yaml";
9
9
  export class Finding {
10
10
  code;
@@ -42,6 +42,53 @@ export function frontMatter(path) {
42
42
  const parsed = parseYaml(text.slice(3, end));
43
43
  return parsed && typeof parsed === "object" ? parsed : null;
44
44
  }
45
+ /**
46
+ * Why a collected path cannot be opened as a file, or "" when it can (1.4.2). A link that leads
47
+ * nowhere and a file without read permission are entries a listing finds and a reader cannot
48
+ * open. Before, this implementation dropped the first unseen and called the second "front matter
49
+ * is not valid YAML", and the Python prototype stopped on both with a traceback. The words are
50
+ * the same in both implementations.
51
+ */
52
+ export function whyUnreadable(path) {
53
+ if (!existsSync(path))
54
+ return "it is a link to a path that does not exist";
55
+ if (isDirectory(path))
56
+ return "it is a directory";
57
+ try {
58
+ closeSync(openSync(path, "r"));
59
+ }
60
+ catch (e) {
61
+ return causeOf(e);
62
+ }
63
+ return "";
64
+ }
65
+ /**
66
+ * The cause of a system error, in the words both implementations print (1.4.2). A file another
67
+ * process holds open on Windows is EBUSY here and a permission error in Python, so it is
68
+ * "permission denied" in both.
69
+ */
70
+ export function causeOf(e) {
71
+ const code = e.code ?? "";
72
+ return ["EACCES", "EPERM", "EBUSY"].includes(code) ? "permission denied" : code || String(e.message);
73
+ }
74
+ /**
75
+ * The front matter of a document a config's patterns matched (1.4.2). A file nobody can open and
76
+ * front matter that is not valid YAML stop the run with the file's name: no check can pass over a
77
+ * card it did not read. Before, the second stopped it with the parser's words alone.
78
+ */
79
+ export function readDocument(path) {
80
+ const why = whyUnreadable(path);
81
+ if (why)
82
+ throw new Error(`\`${path}\` cannot be read — ${why}`);
83
+ try {
84
+ return frontMatter(path);
85
+ }
86
+ catch (e) {
87
+ if (e.syscall)
88
+ throw new Error(`\`${path}\` cannot be read — ${causeOf(e)}`);
89
+ throw new Error(`\`${path}\` front matter is not valid YAML — ${String(e.message).split("\n")[0]}`);
90
+ }
91
+ }
45
92
  /**
46
93
  * Every key the config may carry. Enforced at load, not merely published in the schema: measured
47
94
  * on issue #4 — `cheks:` was accepted silently, the scoping vanished, and the check it was meant
@@ -65,71 +112,248 @@ export function loadConfig(path) {
65
112
  }
66
113
  return { config, base: dirname(resolve(path)) };
67
114
  }
68
- /** Translate one glob segment into a regular expression. `*` and `?` do not cross a separator. */
115
+ /**
116
+ * Translate one glob segment into a regular expression. `*` and `?` do not cross a separator, and
117
+ * `?` is one character — one code point, as in the Python prototype: without the `u` flag it was
118
+ * one UTF-16 unit, and `?.op.md` missed `😀.op.md` (1.4.3).
119
+ */
69
120
  function segmentToRegExp(segment) {
70
121
  const escaped = segment.replace(/[.+^${}()|[\]\\]/g, "\\$&").replace(/\*/g, "[^/\\\\]*").replace(/\?/g, "[^/\\\\]");
71
- return new RegExp(`^${escaped}$`);
122
+ return new RegExp(`^${escaped}$`, "u");
123
+ }
124
+ /** Whether `path` leads to a directory, through a link too; false where nothing can be read. */
125
+ function isDirectory(path) {
126
+ try {
127
+ return statSync(path).isDirectory();
128
+ }
129
+ catch {
130
+ return false;
131
+ }
132
+ }
133
+ /**
134
+ * Whether anything stands at `path`, a link that leads nowhere included (1.4.2). Only "does not
135
+ * exist" is absence: an entry the system lists and will not describe — no permission, a link made
136
+ * by another system — goes on to the reader, which names it.
137
+ */
138
+ function isEntry(path) {
139
+ try {
140
+ lstatSync(path);
141
+ return true;
142
+ }
143
+ catch (e) {
144
+ const code = e.code;
145
+ return code !== "ENOENT" && code !== "ENOTDIR";
146
+ }
147
+ }
148
+ /**
149
+ * The real path of `path` (1.4.2). For an entry the system will not resolve — a link that leads
150
+ * nowhere, on Windows a file without read permission — the real path of its directory and its own
151
+ * name, so that such an entry reached two ways is still one entry.
152
+ */
153
+ function realOf(path) {
154
+ try {
155
+ return realpathSync.native(path);
156
+ }
157
+ catch {
158
+ try {
159
+ return join(realpathSync.native(dirname(path)), basename(path));
160
+ }
161
+ catch {
162
+ return resolve(path);
163
+ }
164
+ }
165
+ }
166
+ /**
167
+ * The entries of a directory a pattern walks into (1.4.2). One that cannot be listed stops the run
168
+ * with its name, as a file that cannot be opened does: the cards under it would go unseen.
169
+ */
170
+ function listing(dir) {
171
+ try {
172
+ return readdirSync(dir, { withFileTypes: true });
173
+ }
174
+ catch (e) {
175
+ throw new Error(`\`${dir}\` cannot be listed — ${causeOf(e)}`);
176
+ }
72
177
  }
73
178
  /**
74
179
  * Expand a glob relative to `base`. Supports `*`, `?` and `**`; enough for `cards:` patterns and
75
180
  * small enough to keep the tool dependency-light, which matters for something meant to be run
76
181
  * with `npx` inside somebody else's CI.
182
+ *
183
+ * The Python implementation walks with the same algorithm, step for step, so that both collect the
184
+ * same files (1.4.2): links to directories are followed, and a loop of them is walked once; a name
185
+ * that starts with a dot is matched only by a segment that starts with a dot, and `**` passes it
186
+ * over; `[` and `]` are plain characters; letter case counts. Every entry whose name matches is
187
+ * returned, a link that leads nowhere included, so that the reader names it; directories are not.
77
188
  */
78
189
  export function expandGlob(base, pattern) {
190
+ return once(expandKeyed(base, pattern));
191
+ }
192
+ /** Every file the patterns match, once however many of them reach it (1.4.3). */
193
+ export function expandGlobs(base, patterns) {
194
+ const keyed = new Map();
195
+ for (const pattern of patterns)
196
+ for (const [path, real] of expandKeyed(base, pattern))
197
+ put(keyed, path, real);
198
+ return once(keyed);
199
+ }
200
+ function put(map, path, value) {
201
+ if (!map.has(path))
202
+ map.set(path, value);
203
+ }
204
+ /**
205
+ * What a directory listing says an entry is: "dir", "file", or null for a link, which only the
206
+ * system can follow, and for an entry whose type the listing did not give.
207
+ */
208
+ function kindOf(entry) {
209
+ if (entry.isSymbolicLink())
210
+ return null;
211
+ if (entry.isDirectory())
212
+ return "dir";
213
+ if (entry.isFile() || entry.isFIFO() || entry.isSocket() || entry.isBlockDevice() || entry.isCharacterDevice())
214
+ return "file";
215
+ return null;
216
+ }
217
+ /** Whether the walk can go into `path`: a directory, by what is known or by asking. */
218
+ function walkable(path, known) {
219
+ return known === null ? isDirectory(path) : known[0] === "dir";
220
+ }
221
+ /**
222
+ * Every file `pattern` matches under `base`, with its real path — not yet once per file.
223
+ *
224
+ * What a directory listing told is not asked of the system again (1.4.3): an entry that is not a
225
+ * link is a file or a directory, and its real path is its directory's real path and its name. Only
226
+ * links and the names a pattern spells out are asked. `**` and a wildcard segment after it read
227
+ * each directory once: the segment is matched in the listing `**` walks with. Measured on 24 000
228
+ * files before the change: the listing read twice, and a real path, a type and an existence asked
229
+ * per file. See the Python twin.
230
+ */
231
+ function expandKeyed(base, pattern) {
79
232
  const segments = pattern.split(/[\\/]+/).filter((s) => s.length > 0);
80
- let current = [resolve(base)];
81
- for (const [index, segment] of segments.entries()) {
82
- const last = index === segments.length - 1;
83
- const next = [];
233
+ let current = new Map([[resolve(base), null]]);
234
+ for (let index = 0; index < segments.length; index++) {
235
+ const segment = segments[index];
236
+ let last = index === segments.length - 1;
237
+ const found = new Map();
84
238
  if (segment === "**") {
85
- for (const dir of current) {
86
- const stack = [dir];
239
+ const after = last ? "" : segments[index + 1];
240
+ const fused = after !== "" && after !== "**" && after !== "." && after !== ".." && /[*?]/.test(after);
241
+ const matcher = fused ? segmentToRegExp(after) : null;
242
+ const dotted = after.startsWith(".");
243
+ if (fused)
244
+ last = ++index === segments.length - 1;
245
+ for (const [dir, known] of current) {
246
+ if (!walkable(dir, known))
247
+ continue;
248
+ // Each directory carries its real path and those of the directories above it: a link back
249
+ // to one of them would be walked forever and is walked once. The system is asked for a real
250
+ // path only at the start and at a link; below that, the parent's real path and the name are it.
251
+ const stack = [{ here: dir, real: realOf(dir), above: [] }];
87
252
  while (stack.length) {
88
- const here = stack.pop();
89
- next.push(here);
90
- if (!existsSync(here))
91
- continue;
92
- for (const entry of readdirSync(here, { withFileTypes: true })) {
93
- if (entry.isDirectory())
94
- stack.push(join(here, entry.name));
253
+ const { here, real, above } = stack.pop();
254
+ const looped = above.includes(real);
255
+ if (!fused) {
256
+ put(found, here, ["dir", real]);
257
+ if (looped)
258
+ continue;
259
+ }
260
+ for (const entry of listing(here)) {
261
+ const name = entry.name;
262
+ const path = join(here, name);
263
+ const kind = kindOf(entry);
264
+ let linkedDir; // whether a link leads to a directory, asked once
265
+ if (matcher && !(name.startsWith(".") && !dotted) && matcher.test(name)) {
266
+ if (kind === null)
267
+ linkedDir = isDirectory(path);
268
+ if (last || kind === "dir" || linkedDir)
269
+ put(found, path, kind ? [kind, join(real, name)] : null);
270
+ }
271
+ // A directory a link leads back to is matched in, not walked again.
272
+ if (looped || name.startsWith("."))
273
+ continue;
274
+ if (kind === "dir")
275
+ stack.push({ here: path, real: join(real, name), above: [...above, real] });
276
+ // `Dirent.isDirectory()` is false for a link and for a Windows junction (1.4.2).
277
+ else if (kind === null && (linkedDir ?? isDirectory(path)))
278
+ stack.push({ here: path, real: realOf(path), above: [...above, real] });
279
+ // `**` at the end matches files as well (1.4.2): `cards/**` found nothing here.
280
+ else if (last && !fused)
281
+ put(found, path, kind ? [kind, join(real, name)] : null);
95
282
  }
96
283
  }
97
284
  }
98
285
  }
99
286
  else if (segment === "." || segment === "..") {
100
- next.push(...current.map((dir) => resolve(dir, segment)));
287
+ for (const dir of current.keys())
288
+ put(found, resolve(dir, segment), null);
101
289
  }
102
290
  else if (!/[*?]/.test(segment)) {
103
- next.push(...current.map((dir) => join(dir, segment)));
291
+ for (const dir of current.keys())
292
+ put(found, join(dir, segment), null);
104
293
  }
105
294
  else {
106
295
  const matcher = segmentToRegExp(segment);
107
- for (const dir of current) {
108
- if (!existsSync(dir) || !statSync(dir).isDirectory())
296
+ const dotted = segment.startsWith(".");
297
+ for (const [dir, known] of current) {
298
+ if (!walkable(dir, known))
109
299
  continue;
110
- for (const entry of readdirSync(dir, { withFileTypes: true })) {
111
- if (matcher.test(entry.name) && (last || entry.isDirectory()))
112
- next.push(join(dir, entry.name));
300
+ let real = ""; // the directory's real path, asked once and only if a match needs it
301
+ for (const entry of listing(dir)) {
302
+ if ((entry.name.startsWith(".") && !dotted) || !matcher.test(entry.name))
303
+ continue;
304
+ const path = join(dir, entry.name);
305
+ const kind = kindOf(entry);
306
+ if (last || kind === "dir" || (kind === null && isDirectory(path))) {
307
+ if (kind && !real)
308
+ real = realOf(dir);
309
+ put(found, path, kind ? [kind, join(real, entry.name)] : null);
310
+ }
113
311
  }
114
312
  }
115
313
  }
116
- current = [...new Set(next)];
314
+ current = found;
315
+ }
316
+ const keyed = new Map();
317
+ for (const [path, known] of current) {
318
+ if (known === null) {
319
+ if (isEntry(path) && !isDirectory(path))
320
+ keyed.set(path, realOf(path));
321
+ }
322
+ else if (known[0] === "file")
323
+ keyed.set(path, known[1]);
117
324
  }
118
- return current.filter((path) => existsSync(path) && statSync(path).isFile()).sort();
325
+ return keyed;
326
+ }
327
+ /**
328
+ * Paths in order, each file once however many links or patterns lead to it (1.4.2). A loop of
329
+ * links gave the same card here twice and in Python's glob once per level, and two patterns that
330
+ * reach one card through a link gave it here twice.
331
+ */
332
+ export function oncePerFile(paths) {
333
+ return once(new Map(paths.map((path) => [path, realOf(path)])));
334
+ }
335
+ /** Paths in order, each real path once — the first path in that order stands for it. */
336
+ export function once(keyed) {
337
+ const seen = new Set();
338
+ const out = [];
339
+ for (const path of [...keyed.keys()].sort()) {
340
+ const key = keyed.get(path);
341
+ if (seen.has(key))
342
+ continue;
343
+ seen.add(key);
344
+ out.push(path);
345
+ }
346
+ return out;
119
347
  }
120
348
  /** Every card the config points at, as [id, front matter]. */
121
349
  export function loadCardFiles(config, base) {
122
350
  const findings = [];
123
- const files = new Set();
124
- for (const pattern of config.cards ?? []) {
125
- for (const file of expandGlob(base, pattern))
126
- files.add(file);
127
- }
128
- if (files.size === 0)
351
+ const files = expandGlobs(base, config.cards ?? []);
352
+ if (files.length === 0)
129
353
  findings.push(new Finding("no_cards_found", "the `cards` patterns matched nothing"));
130
354
  const cards = [];
131
- for (const path of [...files].sort()) {
132
- const fm = frontMatter(path);
355
+ for (const path of files) {
356
+ const fm = readDocument(path);
133
357
  if (fm)
134
358
  cards.push([String(fm["id"] ?? path.split(sep).pop()), fm]);
135
359
  }
@@ -137,16 +361,23 @@ export function loadCardFiles(config, base) {
137
361
  }
138
362
  /** Collect `*.op.md` and `*.contract.md` under the given files or directories. */
139
363
  export function collectCards(paths) {
140
- const files = [];
364
+ return once(collectKeyed(paths));
365
+ }
366
+ /** The cards and contracts under the given files or directories, each with its real path (1.4.3). */
367
+ export function collectKeyed(paths) {
368
+ const keyed = new Map();
141
369
  for (const path of paths) {
142
- if (existsSync(path) && statSync(path).isDirectory()) {
370
+ if (isDirectory(path)) {
143
371
  // Both document kinds, deliberately: `validate forms/` used to collect nothing and print
144
372
  // "0 card(s): 0 error(s)" — a green verdict on a directory it had not read.
145
- files.push(...expandGlob(path, "**/*.op.md"), ...expandGlob(path, "**/*.contract.md"));
373
+ for (const pattern of ["**/*.op.md", "**/*.contract.md"]) {
374
+ for (const [found, real] of expandKeyed(path, pattern))
375
+ put(keyed, found, real);
376
+ }
146
377
  }
147
378
  else
148
- files.push(path);
379
+ put(keyed, path, realOf(path));
149
380
  }
150
- return [...new Set(files)].sort();
381
+ return keyed;
151
382
  }
152
383
  //# sourceMappingURL=core.js.map
package/dist/core.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
package/dist/preview.js CHANGED
@@ -13,7 +13,7 @@
13
13
  */
14
14
  import { existsSync, readFileSync, writeFileSync } from "node:fs";
15
15
  import { join } from "node:path";
16
- import { frontMatter, expandGlob } from "./core.js";
16
+ import { expandGlobs, readDocument } from "./core.js";
17
17
  function bodyOf(path) {
18
18
  const text = readFileSync(path, "utf8").replace(/^/, "").replace(/\r\n/g, "\n");
19
19
  const end = text.indexOf("\n---", 3);
@@ -21,12 +21,11 @@ function bodyOf(path) {
21
21
  }
22
22
  export function collectPreviewData(config, base) {
23
23
  const contracts = [];
24
- for (const pattern of config.forms ?? []) {
25
- for (const file of expandGlob(base, pattern)) {
26
- const fm = frontMatter(file);
27
- if (fm && fm["usedesign_form"] === 1)
28
- contracts.push({ ...fm, __body: bodyOf(file), __file: file.split(/[\\/]/).pop() });
29
- }
24
+ // Each contract once, however many patterns reach it (1.4.2).
25
+ for (const file of expandGlobs(base, config.forms ?? [])) {
26
+ const fm = readDocument(file);
27
+ if (fm && fm["usedesign_form"] === 1)
28
+ contracts.push({ ...fm, __body: bodyOf(file), __file: file.split(/[\\/]/).pop() });
30
29
  }
31
30
  let inventory = null;
32
31
  let producedBy = "";
@@ -1 +1 @@
1
- {"version":3,"file":"preview.js","sourceRoot":"","sources":["../src/preview.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preview.js","sourceRoot":"","sources":["../src/preview.ts"],"names":[],"mappings":"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"}