archprint 0.5.0 → 0.7.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.
Files changed (89) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +87 -46
  3. package/dist/cli/adoption-readme.d.ts +7 -0
  4. package/dist/cli/adoption-readme.d.ts.map +1 -0
  5. package/dist/cli/adoption-readme.js +76 -0
  6. package/dist/cli/adoption-readme.js.map +1 -0
  7. package/dist/cli/archprint-config.d.ts +33 -0
  8. package/dist/cli/archprint-config.d.ts.map +1 -0
  9. package/dist/cli/archprint-config.js +83 -0
  10. package/dist/cli/archprint-config.js.map +1 -0
  11. package/dist/cli/generate.d.ts +39 -43
  12. package/dist/cli/generate.d.ts.map +1 -1
  13. package/dist/cli/generate.js +143 -283
  14. package/dist/cli/generate.js.map +1 -1
  15. package/dist/cli/ignore-file.d.ts +8 -0
  16. package/dist/cli/ignore-file.d.ts.map +1 -0
  17. package/dist/cli/ignore-file.js +37 -0
  18. package/dist/cli/ignore-file.js.map +1 -0
  19. package/dist/cli/layout.d.ts +24 -0
  20. package/dist/cli/layout.d.ts.map +1 -0
  21. package/dist/cli/layout.js +74 -0
  22. package/dist/cli/layout.js.map +1 -0
  23. package/dist/cli/migrate.d.ts +27 -0
  24. package/dist/cli/migrate.d.ts.map +1 -0
  25. package/dist/cli/migrate.js +177 -0
  26. package/dist/cli/migrate.js.map +1 -0
  27. package/dist/cli/outputs-manifest.d.ts +0 -6
  28. package/dist/cli/outputs-manifest.d.ts.map +1 -1
  29. package/dist/cli/outputs-manifest.js +2 -29
  30. package/dist/cli/outputs-manifest.js.map +1 -1
  31. package/dist/cli/program.d.ts.map +1 -1
  32. package/dist/cli/program.js +151 -61
  33. package/dist/cli/program.js.map +1 -1
  34. package/dist/cli/report.d.ts +3 -2
  35. package/dist/cli/report.d.ts.map +1 -1
  36. package/dist/cli/report.js +19 -11
  37. package/dist/cli/report.js.map +1 -1
  38. package/dist/cli/wiring.d.ts +2 -13
  39. package/dist/cli/wiring.d.ts.map +1 -1
  40. package/dist/cli/wiring.js +18 -89
  41. package/dist/cli/wiring.js.map +1 -1
  42. package/dist/generator/eslint-preset-emitter.d.ts +4 -1
  43. package/dist/generator/eslint-preset-emitter.d.ts.map +1 -1
  44. package/dist/generator/eslint-preset-emitter.js +6 -4
  45. package/dist/generator/eslint-preset-emitter.js.map +1 -1
  46. package/dist/mcp/remote/clone.d.ts +7 -0
  47. package/dist/mcp/remote/clone.d.ts.map +1 -0
  48. package/dist/mcp/remote/clone.js +72 -0
  49. package/dist/mcp/remote/clone.js.map +1 -0
  50. package/dist/mcp/remote/http.d.ts +9 -0
  51. package/dist/mcp/remote/http.d.ts.map +1 -0
  52. package/dist/mcp/remote/http.js +92 -0
  53. package/dist/mcp/remote/http.js.map +1 -0
  54. package/dist/mcp/remote/repo-url.d.ts +8 -0
  55. package/dist/mcp/remote/repo-url.d.ts.map +1 -0
  56. package/dist/mcp/remote/repo-url.js +45 -0
  57. package/dist/mcp/remote/repo-url.js.map +1 -0
  58. package/dist/mcp/remote/server.d.ts +67 -0
  59. package/dist/mcp/remote/server.d.ts.map +1 -0
  60. package/dist/mcp/remote/server.js +83 -0
  61. package/dist/mcp/remote/server.js.map +1 -0
  62. package/dist/mcp/remote/tools.d.ts +11 -0
  63. package/dist/mcp/remote/tools.d.ts.map +1 -0
  64. package/dist/mcp/remote/tools.js +12 -0
  65. package/dist/mcp/remote/tools.js.map +1 -0
  66. package/dist/mcp/server.d.ts +54 -0
  67. package/dist/mcp/server.d.ts.map +1 -0
  68. package/dist/mcp/server.js +82 -0
  69. package/dist/mcp/server.js.map +1 -0
  70. package/dist/mcp/tool-response.d.ts +10 -0
  71. package/dist/mcp/tool-response.d.ts.map +1 -0
  72. package/dist/mcp/tool-response.js +7 -0
  73. package/dist/mcp/tool-response.js.map +1 -0
  74. package/dist/mcp/tools.d.ts +17 -0
  75. package/dist/mcp/tools.d.ts.map +1 -0
  76. package/dist/mcp/tools.js +39 -0
  77. package/dist/mcp/tools.js.map +1 -0
  78. package/dist/scanner/file-walker.d.ts +1 -0
  79. package/dist/scanner/file-walker.d.ts.map +1 -1
  80. package/dist/scanner/file-walker.js +27 -0
  81. package/dist/scanner/file-walker.js.map +1 -1
  82. package/dist/scanner/ignore-filter.d.ts.map +1 -1
  83. package/dist/scanner/ignore-filter.js +36 -10
  84. package/dist/scanner/ignore-filter.js.map +1 -1
  85. package/package.json +8 -5
  86. package/dist/cli/init.d.ts +0 -21
  87. package/dist/cli/init.d.ts.map +0 -1
  88. package/dist/cli/init.js +0 -19
  89. 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;AAE/D,MAAM,WAAW,eAAe;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAMD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CASpD;AAQD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAY7D;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,SAAS,MAAM,EAAE,EAChC,OAAO,EAAE,MAAM,GACd,IAAI,CAIN;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAQ/C"}
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, rmSync, rmdirSync, writeFileSync } from 'node:fs';
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 = manifestPath(outDir);
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":"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"}
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"}
@@ -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;AAmBpC,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,CAga7D"}
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,CAkf7D"}