@khester/create-dynamics-app 3.4.3 → 3.6.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.
@@ -0,0 +1,450 @@
1
+ /**
2
+ * Emit the generated project's AI-facing context as **`CLAUDE.md`**.
3
+ *
4
+ * ★★★ WHY `CLAUDE.md` AND NOT `AI_CONTEXT.md`. Decided on MECHANISM, not on a behavioural test.
5
+ * That filename is a plane the agent harness demonstrably auto-loads; a plain `AI_CONTEXT.md` at a
6
+ * project root has zero evidence of ever being read. Both cost the same to write, so the one that
7
+ * is definitely read wins. A behavioural comparison WAS attempted and came back void twice — the
8
+ * control cannot be clean inside a workspace whose own `CLAUDE.md` states the rules under test.
9
+ *
10
+ * ★★★ WRITE ONLY WHAT THE SCAFFOLD CANNOT TEACH. This is the whole editorial rule, and it is
11
+ * MEASURED rather than a preference: in the reuse experiment the docs-stripped cell still used
12
+ * `IApiService` correctly, because `src/core/services/` plus the `example/` slice teach it
13
+ * structurally. Restating "components never call Dataverse directly" would therefore be a third
14
+ * copy of a rule already obeyed — tokens spent to change nothing. What earns space is the class of
15
+ * rule no file demonstrates: things that are invisible in a green build, or that are about
16
+ * judgement rather than mechanism.
17
+ *
18
+ * ★ Everything factual here is DERIVED from the artifact descriptor. Nothing is retyped, so nothing
19
+ * can drift from the registry — and a fact that cannot be derived is omitted rather than guessed.
20
+ */
21
+ import * as path from 'path';
22
+ import { fileURLToPath } from 'url';
23
+ import fs from 'fs-extra';
24
+ const TEMPLATES_ROOT = fileURLToPath(new URL('../templates', import.meta.url));
25
+ /**
26
+ * Which Fluent an artifact ships, resolved from the strongest available evidence.
27
+ *
28
+ * ★★★ THIS READ THE WRONG FIELD FIRST, AND ONLY BUILDING A PROJECT SHOWED IT. The first version
29
+ * used `descriptor.defaultLibrary` alone — but `registry.test.ts` enforces that `defaultLibrary` is
30
+ * **absent** on every artifact that does NOT offer a choice, so it is populated for exactly 3 of 13.
31
+ * `pcf-field` therefore emitted no Fluent line at all, which is the artifact where the fact matters
32
+ * most. A declared field is not a populated one; the shipped `package.json` is the artefact.
33
+ *
34
+ * Order: the caller's explicit choice → `defaultLibrary` → what the template actually pins → none.
35
+ */
36
+ export function resolveFluent(descriptor, library, templatesRoot = TEMPLATES_ROOT) {
37
+ const labelFor = (v8) => v8 ? 'Fluent UI v8 (`@fluentui/react`)' : 'Fluent UI v9 (`@fluentui/react-components`)';
38
+ const chosen = library ?? descriptor.defaultLibrary;
39
+ if (chosen)
40
+ return { label: labelFor(chosen !== 'fluent-v9'), exact: false };
41
+ // Fall back to the artefact: whatever the template's own package.json pins is what ships.
42
+ try {
43
+ const pkgPath = path.join(templatesRoot, descriptor.templateDir, 'package.json');
44
+ const pkg = fs.readJsonSync(pkgPath);
45
+ const all = { ...(pkg.dependencies ?? {}), ...(pkg.devDependencies ?? {}) };
46
+ const v8 = all['@fluentui/react'];
47
+ const v9 = all['@fluentui/react-components'];
48
+ const range = v8 ?? v9;
49
+ if (!range)
50
+ return null;
51
+ return { label: labelFor(Boolean(v8)), range, exact: /^\d/.test(range) };
52
+ }
53
+ catch {
54
+ // ★ A missing or unreadable template package.json means "I could not tell", which is NOT the
55
+ // same as "this artifact has no Fluent" — but the only honest output for an unknown fact is to
56
+ // say nothing about it rather than assert a default.
57
+ return null;
58
+ }
59
+ }
60
+ /**
61
+ * The house rules.
62
+ *
63
+ * ★★ Each line is here because NO FILE IN THE SCAFFOLD DEMONSTRATES IT. Before adding one, ask what
64
+ * would have to be deleted from the generated project for the rule to stop being obvious — if the
65
+ * answer is "nothing", the code already teaches it and the line is waste.
66
+ */
67
+ function houseRules(descriptor, fluent) {
68
+ const rules = [
69
+ '**Ask before adding a dependency.** Not a style preference — this estate pins versions against ' +
70
+ 'what the host platform actually serves, and a package that installs cleanly can still be ' +
71
+ 'wrong at runtime. A green `npm install` proves nothing about the host.',
72
+ '**Business rules never live only in the UI.** A rule enforced in a component is a rule that ' +
73
+ 'does not exist for the API, an import, or the next surface this data appears on.',
74
+ '**Search the component catalog before writing a component, and prefer editing an existing one ' +
75
+ 'over adding a near-duplicate.** `search_components` then `get_component` for the prop ' +
76
+ 'contract. A near-duplicate is not free: it is a second thing to fix.',
77
+ ];
78
+ if (fluent) {
79
+ rules.push(`**${fluent.label} only.** No shadcn, no Tailwind, no second component library. Mixing them ` +
80
+ 'is how a surface stops matching the host it is embedded in.');
81
+ // ★★★ THE HIGHEST-VALUE LINE IN THIS FILE FOR A PCF-FAMILY CONTROL, and the clearest case of
82
+ // "what the scaffold cannot teach". `package.json` shows the exact pin; it cannot say WHY
83
+ // widening it is fatal. A `control-type="virtual"` control externalises Fluent to a platform
84
+ // global, so the declared version must be one the runtime actually defines — and a wrong one
85
+ // BUILDS GREEN and then fails to load in every host. Emitted only when the template really
86
+ // pins an exact version, so it never appears on an artifact where it would be false.
87
+ if (fluent.exact && fluent.range) {
88
+ rules.push(`**Do not widen the Fluent pin.** This template pins \`${fluent.range}\` exactly, not a ` +
89
+ 'range. The version is externalised to a platform-provided global, so it must equal a ' +
90
+ 'version the host actually serves — a caret here still installs, still builds, and then ' +
91
+ 'fails to load at runtime with nothing in the build output to explain it.');
92
+ }
93
+ }
94
+ return rules;
95
+ }
96
+ /**
97
+ * Build the `CLAUDE.md` body.
98
+ *
99
+ * ★ The header line is entirely derived, so it stays true as the registry changes.
100
+ */
101
+ export function renderClaudeMd(projectName, descriptor, library) {
102
+ const fluent = resolveFluent(descriptor, library);
103
+ const facts = [`artifact \`${descriptor.id}\``, fluent?.label].filter(Boolean).join(' · ');
104
+ const seam = (descriptor.sharedModules ?? []).includes('dataverse-seam');
105
+ const out = [];
106
+ out.push(`# ${projectName}`);
107
+ out.push('');
108
+ out.push(`> Generated by \`create-dynamics-app\` — ${facts}.`);
109
+ out.push('> Read this before changing anything here.');
110
+ out.push('');
111
+ out.push('## House rules');
112
+ out.push('');
113
+ for (const r of houseRules(descriptor, fluent))
114
+ out.push(`- ${r}`);
115
+ out.push('');
116
+ // ★★ Point at the code rather than paraphrasing it. A paraphrase is a second copy that can go
117
+ // stale; a pointer cannot. This section exists precisely so the rules above stay short.
118
+ out.push('## What the code already tells you');
119
+ out.push('');
120
+ out.push('Read these rather than asking for a summary — they are the source of truth, and this');
121
+ out.push('file deliberately does not restate them:');
122
+ out.push('');
123
+ if (seam) {
124
+ out.push('- `src/core/services/` — the data-access seam. Every Dataverse call goes through it,');
125
+ out.push(' and every service has a mock path. The shape is visible in the code; follow it.');
126
+ }
127
+ out.push('- `package.json` — the pinned versions and the real command list.');
128
+ out.push('- `README.md` — how to run and deploy this artifact.');
129
+ out.push('');
130
+ // ★ Only link the docs that this tier actually emits. A pointer to a file that is not there is
131
+ // worse than no pointer: it reads as a missing file rather than as a tier boundary.
132
+ const docs = docsForTier(descriptor.docsTier);
133
+ if (docs.length) {
134
+ out.push('## Before you change anything');
135
+ out.push('');
136
+ out.push('Read, in order:');
137
+ out.push('');
138
+ for (const d of docs)
139
+ out.push(`- \`docs/${d}.md\``);
140
+ out.push('');
141
+ // ★ Mention the convention only where the template actually ships. An instruction to "add a
142
+ // feature doc" in a project with no template and no docs/features/ is an instruction to invent
143
+ // a format, which is how two projects end up with two conventions.
144
+ if (descriptor.docsTier === 'full') {
145
+ out.push('When you build a feature, add `docs/features/<feature>.md` — copy');
146
+ out.push('`docs/features/_TEMPLATE.md`. It is short on purpose.');
147
+ out.push('');
148
+ }
149
+ }
150
+ return out.join('\n') + '\n';
151
+ }
152
+ /** Walk a scaffolded project and record the facts the docs are derived from. */
153
+ export function readProjectTree(projectPath) {
154
+ const dirs = [];
155
+ const walk = (rel, depth) => {
156
+ if (depth > 3)
157
+ return;
158
+ let entries = [];
159
+ try {
160
+ entries = fs.readdirSync(path.join(projectPath, rel));
161
+ }
162
+ catch {
163
+ return;
164
+ }
165
+ for (const e of entries) {
166
+ if (e === 'node_modules' || e === '.git' || e === 'dist' || e === 'build')
167
+ continue;
168
+ const child = rel ? `${rel}/${e}` : e;
169
+ let isDir = false;
170
+ try {
171
+ isDir = fs.statSync(path.join(projectPath, child)).isDirectory();
172
+ }
173
+ catch {
174
+ continue;
175
+ }
176
+ if (isDir) {
177
+ dirs.push(child);
178
+ walk(child, depth + 1);
179
+ }
180
+ }
181
+ };
182
+ walk('', 0);
183
+ // ★ Find the services directory rather than assuming one. `src/core/services` (seam-bearing) and
184
+ // `src/services` (everything else) are both real, and which one exists is the artifact's choice.
185
+ const servicesDir = dirs.find((d) => d.endsWith('services'));
186
+ // ★★ Search the WHOLE project for a mock, not just the services directory. See `mockPaths`.
187
+ const mockPaths = [];
188
+ for (const d of ['', ...dirs]) {
189
+ try {
190
+ for (const f of fs.readdirSync(path.join(projectPath, d))) {
191
+ if (!/mock/i.test(f))
192
+ continue;
193
+ const rel = d ? `${d}/${f}` : f;
194
+ if (fs.statSync(path.join(projectPath, rel)).isFile())
195
+ mockPaths.push(rel);
196
+ }
197
+ }
198
+ catch {
199
+ /* unreadable dir — skip */
200
+ }
201
+ }
202
+ return { dirs: dirs.sort(), servicesDir, mockPaths: mockPaths.sort() };
203
+ }
204
+ /**
205
+ * A document that is deliberately EMPTY, and says so in its first line.
206
+ *
207
+ * ★★★ AN EMPTY DOC MUST NOT LOOK LIKE A FINISHED ONE. The design-docs checker exists because a
208
+ * placeholder diagram "renders as a finished diagram" — the same hazard applies here, worse,
209
+ * because an agent reading a confident-looking but empty `02-DOMAIN-MODEL.md` will conclude the
210
+ * project HAS no domain model rather than that nobody has written it down yet. So these stubs are
211
+ * short, state their own emptiness first, and say what belongs in them.
212
+ */
213
+ function stub(title, belongs) {
214
+ return [
215
+ `# ${title}`,
216
+ '',
217
+ '> **This document is empty.** It was scaffolded, not written — nothing here has been',
218
+ '> authored yet, and its absence of content is not a statement about the project.',
219
+ '',
220
+ `**What belongs here:** ${belongs}`,
221
+ '',
222
+ '_Delete this notice when you write it._',
223
+ '',
224
+ ].join('\n');
225
+ }
226
+ function architectureDoc(descriptor, fluent) {
227
+ const out = ['# Architecture', ''];
228
+ out.push('Facts derived from the scaffold. Everything below the line is yours to write.');
229
+ out.push('');
230
+ out.push('| | |');
231
+ out.push('|---|---|');
232
+ out.push(`| Artifact | \`${descriptor.id}\` |`);
233
+ out.push(`| Host | ${descriptor.label.replace(/^[^A-Za-z]+/, '')} |`);
234
+ if (fluent)
235
+ out.push(`| UI library | ${fluent.label}${fluent.range ? ` \`${fluent.range}\`` : ''} |`);
236
+ out.push(`| Data-access seam | ${(descriptor.sharedModules ?? []).includes('dataverse-seam') ? 'shared `dataverse-seam`' : 'artifact-local'} |`);
237
+ out.push('');
238
+ out.push('---');
239
+ out.push('');
240
+ out.push('## How this solution is put together');
241
+ out.push('');
242
+ out.push('> **Not written yet.** Describe the moving parts and what talks to what. The table above');
243
+ out.push('> is the scaffold\'s doing, not a design.');
244
+ out.push('');
245
+ return out.join('\n');
246
+ }
247
+ function codebaseGuideDoc(tree) {
248
+ const out = ['# Codebase Guide', ''];
249
+ out.push('The directories this project actually has, read from the scaffold:');
250
+ out.push('');
251
+ out.push('```');
252
+ for (const d of tree.dirs)
253
+ out.push(d + '/');
254
+ out.push('```');
255
+ out.push('');
256
+ out.push('★ This list was generated by walking the project, so it is true at scaffold time and');
257
+ out.push('will drift as you add directories. Regenerate or edit it — do not trust it blindly once');
258
+ out.push('the project has grown.');
259
+ out.push('');
260
+ return out.join('\n');
261
+ }
262
+ function dataAccessDoc(tree) {
263
+ const out = ['# Data Access', ''];
264
+ if (!tree.servicesDir) {
265
+ out.push('This project has no services directory. If you add data access, put it behind one');
266
+ out.push('interface rather than calling a platform API from a component.');
267
+ out.push('');
268
+ return out.join('\n');
269
+ }
270
+ out.push(`Data access lives in \`${tree.servicesDir}/\`. **Read it — this document deliberately`);
271
+ out.push('does not restate what the code shows.**');
272
+ out.push('');
273
+ if (tree.mockPaths.length) {
274
+ out.push('★ This project already ships a mock:');
275
+ out.push('');
276
+ for (const m of tree.mockPaths)
277
+ out.push(`- \`${m}\``);
278
+ out.push('');
279
+ out.push('Keep it working. It is what lets this project run and be tested without a live org,');
280
+ out.push('and a service added without a mock path quietly removes that.');
281
+ }
282
+ else {
283
+ out.push('★ No mock was found anywhere in this project. If you add data access, add a mock path');
284
+ out.push('with it — that is what lets this project run and be tested without a live org.');
285
+ }
286
+ out.push('');
287
+ return out.join('\n');
288
+ }
289
+ /**
290
+ * The per-feature doc FORM, emitted for the `full` tier only.
291
+ *
292
+ * ★★★ A FORM, NOT AN EMPTY DIRECTORY. At scaffold time a project has **zero** features, so there is
293
+ * no honest feature doc to write. An empty `docs/features/` would be the worst version of the
294
+ * placeholder hazard — a directory that reads as "documented" with nothing in it at all. A file
295
+ * that is visibly a form establishes the convention without pretending anything exists, and the
296
+ * leading underscore both sorts it first and marks it as not-a-feature.
297
+ *
298
+ * ★★ NOT the same thing as `.claude-workflows/templates/feature-tracking.md` in this repo, and the
299
+ * difference is audience, not duplication. That one tracks a feature through ITS OWN development —
300
+ * status, priority, sprint, worktree paths, git commands — inside the ui-kit. This one is read by
301
+ * whoever changes a GENERATED project months later and needs to know what a feature is and where it
302
+ * lives. Saying so here so the next reader who finds two "feature templates" does not assume one is
303
+ * a stale copy.
304
+ *
305
+ * ★ Deliberately short. The editorial rule that governs every file in this module is "only what the
306
+ * scaffold cannot teach" — a 300-line form in a fresh project is the opposite of that, and long
307
+ * forms get abandoned half-filled, which is worse than a short one filled in.
308
+ */
309
+ function featureTemplateDoc() {
310
+ return [
311
+ '# <Feature name>',
312
+ '',
313
+ '> **This is the template, not a feature.** Copy it to `docs/features/<feature>.md`, delete',
314
+ '> this line, and fill it in. Keep it short — a long one gets abandoned half-written, and a',
315
+ '> half-written doc is read as a description of a half-built feature.',
316
+ '',
317
+ 'One sentence: what this feature lets someone do.',
318
+ '',
319
+ '## Why it exists',
320
+ '',
321
+ 'The problem in the user\'s terms, not the implementation\'s. If you cannot state the problem',
322
+ 'without naming a file, the feature is not understood yet.',
323
+ '',
324
+ '## Where it lives',
325
+ '',
326
+ '| Part | Path |',
327
+ '|------|------|',
328
+ '| Entry point | |',
329
+ '| Main logic | |',
330
+ '| Tests | |',
331
+ '',
332
+ '## Data it touches',
333
+ '',
334
+ 'What it reads, what it writes, and through which service. ★ If it writes, say what happens on',
335
+ 'a partial failure — that is the question nobody can answer from the code six months later.',
336
+ '',
337
+ '## Rules it enforces, and where',
338
+ '',
339
+ '★★ **Name the enforcement point, not just the rule.** A rule enforced only in a component is a',
340
+ 'rule that does not exist for the API, for an import, or for the next surface this data reaches.',
341
+ 'If the answer is "the UI", that is worth writing down precisely because it is a gap.',
342
+ '',
343
+ '## How to tell it still works',
344
+ '',
345
+ 'The check someone can actually run — a command, a test name, a thing to click. Not "it works".',
346
+ '',
347
+ '## Deliberately not included',
348
+ '',
349
+ 'What was left out on purpose, and what would make you revisit it. Without this, the next person',
350
+ 'either rebuilds it or assumes it was forgotten.',
351
+ '',
352
+ ].join('\n');
353
+ }
354
+ function componentCatalogDoc() {
355
+ return [
356
+ '# Component Catalog',
357
+ '',
358
+ 'Before writing a UI component, search the practice catalog — it holds several hundred',
359
+ 'reusable components, and the point of it is that you do not write a second one.',
360
+ '',
361
+ '1. `search_components` — find candidates by what you need, not by name.',
362
+ '2. `get_component` — read the full prop contract before using one.',
363
+ '',
364
+ '★ Prefer extending an existing component over adding a near-duplicate. A near-duplicate is not',
365
+ 'free: it is a second thing to fix, and the two drift.',
366
+ '',
367
+ '★ Not every catalogued component can be used by a generated project — only those whose package',
368
+ 'has a vendor path. `get_component` reports this; check it before designing around one.',
369
+ '',
370
+ ].join('\n');
371
+ }
372
+ /**
373
+ * Which `docs/` documents each tier emits.
374
+ *
375
+ * ★★ `micro` gets NONE, and that is the tier's whole point: a `pcf-field` control has no domain
376
+ * model, and shipping it an empty one would be noise that trains the reader to skip the directory.
377
+ * ★ The numbering is stable across tiers — `standard` emits 00/01/04/05 and `full` fills in 02/03/06
378
+ * — so a document keeps its number wherever it appears and a reader moving between two projects is
379
+ * not re-learning the layout.
380
+ */
381
+ const TIER_DOCS = {
382
+ micro: [],
383
+ standard: ['00-ARCHITECTURE', '01-CODEBASE-GUIDE', '04-DATA-ACCESS', '05-COMPONENT-CATALOG'],
384
+ full: [
385
+ '00-ARCHITECTURE',
386
+ '01-CODEBASE-GUIDE',
387
+ '02-DOMAIN-MODEL',
388
+ '03-BUSINESS-RULES',
389
+ '04-DATA-ACCESS',
390
+ '05-COMPONENT-CATALOG',
391
+ '06-ARCHITECTURE-DECISIONS',
392
+ ],
393
+ };
394
+ /** The documents a tier emits, exported so tests and callers agree on one source. */
395
+ export function docsForTier(tier) {
396
+ return TIER_DOCS[tier];
397
+ }
398
+ function renderDoc(id, descriptor, fluent, tree) {
399
+ switch (id) {
400
+ case '00-ARCHITECTURE':
401
+ return architectureDoc(descriptor, fluent);
402
+ case '01-CODEBASE-GUIDE':
403
+ return codebaseGuideDoc(tree);
404
+ case '02-DOMAIN-MODEL':
405
+ return stub('Domain Model', 'the entities this solution reasons about, their meaning to the business, and how they relate — not the Dataverse schema, which the platform already holds.');
406
+ case '03-BUSINESS-RULES':
407
+ return stub('Business Rules', 'the rules that must hold regardless of which surface the data arrives through, and where each one is enforced.');
408
+ case '04-DATA-ACCESS':
409
+ return dataAccessDoc(tree);
410
+ case '05-COMPONENT-CATALOG':
411
+ return componentCatalogDoc();
412
+ case '06-ARCHITECTURE-DECISIONS':
413
+ return stub('Architecture Decisions', 'one entry per significant choice: what was decided, what else was considered, and what would make you revisit it. A decision with no recorded reason gets re-litigated.');
414
+ default:
415
+ throw new Error(`no renderer for context document "${id}"`);
416
+ }
417
+ }
418
+ /**
419
+ * Plan the context files for an artifact.
420
+ *
421
+ * ★ Takes a `ProjectTree` rather than reading disk itself, so the decision stays unit-testable
422
+ * separately from the writing — the same split as `planDevTools` / `planSharedModules`.
423
+ */
424
+ export function planProjectContext(projectName, descriptor, library, tree = { dirs: [], mockPaths: [] }) {
425
+ const fluent = resolveFluent(descriptor, library);
426
+ const files = [
427
+ { to: 'CLAUDE.md', content: renderClaudeMd(projectName, descriptor, library) },
428
+ ];
429
+ for (const id of docsForTier(descriptor.docsTier)) {
430
+ files.push({ to: `docs/${id}.md`, content: renderDoc(id, descriptor, fluent, tree) });
431
+ }
432
+ // ★ `full` only — see the tier table. A `standard` artifact gets the numbered docs but not the
433
+ // per-feature convention, because the convention only pays for itself where features accumulate.
434
+ if (descriptor.docsTier === 'full') {
435
+ files.push({ to: 'docs/features/_TEMPLATE.md', content: featureTemplateDoc() });
436
+ }
437
+ return { tier: descriptor.docsTier, files };
438
+ }
439
+ /** Write the planned context files into a scaffolded project. */
440
+ export async function injectProjectContext(projectPath, projectName, descriptor, library) {
441
+ // ★ Read the project AFTER the template has been copied — that is the only moment the real
442
+ // layout exists, and it is what `01-CODEBASE-GUIDE` and `04-DATA-ACCESS` are derived from.
443
+ const plan = planProjectContext(projectName, descriptor, library, readProjectTree(projectPath));
444
+ for (const f of plan.files) {
445
+ const dest = path.join(projectPath, f.to);
446
+ await fs.ensureDir(path.dirname(dest));
447
+ await fs.writeFile(dest, f.content, 'utf-8');
448
+ }
449
+ }
450
+ //# sourceMappingURL=injectProjectContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectProjectContext.js","sourceRoot":"","sources":["../src/injectProjectContext.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"injectSharedModules.d.ts","sourceRoot":"","sources":["../src/injectSharedModules.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAiC3D,UAAU,WAAW;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,WAAW,CAAC;IACjB,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,yEAAyE;IACzE,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,qEAAqE;AACrE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,gBAAgB,CA4BjG;AAED,mEAAmE;AACnE,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,cAAc,EAAE,GAAG,SAAS,GACtC,OAAO,CAAC,IAAI,CAAC,CAkBf"}
1
+ {"version":3,"file":"injectSharedModules.d.ts","sourceRoot":"","sources":["../src/injectSharedModules.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAmC3D,UAAU,WAAW;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,WAAW,CAAC;IACjB,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,yEAAyE;IACzE,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,qEAAqE;AACrE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,gBAAgB,CA4BjG;AAED,mEAAmE;AACnE,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,cAAc,EAAE,GAAG,SAAS,GACtC,OAAO,CAAC,IAAI,CAAC,CAkBf"}
@@ -25,10 +25,12 @@ const DATAVERSE_SEAM_FILES = [
25
25
  ];
26
26
  const SHARED_MODULES = {
27
27
  'dataverse-seam': {
28
- // The seam's only runtime dep (logger + withCrudLog). Pinned to the current
29
- // fixed publish (0.1.4 was a broken/empty publish, now npm-deprecated);
30
- // pickHigherRange dedupes against templates that already bake it.
31
- dependencies: { '@khester/reusable-components': '0.1.5' },
28
+ // The seam's only runtime dep (logger + withCrudLog). Pinned exactly and kept
29
+ // current: 0.1.8 carries the StageIndicator keyboard focus ring plus four
30
+ // Callout/ProgressStage lifecycle fixes. (History: 0.1.4 was a broken/empty
31
+ // publish and is npm-deprecated.) pickHigherRange dedupes against templates
32
+ // that already bake it.
33
+ dependencies: { '@khester/reusable-components': '0.1.8' },
32
34
  files: DATAVERSE_SEAM_FILES.map((f) => ({
33
35
  from: `dataverse-seam/${f}`,
34
36
  to: `src/core/services/${f}`,
@@ -1 +1 @@
1
- {"version":3,"file":"injectSharedModules.js","sourceRoot":"","sources":["../src/injectSharedModules.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"injectSharedModules.js","sourceRoot":"","sources":["../src/injectSharedModules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ /** A file the vendor step will write into the project. */
2
+ export interface VendoredFile {
3
+ path: string;
4
+ content: string;
5
+ }
6
+ interface PackageJson {
7
+ dependencies?: Record<string, string>;
8
+ devDependencies?: Record<string, string>;
9
+ [key: string]: unknown;
10
+ }
11
+ /**
12
+ * Which vendor bundle provides a given bare specifier, and where that specifier's entry point
13
+ * lands inside the project.
14
+ *
15
+ * ★★ This mapping is NOT one-to-one, and assuming it is produces wrong rewrite targets. MEASURED
16
+ * from the vendor scripts' own `sources:` tables and from the emitted file maps:
17
+ *
18
+ * grid-kit vendor → grid-kit + dynamics-cell-renderers + dynamics-utils (3 specifiers)
19
+ * surface-kit vendor → surface-kit + design-tokens
20
+ * reusable-components vendor → reusable-components + design-tokens
21
+ * api-service vendor → api-service (root is src/lib/dataverse/core)
22
+ *
23
+ * So `@dataverse-kit/design-tokens` is carried by TWO bundles at two different sub-paths, and
24
+ * cell-renderers/utils ride inside grid-kit's tree rather than having roots of their own.
25
+ */
26
+ type BundleId = 'grid-kit' | 'surface-kit' | 'reusable-components' | 'api-service' | 'design-tokens';
27
+ /**
28
+ * Specifiers we deliberately DO NOT vendor. Stated here so the absence is a decision on the record
29
+ * rather than something a reader has to notice.
30
+ *
31
+ * @dataverse-kit/pcf-dev-harness devDependency, consumed only from vite.config.ts and the dev/
32
+ * tree that pcf-scripts excludes from the control bundle. It
33
+ * never reaches a client runtime.
34
+ * @dataverse-kit/portal-api-service RUNTIME value import in power-pages-island's App.tsx, bundled
35
+ * into the shipped island — but NO vendor path exists for it.
36
+ * power-pages-island is therefore NOT client-clean yet.
37
+ * @dataverse-kit/grid-kit/v9 deliberately install-from-npm; EXCLUDE_NON_RUNTIME_V8 strips
38
+ * /v9/ from every vendor. Matches --from-design, which has the
39
+ * same single exception.
40
+ * @khester/dataverse-codegen devDependency, and not imported by project SOURCE at all —
41
+ * tools/metadata-sync/index.js shells out to its CLI. Nothing
42
+ * to vendor; vendoring a CLI would be a category error.
43
+ *
44
+ * ★ This list is DOCUMENTATION, not the mechanism. The mechanism is `SPECIFIERS`: anything absent
45
+ * from that map is left alone automatically. Listing them here is so a reader can tell "decided
46
+ * against" from "nobody thought about it" — but do not add an entry here expecting it to change
47
+ * behaviour.
48
+ */
49
+ export declare const NOT_VENDORED: readonly ["@dataverse-kit/pcf-dev-harness", "@dataverse-kit/portal-api-service", "@dataverse-kit/grid-kit/v9", "@khester/dataverse-codegen"];
50
+ export interface VendorPlan {
51
+ pkg: PackageJson;
52
+ filesToWrite: VendoredFile[];
53
+ /** Project-relative source files whose imports changed, with their new content. */
54
+ rewritten: VendoredFile[];
55
+ removedDeps: string[];
56
+ bundles: BundleId[];
57
+ }
58
+ /**
59
+ * Pure. `sourceFiles` are the project's own files (project-relative paths + content) as they exist
60
+ * after template copy, variant selection and every dep injection.
61
+ */
62
+ export declare function planVendoredSource(pkg: PackageJson, sourceFiles: VendoredFile[], opts: {
63
+ enabled: boolean;
64
+ }): VendorPlan;
65
+ /** Impure: write the vendored trees, apply the rewrites, and drop the deps. */
66
+ export declare function injectVendoredSource(projectPath: string, opts: {
67
+ enabled: boolean;
68
+ }): Promise<VendorPlan>;
69
+ export {};
70
+ //# sourceMappingURL=injectVendoredSource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectVendoredSource.d.ts","sourceRoot":"","sources":["../src/injectVendoredSource.ts"],"names":[],"mappings":"AA8BA,0DAA0D;AAC1D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,WAAW;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;;;;GAcG;AACH,KAAK,QAAQ,GAAG,UAAU,GAAG,aAAa,GAAG,qBAAqB,GAAG,aAAa,GAAG,eAAe,CAAC;AA6BrG;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,YAAY,8IAKf,CAAC;AAaX,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,WAAW,CAAC;IACjB,YAAY,EAAE,YAAY,EAAE,CAAC;IAC7B,mFAAmF;IACnF,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,QAAQ,EAAE,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,WAAW,EAChB,WAAW,EAAE,YAAY,EAAE,EAC3B,IAAI,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GACzB,UAAU,CAmDZ;AAwBD,+EAA+E;AAC/E,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GACzB,OAAO,CAAC,UAAU,CAAC,CAiBrB"}