@vielzeug/codex 2.0.2 → 2.1.1

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.
@@ -1,502 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { parseFrontmatter } from "../../scripts/frontmatter.js";
3
- import { generateBundledData } from "../../scripts/generator.js";
4
- import { generateLlmsTxt, stripDocMarkup } from "../../scripts/llms.js";
5
- import { loadData, packageMeta, validateBundledData } from '../data.js';
6
- import { resolvePort } from '../port.js';
7
- import { scorePackage } from '../search.js';
8
- import { SCHEMA_VERSION } from '../types.js';
9
- // ---------------------------------------------------------------------------
10
- // Helpers
11
- // ---------------------------------------------------------------------------
12
- function makePkg(overrides = {}) {
13
- return {
14
- apiSource: null,
15
- availableDocPages: [],
16
- category: '',
17
- components: [],
18
- description: '',
19
- docs: {},
20
- exports: [],
21
- keywords: [],
22
- name: '@vielzeug/test',
23
- related: [],
24
- slug: 'test',
25
- version: '1.0.0',
26
- ...overrides,
27
- };
28
- }
29
- // ---------------------------------------------------------------------------
30
- // parseFrontmatter
31
- // ---------------------------------------------------------------------------
32
- describe('parseFrontmatter', () => {
33
- it('returns empty object for content with no frontmatter', () => {
34
- expect(parseFrontmatter('# Hello')).toEqual({});
35
- expect(parseFrontmatter('')).toEqual({});
36
- });
37
- it('parses simple key: value pairs', () => {
38
- const md = `---\ntitle: My Package\ncategory: state\n---\n# content`;
39
- expect(parseFrontmatter(md)).toEqual({ category: 'state', title: 'My Package' });
40
- });
41
- it('strips surrounding quotes from values', () => {
42
- const md = `---\ntitle: 'Quoted Title'\ndescription: "Double quoted"\n---`;
43
- expect(parseFrontmatter(md)).toMatchObject({ description: 'Double quoted', title: 'Quoted Title' });
44
- });
45
- it('parses inline arrays', () => {
46
- const md = `---\nkeywords: [signals, reactive, state]\n---`;
47
- expect(parseFrontmatter(md)).toEqual({ keywords: ['signals', 'reactive', 'state'] });
48
- });
49
- it('parses inline arrays with quoted items', () => {
50
- const md = `---\nrelated: ['ripple', 'craft']\n---`;
51
- expect(parseFrontmatter(md)).toEqual({ related: ['ripple', 'craft'] });
52
- });
53
- it('parses block sequence arrays', () => {
54
- const md = `---\nexports:\n - signal\n - computed\n - effect\n---`;
55
- expect(parseFrontmatter(md)).toEqual({ exports: ['signal', 'computed', 'effect'] });
56
- });
57
- it('handles values containing colons', () => {
58
- const md = `---\nurl: https://example.com/path\n---`;
59
- expect(parseFrontmatter(md)).toEqual({ url: 'https://example.com/path' });
60
- });
61
- it('handles CRLF line endings', () => {
62
- const md = `---\r\ntitle: Test\r\ncategory: ui\r\n---`;
63
- expect(parseFrontmatter(md)).toMatchObject({ category: 'ui', title: 'Test' });
64
- });
65
- it('skips comment lines (#)', () => {
66
- const md = `---\n# this is a comment\ntitle: Real\n---`;
67
- expect(parseFrontmatter(md)).toEqual({ title: 'Real' });
68
- });
69
- it('ignores block sequence key with no items (empty sequence body)', () => {
70
- const md = `---\nexports:\ntitle: After\n---`;
71
- expect(parseFrontmatter(md)).not.toHaveProperty('exports');
72
- expect(parseFrontmatter(md)).toHaveProperty('title', 'After');
73
- });
74
- it('drops __proto__ key to prevent prototype pollution', () => {
75
- const md = `---\n__proto__: injected\ntitle: Safe\n---`;
76
- const result = parseFrontmatter(md);
77
- expect(result).not.toHaveProperty('__proto__');
78
- expect(result['title']).toBe('Safe');
79
- });
80
- it('drops constructor key to prevent prototype pollution', () => {
81
- const md = `---\nconstructor: injected\ntitle: Safe\n---`;
82
- const result = parseFrontmatter(md);
83
- expect(result).not.toHaveProperty('constructor');
84
- });
85
- });
86
- // ---------------------------------------------------------------------------
87
- // packageMeta
88
- // ---------------------------------------------------------------------------
89
- describe('packageMeta', () => {
90
- it('strips docs, apiSource, and components from the output', () => {
91
- const pkg = makePkg({
92
- apiSource: 'export function foo() {}',
93
- components: [{ name: 'sg-button', tagName: 'sg-button' }],
94
- docs: { api: '# API', index: '# Index' },
95
- });
96
- const meta = packageMeta(pkg);
97
- expect(meta).not.toHaveProperty('docs');
98
- expect(meta).not.toHaveProperty('apiSource');
99
- expect(meta).not.toHaveProperty('components');
100
- });
101
- it('sets hasSource: true when apiSource is present', () => {
102
- const pkg = makePkg({ apiSource: 'export {}' });
103
- expect(packageMeta(pkg).hasSource).toBe(true);
104
- });
105
- it('sets hasSource: false when apiSource is null', () => {
106
- const pkg = makePkg({ apiSource: null });
107
- expect(packageMeta(pkg).hasSource).toBe(false);
108
- });
109
- it('preserves all other fields unchanged', () => {
110
- const pkg = makePkg({ category: 'state', description: 'A signal library', keywords: ['reactive'] });
111
- const meta = packageMeta(pkg);
112
- expect(meta.category).toBe('state');
113
- expect(meta.description).toBe('A signal library');
114
- expect(meta.keywords).toEqual(['reactive']);
115
- expect(meta.slug).toBe('test');
116
- });
117
- });
118
- // ---------------------------------------------------------------------------
119
- // scorePackage
120
- // ---------------------------------------------------------------------------
121
- describe('scorePackage', () => {
122
- it('returns null when the term matches nothing', () => {
123
- const pkg = makePkg({ description: 'A state library', keywords: ['reactive'] });
124
- expect(scorePackage(pkg, 'zzz_no_match')).toBeNull();
125
- });
126
- it('scores description matches (metadata tier)', () => {
127
- const pkg = makePkg({ description: 'Reactive signals and computed values' });
128
- const hit = scorePackage(pkg, 'signal');
129
- expect(hit).not.toBeNull();
130
- expect(hit?.score).toBeGreaterThanOrEqual(3);
131
- expect(hit?.matchedIn).toContain('metadata');
132
- });
133
- it('scores name matches higher than description within metadata tier', () => {
134
- const byName = makePkg({ name: '@vielzeug/ripple' });
135
- const byDesc = makePkg({ description: 'ripple signals library' });
136
- const nameHit = scorePackage(byName, 'ripple');
137
- const descHit = scorePackage(byDesc, 'ripple');
138
- expect(nameHit?.score).toBeGreaterThan(descHit?.score ?? 0);
139
- expect(nameHit?.matchedIn).toContain('metadata');
140
- });
141
- it('scores keyword matches (keywords tier, score >= 2)', () => {
142
- const pkg = makePkg({ keywords: ['schema', 'validation', 'zod-like'] });
143
- const hit = scorePackage(pkg, 'validation');
144
- expect(hit?.score).toBeGreaterThanOrEqual(2);
145
- expect(hit?.score).toBeLessThan(3);
146
- expect(hit?.matchedIn).toContain('keywords');
147
- });
148
- it('scores doc page matches (docs tier, score < 2)', () => {
149
- const pkg = makePkg({
150
- availableDocPages: ['api'],
151
- docs: { api: '# API\n\nUse `createForm()` to build forms.' },
152
- });
153
- const hit = scorePackage(pkg, 'createform');
154
- expect(hit?.score).toBeGreaterThan(0);
155
- expect(hit?.score).toBeLessThan(2);
156
- expect(hit?.matchedIn).toContain('docs');
157
- expect(hit?.matchedPages).toContain('api');
158
- });
159
- it('scores apiSource matches below docs tier', () => {
160
- const pkg = makePkg({ apiSource: 'export function createQuery() {}' });
161
- const hit = scorePackage(pkg, 'createquery');
162
- expect(hit?.score).toBeGreaterThan(0);
163
- expect(hit?.score).toBeLessThan(2);
164
- expect(hit?.matchedIn).toContain('source');
165
- expect(hit?.matchedIn).not.toContain('docs');
166
- expect(hit?.matchedPages).toBeUndefined();
167
- });
168
- it('collects all match categories (multi-match)', () => {
169
- // Term matches both metadata AND keywords — both reported, score = highest weight
170
- const pkg = makePkg({
171
- description: 'A reactive signal library',
172
- keywords: ['reactive', 'signal'],
173
- });
174
- const hit = scorePackage(pkg, 'reactive');
175
- expect(hit?.score).toBeGreaterThanOrEqual(3);
176
- expect(hit?.matchedIn).toContain('metadata');
177
- expect(hit?.matchedIn).toContain('keywords');
178
- expect(hit?.matchedIn.length).toBe(2);
179
- });
180
- it('collects multiple matched doc pages', () => {
181
- const pkg = makePkg({
182
- availableDocPages: ['index', 'api'],
183
- docs: {
184
- api: 'The createQuery function fetches data.',
185
- index: 'Use createQuery to create queries.',
186
- },
187
- });
188
- const hit = scorePackage(pkg, 'createquery');
189
- expect(hit?.matchedPages).toContain('index');
190
- expect(hit?.matchedPages).toContain('api');
191
- });
192
- it('matches multi-word queries with AND logic across words', () => {
193
- const pkg = makePkg({ description: 'Reactive signal library for state management' });
194
- expect(scorePackage(pkg, 'reactive signal')).not.toBeNull();
195
- expect(scorePackage(pkg, 'reactive zzz_no_match')).toBeNull();
196
- });
197
- it('returns null for a query of only whitespace', () => {
198
- const pkg = makePkg({ description: 'anything' });
199
- expect(scorePackage(pkg, ' ')).toBeNull();
200
- });
201
- it('reports both "keywords" and "exports" when both match', () => {
202
- const pkg = makePkg({ exports: ['signal'], keywords: ['signal'] });
203
- const hit = scorePackage(pkg, 'signal');
204
- // keywords weight (2.5) > exports weight (2.2)
205
- expect(hit?.score).toBeGreaterThanOrEqual(2.5);
206
- expect(hit?.matchedIn).toContain('keywords');
207
- expect(hit?.matchedIn).toContain('exports');
208
- });
209
- it('scores exports array matches in keywords tier (score >= 2, < 3)', () => {
210
- const pkg = makePkg({ exports: ['signal', 'computed', 'effect'] });
211
- const hit = scorePackage(pkg, 'signal');
212
- expect(hit?.score).toBeGreaterThanOrEqual(2);
213
- expect(hit?.score).toBeLessThan(3);
214
- expect(hit?.matchedIn).toContain('exports');
215
- expect(hit?.matchedIn).not.toContain('keywords');
216
- });
217
- it('does not include matchedPages when only metadata matches', () => {
218
- const pkg = makePkg({ name: '@vielzeug/ripple' });
219
- const hit = scorePackage(pkg, 'ripple');
220
- expect(hit?.matchedPages).toBeUndefined();
221
- });
222
- it('matches hyphenated keywords with space-separated query terms', () => {
223
- const pkg = makePkg({ keywords: ['reactive-signal'] });
224
- const hit = scorePackage(pkg, 'reactive signal');
225
- expect(hit).not.toBeNull();
226
- expect(hit?.matchedIn).toContain('keywords');
227
- });
228
- it('is case-insensitive in both haystack and query', () => {
229
- const pkg = makePkg({ description: 'REACTIVE signals' });
230
- // lowercase query
231
- expect(scorePackage(pkg, 'reactive')).not.toBeNull();
232
- // uppercase query — scorePackage lowercases the query internally
233
- expect(scorePackage(pkg, 'REACTIVE')).not.toBeNull();
234
- // mixed case
235
- expect(scorePackage(pkg, 'Reactive')).not.toBeNull();
236
- });
237
- it('scores related array matches in keywords tier (score >= 2, < 3)', () => {
238
- const pkg = makePkg({ related: ['ripple', 'craft'] });
239
- const hit = scorePackage(pkg, 'ripple');
240
- expect(hit).not.toBeNull();
241
- expect(hit?.score).toBeGreaterThanOrEqual(2);
242
- expect(hit?.score).toBeLessThan(3);
243
- expect(hit?.matchedIn).toContain('related');
244
- expect(hit?.matchedIn).not.toContain('keywords');
245
- expect(hit?.matchedIn).not.toContain('exports');
246
- });
247
- it('keywords score higher than exports which score higher than related', () => {
248
- const kwOnly = makePkg({ keywords: ['forge'] });
249
- const exOnly = makePkg({ exports: ['forge'] });
250
- const relOnly = makePkg({ related: ['forge'] });
251
- const kwHit = scorePackage(kwOnly, 'forge');
252
- const exHit = scorePackage(exOnly, 'forge');
253
- const relHit = scorePackage(relOnly, 'forge');
254
- expect(kwHit?.score).toBeGreaterThan(exHit?.score ?? 0);
255
- expect(exHit?.score).toBeGreaterThan(relHit?.score ?? 0);
256
- });
257
- it('reports "keywords", "exports", and "related" when all match', () => {
258
- const pkg = makePkg({ exports: ['forge'], keywords: ['forge'], related: ['forge'] });
259
- const hit = scorePackage(pkg, 'forge');
260
- // keywords weight wins (2.5)
261
- expect(hit?.score).toBeGreaterThanOrEqual(2.5);
262
- expect(hit?.matchedIn).toContain('keywords');
263
- expect(hit?.matchedIn).toContain('exports');
264
- expect(hit?.matchedIn).toContain('related');
265
- });
266
- it('returns null for a query consisting only of hyphens', () => {
267
- const pkg = makePkg({ description: 'anything' });
268
- // "-" normalises to " " → splits to [] → terms empty → null
269
- expect(scorePackage(pkg, '-')).toBeNull();
270
- expect(scorePackage(pkg, '---')).toBeNull();
271
- });
272
- });
273
- // ---------------------------------------------------------------------------
274
- // generateBundledData
275
- // ---------------------------------------------------------------------------
276
- describe('generateBundledData', () => {
277
- it('returns data with packages array and non-empty version', () => {
278
- const { data } = generateBundledData();
279
- expect(Array.isArray(data.packages)).toBe(true);
280
- expect(data.packages.length).toBeGreaterThan(0);
281
- expect(typeof data.version).toBe('string');
282
- expect(data.version.length).toBeGreaterThan(0);
283
- });
284
- it('returns packages sorted by slug', () => {
285
- const { data } = generateBundledData();
286
- const slugs = data.packages.map((p) => p.slug);
287
- const sorted = [...slugs].sort((a, b) => a.localeCompare(b));
288
- expect(slugs).toEqual(sorted);
289
- });
290
- it('availableDocPages matches the keys present in docs', () => {
291
- const { data } = generateBundledData();
292
- for (const pkg of data.packages) {
293
- const docKeys = Object.keys(pkg.docs).sort();
294
- const availableSorted = [...pkg.availableDocPages].sort();
295
- expect(availableSorted).toEqual(docKeys);
296
- }
297
- });
298
- it('does not return hashes when incremental is false', () => {
299
- const result = generateBundledData({ incremental: false });
300
- expect(result.hashes).toBeUndefined();
301
- });
302
- it('returns data with the current schema version', () => {
303
- const { data } = generateBundledData();
304
- expect(data.schemaVersion).toBe(SCHEMA_VERSION);
305
- });
306
- it('returns hashes with one entry per package when incremental is true', () => {
307
- const result = generateBundledData({ incremental: true });
308
- expect(result.hashes).toBeDefined();
309
- const slugs = result.data.packages.map((p) => p.slug);
310
- for (const slug of slugs) {
311
- expect(typeof result.hashes[slug]).toBe('string');
312
- expect(result.hashes[slug].length).toBeGreaterThan(0);
313
- }
314
- });
315
- it('every package has a name and slug', () => {
316
- const { data } = generateBundledData();
317
- for (const pkg of data.packages) {
318
- expect(typeof pkg.name).toBe('string');
319
- expect(pkg.name.length).toBeGreaterThan(0);
320
- expect(typeof pkg.slug).toBe('string');
321
- expect(pkg.slug.length).toBeGreaterThan(0);
322
- }
323
- });
324
- });
325
- // ---------------------------------------------------------------------------
326
- // resolvePort
327
- // ---------------------------------------------------------------------------
328
- describe('resolvePort', () => {
329
- it('returns null when raw is undefined', () => {
330
- expect(resolvePort(undefined)).toBeNull();
331
- });
332
- it('returns a number for a valid port string', () => {
333
- expect(resolvePort('3100')).toBe(3100);
334
- expect(resolvePort('1')).toBe(1);
335
- expect(resolvePort('65535')).toBe(65535);
336
- });
337
- it('throws for port 0', () => {
338
- expect(() => resolvePort('0')).toThrow(/Invalid --port/);
339
- });
340
- it('throws for port 65536', () => {
341
- expect(() => resolvePort('65536')).toThrow(/Invalid --port/);
342
- });
343
- it('throws for a non-numeric string', () => {
344
- expect(() => resolvePort('abc')).toThrow(/Invalid --port/);
345
- });
346
- it('throws for an empty string', () => {
347
- expect(() => resolvePort('')).toThrow(/Invalid --port/);
348
- });
349
- it('truncates float strings via parseInt (3.14 → 3)', () => {
350
- expect(resolvePort('3.14')).toBe(3);
351
- });
352
- it('throws for a negative port', () => {
353
- expect(() => resolvePort('-1')).toThrow(/Invalid --port/);
354
- });
355
- });
356
- // ---------------------------------------------------------------------------
357
- // validate
358
- // ---------------------------------------------------------------------------
359
- const VALID_DATA = {
360
- packages: [
361
- {
362
- apiSource: null,
363
- availableDocPages: [],
364
- category: '',
365
- components: [],
366
- description: '',
367
- docs: {},
368
- exports: [],
369
- keywords: [],
370
- name: '@vielzeug/x',
371
- related: [],
372
- slug: 'x',
373
- version: '1.0.0',
374
- },
375
- ],
376
- schemaVersion: SCHEMA_VERSION,
377
- version: '1.0.0',
378
- };
379
- describe('validate', () => {
380
- it('throws when input is null', () => {
381
- expect(() => validateBundledData(null)).toThrow(/malformed|schema/);
382
- });
383
- it('throws when version is missing', () => {
384
- expect(() => validateBundledData({ packages: [], schemaVersion: SCHEMA_VERSION })).toThrow(/malformed|schema/);
385
- });
386
- it('throws when packages is not an array', () => {
387
- expect(() => validateBundledData({ packages: 'bad', schemaVersion: SCHEMA_VERSION, version: '1.0.0' })).toThrow(/malformed|schema/);
388
- });
389
- it('throws when schemaVersion is missing', () => {
390
- expect(() => validateBundledData({ packages: [], version: '1.0.0' })).toThrow(/malformed|schema/);
391
- });
392
- it('throws when schemaVersion is wrong', () => {
393
- expect(() => validateBundledData({ packages: [], schemaVersion: 9999, version: '1.0.0' })).toThrow(/malformed|schema/);
394
- });
395
- it('passes valid data through without throwing', () => {
396
- expect(() => validateBundledData(VALID_DATA)).not.toThrow();
397
- });
398
- it('returns the same object reference on success', () => {
399
- expect(validateBundledData(VALID_DATA)).toBe(VALID_DATA);
400
- });
401
- it('loadData succeeds with the bundled data file (smoke test)', () => {
402
- expect(() => loadData()).not.toThrow();
403
- });
404
- });
405
- // ---------------------------------------------------------------------------
406
- // index.ts re-exports smoke test
407
- // ---------------------------------------------------------------------------
408
- describe('index.ts re-exports', () => {
409
- it('exports loadData and packageMeta from data.js', () => {
410
- expect(typeof loadData).toBe('function');
411
- expect(typeof packageMeta).toBe('function');
412
- });
413
- it('createServerFromDisk returns a Server instance without throwing', async () => {
414
- const { createServerFromDisk } = await import('../index.js');
415
- const server = createServerFromDisk();
416
- expect(server).toBeDefined();
417
- expect(typeof server.connect).toBe('function');
418
- });
419
- });
420
- // ---------------------------------------------------------------------------
421
- // stripDocMarkup
422
- // ---------------------------------------------------------------------------
423
- describe('stripDocMarkup', () => {
424
- it('removes frontmatter', () => {
425
- expect(stripDocMarkup('---\ntitle: Test\n---\n# Body')).toBe('# Body');
426
- });
427
- it('removes HTML tags', () => {
428
- expect(stripDocMarkup('<Badge type="tip" /> text')).toBe('text');
429
- });
430
- it('removes HTML comments', () => {
431
- expect(stripDocMarkup('<!-- comment -->\n# H')).toBe('# H');
432
- });
433
- it('removes [[toc]] directive', () => {
434
- expect(stripDocMarkup('[[toc]]\n# H')).toBe('# H');
435
- });
436
- it('passes through plain markdown unchanged', () => {
437
- const md = '# Heading\n\nSome paragraph text.\n\n- item 1\n- item 2';
438
- expect(stripDocMarkup(md)).toBe(md);
439
- });
440
- it('does not produce triple blank lines', () => {
441
- expect(stripDocMarkup('# H\n\n\n\nParagraph')).not.toMatch(/\n{3}/);
442
- });
443
- });
444
- // ---------------------------------------------------------------------------
445
- // generateLlmsTxt
446
- // ---------------------------------------------------------------------------
447
- describe('generateLlmsTxt', () => {
448
- const minimalData = {
449
- packages: [
450
- {
451
- apiSource: null,
452
- availableDocPages: ['index', 'api'],
453
- category: 'utilities',
454
- components: [],
455
- description: 'A minimal test package',
456
- docs: {
457
- api: '---\ntitle: API\n---\n## Functions\n\nThe `foo()` function does things.',
458
- index: '---\ntitle: Index\n---\n# Test\n\nA minimal test package.',
459
- },
460
- exports: ['foo', 'bar'],
461
- keywords: ['test'],
462
- name: '@vielzeug/test',
463
- related: [],
464
- slug: 'test',
465
- version: '1.0.0',
466
- },
467
- ],
468
- schemaVersion: SCHEMA_VERSION,
469
- version: '1.0.0',
470
- };
471
- it('returns non-empty strings for both outputs', () => {
472
- const { llmsFullTxt, llmsTxt } = generateLlmsTxt(minimalData);
473
- expect(llmsTxt.length).toBeGreaterThan(0);
474
- expect(llmsFullTxt.length).toBeGreaterThan(0);
475
- });
476
- it('llms.txt contains the package name', () => {
477
- const { llmsTxt } = generateLlmsTxt(minimalData);
478
- expect(llmsTxt).toContain('@vielzeug/test');
479
- });
480
- it('llms.txt groups packages under their category heading', () => {
481
- const { llmsTxt } = generateLlmsTxt(minimalData);
482
- expect(llmsTxt).toContain('### utilities');
483
- });
484
- it('llms.txt ends with a newline', () => {
485
- const { llmsTxt } = generateLlmsTxt(minimalData);
486
- expect(llmsTxt.endsWith('\n')).toBe(true);
487
- });
488
- it('llms-full.txt includes content from all available doc pages', () => {
489
- const { llmsFullTxt } = generateLlmsTxt(minimalData);
490
- expect(llmsFullTxt).toContain('The `foo()` function does things.');
491
- expect(llmsFullTxt).toContain('A minimal test package.');
492
- });
493
- it('llms-full.txt contains API Reference section label', () => {
494
- const { llmsFullTxt } = generateLlmsTxt(minimalData);
495
- expect(llmsFullTxt).toContain('### API Reference');
496
- });
497
- it('llms-full.txt ends with a newline', () => {
498
- const { llmsFullTxt } = generateLlmsTxt(minimalData);
499
- expect(llmsFullTxt.endsWith('\n')).toBe(true);
500
- });
501
- });
502
- //# sourceMappingURL=unit.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"unit.test.js","sourceRoot":"","sources":["../../src/__tests__/unit.test.ts"],"names":[],"mappings":"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"}
package/dist/data.js DELETED
@@ -1,91 +0,0 @@
1
- import { readFileSync } from 'node:fs';
2
- import { dirname, resolve } from 'node:path';
3
- import { fileURLToPath } from 'node:url';
4
- import { CodexError } from './errors.js';
5
- import { SCHEMA_VERSION } from './types.js';
6
- const DEFAULT_DATA_FILE = resolve(dirname(fileURLToPath(import.meta.url)), '../data/vielzeug-data.json');
7
- const REGEN_CMD = 'pnpm --dir packages/codex run prepare:data';
8
- /** Array-typed BundledPackage fields that every real generated entry always populates. */
9
- const PACKAGE_ARRAY_FIELDS = ['availableDocPages', 'examples', 'exports', 'keywords', 'related'];
10
- /** Plain-object-typed BundledPackage fields that every real generated entry always populates. */
11
- const PACKAGE_OBJECT_FIELDS = ['docs', 'typeSignatures'];
12
- function isPlainObject(value) {
13
- return typeof value === 'object' && value !== null && !Array.isArray(value);
14
- }
15
- /**
16
- * `validateBundledData` is public API (see usage.md "load data from a custom snapshot file") and
17
- * therefore reachable with arbitrary, possibly malformed JSON — not just the package's own
18
- * generated output. Checking only `slug`/`name` let a structurally-wrong `docs`/`examples`/etc.
19
- * field pass validation and then throw an unclear `TypeError` deep inside a tool's `run()` instead
20
- * of a clear `CodexError` here, at load time.
21
- */
22
- export function validateBundledData(raw) {
23
- const r = raw;
24
- if (typeof raw !== 'object' ||
25
- raw === null ||
26
- r['schemaVersion'] !== SCHEMA_VERSION ||
27
- typeof r['version'] !== 'string' ||
28
- !Array.isArray(r['packages']) ||
29
- !Array.isArray(r['refineComponents'])) {
30
- throw new CodexError(`Bundled data is malformed or uses an outdated schema (expected v${SCHEMA_VERSION}). Regenerate with ${REGEN_CMD}.`);
31
- }
32
- for (const entry of r['packages']) {
33
- const p = entry;
34
- if (typeof p['slug'] !== 'string' || p['slug'].length === 0 || typeof p['name'] !== 'string') {
35
- throw new CodexError(`Bundled data has a malformed package entry (missing slug or name). Regenerate with ${REGEN_CMD}.`);
36
- }
37
- for (const field of PACKAGE_ARRAY_FIELDS) {
38
- if (!Array.isArray(p[field])) {
39
- throw new CodexError(`Bundled data has a malformed package entry ("${p['slug']}"."${field}" must be an array). Regenerate with ${REGEN_CMD}.`);
40
- }
41
- }
42
- for (const field of PACKAGE_OBJECT_FIELDS) {
43
- if (!isPlainObject(p[field])) {
44
- throw new CodexError(`Bundled data has a malformed package entry ("${p['slug']}"."${field}" must be an object). Regenerate with ${REGEN_CMD}.`);
45
- }
46
- }
47
- }
48
- return raw;
49
- }
50
- export function loadData(dataFile) {
51
- const file = dataFile ?? DEFAULT_DATA_FILE;
52
- let raw;
53
- try {
54
- raw = readFileSync(file, 'utf8');
55
- }
56
- catch (error) {
57
- const code = error instanceof Error ? error.code : undefined;
58
- if (code === 'ENOENT') {
59
- throw new CodexError(`Bundled MCP data not found at ${file}. In the monorepo run ${REGEN_CMD}; for standalone installs, reinstall @vielzeug/codex to restore packaged data.`, { cause: error });
60
- }
61
- const detail = error instanceof Error ? error.message : String(error);
62
- throw new CodexError(`Failed to read bundled MCP data at ${file}: ${detail}.`, { cause: error });
63
- }
64
- let parsed;
65
- try {
66
- parsed = JSON.parse(raw);
67
- }
68
- catch (error) {
69
- throw new CodexError(`Bundled MCP data at ${file} is malformed JSON. Regenerate with ${REGEN_CMD}.`, {
70
- cause: error,
71
- });
72
- }
73
- return validateBundledData(parsed);
74
- }
75
- /** Projects a BundledPackage to its lightweight PackageMeta shape (strips heavy content fields). */
76
- export function packageMeta(pkg) {
77
- return {
78
- availableDocPages: pkg.availableDocPages,
79
- category: pkg.category,
80
- description: pkg.description,
81
- exampleIds: pkg.examples.map((e) => e.id),
82
- exports: pkg.exports,
83
- hasSource: pkg.apiSource !== null,
84
- keywords: pkg.keywords,
85
- name: pkg.name,
86
- related: pkg.related,
87
- slug: pkg.slug,
88
- version: pkg.version,
89
- };
90
- }
91
- //# sourceMappingURL=data.js.map
package/dist/data.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"data.js","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"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"}