docspack 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +58 -9
- package/dist/build.js.map +1 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +46 -3
- package/dist/doctor.js.map +1 -1
- package/dist/document.d.ts +2 -0
- package/dist/document.d.ts.map +1 -1
- package/dist/document.js +7 -3
- package/dist/document.js.map +1 -1
- package/dist/search.d.ts +3 -2
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +10 -2
- package/dist/search.js.map +1 -1
- package/dist/spec.d.ts +6 -0
- package/dist/spec.d.ts.map +1 -1
- package/dist/spec.js +12 -3
- package/dist/spec.js.map +1 -1
- package/dist/verify.js +54 -26
- package/dist/verify.js.map +1 -1
- package/package.json +1 -1
- package/src/build.ts +84 -10
- package/src/doctor.ts +48 -4
- package/src/document.ts +13 -4
- package/src/search.ts +12 -4
- package/src/spec.ts +21 -3
- package/src/verify.ts +56 -26
package/dist/spec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec.js","sourceRoot":"","sources":["../src/spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,+EAA+E;AAC/E,MAAM,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAC;AAChC,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAC;AAC7C,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC;AACnC,MAAM,CAAC,MAAM,UAAU,GAAG,qCAAqC,CAAC;AAChE,+FAA+F;AAC/F,MAAM,CAAC,MAAM,QAAQ,GAAG,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"spec.js","sourceRoot":"","sources":["../src/spec.ts"],"names":[],"mappings":"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"}
|
package/dist/verify.js
CHANGED
|
@@ -125,44 +125,61 @@ async function verifyOne(cwd, packageDir) {
|
|
|
125
125
|
}
|
|
126
126
|
async function verifyPackage(cwd, id, packageDir, manifest) {
|
|
127
127
|
const empty = { id, checked: 0, matched: 0, unrecognised: 0, findings: [] };
|
|
128
|
-
const
|
|
129
|
-
|
|
128
|
+
const packageLibraries = await documentedLibraries(packageDir, manifest);
|
|
129
|
+
// A chunk may name its own libraries, which is how a monorepo says that one chunk describes
|
|
130
|
+
// `@acme/api@1.2.0` and its neighbour describes `@acme/cli@3.0.0`. Those are what that chunk
|
|
131
|
+
// is checked against; the package's list covers every chunk that names none.
|
|
132
|
+
const scopes = manifest.chunks.map((chunk) => chunk.documents ?? packageLibraries);
|
|
133
|
+
if (packageLibraries.length === 0 && scopes.every((scope) => scope.length === 0)) {
|
|
130
134
|
return {
|
|
131
135
|
...empty,
|
|
132
136
|
status: "skipped",
|
|
133
137
|
reason: `declares no "documents", so there is nothing to check against`,
|
|
134
138
|
};
|
|
135
139
|
}
|
|
136
|
-
const documents =
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
140
|
+
const documents = [
|
|
141
|
+
...new Set([...packageLibraries, ...scopes.flat()].map(formatDocumentedLibrary)),
|
|
142
|
+
];
|
|
143
|
+
// One resolution per library, however many chunks name it: reading a type surface is the
|
|
144
|
+
// expensive part, and a monorepo pack names the same eighteen libraries throughout.
|
|
145
|
+
const surfaces = new Map();
|
|
146
|
+
const resolve = async (library) => {
|
|
147
|
+
const cached = surfaces.get(library.name);
|
|
148
|
+
if (cached !== undefined)
|
|
149
|
+
return cached;
|
|
142
150
|
const libraryDir = (await resolvePackageDir(library.name, packageDir)) ??
|
|
143
151
|
(await resolvePackageDir(library.name, cwd));
|
|
144
152
|
const surface = libraryDir === undefined ? undefined : await readExportSurface(libraryDir);
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
for (const name of surface.names)
|
|
150
|
-
names.add(name);
|
|
151
|
-
}
|
|
152
|
-
if (names.size === 0) {
|
|
153
|
-
return {
|
|
154
|
-
...empty,
|
|
155
|
-
status: "skipped",
|
|
156
|
-
documents,
|
|
157
|
-
reason: `${missing.join(", ")} ${missing.length === 1 ? "is" : "are"} not installed, or ship no type declarations`,
|
|
158
|
-
};
|
|
159
|
-
}
|
|
160
|
-
const declared = new Set([...names].map(normalize));
|
|
153
|
+
const names = surface?.names ?? new Set();
|
|
154
|
+
surfaces.set(library.name, names);
|
|
155
|
+
return names;
|
|
156
|
+
};
|
|
161
157
|
const findings = [];
|
|
158
|
+
const missing = new Set();
|
|
162
159
|
let checked = 0;
|
|
163
160
|
let matched = 0;
|
|
164
161
|
let unrecognised = 0;
|
|
165
|
-
|
|
162
|
+
let readAny = false;
|
|
163
|
+
for (const [index, chunk] of manifest.chunks.entries()) {
|
|
164
|
+
const scope = scopes[index] ?? packageLibraries;
|
|
165
|
+
if (scope.length === 0)
|
|
166
|
+
continue;
|
|
167
|
+
// An entity is fine if any library in scope declares it: a monorepo documents eighteen
|
|
168
|
+
// packages from one surface, and a name belongs to whichever of them exports it.
|
|
169
|
+
const names = new Set();
|
|
170
|
+
for (const library of scope) {
|
|
171
|
+
const surface = await resolve(library);
|
|
172
|
+
if (surface.size === 0) {
|
|
173
|
+
missing.add(library.name);
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
for (const name of surface)
|
|
177
|
+
names.add(name);
|
|
178
|
+
}
|
|
179
|
+
if (names.size === 0)
|
|
180
|
+
continue;
|
|
181
|
+
readAny = true;
|
|
182
|
+
const declared = new Set([...names].map(normalize));
|
|
166
183
|
for (const entity of chunk.entities) {
|
|
167
184
|
const symbol = checkableSymbol(entity);
|
|
168
185
|
if (symbol === undefined)
|
|
@@ -188,11 +205,22 @@ async function verifyPackage(cwd, id, packageDir, manifest) {
|
|
|
188
205
|
});
|
|
189
206
|
}
|
|
190
207
|
}
|
|
208
|
+
if (!readAny) {
|
|
209
|
+
const unread = [...missing];
|
|
210
|
+
return {
|
|
211
|
+
...empty,
|
|
212
|
+
status: "skipped",
|
|
213
|
+
documents,
|
|
214
|
+
reason: unread.length === 0
|
|
215
|
+
? "has no chunk naming a library to check against"
|
|
216
|
+
: `${unread.join(", ")} ${unread.length === 1 ? "is" : "are"} not installed, or ship no type declarations`,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
191
219
|
return {
|
|
192
220
|
id,
|
|
193
221
|
status: "verified",
|
|
194
222
|
documents,
|
|
195
|
-
...(missing.
|
|
223
|
+
...(missing.size === 0 ? {} : { unchecked: [...missing] }),
|
|
196
224
|
checked,
|
|
197
225
|
matched,
|
|
198
226
|
unrecognised,
|
package/dist/verify.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/build.ts
CHANGED
|
@@ -15,7 +15,9 @@ import {
|
|
|
15
15
|
estimateTokens,
|
|
16
16
|
LLMS_DIR,
|
|
17
17
|
MANIFEST_FILE,
|
|
18
|
+
type PackageManifest,
|
|
18
19
|
parseDocumentedLibrary,
|
|
20
|
+
parseManifest,
|
|
19
21
|
serializeManifest,
|
|
20
22
|
} from "./spec.js";
|
|
21
23
|
import { STOPWORDS } from "./stopwords.js";
|
|
@@ -64,6 +66,8 @@ interface SourceDocument {
|
|
|
64
66
|
readonly atomic?: boolean;
|
|
65
67
|
readonly tags?: readonly string[];
|
|
66
68
|
readonly entities?: readonly string[];
|
|
69
|
+
/** Libraries this document describes, when that is narrower than the package's `documents`. */
|
|
70
|
+
readonly documents?: readonly string[];
|
|
67
71
|
}
|
|
68
72
|
|
|
69
73
|
const DEFAULT_MAX_CHUNK_TOKENS = 800;
|
|
@@ -94,9 +98,12 @@ export async function buildPackage(input: BuildOptions): Promise<BuildResult> {
|
|
|
94
98
|
{ hint: "A chunk cannot be required to be bigger than it is allowed to be." },
|
|
95
99
|
);
|
|
96
100
|
}
|
|
97
|
-
const { chunks, files } = chunkDocuments(documents, maxTokens, minTokens);
|
|
101
|
+
const { chunks, files, collisions } = chunkDocuments(documents, maxTokens, minTokens);
|
|
98
102
|
|
|
99
103
|
const llmsDir = join(options.out, LLMS_DIR);
|
|
104
|
+
// Read before the payload is removed: a chunk id is what `feedback add --chunk` pins and what
|
|
105
|
+
// an answer is headed with, so a rebuild that renames one silently orphans both.
|
|
106
|
+
warnings.push(...idWarnings(collisions, await departedChunkIds(llmsDir, chunks)));
|
|
100
107
|
await rm(llmsDir, { recursive: true, force: true });
|
|
101
108
|
await mkdir(join(llmsDir, CHUNKS_DIR), { recursive: true });
|
|
102
109
|
|
|
@@ -248,6 +255,7 @@ async function collectFromDirectory(dir: string): Promise<SourceDocument[]> {
|
|
|
248
255
|
origin: relativePath,
|
|
249
256
|
text: cleaned.text,
|
|
250
257
|
...(cleaned.tags.length === 0 ? {} : { tags: cleaned.tags }),
|
|
258
|
+
...(cleaned.documents.length === 0 ? {} : { documents: cleaned.documents }),
|
|
251
259
|
});
|
|
252
260
|
}
|
|
253
261
|
return documents;
|
|
@@ -427,9 +435,14 @@ function chunkDocuments(
|
|
|
427
435
|
documents: readonly SourceDocument[],
|
|
428
436
|
maxTokens: number,
|
|
429
437
|
minTokens: number | undefined,
|
|
430
|
-
): {
|
|
438
|
+
): {
|
|
439
|
+
chunks: ChunkSpec[];
|
|
440
|
+
files: { path: string; contents: string }[];
|
|
441
|
+
collisions: string[];
|
|
442
|
+
} {
|
|
431
443
|
const chunks: ChunkSpec[] = [];
|
|
432
444
|
const files: { path: string; contents: string }[] = [];
|
|
445
|
+
const collisions: string[] = [];
|
|
433
446
|
const taken = new Set<string>();
|
|
434
447
|
|
|
435
448
|
for (const document of documents) {
|
|
@@ -442,7 +455,10 @@ function chunkDocuments(
|
|
|
442
455
|
for (const section of sections) {
|
|
443
456
|
const directives = readDirectives(section.body);
|
|
444
457
|
const body = withoutDuplicateHeading(directives.body, section.heading);
|
|
445
|
-
const
|
|
458
|
+
const derived = chunkSlug(document.title, section.heading);
|
|
459
|
+
const id = uniqueId(derived, taken);
|
|
460
|
+
if (id !== derived) collisions.push(derived);
|
|
461
|
+
const libraries = directives.documents.length > 0 ? directives.documents : document.documents;
|
|
446
462
|
const contents = `# ${section.heading}\n\n<!-- docspack: from ${document.origin} -->\n\n${body}\n`;
|
|
447
463
|
const file = `${CHUNKS_DIR}/${id}.md`;
|
|
448
464
|
|
|
@@ -463,11 +479,59 @@ function chunkDocuments(
|
|
|
463
479
|
...extractEntities(body),
|
|
464
480
|
]),
|
|
465
481
|
],
|
|
482
|
+
...(libraries === undefined || libraries.length === 0
|
|
483
|
+
? {}
|
|
484
|
+
: { documents: libraries.map(parseDocumentedLibrary) }),
|
|
466
485
|
});
|
|
467
486
|
}
|
|
468
487
|
}
|
|
469
488
|
|
|
470
|
-
return { chunks, files };
|
|
489
|
+
return { chunks, files, collisions };
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
/**
|
|
493
|
+
* The two ways a chunk id moves without anyone deciding it should. Both are reported as one
|
|
494
|
+
* line each, however many ids are involved: a large package collides in dozens of places, and a
|
|
495
|
+
* warning per id is a wall of text nobody reads.
|
|
496
|
+
*/
|
|
497
|
+
function idWarnings(collisions: readonly string[], gone: readonly string[]): string[] {
|
|
498
|
+
const warnings: string[] = [];
|
|
499
|
+
if (collisions.length > 0) {
|
|
500
|
+
warnings.push(
|
|
501
|
+
`${plural(collisions.length, "derived chunk id")} collided and ${collisions.length === 1 ? "was" : "were"} given a numeric suffix: ${list(collisions)} — which section keeps the bare id depends on the order the sources were read in`,
|
|
502
|
+
);
|
|
503
|
+
}
|
|
504
|
+
if (gone.length > 0) {
|
|
505
|
+
warnings.push(
|
|
506
|
+
`${plural(gone.length, "chunk id")} the previous build published ${gone.length === 1 ? "is" : "are"} gone: ${list(gone)} — recorded feedback and published links pinned to ${gone.length === 1 ? "it" : "them"} no longer resolve`,
|
|
507
|
+
);
|
|
508
|
+
}
|
|
509
|
+
return warnings;
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
const plural = (count: number, noun: string): string => `${count} ${noun}${count === 1 ? "" : "s"}`;
|
|
513
|
+
|
|
514
|
+
const list = (ids: readonly string[]): string =>
|
|
515
|
+
`${ids.slice(0, 5).join(", ")}${ids.length > 5 ? `, and ${ids.length - 5} more` : ""}`;
|
|
516
|
+
|
|
517
|
+
/**
|
|
518
|
+
* Chunk ids the payload on disk carries that this build does not, or nothing when there is no
|
|
519
|
+
* previous payload to compare with. An unreadable manifest is not a finding: `build` is what
|
|
520
|
+
* replaces it.
|
|
521
|
+
*/
|
|
522
|
+
async function departedChunkIds(llmsDir: string, chunks: readonly ChunkSpec[]): Promise<string[]> {
|
|
523
|
+
let previous: PackageManifest;
|
|
524
|
+
try {
|
|
525
|
+
previous = parseManifest(
|
|
526
|
+
JSON.parse(await readFile(join(llmsDir, MANIFEST_FILE), "utf8")),
|
|
527
|
+
`${LLMS_DIR}/${MANIFEST_FILE}`,
|
|
528
|
+
);
|
|
529
|
+
} catch {
|
|
530
|
+
return [];
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
const current = new Set(chunks.map((chunk) => chunk.id));
|
|
534
|
+
return previous.chunks.map((chunk) => chunk.id).filter((id) => !current.has(id));
|
|
471
535
|
}
|
|
472
536
|
|
|
473
537
|
/** One piece of a document, before it becomes a chunk. */
|
|
@@ -661,26 +725,36 @@ function matchAll(text: string, pattern: RegExp): string[] {
|
|
|
661
725
|
}
|
|
662
726
|
|
|
663
727
|
/** One authored override under a heading: `<!-- docspack: tags=grid,columns -->`. */
|
|
664
|
-
const DIRECTIVE =
|
|
728
|
+
const DIRECTIVE =
|
|
729
|
+
/^[ \t]*<!--[ \t]*docspack:[ \t]*(tags|entities|documents)[ \t]*=([^>]*?)-->[ \t]*$/gim;
|
|
665
730
|
|
|
666
731
|
/**
|
|
667
732
|
* Reads per-section directives and removes them from the body. Front matter belongs to a whole
|
|
668
733
|
* document, so a page of eighty sections cannot aim any one of them; this is that lever.
|
|
669
734
|
*/
|
|
670
|
-
function readDirectives(body: string): {
|
|
671
|
-
|
|
672
|
-
|
|
735
|
+
function readDirectives(body: string): {
|
|
736
|
+
body: string;
|
|
737
|
+
tags: string[];
|
|
738
|
+
entities: string[];
|
|
739
|
+
documents: string[];
|
|
740
|
+
} {
|
|
741
|
+
const collected: Record<string, string[]> = { tags: [], entities: [], documents: [] };
|
|
673
742
|
|
|
674
743
|
const text = body.replace(DIRECTIVE, (_line, key: string, value: string) => {
|
|
675
744
|
const values = value
|
|
676
745
|
.split(",")
|
|
677
746
|
.map((item) => item.trim())
|
|
678
747
|
.filter((item) => item.length > 0);
|
|
679
|
-
|
|
748
|
+
collected[key.toLowerCase()]?.push(...values);
|
|
680
749
|
return "";
|
|
681
750
|
});
|
|
682
751
|
|
|
683
|
-
return {
|
|
752
|
+
return {
|
|
753
|
+
body: text.replace(/\n{3,}/g, "\n\n").trim(),
|
|
754
|
+
tags: collected.tags ?? [],
|
|
755
|
+
entities: collected.entities ?? [],
|
|
756
|
+
documents: collected.documents ?? [],
|
|
757
|
+
};
|
|
684
758
|
}
|
|
685
759
|
|
|
686
760
|
/**
|
package/src/doctor.ts
CHANGED
|
@@ -64,12 +64,14 @@ export async function runDoctor(options: DoctorOptions): Promise<DoctorReport> {
|
|
|
64
64
|
const prose: Severity = options.pedantic === true ? "warn" : "info";
|
|
65
65
|
|
|
66
66
|
const pkg = await readJson(join(options.dir, "package.json"));
|
|
67
|
-
const
|
|
68
|
-
if (
|
|
67
|
+
const loaded = await loadManifest(llmsDir, findings);
|
|
68
|
+
if (loaded === undefined) {
|
|
69
69
|
return { ok: false, findings, chunks: 0, tokens: 0 };
|
|
70
70
|
}
|
|
71
|
+
const { manifest, raw } = loaded;
|
|
71
72
|
|
|
72
73
|
checkPackageJson(pkg, manifest, findings);
|
|
74
|
+
checkUnknownFields(raw, findings);
|
|
73
75
|
|
|
74
76
|
let tokens = 0;
|
|
75
77
|
let newestSource = 0;
|
|
@@ -233,7 +235,7 @@ function plural(count: number, noun: string): string {
|
|
|
233
235
|
async function loadManifest(
|
|
234
236
|
llmsDir: string,
|
|
235
237
|
findings: Finding[],
|
|
236
|
-
): Promise<PackageManifest | undefined> {
|
|
238
|
+
): Promise<{ manifest: PackageManifest; raw: unknown } | undefined> {
|
|
237
239
|
let raw: string;
|
|
238
240
|
try {
|
|
239
241
|
raw = await readFile(join(llmsDir, MANIFEST_FILE), "utf8");
|
|
@@ -248,7 +250,8 @@ async function loadManifest(
|
|
|
248
250
|
}
|
|
249
251
|
|
|
250
252
|
try {
|
|
251
|
-
|
|
253
|
+
const parsed: unknown = JSON.parse(raw);
|
|
254
|
+
return { manifest: parseManifest(parsed, `${LLMS_DIR}/${MANIFEST_FILE}`), raw: parsed };
|
|
252
255
|
} catch (error) {
|
|
253
256
|
findings.push({
|
|
254
257
|
check: "manifest-invalid",
|
|
@@ -261,6 +264,47 @@ async function loadManifest(
|
|
|
261
264
|
}
|
|
262
265
|
}
|
|
263
266
|
|
|
267
|
+
/** Every key the format defines. `additionalProperties` is true, so nothing else is read. */
|
|
268
|
+
const MANIFEST_KEYS = new Set(["$schema", "name", "version", "documents", "chunks"]);
|
|
269
|
+
const CHUNK_KEYS = new Set(["id", "file", "tokens", "tags", "entities", "documents"]);
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Reports keys outside the closed set.
|
|
273
|
+
*
|
|
274
|
+
* Unknown fields are accepted and ignored, which is the forward-compatibility rule and worth
|
|
275
|
+
* keeping — but it also means `"tokens"` written as `"token"` validates, publishes, and does
|
|
276
|
+
* nothing. A publisher is the one party who can still tell a typo from an extension, so the
|
|
277
|
+
* check belongs here rather than in the reader, at a severity `--strict` fails on.
|
|
278
|
+
*/
|
|
279
|
+
function checkUnknownFields(raw: unknown, findings: Finding[]): void {
|
|
280
|
+
const root = raw as Record<string, unknown>;
|
|
281
|
+
const unknown = Object.keys(root).filter((key) => !MANIFEST_KEYS.has(key));
|
|
282
|
+
if (unknown.length > 0) {
|
|
283
|
+
findings.push({
|
|
284
|
+
check: "unknown-field",
|
|
285
|
+
severity: "warn",
|
|
286
|
+
message: `the manifest has ${unknown.length === 1 ? "a field" : "fields"} nothing reads: ${unknown.join(", ")}`,
|
|
287
|
+
where: `${LLMS_DIR}/${MANIFEST_FILE}`,
|
|
288
|
+
fix: "Remove it, or correct the spelling. Unknown fields are accepted and ignored.",
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
const chunks = Array.isArray(root.chunks) ? root.chunks : [];
|
|
293
|
+
for (const entry of chunks) {
|
|
294
|
+
if (typeof entry !== "object" || entry === null) continue;
|
|
295
|
+
const chunk = entry as Record<string, unknown>;
|
|
296
|
+
const extra = Object.keys(chunk).filter((key) => !CHUNK_KEYS.has(key));
|
|
297
|
+
if (extra.length === 0) continue;
|
|
298
|
+
findings.push({
|
|
299
|
+
check: "unknown-field",
|
|
300
|
+
severity: "warn",
|
|
301
|
+
message: `chunk "${String(chunk.id)}" has ${extra.length === 1 ? "a field" : "fields"} nothing reads: ${extra.join(", ")}`,
|
|
302
|
+
where: `${LLMS_DIR}/${MANIFEST_FILE}`,
|
|
303
|
+
fix: "Remove it, or correct the spelling. Unknown fields are accepted and ignored.",
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
|
|
264
308
|
function checkPackageJson(
|
|
265
309
|
pkg: Record<string, unknown> | undefined,
|
|
266
310
|
manifest: PackageManifest,
|
package/src/document.ts
CHANGED
|
@@ -6,6 +6,8 @@ export interface CleanedDocument {
|
|
|
6
6
|
readonly title?: string;
|
|
7
7
|
/** Keywords taken from front matter, indexed alongside the prose. */
|
|
8
8
|
readonly tags: readonly string[];
|
|
9
|
+
/** Libraries this document describes, when it describes fewer than the whole package. */
|
|
10
|
+
readonly documents: readonly string[];
|
|
9
11
|
}
|
|
10
12
|
|
|
11
13
|
const FRONT_MATTER = /^?---\r?\n([\s\S]*?)\r?\n---\r?\n?/;
|
|
@@ -17,23 +19,29 @@ const FRONT_MATTER = /^?---\r?\n([\s\S]*?)\r?\n---\r?\n?/;
|
|
|
17
19
|
export function cleanDocument(raw: string): CleanedDocument {
|
|
18
20
|
const match = FRONT_MATTER.exec(raw);
|
|
19
21
|
const body = stripBoilerplate(match === null ? raw : raw.slice(match[0].length)).trim();
|
|
20
|
-
if (match?.[1] === undefined) return { text: body, tags: [] };
|
|
22
|
+
if (match?.[1] === undefined) return { text: body, tags: [], documents: [] };
|
|
21
23
|
|
|
22
24
|
const meta = parseFrontMatter(match[1]);
|
|
23
25
|
return {
|
|
24
26
|
text: body,
|
|
25
27
|
...(meta.title === undefined ? {} : { title: meta.title }),
|
|
26
28
|
tags: meta.tags,
|
|
29
|
+
documents: meta.documents,
|
|
27
30
|
};
|
|
28
31
|
}
|
|
29
32
|
|
|
30
33
|
/**
|
|
31
|
-
* Reads the
|
|
34
|
+
* Reads the three front matter fields worth reading. This is deliberately not a YAML parser:
|
|
32
35
|
* anything more complex is not metadata a retrieval index can use.
|
|
33
36
|
*/
|
|
34
|
-
function parseFrontMatter(block: string): {
|
|
37
|
+
function parseFrontMatter(block: string): {
|
|
38
|
+
title?: string;
|
|
39
|
+
tags: string[];
|
|
40
|
+
documents: string[];
|
|
41
|
+
} {
|
|
35
42
|
let title: string | undefined;
|
|
36
43
|
const tags: string[] = [];
|
|
44
|
+
const documents: string[] = [];
|
|
37
45
|
|
|
38
46
|
for (const line of block.split("\n")) {
|
|
39
47
|
const entry = /^\s*([A-Za-z_][\w-]*)\s*:\s*(.*)$/.exec(line);
|
|
@@ -45,9 +53,10 @@ function parseFrontMatter(block: string): { title?: string; tags: string[] } {
|
|
|
45
53
|
if ((key === "tags" || key === "keywords") && value.startsWith("[")) {
|
|
46
54
|
tags.push(...splitList(value));
|
|
47
55
|
}
|
|
56
|
+
if (key === "documents" && value.startsWith("[")) documents.push(...splitList(value));
|
|
48
57
|
}
|
|
49
58
|
|
|
50
|
-
return { ...(title === undefined ? {} : { title }), tags };
|
|
59
|
+
return { ...(title === undefined ? {} : { title }), tags, documents };
|
|
51
60
|
}
|
|
52
61
|
|
|
53
62
|
function splitList(value: string): string[] {
|
package/src/search.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { SearchHit, Store } from "./db.js";
|
|
2
2
|
import { discoverPackages } from "./discovery.js";
|
|
3
|
-
import { formatDocumentedLibrary, isCommunityPackage } from "./spec.js";
|
|
3
|
+
import { chunkId, formatDocumentedLibrary, isCommunityPackage } from "./spec.js";
|
|
4
4
|
|
|
5
5
|
/** Ceiling on how much context one query may return, per the blueprint's context-exhaustion rule. */
|
|
6
6
|
export const DEFAULT_MAX_TOKENS = 3000;
|
|
@@ -26,9 +26,10 @@ export interface QueryHit extends SearchHit {
|
|
|
26
26
|
readonly version: string;
|
|
27
27
|
readonly trusted: boolean;
|
|
28
28
|
/**
|
|
29
|
-
* Libraries
|
|
29
|
+
* Libraries this chunk documents, from its manifest. A docs package version cannot always
|
|
30
30
|
* imply this — a monorepo documents many libraries at many versions from one surface — so the
|
|
31
|
-
* answer states it rather than leaving the reader to infer it from the package name.
|
|
31
|
+
* answer states it rather than leaving the reader to infer it from the package name. A chunk
|
|
32
|
+
* that names its own libraries answers for those; otherwise the package's list stands.
|
|
32
33
|
*/
|
|
33
34
|
readonly documents?: readonly string[];
|
|
34
35
|
}
|
|
@@ -56,12 +57,18 @@ export async function queryDocs(options: QueryOptions): Promise<QueryResult> {
|
|
|
56
57
|
|
|
57
58
|
// Read from the installed manifests rather than the index: the store is a cache of chunk text,
|
|
58
59
|
// and adding a column to it would make every existing store need a rebuild to answer this.
|
|
60
|
+
// Keyed by package id and by chunk id in the same map, because a chunk id already carries its
|
|
61
|
+
// package: `@acme/docspack@1.4.0/api-auth` cannot collide with `@acme/docspack@1.4.0`.
|
|
59
62
|
const documented = new Map<string, readonly string[]>();
|
|
60
63
|
for (const pkg of installed ?? []) {
|
|
61
64
|
const documents = pkg.manifest.documents;
|
|
62
65
|
if (documents !== undefined && documents.length > 0) {
|
|
63
66
|
documented.set(pkg.id, documents.map(formatDocumentedLibrary));
|
|
64
67
|
}
|
|
68
|
+
for (const chunk of pkg.manifest.chunks) {
|
|
69
|
+
if (chunk.documents === undefined || chunk.documents.length === 0) continue;
|
|
70
|
+
documented.set(chunkId(pkg.id, chunk.id), chunk.documents.map(formatDocumentedLibrary));
|
|
71
|
+
}
|
|
65
72
|
}
|
|
66
73
|
|
|
67
74
|
const hits = options.store
|
|
@@ -75,7 +82,8 @@ export async function queryDocs(options: QueryOptions): Promise<QueryResult> {
|
|
|
75
82
|
})
|
|
76
83
|
.map((hit): QueryHit => {
|
|
77
84
|
const { name, version } = splitPackageId(hit.packageId);
|
|
78
|
-
|
|
85
|
+
// The chunk's own libraries win: they are the narrower, and therefore the truer, claim.
|
|
86
|
+
const documents = documented.get(hit.chunkId) ?? documented.get(hit.packageId);
|
|
79
87
|
return {
|
|
80
88
|
...hit,
|
|
81
89
|
name,
|
package/src/spec.ts
CHANGED
|
@@ -18,6 +18,12 @@ export interface ChunkSpec {
|
|
|
18
18
|
readonly tokens?: number;
|
|
19
19
|
readonly tags: readonly string[];
|
|
20
20
|
readonly entities: readonly string[];
|
|
21
|
+
/**
|
|
22
|
+
* What this chunk describes, when that is narrower than what the package describes. A
|
|
23
|
+
* repository publishing eighteen libraries at four versions from one documentation surface
|
|
24
|
+
* has a package-level answer that is true of the pack and useless about any one chunk.
|
|
25
|
+
*/
|
|
26
|
+
readonly documents?: readonly DocumentedLibrary[];
|
|
21
27
|
}
|
|
22
28
|
|
|
23
29
|
/** A library release the package documents, e.g. `acme` at `1.4.0`. */
|
|
@@ -116,7 +122,7 @@ export function parseManifest(raw: unknown, where: string): PackageManifest {
|
|
|
116
122
|
if (typeof version !== "string" || version.length === 0) fail('missing string field "version"');
|
|
117
123
|
if (!Array.isArray(root.chunks)) fail('missing "chunks" array');
|
|
118
124
|
|
|
119
|
-
const
|
|
125
|
+
const packageDocuments = parseDocuments(root.documents, fail);
|
|
120
126
|
const seen = new Set<string>();
|
|
121
127
|
const chunks = (root.chunks as unknown[]).map((entry, index): ChunkSpec => {
|
|
122
128
|
if (typeof entry !== "object" || entry === null)
|
|
@@ -142,16 +148,24 @@ export function parseManifest(raw: unknown, where: string): PackageManifest {
|
|
|
142
148
|
return fail(`chunk "${id}" has an invalid "tokens" value; omit it to have it estimated`);
|
|
143
149
|
}
|
|
144
150
|
|
|
151
|
+
const documents = parseDocuments(chunk.documents, fail);
|
|
152
|
+
|
|
145
153
|
return {
|
|
146
154
|
id,
|
|
147
155
|
file,
|
|
148
156
|
...(typeof tokens === "number" ? { tokens } : {}),
|
|
149
157
|
tags: stringArray(chunk.tags, `chunk "${id}" field "tags"`, fail),
|
|
150
158
|
entities: stringArray(chunk.entities, `chunk "${id}" field "entities"`, fail),
|
|
159
|
+
...(documents === undefined ? {} : { documents }),
|
|
151
160
|
};
|
|
152
161
|
});
|
|
153
162
|
|
|
154
|
-
return {
|
|
163
|
+
return {
|
|
164
|
+
name,
|
|
165
|
+
version,
|
|
166
|
+
...(packageDocuments === undefined ? {} : { documents: packageDocuments }),
|
|
167
|
+
chunks,
|
|
168
|
+
};
|
|
155
169
|
}
|
|
156
170
|
|
|
157
171
|
/**
|
|
@@ -192,7 +206,11 @@ export function serializeManifest(manifest: PackageManifest): string {
|
|
|
192
206
|
name: manifest.name,
|
|
193
207
|
version: manifest.version,
|
|
194
208
|
...(documents.length === 0 ? {} : { documents: documents.map(formatDocumentedLibrary) }),
|
|
195
|
-
chunks: manifest.chunks
|
|
209
|
+
chunks: manifest.chunks.map((chunk) =>
|
|
210
|
+
chunk.documents === undefined
|
|
211
|
+
? chunk
|
|
212
|
+
: { ...chunk, documents: chunk.documents.map(formatDocumentedLibrary) },
|
|
213
|
+
),
|
|
196
214
|
},
|
|
197
215
|
null,
|
|
198
216
|
2,
|