packtory 0.0.10 → 0.0.11

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 (234) hide show
  1. package/artifacts/artifacts-builder.d.ts +0 -14
  2. package/artifacts/artifacts-builder.d.ts.map +1 -1
  3. package/artifacts/artifacts-builder.js +75 -0
  4. package/artifacts/artifacts-builder.js.map +1 -1
  5. package/bundle-emitter/emitter.d.ts +0 -30
  6. package/bundle-emitter/emitter.d.ts.map +1 -1
  7. package/bundle-emitter/emitter.js +34 -0
  8. package/bundle-emitter/emitter.js.map +1 -1
  9. package/bundle-emitter/extract-package-tarball.js +11 -0
  10. package/bundle-emitter/extract-package-tarball.js.map +1 -1
  11. package/bundle-emitter/registry-client.d.ts +0 -21
  12. package/bundle-emitter/registry-client.d.ts.map +1 -1
  13. package/bundle-emitter/registry-client.js +261 -0
  14. package/bundle-emitter/registry-client.js.map +1 -1
  15. package/bundle-emitter/repository-url-normalizer.js +36 -0
  16. package/bundle-emitter/repository-url-normalizer.js.map +1 -1
  17. package/checks/check-runner.js +5 -0
  18. package/checks/check-runner.js.map +1 -1
  19. package/checks/rules/registry.js +9 -0
  20. package/checks/rules/registry.js.map +1 -1
  21. package/common/clock.d.ts +0 -6
  22. package/common/clock.d.ts.map +1 -1
  23. package/common/code-files.js +4 -0
  24. package/common/code-files.js.map +1 -1
  25. package/config/additional-files.js +4 -0
  26. package/config/additional-files.js.map +1 -1
  27. package/config/automatic-versioning-settings.js +4 -0
  28. package/config/automatic-versioning-settings.js.map +1 -1
  29. package/config/config.js +2 -0
  30. package/config/config.js.map +1 -1
  31. package/config/dead-code-elimination-settings.d.ts +0 -1
  32. package/config/dead-code-elimination-settings.d.ts.map +1 -1
  33. package/config/dead-code-elimination-settings.js +19 -0
  34. package/config/dead-code-elimination-settings.js.map +1 -1
  35. package/config/dependency-policy.js +3 -0
  36. package/config/dependency-policy.js.map +1 -1
  37. package/config/main-package-json-schema.js +1 -0
  38. package/config/main-package-json-schema.js.map +1 -1
  39. package/config/manual-versioning-settings.js +4 -0
  40. package/config/manual-versioning-settings.js.map +1 -1
  41. package/config/package-config.js +6 -0
  42. package/config/package-config.js.map +1 -1
  43. package/config/package-interface.js +26 -0
  44. package/config/package-interface.js.map +1 -1
  45. package/config/package-json.d.ts +0 -1
  46. package/config/package-json.d.ts.map +1 -1
  47. package/config/package-json.js +16 -0
  48. package/config/package-json.js.map +1 -1
  49. package/config/packtory-config-schema.js +3 -0
  50. package/config/packtory-config-schema.js.map +1 -1
  51. package/config/publish-settings.js +22 -0
  52. package/config/publish-settings.js.map +1 -1
  53. package/config/registry-settings.d.ts +0 -18
  54. package/config/registry-settings.d.ts.map +1 -1
  55. package/config/registry-settings.js +38 -0
  56. package/config/registry-settings.js.map +1 -1
  57. package/config/root.js +4 -0
  58. package/config/root.js.map +1 -1
  59. package/config/sbom-settings.js +3 -0
  60. package/config/sbom-settings.js.map +1 -1
  61. package/config/validation.d.ts +0 -18
  62. package/config/validation.d.ts.map +1 -1
  63. package/config/validation.js +254 -0
  64. package/config/validation.js.map +1 -1
  65. package/config/versioning-settings.js +1 -0
  66. package/config/versioning-settings.js.map +1 -1
  67. package/dead-code-eliminator/analyzed-bundle.d.ts +0 -9
  68. package/dead-code-eliminator/analyzed-bundle.d.ts.map +1 -1
  69. package/dead-code-eliminator/analyzed-bundle.js +7 -0
  70. package/dead-code-eliminator/analyzed-bundle.js.map +1 -1
  71. package/dead-code-eliminator/eliminator.js +12 -1
  72. package/dead-code-eliminator/eliminator.js.map +1 -1
  73. package/dead-code-eliminator/load-bundle.js +10 -5
  74. package/dead-code-eliminator/load-bundle.js.map +1 -1
  75. package/dead-code-eliminator/reachability/binding-extractor.js +20 -7
  76. package/dead-code-eliminator/reachability/binding-extractor.js.map +1 -1
  77. package/dead-code-eliminator/reachability/reachability.js +1 -1
  78. package/dead-code-eliminator/reachability/reachability.js.map +1 -1
  79. package/dead-code-eliminator/transform/declaration-remover.js +3 -2
  80. package/dead-code-eliminator/transform/declaration-remover.js.map +1 -1
  81. package/dead-code-eliminator/variable-declaration-bindings.js +34 -0
  82. package/dead-code-eliminator/variable-declaration-bindings.js.map +1 -0
  83. package/dependency-scanner/dependency-graph.d.ts +0 -27
  84. package/dependency-scanner/dependency-graph.d.ts.map +1 -1
  85. package/dependency-scanner/dependency-graph.js +73 -0
  86. package/dependency-scanner/dependency-graph.js.map +1 -1
  87. package/dependency-scanner/external-dependencies.js +16 -0
  88. package/dependency-scanner/external-dependencies.js.map +1 -1
  89. package/dependency-scanner/scanner.d.ts +0 -13
  90. package/dependency-scanner/scanner.d.ts.map +1 -1
  91. package/dependency-scanner/scanner.js +69 -0
  92. package/dependency-scanner/scanner.js.map +1 -1
  93. package/dependency-scanner/source-file-references.js +10 -0
  94. package/dependency-scanner/source-file-references.js.map +1 -1
  95. package/dependency-scanner/source-map-file-locator.d.ts +0 -7
  96. package/dependency-scanner/source-map-file-locator.d.ts.map +1 -1
  97. package/dependency-scanner/source-map-file-locator.js +27 -0
  98. package/dependency-scanner/source-map-file-locator.js.map +1 -1
  99. package/dependency-scanner/typescript-file-host.d.ts +0 -9
  100. package/dependency-scanner/typescript-file-host.d.ts.map +1 -1
  101. package/dependency-scanner/typescript-file-host.js +114 -0
  102. package/dependency-scanner/typescript-file-host.js.map +1 -1
  103. package/dependency-scanner/typescript-project-analyzer.d.ts +0 -17
  104. package/dependency-scanner/typescript-project-analyzer.d.ts.map +1 -1
  105. package/dependency-scanner/typescript-project-analyzer.js +52 -0
  106. package/dependency-scanner/typescript-project-analyzer.js.map +1 -1
  107. package/directed-graph/graph.d.ts +0 -26
  108. package/directed-graph/graph.d.ts.map +1 -1
  109. package/directed-graph/graph.js +229 -0
  110. package/directed-graph/graph.js.map +1 -1
  111. package/file-manager/compare.js +17 -0
  112. package/file-manager/compare.js.map +1 -1
  113. package/file-manager/equal.js +5 -0
  114. package/file-manager/equal.js.map +1 -1
  115. package/file-manager/file-manager.d.ts +0 -15
  116. package/file-manager/file-manager.d.ts.map +1 -1
  117. package/file-manager/file-manager.js +52 -0
  118. package/file-manager/file-manager.js.map +1 -1
  119. package/file-manager/permissions.js +26 -0
  120. package/file-manager/permissions.js.map +1 -1
  121. package/linker/linker.d.ts +0 -8
  122. package/linker/linker.d.ts.map +1 -1
  123. package/linker/linker.js +23 -0
  124. package/linker/linker.js.map +1 -1
  125. package/linker/resource-graph.js +25 -0
  126. package/linker/resource-graph.js.map +1 -1
  127. package/linker/source-modifier/import-paths.js +22 -0
  128. package/linker/source-modifier/import-paths.js.map +1 -1
  129. package/linker/substitute-bundles.js +84 -0
  130. package/linker/substitute-bundles.js.map +1 -1
  131. package/linker/substituted-resource-graph.js +72 -0
  132. package/linker/substituted-resource-graph.js.map +1 -1
  133. package/package-surface/modules.js +232 -5
  134. package/package-surface/modules.js.map +1 -1
  135. package/package-surface/surface.d.ts +0 -1
  136. package/package-surface/surface.d.ts.map +1 -1
  137. package/package-surface/surface.js +15 -0
  138. package/package-surface/surface.js.map +1 -1
  139. package/package.json +1 -1
  140. package/packtory/map-config.d.ts +0 -10
  141. package/packtory/map-config.d.ts.map +1 -1
  142. package/packtory/map-config.js +14 -0
  143. package/packtory/map-config.js.map +1 -1
  144. package/packtory/normalize-paths.js +24 -0
  145. package/packtory/normalize-paths.js.map +1 -1
  146. package/packtory/package-processor-build.js +72 -0
  147. package/packtory/package-processor-build.js.map +1 -1
  148. package/packtory/package-processor-publish.d.ts +0 -5
  149. package/packtory/package-processor-publish.d.ts.map +1 -1
  150. package/packtory/package-processor-publish.js +133 -0
  151. package/packtory/package-processor-publish.js.map +1 -1
  152. package/packtory/package-processor.d.ts +0 -17
  153. package/packtory/package-processor.d.ts.map +1 -1
  154. package/packtory/package-processor.js +8 -0
  155. package/packtory/package-processor.js.map +1 -1
  156. package/packtory/packtory-results.d.ts +0 -10
  157. package/packtory/packtory-results.d.ts.map +1 -1
  158. package/packtory/packtory-results.js +15 -0
  159. package/packtory/packtory-results.js.map +1 -1
  160. package/packtory/packtory.d.ts +0 -8
  161. package/packtory/packtory.d.ts.map +1 -1
  162. package/packtory/prepare-package-options.d.ts +0 -2
  163. package/packtory/prepare-package-options.d.ts.map +1 -1
  164. package/packtory/prepare-package-options.js +122 -0
  165. package/packtory/prepare-package-options.js.map +1 -1
  166. package/packtory/resolved-package.d.ts +0 -2
  167. package/packtory/resolved-package.d.ts.map +1 -1
  168. package/packtory/resolved-package.js +31 -0
  169. package/packtory/resolved-package.js.map +1 -1
  170. package/packtory/scheduler.d.ts +0 -37
  171. package/packtory/scheduler.d.ts.map +1 -1
  172. package/progress/progress-broadcaster.d.ts +0 -13
  173. package/progress/progress-broadcaster.d.ts.map +1 -1
  174. package/progress/progress-broadcaster.js +45 -0
  175. package/progress/progress-broadcaster.js.map +1 -1
  176. package/report/artifact-entry-merger.js +20 -0
  177. package/report/artifact-entry-merger.js.map +1 -1
  178. package/report/inspectors.js +73 -0
  179. package/report/inspectors.js.map +1 -1
  180. package/report/report-aggregator.d.ts +0 -5
  181. package/report/report-aggregator.d.ts.map +1 -1
  182. package/report/report-aggregator.js +185 -0
  183. package/report/report-aggregator.js.map +1 -1
  184. package/resource-resolver/content.js +53 -0
  185. package/resource-resolver/content.js.map +1 -1
  186. package/resource-resolver/resolved-bundle.d.ts +0 -10
  187. package/resource-resolver/resolved-bundle.d.ts.map +1 -1
  188. package/resource-resolver/resource-resolve-options.d.ts +0 -4
  189. package/resource-resolver/resource-resolve-options.d.ts.map +1 -1
  190. package/resource-resolver/resource-resolve-options.js +12 -0
  191. package/resource-resolver/resource-resolve-options.js.map +1 -1
  192. package/resource-resolver/resource-resolver.d.ts +0 -8
  193. package/resource-resolver/resource-resolver.d.ts.map +1 -1
  194. package/resource-resolver/resource-resolver.js +78 -0
  195. package/resource-resolver/resource-resolver.js.map +1 -1
  196. package/sbom/extract-license.js +10 -0
  197. package/sbom/extract-license.js.map +1 -1
  198. package/sbom/license-resolver.d.ts +0 -11
  199. package/sbom/license-resolver.d.ts.map +1 -1
  200. package/sbom/license-resolver.js +19 -0
  201. package/sbom/license-resolver.js.map +1 -1
  202. package/sbom/sbom-file.d.ts +0 -12
  203. package/sbom/sbom-file.d.ts.map +1 -1
  204. package/sbom/sbom-file.js +54 -0
  205. package/sbom/sbom-file.js.map +1 -1
  206. package/sbom/sbom-serializer.d.ts +0 -4
  207. package/sbom/sbom-serializer.d.ts.map +1 -1
  208. package/sbom/sbom-serializer.js +9 -0
  209. package/sbom/sbom-serializer.js.map +1 -1
  210. package/tar/extract-tar.js +38 -0
  211. package/tar/extract-tar.js.map +1 -1
  212. package/tar/tarball-builder.d.ts +0 -4
  213. package/tar/tarball-builder.d.ts.map +1 -1
  214. package/version-manager/manager.d.ts +0 -4
  215. package/version-manager/manager.d.ts.map +1 -1
  216. package/version-manager/manager.js +46 -0
  217. package/version-manager/manager.js.map +1 -1
  218. package/version-manager/manifest/builder.js +56 -0
  219. package/version-manager/manifest/builder.js.map +1 -1
  220. package/version-manager/manifest/serialize.js +46 -0
  221. package/version-manager/manifest/serialize.js.map +1 -1
  222. package/version-manager/manifest/sort-values.js +16 -0
  223. package/version-manager/manifest/sort-values.js.map +1 -1
  224. package/version-manager/specifier-classifier.js +33 -0
  225. package/version-manager/specifier-classifier.js.map +1 -1
  226. package/version-manager/specifier-errors.js +43 -0
  227. package/version-manager/specifier-errors.js.map +1 -1
  228. package/version-manager/versioned-bundle-dependencies.js +107 -0
  229. package/version-manager/versioned-bundle-dependencies.js.map +1 -1
  230. package/version-manager/versioned-bundle-imports.js +72 -0
  231. package/version-manager/versioned-bundle-imports.js.map +1 -1
  232. package/version-manager/versioned-bundle.js +60 -0
  233. package/version-manager/versioned-bundle.js.map +1 -1
  234. package/sbom.cdx.json +0 -390
