intentpatch 0.1.1 → 0.2.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 (45) hide show
  1. package/README.ko.md +39 -21
  2. package/README.md +36 -16
  3. package/dist/application/ports/module-alias-resolver.d.ts +11 -0
  4. package/dist/application/ports/module-alias-resolver.d.ts.map +1 -0
  5. package/dist/application/ports/module-alias-resolver.js +2 -0
  6. package/dist/application/ports/module-alias-resolver.js.map +1 -0
  7. package/dist/application/ports/package-lock-parser.d.ts +20 -0
  8. package/dist/application/ports/package-lock-parser.d.ts.map +1 -0
  9. package/dist/application/ports/package-lock-parser.js +2 -0
  10. package/dist/application/ports/package-lock-parser.js.map +1 -0
  11. package/dist/application/rules/npm-lockfile-rule.d.ts +12 -0
  12. package/dist/application/rules/npm-lockfile-rule.d.ts.map +1 -0
  13. package/dist/application/rules/npm-lockfile-rule.js +109 -0
  14. package/dist/application/rules/npm-lockfile-rule.js.map +1 -0
  15. package/dist/application/rules/npm-workspace-dependency-rule.d.ts +10 -0
  16. package/dist/application/rules/npm-workspace-dependency-rule.d.ts.map +1 -0
  17. package/dist/application/rules/npm-workspace-dependency-rule.js +155 -0
  18. package/dist/application/rules/npm-workspace-dependency-rule.js.map +1 -0
  19. package/dist/application/rules/package-dependency-rule.d.ts +4 -3
  20. package/dist/application/rules/package-dependency-rule.d.ts.map +1 -1
  21. package/dist/application/rules/package-dependency-rule.js +33 -28
  22. package/dist/application/rules/package-dependency-rule.js.map +1 -1
  23. package/dist/application/services/analyze-import-impact.d.ts +3 -1
  24. package/dist/application/services/analyze-import-impact.d.ts.map +1 -1
  25. package/dist/application/services/analyze-import-impact.js +12 -7
  26. package/dist/application/services/analyze-import-impact.js.map +1 -1
  27. package/dist/infrastructure/git/git-file-snapshot-source.d.ts.map +1 -1
  28. package/dist/infrastructure/git/git-file-snapshot-source.js +4 -2
  29. package/dist/infrastructure/git/git-file-snapshot-source.js.map +1 -1
  30. package/dist/infrastructure/npm/npm-package-lock-parser.d.ts +6 -0
  31. package/dist/infrastructure/npm/npm-package-lock-parser.d.ts.map +1 -0
  32. package/dist/infrastructure/npm/npm-package-lock-parser.js +93 -0
  33. package/dist/infrastructure/npm/npm-package-lock-parser.js.map +1 -0
  34. package/dist/infrastructure/typescript/typescript-config-loader.d.ts +17 -0
  35. package/dist/infrastructure/typescript/typescript-config-loader.d.ts.map +1 -0
  36. package/dist/infrastructure/typescript/typescript-config-loader.js +99 -0
  37. package/dist/infrastructure/typescript/typescript-config-loader.js.map +1 -0
  38. package/dist/infrastructure/typescript/typescript-module-alias-resolver.d.ts +10 -0
  39. package/dist/infrastructure/typescript/typescript-module-alias-resolver.d.ts.map +1 -0
  40. package/dist/infrastructure/typescript/typescript-module-alias-resolver.js +78 -0
  41. package/dist/infrastructure/typescript/typescript-module-alias-resolver.js.map +1 -0
  42. package/dist/presentation/analyze-repository.d.ts.map +1 -1
  43. package/dist/presentation/analyze-repository.js +7 -3
  44. package/dist/presentation/analyze-repository.js.map +1 -1
  45. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-workspace-dependency-rule.js","sourceRoot":"","sources":["../../../src/application/rules/npm-workspace-dependency-rule.ts"],"names":[],"mappings":"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"}
@@ -2,12 +2,13 @@ import type { Finding } from "../../domain/finding.js";
2
2
  import type { AnalysisContext, AnalysisRule } from "../ports/analysis-rule.js";
3
3
  import type { FileSnapshotSource } from "../ports/file-snapshot-source.js";
4
4
  /**
5
- * 루트 package.json의 직접 dependency 변경만 판단한다.
6
- * lockfile의 전이 dependency와 workspace package 지원은 별도 규칙으로 확장한다.
5
+ * 한 package.json의 직접 dependency 선언 변경을 판단한다.
6
+ * 루트와 workspace 규칙이 같은 판단 기준을 사용하도록 경로를 주입받는다.
7
7
  */
8
8
  export declare class PackageDependencyRule implements AnalysisRule {
9
9
  private readonly snapshots;
10
- constructor(snapshots: FileSnapshotSource);
10
+ private readonly manifestPath;
11
+ constructor(snapshots: FileSnapshotSource, manifestPath?: string);
11
12
  analyze(context: AnalysisContext): Promise<readonly Finding[]>;
12
13
  }
