@trebired/code-discipline 0.1.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 (100) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/LICENSE +661 -0
  3. package/README.md +241 -0
  4. package/dist/checks/index.d.ts +4 -0
  5. package/dist/checks/index.d.ts.map +1 -0
  6. package/dist/checks/index.js +22 -0
  7. package/dist/checks/index.js.map +1 -0
  8. package/dist/checks/rules/folderize-compound-files.d.ts +5 -0
  9. package/dist/checks/rules/folderize-compound-files.d.ts.map +1 -0
  10. package/dist/checks/rules/folderize-compound-files.js +37 -0
  11. package/dist/checks/rules/folderize-compound-files.js.map +1 -0
  12. package/dist/checks/rules/max-file-lines.d.ts +5 -0
  13. package/dist/checks/rules/max-file-lines.d.ts.map +1 -0
  14. package/dist/checks/rules/max-file-lines.js +30 -0
  15. package/dist/checks/rules/max-file-lines.js.map +1 -0
  16. package/dist/checks/types.d.ts +64 -0
  17. package/dist/checks/types.d.ts.map +1 -0
  18. package/dist/checks/types.js +2 -0
  19. package/dist/checks/types.js.map +1 -0
  20. package/dist/cli/run-cli.d.ts +13 -0
  21. package/dist/cli/run-cli.d.ts.map +1 -0
  22. package/dist/cli/run-cli.js +104 -0
  23. package/dist/cli/run-cli.js.map +1 -0
  24. package/dist/cli.d.ts +5 -0
  25. package/dist/cli.d.ts.map +1 -0
  26. package/dist/cli.js +10 -0
  27. package/dist/cli.js.map +1 -0
  28. package/dist/config/index.d.ts +9 -0
  29. package/dist/config/index.d.ts.map +1 -0
  30. package/dist/config/index.js +49 -0
  31. package/dist/config/index.js.map +1 -0
  32. package/dist/config/normalize-check-options.d.ts +4 -0
  33. package/dist/config/normalize-check-options.d.ts.map +1 -0
  34. package/dist/config/normalize-check-options.js +14 -0
  35. package/dist/config/normalize-check-options.js.map +1 -0
  36. package/dist/config/normalize-rule-options.d.ts +14 -0
  37. package/dist/config/normalize-rule-options.d.ts.map +1 -0
  38. package/dist/config/normalize-rule-options.js +51 -0
  39. package/dist/config/normalize-rule-options.js.map +1 -0
  40. package/dist/config/normalize-source-options.d.ts +16 -0
  41. package/dist/config/normalize-source-options.d.ts.map +1 -0
  42. package/dist/config/normalize-source-options.js +24 -0
  43. package/dist/config/normalize-source-options.js.map +1 -0
  44. package/dist/config/normalize-sync-imports-options.d.ts +4 -0
  45. package/dist/config/normalize-sync-imports-options.d.ts.map +1 -0
  46. package/dist/config/normalize-sync-imports-options.js +34 -0
  47. package/dist/config/normalize-sync-imports-options.js.map +1 -0
  48. package/dist/imports/aliases.d.ts +9 -0
  49. package/dist/imports/aliases.d.ts.map +1 -0
  50. package/dist/imports/aliases.js +150 -0
  51. package/dist/imports/aliases.js.map +1 -0
  52. package/dist/imports/resolve.d.ts +7 -0
  53. package/dist/imports/resolve.d.ts.map +1 -0
  54. package/dist/imports/resolve.js +49 -0
  55. package/dist/imports/resolve.js.map +1 -0
  56. package/dist/imports/rewrite.d.ts +5 -0
  57. package/dist/imports/rewrite.d.ts.map +1 -0
  58. package/dist/imports/rewrite.js +139 -0
  59. package/dist/imports/rewrite.js.map +1 -0
  60. package/dist/imports/scan.d.ts +4 -0
  61. package/dist/imports/scan.d.ts.map +1 -0
  62. package/dist/imports/scan.js +44 -0
  63. package/dist/imports/scan.js.map +1 -0
  64. package/dist/imports/strategies.d.ts +7 -0
  65. package/dist/imports/strategies.d.ts.map +1 -0
  66. package/dist/imports/strategies.js +55 -0
  67. package/dist/imports/strategies.js.map +1 -0
  68. package/dist/imports/sync-imports.d.ts +4 -0
  69. package/dist/imports/sync-imports.d.ts.map +1 -0
  70. package/dist/imports/sync-imports.js +41 -0
  71. package/dist/imports/sync-imports.js.map +1 -0
  72. package/dist/imports/types.d.ts +104 -0
  73. package/dist/imports/types.d.ts.map +1 -0
  74. package/dist/imports/types.js +2 -0
  75. package/dist/imports/types.js.map +1 -0
  76. package/dist/index.d.ts +16 -0
  77. package/dist/index.d.ts.map +1 -0
  78. package/dist/index.js +13 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/shared/constants.d.ts +18 -0
  81. package/dist/shared/constants.d.ts.map +1 -0
  82. package/dist/shared/constants.js +18 -0
  83. package/dist/shared/constants.js.map +1 -0
  84. package/dist/shared/errors.d.ts +34 -0
  85. package/dist/shared/errors.d.ts.map +1 -0
  86. package/dist/shared/errors.js +64 -0
  87. package/dist/shared/errors.js.map +1 -0
  88. package/dist/shared/logging-types.d.ts +18 -0
  89. package/dist/shared/logging-types.d.ts.map +1 -0
  90. package/dist/shared/logging-types.js +2 -0
  91. package/dist/shared/logging-types.js.map +1 -0
  92. package/dist/shared/logging.d.ts +5 -0
  93. package/dist/shared/logging.d.ts.map +1 -0
  94. package/dist/shared/logging.js +99 -0
  95. package/dist/shared/logging.js.map +1 -0
  96. package/dist/shared/utils.d.ts +24 -0
  97. package/dist/shared/utils.d.ts.map +1 -0
  98. package/dist/shared/utils.js +127 -0
  99. package/dist/shared/utils.js.map +1 -0
  100. package/package.json +54 -0