@@ -0,0 +1,34 @@
1
+ import { Node as TsMorphNode, SyntaxKind } from 'ts-morph';
2
+ function collectBindingElementBindings(element) {
3
+ const referenceNode = element.getFirstAncestorByKindOrThrow(SyntaxKind.VariableDeclaration);
4
+ const nameNode = element.getNameNode();
5
+ if (TsMorphNode.isIdentifier(nameNode)) {
6
+ return [{ name: nameNode.getText(), declarationNode: element, referenceNode }];
7
+ }
8
+ return collectVariableDeclarationBindingsFromNameNode(nameNode, element, referenceNode);
9
+ }
10
+ function collectVariableDeclarationBindingsFromNameNode(nameNode, fallbackDeclarationNode, referenceNode) {
11
+ if (TsMorphNode.isIdentifier(nameNode)) {
12
+ return [{ name: nameNode.getText(), declarationNode: fallbackDeclarationNode, referenceNode }];
13
+ }
14
+ return nameNode.getElements().flatMap((element) => {
15
+ if (!TsMorphNode.isBindingElement(element)) {
16
+ return [];
17
+ }
18
+ return collectBindingElementBindings(element);
19
+ });
20
+ }
21
+ export function collectVariableDeclarationBindings(declarator) {
22
+ return collectVariableDeclarationBindingsFromNameNode(declarator.getNameNode(), declarator, declarator);
23
+ }
24
+ export function namesBoundByVariableDeclaration(declarator) {
25
+ return collectVariableDeclarationBindings(declarator).map((binding) => {
26
+ return binding.name;
27
+ });
28
+ }
29
+ export function variableDeclarationSurvives(declarator, survivingNames) {
30
+ return namesBoundByVariableDeclaration(declarator).some((name) => {
31
+ return survivingNames.has(name);
32
+ });
33
+ }
34
+ //# sourceMappingURL=variable-declaration-bindings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variable-declaration-bindings.js","sourceRoot":"","sources":["../../../../source/dead-code-eliminator/variable-declaration-bindings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,UAAU,EAAiD,MAAM,UAAU,CAAC;AAQ1G,SAAS,6BAA6B,CAAC,OAAuB;IAC1D,MAAM,aAAa,GAAG,OAAO,CAAC,6BAA6B,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;IAC5F,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACvC,IAAI,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,8CAA8C,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;AAC5F,CAAC;AAED,SAAS,8CAA8C,CACnD,QAAoG,EACpG,uBAA6D,EAC7D,aAAkC;IAElC,IAAI,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE,uBAAuB,EAAE,aAAa,EAAE,CAAC,CAAC;IACnG,CAAC;IACD,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9C,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;YACzC,OAAO,EAAE,CAAC;QACd,CAAC;QACD,OAAO,6BAA6B,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,kCAAkC,CAC9C,UAA+B;IAE/B,OAAO,8CAA8C,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAC5G,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,UAA+B;IAC3E,OAAO,kCAAkC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAClE,OAAO,OAAO,CAAC,IAAI,CAAC;IACxB,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,2BAA2B,CACvC,UAA+B,EAC/B,cAAmC;IAEnC,OAAO,+BAA+B,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QAC7D,OAAO,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -2,32 +2,5 @@ import type { Maybe } from 'true-myth';
2
2
  import type { Project } from 'ts-morph';
