intentpatch 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/README.ko.md +37 -21
  2. package/README.md +27 -20
  3. package/dist/application/rules/added-dependency-usage-rule.d.ts.map +1 -1
  4. package/dist/application/rules/added-dependency-usage-rule.js +2 -11
  5. package/dist/application/rules/added-dependency-usage-rule.js.map +1 -1
  6. package/dist/application/rules/public-api-compatibility-rule.d.ts +1 -1
  7. package/dist/application/rules/public-api-compatibility-rule.d.ts.map +1 -1
  8. package/dist/application/rules/public-api-compatibility-rule.js +31 -1
  9. package/dist/application/rules/public-api-compatibility-rule.js.map +1 -1
  10. package/dist/application/rules/public-api-removal-rule.d.ts.map +1 -1
  11. package/dist/application/rules/public-api-removal-rule.js +6 -1
  12. package/dist/application/rules/public-api-removal-rule.js.map +1 -1
  13. package/dist/application/services/analyze-import-impact.d.ts.map +1 -1
  14. package/dist/application/services/analyze-import-impact.js +27 -8
  15. package/dist/application/services/analyze-import-impact.js.map +1 -1
  16. package/dist/application/services/compare-source-symbols.d.ts.map +1 -1
  17. package/dist/application/services/compare-source-symbols.js +3 -0
  18. package/dist/application/services/compare-source-symbols.js.map +1 -1
  19. package/dist/application/services/is-maintained-source-path.d.ts +3 -0
  20. package/dist/application/services/is-maintained-source-path.d.ts.map +1 -0
  21. package/dist/application/services/is-maintained-source-path.js +14 -0
  22. package/dist/application/services/is-maintained-source-path.js.map +1 -0
  23. package/dist/domain/symbol-change.d.ts +9 -2
  24. package/dist/domain/symbol-change.d.ts.map +1 -1
  25. package/dist/domain/symbol-change.js +7 -0
  26. package/dist/domain/symbol-change.js.map +1 -1
  27. package/dist/infrastructure/typescript/javascript-symbol-extractor.d.ts +7 -0
  28. package/dist/infrastructure/typescript/javascript-symbol-extractor.d.ts.map +1 -0
  29. package/dist/infrastructure/typescript/javascript-symbol-extractor.js +105 -0
  30. package/dist/infrastructure/typescript/javascript-symbol-extractor.js.map +1 -0
  31. package/dist/infrastructure/typescript/package-module-reference-extractor.d.ts +3 -5
  32. package/dist/infrastructure/typescript/package-module-reference-extractor.d.ts.map +1 -1
  33. package/dist/infrastructure/typescript/package-module-reference-extractor.js +3 -66
  34. package/dist/infrastructure/typescript/package-module-reference-extractor.js.map +1 -1
  35. package/dist/infrastructure/typescript/parse-typescript-source.js +27 -12
  36. package/dist/infrastructure/typescript/parse-typescript-source.js.map +1 -1
  37. package/dist/infrastructure/typescript/source-module-reference-extractor.d.ts +7 -0
  38. package/dist/infrastructure/typescript/source-module-reference-extractor.d.ts.map +1 -0
  39. package/dist/infrastructure/typescript/source-module-reference-extractor.js +50 -0
  40. package/dist/infrastructure/typescript/source-module-reference-extractor.js.map +1 -0
  41. package/dist/infrastructure/typescript/typescript-module-alias-resolver.d.ts.map +1 -1
  42. package/dist/infrastructure/typescript/typescript-module-alias-resolver.js +16 -1
  43. package/dist/infrastructure/typescript/typescript-module-alias-resolver.js.map +1 -1
  44. package/dist/infrastructure/typescript/typescript-module-reference-extractor.d.ts +3 -5
  45. package/dist/infrastructure/typescript/typescript-module-reference-extractor.d.ts.map +1 -1
  46. package/dist/infrastructure/typescript/typescript-module-reference-extractor.js +3 -35
  47. package/dist/infrastructure/typescript/typescript-module-reference-extractor.js.map +1 -1
  48. package/dist/infrastructure/typescript/typescript-symbol-extractor.d.ts.map +1 -1
  49. package/dist/infrastructure/typescript/typescript-symbol-extractor.js +77 -11
  50. package/dist/infrastructure/typescript/typescript-symbol-extractor.js.map +1 -1
  51. package/dist/presentation/analyze-repository.d.ts.map +1 -1
  52. package/dist/presentation/analyze-repository.js +6 -4
  53. package/dist/presentation/analyze-repository.js.map +1 -1
  54. package/dist/presentation/cli/text-report.d.ts.map +1 -1
  55. package/dist/presentation/cli/text-report.js +1 -0
  56. package/dist/presentation/cli/text-report.js.map +1 -1
  57. package/package.json +2 -1
package/README.ko.md CHANGED
@@ -21,7 +21,7 @@ LLM 없이도 재현 가능한 분석을 제공하고, AI 설명 기능은 선
21
21
 
22
22
  ## 빠른 시작
23
23
 
24
- Node.js 20 이상과 Git이 설치되어 있어야 합니다. npm에 공개된 v0.3.0은 전역 설치 없이
24
+ Node.js 20 이상과 Git이 설치되어 있어야 합니다. npm에 공개된 v0.5.0은 전역 설치 없이
25
25
  실행할 수 있습니다.
26
26
 
27
27
  ```bash
@@ -67,7 +67,7 @@ jobs:
67
67
 
68
68
  - name: Analyze pull request
69
69
  id: intentpatch
70
- uses: xx2xxjaeil/intent-patch@v0.3.0
70
+ uses: xx2xxjaeil/intent-patch@v0.5.0
71
71
  with:
72
72
  fail-on: high
73
73
 
@@ -79,9 +79,10 @@ jobs:
79
79
  path: intentpatch-report
80
80
  ```
81
81
 
82
- Action은 릴리스 버전이나 불변 commit SHA로 고정하는 방식을 권장합니다. v0.3.0에는 pnpm
83
- lockfile/workspace 분석, 새 의존성의 정적 사용 검토, 명시적 요청문 입력이 포함됩니다.
84
- `@main`은 미릴리스 변경을 따라갑니다.
82
+ Action은 릴리스 버전이나 불변 commit SHA로 고정하는 방식을 권장합니다. v0.5.0에는
83
+ 해석 가능한 공개 객체 타입 별칭의 구성원 삭제 탐지와 외부 저장소 변경에 대한 공개 export 삭제
84
+ 규칙의 집중 평가가 포함됩니다. 결과와 한계는 [평가 보고서](./docs/external-repository-evaluation.md)에
85
+ 기록했습니다. `@main`은 미릴리스 변경을 따라갑니다.
85
86
  Action은 PR·push 이벤트의 commit 범위를 자동으로 선택하고 다음 결과를 남깁니다.
