archprint 0.4.1 → 0.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.
- package/CHANGELOG.md +71 -0
- package/README.md +74 -51
- package/dist/cli/adoption-readme.d.ts +7 -0
- package/dist/cli/adoption-readme.d.ts.map +1 -0
- package/dist/cli/adoption-readme.js +76 -0
- package/dist/cli/adoption-readme.js.map +1 -0
- package/dist/cli/archprint-config.d.ts +33 -0
- package/dist/cli/archprint-config.d.ts.map +1 -0
- package/dist/cli/archprint-config.js +83 -0
- package/dist/cli/archprint-config.js.map +1 -0
- package/dist/cli/generate.d.ts +44 -37
- package/dist/cli/generate.d.ts.map +1 -1
- package/dist/cli/generate.js +167 -258
- package/dist/cli/generate.js.map +1 -1
- package/dist/cli/ignore-file.d.ts +8 -0
- package/dist/cli/ignore-file.d.ts.map +1 -0
- package/dist/cli/ignore-file.js +37 -0
- package/dist/cli/ignore-file.js.map +1 -0
- package/dist/cli/layout.d.ts +24 -0
- package/dist/cli/layout.d.ts.map +1 -0
- package/dist/cli/layout.js +74 -0
- package/dist/cli/layout.js.map +1 -0
- package/dist/cli/migrate.d.ts +27 -0
- package/dist/cli/migrate.d.ts.map +1 -0
- package/dist/cli/migrate.js +177 -0
- package/dist/cli/migrate.js.map +1 -0
- package/dist/cli/outputs-manifest.d.ts +0 -6
- package/dist/cli/outputs-manifest.d.ts.map +1 -1
- package/dist/cli/outputs-manifest.js +2 -29
- package/dist/cli/outputs-manifest.js.map +1 -1
- package/dist/cli/program.d.ts +1 -0
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +237 -51
- package/dist/cli/program.js.map +1 -1
- package/dist/cli/recommend.d.ts +5 -1
- package/dist/cli/recommend.d.ts.map +1 -1
- package/dist/cli/recommend.js +42 -2
- package/dist/cli/recommend.js.map +1 -1
- package/dist/cli/report.d.ts +4 -2
- package/dist/cli/report.d.ts.map +1 -1
- package/dist/cli/report.js +31 -5
- package/dist/cli/report.js.map +1 -1
- package/dist/cli/wiring.d.ts +2 -13
- package/dist/cli/wiring.d.ts.map +1 -1
- package/dist/cli/wiring.js +63 -110
- package/dist/cli/wiring.js.map +1 -1
- package/dist/detector/family-maturity.d.ts.map +1 -1
- package/dist/detector/family-maturity.js +0 -2
- package/dist/detector/family-maturity.js.map +1 -1
- package/dist/generator/console-isolation-emitters.d.ts +3 -0
- package/dist/generator/console-isolation-emitters.d.ts.map +1 -1
- package/dist/generator/console-isolation-emitters.js +5 -1
- package/dist/generator/console-isolation-emitters.js.map +1 -1
- package/dist/generator/deep-relative-emitters.d.ts +4 -0
- package/dist/generator/deep-relative-emitters.d.ts.map +1 -1
- package/dist/generator/deep-relative-emitters.js +4 -0
- package/dist/generator/deep-relative-emitters.js.map +1 -1
- package/dist/generator/depcruise-exempt.d.ts +5 -0
- package/dist/generator/depcruise-exempt.d.ts.map +1 -0
- package/dist/generator/depcruise-exempt.js +8 -0
- package/dist/generator/depcruise-exempt.js.map +1 -0
- package/dist/generator/dependency-internals-emitters.d.ts +1 -1
- package/dist/generator/dependency-internals-emitters.d.ts.map +1 -1
- package/dist/generator/dependency-internals-emitters.js +5 -2
- package/dist/generator/dependency-internals-emitters.js.map +1 -1
- package/dist/generator/env-access-emitters.d.ts +1 -1
- package/dist/generator/env-access-emitters.d.ts.map +1 -1
- package/dist/generator/env-access-emitters.js +3 -1
- package/dist/generator/env-access-emitters.js.map +1 -1
- package/dist/generator/eslint-preset-emitter.d.ts +4 -1
- package/dist/generator/eslint-preset-emitter.d.ts.map +1 -1
- package/dist/generator/eslint-preset-emitter.js +6 -4
- package/dist/generator/eslint-preset-emitter.js.map +1 -1
- package/dist/generator/eslint-scope.d.ts +10 -0
- package/dist/generator/eslint-scope.d.ts.map +1 -0
- package/dist/generator/eslint-scope.js +37 -0
- package/dist/generator/eslint-scope.js.map +1 -0
- package/dist/generator/phantom-dependency-emitters.d.ts +1 -1
- package/dist/generator/phantom-dependency-emitters.d.ts.map +1 -1
- package/dist/generator/phantom-dependency-emitters.js +4 -1
- package/dist/generator/phantom-dependency-emitters.js.map +1 -1
- package/dist/generator/public-api-emitters.d.ts +1 -1
- package/dist/generator/public-api-emitters.d.ts.map +1 -1
- package/dist/generator/public-api-emitters.js +2 -1
- package/dist/generator/public-api-emitters.js.map +1 -1
- package/dist/generator/test-isolation-emitters.d.ts +3 -1
- package/dist/generator/test-isolation-emitters.d.ts.map +1 -1
- package/dist/generator/test-isolation-emitters.js +26 -2
- package/dist/generator/test-isolation-emitters.js.map +1 -1
- package/dist/generator/workspace-package-emitters.d.ts +1 -1
- package/dist/generator/workspace-package-emitters.d.ts.map +1 -1
- package/dist/generator/workspace-package-emitters.js +2 -0
- package/dist/generator/workspace-package-emitters.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/scanner/enforcers.d.ts +8 -0
- package/dist/scanner/enforcers.d.ts.map +1 -0
- package/dist/scanner/enforcers.js +74 -0
- package/dist/scanner/enforcers.js.map +1 -0
- package/package.json +8 -8
- package/dist/cli/init.d.ts +0 -21
- package/dist/cli/init.d.ts.map +0 -1
- package/dist/cli/init.js +0 -19
- package/dist/cli/init.js.map +0 -1
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { existsSync, rmSync } from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import { ARCHPRINT_DIR, emitLayout } from './generate.js';
|
|
4
|
+
import { buildConfig, readConfig, writeConfig } from './archprint-config.js';
|
|
5
|
+
import { injectAdoptionSection } from './adoption-readme.js';
|
|
6
|
+
import { ensureIgnoreEntry } from './ignore-file.js';
|
|
7
|
+
function cleanPrior(outDir, cwd) {
|
|
8
|
+
const prior = readConfig(outDir);
|
|
9
|
+
if (!prior)
|
|
10
|
+
return [];
|
|
11
|
+
const removed = [];
|
|
12
|
+
for (const relative of prior.managed.files) {
|
|
13
|
+
const target = path.resolve(cwd, relative);
|
|
14
|
+
if (existsSync(target)) {
|
|
15
|
+
rmSync(target, { recursive: true, force: true });
|
|
16
|
+
removed.push(relative);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return removed;
|
|
20
|
+
}
|
|
21
|
+
export function writeLayout(scan, outDir, options) {
|
|
22
|
+
const removed = cleanPrior(outDir, options.cwd);
|
|
23
|
+
const emitted = emitLayout(scan, outDir, {
|
|
24
|
+
structural: options.structural,
|
|
25
|
+
enforcers: options.enforcers,
|
|
26
|
+
only: options.only,
|
|
27
|
+
ruleIds: options.ruleIds,
|
|
28
|
+
expand: options.expand,
|
|
29
|
+
graph: options.graph,
|
|
30
|
+
});
|
|
31
|
+
const files = [emitted.eslint, emitted.depcruise, ...emitted.expanded].filter((file) => file !== null);
|
|
32
|
+
const prior = readConfig(outDir);
|
|
33
|
+
let readme = 'off';
|
|
34
|
+
let readmeCreated = prior?.managed.readmeCreated ?? false;
|
|
35
|
+
if (options.readmeBody !== undefined && files.length > 0) {
|
|
36
|
+
const result = injectAdoptionSection(path.join(options.cwd, 'README.md'), options.readmeBody);
|
|
37
|
+
readme = result.status;
|
|
38
|
+
if (result.status === 'created')
|
|
39
|
+
readmeCreated = true;
|
|
40
|
+
}
|
|
41
|
+
const outRel = path.relative(options.cwd, outDir) || ARCHPRINT_DIR;
|
|
42
|
+
const ignoreEntry = `${outRel.split(path.sep).join('/')}/`;
|
|
43
|
+
let prettierignore = prior?.managed.prettierignore ?? false;
|
|
44
|
+
let prettierignoreCreated = prior?.managed.prettierignoreCreated ?? false;
|
|
45
|
+
let npmignore = prior?.managed.npmignore ?? false;
|
|
46
|
+
const npmignoreCreated = prior?.managed.npmignoreCreated ?? false;
|
|
47
|
+
if (files.length > 0) {
|
|
48
|
+
const prettier = ensureIgnoreEntry(path.join(options.cwd, '.prettierignore'), ignoreEntry);
|
|
49
|
+
if (prettier !== 'skipped')
|
|
50
|
+
prettierignore = true;
|
|
51
|
+
if (prettier === 'created')
|
|
52
|
+
prettierignoreCreated = true;
|
|
53
|
+
const npm = ensureIgnoreEntry(path.join(options.cwd, '.npmignore'), ignoreEntry, {
|
|
54
|
+
create: false,
|
|
55
|
+
});
|
|
56
|
+
if (npm !== 'skipped')
|
|
57
|
+
npmignore = true;
|
|
58
|
+
}
|
|
59
|
+
const managed = {
|
|
60
|
+
files: files.map((file) => path.relative(options.cwd, file)),
|
|
61
|
+
readme: readme !== 'off' && readme !== 'skipped' ? true : (prior?.managed.readme ?? false),
|
|
62
|
+
readmeCreated,
|
|
63
|
+
prettierignore,
|
|
64
|
+
prettierignoreCreated,
|
|
65
|
+
npmignore,
|
|
66
|
+
npmignoreCreated,
|
|
67
|
+
};
|
|
68
|
+
const configPath = writeConfig(outDir, buildConfig(options.recommendations, options.version, {
|
|
69
|
+
app: options.app,
|
|
70
|
+
rulesDir: path.relative(options.cwd, outDir) || ARCHPRINT_DIR,
|
|
71
|
+
}, managed));
|
|
72
|
+
return { files, removed, readme, configPath };
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/cli/layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export declare const LEGACY_DIR = "archprint-rules";
|
|
2
|
+
export declare const LEGACY_CONFIG = "archprint.json";
|
|
3
|
+
interface ConfigEdit {
|
|
4
|
+
path: string;
|
|
5
|
+
content: string;
|
|
6
|
+
}
|
|
7
|
+
export interface MigratePlan {
|
|
8
|
+
legacy: string[];
|
|
9
|
+
appDir: string;
|
|
10
|
+
eslintEdit: ConfigEdit | null;
|
|
11
|
+
depcruiseEdit: ConfigEdit | null;
|
|
12
|
+
abort: string | null;
|
|
13
|
+
}
|
|
14
|
+
export declare function hasLegacyLayout(cwd: string): boolean;
|
|
15
|
+
export declare function planMigration(cwd: string): MigratePlan | null;
|
|
16
|
+
export interface MigrateResult {
|
|
17
|
+
status: 'migrated' | 'nothing' | 'aborted';
|
|
18
|
+
reason?: string;
|
|
19
|
+
written: string[];
|
|
20
|
+
removed: string[];
|
|
21
|
+
edited: string[];
|
|
22
|
+
}
|
|
23
|
+
export declare function runMigration(cwd: string, version: string, options?: {
|
|
24
|
+
dryRun?: boolean;
|
|
25
|
+
}): MigrateResult;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=migrate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/cli/migrate.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,UAAU,oBAAoB,CAAC;AAC5C,eAAO,MAAM,aAAa,mBAAmB,CAAC;AAI9C,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,UAAU,GAAG,IAAI,CAAC;IACjC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAiGD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAY7D;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACjC,aAAa,CA6Cf"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { existsSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import { detectEnforcers } from '../scanner/enforcers.js';
|
|
4
|
+
import { discoverAppDirs } from '../scanner/app-dirs.js';
|
|
5
|
+
import { hasTsConfig, scanRepo } from './scan.js';
|
|
6
|
+
import { buildRecommendations, detectStack } from './recommend.js';
|
|
7
|
+
import { renderAdoptionBody } from './report.js';
|
|
8
|
+
import { writeLayout } from './layout.js';
|
|
9
|
+
import { ARCHPRINT_DIR, DEPCRUISE_FILE, ESLINT_FILE, collectEnforcement } from './generate.js';
|
|
10
|
+
import { CONFIG_FILE } from './archprint-config.js';
|
|
11
|
+
import { MANAGED_START, WIRING_TOOLS, importReference, findEslintConfig, rewriteEslintReference, } from './wiring.js';
|
|
12
|
+
export const LEGACY_DIR = 'archprint-rules';
|
|
13
|
+
export const LEGACY_CONFIG = 'archprint.json';
|
|
14
|
+
const LEGACY_IMPORT = /from (['"`])[^'"`]*(?:archprint-rules|\.archprint\.mjs)[^'"`]*\1/;
|
|
15
|
+
function legacyOut(cwd) {
|
|
16
|
+
const configPath = path.join(cwd, LEGACY_CONFIG);
|
|
17
|
+
if (existsSync(configPath)) {
|
|
18
|
+
try {
|
|
19
|
+
const parsed = JSON.parse(readFileSync(configPath, 'utf8'));
|
|
20
|
+
if (typeof parsed.rulesDir === 'string')
|
|
21
|
+
return path.resolve(cwd, parsed.rulesDir);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
/* fall through to the default legacy dir */
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return path.join(cwd, LEGACY_DIR);
|
|
28
|
+
}
|
|
29
|
+
function legacyArtifacts(cwd) {
|
|
30
|
+
return [path.join(cwd, LEGACY_CONFIG), legacyOut(cwd)].filter((target) => existsSync(target));
|
|
31
|
+
}
|
|
32
|
+
function resolveAppDir(cwd) {
|
|
33
|
+
const configPath = path.join(cwd, LEGACY_CONFIG);
|
|
34
|
+
let input = '.';
|
|
35
|
+
if (existsSync(configPath)) {
|
|
36
|
+
try {
|
|
37
|
+
const parsed = JSON.parse(readFileSync(configPath, 'utf8'));
|
|
38
|
+
if (typeof parsed.app === 'string')
|
|
39
|
+
input = parsed.app;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
/* fall through to discovery */
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const appDir = path.resolve(cwd, input);
|
|
46
|
+
if (hasTsConfig(appDir))
|
|
47
|
+
return appDir;
|
|
48
|
+
const discovered = discoverAppDirs(cwd);
|
|
49
|
+
return discovered[0] ?? appDir;
|
|
50
|
+
}
|
|
51
|
+
function planEslintEdit(cwd) {
|
|
52
|
+
const configPath = findEslintConfig(cwd);
|
|
53
|
+
if (!configPath)
|
|
54
|
+
return { edit: null, abort: null };
|
|
55
|
+
const content = readFileSync(configPath, 'utf8');
|
|
56
|
+
const newRef = importReference(path.dirname(configPath), path.join(cwd, ARCHPRINT_DIR, ESLINT_FILE));
|
|
57
|
+
const rel = path.relative(cwd, configPath);
|
|
58
|
+
const cannotRetarget = `${rel} could not be retargeted automatically. Update its archprint import to '${newRef}', then re-run 'archprint migrate'.`;
|
|
59
|
+
if (content.includes(MANAGED_START)) {
|
|
60
|
+
const next = rewriteEslintReference(content, newRef);
|
|
61
|
+
return LEGACY_IMPORT.test(next)
|
|
62
|
+
? { edit: null, abort: cannotRetarget }
|
|
63
|
+
: { edit: { path: configPath, content: next }, abort: null };
|
|
64
|
+
}
|
|
65
|
+
if (/from (['"`])[^'"`]*eslint-plugin\.archprint\.mjs\1/.test(content)) {
|
|
66
|
+
return {
|
|
67
|
+
edit: null,
|
|
68
|
+
abort: `${rel} imports eslint-plugin.archprint.mjs directly. Update that import to '${newRef}' (its default export is the full config), then re-run 'archprint migrate'.`,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
if (/from (['"`])[^'"`]*eslint-preset\.archprint\.mjs\1/.test(content)) {
|
|
72
|
+
const next = content.replace(/(from )(['"`])[^'"`]*eslint-preset\.archprint\.mjs\2/, `$1$2${newRef}$2`);
|
|
73
|
+
return LEGACY_IMPORT.test(next)
|
|
74
|
+
? { edit: null, abort: cannotRetarget }
|
|
75
|
+
: { edit: { path: configPath, content: next }, abort: null };
|
|
76
|
+
}
|
|
77
|
+
return LEGACY_IMPORT.test(content)
|
|
78
|
+
? { edit: null, abort: cannotRetarget }
|
|
79
|
+
: { edit: null, abort: null };
|
|
80
|
+
}
|
|
81
|
+
function planDepcruiseEdit(cwd) {
|
|
82
|
+
const tool = WIRING_TOOLS.find((candidate) => candidate.name === 'dependency-cruiser');
|
|
83
|
+
const configPath = tool.findConfig(cwd);
|
|
84
|
+
if (!configPath)
|
|
85
|
+
return { edit: null, abort: null };
|
|
86
|
+
const content = readFileSync(configPath, 'utf8');
|
|
87
|
+
const newRef = importReference(path.dirname(configPath), path.join(cwd, ARCHPRINT_DIR, DEPCRUISE_FILE));
|
|
88
|
+
if (!tool.canEdit(configPath)) {
|
|
89
|
+
return content.includes('archprint')
|
|
90
|
+
? {
|
|
91
|
+
edit: null,
|
|
92
|
+
abort: `${path.relative(cwd, configPath)} is not JSON and cannot be edited automatically. Change its archprint extends to '${newRef}', then re-run 'archprint migrate'.`,
|
|
93
|
+
}
|
|
94
|
+
: { edit: null, abort: null };
|
|
95
|
+
}
|
|
96
|
+
if (!tool.isWired(content))
|
|
97
|
+
return { edit: null, abort: null };
|
|
98
|
+
const result = tool.apply(content, newRef);
|
|
99
|
+
return {
|
|
100
|
+
edit: result.changed ? { path: configPath, content: result.content } : null,
|
|
101
|
+
abort: null,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
export function hasLegacyLayout(cwd) {
|
|
105
|
+
return legacyArtifacts(cwd).length > 0;
|
|
106
|
+
}
|
|
107
|
+
export function planMigration(cwd) {
|
|
108
|
+
const legacy = legacyArtifacts(cwd);
|
|
109
|
+
if (legacy.length === 0)
|
|
110
|
+
return null;
|
|
111
|
+
const eslint = planEslintEdit(cwd);
|
|
112
|
+
const depcruise = planDepcruiseEdit(cwd);
|
|
113
|
+
return {
|
|
114
|
+
legacy,
|
|
115
|
+
appDir: resolveAppDir(cwd),
|
|
116
|
+
eslintEdit: eslint.edit,
|
|
117
|
+
depcruiseEdit: depcruise.edit,
|
|
118
|
+
abort: eslint.abort ?? depcruise.abort,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
export function runMigration(cwd, version, options = {}) {
|
|
122
|
+
const plan = planMigration(cwd);
|
|
123
|
+
if (plan === null)
|
|
124
|
+
return { status: 'nothing', written: [], removed: [], edited: [] };
|
|
125
|
+
if (plan.abort !== null) {
|
|
126
|
+
return { status: 'aborted', reason: plan.abort, written: [], removed: [], edited: [] };
|
|
127
|
+
}
|
|
128
|
+
const scan = scanRepo(plan.appDir, { deep: true });
|
|
129
|
+
const enforcers = detectEnforcers(scan.appDir);
|
|
130
|
+
const collected = collectEnforcement(scan, { enforcers });
|
|
131
|
+
const willEmitEslint = collected.eslintSpecs.length > 0 || collected.eslintBlocks.length > 0;
|
|
132
|
+
const willEmitDepcruise = collected.depcruise.length > 0;
|
|
133
|
+
const emitAbort = emitMismatch(plan, willEmitEslint, willEmitDepcruise, cwd);
|
|
134
|
+
if (emitAbort !== null) {
|
|
135
|
+
return { status: 'aborted', reason: emitAbort, written: [], removed: [], edited: [] };
|
|
136
|
+
}
|
|
137
|
+
const edits = [plan.eslintEdit, plan.depcruiseEdit].filter((edit) => edit !== null);
|
|
138
|
+
const removed = plan.legacy.map((target) => path.relative(cwd, target));
|
|
139
|
+
const edited = edits.map((edit) => path.relative(cwd, edit.path));
|
|
140
|
+
if (options.dryRun) {
|
|
141
|
+
const written = [
|
|
142
|
+
...(willEmitEslint ? [path.join(ARCHPRINT_DIR, ESLINT_FILE)] : []),
|
|
143
|
+
...(willEmitDepcruise ? [path.join(ARCHPRINT_DIR, DEPCRUISE_FILE)] : []),
|
|
144
|
+
path.join(ARCHPRINT_DIR, CONFIG_FILE),
|
|
145
|
+
];
|
|
146
|
+
return { status: 'migrated', written, removed, edited };
|
|
147
|
+
}
|
|
148
|
+
const recommendations = buildRecommendations(scan, detectStack(plan.appDir), enforcers);
|
|
149
|
+
const { files } = writeLayout(scan, path.join(cwd, ARCHPRINT_DIR), {
|
|
150
|
+
enforcers,
|
|
151
|
+
version,
|
|
152
|
+
recommendations,
|
|
153
|
+
app: path.relative(cwd, plan.appDir) || '.',
|
|
154
|
+
cwd,
|
|
155
|
+
readmeBody: renderAdoptionBody(recommendations),
|
|
156
|
+
});
|
|
157
|
+
for (const edit of edits)
|
|
158
|
+
writeFileSync(edit.path, edit.content);
|
|
159
|
+
for (const target of plan.legacy)
|
|
160
|
+
rmSync(target, { recursive: true, force: true });
|
|
161
|
+
return {
|
|
162
|
+
status: 'migrated',
|
|
163
|
+
written: files.map((file) => path.relative(cwd, file)),
|
|
164
|
+
removed,
|
|
165
|
+
edited,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
function emitMismatch(plan, willEmitEslint, willEmitDepcruise, cwd) {
|
|
169
|
+
if (plan.eslintEdit && !willEmitEslint) {
|
|
170
|
+
return `${path.relative(cwd, plan.eslintEdit.path)} references archprint, but this repo no longer produces ESLint rules under the current defaults (structural families are held for review). Review with 'archprint scan', or run 'archprint eject' on the old layout, before migrating.`;
|
|
171
|
+
}
|
|
172
|
+
if (plan.depcruiseEdit && !willEmitDepcruise) {
|
|
173
|
+
return `${path.relative(cwd, plan.depcruiseEdit.path)} references archprint, but this repo no longer produces dependency-cruiser rules under the current defaults (structural families are held for review). Review with 'archprint scan', or run 'archprint eject' on the old layout, before migrating.`;
|
|
174
|
+
}
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/cli/migrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,4 @@
|
|
|
1
1
|
export declare const OUTPUTS_MANIFEST_FILE = ".archprint-outputs.json";
|
|
2
|
-
export interface OutputsManifest {
|
|
3
|
-
archprintVersion: string;
|
|
4
|
-
outputs: string[];
|
|
5
|
-
}
|
|
6
2
|
export declare function readOutputs(outDir: string): string[];
|
|
7
|
-
export declare function cleanPreviousOutputs(outDir: string): string[];
|
|
8
|
-
export declare function writeOutputsManifest(outDir: string, absolutePaths: readonly string[], version: string): void;
|
|
9
3
|
export declare function removeIfEmpty(dir: string): void;
|
|
10
4
|
//# sourceMappingURL=outputs-manifest.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outputs-manifest.d.ts","sourceRoot":"","sources":["../../src/cli/outputs-manifest.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,qBAAqB,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"outputs-manifest.d.ts","sourceRoot":"","sources":["../../src/cli/outputs-manifest.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,qBAAqB,4BAA4B,CAAC;AAO/D,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CASpD;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAQ/C"}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
import { existsSync, readFileSync, readdirSync,
|
|
1
|
+
import { existsSync, readFileSync, readdirSync, rmdirSync } from 'node:fs';
|
|
2
2
|
import * as path from 'node:path';
|
|
3
3
|
export const OUTPUTS_MANIFEST_FILE = '.archprint-outputs.json';
|
|
4
|
-
function manifestPath(outDir) {
|
|
5
|
-
return path.join(outDir, OUTPUTS_MANIFEST_FILE);
|
|
6
|
-
}
|
|
7
4
|
export function readOutputs(outDir) {
|
|
8
|
-
const file =
|
|
5
|
+
const file = path.join(outDir, OUTPUTS_MANIFEST_FILE);
|
|
9
6
|
if (!existsSync(file))
|
|
10
7
|
return [];
|
|
11
8
|
try {
|
|
@@ -16,30 +13,6 @@ export function readOutputs(outDir) {
|
|
|
16
13
|
return [];
|
|
17
14
|
}
|
|
18
15
|
}
|
|
19
|
-
function isInside(outDir, relative) {
|
|
20
|
-
const resolved = path.resolve(outDir, relative);
|
|
21
|
-
const base = path.resolve(outDir);
|
|
22
|
-
return resolved === base ? false : resolved.startsWith(base + path.sep);
|
|
23
|
-
}
|
|
24
|
-
export function cleanPreviousOutputs(outDir) {
|
|
25
|
-
const removed = [];
|
|
26
|
-
for (const relative of readOutputs(outDir)) {
|
|
27
|
-
if (!isInside(outDir, relative))
|
|
28
|
-
continue;
|
|
29
|
-
const target = path.resolve(outDir, relative);
|
|
30
|
-
if (existsSync(target)) {
|
|
31
|
-
rmSync(target, { recursive: true, force: true });
|
|
32
|
-
removed.push(relative);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
rmSync(manifestPath(outDir), { force: true });
|
|
36
|
-
return removed;
|
|
37
|
-
}
|
|
38
|
-
export function writeOutputsManifest(outDir, absolutePaths, version) {
|
|
39
|
-
const outputs = [...new Set(absolutePaths.map((p) => path.relative(outDir, p)))].sort();
|
|
40
|
-
const manifest = { archprintVersion: version, outputs };
|
|
41
|
-
writeFileSync(manifestPath(outDir), `${JSON.stringify(manifest, null, 2)}\n`);
|
|
42
|
-
}
|
|
43
16
|
export function removeIfEmpty(dir) {
|
|
44
17
|
if (existsSync(dir) && readdirSync(dir).length === 0) {
|
|
45
18
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outputs-manifest.js","sourceRoot":"","sources":["../../src/cli/outputs-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"outputs-manifest.js","sourceRoot":"","sources":["../../src/cli/outputs-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,CAAC,MAAM,qBAAqB,GAAG,yBAAyB,CAAC;AAO/D,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IACtD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAA6B,CAAC;QAClF,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrD,IAAI,CAAC;YACH,SAAS,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,iFAAiF;QACnF,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/cli/program.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
export declare function readVersion(): string;
|
|
3
|
+
export declare function runEslintCheck(appDir: string, outDir: string): Promise<void>;
|
|
3
4
|
export declare function buildProgram(version?: string): Command;
|
|
4
5
|
//# sourceMappingURL=program.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBpC,wBAAgB,WAAW,IAAI,MAAM,CAOpC;AAsCD,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyDlF;AAoCD,wBAAgB,YAAY,CAAC,OAAO,SAAgB,GAAG,OAAO,CA2d7D"}
|