3
3
  import { type ExternalDependencies } from './external-dependencies.ts';
4
4
  import type { TypescriptProject } from './typescript-project-analyzer.ts';
5
- export type DependencyGraphNodeData = {
6
- readonly sourceMapFilePath: Maybe<string>;
7
- readonly project: TypescriptProject;
8
- readonly externalDependencies: readonly string[];
9
- };
10
- type DependencyNode = DependencyGraphNodeData & {
11
- readonly filePath: string;
12
- readonly localFiles: readonly string[];
13
- };
14
- export type LocalFile = {
15
- readonly filePath: string;
16
- readonly directDependencies: ReadonlySet<string>;
17
- readonly project?: Project | undefined;
18
- };
19
- export type DependencyFiles = {
20
- readonly localFiles: readonly LocalFile[];
21
- readonly externalDependencies: ExternalDependencies;
22
- };
23
- type DependencyGraphVisitor = (node: Readonly<DependencyNode>) => void;
24
- export type DependencyGraph = {
25
- addDependency: (filePath: string, data: DependencyGraphNodeData) => void;
26
- connect: (fromFilePath: string, toFilePath: string) => void;
27
- hasConnection: (fromFilePath: string, toFilePath: string) => boolean;
28
- walk: (startFilePath: string, visitor: DependencyGraphVisitor) => void;
29
- isKnown: (filePath: string) => boolean;
30
- flatten: (startFilePath: string) => Readonly<DependencyFiles>;
31
- };
32
5
  export {};
33
6
  //# sourceMappingURL=dependency-graph.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dependency-graph.d.ts","sourceRoot":"","sources":["../../../../source/dependency-scanner/dependency-graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW;AACtC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU;AAGvC,OAAO,EAEH,KAAK,oBAAoB,EAE5B,MAAM,4BAA4B;AACnC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC;AAEzE,MAAM,MAAM,uBAAuB,GAAG;IAClC,QAAQ,CAAC,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,oBAAoB,EAAE,SAAS,MAAM,EAAE,CAAC;CACpD;AAED,KAAK,cAAc,GAAG,uBAAuB,GAAG;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AAED,MAAM,MAAM,SAAS,GAAG;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC1C;AAED,MAAM,MAAM,eAAe,GAAG;IAC1B,QAAQ,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,CAAC;IAC1C,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;CACvD;AAgBD,KAAK,sBAAsB,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,KAAK,IAAI;AAEtE,MAAM,MAAM,eAAe,GAAG;IAC1B,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACzE,OAAO,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5D,aAAa,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC;IACrE,IAAI,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,KAAK,IAAI,CAAC;IACvE,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,OAAO,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,QAAQ,CAAC,eAAe,CAAC,CAAC;CACjE"}