86
87
 
87
88
  - GitHub Actions Job Summary의 Markdown 보고서
@@ -128,15 +129,16 @@ LOW 구현체가 하나뿐인 추상화 추가
128
129
  분석 결과는 단순한 경고 문구가 아니라 관련 파일, 규칙 ID, 판단 근거와 함께 제공하는 것을
129
130
  원칙으로 합니다.
130
131
 
131
- 실제 IntentPatch 커밋을 분석한 [독립 실행형 HTML 예시](./docs/examples/intent-input-change.html)와
132
- [3건의 검증 결과·재현 명령](./docs/real-world-evaluation.md)을 볼 수 있습니다. 저장소를 clone한
132
+ 실제 커밋을 분석한 [독립 실행형 HTML 예시](./docs/examples/intent-input-change.html),
133
+ [자체 저장소 변경 3건의 사례 연구](./docs/real-world-evaluation.md),
134
+ [외부 저장소 변경 15건의 평가 결과](./docs/external-repository-evaluation.md)를 볼 수 있습니다. 저장소를 clone한
133
135
  뒤 HTML 파일을 브라우저에서 열어 주세요. GitHub 파일 화면은 렌더링 대신 소스를 보여줄 수
134
136
  있습니다.
135
137
 
136
138
  ## 현재 구현된 기능
137
139
 
138
140
  현재 소스는 Git 변경사항 수집, 루트·npm workspace `package.json`의 직접 dependency와 npm lockfile 분석, TypeScript
139
- 최상위 심볼과 공개 API 변경 분석, 기존 구현 중복·단일 구현 추상화 신호, import graph 기반
141
+ 최상위 TypeScript·JavaScript 심볼과 공개 export 변경 분석, 기존 구현 중복·단일 구현 추상화 신호, import graph 기반
140
142
  영향 범위와 테스트 동반 변경 분석을 제공합니다.
141
143
 
142
144
  - `HEAD`와 현재 working tree 비교
@@ -164,16 +166,17 @@ LOW 구현체가 하나뿐인 추상화 추가
164
166
  - CI 품질 게이트를 위한 `--fail-on` 종료 코드
165
167
  - 설치된 패키지 버전을 확인하는 `--version` 명령
166
168
  - `.ts`·`.tsx` 파일의 최상위 함수·클래스·인터페이스·타입 별칭 추출
169
+ - `.js`·`.jsx`·`.mjs`·`.cjs`의 최상위 함수·클래스·변수와 식별 가능한 ESM export 추적
167
170
  - 심볼 추가·수정·삭제 탐지와 소스 위치 표시
168
171
  - 직접 `export`된 선언, 로컬 export 목록과 외부 re-export를 공개 심볼 근거에 보존
169
172
  - 공개 심볼 삭제와 `export` 해제를 호환성 위험 `high` finding으로 탐지
170
- - 공개 함수의 기존 호출 시그니처 제거와 공개 인터페이스의 호환성 파괴를 `high` finding으로 탐지
173
+ - 공개 함수의 기존 호출 시그니처 제거, 공개 인터페이스의 호환성 파괴, 해석 가능한 공개 객체 타입 별칭의 구성원 삭제를 `high` finding으로 탐지
171
174
  - 구현이 추가된 기존 overload는 제외하고 기존 overload가 사라진 경우만 함수 계약 변경으로 판정
172
175
  - 공백과 주석을 제외한 구현 토큰이 같은 신규 함수와 기존 함수를 재사용 후보 `medium` finding으로 탐지
173
176
  - 신규 인터페이스를 명시적으로 구현하는 클래스가 하나뿐이면 추상화 검토 `low` finding으로 탐지
174
177
  - rename 전후 파일 경로를 사용한 심볼 비교
175
178
  - 구문 오류가 있는 파일을 누락시키지 않고 분석 불가 근거로 보고
176
- - `.ts`·`.tsx` 파일의 상대 경로 정적 import와 re-export 관계 수집
179
+ - JS/TS 소스의 상대 경로 정적 import·re-export·문자열 `require()`·`import()` 관계 수집
177
180
  - 가장 가까운 `tsconfig.json`·`jsconfig.json`의 `paths`·`baseUrl`과 상대 경로 `extends`를
178
181
  사용해 로컬 별칭 import 해석
179
182
  - `.js`·`.jsx`·`.mjs`·`.cjs` specifier를 대응하는 TypeScript 소스로 해석
@@ -191,7 +194,7 @@ LOW 구현체가 하나뿐인 추상화 추가
191
194
  - Pull Request·push commit 범위를 자동 판별하는 GitHub Action
192
195
  - GitHub Job Summary, workflow annotation, JSON·HTML artifact용 보고서 생성
193
196
 
194
- 아직 lockfile 전이 dependency의 부모 귀속 분석, JavaScript·메서드 구조 분석과 AI 리뷰
197
+ 아직 lockfile 전이 dependency의 부모 귀속 분석, JavaScript 중복 구현·메서드 구조 분석과 AI 리뷰
195
198
  기능은 구현되지 않았습니다.
196
199
 
197
200
  ## 상세 사용법
@@ -407,6 +410,9 @@ npm run check
407
410
  - 생성한 npm tarball을 임시 프로젝트에 설치하고 실행하는 패키지 통합 테스트
408
411
  - 계층 간 의존 방향을 검증하는 아키텍처 테스트
409
412
 
413
+ 외부 저장소의 실제 변경 15건에서 공개 export 삭제 경고를 사람이 검토한 기대 결과와 비교하는
414
+ 방법은 [외부 저장소 평가 문서](./docs/external-repository-evaluation.md)에 정리했습니다.
415
+
410
416
  프로덕션 빌드만 확인하려면 다음 명령을 사용합니다.
411
417
 
