archprint 0.5.0 → 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.
Files changed (50) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +54 -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 +131 -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/package.json +5 -5
  47. package/dist/cli/init.d.ts +0 -21
  48. package/dist/cli/init.d.ts.map +0 -1
  49. package/dist/cli/init.js +0 -19
  50. 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,CA2d7D"}