13
14
  //# sourceMappingURL=package-dependency-rule.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"package-dependency-rule.d.ts","sourceRoot":"","sources":["../../../src/application/rules/package-dependency-rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAY,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAgB3E;;;GAGG;AACH,qBAAa,qBAAsB,YAAW,YAAY;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,kBAAkB;IAEpD,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC;CAoB5E"}
1
+ {"version":3,"file":"package-dependency-rule.d.ts","sourceRoot":"","sources":["../../../src/application/rules/package-dependency-rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAY,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAgB3E;;;GAGG;AACH,qBAAa,qBAAsB,YAAW,YAAY;IAEtD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY;gBADZ,SAAS,EAAE,kBAAkB,EAC7B,YAAY,SAAmB;IAGrC,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC;CA6B5E"}
@@ -1,21 +1,26 @@
1
- const manifestPath = "package.json";
1
+ const rootManifestPath = "package.json";
2
2
  const dependencySections = ["dependencies", "devDependencies"];
3
3
  /**
4
- * 루트 package.json의 직접 dependency 변경만 판단한다.
5
- * lockfile의 전이 dependency와 workspace package 지원은 별도 규칙으로 확장한다.
4
+ * 한 package.json의 직접 dependency 선언 변경을 판단한다.
5
+ * 루트와 workspace 규칙이 같은 판단 기준을 사용하도록 경로를 주입받는다.
6
6
  */
7
7
  export class PackageDependencyRule {
8
8
  snapshots;
9
- constructor(snapshots) {
9
+ manifestPath;
10
+ constructor(snapshots, manifestPath = rootManifestPath) {
10
11
  this.snapshots = snapshots;
12
+ this.manifestPath = manifestPath;
11
13
  }
12
14
  async analyze(context) {
13
- if (!context.changes.files.some(isManifestChange)) {
15
+ const change = context.changes.files.find((item) => item.path === this.manifestPath || item.previousPath === this.manifestPath);
16
+ if (change === undefined) {
14
17
  return [];
15
18
  }
16
- const snapshot = await this.snapshots.read(context.target, manifestPath);
17
- const before = parseManifest(snapshot.before, "base");
18
- const after = parseManifest(snapshot.after, "current");
19
+ const snapshot = await this.snapshots.read(context.target, this.manifestPath, change.kind === "renamed" && isPackageManifestPath(change.previousPath)
20
+ ? change.previousPath
21
+ : undefined);
22
+ const before = parseManifest(snapshot.before, "base", this.manifestPath);
23
+ const after = parseManifest(snapshot.after, "current", this.manifestPath);
19
24
  if (!before.ok && !after.ok) {
20
25
  return [before.finding, after.finding];
21
26
  }
@@ -25,13 +30,13 @@ export class PackageDependencyRule {
25
30
  if (!after.ok) {
26
31
  return [after.finding];
27
32
  }
28
- return compareDependencies(before.dependencies, after.dependencies);
33
+ return compareDependencies(before.dependencies, after.dependencies, this.manifestPath);
29
34
  }
30
35
  }
31
- function isManifestChange(change) {
32
- return change.path === manifestPath || change.previousPath === manifestPath;
36
+ function isPackageManifestPath(path) {
37
+ return path === rootManifestPath || path?.endsWith("/package.json") === true;
33
38
  }
34
- function parseManifest(content, side) {
39
+ function parseManifest(content, side, manifestPath) {
35
40
  if (content === undefined) {
36
41
  return { ok: true, dependencies: new Map() };
37
42
  }
@@ -40,10 +45,10 @@ function parseManifest(content, side) {
40
45
  value = JSON.parse(content);
41
46
  }
42
47
  catch {
43
- return invalidManifest(side, "The file is not valid JSON.");
48
+ return invalidManifest(side, "The file is not valid JSON.", manifestPath);
44
49
  }
45
50
  if (!isRecord(value)) {
46
- return invalidManifest(side, "The root value must be a JSON object.");
51
+ return invalidManifest(side, "The root value must be a JSON object.", manifestPath);
47
52
  }
48
53
  const dependencies = new Map();
49
54
  for (const section of dependencySections) {
@@ -52,48 +57,48 @@ function parseManifest(content, side) {
52
57
  continue;
53
58
  }
54
59
  if (!isRecord(entries)) {
55
- return invalidManifest(side, `${section} must be a JSON object.`);
60
+ return invalidManifest(side, `${section} must be a JSON object.`, manifestPath);
56
61
  }
57
62
  for (const [name, version] of Object.entries(entries)) {
58
63
  if (typeof version !== "string") {
59
- return invalidManifest(side, `${section}.${name} must have a string version.`);
64
+ return invalidManifest(side, `${section}.${name} must have a string version.`, manifestPath);
60
65
  }
61
66
  if (dependencies.has(name)) {
62
- return invalidManifest(side, `${name} is declared in more than one dependency section.`);
67
+ return invalidManifest(side, `${name} is declared in more than one dependency section.`, manifestPath);
63
68
  }
64
69
  dependencies.set(name, { section, version });
65
70
  }
66
71
  }
67
72
  return { ok: true, dependencies };
68
73
  }
69
- function compareDependencies(before, after) {
74
+ function compareDependencies(before, after, manifestPath) {
70
75
  const names = [...new Set([...before.keys(), ...after.keys()])].sort((left, right) => left.localeCompare(right));
71
76
  const findings = [];
72
77
  for (const name of names) {
73
78
  const previous = before.get(name);
74
79
  const current = after.get(name);
75
80
  if (previous === undefined && current !== undefined) {
76
- findings.push(addedDependency(name, current));
81
+ findings.push(addedDependency(name, current, manifestPath));
77
82
  continue;
78
83
  }
79
84
  if (previous !== undefined && current === undefined) {
80
- findings.push(removedDependency(name, previous));
85
+ findings.push(removedDependency(name, previous, manifestPath));
81
86
  continue;
82
87
  }
83
88
  if (previous === undefined || current === undefined) {
84
89
  continue;
85
90
  }
86
91
  if (previous.section !== current.section) {
87
- findings.push(movedDependency(name, previous, current));
92
+ findings.push(movedDependency(name, previous, current, manifestPath));
88
93
  continue;
89
94
  }
90
95
  if (previous.version !== current.version) {
91
- findings.push(changedDependency(name, previous, current));
96
+ findings.push(changedDependency(name, previous, current, manifestPath));
92
97
  }
93
98
  }
94
99
  return findings;
95
100
  }
96
- function addedDependency(name, declaration) {
101
+ function addedDependency(name, declaration, manifestPath) {
97
102
  const production = declaration.section === "dependencies";
98
103
  return {
99
104
  ruleId: production ? "dependency/new-production" : "dependency/new-development",
@@ -108,7 +113,7 @@ function addedDependency(name, declaration) {
108
113
  },
109
114
  };
110
115
  }
111
- function removedDependency(name, declaration) {
116
+ function removedDependency(name, declaration, manifestPath) {
112
117
  return {
113
118
  ruleId: "dependency/removed",
114
119
  severity: "low",
@@ -122,7 +127,7 @@ function removedDependency(name, declaration) {
122
127
  },
123
128
  };
124
129
  }
125
- function movedDependency(name, previous, current) {
130
+ function movedDependency(name, previous, current, manifestPath) {
126
131
  return {
127
132
  ruleId: "dependency/section-changed",
128
133
  severity: current.section === "dependencies" ? "medium" : "low",
@@ -137,7 +142,7 @@ function movedDependency(name, previous, current) {
137
142
  },
138
143
  };
139
144
  }
140
- function changedDependency(name, previous, current) {
145
+ function changedDependency(name, previous, current, manifestPath) {
141
146
  return {
142
147
  ruleId: "dependency/version-changed",
143
148
  severity: severityFor(current.section),
@@ -152,14 +157,14 @@ function changedDependency(name, previous, current) {
152
157
  },
153
158
  };
154
159
  }
155
- function invalidManifest(side, reason) {
160
+ function invalidManifest(side, reason, manifestPath) {
156
161
  return {
157
162
  ok: false,
158
163
  finding: {
159
164
  ruleId: "dependency/invalid-manifest",
160
165
  severity: "high",
161
166
  title: "Invalid package manifest",
162
- description: `Could not analyze the ${side} package.json: ${reason}`,
167
+ description: `Could not analyze the ${side} ${manifestPath}: ${reason}`,
163
168
  file: manifestPath,
164
169
  evidence: { side, reason },
165
170
  },
@@ -1 +1 @@
1
- {"version":3,"file":"package-dependency-rule.js","sourceRoot":"","sources":["../../../src/application/rules/package-dependency-rule.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"package-dependency-rule.js","sourceRoot":"","sources":["../../../src/application/rules/package-dependency-rule.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,15 @@
1
1
  import { type ImpactAnalysis } from "../../domain/impact.js";
2
2
  import type { AnalysisContext } from "../ports/analysis-rule.js";
3
3
  import type { ChangeImpactAnalyzer } from "../ports/change-impact-analyzer.js";
4
+ import type { ModuleAliasResolver } from "../ports/module-alias-resolver.js";
4
5
  import type { ModuleReferenceExtractor } from "../ports/module-reference-extractor.js";
5
6
  import type { ProjectFileSource } from "../ports/project-file-source.js";
6
7
  /** 현재 module graph를 역방향으로 탐색해 변경 파일의 직접·간접 의존자를 찾는다. */
7
8
  export declare class AnalyzeImportImpact implements ChangeImpactAnalyzer {
8
9
  private readonly files;
9
10
  private readonly extractors;
10
- constructor(files: ProjectFileSource, extractors: readonly ModuleReferenceExtractor[]);
11
+ private readonly aliases;
12
+ constructor(files: ProjectFileSource, extractors: readonly ModuleReferenceExtractor[], aliases: ModuleAliasResolver);
11
13
  analyze(context: AnalysisContext): Promise<ImpactAnalysis>;
12
14
  private extractorFor;
13
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"analyze-import-impact.d.ts","sourceRoot":"","sources":["../../../src/application/services/analyze-import-impact.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,cAAc,EAKpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AACvF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAKzE,wDAAwD;AACxD,qBAAa,mBAAoB,YAAW,oBAAoB;IAE5D,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBADV,KAAK,EAAE,iBAAiB,EACxB,UAAU,EAAE,SAAS,wBAAwB,EAAE;IAGrD,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAyDvE,OAAO,CAAC,YAAY;CAGrB"}
1
+ {"version":3,"file":"analyze-import-impact.d.ts","sourceRoot":"","sources":["../../../src/application/services/analyze-import-impact.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,cAAc,EAKpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AACvF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAKzE,wDAAwD;AACxD,qBAAa,mBAAoB,YAAW,oBAAoB;IAE5D,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAFP,KAAK,EAAE,iBAAiB,EACxB,UAAU,EAAE,SAAS,wBAAwB,EAAE,EAC/C,OAAO,EAAE,mBAAmB;IAGlC,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IA4DvE,OAAO,CAAC,YAAY;CAGrB"}
@@ -6,17 +6,20 @@ const emittedJavaScriptExtensions = [".js", ".jsx", ".mjs", ".cjs"];
6
6
  export class AnalyzeImportImpact {
7
7
  files;
8
8
  extractors;
9
- constructor(files, extractors) {
9
+ aliases;
10
+ constructor(files, extractors, aliases) {
10
11
  this.files = files;
11
12
  this.extractors = extractors;
13
+ this.aliases = aliases;
12
14
  }
13
15
  async analyze(context) {
14
16
  const allPaths = await this.files.listPaths(context.target);
15
17
  const sourcePaths = allPaths.filter((path) => this.extractorFor(path) !== undefined);
16
18
  const availablePaths = new Set(sourcePaths);
19
+ const aliasResolver = await this.aliases.prepare(context.target, allPaths, availablePaths);
17
20
  const dependencies = [];
18
21
  const unresolvedReferences = [];
19
- const issues = [];
22
+ const issues = [...aliasResolver.issues];
20
23
  // 저장소 크기에 비례해 파일 핸들과 Git 프로세스가 폭증하지 않도록 순차 처리한다.
21
24
  for (const path of sourcePaths) {
22
25
  const extractor = this.extractorFor(path);
@@ -37,12 +40,14 @@ export class AnalyzeImportImpact {
37
40
  continue;
38
41
  }
39
42
  for (const specifier of references.specifiers) {
40
- if (!isRelativeSpecifier(specifier)) {
41
- continue;
42
- }
43
- const imported = resolveRelativeModule(path, specifier, availablePaths);
43
+ const relative = isRelativeSpecifier(specifier);
44
+ const imported = relative
45
+ ? resolveRelativeModule(path, specifier, availablePaths)
46
+ : aliasResolver.resolve(path, specifier);
44
47
  if (imported === undefined) {
45
- unresolvedReferences.push({ importer: path, specifier });
48
+ if (relative) {
49
+ unresolvedReferences.push({ importer: path, specifier });
50
+ }
46
51
  }
47
52
  else {
48
53
  dependencies.push({ importer: path, imported });
@@ -1 +1 @@
1
- {"version":3,"file":"analyze-import-impact.js","sourceRoot":"","sources":["../../../src/application/services/analyze-import-impact.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analyze-import-impact.js","sourceRoot":"","sources":["../../../src/application/services/analyze-import-impact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EACL,oBAAoB,GAMrB,MAAM,wBAAwB,CAAC;AAOhC,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC;AAC3D,MAAM,2BAA2B,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AAE7E,wDAAwD;AACxD,MAAM,OAAO,mBAAmB;IAEX;IACA;IACA;IAHnB,YACmB,KAAwB,EACxB,UAA+C,EAC/C,OAA4B;QAF5B,UAAK,GAAL,KAAK,CAAmB;QACxB,eAAU,GAAV,UAAU,CAAqC;QAC/C,YAAO,GAAP,OAAO,CAAqB;IAC5C,CAAC;IAEG,KAAK,CAAC,OAAO,CAAC,OAAwB;QAC3C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5D,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC;QACrF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;QAC5C,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC3F,MAAM,YAAY,GAAuB,EAAE,CAAC;QAC5C,MAAM,oBAAoB,GAAgC,EAAE,CAAC;QAC7D,MAAM,MAAM,GAA0B,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QAEhE,iDAAiD;QACjD,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACzD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC5B,SAAS;YACX,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC3C,SAAS;YACX,CAAC;YAED,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACzD,IAAI,UAAU,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBACtC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;gBACjD,SAAS;YACX,CAAC;YAED,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;gBAC9C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;gBAChD,MAAM,QAAQ,GAAG,QAAQ;oBACvB,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,cAAc,CAAC;oBACxD,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBAC3C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;oBAC3B,IAAI,QAAQ,EAAE,CAAC;wBACb,oBAAoB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;oBAC3D,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,YAAY,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK;aACzC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC;aAC5D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,aAAa,GAAG,sBAAsB,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;QAE3E,OAAO,oBAAoB,CAAC;YAC1B,WAAW,EAAE,WAAW,CAAC,MAAM;YAC/B,cAAc;YACd,YAAY;YACZ,aAAa;YACb,oBAAoB;YACpB,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAEO,YAAY,CAAC,IAAY;QAC/B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IACvE,CAAC;CACF;AAED,SAAS,mBAAmB,CAAC,SAAiB;IAC5C,OAAO,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,qBAAqB,CAC5B,QAAgB,EAChB,SAAiB,EACjB,cAAmC;IAEnC,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IACjF,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnD,IAAI,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAClC,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAgB;IACxC,MAAM,UAAU,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,MAAM,gBAAgB,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CACtE,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAC7B,CAAC;IAEF,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACzD,UAAU,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC;QAC/E,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,UAAU,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,QAAQ,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC;QACnF,UAAU,CAAC,IAAI,CACb,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,SAAS,EAAE,CAAC,CAAC,CAClF,CAAC;IACJ,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,sBAAsB,CAC7B,cAAiC,EACjC,YAAyC;IAEzC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;IACxC,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAuB,CAAC;IACzD,MAAM,OAAO,GAAG,IAAI,GAAG,EAA6D,CAAC;IAErF,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE,CAAC;QACtC,MAAM,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAU,CAAC;QAClF,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACnC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,KAAK,GAA8C,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACvF,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAEhC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACrD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YAC7B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,SAAS;YACX,CAAC;YACD,KAAK,MAAM,QAAQ,IAAI,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBACjE,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC1B,SAAS;gBACX,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACtB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACtC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAEzC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC1B,SAAS;gBACX,CAAC;gBACD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACvC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;oBAC3B,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;gBACvE,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;oBAC1D,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3C,IAAI;QACJ,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,cAAc,EAAE,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC;KAC3C,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"git-file-snapshot-source.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/git/git-file-snapshot-source.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,iDAAiD,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,EAAE,KAAK,aAAa,EAAqB,MAAM,8BAA8B,CAAC;AAIrF,wDAAwD;AACxD,qBAAa,qBAAsB,YAAW,kBAAkB;IAE5D,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa;gBADb,gBAAgB,EAAE,MAAM,EACxB,aAAa,GAAE,aAAuC;IAG5D,IAAI,CACf,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,MAAM,EACZ,QAAQ,SAAO,GACd,OAAO,CAAC,gBAAgB,CAAC;YAuBd,mBAAmB;YAiBnB,YAAY;YAuBZ,eAAe;CAyB9B"}
1
+ {"version":3,"file":"git-file-snapshot-source.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/git/git-file-snapshot-source.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,iDAAiD,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,EAAE,KAAK,aAAa,EAAqB,MAAM,8BAA8B,CAAC;AAKrF,wDAAwD;AACxD,qBAAa,qBAAsB,YAAW,kBAAkB;IAE5D,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa;gBADb,gBAAgB,EAAE,MAAM,EACxB,aAAa,GAAE,aAAuC;IAG5D,IAAI,CACf,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,MAAM,EACZ,QAAQ,SAAO,GACd,OAAO,CAAC,gBAAgB,CAAC;YAuBd,mBAAmB;YAiBnB,YAAY;YAuBZ,eAAe;CA4B9B"}
@@ -2,6 +2,7 @@ import { lstat, readFile } from "node:fs/promises";
2
2
  import { resolveRepositoryPath } from "../filesystem/repository-path.js";
3
3
  import { NodeCommandRunner } from "../process/command-runner.js";
4
4
  const maximumTextFileSize = 1024 * 1024;
5
+ const maximumLockfileSize = 10 * maximumTextFileSize;
5
6
  /** Git 기준점과 working tree 또는 head ref에서 분석용 텍스트를 읽는다. */
6
7
  export class GitFileSnapshotSource {
7
8
  workingDirectory;
@@ -72,8 +73,9 @@ export class GitFileSnapshotSource {
72
73
  if (!metadata.isFile()) {
73
74
  throw new Error(`Expected a regular file: ${path}`);
74
75
  }
75
- if (metadata.size > maximumTextFileSize) {
76
- throw new Error(`Text file exceeds the 1 MiB analysis limit: ${path}`);
76
+ const sizeLimit = path === "package-lock.json" ? maximumLockfileSize : maximumTextFileSize;
77
+ if (metadata.size > sizeLimit) {
78
+ throw new Error(`Text file exceeds the ${sizeLimit / maximumTextFileSize} MiB analysis limit: ${path}`);
77
79
  }
78
80
  return readFile(absolutePath, "utf8");
79
81
  }
@@ -1 +1 @@
1
- {"version":3,"file":"git-file-snapshot-source.js","sourceRoot":"","sources":["../../../src/infrastructure/git/git-file-snapshot-source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAMnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAsB,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAErF,MAAM,mBAAmB,GAAG,IAAI,GAAG,IAAI,CAAC;AAExC,wDAAwD;AACxD,MAAM,OAAO,qBAAqB;IAEb;IACA;IAFnB,YACmB,gBAAwB,EACxB,gBAA+B,IAAI,iBAAiB,EAAE;QADtD,qBAAgB,GAAhB,gBAAgB,CAAQ;QACxB,kBAAa,GAAb,aAAa,CAAyC;IACtE,CAAC;IAEG,KAAK,CAAC,IAAI,CACf,MAAsB,EACtB,IAAY,EACZ,QAAQ,GAAG,IAAI;QAEf,MAAM,cAAc,GAAG,CACrB,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;YAC3B,UAAU,EAAE,KAAK;YACjB,SAAS,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC;YAC3C,GAAG,EAAE,IAAI,CAAC,gBAAgB;SAC3B,CAAC,CACH,CAAC,IAAI,EAAE,CAAC;QACT,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QAE5E,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACxC,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,YAAY,EAAE,QAAQ,CAAC;YACzD,MAAM,CAAC,OAAO,KAAK,SAAS;gBAC1B,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC;gBAC5C,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC;SAC5D,CAAC,CAAC;QAEH,OAAO;YACL,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;YAC3C,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;SAC1C,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,cAAsB,EACtB,MAAsB;QAEtB,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACjC,OAAO,MAAM,CAAC,OAAO,CAAC;QACxB,CAAC;QAED,OAAO,CACL,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;YAC3B,UAAU,EAAE,KAAK;YACjB,SAAS,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;YACzD,GAAG,EAAE,cAAc;SACpB,CAAC,CACH,CAAC,IAAI,EAAE,CAAC;IACX,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,cAAsB,EACtB,QAAgB,EAChB,IAAY;QAEZ,qBAAqB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;YAC/C,UAAU,EAAE,KAAK;YACjB,SAAS,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC;YACjE,GAAG,EAAE,cAAc;SACpB,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;YAC5B,UAAU,EAAE,KAAK;YACjB,SAAS,EAAE,CAAC,MAAM,EAAE,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC;YAC1C,GAAG,EAAE,cAAc;SACpB,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,cAAsB,EAAE,IAAY;QAChE,MAAM,YAAY,GAAG,qBAAqB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QACjE,IAAI,QAA2C,CAAC;QAEhD,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QAED,IAAI,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,QAAQ,CAAC,IAAI,GAAG,mBAAmB,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,+CAA+C,IAAI,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,OAAO,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;CACF;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACd,KAAqC,CAAC,IAAI,KAAK,QAAQ,CACzD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"git-file-snapshot-source.js","sourceRoot":"","sources":["../../../src/infrastructure/git/git-file-snapshot-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { PackageLockParseResult, PackageLockParser } from "../../application/ports/package-lock-parser.js";
2
+ /** npm v7+의 packages 맵을 설치 위치별 사실로 변환한다. v2의 레거시 dependencies 맵은 중복 집계하지 않는다. */
3
+ export declare class NpmPackageLockParser implements PackageLockParser {
4
+ parse(content: string): PackageLockParseResult;
5
+ }
6
+ //# sourceMappingURL=npm-package-lock-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-package-lock-parser.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/npm/npm-package-lock-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,sBAAsB,EACtB,iBAAiB,EAClB,MAAM,gDAAgD,CAAC;AASxD,iFAAiF;AACjF,qBAAa,oBAAqB,YAAW,iBAAiB;IACrD,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,sBAAsB;CAuEtD"}
@@ -0,0 +1,93 @@
1
+ const directDependencySections = [
2
+ "dependencies",
3
+ "devDependencies",
4
+ "optionalDependencies",
5
+ "peerDependencies",
6
+ ];
7
+ /** npm v7+의 packages 맵을 설치 위치별 사실로 변환한다. v2의 레거시 dependencies 맵은 중복 집계하지 않는다. */
8
+ export class NpmPackageLockParser {
9
+ parse(content) {
10
+ let value;
11
+ try {
12
+ value = JSON.parse(content);
13
+ }
14
+ catch {
15
+ return invalid("The file is not valid JSON.");
16
+ }
17
+ if (!isRecord(value)) {
18
+ return invalid("The root value must be a JSON object.");
19
+ }
20
+ if (typeof value.lockfileVersion !== "number" || !Number.isInteger(value.lockfileVersion)) {
21
+ return invalid("lockfileVersion must be an integer.");
22
+ }
23
+ if (value.lockfileVersion !== 2 && value.lockfileVersion !== 3) {
24
+ return {
25
+ ok: false,
26
+ kind: "unsupported",
27
+ reason: `Supported lockfile versions are 2 and 3; found ${value.lockfileVersion}.`,
28
+ };
29
+ }
30
+ if (!isRecord(value.packages)) {
31
+ return invalid("packages must be a JSON object.");
32
+ }
33
+ const root = value.packages[""];
34
+ if (root !== undefined && !isRecord(root)) {
35
+ return invalid('packages[""] must be a JSON object.');
36
+ }
37
+ const rootDirect = new Set();
38
+ if (root !== undefined) {
39
+ for (const section of directDependencySections) {
40
+ const declarations = root[section];
41
+ if (declarations === undefined) {
42
+ continue;
43
+ }
44
+ if (!isRecord(declarations)) {
45
+ return invalid(`packages[""].${section} must be a JSON object.`);
46
+ }
47
+ for (const name of Object.keys(declarations)) {
48
+ rootDirect.add(name);
49
+ }
50
+ }
51
+ }
52
+ const packages = new Map();
53
+ for (const [path, descriptor] of Object.entries(value.packages)) {
54
+ const name = packageNameAt(path);
55
+ if (name === undefined) {
56
+ continue;
57
+ }
58
+ if (!isRecord(descriptor)) {
59
+ return invalid(`packages[${JSON.stringify(path)}] must be a JSON object.`);
60
+ }
61
+ // npm workspaces and local links are represented as symlinks, not resolved external packages.
62
+ if (descriptor.link === true) {
63
+ continue;
64
+ }
65
+ if (typeof descriptor.version !== "string" || descriptor.version.length === 0) {
66
+ return invalid(`packages[${JSON.stringify(path)}].version must be a non-empty string.`);
67
+ }
68
+ packages.set(path, {
69
+ path,
70
+ name,
71
+ version: descriptor.version,
72
+ rootDirect: path === `node_modules/${name}` && rootDirect.has(name),
73
+ });
74
+ }
75
+ return { ok: true, packages };
76
+ }
77
+ }
78
+ function packageNameAt(path) {
79
+ const marker = "node_modules/";
80
+ const markerIndex = path.lastIndexOf(marker);
81
+ if (markerIndex === -1 || (markerIndex > 0 && path[markerIndex - 1] !== "/")) {
82
+ return undefined;
83
+ }
84
+ const name = path.slice(markerIndex + marker.length);
85
+ return /^(?:@[^/]+\/)?[^/]+$/.test(name) ? name : undefined;
86
+ }
87
+ function invalid(reason) {
88
+ return { ok: false, kind: "invalid", reason };
89
+ }
90
+ function isRecord(value) {
91
+ return typeof value === "object" && value !== null && !Array.isArray(value);
92
+ }
93
+ //# sourceMappingURL=npm-package-lock-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-package-lock-parser.js","sourceRoot":"","sources":["../../../src/infrastructure/npm/npm-package-lock-parser.ts"],"names":[],"mappings":"AAMA,MAAM,wBAAwB,GAAG;IAC/B,cAAc;IACd,iBAAiB;IACjB,sBAAsB;IACtB,kBAAkB;CACV,CAAC;AAEX,iFAAiF;AACjF,MAAM,OAAO,oBAAoB;IACxB,KAAK,CAAC,OAAe;QAC1B,IAAI,KAAc,CAAC;QACnB,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,OAAO,CAAC,6BAA6B,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,OAAO,CAAC,uCAAuC,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,OAAO,KAAK,CAAC,eAAe,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;YAC1F,OAAO,OAAO,CAAC,qCAAqC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,KAAK,CAAC,eAAe,KAAK,CAAC,IAAI,KAAK,CAAC,eAAe,KAAK,CAAC,EAAE,CAAC;YAC/D,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,aAAa;gBACnB,MAAM,EAAE,kDAAkD,KAAK,CAAC,eAAe,GAAG;aACnF,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,OAAO,OAAO,CAAC,iCAAiC,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,OAAO,OAAO,CAAC,qCAAqC,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,KAAK,MAAM,OAAO,IAAI,wBAAwB,EAAE,CAAC;gBAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;gBACnC,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;oBAC/B,SAAS;gBACX,CAAC;gBACD,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;oBAC5B,OAAO,OAAO,CAAC,gBAAgB,OAAO,yBAAyB,CAAC,CAAC;gBACnE,CAAC;gBACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;oBAC7C,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;QAClD,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,SAAS;YACX,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC1B,OAAO,OAAO,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAC7E,CAAC;YACD,8FAA8F;YAC9F,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBAC7B,SAAS;YACX,CAAC;YACD,IAAI,OAAO,UAAU,CAAC,OAAO,KAAK,QAAQ,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9E,OAAO,OAAO,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;YAC1F,CAAC;YACD,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE;gBACjB,IAAI;gBACJ,IAAI;gBACJ,OAAO,EAAE,UAAU,CAAC,OAAO;gBAC3B,UAAU,EAAE,IAAI,KAAK,gBAAgB,IAAI,EAAE,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;aACpE,CAAC,CAAC;QACL,CAAC;QAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAChC,CAAC;CACF;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,MAAM,GAAG,eAAe,CAAC;IAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,WAAW,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;QAC7E,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACrD,OAAO,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9D,CAAC;AAED,SAAS,OAAO,CAAC,MAAc;IAC7B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,17 @@
1
+ import ts from "typescript";
2
+ import type { ProjectFileSource } from "../../application/ports/project-file-source.js";
3
+ import type { ImpactAnalysisIssue } from "../../domain/impact.js";
4
+ import type { AnalysisTarget } from "../../domain/report.js";
5
+ export declare const virtualProjectRoot = "/__intentpatch_project__";
6
+ export declare function virtualProjectPath(path: string): string;
7
+ export interface LoadedTypeScriptConfigs {
8
+ readonly optionsByPath: ReadonlyMap<string, ts.CompilerOptions>;
9
+ readonly issues: readonly ImpactAnalysisIssue[];
10
+ }
11
+ /** Git snapshot의 설정만 사용해 TypeScript 경로 별칭을 읽는다. */
12
+ export declare class TypeScriptConfigLoader {
13
+ private readonly files;
14
+ constructor(files: ProjectFileSource);
15
+ load(target: AnalysisTarget, repositoryPaths: readonly string[], configPaths: readonly string[]): Promise<LoadedTypeScriptConfigs>;
16
+ }
17
+ //# sourceMappingURL=typescript-config-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript-config-loader.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/typescript/typescript-config-loader.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AACxF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,eAAO,MAAM,kBAAkB,6BAA6B,CAAC;AAE7D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC;IAChE,QAAQ,CAAC,MAAM,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACjD;AAED,mDAAmD;AACnD,qBAAa,sBAAsB;IACd,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,iBAAiB;IAE/C,IAAI,CACf,MAAM,EAAE,cAAc,EACtB,eAAe,EAAE,SAAS,MAAM,EAAE,EAClC,WAAW,EAAE,SAAS,MAAM,EAAE,GAC7B,OAAO,CAAC,uBAAuB,CAAC;CAyFpC"}
@@ -0,0 +1,99 @@
1
+ import { posix } from "node:path";
2
+ import ts from "typescript";
3
+ export const virtualProjectRoot = "/__intentpatch_project__";
4
+ export function virtualProjectPath(path) {
5
+ return posix.join(virtualProjectRoot, path);
6
+ }
7
+ /** Git snapshot의 설정만 사용해 TypeScript 경로 별칭을 읽는다. */
8
+ export class TypeScriptConfigLoader {
9
+ files;
10
+ constructor(files) {
11
+ this.files = files;
12
+ }
13
+ async load(target, repositoryPaths, configPaths) {
14
+ const listedPaths = new Set(repositoryPaths);
15
+ const configContents = new Map();
16
+ const parsedConfigs = new Map();
17
+ const visited = new Set();
18
+ const issues = [];
19
+ const collect = async (path) => {
20
+ if (visited.has(path)) {
21
+ return;
22
+ }
23
+ visited.add(path);
24
+ const file = await this.files.read(target, path);
25
+ if (file.kind !== "success") {
26
+ issues.push({
27
+ path,
28
+ reason: file.kind === "missing" ? "TypeScript config is missing" : file.reason,
29
+ });
30
+ return;
31
+ }
32
+ const parsed = ts.parseConfigFileTextToJson(path, file.content);
33
+ if (parsed.error !== undefined || !isRecord(parsed.config)) {
34
+ issues.push({
35
+ path,
36
+ reason: parsed.error === undefined
37
+ ? "TypeScript config must be an object"
38
+ : ts.flattenDiagnosticMessageText(parsed.error.messageText, "\n"),
39
+ });
40
+ return;
41
+ }
42
+ configContents.set(virtualProjectPath(path), file.content);
43
+ parsedConfigs.set(path, parsed.config);
44
+ const extensions = parsed.config.extends;
45
+ const references = Array.isArray(extensions) ? extensions : [extensions];
46
+ for (const reference of references) {
47
+ if (typeof reference !== "string" || !reference.startsWith(".")) {
48
+ continue;
49
+ }
50
+ const extendedPath = resolveExtendedConfig(path, reference, listedPaths);
51
+ if (extendedPath !== undefined) {
52
+ await collect(extendedPath);
53
+ }
54
+ }
55
+ };
56
+ for (const path of configPaths) {
57
+ await collect(path);
58
+ }
59
+ const host = {
60
+ useCaseSensitiveFileNames: true,
61
+ readDirectory: () => [],
62
+ fileExists: (path) => configContents.has(path),
63
+ readFile: (path) => configContents.get(path),
64
+ };
65
+ const optionsByPath = new Map();
66
+ for (const path of configPaths) {
67
+ const config = parsedConfigs.get(path);
68
+ if (config === undefined) {
69
+ continue;
70
+ }
71
+ const parsed = ts.parseJsonConfigFileContent(config, host, posix.dirname(virtualProjectPath(path)), undefined, virtualProjectPath(path));
72
+ optionsByPath.set(path, parsed.options);
73
+ for (const diagnostic of parsed.errors) {
74
+ // 파일 목록은 사용하지 않으므로 빈 readDirectory에 따른 입력 없음 진단만 제외한다.
75
+ if (diagnostic.code !== 18003) {
76
+ issues.push({
77
+ path,
78
+ reason: ts
79
+ .flattenDiagnosticMessageText(diagnostic.messageText, "\n")
80
+ .replaceAll(`${virtualProjectRoot}/`, ""),
81
+ });
82
+ }
83
+ }
84
+ }
85
+ return { optionsByPath, issues };
86
+ }
87
+ }
88
+ function resolveExtendedConfig(configPath, reference, listedPaths) {
89
+ const basePath = posix.normalize(posix.join(posix.dirname(configPath), reference));
90
+ if (basePath === ".." || basePath.startsWith("../") || posix.isAbsolute(basePath)) {
91
+ return undefined;
92
+ }
93
+ const candidates = [basePath, `${basePath}.json`, posix.join(basePath, "tsconfig.json")];
94
+ return candidates.find((candidate) => listedPaths.has(candidate));
95
+ }
96
+ function isRecord(value) {
97
+ return typeof value === "object" && value !== null && !Array.isArray(value);
98
+ }
99
+ //# sourceMappingURL=typescript-config-loader.js.map