412
418
  ```bash
@@ -421,7 +427,7 @@ npm pack --dry-run
421
427
 
422
428
  ## 릴리스
423
429
 
424
- `v0.1.0`처럼 `package.json` 버전과 일치하는 태그를 기본 브랜치의 커밋에 push하면 릴리스
430
+ `v0.5.0`처럼 `package.json` 버전과 일치하는 태그를 기본 브랜치의 커밋에 push하면 릴리스
425
431
  워크플로가 다음 작업을 순서대로 수행합니다.
426
432
 
427
433
  1. 태그·버전·기본 브랜치 포함 여부 검증
@@ -439,6 +445,7 @@ npm provenance가 자동 생성됩니다. 아직 npm에 존재하지 않는 신
439
445
  1. ✅ `package.json` 직접 dependency 변경 탐지와 규칙 엔진
440
446
  2. ✅ TypeScript AST 기반 함수·클래스·인터페이스·타입 변경 분석
441
447
  3. ✅ 상대 경로 정적 import graph 기반 변경 영향 범위 계산
448
+ - ✅ JS/JSX의 ESM·문자열 `require()`·동적 import 관계
442
449
  - ✅ 가장 가까운 TypeScript 프로젝트 설정의 `paths`·`baseUrl` 별칭 해석
443
450
  4. ✅ Change Contract 기반 예상 범위 이탈과 변경량 예산 탐지
444
451
  5. ✅ Contract 기반 관련 테스트 변경 누락 탐지
@@ -449,6 +456,7 @@ npm provenance가 자동 생성됩니다. 아직 npm에 존재하지 않는 신
449
456
  - ✅ pnpm workspace manifest의 직접 dependency 변경
450
457
  - Yarn adapter
451
458
  7. ✅ 직접 export된 공개 심볼 삭제와 export 해제 탐지
459
+ - ✅ JavaScript ESM의 이름 있는 export·default export 삭제 탐지
452
460
  8. ✅ 단일 HTML 대시보드와 SVG 기반 dependency 영향 그래프
453
461
  9. ✅ re-export·함수/인터페이스 호환성과 기존 코드 중복 가능성 탐지
454
462
  10. ✅ 구현체가 하나뿐인 신규 인터페이스 탐지
@@ -481,11 +489,17 @@ npm provenance가 자동 생성됩니다. 아직 npm에 존재하지 않는 신
481
489
  우선합니다. 그 외 glob 문법과 catalog는 해석하지 않습니다.
482
490
  - Yarn lockfile과 런타임에서의 실제 dependency 사용 여부는 아직 분석하지 않습니다.
483
491
  - working tree의 `package-lock.json`·`pnpm-lock.yaml`은 10 MiB, 그 외 텍스트 snapshot은 1 MiB로 제한합니다.
484
- - 심볼 분석은 `.ts`와 `.tsx`의 이름이 있는 최상위 함수, 클래스, 인터페이스, 타입
492
+ - TypeScript 심볼 분석은 `.ts`와 `.tsx`의 이름이 있는 최상위 함수, 클래스, 인터페이스, 타입
485
493
  별칭만 지원합니다.
486
- - 공개 API 분석은 이름이 있는 최상위 함수·인터페이스, 로컬 `export { name }`, 외부
487
- `export { name } from`, `export * from`을 지원합니다. package `exports`, 익명 default export,
488
- 클래스·타입 별칭의 세부 계약은 아직 해석하지 않습니다.
494
+ - JavaScript 심볼 분석은 `.js`·`.jsx`·`.mjs`·`.cjs`의 최상위 함수·클래스·변수 및 식별 가능한
495
+ ESM export를 추적합니다. CommonJS `module.exports`는 아직 공개 API 분석 대상이 아닙니다.
496
+ - TypeScript 공개 API 분석은 이름이 있는 최상위 함수·인터페이스와 객체 리터럴, 같은 파일의
497
+ 비제네릭 별칭·교집합으로 구성된 공개 타입 별칭의 구성원 삭제를 지원합니다. 로컬
498
+ `export { name }`, 외부 `export { name } from`, `export * from`은 export 근거로 추적합니다.
499
+ JavaScript는 이름 있는 ESM export와 default export 삭제를 탐지하지만 함수의 타입 호환성을
500
+ 추정하지 않습니다. package `exports`, CommonJS `module.exports`, 클래스 계약, 제네릭 별칭
501
+ 인스턴스화, 합집합, 파일 간 타입 참조와 완전한 타입 할당 가능성은 해석하지 않습니다. 지원하지
502
+ 않는 타입 별칭 형태에서는 구성원 삭제 finding을 내지 않습니다.
489
503
  - 함수 호환성은 명시된 파라미터·반환 타입 텍스트를 비교합니다. 추론된 반환 타입 변화나
490
504
  TypeScript의 구조적 타입 할당 가능성까지 판정하지 않습니다.
491
505
  - 중복 구현 후보는 새로 추가된 최상위 함수와 기존 최상위 함수의 토큰이 공백·주석을 제외하고
@@ -493,17 +507,19 @@ npm provenance가 자동 생성됩니다. 아직 npm에 존재하지 않는 신
493
507
  의미적으로만 같은 구현은 탐지하지 않습니다.
494
508
  - 단일 구현 추상화는 새 인터페이스를 `implements`로 명시한 이름 있는 클래스가 정확히 하나일 때만
495
509
  보고합니다. TypeScript의 구조적 구현, factory 반환 타입과 런타임 등록은 계산하지 않습니다.
496
- - 메서드, 변수 선언, enum, 중첩 선언, JavaScript 파일은 아직 심볼 분석 대상이 아닙니다.
510
+ - 메서드, TypeScript 변수 선언, enum, 중첩 선언은 아직 심볼 분석 대상이 아닙니다.
497
511
  - 선언 내부의 포맷이나 주석 변경도 심볼 수정으로 집계될 수 있습니다.
498
- - 영향 분석은 `.ts`·`.tsx` 파일의 정적 `import`, side-effect import, `export ... from`,
499
- `import = require()`를 대상으로 합니다. 로컬 별칭은 가장 가까운 `tsconfig.json` 또는
512
+ - 영향 분석은 JS/TS 소스의 정적 `import`, side-effect import, `export ... from`,
513
+ `import = require()` 및 문자열 `require()`·`import()`를 대상으로 합니다. 로컬 별칭은 가장 가까운 `tsconfig.json` 또는
500
514
  `jsconfig.json`과 상대 경로 `extends`를 해석합니다.
501
515
  - 외부 패키지 설정을 참조하는 `extends`, project references, 임의 이름의 설정 파일,
502
- package `imports`·`exports`, 외부 package import, dynamic `import()`, 일반 `require()`는
503
- 아직 그래프에 포함하지 않습니다.
516
+ package `imports`·`exports`, 외부 package import, 계산된 모듈 경로는 아직 그래프에서
517
+ 해석하지 않습니다.
504
518
  - 영향 그래프는 비교 결과점(working tree 또는 head ref)의 파일을 기준으로 만듭니다. 따라서
505
519
  삭제된 모듈을 가리키던 과거 import의 영향은 현재 단계에서 계산할 수 없습니다.
506
520
  - 영향 분석용 소스 파일은 파일당 1 MiB로 제한하며, symbolic link는 읽지 않습니다.
521
+ - `dist`·`build`·`coverage`·`action-dist`·`node_modules` 같은 생성 디렉터리는 Git 변경량에는
522
+ 포함하지만 심볼·import graph·정적 package 참조 분석에서는 제외합니다.
507
523
  - IntentPatch는 자연어 intent만으로 예상 경로를 추측하지 않습니다. 범위 판단은 Contract에 명시한
508
524
  `include`와 `allow`를 기준으로 수행합니다.
509
525
  - 경로 패턴은 저장소 상대 경로와 `*`, `**`, `?`만 지원합니다. 부정 패턴과 brace 확장은 아직
package/README.md CHANGED
@@ -18,7 +18,7 @@ IntentPatch combines **Git diff analysis, static analysis, and dependency analys
18
18
 
19
19
  ## Quick start
20
20
 
21
- IntentPatch requires Node.js 20 or later and Git. Run the published v0.3.0 CLI without
21
+ IntentPatch requires Node.js 20 or later and Git. Run the published v0.5.0 CLI without
22
22
  installing it globally:
23
23
 
24
24
  ```bash
