@react-spa-scaffold/mcp 1.2.0 → 2.0.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/README.md +36 -123
- package/dist/constants.d.ts +35 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +35 -0
- package/dist/constants.js.map +1 -0
- package/dist/features/definitions/api.d.ts.map +1 -1
- package/dist/features/definitions/api.js +0 -1
- package/dist/features/definitions/api.js.map +1 -1
- package/dist/features/definitions/ci.d.ts.map +1 -1
- package/dist/features/definitions/ci.js +0 -1
- package/dist/features/definitions/ci.js.map +1 -1
- package/dist/features/definitions/core.d.ts.map +1 -1
- package/dist/features/definitions/core.js +0 -1
- package/dist/features/definitions/core.js.map +1 -1
- package/dist/features/definitions/devtools.d.ts.map +1 -1
- package/dist/features/definitions/devtools.js +0 -1
- package/dist/features/definitions/devtools.js.map +1 -1
- package/dist/features/definitions/forms.d.ts.map +1 -1
- package/dist/features/definitions/forms.js +0 -1
- package/dist/features/definitions/forms.js.map +1 -1
- package/dist/features/definitions/i18n.d.ts.map +1 -1
- package/dist/features/definitions/i18n.js +0 -1
- package/dist/features/definitions/i18n.js.map +1 -1
- package/dist/features/definitions/mobile.d.ts.map +1 -1
- package/dist/features/definitions/mobile.js +0 -1
- package/dist/features/definitions/mobile.js.map +1 -1
- package/dist/features/definitions/observability.d.ts.map +1 -1
- package/dist/features/definitions/observability.js +0 -1
- package/dist/features/definitions/observability.js.map +1 -1
- package/dist/features/definitions/performance.d.ts.map +1 -1
- package/dist/features/definitions/performance.js +0 -1
- package/dist/features/definitions/performance.js.map +1 -1
- package/dist/features/definitions/routing.d.ts.map +1 -1
- package/dist/features/definitions/routing.js +0 -1
- package/dist/features/definitions/routing.js.map +1 -1
- package/dist/features/definitions/state.d.ts.map +1 -1
- package/dist/features/definitions/state.js +0 -1
- package/dist/features/definitions/state.js.map +1 -1
- package/dist/features/definitions/testing.d.ts.map +1 -1
- package/dist/features/definitions/testing.js +0 -3
- package/dist/features/definitions/testing.js.map +1 -1
- package/dist/features/definitions/theming.js +2 -2
- package/dist/features/definitions/theming.js.map +1 -1
- package/dist/features/definitions/ui.d.ts.map +1 -1
- package/dist/features/definitions/ui.js +0 -1
- package/dist/features/definitions/ui.js.map +1 -1
- package/dist/features/types.d.ts +14 -20
- package/dist/features/types.d.ts.map +1 -1
- package/dist/features/types.js +4 -21
- package/dist/features/types.js.map +1 -1
- package/dist/features/types.test.d.ts +5 -0
- package/dist/features/types.test.d.ts.map +1 -0
- package/dist/features/types.test.js +32 -0
- package/dist/features/types.test.js.map +1 -0
- package/dist/resources/docs.d.ts +2 -8
- package/dist/resources/docs.d.ts.map +1 -1
- package/dist/resources/docs.js +27 -49
- package/dist/resources/docs.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +9 -8
- package/dist/server.js.map +1 -1
- package/dist/tools/get-features.d.ts +15 -9
- package/dist/tools/get-features.d.ts.map +1 -1
- package/dist/tools/get-features.js +12 -0
- package/dist/tools/get-features.js.map +1 -1
- package/dist/tools/get-file.d.ts +23 -0
- package/dist/tools/get-file.d.ts.map +1 -0
- package/dist/tools/get-file.js +57 -0
- package/dist/tools/get-file.js.map +1 -0
- package/dist/tools/get-file.test.d.ts +5 -0
- package/dist/tools/get-file.test.d.ts.map +1 -0
- package/dist/tools/get-file.test.js +63 -0
- package/dist/tools/get-file.test.js.map +1 -0
- package/dist/tools/get-scaffold.d.ts +11 -33
- package/dist/tools/get-scaffold.d.ts.map +1 -1
- package/dist/tools/get-scaffold.js +31 -44
- package/dist/tools/get-scaffold.js.map +1 -1
- package/dist/tools/get-scaffold.test.js +29 -22
- package/dist/tools/get-scaffold.test.js.map +1 -1
- package/dist/tools/index.d.ts +2 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +1 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/registry.d.ts +4 -0
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +26 -16
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/types.d.ts +24 -6
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js +3 -0
- package/dist/tools/types.js.map +1 -1
- package/dist/utils/cache.d.ts +9 -5
- package/dist/utils/cache.d.ts.map +1 -1
- package/dist/utils/cache.js +21 -5
- package/dist/utils/cache.js.map +1 -1
- package/dist/utils/docs.d.ts +1 -3
- package/dist/utils/docs.d.ts.map +1 -1
- package/dist/utils/docs.js +3 -8
- package/dist/utils/docs.js.map +1 -1
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +0 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/paths.d.ts +9 -0
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +19 -1
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/paths.test.js +22 -1
- package/dist/utils/paths.test.js.map +1 -1
- package/dist/utils/scaffold/claude-md/index.d.ts +7 -0
- package/dist/utils/scaffold/claude-md/index.d.ts.map +1 -0
- package/dist/utils/scaffold/claude-md/index.js +23 -0
- package/dist/utils/scaffold/claude-md/index.js.map +1 -0
- package/dist/utils/scaffold/claude-md/sections.d.ts +16 -0
- package/dist/utils/scaffold/claude-md/sections.d.ts.map +1 -0
- package/dist/utils/scaffold/claude-md/sections.js +269 -0
- package/dist/utils/scaffold/claude-md/sections.js.map +1 -0
- package/dist/utils/scaffold/commands.d.ts +2 -6
- package/dist/utils/scaffold/commands.d.ts.map +1 -1
- package/dist/utils/scaffold/commands.js +9 -12
- package/dist/utils/scaffold/commands.js.map +1 -1
- package/dist/utils/scaffold/compute.d.ts +5 -8
- package/dist/utils/scaffold/compute.d.ts.map +1 -1
- package/dist/utils/scaffold/compute.js +26 -41
- package/dist/utils/scaffold/compute.js.map +1 -1
- package/dist/utils/scaffold/dependencies.d.ts +10 -17
- package/dist/utils/scaffold/dependencies.d.ts.map +1 -1
- package/dist/utils/scaffold/dependencies.js +28 -34
- package/dist/utils/scaffold/dependencies.js.map +1 -1
- package/dist/utils/scaffold/generators.d.ts +3 -11
- package/dist/utils/scaffold/generators.d.ts.map +1 -1
- package/dist/utils/scaffold/generators.js +20 -288
- package/dist/utils/scaffold/generators.js.map +1 -1
- package/dist/utils/scaffold/index.d.ts +2 -3
- package/dist/utils/scaffold/index.d.ts.map +1 -1
- package/dist/utils/scaffold/index.js +1 -3
- package/dist/utils/scaffold/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/tools/get-example.d.ts +0 -49
- package/dist/tools/get-example.d.ts.map +0 -1
- package/dist/tools/get-example.js +0 -91
- package/dist/tools/get-example.js.map +0 -1
- package/dist/tools/get-example.test.d.ts +0 -5
- package/dist/tools/get-example.test.d.ts.map +0 -1
- package/dist/tools/get-example.test.js +0 -63
- package/dist/tools/get-example.test.js.map +0 -1
- package/dist/utils/examples/api-patterns.d.ts +0 -3
- package/dist/utils/examples/api-patterns.d.ts.map +0 -1
- package/dist/utils/examples/api-patterns.js +0 -19
- package/dist/utils/examples/api-patterns.js.map +0 -1
- package/dist/utils/examples/component-patterns.d.ts +0 -3
- package/dist/utils/examples/component-patterns.d.ts.map +0 -1
- package/dist/utils/examples/component-patterns.js +0 -71
- package/dist/utils/examples/component-patterns.js.map +0 -1
- package/dist/utils/examples/context-patterns.d.ts +0 -3
- package/dist/utils/examples/context-patterns.d.ts.map +0 -1
- package/dist/utils/examples/context-patterns.js +0 -32
- package/dist/utils/examples/context-patterns.js.map +0 -1
- package/dist/utils/examples/hook-patterns.d.ts +0 -3
- package/dist/utils/examples/hook-patterns.d.ts.map +0 -1
- package/dist/utils/examples/hook-patterns.js +0 -55
- package/dist/utils/examples/hook-patterns.js.map +0 -1
- package/dist/utils/examples/i18n-patterns.d.ts +0 -3
- package/dist/utils/examples/i18n-patterns.d.ts.map +0 -1
- package/dist/utils/examples/i18n-patterns.js +0 -43
- package/dist/utils/examples/i18n-patterns.js.map +0 -1
- package/dist/utils/examples/index.d.ts +0 -12
- package/dist/utils/examples/index.d.ts.map +0 -1
- package/dist/utils/examples/index.js +0 -69
- package/dist/utils/examples/index.js.map +0 -1
- package/dist/utils/examples/mobile-patterns.d.ts +0 -3
- package/dist/utils/examples/mobile-patterns.d.ts.map +0 -1
- package/dist/utils/examples/mobile-patterns.js +0 -38
- package/dist/utils/examples/mobile-patterns.js.map +0 -1
- package/dist/utils/examples/page-patterns.d.ts +0 -3
- package/dist/utils/examples/page-patterns.d.ts.map +0 -1
- package/dist/utils/examples/page-patterns.js +0 -34
- package/dist/utils/examples/page-patterns.js.map +0 -1
- package/dist/utils/examples/store-patterns.d.ts +0 -3
- package/dist/utils/examples/store-patterns.d.ts.map +0 -1
- package/dist/utils/examples/store-patterns.js +0 -40
- package/dist/utils/examples/store-patterns.js.map +0 -1
- package/dist/utils/examples/test-patterns.d.ts +0 -3
- package/dist/utils/examples/test-patterns.d.ts.map +0 -1
- package/dist/utils/examples/test-patterns.js +0 -58
- package/dist/utils/examples/test-patterns.js.map +0 -1
- package/dist/utils/examples/types.d.ts +0 -17
- package/dist/utils/examples/types.d.ts.map +0 -1
- package/dist/utils/examples/types.js +0 -2
- package/dist/utils/examples/types.js.map +0 -1
- package/dist/utils/examples/utility-patterns.d.ts +0 -3
- package/dist/utils/examples/utility-patterns.d.ts.map +0 -1
- package/dist/utils/examples/utility-patterns.js +0 -77
- package/dist/utils/examples/utility-patterns.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../src/utils/scaffold/commands.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../src/utils/scaffold/commands.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAGrD,0DAA0D;AAC1D,MAAM,UAAU,gBAAgB,CAAC,UAAuB;IACtD,MAAM,QAAQ,GAAa,CAAC,aAAa,CAAC,CAAC;IAE3C,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,QAAQ,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,QAAQ,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -1,18 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Scaffold computation orchestrator
|
|
2
|
+
* Scaffold computation orchestrator - coordinates all components.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Returns paths only for configFiles and docs (lazy loading).
|
|
5
|
+
* Use get_file tool to fetch actual content.
|
|
5
6
|
*/
|
|
6
7
|
import type { ScaffoldResult } from '../../features/types.js';
|
|
7
8
|
/**
|
|
8
9
|
* Computes complete scaffold for selected features.
|
|
9
10
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* const scaffold = await computeScaffold(['routing', 'ui'], 'my-app');
|
|
15
|
-
* // Returns: { packageJson, structure, configFiles, claudeMd, ... }
|
|
11
|
+
* Returns paths only for configFiles and docs (lazy loading).
|
|
12
|
+
* Use get_file tool to fetch actual content when needed.
|
|
16
13
|
*/
|
|
17
14
|
export declare function computeScaffold(selectedFeatures: string[], projectName?: string): Promise<ScaffoldResult>;
|
|
18
15
|
//# sourceMappingURL=compute.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compute.d.ts","sourceRoot":"","sources":["../../../src/utils/scaffold/compute.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"compute.d.ts","sourceRoot":"","sources":["../../../src/utils/scaffold/compute.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAe9D;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,gBAAgB,EAAE,MAAM,EAAE,EAC1B,WAAW,GAAE,MAAiB,GAC7B,OAAO,CAAC,cAAc,CAAC,CA2CzB"}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Scaffold computation orchestrator
|
|
2
|
+
* Scaffold computation orchestrator - coordinates all components.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Returns paths only for configFiles and docs (lazy loading).
|
|
5
|
+
* Use get_file tool to fetch actual content.
|
|
5
6
|
*/
|
|
6
7
|
import { readFile } from 'fs/promises';
|
|
7
|
-
import {
|
|
8
|
+
import { FEATURE } from '../../constants.js';
|
|
9
|
+
import { computeDocsForFeatures } from '../docs.js';
|
|
8
10
|
import { resolveTemplatePath } from '../paths.js';
|
|
9
11
|
import { resolveFeatureDependencies, mergeDependencies, mergeScripts } from './dependencies.js';
|
|
10
|
-
import { computeFileStructure, getConfigFiles
|
|
12
|
+
import { computeFileStructure, getConfigFiles } from './file-structure.js';
|
|
11
13
|
import { getSetupCommands } from './commands.js';
|
|
12
14
|
import { generateClaudeMd, generateViteEnvDts, generateEnvTs, generateRoutesTs } from './generators.js';
|
|
13
15
|
async function readSourcePackageJson() {
|
|
@@ -18,53 +20,36 @@ async function readSourcePackageJson() {
|
|
|
18
20
|
/**
|
|
19
21
|
* Computes complete scaffold for selected features.
|
|
20
22
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* @example
|
|
25
|
-
* const scaffold = await computeScaffold(['routing', 'ui'], 'my-app');
|
|
26
|
-
* // Returns: { packageJson, structure, configFiles, claudeMd, ... }
|
|
23
|
+
* Returns paths only for configFiles and docs (lazy loading).
|
|
24
|
+
* Use get_file tool to fetch actual content when needed.
|
|
27
25
|
*/
|
|
28
26
|
export async function computeScaffold(selectedFeatures, projectName = 'my-app') {
|
|
29
|
-
// Resolve all dependencies
|
|
27
|
+
// Resolve all dependencies (sync)
|
|
30
28
|
const resolvedFeatures = resolveFeatureDependencies(selectedFeatures);
|
|
31
|
-
//
|
|
32
|
-
const sourcePackageJson = await
|
|
29
|
+
// Parallel async operations: package.json and dependencies
|
|
30
|
+
const [sourcePackageJson, depsResult] = await Promise.all([
|
|
31
|
+
readSourcePackageJson(),
|
|
32
|
+
mergeDependencies(resolvedFeatures),
|
|
33
|
+
]);
|
|
33
34
|
const engines = sourcePackageJson.engines || {};
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const scripts = mergeScripts(resolvedFeatures);
|
|
38
|
-
// Get file structure (add CLAUDE.md which is generated, not from patterns)
|
|
39
|
-
// Also add docs based on selected features
|
|
40
|
-
const docPaths = computeDocsForFeatures(resolvedFeatures);
|
|
41
|
-
const structure = [...computeFileStructure(resolvedFeatures), 'CLAUDE.md', ...docPaths];
|
|
42
|
-
// Get config files with actual content read from templates
|
|
43
|
-
const configFiles = {};
|
|
44
|
-
const configPaths = getConfigFiles(resolvedFeatures);
|
|
45
|
-
for (const config of configPaths) {
|
|
46
|
-
configFiles[config] = await readConfigFileContent(config);
|
|
35
|
+
const { dependencies, devDependencies, warnings } = depsResult;
|
|
36
|
+
if (warnings.length > 0) {
|
|
37
|
+
console.error('[MCP] Dependency warnings:', warnings.join('; '));
|
|
47
38
|
}
|
|
48
|
-
//
|
|
39
|
+
// Sync operations
|
|
40
|
+
const scripts = mergeScripts(resolvedFeatures);
|
|
41
|
+
const docs = computeDocsForFeatures(resolvedFeatures);
|
|
42
|
+
const structure = computeFileStructure(resolvedFeatures); // Source files only (no CLAUDE.md, no docs)
|
|
49
43
|
const setupCommands = getSetupCommands(resolvedFeatures);
|
|
50
|
-
//
|
|
44
|
+
// Config files: paths only (lazy loading)
|
|
45
|
+
const configFiles = getConfigFiles(resolvedFeatures);
|
|
46
|
+
// Generate content (sync)
|
|
51
47
|
const claudeMd = generateClaudeMd(resolvedFeatures, projectName, scripts);
|
|
52
|
-
// Generate vite-env.d.ts content
|
|
53
48
|
const viteEnvDts = generateViteEnvDts(resolvedFeatures);
|
|
54
|
-
// Generate env.ts content
|
|
55
49
|
const envTs = generateEnvTs(resolvedFeatures);
|
|
56
|
-
|
|
57
|
-
const routesTs = resolvedFeatures.includes('routing') ? generateRoutesTs() : undefined;
|
|
58
|
-
// Get docs with content filtered by features
|
|
59
|
-
const docs = await computeDocsContent(resolvedFeatures);
|
|
50
|
+
const routesTs = resolvedFeatures.includes(FEATURE.ROUTING) ? generateRoutesTs() : undefined;
|
|
60
51
|
return {
|
|
61
|
-
packageJson: {
|
|
62
|
-
name: projectName,
|
|
63
|
-
dependencies,
|
|
64
|
-
devDependencies,
|
|
65
|
-
scripts,
|
|
66
|
-
engines,
|
|
67
|
-
},
|
|
52
|
+
packageJson: { name: projectName, dependencies, devDependencies, scripts, engines },
|
|
68
53
|
structure,
|
|
69
54
|
configFiles,
|
|
70
55
|
setupCommands,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compute.js","sourceRoot":"","sources":["../../../src/utils/scaffold/compute.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"compute.js","sourceRoot":"","sources":["../../../src/utils/scaffold/compute.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAChG,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExG,KAAK,UAAU,qBAAqB;IAClC,MAAM,IAAI,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,gBAA0B,EAC1B,cAAsB,QAAQ;IAE9B,kCAAkC;IAClC,MAAM,gBAAgB,GAAG,0BAA0B,CAAC,gBAAgB,CAAC,CAAC;IAEtE,2DAA2D;IAC3D,MAAM,CAAC,iBAAiB,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACxD,qBAAqB,EAAE;QACvB,iBAAiB,CAAC,gBAAgB,CAAC;KACpC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAI,iBAAiB,CAAC,OAAkC,IAAI,EAAE,CAAC;IAC5E,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC;IAE/D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,kBAAkB;IAClB,MAAM,OAAO,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,oBAAoB,CAAC,gBAAgB,CAAC,CAAC,CAAC,4CAA4C;IACtG,MAAM,aAAa,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAEzD,0CAA0C;IAC1C,MAAM,WAAW,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAErD,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,gBAAgB,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1E,MAAM,UAAU,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAE7F,OAAO;QACL,WAAW,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE;QACnF,SAAS;QACT,WAAW;QACX,aAAa;QACb,QAAQ;QACR,UAAU;QACV,KAAK;QACL,QAAQ;QACR,IAAI;KACL,CAAC;AACJ,CAAC"}
|
|
@@ -1,30 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Dependency resolution
|
|
3
|
-
*
|
|
4
|
-
* Handles merging dependencies from features and resolving versions
|
|
5
|
-
* from the source package.json at runtime.
|
|
2
|
+
* Dependency resolution - merges features and resolves versions from package.json.
|
|
6
3
|
*/
|
|
7
4
|
import type { FeatureId } from '../../features/types.js';
|
|
8
5
|
/**
|
|
9
6
|
* Resolves feature dependencies and auto-includes required features.
|
|
10
|
-
*
|
|
11
|
-
* - Core is always included
|
|
12
|
-
* - Theming auto-includes state (for Zustand persistence)
|
|
13
|
-
*
|
|
14
|
-
* @param selectedFeatures - Array of feature IDs selected by user
|
|
15
|
-
* @returns Array of resolved FeatureIds including auto-included dependencies
|
|
7
|
+
* Core is always included. Dependencies declared via `requires` field are resolved recursively.
|
|
16
8
|
*/
|
|
17
9
|
export declare function resolveFeatureDependencies(selectedFeatures: string[]): FeatureId[];
|
|
10
|
+
/** Result of merging dependencies with any warnings. */
|
|
11
|
+
export interface MergeDependenciesResult {
|
|
12
|
+
dependencies: Record<string, string>;
|
|
13
|
+
devDependencies: Record<string, string>;
|
|
14
|
+
warnings: string[];
|
|
15
|
+
}
|
|
18
16
|
/**
|
|
19
17
|
* Merges dependencies from multiple features.
|
|
20
|
-
*
|
|
21
|
-
* Resolves package versions from the source package.json at runtime.
|
|
22
|
-
* This ensures scaffolded projects always use up-to-date dependency versions.
|
|
18
|
+
* Returns structured warnings instead of logging to console.
|
|
23
19
|
*/
|
|
24
|
-
export declare function mergeDependencies(featureIds: FeatureId[]): Promise<
|
|
25
|
-
dependencies: Record<string, string>;
|
|
26
|
-
devDependencies: Record<string, string>;
|
|
27
|
-
}>;
|
|
20
|
+
export declare function mergeDependencies(featureIds: FeatureId[]): Promise<MergeDependenciesResult>;
|
|
28
21
|
/**
|
|
29
22
|
* Merge scripts from multiple features
|
|
30
23
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../../src/utils/scaffold/dependencies.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../../src/utils/scaffold/dependencies.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAwBzD;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,gBAAgB,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CA2BlF;AAED,wDAAwD;AACxD,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAuCjG;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAW5E"}
|
|
@@ -1,75 +1,69 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Dependency resolution
|
|
3
|
-
*
|
|
4
|
-
* Handles merging dependencies from features and resolving versions
|
|
5
|
-
* from the source package.json at runtime.
|
|
2
|
+
* Dependency resolution - merges features and resolves versions from package.json.
|
|
6
3
|
*/
|
|
7
4
|
import { readFile } from 'fs/promises';
|
|
8
5
|
import { FEATURES, isFeatureId } from '../../features/index.js';
|
|
6
|
+
import { createSingletonCache } from '../cache.js';
|
|
9
7
|
import { resolveTemplatePath } from '../paths.js';
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Read and cache the source package.json dependencies
|
|
14
|
-
*/
|
|
8
|
+
const sourceDepsCache = createSingletonCache();
|
|
9
|
+
/** Read and cache the source package.json dependencies. */
|
|
15
10
|
async function getSourceDependencies() {
|
|
16
|
-
|
|
11
|
+
return sourceDepsCache.getOrSet(async () => {
|
|
17
12
|
const path = resolveTemplatePath('package.json');
|
|
18
13
|
const content = await readFile(path, 'utf-8');
|
|
19
14
|
const pkg = JSON.parse(content);
|
|
20
|
-
|
|
15
|
+
return {
|
|
21
16
|
dependencies: (pkg.dependencies || {}),
|
|
22
17
|
devDependencies: (pkg.devDependencies || {}),
|
|
23
18
|
};
|
|
24
|
-
}
|
|
25
|
-
return cachedSourcePackageJson;
|
|
19
|
+
});
|
|
26
20
|
}
|
|
27
21
|
/**
|
|
28
22
|
* Resolves feature dependencies and auto-includes required features.
|
|
29
|
-
*
|
|
30
|
-
* - Core is always included
|
|
31
|
-
* - Theming auto-includes state (for Zustand persistence)
|
|
32
|
-
*
|
|
33
|
-
* @param selectedFeatures - Array of feature IDs selected by user
|
|
34
|
-
* @returns Array of resolved FeatureIds including auto-included dependencies
|
|
23
|
+
* Core is always included. Dependencies declared via `requires` field are resolved recursively.
|
|
35
24
|
*/
|
|
36
25
|
export function resolveFeatureDependencies(selectedFeatures) {
|
|
37
26
|
const resolved = new Set();
|
|
38
|
-
|
|
27
|
+
function addWithDeps(featureId) {
|
|
28
|
+
if (resolved.has(featureId))
|
|
29
|
+
return;
|
|
30
|
+
resolved.add(featureId);
|
|
31
|
+
// Recursively add dependencies declared in `requires`
|
|
32
|
+
const feature = FEATURES[featureId];
|
|
33
|
+
if (feature.requires) {
|
|
34
|
+
for (const dep of feature.requires) {
|
|
35
|
+
addWithDeps(dep);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Always include core first
|
|
39
40
|
resolved.add('core');
|
|
40
|
-
// Add
|
|
41
|
+
// Add selected features with their dependencies
|
|
41
42
|
for (const featureId of selectedFeatures) {
|
|
42
43
|
if (isFeatureId(featureId)) {
|
|
43
|
-
|
|
44
|
+
addWithDeps(featureId);
|
|
44
45
|
}
|
|
45
46
|
}
|
|
46
|
-
// Theming requires state feature for Zustand persistence
|
|
47
|
-
if (resolved.has('theming') && !resolved.has('state')) {
|
|
48
|
-
resolved.add('state');
|
|
49
|
-
}
|
|
50
47
|
return Array.from(resolved);
|
|
51
48
|
}
|
|
52
49
|
/**
|
|
53
50
|
* Merges dependencies from multiple features.
|
|
54
|
-
*
|
|
55
|
-
* Resolves package versions from the source package.json at runtime.
|
|
56
|
-
* This ensures scaffolded projects always use up-to-date dependency versions.
|
|
51
|
+
* Returns structured warnings instead of logging to console.
|
|
57
52
|
*/
|
|
58
53
|
export async function mergeDependencies(featureIds) {
|
|
59
54
|
const dependencies = {};
|
|
60
55
|
const devDependencies = {};
|
|
61
|
-
|
|
56
|
+
const warnings = [];
|
|
62
57
|
const sourcePkg = await getSourceDependencies();
|
|
63
58
|
for (const featureId of featureIds) {
|
|
64
59
|
const feature = FEATURES[featureId];
|
|
65
|
-
// Look up dependency versions from source package.json
|
|
66
60
|
if (feature.dependencyNames) {
|
|
67
61
|
for (const name of feature.dependencyNames) {
|
|
68
62
|
if (sourcePkg.dependencies[name]) {
|
|
69
63
|
dependencies[name] = sourcePkg.dependencies[name];
|
|
70
64
|
}
|
|
71
65
|
else {
|
|
72
|
-
|
|
66
|
+
warnings.push(`Dependency "${name}" not found in source package.json (feature: ${featureId})`);
|
|
73
67
|
}
|
|
74
68
|
}
|
|
75
69
|
}
|
|
@@ -79,16 +73,16 @@ export async function mergeDependencies(featureIds) {
|
|
|
79
73
|
devDependencies[name] = sourcePkg.devDependencies[name];
|
|
80
74
|
}
|
|
81
75
|
else {
|
|
82
|
-
|
|
76
|
+
warnings.push(`DevDependency "${name}" not found in source package.json (feature: ${featureId})`);
|
|
83
77
|
}
|
|
84
78
|
}
|
|
85
79
|
}
|
|
86
80
|
}
|
|
87
|
-
// Sort alphabetically
|
|
88
81
|
const sortObject = (obj) => Object.fromEntries(Object.entries(obj).sort(([a], [b]) => a.localeCompare(b)));
|
|
89
82
|
return {
|
|
90
83
|
dependencies: sortObject(dependencies),
|
|
91
84
|
devDependencies: sortObject(devDependencies),
|
|
85
|
+
warnings,
|
|
92
86
|
};
|
|
93
87
|
}
|
|
94
88
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../../src/utils/scaffold/dependencies.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../../src/utils/scaffold/dependencies.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Content generators for CLAUDE.md, env.ts, routes.ts, etc.
|
|
3
|
-
*/
|
|
4
1
|
import type { FeatureId } from '../../features/types.js';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Generate vite-env.d.ts content based on selected features
|
|
9
|
-
*/
|
|
2
|
+
export { generateClaudeMd } from './claude-md/index.js';
|
|
3
|
+
/** Generate vite-env.d.ts content based on selected features. */
|
|
10
4
|
export declare function generateViteEnvDts(featureIds: FeatureId[]): string;
|
|
11
|
-
/**
|
|
12
|
-
* Generate env.ts content based on selected features
|
|
13
|
-
*/
|
|
5
|
+
/** Generate env.ts content based on selected features. */
|
|
14
6
|
export declare function generateEnvTs(featureIds: FeatureId[]): string;
|
|
15
7
|
/** Generates routes.ts content. */
|
|
16
8
|
export declare function generateRoutesTs(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generators.d.ts","sourceRoot":"","sources":["../../../src/utils/scaffold/generators.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generators.d.ts","sourceRoot":"","sources":["../../../src/utils/scaffold/generators.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,iEAAiE;AACjE,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,CAgClE;AAED,0DAA0D;AAC1D,wBAAgB,aAAa,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,CAwE7D;AAED,mCAAmC;AACnC,wBAAgB,gBAAgB,IAAI,MAAM,CAazC"}
|