1
+ {"version":3,"file":"dependency-graph.d.ts","sourceRoot":"","sources":["../../../../source/dependency-scanner/dependency-graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW;AACtC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU;AAGvC,OAAO,EAEH,KAAK,oBAAoB,EAE5B,MAAM,4BAA4B;AACnC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC"}
@@ -1,4 +1,77 @@
1
1
  import { indexBy, unique, values } from 'remeda';
2
2
  import { createDirectedGraph } from "../directed-graph/graph.js";
3
3
  import { mergeExternalDependencies } from "./external-dependencies.js";
4
+ export function mergeDependencyFiles(first, second) {
5
+ return {
6
+ localFiles: values(indexBy([...first.localFiles, ...second.localFiles], (localFile) => {
7
+ return localFile.filePath;
8
+ })),
9
+ externalDependencies: mergeExternalDependencies(first.externalDependencies, second.externalDependencies)
10
+ };
11
+ }
12
+ export function createDependencyGraph() {
13
+ const graph = createDirectedGraph();
14
+ return {
15
+ addDependency(filePath, data) {
16
+ graph.addNode(filePath, data);
17
+ },
18
+ isKnown: graph.hasNode,
19
+ connect(fromFilePath, toFilePath) {
20
+ graph.connect({ from: fromFilePath, to: toFilePath });
21
+ },
22
+ hasConnection(fromFilePath, toFilePath) {
23
+ return graph.hasConnection({ from: fromFilePath, to: toFilePath });
24
+ },
25
+ walk(startFilePath, visitor) {
26
+ graph.visitBreadthFirstSearch(startFilePath, (node) => {
27
+ visitor({
28
+ filePath: node.id,
29
+ sourceMapFilePath: node.data.sourceMapFilePath,
30
+ externalDependencies: node.data.externalDependencies,
31
+ localFiles: Array.from(node.adjacentNodeIds),
32
+ project: node.data.project
33
+ });
34
+ });
35
+ },
36
+ flatten(startFilePath) {
37
+ const localFiles = new Map();
38
+ const externalDependencies = new Map();
39
+ graph.visitBreadthFirstSearch(startFilePath, (node) => {
40
+ const directDependencies = new Set(graph.getAdjacentIds(node.id));
41
+ if (node.data.sourceMapFilePath.isJust) {
42
+ directDependencies.add(node.data.sourceMapFilePath.value);
43
+ localFiles.set(node.data.sourceMapFilePath.value, {
44
+ filePath: node.data.sourceMapFilePath.value,
45
+ directDependencies: new Set(),
46
+ project: node.data.project.getProject()
47
+ });
48
+ }
49
+ localFiles.set(node.id, {
50
+ filePath: node.id,
51
+ directDependencies,
52
+ project: node.data.project.getProject()
53
+ });
54
+ for (const externalDependencyName of node.data.externalDependencies) {
55
+ const externalDependency = externalDependencies.get(externalDependencyName);
56
+ if (externalDependency === undefined) {
57
+ externalDependencies.set(externalDependencyName, {
58
+ name: externalDependencyName,
59
+ referencedFrom: [node.id]
60
+ });
61
+ }
62
+ else {
63
+ externalDependencies.set(externalDependencyName, {
64
+ name: externalDependencyName,
65
+ referencedFrom: unique([...externalDependency.referencedFrom, node.id])
66
+ });
67
+ }
68
+ }
69
+ });
70
+ return {
71
+ localFiles: Array.from(localFiles.values()),
72
+ externalDependencies
73
+ };
74
+ }
75
+ };
76
+ }
4
77
  //# sourceMappingURL=dependency-graph.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dependency-graph.js","sourceRoot":"","sources":["../../../../source/dependency-scanner/dependency-graph.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B;AAChE,OAAO,EACH,yBAAyB,EAG5B,MAAM,4BAA4B"}
1
+ {"version":3,"file":"dependency-graph.js","sourceRoot":"","sources":["../../../../source/dependency-scanner/dependency-graph.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,18 @@
1
1
  import { unique } from 'remeda';
2
+ export function mergeExternalDependencies(dependenciesA, dependenciesB) {
3
+ const mergedDependencies = new Map(dependenciesA.entries());
4
+ for (const dependencyB of dependenciesB.values()) {
5
+ const dependencyA = mergedDependencies.get(dependencyB.name);
6
+ if (dependencyA === undefined) {
7
+ mergedDependencies.set(dependencyB.name, dependencyB);
8
+ }
9
+ else {
10
+ mergedDependencies.set(dependencyA.name, {
11
+ name: dependencyA.name,
12
+ referencedFrom: unique([...dependencyA.referencedFrom, ...dependencyB.referencedFrom])
13
+ });
14
+ }
15
+ }
16
+ return mergedDependencies;
17
+ }
2
18
  //# sourceMappingURL=external-dependencies.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"external-dependencies.js","sourceRoot":"","sources":["../../../../source/dependency-scanner/external-dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ"}
1
+ {"version":3,"file":"external-dependencies.js","sourceRoot":"","sources":["../../../../source/dependency-scanner/external-dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAShC,MAAM,UAAU,yBAAyB,CACrC,aAAmC,EACnC,aAAmC;IAEnC,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAA6B,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAExF,KAAK,MAAM,WAAW,IAAI,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC;QAC/C,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAE7D,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC5B,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACJ,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE;gBACrC,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,cAAc,EAAE,MAAM,CAAC,CAAC,GAAG,WAAW,CAAC,cAAc,EAAE,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;aACzF,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,OAAO,kBAAkB,CAAC;AAC9B,CAAC"}
@@ -2,18 +2,5 @@ import type { MainPackageJson } from '../config/package-json.ts';
2
2
  import type { SourceMapFileLocator } from './source-map-file-locator.ts';
3
3
  import type { TypescriptProjectAnalyzer } from './typescript-project-analyzer.ts';
4
4
  import { type DependencyGraph } from './dependency-graph.ts';
5
- type ScanOptionsInput = {
6
- readonly mainPackageJson: MainPackageJson;
7
- readonly includeSourceMapFiles?: boolean;
8
- readonly resolveDeclarationFiles?: boolean;
9
- };
10
- export type DependencyScannerDependencies = {
11
- readonly sourceMapFileLocator: SourceMapFileLocator;
12
- readonly typescriptProjectAnalyzer: TypescriptProjectAnalyzer;
13
- };
14
- export type DependencyScanner = {
15
- scan: (entryPointFile: string, folder: string, options: ScanOptionsInput) => Promise<DependencyGraph>;
16
- };
17
- export declare function createDependencyScanner(dependencyScannerDependencies: Readonly<DependencyScannerDependencies>): DependencyScanner;
18
5
  export {};
19
6
  //# sourceMappingURL=scanner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../../../source/dependency-scanner/scanner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,KAAK,EAAE,yBAAyB,EAAqB,MAAM,kCAAkC,CAAC;AACrG,OAAO,EAAuD,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAQlH,KAAK,gBAAgB,GAAG;IACpB,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IACzC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC;CAC9C,CAAC;AAmCF,MAAM,MAAM,6BAA6B,GAAG;IACxC,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;IACpD,QAAQ,CAAC,yBAAyB,EAAE,yBAAyB,CAAC;CACjE,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC5B,IAAI,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;CACzG,CAAC;AAEF,wBAAgB,uBAAuB,CACnC,6BAA6B,EAAE,QAAQ,CAAC,6BAA6B,CAAC,GACvE,iBAAiB,CAgEnB"}
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../../../source/dependency-scanner/scanner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B;AAChE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B;AACxE,OAAO,KAAK,EAAE,yBAAyB,EAAqB,MAAM,kCAAkC;AACpG,OAAO,EAAuD,KAAK,eAAe,EAAE,MAAM,uBAAuB"}
@@ -1,4 +1,73 @@
1
1
  import { Maybe } from 'true-myth/maybe';
2
2
  import { unique } from 'remeda';
3
3
  import { createDependencyGraph } from "./dependency-graph.js";
4
+ function isNodeModulesPath(filePath) {
5
+ return filePath.includes('/node_modules/');
6
+ }
7
+ function isLocalPath(filePath) {
8
+ return !isNodeModulesPath(filePath);
9
+ }
10
+ function extractModuleName(nodeModulePath) {
11
+ const prefix = '/node_modules/';
12
+ const pattern = /\/node_modules\/(?:[^@]+?|(?:@.+?\/.+?))\//;
13
+ const result = pattern.exec(nodeModulePath);
14
+ if (result === null) {
15
+ throw new Error(`Couldn’t find node_modules package name for '${nodeModulePath}'`);
16
+ }
17
+ return result[0].slice(prefix.length, -1);
18
+ }
19
+ function determineLocalDependencies(dependencies) {
20
+ return dependencies.filter(isLocalPath);
21
+ }
22
+ function determineExternalDependencies(dependencies) {
23
+ const modulePaths = dependencies.filter(isNodeModulesPath);
24
+ const moduleNames = modulePaths.map(extractModuleName);
25
+ const uniqueModuleNames = unique(moduleNames);
26
+ return uniqueModuleNames;
27
+ }
28
+ export function createDependencyScanner(dependencyScannerDependencies) {
29
+ const { sourceMapFileLocator, typescriptProjectAnalyzer } = dependencyScannerDependencies;
30
+ async function getDependencyNodeData(project, sourceFilePath, referencedFilePaths, options) {
31
+ const sourceMapFilePath = options.includeSourceMapFiles
32
+ ? await sourceMapFileLocator.locate(sourceFilePath)
33
+ : Maybe.nothing();
34
+ const externalDependencies = determineExternalDependencies(referencedFilePaths);
35
+ return {
36
+ sourceMapFilePath,
37
+ externalDependencies,
38
+ project
39
+ };
40
+ }
41
+ async function scanDependenciesOfSourceFile(project, sourceFilePath, graph, options) {
42
+ const referencedFilePaths = project.getReferencedSourceFilePaths(sourceFilePath);
43
+ const localFiles = determineLocalDependencies(referencedFilePaths);
44
+ const nodeData = await getDependencyNodeData(project, sourceFilePath, referencedFilePaths, options);
45
+ graph.addDependency(sourceFilePath, nodeData);
46
+ for (const localeFile of localFiles) {
47
+ if (!graph.isKnown(localeFile)) {
48
+ await scanDependenciesOfSourceFile(project, localeFile, graph, options);
49
+ }
50
+ if (!graph.hasConnection(sourceFilePath, localeFile)) {
51
+ graph.connect(sourceFilePath, localeFile);
52
+ }
53
+ }
54
+ }
55
+ return {
56
+ async scan(entryPointFile, folder, options) {
57
+ const { resolveDeclarationFiles = false, includeSourceMapFiles = false, mainPackageJson } = options;
58
+ const scanOptions = {
59
+ includeSourceMapFiles,
60
+ resolveDeclarationFiles,
61
+ mainPackageJson
62
+ };
63
+ const graph = createDependencyGraph();
64
+ const project = typescriptProjectAnalyzer.analyzeProject(folder, {
65
+ resolveDeclarationFiles: scanOptions.resolveDeclarationFiles,
66
+ mainPackageJson: scanOptions.mainPackageJson
67
+ });
68
+ await scanDependenciesOfSourceFile(project, entryPointFile, graph, scanOptions);
69
+ return graph;
70
+ }
71
+ };
72
+ }
4
73
  //# sourceMappingURL=scanner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../../../source/dependency-scanner/scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ;AAI/B,OAAO,EAAE,qBAAqB,EAAsD,MAAM,uBAAuB"}
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../../../source/dependency-scanner/scanner.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,14 @@
1
1
  import { isBuiltin } from 'node:module';
2
2
  import { isDefined } from 'remeda';
3
3
  import { ts } from 'ts-morph';
4
+ export function resolveSourceFileForLiteral(literal, containingSourceFile) {
5
+ const project = containingSourceFile.getProject();
6
+ const result = ts.resolveModuleName(literal.getLiteralValue(), containingSourceFile.getFilePath(), project.getCompilerOptions(), project.getModuleResolutionHost());
7
+ if (result.resolvedModule !== undefined) {
8
+ const resolvedFilePath = result.resolvedModule.resolvedFileName;
9
+ return project.getSourceFile(resolvedFilePath);
10
+ }
11
+ return undefined;
12
+ }
13
+
4
14
  //# sourceMappingURL=source-file-references.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"source-file-references.js","sourceRoot":"","sources":["../../../../source/dependency-scanner/source-file-references.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ;AAClC,OAAO,EAAE,EAAE,EAAuC,MAAM,UAAU"}
1
+ {"version":3,"file":"source-file-references.js","sourceRoot":"","sources":["../../../../source/dependency-scanner/source-file-references.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ;AAClC,OAAO,EAAE,EAAE,EAAuC,MAAM,UAAU;AAElE,MAAM,UAAU,2BAA2B,CACvC,OAAsB,EACtB,oBAA0C;IAE1C,MAAM,OAAO,GAAG,oBAAoB,CAAC,UAAU,EAAE,CAAC;IAClD,MAAM,MAAM,GAAG,EAAE,CAAC,iBAAiB,CAC/B,OAAO,CAAC,eAAe,EAAE,EACzB,oBAAoB,CAAC,WAAW,EAAE,EAClC,OAAO,CAAC,kBAAkB,EAAE,EAC5B,OAAO,CAAC,uBAAuB,EAAE,CACpC,CAAC;IAEF,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACtC,MAAM,gBAAgB,GAAG,MAAM,CAAC,cAAc,CAAC,gBAAgB,CAAC;QAChE,OAAO,OAAO,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,SAAS,CAAC;AACrB"}
@@ -1,10 +1,3 @@
1
1
  import { Maybe } from 'true-myth';
2
2
  import type { FileManager } from '../file-manager/file-manager.ts';
3
- export type SourceMapFileLocatorDependencies = {
4
- readonly fileManager: FileManager;
5
- };
6
- export type SourceMapFileLocator = {
7
- locate: (sourceFile: string) => Promise<Maybe<string>>;
8
- };
9
- export declare function createSourceMapFileLocator(dependencies: Readonly<SourceMapFileLocatorDependencies>): SourceMapFileLocator;
10
3
  //# sourceMappingURL=source-map-file-locator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"source-map-file-locator.d.ts","sourceRoot":"","sources":["../../../../source/dependency-scanner/source-map-file-locator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAEnE,MAAM,MAAM,gCAAgC,GAAG;IAC3C,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAC/B,MAAM,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;CAC1D,CAAC;AAaF,wBAAgB,0BAA0B,CACtC,YAAY,EAAE,QAAQ,CAAC,gCAAgC,CAAC,GACzD,oBAAoB,CAqBtB"}
1
+ {"version":3,"file":"source-map-file-locator.d.ts","sourceRoot":"","sources":["../../../../source/dependency-scanner/source-map-file-locator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW;AACjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC"}
@@ -1,3 +1,30 @@
1
1
  import path from 'node:path';
2
2
  import { Maybe } from 'true-myth';
3
+ function getSourceMappingUrl(fileContent) {
4
+ for (const line of fileContent.split('\n')) {
5
+ if (line.startsWith('//# sourceMappingURL=')) {
6
+ const sourceMappingUrl = line.slice('//# sourceMappingURL='.length);
7
+ return sourceMappingUrl === '' ? undefined : sourceMappingUrl;
8
+ }
9
+ }
10
+ return undefined;
11
+ }
12
+ export function createSourceMapFileLocator(dependencies) {
13
+ const { fileManager } = dependencies;
14
+ return {
15
+ async locate(sourceFile) {
16
+ const fileContent = await fileManager.readFile(sourceFile);
17
+ const sourceMappingUrl = getSourceMappingUrl(fileContent);
18
+ if (sourceMappingUrl !== undefined) {
19
+ const folder = path.dirname(sourceFile);
20
+ const sourceMappingFile = path.join(folder, sourceMappingUrl);
21
+ const { isReadable } = await fileManager.checkReadability(sourceMappingFile);
22
+ if (isReadable) {
23
+ return Maybe.just(sourceMappingFile);
24
+ }
25
+ }
26
+ return Maybe.nothing();
27
+ }
28
+ };
29
+ }
3
30
  //# sourceMappingURL=source-map-file-locator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"source-map-file-locator.js","sourceRoot":"","sources":["../../../../source/dependency-scanner/source-map-file-locator.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW;AAC5B,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW"}
1
+ {"version":3,"file":"source-map-file-locator.js","sourceRoot":"","sources":["../../../../source/dependency-scanner/source-map-file-locator.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAWlC,SAAS,mBAAmB,CAAC,WAAmB;IAC5C,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,IAAI,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,EAAE,CAAC;YAC3C,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;YACpE,OAAO,gBAAgB,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC;QAClE,CAAC;IACL,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,0BAA0B,CACtC,YAAwD;IAExD,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC;IAErC,OAAO;QACH,KAAK,CAAC,MAAM,CAAC,UAAU;YACnB,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC3D,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;YAE1D,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;gBACjC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBACxC,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;gBAC9D,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,WAAW,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;gBAE7E,IAAI,UAAU,EAAE,CAAC;oBACb,OAAO,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBACzC,CAAC;YACL,CAAC;YAED,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;KACJ,CAAC;AACN,CAAC"}
@@ -1,12 +1,3 @@
1
1
  import type { FileSystemHost } from 'ts-morph';
2
2
  import type { MainPackageJson } from '../config/package-json.ts';
3
- export type FileSystemAdaptersDependencies = {
4
- fileSystemHost: FileSystemHost;
5
- };
6
- export type FileSystemAdapters = {
7
- fileSystemHostWithoutFilter: FileSystemHost;
8
- fileSystemHostFilteringDeclarationFiles: FileSystemHost;
9
- withVirtualPackageJson: (fileSystemHost: FileSystemHost, folder: string, mainPackageJson: MainPackageJson) => FileSystemHost;
10
- };
11
- export declare function createFileSystemAdapters(dependencies: FileSystemAdaptersDependencies): FileSystemAdapters;
12
3
  //# sourceMappingURL=typescript-file-host.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"typescript-file-host.d.ts","sourceRoot":"","sources":["../../../../source/dependency-scanner/typescript-file-host.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAejE,MAAM,MAAM,8BAA8B,GAAG;IACzC,cAAc,EAAE,cAAc,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC7B,2BAA2B,EAAE,cAAc,CAAC;IAC5C,uCAAuC,EAAE,cAAc,CAAC;IACxD,sBAAsB,EAAE,CACpB,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe,KAC/B,cAAc,CAAC;CACvB,CAAC;AA4FF,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,8BAA8B,GAAG,kBAAkB,CAmDzG"}
1
+ {"version":3,"file":"typescript-file-host.d.ts","sourceRoot":"","sources":["../../../../source/dependency-scanner/typescript-file-host.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B"}
@@ -1,2 +1,116 @@
1
1
  import path from 'node:path';
2
+ function isDeclarationFile(filePath) {
3
+ const lowerCasedFilePath = filePath.toLowerCase();
4
+ return (lowerCasedFilePath.endsWith('.d.ts') ||
5
+ lowerCasedFilePath.endsWith('.d.cts') ||
6
+ lowerCasedFilePath.endsWith('.d.mts'));
7
+ }
8
+ function isTypesRootFolder(directoryPath) {
9
+ return directoryPath.endsWith('/node_modules/@types') || directoryPath.includes('/node_modules/@types/');
10
+ }
11
+ const syncMethodNames = {
12
+ fileExists: 'fileExistsSync',
13
+ directoryExists: 'directoryExistsSync',
14
+ readFile: 'readFileSync'
15
+ };
16
+ function bindRequiredMethod(object, methodName, expectedResultDescription, validateResult) {
17
+ const method = Reflect.get(object, methodName);
18
+ if (typeof method !== 'function') {
19
+ throw new TypeError(`Expected ${methodName} to be a function`);
20
+ }
21
+ return (filePath) => {
22
+ const result = Reflect.apply(method, object, [filePath]);
23
+ if (!validateResult(result)) {
24
+ throw new TypeError(`Expected ${methodName} to return ${expectedResultDescription}`);
25
+ }
26
+ return result;
27
+ };
28
+ }
29
+ function isBoolean(value) {
30
+ return typeof value === 'boolean';
31
+ }
32
+ function isString(value) {
33
+ return typeof value === 'string';
34
+ }
35
+ const packageJsonIndentationSpaces = 2;
36
+ function serializeMainPackageJson(mainPackageJson) {
37
+ return JSON.stringify(mainPackageJson, null, packageJsonIndentationSpaces);
38
+ }
39
+ function createVirtualPackageJsonHost(fileSystemHost, folder, mainPackageJson) {
40
+ const packageJsonPath = path.resolve(folder, 'package.json');
41
+ const serializedPackageJson = serializeMainPackageJson(mainPackageJson);
42
+ const fileExistsSync = bindRequiredMethod(fileSystemHost, syncMethodNames.fileExists, 'a boolean', isBoolean);
43
+ const readFileSync = bindRequiredMethod(fileSystemHost, syncMethodNames.readFile, 'a string', isString);
44
+ const virtualFileSystemHost = {
45
+ ...fileSystemHost,
46
+ fileExists: async (filePath) => {
47
+ if (path.resolve(filePath) === packageJsonPath) {
48
+ return true;
49
+ }
50
+ return fileSystemHost.fileExists(filePath);
51
+ },
52
+ [syncMethodNames.fileExists]: (filePath) => {
53
+ if (path.resolve(filePath) === packageJsonPath) {
54
+ return true;
55
+ }
56
+ // eslint-disable-next-line node/no-sync -- the ts-morph host interface requires this synchronous method
57
+ return fileExistsSync(filePath);
58
+ },
59
+ readFile: async (filePath, encoding) => {
60
+ if (path.resolve(filePath) === packageJsonPath) {
61
+ return serializedPackageJson;
62
+ }
63
+ return fileSystemHost.readFile(filePath, encoding);
64
+ },
65
+ [syncMethodNames.readFile]: (filePath) => {
66
+ if (path.resolve(filePath) === packageJsonPath) {
67
+ return serializedPackageJson;
68
+ }
69
+ // eslint-disable-next-line node/no-sync -- the ts-morph host interface requires this synchronous method
70
+ return readFileSync(filePath);
71
+ }
72
+ };
73
+ Object.setPrototypeOf(virtualFileSystemHost, fileSystemHost);
74
+ return virtualFileSystemHost;
75
+ }
76
+ export function createFileSystemAdapters(dependencies) {
77
+ const { fileSystemHost } = dependencies;
78
+ const fileExistsSync = bindRequiredMethod(fileSystemHost, syncMethodNames.fileExists, 'a boolean', isBoolean);
79
+ const directoryExistsSync = bindRequiredMethod(fileSystemHost, syncMethodNames.directoryExists, 'a boolean', isBoolean);
80
+ const fileSystemHostFilteringDeclarationFiles = {
81
+ ...fileSystemHost,
82
+ fileExists: async (filePath) => {
83
+ if (isDeclarationFile(filePath)) {
84
+ return false;
85
+ }
86
+ return fileSystemHost.fileExists(filePath);
87
+ },
88
+ [syncMethodNames.fileExists]: (filePath) => {
89
+ if (isDeclarationFile(filePath)) {
90
+ return false;
91
+ }
92
+ // eslint-disable-next-line node/no-sync -- the ts-morph host interface requires this synchronous method
93
+ return fileExistsSync(filePath);
94
+ },
95
+ directoryExists: async (directoryPath) => {
96
+ if (isTypesRootFolder(directoryPath)) {
97
+ return false;
98
+ }
99
+ return fileSystemHost.directoryExists(directoryPath);
100
+ },
101
+ [syncMethodNames.directoryExists]: (directoryPath) => {
102
+ if (isTypesRootFolder(directoryPath)) {
103
+ return false;
104
+ }
105
+ // eslint-disable-next-line node/no-sync -- the ts-morph host interface requires this synchronous method
106
+ return directoryExistsSync(directoryPath);
107
+ }
108
+ };
109
+ Object.setPrototypeOf(fileSystemHostFilteringDeclarationFiles, fileSystemHost);
110
+ return {
111
+ fileSystemHostWithoutFilter: fileSystemHost,
112
+ fileSystemHostFilteringDeclarationFiles,
113
+ withVirtualPackageJson: createVirtualPackageJsonHost
114
+ };
115
+ }
2
116
  //# sourceMappingURL=typescript-file-host.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"typescript-file-host.js","sourceRoot":"","sources":["../../../../source/dependency-scanner/typescript-file-host.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW"}
1
+ {"version":3,"file":"typescript-file-host.js","sourceRoot":"","sources":["../../../../source/dependency-scanner/typescript-file-host.ts"],"names":[],"mappings":"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"}
@@ -1,22 +1,5 @@
1
1
  import { type Project as _Project, type SourceFile } from 'ts-morph';
2
2
  import type { MainPackageJson } from '../config/package-json.ts';
3
3
  import type { FileSystemAdapters } from './typescript-file-host.ts';
4
- export type TypescriptProjectAnalyzerDependencies = {
5
- readonly Project: typeof _Project;
6
- readonly fileSystemAdapters: FileSystemAdapters;
7
- getReferencedSourceFiles: (sourceFile: Readonly<SourceFile>) => readonly Readonly<SourceFile>[];
8
- };
9
- type AnalyzationOptions = {
10
- readonly resolveDeclarationFiles: boolean;
11
- readonly mainPackageJson: MainPackageJson;
12
- };
13
- export type TypescriptProject = {
14
- getReferencedSourceFilePaths: (containingSourceFilePath: string) => readonly string[];
15
- getProject: () => _Project;
16
- };
17
- export type TypescriptProjectAnalyzer = {
18
- analyzeProject: (folder: string, options: AnalyzationOptions) => TypescriptProject;
19
- };
20
- export declare function createTypescriptProjectAnalyzer(dependencies: TypescriptProjectAnalyzerDependencies): TypescriptProjectAnalyzer;
21
4
  export {};
22
5
  //# sourceMappingURL=typescript-project-analyzer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"typescript-project-analyzer.d.ts","sourceRoot":"","sources":["../../../../source/dependency-scanner/typescript-project-analyzer.ts"],"names":[],"mappings":"AACA,OAAO,EAEH,KAAK,OAAO,IAAI,QAAQ,EACxB,KAAK,UAAU,EAGlB,MAAM,UAAU;AACjB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B;AAEnE,MAAM,MAAM,qCAAqC,GAAG;IAChD,QAAQ,CAAC,OAAO,EAAE,OAAO,QAAQ,CAAC;IAClC,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAChD,wBAAwB,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,KAAK,SAAS,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;CACnG;AAED,KAAK,kBAAkB,GAAG;IACtB,QAAQ,CAAC,uBAAuB,EAAE,OAAO,CAAC;IAC1C,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;CAC7C;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC5B,4BAA4B,EAAE,CAAC,wBAAwB,EAAE,MAAM,KAAK,SAAS,MAAM,EAAE,CAAC;IACtF,UAAU,EAAE,MAAM,QAAQ,CAAC;CAC9B;AAED,MAAM,MAAM,yBAAyB,GAAG;IACpC,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,KAAK,iBAAiB,CAAC;CACtF;AA+BD,wBAAgB,+BAA+B,CAC3C,YAAY,EAAE,qCAAqC,GACpD,yBAAyB"}
1
+ {"version":3,"file":"typescript-project-analyzer.d.ts","sourceRoot":"","sources":["../../../../source/dependency-scanner/typescript-project-analyzer.ts"],"names":[],"mappings":"AACA,OAAO,EAEH,KAAK,OAAO,IAAI,QAAQ,EACxB,KAAK,UAAU,EAGlB,MAAM,UAAU;AACjB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B"}
@@ -1,3 +1,55 @@
1
1
  import path from 'node:path';
2
2
  import { ModuleKind, ModuleResolutionKind } from 'ts-morph';
3
+ export function getSourcePathFromSourceFile(sourceFile) {
4
+ const filePath = sourceFile.getFilePath();
5
+ return filePath;
6
+ }
7
+ function analyzationOptionsToCompilerOptions(options) {
8
+ const { resolveDeclarationFiles } = options;
9
+ const compilerOptions = {
10
+ moduleResolution: ModuleResolutionKind.Node16,
11
+ esModuleInterop: true,
12
+ maxNodeModuleJsDepth: 1,
13
+ noEmit: true,
14
+ allowJs: true,
15
+ noLib: true,
16
+ skipLibCheck: true,
17
+ module: ModuleKind.Node16,
18
+ resolvePackageJsonImports: true
19
+ };
20
+ if (!resolveDeclarationFiles) {
21
+ compilerOptions.types = [];
22
+ compilerOptions.typeRoots = [];
23
+ }
24
+ return compilerOptions;
25
+ }
26
+ export function createTypescriptProjectAnalyzer(dependencies) {
27
+ const { fileSystemAdapters, Project, getReferencedSourceFiles } = dependencies;
28
+ return {
29
+ analyzeProject(folder, options) {
30
+ const project = new Project({
31
+ compilerOptions: analyzationOptionsToCompilerOptions(options),
32
+ fileSystem: fileSystemAdapters.withVirtualPackageJson(options.resolveDeclarationFiles
33
+ ? fileSystemAdapters.fileSystemHostWithoutFilter
34
+ : fileSystemAdapters.fileSystemHostFilteringDeclarationFiles, folder, options.mainPackageJson)
35
+ });
36
+ const fileExtension = options.resolveDeclarationFiles ? '.d.ts' : '.js';
37
+ const filesPattern = path.join(folder, `**/*${fileExtension}`);
38
+ project.addSourceFilesAtPaths([filesPattern]);
39
+ return {
40
+ getReferencedSourceFilePaths(containingSourceFilePath) {
41
+ const currentSourceFile = project.getSourceFile(containingSourceFilePath);
42
+ if (currentSourceFile === undefined) {
43
+ return [];
44
+ }
45
+ const referencedSourceFilePaths = getReferencedSourceFiles(currentSourceFile).map(getSourcePathFromSourceFile);
46
+ return referencedSourceFilePaths;
47
+ },
48
+ getProject() {
49
+ return project;
50
+ }
51
+ };
52
+ }
53
+ };
54
+ }
3
55
  //# sourceMappingURL=typescript-project-analyzer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"typescript-project-analyzer.js","sourceRoot":"","sources":["../../../../source/dependency-scanner/typescript-project-analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW;AAC5B,OAAO,EACH,UAAU,EAGV,oBAAoB,EAEvB,MAAM,UAAU"}
1
+ {"version":3,"file":"typescript-project-analyzer.js","sourceRoot":"","sources":["../../../../source/dependency-scanner/typescript-project-analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACH,UAAU,EAGV,oBAAoB,EAEvB,MAAM,UAAU,CAAC;AAwBlB,MAAM,UAAU,2BAA2B,CAAC,UAAgC;IACxE,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;IAE1C,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,SAAS,mCAAmC,CAAC,OAA2B;IACpE,MAAM,EAAE,uBAAuB,EAAE,GAAG,OAAO,CAAC;IAE5C,MAAM,eAAe,GAAoB;QACrC,gBAAgB,EAAE,oBAAoB,CAAC,MAAM;QAC7C,eAAe,EAAE,IAAI;QACrB,oBAAoB,EAAE,CAAC;QACvB,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,IAAI;QACX,YAAY,EAAE,IAAI;QAClB,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,yBAAyB,EAAE,IAAI;KAClC,CAAC;IAEF,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC3B,eAAe,CAAC,KAAK,GAAG,EAAE,CAAC;QAC3B,eAAe,CAAC,SAAS,GAAG,EAAE,CAAC;IACnC,CAAC;IAED,OAAO,eAAe,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC3C,YAAmD;IAEnD,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,wBAAwB,EAAE,GAAG,YAAY,CAAC;IAE/E,OAAO;QACH,cAAc,CAAC,MAAM,EAAE,OAAO;YAC1B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC;gBACxB,eAAe,EAAE,mCAAmC,CAAC,OAAO,CAAC;gBAC7D,UAAU,EAAE,kBAAkB,CAAC,sBAAsB,CACjD,OAAO,CAAC,uBAAuB;oBAC3B,CAAC,CAAC,kBAAkB,CAAC,2BAA2B;oBAChD,CAAC,CAAC,kBAAkB,CAAC,uCAAuC,EAChE,MAAM,EACN,OAAO,CAAC,eAAe,CAC1B;aACJ,CAAC,CAAC;YAEH,MAAM,aAAa,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;YACxE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,aAAa,EAAE,CAAC,CAAC;YAC/D,OAAO,CAAC,qBAAqB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;YAE9C,OAAO;gBACH,4BAA4B,CAAC,wBAAwB;oBACjD,MAAM,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC;oBAE1E,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;wBAClC,OAAO,EAAE,CAAC;oBACd,CAAC;oBAED,MAAM,yBAAyB,GAC3B,wBAAwB,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;oBAEjF,OAAO,yBAAyB,CAAC;gBACrC,CAAC;gBAED,UAAU;oBACN,OAAO,OAAO,CAAC;gBACnB,CAAC;aACJ,CAAC;QACN,CAAC;KACJ,CAAC;AACN,CAAC"}