@@ -62,7 +62,7 @@ jobs:
62
62
 
63
63
  - name: Analyze pull request
64
64
  id: intentpatch
65
- uses: xx2xxjaeil/intent-patch@v0.3.0
65
+ uses: xx2xxjaeil/intent-patch@v0.5.0
66
66
  with:
67
67
  fail-on: high
68
68
 
@@ -74,9 +74,10 @@ jobs:
74
74
  path: intentpatch-report
75
75
  ```
76
76
 
77
- Pin the action to a released version or an immutable commit SHA. The v0.3.0 release adds pnpm
78
- lockfile/workspace analysis, static dependency-use review, and explicit request input; `@main`
79
- follows unreleased changes.
77
+ Pin the action to a released version or an immutable commit SHA. The v0.5.0 release adds
78
+ removed-member detection for resolvable public object type aliases and a focused evaluation of
79
+ public-export removal on external changes. See [the evaluation report](./docs/external-repository-evaluation.md)
80
+ for the results and limits. `@main` follows unreleased changes.
80
81
 
81
82
  The action detects the comparison range for pull request and push events and produces:
82
83
 
@@ -122,14 +123,15 @@ LOW New abstraction has only one implementation
122
123
 
123
124
  Every finding includes the relevant file, a stable rule ID, and evidence for the decision instead of only presenting an unexplained warning.
124
125
 
125
- For a report generated from an actual IntentPatch commit, see the
126
- [standalone HTML example](./docs/examples/intent-input-change.html) and the
127
- [three-case evaluation with reproduction commands](./docs/real-world-evaluation.md). After cloning,
126
+ For reports generated from actual commits, see the
127
+ [standalone HTML example](./docs/examples/intent-input-change.html), the
128
+ [three-case self-repository study](./docs/real-world-evaluation.md), and the
129
+ [external evaluation of 15 changes](./docs/external-repository-evaluation.md). After cloning,
128
130
  open the HTML file locally in a browser; GitHub may show its source rather than render it.
129
131
 
130
132
  ## Implemented capabilities
131
133
 
132
- The current source tree analyzes Git changes, direct dependencies in the root `package.json`, top-level TypeScript symbols and public API changes, possible duplicate implementations, single-implementation abstractions, import-graph impact, and related test changes.
134
+ The current source tree analyzes Git changes, direct dependencies in the root `package.json`, top-level TypeScript and JavaScript symbols and public exports, possible duplicate implementations, single-implementation abstractions, import-graph impact, and related test changes.
133
135
 
134
136
  ### Git and reporting
135
137
 
@@ -160,10 +162,11 @@ The current source tree analyzes Git changes, direct dependencies in the root `p
160
162
  - Analyze changed pnpm workspace manifests selected by `pnpm-workspace.yaml`, including exclusion patterns.
161
163
  - Report changes to workspace patterns and manifest moves into or out of a configured workspace.
162
164
  - Extract top-level named functions, classes, interfaces, and type aliases from `.ts` and `.tsx` files.
165
+ - Track named top-level JavaScript/JSX functions, classes, variables, ESM export aliases, and default exports without inferring type compatibility.
163
166
  - Detect symbol additions, modifications, and removals with source locations.
164
167
  - Preserve direct exports, local export lists, and external re-exports as public-symbol evidence.
165
168
  - Report removed public symbols and removed exports as high-severity compatibility risks.
166
- - Detect removed public function call signatures and incompatible public interface changes.
169
+ - Detect removed public function call signatures, incompatible public interface changes, and removed members of resolvable public object type aliases.
167
170
  - Exclude overloads that only gain an implementation while reporting previously available overloads that disappear.
168
171
  - Find newly added functions whose normalized implementation matches an existing function.
169
172
  - Report a newly added interface when exactly one class explicitly implements it.
@@ -172,7 +175,7 @@ The current source tree analyzes Git changes, direct dependencies in the root `p
172
175
 
173
176
  ### Impact, scope, and tests
174
177
 
175
- - Build relative static import and re-export relationships for `.ts` and `.tsx` files.
178
+ - Build relative string-literal import, re-export, `require()`, and `import()` relationships for TypeScript and JavaScript modules, including JSX.
176
179
  - Resolve local imports through the nearest `tsconfig.json` or `jsconfig.json` `paths` and
177
180
  `baseUrl`, including relative `extends` files.
178
181
  - Resolve `.js`, `.jsx`, `.mjs`, and `.cjs` import specifiers to matching TypeScript sources.
@@ -188,7 +191,7 @@ The current source tree analyzes Git changes, direct dependencies in the root `p
188
191
  - Report source files without a related test change as medium-severity findings.
189
192
  - Support repository-relative `*`, `**`, and `?` path patterns.
190
193
 
191
- Transitive lockfile dependency provenance, JavaScript and method-level structure analysis, and optional AI review are not implemented yet.
194
+ Transitive lockfile dependency provenance, JavaScript duplicate-implementation and method-level structure analysis, and optional AI review are not implemented yet.
192
195
 
193
196
  ## CLI usage
194
197
 
@@ -395,6 +398,9 @@ This command runs:
395
398
  - architecture tests that enforce dependency direction;
396
399
  - a reproducibility check for the bundled GitHub Action.
397
400
 
401
+ For a focused, reproducible check of public-export-removal findings against 15 reviewed changes in
402
+ external repositories, see the [external evaluation](./docs/external-repository-evaluation.md).
403
+
398
404
  Run only the production build with:
399
405
 