@@ -0,0 +1,49 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { CODE_DISCIPLINE_CONFIG_FILE } from "../shared/constants.js";
4
+ import { InvalidCodeDisciplineConfigError } from "../shared/errors.js";
5
+ import { pathExists } from "../shared/utils.js";
6
+ function defineCodeDisciplineConfig(config) {
7
+ return config;
8
+ }
9
+ function parseCodeDisciplineConfig(text, filePath) {
10
+ try {
11
+ const parsed = JSON.parse(text);
12
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
13
+ throw new InvalidCodeDisciplineConfigError("Config file must contain a JSON object", { filePath });
14
+ }
15
+ return parsed;
16
+ }
17
+ catch (error) {
18
+ if (error instanceof InvalidCodeDisciplineConfigError) {
19
+ throw error;
20
+ }
21
+ throw new InvalidCodeDisciplineConfigError("Failed to parse code-discipline config", {
22
+ filePath,
23
+ cause: error instanceof Error ? error.message : error,
24
+ });
25
+ }
26
+ }
27
+ async function loadCodeDisciplineConfig(projectRoot, configPath) {
28
+ const resolvedPath = configPath
29
+ ? path.resolve(projectRoot, configPath)
30
+ : path.join(projectRoot, CODE_DISCIPLINE_CONFIG_FILE);
31
+ if (!await pathExists(resolvedPath)) {
32
+ if (configPath) {
33
+ throw new InvalidCodeDisciplineConfigError("Config file was not found", {
34
+ filePath: resolvedPath,
35
+ });
36
+ }
37
+ return {
38
+ config: {},
39
+ configPath: null,
40
+ };
41
+ }
42
+ const text = await fs.readFile(resolvedPath, "utf8");
43
+ return {
44
+ config: parseCodeDisciplineConfig(text, resolvedPath),
45
+ configPath: resolvedPath,
46
+ };
47
+ }
48
+ export { defineCodeDisciplineConfig, loadCodeDisciplineConfig };
49
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,gCAAgC,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAOhD,SAAS,0BAA0B,CAAC,MAA4B;IAC9D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAY,EAAE,QAAgB;IAC/D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;QAC3C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnE,MAAM,IAAI,gCAAgC,CAAC,wCAAwC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrG,CAAC;QAED,OAAO,MAA8B,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,gCAAgC,EAAE,CAAC;YACtD,MAAM,KAAK,CAAC;QACd,CAAC;QAED,MAAM,IAAI,gCAAgC,CAAC,wCAAwC,EAAE;YACnF,QAAQ;YACR,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;SACtD,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,WAAmB,EAAE,UAAmB;IAC9E,MAAM,YAAY,GAAG,UAAU;QAC7B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC;QACvC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,2BAA2B,CAAC,CAAC;IAExD,IAAI,CAAC,MAAM,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACpC,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,IAAI,gCAAgC,CAAC,2BAA2B,EAAE;gBACtE,QAAQ,EAAE,YAAY;aACvB,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,MAAM,EAAE,EAAE;YACV,UAAU,EAAE,IAAI;SACjB,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAErD,OAAO;QACL,MAAM,EAAE,yBAAyB,CAAC,IAAI,EAAE,YAAY,CAAC;QACrD,UAAU,EAAE,YAAY;KACzB,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CheckCodeDisciplineOptions, NormalizedCheckCodeDisciplineOptions } from "../checks/types.js";
2
+ declare function normalizeCheckCodeDisciplineOptions(options: CheckCodeDisciplineOptions): Promise<NormalizedCheckCodeDisciplineOptions>;
3
+ export { normalizeCheckCodeDisciplineOptions };
4
+ //# sourceMappingURL=normalize-check-options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-check-options.d.ts","sourceRoot":"","sources":["../../src/config/normalize-check-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,oCAAoC,EAAE,MAAM,oBAAoB,CAAC;AAI3G,iBAAe,mCAAmC,CAChD,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,oCAAoC,CAAC,CAU/C;AAED,OAAO,EAAE,mCAAmC,EAAE,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { normalizeFolderizeCompoundFilesRule, normalizeMaxFileLinesRule } from "./normalize-rule-options.js";
2
+ import { normalizeSourceOptions } from "./normalize-source-options.js";
3
+ async function normalizeCheckCodeDisciplineOptions(options) {
4
+ const source = await normalizeSourceOptions(options);
5
+ return {
6
+ ...source,
7
+ rules: {
8
+ maxFileLines: normalizeMaxFileLinesRule(options.rules?.maxFileLines),
9
+ folderizeCompoundFiles: normalizeFolderizeCompoundFilesRule(options.rules?.folderizeCompoundFiles),
10
+ },
11
+ };
12
+ }
13
+ export { normalizeCheckCodeDisciplineOptions };
14
+ //# sourceMappingURL=normalize-check-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-check-options.js","sourceRoot":"","sources":["../../src/config/normalize-check-options.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mCAAmC,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAC7G,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,KAAK,UAAU,mCAAmC,CAChD,OAAmC;IAEnC,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAErD,OAAO;QACL,GAAG,MAAM;QACT,KAAK,EAAE;YACL,YAAY,EAAE,yBAAyB,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC;YACpE,sBAAsB,EAAE,mCAAmC,CAAC,OAAO,CAAC,KAAK,EAAE,sBAAsB,CAAC;SACnG;KACF,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,mCAAmC,EAAE,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { CodeDisciplineRuleSeverity, FolderizeCompoundFilesRuleOptions, MaxFileLinesRuleOptions } from "../checks/types.js";
2
+ declare function normalizeMaxFileLinesRule(rule: MaxFileLinesRuleOptions | undefined): {
3
+ enabled: boolean;
4
+ max: number;
5
+ severity: CodeDisciplineRuleSeverity;
6
+ };
7
+ declare function normalizeFolderizeCompoundFilesRule(rule: FolderizeCompoundFilesRuleOptions | undefined): {
8
+ enabled: boolean;
9
+ separators: string[];
10
+ suffixes: string[];
11
+ severity: CodeDisciplineRuleSeverity;
12
+ };
13
+ export { normalizeFolderizeCompoundFilesRule, normalizeMaxFileLinesRule };
14
+ //# sourceMappingURL=normalize-rule-options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-rule-options.d.ts","sourceRoot":"","sources":["../../src/config/normalize-rule-options.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,0BAA0B,EAC1B,iCAAiC,EACjC,uBAAuB,EACxB,MAAM,oBAAoB,CAAC;AAM5B,iBAAS,yBAAyB,CAAC,IAAI,EAAE,uBAAuB,GAAG,SAAS;;;;EAuB3E;AAED,iBAAS,mCAAmC,CAAC,IAAI,EAAE,iCAAiC,GAAG,SAAS;;;;;EAsB/F;AAMD,OAAO,EAAE,mCAAmC,EAAE,yBAAyB,EAAE,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { DEFAULT_FOLDERIZE_COMPOUND_FILES_SEVERITY, DEFAULT_FOLDERIZE_COMPOUND_FILE_SEPARATORS, DEFAULT_FOLDERIZE_COMPOUND_FILE_SUFFIXES, DEFAULT_MAX_FILE_LINES_SEVERITY, } from "../shared/constants.js";
2
+ import { InvalidCodeDisciplineConfigError } from "../shared/errors.js";
3
+ function normalizeSeverity(value) {
4
+ return value === "warn" ? "warn" : "error";
5
+ }
6
+ function normalizeMaxFileLinesRule(rule) {
7
+ const enabled = rule?.enabled ?? false;
8
+ if (!enabled) {
9
+ return {
10
+ enabled: false,
11
+ max: 0,
12
+ severity: normalizeSeverity(rule?.severity ?? DEFAULT_MAX_FILE_LINES_SEVERITY),
13
+ };
14
+ }
15
+ if (!Number.isFinite(rule?.max)) {
16
+ throw new InvalidCodeDisciplineConfigError("maxFileLines.max must be a finite number when the rule is enabled", {
17
+ rule: "maxFileLines",
18
+ value: rule?.max,
19
+ });
20
+ }
21
+ return {
22
+ enabled: true,
23
+ max: Math.max(1, Math.floor(rule.max)),
24
+ severity: normalizeSeverity(rule?.severity ?? DEFAULT_MAX_FILE_LINES_SEVERITY),
25
+ };
26
+ }
27
+ function normalizeFolderizeCompoundFilesRule(rule) {
28
+ const separators = uniqueStrings(rule?.separators ?? DEFAULT_FOLDERIZE_COMPOUND_FILE_SEPARATORS);
29
+ const suffixes = uniqueStrings(rule?.suffixes ?? DEFAULT_FOLDERIZE_COMPOUND_FILE_SUFFIXES);
30
+ if (separators.length === 0) {
31
+ throw new InvalidCodeDisciplineConfigError("folderizeCompoundFiles.separators must contain at least one separator", {
32
+ rule: "folderizeCompoundFiles",
33
+ });
34
+ }
35
+ if (suffixes.length === 0) {
36
+ throw new InvalidCodeDisciplineConfigError("folderizeCompoundFiles.suffixes must contain at least one suffix", {
37
+ rule: "folderizeCompoundFiles",
38
+ });
39
+ }
40
+ return {
41
+ enabled: rule?.enabled ?? false,
42
+ separators,
43
+ suffixes,
44
+ severity: normalizeSeverity(rule?.severity ?? DEFAULT_FOLDERIZE_COMPOUND_FILES_SEVERITY),
45
+ };
46
+ }
47
+ function uniqueStrings(values) {
48
+ return Array.from(new Set(values));
49
+ }
50
+ export { normalizeFolderizeCompoundFilesRule, normalizeMaxFileLinesRule };
51
+ //# sourceMappingURL=normalize-rule-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-rule-options.js","sourceRoot":"","sources":["../../src/config/normalize-rule-options.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yCAAyC,EACzC,0CAA0C,EAC1C,wCAAwC,EACxC,+BAA+B,GAChC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,gCAAgC,EAAE,MAAM,qBAAqB,CAAC;AAOvE,SAAS,iBAAiB,CAAC,KAA6C;IACtE,OAAO,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AAC7C,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAyC;IAC1E,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,KAAK,CAAC;IAEvC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,KAAK;YACd,GAAG,EAAE,CAAC;YACN,QAAQ,EAAE,iBAAiB,CAAC,IAAI,EAAE,QAAQ,IAAI,+BAA+B,CAAC;SAC/E,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,gCAAgC,CAAC,mEAAmE,EAAE;YAC9G,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,IAAI,EAAE,GAAG;SACjB,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAK,CAAC,GAAa,CAAC,CAAC;QACjD,QAAQ,EAAE,iBAAiB,CAAC,IAAI,EAAE,QAAQ,IAAI,+BAA+B,CAAC;KAC/E,CAAC;AACJ,CAAC;AAED,SAAS,mCAAmC,CAAC,IAAmD;IAC9F,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,UAAU,IAAI,0CAA0C,CAAC,CAAC;IACjG,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,EAAE,QAAQ,IAAI,wCAAwC,CAAC,CAAC;IAE3F,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,gCAAgC,CAAC,uEAAuE,EAAE;YAClH,IAAI,EAAE,wBAAwB;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,gCAAgC,CAAC,kEAAkE,EAAE;YAC7G,IAAI,EAAE,wBAAwB;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,KAAK;QAC/B,UAAU;QACV,QAAQ;QACR,QAAQ,EAAE,iBAAiB,CAAC,IAAI,EAAE,QAAQ,IAAI,yCAAyC,CAAC;KACzF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,MAAgB;IACrC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,OAAO,EAAE,mCAAmC,EAAE,yBAAyB,EAAE,CAAC"}
@@ -0,0 +1,16 @@
1
+ type NormalizedSourceOptions = {
2
+ projectRoot: string;
3
+ sourceRoot: string;
4
+ sourceRootRelative: string;
5
+ sourceExtensions: string[];
6
+ excludeDirs: string[];
7
+ };
8
+ declare function normalizeSourceOptions(options: {
9
+ projectRoot: string;
10
+ sourceRoot?: string;
11
+ sourceExtensions?: string[];
12
+ excludeDirs?: string[];
13
+ }): Promise<NormalizedSourceOptions>;
14
+ export { normalizeSourceOptions };
15
+ export type { NormalizedSourceOptions };
16
+ //# sourceMappingURL=normalize-source-options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-source-options.d.ts","sourceRoot":"","sources":["../../src/config/normalize-source-options.ts"],"names":[],"mappings":"AAMA,KAAK,uBAAuB,GAAG;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,iBAAe,sBAAsB,CAAC,OAAO,EAAE;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAmBnC;AAED,OAAO,EAAE,sBAAsB,EAAE,CAAC;AAClC,YAAY,EAAE,uBAAuB,EAAE,CAAC"}
@@ -0,0 +1,24 @@
1
+ import path from "node:path";
2
+ import { DEFAULT_EXCLUDE_DIRS, DEFAULT_SOURCE_EXTENSIONS, DEFAULT_SOURCE_ROOT } from "../shared/constants.js";
3
+ import { InvalidProjectRootError, InvalidSourceRootError } from "../shared/errors.js";
4
+ import { ensureDotExtension, isDirectory, isInsideDirectory, normalizeRelativePath, uniqueStrings } from "../shared/utils.js";
5
+ async function normalizeSourceOptions(options) {
6
+ const projectRoot = path.resolve(options.projectRoot);
7
+ if (!await isDirectory(projectRoot)) {
8
+ throw new InvalidProjectRootError(projectRoot);
9
+ }
10
+ const sourceRootInput = options.sourceRoot ?? DEFAULT_SOURCE_ROOT;
11
+ const sourceRoot = path.isAbsolute(sourceRootInput) ? path.resolve(sourceRootInput) : path.resolve(projectRoot, sourceRootInput);
12
+ if (!await isDirectory(sourceRoot) || !isInsideDirectory(sourceRoot, projectRoot)) {
13
+ throw new InvalidSourceRootError(sourceRoot);
14
+ }
15
+ return {
16
+ projectRoot,
17
+ sourceRoot,
18
+ sourceRootRelative: normalizeRelativePath(path.relative(projectRoot, sourceRoot)),
19
+ sourceExtensions: uniqueStrings((options.sourceExtensions ?? DEFAULT_SOURCE_EXTENSIONS).map(ensureDotExtension)),
20
+ excludeDirs: uniqueStrings(options.excludeDirs ?? DEFAULT_EXCLUDE_DIRS),
21
+ };
22
+ }
23
+ export { normalizeSourceOptions };
24
+ //# sourceMappingURL=normalize-source-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-source-options.js","sourceRoot":"","sources":["../../src/config/normalize-source-options.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC9G,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAU9H,KAAK,UAAU,sBAAsB,CAAC,OAKrC;IACC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACtD,IAAI,CAAC,MAAM,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,uBAAuB,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,IAAI,mBAAmB,CAAC;IAClE,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IACjI,IAAI,CAAC,MAAM,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,CAAC;QAClF,MAAM,IAAI,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO;QACL,WAAW;QACX,UAAU;QACV,kBAAkB,EAAE,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACjF,gBAAgB,EAAE,aAAa,CAAC,CAAC,OAAO,CAAC,gBAAgB,IAAI,yBAAyB,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChH,WAAW,EAAE,aAAa,CAAC,OAAO,CAAC,WAAW,IAAI,oBAAoB,CAAC;KACxE,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { NormalizedSyncImportsOptions, SyncImportsOptions } from "../imports/types.js";
2
+ declare function normalizeSyncImportsOptions(options: SyncImportsOptions): Promise<NormalizedSyncImportsOptions>;
3
+ export { normalizeSyncImportsOptions };
4
+ //# sourceMappingURL=normalize-sync-imports-options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-sync-imports-options.d.ts","sourceRoot":"","sources":["../../src/config/normalize-sync-imports-options.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,4BAA4B,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAI5F,iBAAe,2BAA2B,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,4BAA4B,CAAC,CA2B7G;AAED,OAAO,EAAE,2BAA2B,EAAE,CAAC"}
@@ -0,0 +1,34 @@
1
+ import path from "node:path";
2
+ import { DEFAULT_ALIAS_PREFIX, DEFAULT_ALIAS_RANDOM_LENGTH, DEFAULT_ALIAS_STRATEGY, DEFAULT_IMPORTS_REWRITE, DEFAULT_KEEP_RELATIVE, } from "../shared/constants.js";
3
+ import { InvalidTsconfigPathError } from "../shared/errors.js";
4
+ import { isDirectory } from "../shared/utils.js";
5
+ import { normalizeSourceOptions } from "./normalize-source-options.js";
6
+ async function normalizeSyncImportsOptions(options) {
7
+ const source = await normalizeSourceOptions(options);
8
+ const tsconfigInput = options.tsconfigPath ?? path.join(source.projectRoot, "tsconfig.json");
9
+ const tsconfigPath = path.isAbsolute(tsconfigInput) ? path.resolve(tsconfigInput) : path.resolve(source.projectRoot, tsconfigInput);
10
+ if (!await isDirectory(path.dirname(tsconfigPath))) {
11
+ throw new InvalidTsconfigPathError(tsconfigPath);
12
+ }
13
+ return {
14
+ ...source,
15
+ tsconfigPath,
16
+ alias: {
17
+ prefix: options.alias?.prefix ?? DEFAULT_ALIAS_PREFIX,
18
+ strategy: options.alias?.strategy ?? DEFAULT_ALIAS_STRATEGY,
19
+ randomLength: Math.max(1, Math.floor(options.alias?.randomLength ?? DEFAULT_ALIAS_RANDOM_LENGTH)),
20
+ },
21
+ imports: {
22
+ rewrite: options.imports?.rewrite ?? DEFAULT_IMPORTS_REWRITE,
23
+ keepRelative: options.imports?.keepRelative ?? DEFAULT_KEEP_RELATIVE,
24
+ },
25
+ logging: {
26
+ enabled: options.logging?.enabled ?? Boolean(options.logging?.logger || options.logging?.adapter),
27
+ logger: options.logging?.logger,
28
+ adapter: options.logging?.adapter,
29
+ quiet: options.logging?.quiet ?? false,
30
+ },
31
+ };
32
+ }
33
+ export { normalizeSyncImportsOptions };
34
+ //# sourceMappingURL=normalize-sync-imports-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-sync-imports-options.js","sourceRoot":"","sources":["../../src/config/normalize-sync-imports-options.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,KAAK,UAAU,2BAA2B,CAAC,OAA2B;IACpE,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,aAAa,GAAG,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAC7F,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACpI,IAAI,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,wBAAwB,CAAC,YAAY,CAAC,CAAC;IACnD,CAAC;IAED,OAAO;QACL,GAAG,MAAM;QACT,YAAY;QACZ,KAAK,EAAE;YACL,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,IAAI,oBAAoB;YACrD,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,IAAI,sBAAsB;YAC3D,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,IAAI,2BAA2B,CAAC,CAAC;SAClG;QACD,OAAO,EAAE;YACP,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,IAAI,uBAAuB;YAC5D,YAAY,EAAE,OAAO,CAAC,OAAO,EAAE,YAAY,IAAI,qBAAqB;SACrE;QACD,OAAO,EAAE;YACP,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC;YACjG,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM;YAC/B,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO;YACjC,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,IAAI,KAAK;SACvC;KACF,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,2BAA2B,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { NormalizedSyncImportsOptions, ScannedSourceFile, SyncAliasesResult, TsconfigJson } from "./types.js";
2
+ import type { NormalizedSyncImportsLogger } from "../shared/logging-types.js";
3
+ declare function readTsconfig(options: NormalizedSyncImportsOptions, logger?: NormalizedSyncImportsLogger): Promise<{
4
+ config: TsconfigJson;
5
+ originalConfig: TsconfigJson;
6
+ }>;
7
+ declare function syncTsconfigAliases(options: NormalizedSyncImportsOptions, sourceFiles: ScannedSourceFile[], logger: NormalizedSyncImportsLogger): Promise<SyncAliasesResult>;
8
+ export { readTsconfig, syncTsconfigAliases };
9
+ //# sourceMappingURL=aliases.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aliases.d.ts","sourceRoot":"","sources":["../../src/imports/aliases.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,4BAA4B,EAC5B,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AAqE9E,iBAAe,YAAY,CACzB,OAAO,EAAE,4BAA4B,EACrC,MAAM,CAAC,EAAE,2BAA2B,GACnC,OAAO,CAAC;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,cAAc,EAAE,YAAY,CAAA;CAAE,CAAC,CAuCjE;AAED,iBAAe,mBAAmB,CAChC,OAAO,EAAE,4BAA4B,EACrC,WAAW,EAAE,iBAAiB,EAAE,EAChC,MAAM,EAAE,2BAA2B,GAClC,OAAO,CAAC,iBAAiB,CAAC,CAkE5B;AAED,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,150 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { resolveProjectPathTarget } from "./resolve.js";
4
+ import { generateAliasId } from "./strategies.js";
5
+ import { isInsideDirectory, parseTsconfigJson, pathExists, stableSerialize, toStableJson, wait } from "../shared/utils.js";
6
+ const TSCONFIG_READ_RETRY_ATTEMPTS = 20;
7
+ const TSCONFIG_READ_RETRY_DELAY_MS = 50;
8
+ function normalizeTargetPath(projectRoot, targetPath) {
9
+ if (targetPath.includes("*"))
10
+ return null;
11
+ return path.resolve(projectRoot, targetPath);
12
+ }
13
+ function sortPathsRecord(pathsMap) {
14
+ const sorted = {};
15
+ for (const key of Object.keys(pathsMap).sort((left, right) => left.localeCompare(right))) {
16
+ sorted[key] = [...pathsMap[key]].sort((left, right) => left.localeCompare(right));
17
+ }
18
+ return sorted;
19
+ }
20
+ async function extractExistingPaths(options, sourceFilesByPath, existingPaths) {
21
+ const preservedAliasesByPath = new Map();
22
+ const passthroughPaths = {};
23
+ for (const aliasId of Object.keys(existingPaths).sort((left, right) => left.localeCompare(right))) {
24
+ const targets = existingPaths[aliasId];
25
+ let matchedFilePath = null;
26
+ for (const target of targets) {
27
+ const absoluteTarget = normalizeTargetPath(options.projectRoot, target);
28
+ if (!absoluteTarget)
29
+ continue;
30
+ const resolvedTarget = await resolveProjectPathTarget(absoluteTarget, options.sourceExtensions);
31
+ if (resolvedTarget && sourceFilesByPath.has(resolvedTarget)) {
32
+ matchedFilePath = resolvedTarget;
33
+ break;
34
+ }
35
+ }
36
+ if (matchedFilePath && !preservedAliasesByPath.has(matchedFilePath)) {
37
+ preservedAliasesByPath.set(matchedFilePath, aliasId);
38
+ continue;
39
+ }
40
+ const pointsIntoSourceRoot = targets.some((target) => {
41
+ const absoluteTarget = normalizeTargetPath(options.projectRoot, target);
42
+ return absoluteTarget ? isInsideDirectory(absoluteTarget, options.sourceRoot) : false;
43
+ });
44
+ if (!pointsIntoSourceRoot) {
45
+ passthroughPaths[aliasId] = [...targets];
46
+ }
47
+ }
48
+ return {
49
+ preservedAliasesByPath,
50
+ passthroughPaths: sortPathsRecord(passthroughPaths),
51
+ };
52
+ }
53
+ async function readTsconfig(options, logger) {
54
+ if (!await pathExists(options.tsconfigPath)) {
55
+ return {
56
+ config: { compilerOptions: {} },
57
+ originalConfig: { compilerOptions: {} },
58
+ };
59
+ }
60
+ let lastError;
61
+ for (let attempt = 1; attempt <= TSCONFIG_READ_RETRY_ATTEMPTS; attempt += 1) {
62
+ const text = await fs.readFile(options.tsconfigPath, "utf8");
63
+ try {
64
+ const parsed = parseTsconfigJson(text, options.tsconfigPath);
65
+ if (attempt > 1) {
66
+ logger?.warn("tsconfig-read-recovered", `tsconfig recovered after retries=${attempt - 1}`, {
67
+ tsconfigPath: options.tsconfigPath,
68
+ retries: attempt - 1,
69
+ });
70
+ }
71
+ return {
72
+ config: parsed,
73
+ originalConfig: parsed,
74
+ };
75
+ }
76
+ catch (error) {
77
+ lastError = error;
78
+ if (attempt >= TSCONFIG_READ_RETRY_ATTEMPTS)
79
+ break;
80
+ logger?.warn("tsconfig-read-retry", `tsconfig parse failed retry=${attempt}`, {
81
+ tsconfigPath: options.tsconfigPath,
82
+ retry: attempt,
83
+ maxRetries: TSCONFIG_READ_RETRY_ATTEMPTS - 1,
84
+ });
85
+ await wait(TSCONFIG_READ_RETRY_DELAY_MS);
86
+ }
87
+ }
88
+ throw lastError;
89
+ }
90
+ async function syncTsconfigAliases(options, sourceFiles, logger) {
91
+ const { config, originalConfig } = await readTsconfig(options, logger);
92
+ const sourceFilesByPath = new Map(sourceFiles.map((file) => [file.absolutePath, file]));
93
+ const compilerOptions = { ...(config.compilerOptions ?? {}) };
94
+ const existingPaths = compilerOptions.paths ?? {};
95
+ const existingState = await extractExistingPaths(options, sourceFilesByPath, existingPaths);
96
+ const reservedIds = new Set([
97
+ ...Object.keys(existingState.passthroughPaths),
98
+ ...Array.from(existingState.preservedAliasesByPath.values()),
99
+ ]);
100
+ const aliasRecords = [];
101
+ for (const file of sourceFiles) {
102
+ const preservedAlias = existingState.preservedAliasesByPath.get(file.absolutePath);
103
+ const aliasId = preservedAlias ?? generateAliasId(file, options, Array.from(reservedIds));
104
+ reservedIds.add(aliasId);
105
+ aliasRecords.push({
106
+ id: aliasId,
107
+ absolutePath: file.absolutePath,
108
+ relativeFromProjectRoot: file.relativeFromProjectRoot,
109
+ });
110
+ }
111
+ const managedPaths = {};
112
+ for (const record of aliasRecords) {
113
+ managedPaths[record.id] = [record.relativeFromProjectRoot];
114
+ }
115
+ const nextPaths = sortPathsRecord({
116
+ ...existingState.passthroughPaths,
117
+ ...managedPaths,
118
+ });
119
+ const nextCompilerOptions = {
120
+ ...compilerOptions,
121
+ paths: nextPaths,
122
+ };
123
+ delete nextCompilerOptions.baseUrl;
124
+ const nextConfig = {
125
+ ...config,
126
+ compilerOptions: nextCompilerOptions,
127
+ };
128
+ const aliasesChanged = stableSerialize(originalConfig) !== stableSerialize(nextConfig);
129
+ if (aliasesChanged) {
130
+ await fs.writeFile(options.tsconfigPath, toStableJson(nextConfig));
131
+ logger.success("aliases-written", `aliases written count=${aliasRecords.length}`, {
132
+ tsconfigPath: options.tsconfigPath,
133
+ aliasesCount: aliasRecords.length,
134
+ });
135
+ }
136
+ else {
137
+ logger.info("aliases-unchanged", `aliases unchanged count=${aliasRecords.length}`, {
138
+ tsconfigPath: options.tsconfigPath,
139
+ aliasesCount: aliasRecords.length,
140
+ });
141
+ }
142
+ return {
143
+ aliasesChanged,
144
+ aliasesCount: aliasRecords.length,
145
+ aliasRecords,
146
+ tsconfig: nextConfig,
147
+ };
148
+ }
149
+ export { readTsconfig, syncTsconfigAliases };
150
+ //# sourceMappingURL=aliases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aliases.js","sourceRoot":"","sources":["../../src/imports/aliases.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { NormalizedSyncImportsOptions } from "./types.js";
2
+ declare function isRelativeImportSpecifier(specifier: string): boolean;
3
+ declare function resolveFileCandidate(candidatePath: string, sourceExtensions: string[]): Promise<string | null>;
4
+ declare function resolveProjectPathTarget(targetPath: string, sourceExtensions: string[]): Promise<string | null>;
5
+ declare function resolveRelativeImport(specifier: string, sourceFile: string, options: NormalizedSyncImportsOptions): Promise<string | null>;
6
+ export { isRelativeImportSpecifier, resolveFileCandidate, resolveProjectPathTarget, resolveRelativeImport };
7
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/imports/resolve.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAG/D,iBAAS,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED,iBAAe,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAyB7G;AAED,iBAAe,wBAAwB,CAAC,UAAU,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAE9G;AAED,iBAAe,qBAAqB,CAClC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAUxB;AAED,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,CAAC"}
@@ -0,0 +1,49 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { isInsideDirectory } from "../shared/utils.js";
4
+ function isRelativeImportSpecifier(specifier) {
5
+ return specifier.startsWith("./") || specifier.startsWith("../");
6
+ }
7
+ async function resolveFileCandidate(candidatePath, sourceExtensions) {
8
+ try {
9
+ const exactStat = await fs.stat(candidatePath);
10
+ if (exactStat.isFile())
11
+ return candidatePath;
12
+ }
13
+ catch { }
14
+ for (const extension of sourceExtensions) {
15
+ const filePath = `${candidatePath}${extension}`;
16
+ try {
17
+ const stat = await fs.stat(filePath);
18
+ if (stat.isFile())
19
+ return filePath;
20
+ }
21
+ catch { }
22
+ }
23
+ for (const extension of sourceExtensions) {
24
+ const indexPath = path.join(candidatePath, `index${extension}`);
25
+ try {
26
+ const stat = await fs.stat(indexPath);
27
+ if (stat.isFile())
28
+ return indexPath;
29
+ }
30
+ catch { }
31
+ }
32
+ return null;
33
+ }
34
+ async function resolveProjectPathTarget(targetPath, sourceExtensions) {
35
+ return resolveFileCandidate(targetPath, sourceExtensions);
36
+ }
37
+ async function resolveRelativeImport(specifier, sourceFile, options) {
38
+ if (!isRelativeImportSpecifier(specifier))
39
+ return null;
40
+ const basePath = path.resolve(path.dirname(sourceFile), specifier);
41
+ const resolved = await resolveFileCandidate(basePath, options.sourceExtensions);
42
+ if (!resolved)
43
+ return null;
44
+ if (!isInsideDirectory(resolved, options.sourceRoot))
45
+ return null;
46
+ return resolved;
47
+ }
48
+ export { isRelativeImportSpecifier, resolveFileCandidate, resolveProjectPathTarget, resolveRelativeImport };
49
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/imports/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,SAAS,yBAAyB,CAAC,SAAiB;IAClD,OAAO,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,aAAqB,EAAE,gBAA0B;IACnF,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC/C,IAAI,SAAS,CAAC,MAAM,EAAE;YAAE,OAAO,aAAa,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,KAAK,MAAM,SAAS,IAAI,gBAAgB,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,GAAG,aAAa,GAAG,SAAS,EAAE,CAAC;QAEhD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,IAAI,CAAC,MAAM,EAAE;gBAAE,OAAO,QAAQ,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,gBAAgB,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,SAAS,EAAE,CAAC,CAAC;QAEhE,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,MAAM,EAAE;gBAAE,OAAO,SAAS,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,UAAkB,EAAE,gBAA0B;IACpF,OAAO,oBAAoB,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;AAC5D,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,SAAiB,EACjB,UAAkB,EAClB,OAAqC;IAErC,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEhF,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAElE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { AliasRecord, NormalizedSyncImportsOptions, RewriteResult, ScannedSourceFile } from "./types.js";
2
+ import type { NormalizedSyncImportsLogger } from "../shared/logging-types.js";
3
+ declare function rewriteSourceImports(sourceFiles: ScannedSourceFile[], aliasRecords: AliasRecord[], options: NormalizedSyncImportsOptions, logger: NormalizedSyncImportsLogger): Promise<RewriteResult>;
4
+ export { rewriteSourceImports };
5
+ //# sourceMappingURL=rewrite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rewrite.d.ts","sourceRoot":"","sources":["../../src/imports/rewrite.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,WAAW,EAEX,4BAA4B,EAE5B,aAAa,EACb,iBAAiB,EAClB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AAmK9E,iBAAe,oBAAoB,CACjC,WAAW,EAAE,iBAAiB,EAAE,EAChC,YAAY,EAAE,WAAW,EAAE,EAC3B,OAAO,EAAE,4BAA4B,EACrC,MAAM,EAAE,2BAA2B,GAClC,OAAO,CAAC,aAAa,CAAC,CAexB;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}