@xanahlight/component-forge 1.4.0 → 1.5.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/commands/check/index.d.ts +15 -0
- package/dist/commands/check/index.js +73 -4
- package/dist/commands/check/index.js.map +1 -1
- package/dist/index.js +54 -2
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/commands/check/check.test.d.ts +0 -1
- package/dist/commands/check/check.test.js +0 -151
- package/dist/commands/check/check.test.js.map +0 -1
- package/dist/commands/explain/explain.test.d.ts +0 -1
- package/dist/commands/explain/explain.test.js +0 -57
- package/dist/commands/explain/explain.test.js.map +0 -1
- package/dist/commands/generate.d.ts +0 -6
- package/dist/commands/generate.js +0 -91
- package/dist/commands/generate.js.map +0 -1
- package/dist/commands/init.d.ts +0 -10
- package/dist/commands/init.js +0 -54
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/migrate/migrate.test.d.ts +0 -1
- package/dist/commands/migrate/migrate.test.js +0 -176
- package/dist/commands/migrate/migrate.test.js.map +0 -1
- package/dist/commands/validate/validate.test.d.ts +0 -1
- package/dist/commands/validate/validate.test.js +0 -163
- package/dist/commands/validate/validate.test.js.map +0 -1
- package/dist/commands/validate.d.ts +0 -1
- package/dist/commands/validate.js +0 -119
- package/dist/commands/validate.js.map +0 -1
- package/dist/templates/files.test.d.ts +0 -1
- package/dist/templates/files.test.js +0 -174
- package/dist/templates/files.test.js.map +0 -1
- package/dist/utils/config.test.d.ts +0 -1
- package/dist/utils/config.test.js +0 -117
- package/dist/utils/config.test.js.map +0 -1
- package/dist/utils/template-resolver.test.d.ts +0 -1
- package/dist/utils/template-resolver.test.js +0 -86
- package/dist/utils/template-resolver.test.js.map +0 -1
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.generateCommand = generateCommand;
|
|
7
|
-
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
8
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
-
const config_1 = require("../utils/config");
|
|
10
|
-
const logger_1 = require("../utils/logger");
|
|
11
|
-
const template_resolver_1 = require("../utils/template-resolver");
|
|
12
|
-
const placementByArchitecture = {
|
|
13
|
-
fsd: {
|
|
14
|
-
feature: 'features',
|
|
15
|
-
entity: 'entities',
|
|
16
|
-
widget: 'widgets',
|
|
17
|
-
page: 'pages',
|
|
18
|
-
component: 'shared/ui',
|
|
19
|
-
},
|
|
20
|
-
modular: {
|
|
21
|
-
module: 'modules',
|
|
22
|
-
component: 'shared/ui',
|
|
23
|
-
},
|
|
24
|
-
};
|
|
25
|
-
// ---------------------------------------------------------------------------
|
|
26
|
-
// Path resolution
|
|
27
|
-
// ---------------------------------------------------------------------------
|
|
28
|
-
/**
|
|
29
|
-
* Resolves the absolute path for the slice being generated.
|
|
30
|
-
* Supports nested names like "forms/Input" → src/shared/ui/forms/Input
|
|
31
|
-
*/
|
|
32
|
-
function resolveSlicePath(config, sliceType, sliceName) {
|
|
33
|
-
const placement = placementByArchitecture[config.architecture][sliceType];
|
|
34
|
-
if (!placement) {
|
|
35
|
-
const available = Object.keys(placementByArchitecture[config.architecture]).join(', ');
|
|
36
|
-
logger_1.logger.error(`Slice type "${sliceType}" is not supported for ${config.architecture} architecture.`);
|
|
37
|
-
logger_1.logger.info(`Available types for ${config.architecture}: ${available}`);
|
|
38
|
-
process.exit(1);
|
|
39
|
-
}
|
|
40
|
-
return node_path_1.default.join(process.cwd(), config.srcDir, placement, sliceName);
|
|
41
|
-
}
|
|
42
|
-
// ---------------------------------------------------------------------------
|
|
43
|
-
// File I/O
|
|
44
|
-
// ---------------------------------------------------------------------------
|
|
45
|
-
function writeFile(filePath, content) {
|
|
46
|
-
fs_extra_1.default.ensureDirSync(node_path_1.default.dirname(filePath));
|
|
47
|
-
fs_extra_1.default.writeFileSync(filePath, content);
|
|
48
|
-
logger_1.logger.success(`Created: ${node_path_1.default.relative(process.cwd(), filePath)}`);
|
|
49
|
-
}
|
|
50
|
-
function printDryRun(filePath) {
|
|
51
|
-
logger_1.logger.info(`Would create: ${node_path_1.default.relative(process.cwd(), filePath)}`);
|
|
52
|
-
}
|
|
53
|
-
function generateCommand(sliceType, sliceName, options = {}) {
|
|
54
|
-
const { dryRun = false } = options;
|
|
55
|
-
const config = (0, config_1.loadProjectConfig)();
|
|
56
|
-
const slicePath = resolveSlicePath(config, sliceType, sliceName);
|
|
57
|
-
if (!dryRun && fs_extra_1.default.existsSync(slicePath)) {
|
|
58
|
-
logger_1.logger.error(`Already exists: ${node_path_1.default.relative(process.cwd(), slicePath)}`);
|
|
59
|
-
process.exit(1);
|
|
60
|
-
}
|
|
61
|
-
// Resolve templates directory (absolute path) if configured
|
|
62
|
-
const templatesDir = config.templates
|
|
63
|
-
? node_path_1.default.resolve(process.cwd(), config.templates)
|
|
64
|
-
: undefined;
|
|
65
|
-
// Derive the bare name for use in templates (e.g. "forms/Input" → "Input")
|
|
66
|
-
const sliceBaseName = node_path_1.default.basename(sliceName);
|
|
67
|
-
const files = (0, template_resolver_1.resolveSliceFiles)(sliceType, sliceBaseName, templatesDir);
|
|
68
|
-
if (dryRun) {
|
|
69
|
-
logger_1.logger.info(`Dry run — no files will be written.\n`);
|
|
70
|
-
printDryRun(slicePath + '/');
|
|
71
|
-
for (const relativePath of Object.keys(files)) {
|
|
72
|
-
printDryRun(node_path_1.default.join(slicePath, relativePath));
|
|
73
|
-
}
|
|
74
|
-
logger_1.logger.info(`\nDry run complete. Run without --dry-run to generate.`);
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
// Create slice root
|
|
78
|
-
fs_extra_1.default.ensureDirSync(slicePath);
|
|
79
|
-
logger_1.logger.success(`Created: ${node_path_1.default.relative(process.cwd(), slicePath)}`);
|
|
80
|
-
// Write files from templates
|
|
81
|
-
for (const [relativePath, content] of Object.entries(files)) {
|
|
82
|
-
writeFile(node_path_1.default.join(slicePath, relativePath), content);
|
|
83
|
-
}
|
|
84
|
-
if (templatesDir) {
|
|
85
|
-
logger_1.logger.info(`Generated ${sliceType} "${sliceName}" successfully (custom templates).`);
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
logger_1.logger.info(`Generated ${sliceType} "${sliceName}" successfully.`);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
//# sourceMappingURL=generate.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { Architecture } from '../types/folder-tree';
|
|
2
|
-
import { CONFIG_FILENAME, loadProjectConfig } from '../utils/config';
|
|
3
|
-
export { Architecture };
|
|
4
|
-
export { CONFIG_FILENAME };
|
|
5
|
-
/**
|
|
6
|
-
* Initialises the project folder structure for the given architecture
|
|
7
|
-
* and writes .component-forge.json so subsequent commands know the architecture.
|
|
8
|
-
*/
|
|
9
|
-
export declare function initCommand(architecture: Architecture): void;
|
|
10
|
-
export { loadProjectConfig };
|
package/dist/commands/init.js
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.loadProjectConfig = exports.CONFIG_FILENAME = void 0;
|
|
7
|
-
exports.initCommand = initCommand;
|
|
8
|
-
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
9
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
-
const fsd_1 = require("../templates/fsd");
|
|
11
|
-
const modular_1 = require("../templates/modular");
|
|
12
|
-
const config_1 = require("../utils/config");
|
|
13
|
-
Object.defineProperty(exports, "CONFIG_FILENAME", { enumerable: true, get: function () { return config_1.CONFIG_FILENAME; } });
|
|
14
|
-
Object.defineProperty(exports, "loadProjectConfig", { enumerable: true, get: function () { return config_1.loadProjectConfig; } });
|
|
15
|
-
const logger_1 = require("../utils/logger");
|
|
16
|
-
/**
|
|
17
|
-
* Template registry — maps architecture → folder tree definition
|
|
18
|
-
*/
|
|
19
|
-
const templates = {
|
|
20
|
-
fsd: fsd_1.fsdTemplate,
|
|
21
|
-
modular: modular_1.modularTemplate,
|
|
22
|
-
};
|
|
23
|
-
/**
|
|
24
|
-
* Recursively creates folder structure from a FolderTree definition
|
|
25
|
-
*/
|
|
26
|
-
function createStructure(tree, basePath) {
|
|
27
|
-
for (const [folderName, children] of Object.entries(tree)) {
|
|
28
|
-
const folderPath = node_path_1.default.join(basePath, folderName);
|
|
29
|
-
fs_extra_1.default.ensureDirSync(folderPath);
|
|
30
|
-
logger_1.logger.success(`Created: ${node_path_1.default.relative(process.cwd(), folderPath)}`);
|
|
31
|
-
createStructure(children, folderPath);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Initialises the project folder structure for the given architecture
|
|
36
|
-
* and writes .component-forge.json so subsequent commands know the architecture.
|
|
37
|
-
*/
|
|
38
|
-
function initCommand(architecture) {
|
|
39
|
-
const template = templates[architecture];
|
|
40
|
-
const projectRoot = process.cwd();
|
|
41
|
-
const configPath = node_path_1.default.join(projectRoot, config_1.CONFIG_FILENAME);
|
|
42
|
-
if (fs_extra_1.default.existsSync(configPath)) {
|
|
43
|
-
logger_1.logger.error(`Project already initialised (${config_1.CONFIG_FILENAME} exists).`);
|
|
44
|
-
logger_1.logger.info('Remove it manually if you want to reinitialise.');
|
|
45
|
-
process.exit(1);
|
|
46
|
-
}
|
|
47
|
-
logger_1.logger.info(`Initialising ${architecture.toUpperCase()} architecture…`);
|
|
48
|
-
createStructure(template, projectRoot);
|
|
49
|
-
const config = { architecture, srcDir: 'src' };
|
|
50
|
-
(0, config_1.writeProjectConfig)(config, projectRoot);
|
|
51
|
-
logger_1.logger.success(`Created: ${config_1.CONFIG_FILENAME}`);
|
|
52
|
-
logger_1.logger.success('Project structure successfully created.');
|
|
53
|
-
}
|
|
54
|
-
//# sourceMappingURL=init.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";;;;;;AAyCA,kCAoBC;AA7DD,wDAAyB;AACzB,0DAA4B;AAE5B,0CAA8C;AAC9C,kDAAsD;AAEtD,4CAAwF;AAO/E,gGAPA,wBAAe,OAOA;AAmDf,kGA1DiB,0BAAiB,OA0DjB;AAzD1B,4CAAwC;AAQxC;;GAEG;AACH,MAAM,SAAS,GAAqC;IAClD,GAAG,EAAE,iBAAW;IAChB,OAAO,EAAE,yBAAe;CACzB,CAAA;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,IAAgB,EAAE,QAAgB;IACzD,KAAK,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1D,MAAM,UAAU,GAAG,mBAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;QAElD,kBAAE,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;QAC5B,eAAM,CAAC,OAAO,CAAC,YAAY,mBAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,EAAE,CAAC,CAAA;QAEtE,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;IACvC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,WAAW,CAAC,YAA0B;IACpD,MAAM,QAAQ,GAAG,SAAS,CAAC,YAAY,CAAC,CAAA;IACxC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IACjC,MAAM,UAAU,GAAG,mBAAI,CAAC,IAAI,CAAC,WAAW,EAAE,wBAAe,CAAC,CAAA;IAE1D,IAAI,kBAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,eAAM,CAAC,KAAK,CAAC,gCAAgC,wBAAe,WAAW,CAAC,CAAA;QACxE,eAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAA;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,eAAM,CAAC,IAAI,CAAC,gBAAgB,YAAY,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAA;IAEvE,eAAe,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;IAEtC,MAAM,MAAM,GAAkB,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;IAC7D,IAAA,2BAAkB,EAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACvC,eAAM,CAAC,OAAO,CAAC,YAAY,wBAAe,EAAE,CAAC,CAAA;IAE7C,eAAM,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAA;AAC3D,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const node_os_1 = __importDefault(require("node:os"));
|
|
7
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
8
|
-
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
9
|
-
const vitest_1 = require("vitest");
|
|
10
|
-
const index_1 = require("./index");
|
|
11
|
-
// ---------------------------------------------------------------------------
|
|
12
|
-
// Helpers
|
|
13
|
-
// ---------------------------------------------------------------------------
|
|
14
|
-
let tmpDir;
|
|
15
|
-
function mkdir(relPath) {
|
|
16
|
-
fs_extra_1.default.ensureDirSync(node_path_1.default.join(tmpDir, relPath));
|
|
17
|
-
}
|
|
18
|
-
(0, vitest_1.beforeEach)(() => {
|
|
19
|
-
tmpDir = fs_extra_1.default.mkdtempSync(node_path_1.default.join(node_os_1.default.tmpdir(), 'cf-migrate-'));
|
|
20
|
-
});
|
|
21
|
-
(0, vitest_1.afterEach)(() => {
|
|
22
|
-
fs_extra_1.default.removeSync(tmpDir);
|
|
23
|
-
});
|
|
24
|
-
// ---------------------------------------------------------------------------
|
|
25
|
-
// scanTopLevelDirs
|
|
26
|
-
// ---------------------------------------------------------------------------
|
|
27
|
-
(0, vitest_1.describe)('scanTopLevelDirs', () => {
|
|
28
|
-
(0, vitest_1.it)('returns only directory names, not files', () => {
|
|
29
|
-
mkdir('components');
|
|
30
|
-
mkdir('utils');
|
|
31
|
-
fs_extra_1.default.writeFileSync(node_path_1.default.join(tmpDir, 'index.ts'), '');
|
|
32
|
-
const dirs = (0, index_1.scanTopLevelDirs)(tmpDir);
|
|
33
|
-
(0, vitest_1.expect)(dirs).toContain('components');
|
|
34
|
-
(0, vitest_1.expect)(dirs).toContain('utils');
|
|
35
|
-
(0, vitest_1.expect)(dirs).not.toContain('index.ts');
|
|
36
|
-
});
|
|
37
|
-
(0, vitest_1.it)('returns empty array for non-existent path', () => {
|
|
38
|
-
(0, vitest_1.expect)((0, index_1.scanTopLevelDirs)('/non/existent/path')).toEqual([]);
|
|
39
|
-
});
|
|
40
|
-
(0, vitest_1.it)('returns empty array for empty directory', () => {
|
|
41
|
-
(0, vitest_1.expect)((0, index_1.scanTopLevelDirs)(tmpDir)).toEqual([]);
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
// ---------------------------------------------------------------------------
|
|
45
|
-
// classifyDir
|
|
46
|
-
// ---------------------------------------------------------------------------
|
|
47
|
-
(0, vitest_1.describe)('classifyDir', () => {
|
|
48
|
-
(0, vitest_1.it)('classifies "components" as shared/ui', () => {
|
|
49
|
-
const result = (0, index_1.classifyDir)('components');
|
|
50
|
-
(0, vitest_1.expect)(result).not.toBeNull();
|
|
51
|
-
(0, vitest_1.expect)(result.layer).toBe('shared');
|
|
52
|
-
(0, vitest_1.expect)(result.subdir).toBe('ui');
|
|
53
|
-
});
|
|
54
|
-
(0, vitest_1.it)('classifies "utils" as shared', () => {
|
|
55
|
-
const result = (0, index_1.classifyDir)('utils');
|
|
56
|
-
(0, vitest_1.expect)(result).not.toBeNull();
|
|
57
|
-
(0, vitest_1.expect)(result.layer).toBe('shared');
|
|
58
|
-
});
|
|
59
|
-
(0, vitest_1.it)('classifies "pages" as pages', () => {
|
|
60
|
-
const result = (0, index_1.classifyDir)('pages');
|
|
61
|
-
(0, vitest_1.expect)(result).not.toBeNull();
|
|
62
|
-
(0, vitest_1.expect)(result.layer).toBe('pages');
|
|
63
|
-
});
|
|
64
|
-
(0, vitest_1.it)('classifies "views" as pages', () => {
|
|
65
|
-
const result = (0, index_1.classifyDir)('views');
|
|
66
|
-
(0, vitest_1.expect)(result).not.toBeNull();
|
|
67
|
-
(0, vitest_1.expect)(result.layer).toBe('pages');
|
|
68
|
-
});
|
|
69
|
-
(0, vitest_1.it)('classifies "store" as app', () => {
|
|
70
|
-
const result = (0, index_1.classifyDir)('store');
|
|
71
|
-
(0, vitest_1.expect)(result).not.toBeNull();
|
|
72
|
-
(0, vitest_1.expect)(result.layer).toBe('app');
|
|
73
|
-
});
|
|
74
|
-
(0, vitest_1.it)('classifies "api" as shared/api', () => {
|
|
75
|
-
const result = (0, index_1.classifyDir)('api');
|
|
76
|
-
(0, vitest_1.expect)(result).not.toBeNull();
|
|
77
|
-
(0, vitest_1.expect)(result.layer).toBe('shared');
|
|
78
|
-
(0, vitest_1.expect)(result.subdir).toBe('api');
|
|
79
|
-
});
|
|
80
|
-
(0, vitest_1.it)('classifies "hooks" as shared/hooks', () => {
|
|
81
|
-
const result = (0, index_1.classifyDir)('hooks');
|
|
82
|
-
(0, vitest_1.expect)(result).not.toBeNull();
|
|
83
|
-
(0, vitest_1.expect)(result.layer).toBe('shared');
|
|
84
|
-
(0, vitest_1.expect)(result.subdir).toBe('hooks');
|
|
85
|
-
});
|
|
86
|
-
(0, vitest_1.it)('returns null for unrecognised directory', () => {
|
|
87
|
-
(0, vitest_1.expect)((0, index_1.classifyDir)('my-weird-custom-dir')).toBeNull();
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
// ---------------------------------------------------------------------------
|
|
91
|
-
// buildMigrationPlan — FSD target
|
|
92
|
-
// ---------------------------------------------------------------------------
|
|
93
|
-
(0, vitest_1.describe)('buildMigrationPlan → fsd', () => {
|
|
94
|
-
(0, vitest_1.it)('proposes moves for standard React project structure', () => {
|
|
95
|
-
mkdir('components');
|
|
96
|
-
mkdir('pages');
|
|
97
|
-
mkdir('utils');
|
|
98
|
-
mkdir('api');
|
|
99
|
-
mkdir('hooks');
|
|
100
|
-
const plan = (0, index_1.buildMigrationPlan)(tmpDir, 'fsd');
|
|
101
|
-
// pages is already an FSD layer — should be skipped
|
|
102
|
-
const froms = plan.proposals.map((p) => p.from);
|
|
103
|
-
(0, vitest_1.expect)(froms).not.toContain('pages');
|
|
104
|
-
// components, utils, api, hooks should get proposals
|
|
105
|
-
(0, vitest_1.expect)(froms).toContain('components');
|
|
106
|
-
(0, vitest_1.expect)(froms).toContain('utils');
|
|
107
|
-
(0, vitest_1.expect)(froms).toContain('api');
|
|
108
|
-
(0, vitest_1.expect)(froms).toContain('hooks');
|
|
109
|
-
});
|
|
110
|
-
(0, vitest_1.it)('skips directories already in correct FSD layers', () => {
|
|
111
|
-
mkdir('features');
|
|
112
|
-
mkdir('entities');
|
|
113
|
-
mkdir('shared');
|
|
114
|
-
mkdir('widgets');
|
|
115
|
-
mkdir('pages');
|
|
116
|
-
mkdir('app');
|
|
117
|
-
const plan = (0, index_1.buildMigrationPlan)(tmpDir, 'fsd');
|
|
118
|
-
(0, vitest_1.expect)(plan.proposals).toHaveLength(0);
|
|
119
|
-
});
|
|
120
|
-
(0, vitest_1.it)('puts unrecognised dirs in unknownFiles', () => {
|
|
121
|
-
mkdir('super-weird-module');
|
|
122
|
-
const plan = (0, index_1.buildMigrationPlan)(tmpDir, 'fsd');
|
|
123
|
-
(0, vitest_1.expect)(plan.unknownFiles).toContain('super-weird-module');
|
|
124
|
-
(0, vitest_1.expect)(plan.proposals).toHaveLength(0);
|
|
125
|
-
});
|
|
126
|
-
(0, vitest_1.it)('proposal has correct from/to/reason shape', () => {
|
|
127
|
-
mkdir('components');
|
|
128
|
-
const plan = (0, index_1.buildMigrationPlan)(tmpDir, 'fsd');
|
|
129
|
-
const proposal = plan.proposals.find((p) => p.from === 'components');
|
|
130
|
-
(0, vitest_1.expect)(proposal).toBeDefined();
|
|
131
|
-
(0, vitest_1.expect)(proposal.to).toContain('shared');
|
|
132
|
-
(0, vitest_1.expect)(proposal.to).toContain('ui');
|
|
133
|
-
(0, vitest_1.expect)(proposal.reason).toContain('shared');
|
|
134
|
-
});
|
|
135
|
-
(0, vitest_1.it)('summary reflects proposal count', () => {
|
|
136
|
-
mkdir('components');
|
|
137
|
-
mkdir('utils');
|
|
138
|
-
const plan = (0, index_1.buildMigrationPlan)(tmpDir, 'fsd');
|
|
139
|
-
(0, vitest_1.expect)(plan.summary).toMatch(/\d+ director/);
|
|
140
|
-
});
|
|
141
|
-
(0, vitest_1.it)('summary says no changes when already FSD', () => {
|
|
142
|
-
mkdir('features');
|
|
143
|
-
mkdir('shared');
|
|
144
|
-
const plan = (0, index_1.buildMigrationPlan)(tmpDir, 'fsd');
|
|
145
|
-
(0, vitest_1.expect)(plan.summary).toContain('No changes needed');
|
|
146
|
-
});
|
|
147
|
-
});
|
|
148
|
-
// ---------------------------------------------------------------------------
|
|
149
|
-
// buildMigrationPlan — modular target
|
|
150
|
-
// ---------------------------------------------------------------------------
|
|
151
|
-
(0, vitest_1.describe)('buildMigrationPlan → modular', () => {
|
|
152
|
-
(0, vitest_1.it)('wraps unknown dirs as modules/', () => {
|
|
153
|
-
mkdir('auth');
|
|
154
|
-
mkdir('cart');
|
|
155
|
-
const plan = (0, index_1.buildMigrationPlan)(tmpDir, 'modular');
|
|
156
|
-
const froms = plan.proposals.map((p) => p.from);
|
|
157
|
-
(0, vitest_1.expect)(froms).toContain('auth');
|
|
158
|
-
(0, vitest_1.expect)(froms).toContain('cart');
|
|
159
|
-
const authProp = plan.proposals.find((p) => p.from === 'auth');
|
|
160
|
-
(0, vitest_1.expect)(authProp.to).toMatch(/^modules/);
|
|
161
|
-
});
|
|
162
|
-
(0, vitest_1.it)('puts utils-like dirs under shared/', () => {
|
|
163
|
-
mkdir('utils');
|
|
164
|
-
const plan = (0, index_1.buildMigrationPlan)(tmpDir, 'modular');
|
|
165
|
-
const utilsProp = plan.proposals.find((p) => p.from === 'utils');
|
|
166
|
-
(0, vitest_1.expect)(utilsProp.to).toMatch(/^shared/);
|
|
167
|
-
});
|
|
168
|
-
(0, vitest_1.it)('skips already-correct modular dirs', () => {
|
|
169
|
-
mkdir('modules');
|
|
170
|
-
mkdir('shared');
|
|
171
|
-
mkdir('core');
|
|
172
|
-
const plan = (0, index_1.buildMigrationPlan)(tmpDir, 'modular');
|
|
173
|
-
(0, vitest_1.expect)(plan.proposals).toHaveLength(0);
|
|
174
|
-
});
|
|
175
|
-
});
|
|
176
|
-
//# sourceMappingURL=migrate.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.test.js","sourceRoot":"","sources":["../../../src/commands/migrate/migrate.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const node_os_1 = __importDefault(require("node:os"));
|
|
7
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
8
|
-
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
9
|
-
const vitest_1 = require("vitest");
|
|
10
|
-
const index_1 = require("./index");
|
|
11
|
-
// ---------------------------------------------------------------------------
|
|
12
|
-
// Shared layer rule fixtures
|
|
13
|
-
// ---------------------------------------------------------------------------
|
|
14
|
-
const fsdRule = {
|
|
15
|
-
required: ['app', 'shared'],
|
|
16
|
-
allowed: ['app', 'processes', 'pages', 'widgets', 'features', 'entities', 'shared'],
|
|
17
|
-
};
|
|
18
|
-
const modularRule = {
|
|
19
|
-
required: ['shared', 'core'],
|
|
20
|
-
allowed: ['modules', 'shared', 'core'],
|
|
21
|
-
};
|
|
22
|
-
// ---------------------------------------------------------------------------
|
|
23
|
-
// Helpers
|
|
24
|
-
// ---------------------------------------------------------------------------
|
|
25
|
-
function makeTempDir() {
|
|
26
|
-
return fs_extra_1.default.mkdtempSync(node_path_1.default.join(node_os_1.default.tmpdir(), 'cf-validate-test-'));
|
|
27
|
-
}
|
|
28
|
-
function mkdir(base, ...segments) {
|
|
29
|
-
const p = node_path_1.default.join(base, ...segments);
|
|
30
|
-
fs_extra_1.default.ensureDirSync(p);
|
|
31
|
-
return p;
|
|
32
|
-
}
|
|
33
|
-
function touch(base, ...segments) {
|
|
34
|
-
const p = node_path_1.default.join(base, ...segments);
|
|
35
|
-
fs_extra_1.default.ensureDirSync(node_path_1.default.dirname(p));
|
|
36
|
-
fs_extra_1.default.writeFileSync(p, '');
|
|
37
|
-
}
|
|
38
|
-
// ---------------------------------------------------------------------------
|
|
39
|
-
// checkRequiredLayers
|
|
40
|
-
// ---------------------------------------------------------------------------
|
|
41
|
-
(0, vitest_1.describe)('checkRequiredLayers', () => {
|
|
42
|
-
let tmpDir;
|
|
43
|
-
(0, vitest_1.beforeEach)(() => { tmpDir = makeTempDir(); });
|
|
44
|
-
(0, vitest_1.afterEach)(() => { fs_extra_1.default.removeSync(tmpDir); });
|
|
45
|
-
(0, vitest_1.it)('returns no issues when all required layers exist', () => {
|
|
46
|
-
mkdir(tmpDir, 'app');
|
|
47
|
-
mkdir(tmpDir, 'shared');
|
|
48
|
-
const issues = (0, index_1.checkRequiredLayers)(tmpDir, fsdRule, 'src');
|
|
49
|
-
(0, vitest_1.expect)(issues).toHaveLength(0);
|
|
50
|
-
});
|
|
51
|
-
(0, vitest_1.it)('returns an error for each missing required layer', () => {
|
|
52
|
-
// Neither app nor shared exist
|
|
53
|
-
const issues = (0, index_1.checkRequiredLayers)(tmpDir, fsdRule, 'src');
|
|
54
|
-
(0, vitest_1.expect)(issues).toHaveLength(2);
|
|
55
|
-
(0, vitest_1.expect)(issues.every((i) => i.severity === 'error')).toBe(true);
|
|
56
|
-
});
|
|
57
|
-
(0, vitest_1.it)('message contains the missing layer path', () => {
|
|
58
|
-
mkdir(tmpDir, 'app');
|
|
59
|
-
// shared is missing
|
|
60
|
-
const issues = (0, index_1.checkRequiredLayers)(tmpDir, fsdRule, 'src');
|
|
61
|
-
(0, vitest_1.expect)(issues[0].message).toBe('Missing required layer: src/shared');
|
|
62
|
-
});
|
|
63
|
-
(0, vitest_1.it)('works for modular architecture', () => {
|
|
64
|
-
mkdir(tmpDir, 'shared');
|
|
65
|
-
// core is missing
|
|
66
|
-
const issues = (0, index_1.checkRequiredLayers)(tmpDir, modularRule, 'src');
|
|
67
|
-
(0, vitest_1.expect)(issues).toHaveLength(1);
|
|
68
|
-
(0, vitest_1.expect)(issues[0].message).toBe('Missing required layer: src/core');
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
// ---------------------------------------------------------------------------
|
|
72
|
-
// checkUnknownLayers
|
|
73
|
-
// ---------------------------------------------------------------------------
|
|
74
|
-
(0, vitest_1.describe)('checkUnknownLayers', () => {
|
|
75
|
-
let tmpDir;
|
|
76
|
-
(0, vitest_1.beforeEach)(() => { tmpDir = makeTempDir(); });
|
|
77
|
-
(0, vitest_1.afterEach)(() => { fs_extra_1.default.removeSync(tmpDir); });
|
|
78
|
-
(0, vitest_1.it)('returns no issues when all dirs are allowed', () => {
|
|
79
|
-
mkdir(tmpDir, 'app');
|
|
80
|
-
mkdir(tmpDir, 'features');
|
|
81
|
-
mkdir(tmpDir, 'shared');
|
|
82
|
-
const issues = (0, index_1.checkUnknownLayers)(tmpDir, fsdRule, 'fsd', 'src');
|
|
83
|
-
(0, vitest_1.expect)(issues).toHaveLength(0);
|
|
84
|
-
});
|
|
85
|
-
(0, vitest_1.it)('returns a warning for each unknown directory', () => {
|
|
86
|
-
mkdir(tmpDir, 'app');
|
|
87
|
-
mkdir(tmpDir, 'shared');
|
|
88
|
-
mkdir(tmpDir, 'unknown-layer');
|
|
89
|
-
const issues = (0, index_1.checkUnknownLayers)(tmpDir, fsdRule, 'fsd', 'src');
|
|
90
|
-
(0, vitest_1.expect)(issues).toHaveLength(1);
|
|
91
|
-
(0, vitest_1.expect)(issues[0].severity).toBe('warning');
|
|
92
|
-
});
|
|
93
|
-
(0, vitest_1.it)('message contains the dir name and architecture', () => {
|
|
94
|
-
mkdir(tmpDir, 'random');
|
|
95
|
-
const issues = (0, index_1.checkUnknownLayers)(tmpDir, fsdRule, 'fsd', 'src');
|
|
96
|
-
(0, vitest_1.expect)(issues[0].message).toContain('"src/random"');
|
|
97
|
-
(0, vitest_1.expect)(issues[0].message).toContain('FSD');
|
|
98
|
-
});
|
|
99
|
-
(0, vitest_1.it)('ignores files (only checks directories)', () => {
|
|
100
|
-
touch(tmpDir, 'some-file.ts');
|
|
101
|
-
const issues = (0, index_1.checkUnknownLayers)(tmpDir, fsdRule, 'fsd', 'src');
|
|
102
|
-
(0, vitest_1.expect)(issues).toHaveLength(0);
|
|
103
|
-
});
|
|
104
|
-
(0, vitest_1.it)('returns empty array when srcPath does not exist', () => {
|
|
105
|
-
const issues = (0, index_1.checkUnknownLayers)('/non/existent', fsdRule, 'fsd', 'src');
|
|
106
|
-
(0, vitest_1.expect)(issues).toHaveLength(0);
|
|
107
|
-
});
|
|
108
|
-
(0, vitest_1.it)('reports correct architecture name for modular', () => {
|
|
109
|
-
mkdir(tmpDir, 'alien-dir');
|
|
110
|
-
const issues = (0, index_1.checkUnknownLayers)(tmpDir, modularRule, 'modular', 'src');
|
|
111
|
-
(0, vitest_1.expect)(issues[0].message).toContain('MODULAR');
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
// ---------------------------------------------------------------------------
|
|
115
|
-
// checkPublicApiFiles
|
|
116
|
-
// ---------------------------------------------------------------------------
|
|
117
|
-
(0, vitest_1.describe)('checkPublicApiFiles', () => {
|
|
118
|
-
let tmpDir;
|
|
119
|
-
(0, vitest_1.beforeEach)(() => { tmpDir = makeTempDir(); });
|
|
120
|
-
(0, vitest_1.afterEach)(() => { fs_extra_1.default.removeSync(tmpDir); });
|
|
121
|
-
(0, vitest_1.it)('returns no issues when all slices have index.ts', () => {
|
|
122
|
-
touch(tmpDir, 'features', 'auth', 'index.ts');
|
|
123
|
-
touch(tmpDir, 'features', 'profile', 'index.ts');
|
|
124
|
-
const issues = (0, index_1.checkPublicApiFiles)(tmpDir, fsdRule, 'src');
|
|
125
|
-
(0, vitest_1.expect)(issues).toHaveLength(0);
|
|
126
|
-
});
|
|
127
|
-
(0, vitest_1.it)('returns a warning for each slice missing index.ts', () => {
|
|
128
|
-
mkdir(tmpDir, 'features', 'auth'); // no index.ts
|
|
129
|
-
const issues = (0, index_1.checkPublicApiFiles)(tmpDir, fsdRule, 'src');
|
|
130
|
-
(0, vitest_1.expect)(issues).toHaveLength(1);
|
|
131
|
-
(0, vitest_1.expect)(issues[0].severity).toBe('warning');
|
|
132
|
-
(0, vitest_1.expect)(issues[0].message).toBe('Missing public API: src/features/auth/index.ts');
|
|
133
|
-
});
|
|
134
|
-
(0, vitest_1.it)('skips app, shared, and core layers (they are not slice layers)', () => {
|
|
135
|
-
// Even if app/shared have no index.ts, no warning should be produced
|
|
136
|
-
mkdir(tmpDir, 'app', 'some-dir');
|
|
137
|
-
mkdir(tmpDir, 'shared', 'some-dir');
|
|
138
|
-
const issues = (0, index_1.checkPublicApiFiles)(tmpDir, fsdRule, 'src');
|
|
139
|
-
(0, vitest_1.expect)(issues).toHaveLength(0);
|
|
140
|
-
});
|
|
141
|
-
(0, vitest_1.it)('skips layers that do not exist on disk', () => {
|
|
142
|
-
// features dir does not exist — should not throw
|
|
143
|
-
const issues = (0, index_1.checkPublicApiFiles)(tmpDir, fsdRule, 'src');
|
|
144
|
-
(0, vitest_1.expect)(issues).toHaveLength(0);
|
|
145
|
-
});
|
|
146
|
-
(0, vitest_1.it)('detects missing index.ts across multiple slice layers', () => {
|
|
147
|
-
mkdir(tmpDir, 'features', 'auth'); // missing index.ts
|
|
148
|
-
mkdir(tmpDir, 'entities', 'user'); // missing index.ts
|
|
149
|
-
touch(tmpDir, 'pages', 'home', 'index.ts'); // OK
|
|
150
|
-
const issues = (0, index_1.checkPublicApiFiles)(tmpDir, fsdRule, 'src');
|
|
151
|
-
(0, vitest_1.expect)(issues).toHaveLength(2);
|
|
152
|
-
const messages = issues.map((i) => i.message);
|
|
153
|
-
(0, vitest_1.expect)(messages).toContain('Missing public API: src/features/auth/index.ts');
|
|
154
|
-
(0, vitest_1.expect)(messages).toContain('Missing public API: src/entities/user/index.ts');
|
|
155
|
-
});
|
|
156
|
-
(0, vitest_1.it)('works for modular architecture — checks modules layer', () => {
|
|
157
|
-
mkdir(tmpDir, 'modules', 'auth'); // missing index.ts
|
|
158
|
-
const issues = (0, index_1.checkPublicApiFiles)(tmpDir, modularRule, 'src');
|
|
159
|
-
(0, vitest_1.expect)(issues).toHaveLength(1);
|
|
160
|
-
(0, vitest_1.expect)(issues[0].message).toBe('Missing public API: src/modules/auth/index.ts');
|
|
161
|
-
});
|
|
162
|
-
});
|
|
163
|
-
//# sourceMappingURL=validate.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate.test.js","sourceRoot":"","sources":["../../../src/commands/validate/validate.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function validateCommand(): void;
|