400
406
  ```bash
@@ -409,7 +415,7 @@ npm pack --dry-run
409
415
 
410
416
  ## Release process
411
417
 
412
- Pushing a tag such as `v0.1.0`, matching the version in `package.json`, from a commit contained in the default branch triggers the release workflow:
418
+ Pushing a tag such as `v0.5.0`, matching the version in `package.json`, from a commit contained in the default branch triggers the release workflow:
413
419
 
414
420
  1. Validate the tag, package version, and default-branch ancestry.
415
421
  2. Run the full quality suite and inspect the npm package with a dry run.
@@ -424,6 +430,7 @@ No long-lived npm token is stored as a GitHub secret. Public packages published
424
430
  2. ✅ TypeScript AST analysis for functions, classes, interfaces, and types
425
431
  3. ✅ Relative static import graph and change-impact calculation
426
432
  - ✅ TypeScript `paths` and `baseUrl` aliases from the nearest project config
433
+ - ✅ JS/JSX ESM, CommonJS `require()`, and string-literal dynamic imports
427
434
  4. ✅ Change Contract scope and change-budget analysis
428
435
  5. ✅ Contract-based detection of missing related test changes
429
436
  6. Package-manager adapters for lockfiles and workspaces
@@ -433,6 +440,7 @@ No long-lived npm token is stored as a GitHub secret. Public packages published
433
440
  - ✅ pnpm workspace manifest dependency changes
434
441
  - Yarn adapter
435
442
  7. ✅ Detection of removed public exports
443
+ - ✅ Named and default ESM exports in JavaScript, without inferred type compatibility
436
444
  8. ✅ Standalone HTML dashboard and SVG dependency-impact graph
437
445
  9. ✅ Re-export and function/interface compatibility checks plus possible code duplication
438
446
  10. ✅ Detection of newly introduced single-implementation interfaces
@@ -455,21 +463,20 @@ No long-lived npm token is stored as a GitHub secret. Public packages published
455
463
  - pnpm workspace detection reads `pnpm-workspace.yaml` `packages` patterns with `*`, `**`, `?`, and leading `!` exclusions. When both npm and pnpm workspace settings exist, pnpm settings take precedence to avoid duplicate findings. Other glob features and pnpm catalogs are not interpreted.
456
464
  - Yarn lockfiles and runtime dependency usage are not analyzed yet.
457
465
  - Working-tree `package-lock.json` and `pnpm-lock.yaml` files are limited to 10 MiB; other text snapshots retain the 1 MiB limit.
458
- - Symbol analysis supports named top-level functions, classes, interfaces, and type aliases in `.ts` and `.tsx` files.
459
- - Public API analysis supports named top-level functions and interfaces, local `export { name }`, external `export { name } from`, and `export * from`. Package `exports`, anonymous default exports, and detailed class or type-alias contracts are not interpreted yet.
466
+ - TypeScript symbol analysis supports named top-level functions, classes, interfaces, and type aliases in `.ts` and `.tsx` files. JavaScript symbol analysis supports named top-level functions, classes, variables, and identifiable ESM exports in `.js`, `.jsx`, `.mjs`, and `.cjs` files.
467
+ - TypeScript public API analysis supports named top-level functions and interfaces, plus member removal from exported object type aliases composed of type literals and same-file, non-generic aliases/intersections. Local `export { name }`, external `export { name } from`, and `export * from` are tracked as export evidence. JavaScript supports identifiable named and default ESM export removal, but does not infer function signatures. Package `exports`, CommonJS `module.exports`, class contracts, generic alias instantiation, unions, cross-file type references, and full type assignability are not interpreted yet. Unsupported type-alias shapes do not produce member-removal findings.
460
468
  - Function compatibility compares explicitly written parameter and return-type text. It does not evaluate inferred return types or full TypeScript structural assignability.
461
469
  - Duplicate candidates require a newly added top-level function and an existing top-level function to have exactly the same normalized tokens after comments and whitespace are removed, with at least 12 body tokens. Renamed identifiers, methods, and semantically equivalent implementations are not detected.
462
470
  - A single-implementation abstraction is reported only when exactly one named class explicitly uses `implements` for a new interface. Structural implementation, factory return types, and runtime registration are not calculated.
463
- - Methods, variable declarations, enums, nested declarations, and JavaScript files are not included in symbol analysis.
471
+ - Methods, TypeScript variable declarations, enums, and nested declarations are not included in symbol analysis.
464
472
  - Formatting or comment changes inside a declaration can be counted as symbol modifications.
465
- - Impact analysis covers static `import`, side-effect imports, `export ... from`, and
466
- `import = require()` in `.ts` and `.tsx` files. Local aliases use the nearest `tsconfig.json` or
473
+ - Impact analysis covers static `import`, side-effect imports, `export ... from`, `import = require()`, and string-literal `require()` and `import()` in JS/TS source files. Local aliases use the nearest `tsconfig.json` or
467
474
  `jsconfig.json`, with relative `extends` support.
468
475
  - Package-based config `extends`, project references, arbitrary config filenames, package
469
- `imports`/`exports`, external package imports, dynamic `import()`, and ordinary `require()` are
470
- not included in the graph.
476
+ `imports`/`exports`, external package imports, and computed module loads are not resolved in the graph.
471
477
  - The graph is built from files at the comparison result point: the working tree or head ref. Impact from historical imports that referenced a deleted module cannot be calculated yet.
472
478
  - Source files used for impact analysis are limited to 1 MiB per file, and symbolic links are not read.
479
+ - Generated directories such as `dist`, `build`, `coverage`, `action-dist`, and `node_modules` remain visible in Git change counts but are excluded from symbol, import-graph, and static package-reference scans.
473
480
  - IntentPatch does not infer expected paths from natural-language intent. Scope decisions use the contract's explicit `include` and `allow` patterns.
474
481
  - Path patterns support only repository-relative `*`, `**`, and `?`; negation and brace expansion are not supported.
475
482
  - `maxLines` sums only measurable added and deleted lines in text files. Binary or unmeasurable files are not treated as zero lines, but their size is not included in the budget.
@@ -1 +1 @@
1
- {"version":3,"file":"added-dependency-usage-rule.d.ts","sourceRoot":"","sources":["../../../src/application/rules/added-dependency-usage-rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AACvF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAgBzE,oDAAoD;AACpD,qBAAa,wBAAyB,YAAW,YAAY;IAEzD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,mBAAmB;gBAHnB,SAAS,EAAE,kBAAkB,EAC7B,KAAK,EAAE,iBAAiB,EACxB,SAAS,EAAE,wBAAwB,EACnC,mBAAmB,EAAE,mBAAmB;IAG9C,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC;CAoE5E"}
1
+ {"version":3,"file":"added-dependency-usage-rule.d.ts","sourceRoot":"","sources":["../../../src/application/rules/added-dependency-usage-rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AACvF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAOzE,oDAAoD;AACpD,qBAAa,wBAAyB,YAAW,YAAY;IAEzD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,mBAAmB;gBAHnB,SAAS,EAAE,kBAAkB,EAC7B,KAAK,EAAE,iBAAiB,EACxB,SAAS,EAAE,wBAAwB,EACnC,mBAAmB,EAAE,mBAAmB;IAG9C,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC;CAkE5E"}
@@ -1,16 +1,8 @@
1
+ import { isMaintainedSourcePath } from "../services/is-maintained-source-path.js";
1
2
  import { NpmWorkspaceDependencyRule } from "./npm-workspace-dependency-rule.js";
2
3
  import { PackageDependencyRule } from "./package-dependency-rule.js";
3
4
  import { PnpmWorkspaceDependencyRule } from "./pnpm-workspace-dependency-rule.js";
4
5
  const rootManifest = "package.json";
5
- const generatedDirectories = new Set([
6
- "node_modules",
7
- "dist",
8
- "build",
9
- "coverage",
10
- "action-dist",
11
- ".next",
12
- ".turbo",
13
- ]);
14
6
  /** 새 직접 dependency의 정적 소스 참조가 없을 때만 검토 후보를 제시한다. */
15
7
  export class AddedDependencyUsageRule {
16
8
  snapshots;
@@ -33,8 +25,7 @@ export class AddedDependencyUsageRule {
33
25
  finding.ruleId === "dependency/new-development");
34
26
  if (added.length === 0)
35
27
  return [];
36
- const paths = (await this.files.listPaths(context.target)).filter((path) => this.extractor.supports(path) &&
37
- !path.split("/").some((part) => generatedDirectories.has(part)));
28
+ const paths = (await this.files.listPaths(context.target)).filter((path) => this.extractor.supports(path) && isMaintainedSourcePath(path));
38
29
  const referenced = new Set();
39
30
  if (paths.length === 0 || paths.length > 5_000)
40
31
  return [];
@@ -1 +1 @@
1
- {"version":3,"file":"added-dependency-usage-rule.js","sourceRoot":"","sources":["../../../src/application/rules/added-dependency-usage-rule.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAElF,MAAM,YAAY,GAAG,cAAc,CAAC;AACpC,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IACnC,cAAc;IACd,MAAM;IACN,OAAO;IACP,UAAU;IACV,aAAa;IACb,OAAO;IACP,QAAQ;CACT,CAAC,CAAC;AAEH,oDAAoD;AACpD,MAAM,OAAO,wBAAwB;IAEhB;IACA;IACA;IACA;IAJnB,YACmB,SAA6B,EAC7B,KAAwB,EACxB,SAAmC,EACnC,mBAAwC;QAHxC,cAAS,GAAT,SAAS,CAAoB;QAC7B,UAAK,GAAL,KAAK,CAAmB;QACxB,cAAS,GAAT,SAAS,CAA0B;QACnC,wBAAmB,GAAnB,mBAAmB,CAAqB;IACxD,CAAC;IAEG,KAAK,CAAC,OAAO,CAAC,OAAwB;QAC3C,MAAM,gBAAgB,GAAG,CACvB,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,IAAI,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;YACxE,IAAI,0BAA0B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;YAC/D,IAAI,2BAA2B,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;SAC3F,CAAC,CACH,CAAC,IAAI,EAAE,CAAC;QACT,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CACnC,CAAC,OAAO,EAAE,EAAE,CACV,OAAO,CAAC,MAAM,KAAK,2BAA2B;YAC9C,OAAO,CAAC,MAAM,KAAK,4BAA4B,CAClD,CAAC;QACF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAElC,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAC/D,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC7B,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAClE,CAAC;QACF,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK;YAAE,OAAO,EAAE,CAAC;QAC1D,IAAI,QAAQ,GAAG,IAAI,CAAC;QAEpB,sDAAsD;QACtD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,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,QAAQ,GAAG,KAAK,CAAC;gBACjB,MAAM;YACR,CAAC;YACD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9D,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,IAAI,UAAU,CAAC,mBAAmB,KAAK,IAAI,EAAE,CAAC;gBAC7E,QAAQ,GAAG,KAAK,CAAC;gBACjB,MAAM;YACR,CAAC;YACD,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;gBAC9C,MAAM,WAAW,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;gBACxD,IAAI,WAAW,KAAK,SAAS;oBAAE,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QACD,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAC;QAEzB,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;YACtC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO,EAAE,CAAC;YAChE,OAAO;gBACL;oBACE,MAAM,EAAE,gCAAgC;oBACxC,QAAQ,EAAE,KAAK;oBACf,KAAK,EAAE,+CAA+C;oBACtD,WAAW,EAAE,GAAG,IAAI,iBAAiB,OAAO,CAAC,IAAI,gHAAgH;oBACjK,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,QAAQ,EAAE;wBACR,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;wBACzC,YAAY,EAAE,KAAK,CAAC,MAAM;wBAC1B,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,KAAK,SAAS;4BAC1C,CAAC,CAAC,EAAE;4BACJ,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;wBAC9C,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,KAAK,SAAS;4BAC/C,CAAC,CAAC,EAAE;4BACJ,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;qBACzD;iBACgB;aACpB,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED,SAAS,wBAAwB,CAAC,SAAiB;IACjD,IACE,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;QACzB,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;QACzB,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;QACzB,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC;QAE7B,OAAO,SAAS,CAAC;IACnB,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/F,CAAC"}
1
+ {"version":3,"file":"added-dependency-usage-rule.js","sourceRoot":"","sources":["../../../src/application/rules/added-dependency-usage-rule.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { Finding } from "../../domain/finding.js";
2
2
  import type { AnalysisContext, AnalysisRule } from "../ports/analysis-rule.js";
3
- /** 공개 함수와 인터페이스의 이전 계약을 더 이상 만족하지 않는 변경을 찾는다. */
3
+ /** 공개 함수·인터페이스 계약과 공개 객체 타입의 구성원 삭제를 찾는다. */
4
4
  export declare class PublicApiCompatibilityRule implements AnalysisRule {
5
5
  analyze(context: AnalysisContext): Promise<readonly Finding[]>;
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"public-api-compatibility-rule.d.ts","sourceRoot":"","sources":["../../../src/application/rules/public-api-compatibility-rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAOvD,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE/E,iDAAiD;AACjD,qBAAa,0BAA2B,YAAW,YAAY;IAChD,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC;CAG5E"}
1
+ {"version":3,"file":"public-api-compatibility-rule.d.ts","sourceRoot":"","sources":["../../../src/application/rules/public-api-compatibility-rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAQvD,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE/E,6CAA6C;AAC7C,qBAAa,0BAA2B,YAAW,YAAY;IAChD,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC;CAG5E"}
@@ -1,4 +1,4 @@
1
- /** 공개 함수와 인터페이스의 이전 계약을 더 이상 만족하지 않는 변경을 찾는다. */
1
+ /** 공개 함수·인터페이스 계약과 공개 객체 타입의 구성원 삭제를 찾는다. */
2
2
  export class PublicApiCompatibilityRule {
3
3
  async analyze(context) {
4
4
  return (context.symbolChanges?.changes ?? []).flatMap(toFinding);
@@ -19,8 +19,35 @@ function toFinding(change) {
19
19
  if (change.beforePublicApi.kind === "interface" && change.afterPublicApi.kind === "interface") {
20
20
  return interfaceFinding(change, change.beforePublicApi, change.afterPublicApi);
21
21
  }
22
+ if (change.beforePublicApi.kind === "type-alias" && change.afterPublicApi.kind === "type-alias") {
23
+ return typeAliasFinding(change, change.beforePublicApi, change.afterPublicApi);
24
+ }
22
25
  return [];
23
26
  }
27
+ function typeAliasFinding(change, before, after) {
28
+ const currentMembers = new Set(after.members.map(memberIdentity));
29
+ const removedMembers = [
30
+ ...new Set(before.members
31
+ .filter((member) => !currentMembers.has(memberIdentity(member)))
32
+ .map((member) => member.name)),
33
+ ].sort();
34
+ if (removedMembers.length === 0)
35
+ return [];
36
+ return [
37
+ {
38
+ ruleId: "api/public-type-member-removed",
39
+ severity: "high",
40
+ title: "Public type member removed",
41
+ description: `The exported type ${change.name} no longer contains every previous member.`,
42
+ file: change.path,
43
+ evidence: {
44
+ symbolName: change.name,
45
+ removedMembers: removedMembers.join(", "),
46
+ ...(change.afterLine === undefined ? {} : { currentLine: change.afterLine }),
47
+ },
48
+ },
49
+ ];
50
+ }
24
51
  function functionFinding(change, before, after) {
25
52
  const currentSignatures = new Set(after.signatures);
26
53
  const removedSignatures = before.signatures.filter((signature) => !currentSignatures.has(signature));
@@ -86,6 +113,9 @@ function interfaceBreakingReasons(before, after) {
86
113
  function memberContract(member) {
87
114
  return [member.memberKind, member.name, member.optional, member.signature].join("\0");
88
115
  }
116
+ function memberIdentity(member) {
117
+ return [member.memberKind, member.name].join("\0");
118
+ }
89
119
  function sameValues(left, right) {
90
120
  return left.length === right.length && left.every((value, index) => value === right[index]);
91
121
  }
@@ -1 +1 @@
1
- {"version":3,"file":"public-api-compatibility-rule.js","sourceRoot":"","sources":["../../../src/application/rules/public-api-compatibility-rule.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"public-api-compatibility-rule.js","sourceRoot":"","sources":["../../../src/application/rules/public-api-compatibility-rule.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"public-api-removal-rule.d.ts","sourceRoot":"","sources":["../../../src/application/rules/public-api-removal-rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE/E,kDAAkD;AAClD,qBAAa,oBAAqB,YAAW,YAAY;IAC1C,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC;CAG5E"}
1
+ {"version":3,"file":"public-api-removal-rule.d.ts","sourceRoot":"","sources":["../../../src/application/rules/public-api-removal-rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE/E,kDAAkD;AAClD,qBAAa,oBAAqB,YAAW,YAAY;IAC1C,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC;CAa5E"}
@@ -1,7 +1,12 @@
1
1
  /** 확인 가능한 공개 심볼의 삭제와 export 해제를 호환성 위험으로 보고한다. */
2
2
  export class PublicApiRemovalRule {
3
3
  async analyze(context) {
4
- return (context.symbolChanges?.changes ?? []).flatMap(toFinding);
4
+ const changes = context.symbolChanges?.changes ?? [];
5
+ const currentExports = new Set(changes
6
+ .filter((change) => change.afterExported === true)
7
+ .map((change) => `${change.path}\0${change.name}`));
8
+ // 구현 종류가 바뀌어도 같은 파일에서 공개 이름이 유지되면 삭제로 보고하지 않는다.
9
+ return changes.flatMap((change) => currentExports.has(`${change.path}\0${change.name}`) ? [] : toFinding(change));
5
10
  }
6
11
  }
7
12
  function toFinding(change) {
@@ -1 +1 @@
1
- {"version":3,"file":"public-api-removal-rule.js","sourceRoot":"","sources":["../../../src/application/rules/public-api-removal-rule.ts"],"names":[],"mappings":"AAIA,kDAAkD;AAClD,MAAM,OAAO,oBAAoB;IACxB,KAAK,CAAC,OAAO,CAAC,OAAwB;QAC3C,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACnE,CAAC;CACF;AAED,SAAS,SAAS,CAAC,MAAoB;IACrC,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,IAAI,MAAM,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;QACtE,OAAO;YACL;gBACE,MAAM,EAAE,6BAA6B;gBACrC,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,yBAAyB;gBAChC,WAAW,EAAE,gBAAgB,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,eAAe;gBAC5E,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,QAAQ,EAAE;oBACR,UAAU,EAAE,MAAM,CAAC,IAAI;oBACvB,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,GAAG,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;iBAChF;aACF;SACF,CAAC;IACJ,CAAC;IAED,IACE,MAAM,CAAC,UAAU,KAAK,UAAU;QAChC,MAAM,CAAC,cAAc,KAAK,IAAI;QAC9B,MAAM,CAAC,aAAa,KAAK,KAAK,EAC9B,CAAC;QACD,OAAO;YACL;gBACE,MAAM,EAAE,oBAAoB;gBAC5B,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,uBAAuB;gBAC9B,WAAW,EAAE,OAAO,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,yBAAyB;gBAC7E,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,QAAQ,EAAE;oBACR,UAAU,EAAE,MAAM,CAAC,IAAI;oBACvB,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,GAAG,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;oBAC/E,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;iBAC7E;aACF;SACF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC"}
1
+ {"version":3,"file":"public-api-removal-rule.js","sourceRoot":"","sources":["../../../src/application/rules/public-api-removal-rule.ts"],"names":[],"mappings":"AAIA,kDAAkD;AAClD,MAAM,OAAO,oBAAoB;IACxB,KAAK,CAAC,OAAO,CAAC,OAAwB;QAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,EAAE,OAAO,IAAI,EAAE,CAAC;QACrD,MAAM,cAAc,GAAG,IAAI,GAAG,CAC5B,OAAO;aACJ,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,KAAK,IAAI,CAAC;aACjD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CACrD,CAAC;QAEF,gDAAgD;QAChD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAChC,cAAc,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAC9E,CAAC;IACJ,CAAC;CACF;AAED,SAAS,SAAS,CAAC,MAAoB;IACrC,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,IAAI,MAAM,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;QACtE,OAAO;YACL;gBACE,MAAM,EAAE,6BAA6B;gBACrC,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,yBAAyB;gBAChC,WAAW,EAAE,gBAAgB,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,eAAe;gBAC5E,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,QAAQ,EAAE;oBACR,UAAU,EAAE,MAAM,CAAC,IAAI;oBACvB,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,GAAG,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;iBAChF;aACF;SACF,CAAC;IACJ,CAAC;IAED,IACE,MAAM,CAAC,UAAU,KAAK,UAAU;QAChC,MAAM,CAAC,cAAc,KAAK,IAAI;QAC9B,MAAM,CAAC,aAAa,KAAK,KAAK,EAC9B,CAAC;QACD,OAAO;YACL;gBACE,MAAM,EAAE,oBAAoB;gBAC5B,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,uBAAuB;gBAC9B,WAAW,EAAE,OAAO,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,yBAAyB;gBAC7E,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,QAAQ,EAAE;oBACR,UAAU,EAAE,MAAM,CAAC,IAAI;oBACvB,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,GAAG,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;oBAC/E,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;iBAC7E;aACF;SACF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -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,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"}
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;AAezE,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;IAgEvE,OAAO,CAAC,YAAY;CAGrB"}
@@ -1,7 +1,17 @@
1
1
  import { posix } from "node:path";
2
2
  import { createImpactAnalysis, } from "../../domain/impact.js";
3
- const sourceExtensions = [".ts", ".tsx", ".d.ts"];
3
+ import { isMaintainedSourcePath } from "./is-maintained-source-path.js";
4
+ const typeScriptSourceExtensions = [
5
+ ".ts",
6
+ ".tsx",
7
+ ".d.ts",
8
+ ".mts",
9
+ ".d.mts",
10
+ ".cts",
11
+ ".d.cts",
12
+ ];
4
13
  const emittedJavaScriptExtensions = [".js", ".jsx", ".mjs", ".cjs"];
14
+ const sourceExtensions = [...typeScriptSourceExtensions, ...emittedJavaScriptExtensions];
5
15
  /** 현재 module graph를 역방향으로 탐색해 변경 파일의 직접·간접 의존자를 찾는다. */
6
16
  export class AnalyzeImportImpact {
7
17
  files;
@@ -14,7 +24,7 @@ export class AnalyzeImportImpact {
14
24
  }
15
25
  async analyze(context) {
16
26
  const allPaths = await this.files.listPaths(context.target);
17
- const sourcePaths = allPaths.filter((path) => this.extractorFor(path) !== undefined);
27
+ const sourcePaths = allPaths.filter((path) => isMaintainedSourcePath(path) && this.extractorFor(path) !== undefined);
18
28
  const availablePaths = new Set(sourcePaths);
19
29
  const aliasResolver = await this.aliases.prepare(context.target, allPaths, availablePaths);
20
30
  const dependencies = [];
@@ -55,7 +65,7 @@ export class AnalyzeImportImpact {
55
65
  }
56
66
  }
57
67
  const changedModules = context.changes.files
58
- .filter((file) => this.extractorFor(file.path) !== undefined)
68
+ .filter((file) => isMaintainedSourcePath(file.path) && this.extractorFor(file.path) !== undefined)
59
69
  .map((file) => file.path);
60
70
  const impactedFiles = calculateImpactedFiles(changedModules, dependencies);
61
71
  return createImpactAnalysis({
@@ -79,24 +89,33 @@ function resolveRelativeModule(importer, specifier, availablePaths) {
79
89
  if (basePath === ".." || basePath.startsWith("../") || posix.isAbsolute(basePath)) {
80
90
  return undefined;
81
91
  }
82
- for (const candidate of moduleCandidates(basePath)) {
92
+ for (const candidate of moduleCandidates(basePath, importer)) {
83
93
  if (availablePaths.has(candidate)) {
84
94
  return candidate;
85
95
  }
86
96
  }
87
97
  return undefined;
88
98
  }
89
- function moduleCandidates(basePath) {
99
+ function moduleCandidates(basePath, importer) {
90
100
  const candidates = [basePath];
91
101
  const emittedExtension = emittedJavaScriptExtensions.find((extension) => basePath.endsWith(extension));
92
102
  if (emittedExtension !== undefined) {
93
103
  const stem = basePath.slice(0, -emittedExtension.length);
94
- candidates.push(...sourceExtensions.map((extension) => `${stem}${extension}`));
104
+ const generatedExtensions = emittedExtension === ".mjs"
105
+ ? [".mts", ".d.mts"]
106
+ : emittedExtension === ".cjs"
107
+ ? [".cts", ".d.cts"]
108
+ : [".ts", ".tsx", ".d.ts"];
109
+ candidates.push(...generatedExtensions.map((extension) => `${stem}${extension}`));
95
110
  return candidates;
96
111
  }
97
112
  if (posix.extname(basePath).length === 0) {
98
- candidates.push(...sourceExtensions.map((extension) => `${basePath}${extension}`));
99
- candidates.push(...sourceExtensions.map((extension) => posix.join(basePath, `index${extension}`)));
113
+ // 확장자가 없는 JS import는 같은 이름의 TS 파일보다 실행 가능한 JS 파일을 우선한다.
114
+ const extensions = /\.(?:[cm]?js|jsx)$/u.test(importer)
115
+ ? [...emittedJavaScriptExtensions, ...typeScriptSourceExtensions]
116
+ : sourceExtensions;
117
+ candidates.push(...extensions.map((extension) => `${basePath}${extension}`));
118
+ candidates.push(...extensions.map((extension) => posix.join(basePath, `index${extension}`)));
100
119
  }
101
120
  return candidates;
102
121
  }
@@ -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":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"compare-source-symbols.d.ts","sourceRoot":"","sources":["../../../src/application/services/compare-source-symbols.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,eAAe,EACrB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,KAAK,EACV,qBAAqB,EAEtB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE/E,yDAAyD;AACzD,qBAAa,oBAAqB,YAAW,oBAAoB;IAE7D,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU;gBADV,SAAS,EAAE,kBAAkB,EAC7B,UAAU,EAAE,SAAS,qBAAqB,EAAE;IAGlD,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;CAiCzE"}
1
+ {"version":3,"file":"compare-source-symbols.d.ts","sourceRoot":"","sources":["../../../src/application/services/compare-source-symbols.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,eAAe,EACrB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,KAAK,EACV,qBAAqB,EAEtB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAG/E,yDAAyD;AACzD,qBAAa,oBAAqB,YAAW,oBAAoB;IAE7D,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU;gBADV,SAAS,EAAE,kBAAkB,EAC7B,UAAU,EAAE,SAAS,qBAAqB,EAAE;IAGlD,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;CAkCzE"}