ts-repo-utils 5.0.2 → 5.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 (32) hide show
  1. package/dist/functions/assert-ext.d.mts.map +1 -1
  2. package/dist/functions/assert-ext.mjs +13 -10
  3. package/dist/functions/assert-ext.mjs.map +1 -1
  4. package/dist/functions/exec-async.d.mts.map +1 -1
  5. package/dist/functions/exec-async.mjs +1 -0
  6. package/dist/functions/exec-async.mjs.map +1 -1
  7. package/dist/functions/gen-index.d.mts +1 -1
  8. package/dist/functions/gen-index.d.mts.map +1 -1
  9. package/dist/functions/gen-index.mjs +15 -10
  10. package/dist/functions/gen-index.mjs.map +1 -1
  11. package/dist/functions/workspace-utils/execute-parallel.mjs +11 -11
  12. package/dist/functions/workspace-utils/execute-parallel.mjs.map +1 -1
  13. package/dist/functions/workspace-utils/run-cmd-in-parallel.mjs +2 -2
  14. package/dist/functions/workspace-utils/run-cmd-in-parallel.mjs.map +1 -1
  15. package/dist/functions/workspace-utils/run-cmd-in-stages.mjs +2 -2
  16. package/dist/functions/workspace-utils/run-cmd-in-stages.mjs.map +1 -1
  17. package/dist/globals.d.mts +1 -0
  18. package/dist/node-global.d.mts.map +1 -1
  19. package/dist/node-global.mjs +1 -0
  20. package/dist/node-global.mjs.map +1 -1
  21. package/package.json +18 -8
  22. package/src/functions/assert-ext.mts +25 -12
  23. package/src/functions/diff.test.mts +28 -21
  24. package/src/functions/exec-async.mts +1 -0
  25. package/src/functions/format.test.mts +8 -4
  26. package/src/functions/gen-index.mts +39 -14
  27. package/src/functions/workspace-utils/execute-parallel.mts +11 -11
  28. package/src/functions/workspace-utils/run-cmd-in-parallel.mts +2 -2
  29. package/src/functions/workspace-utils/run-cmd-in-stages.mts +2 -2
  30. package/src/globals.d.mts +1 -0
  31. package/src/node-global.mts +3 -0
  32. package/src/functions/gen-index.test.mts +0 -18
@@ -1 +1 @@
1
- {"version":3,"file":"assert-ext.d.mts","sourceRoot":"","sources":["../../src/functions/assert-ext.mts"],"names":[],"mappings":"AACA,OAAO,oBAAoB,CAAC;AAG5B;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,CAAC;IACxC,6DAA6D;IAC7D,WAAW,EAAE;QACX,8BAA8B;QAC9B,IAAI,EAAE,MAAM,CAAC;QAEb,gHAAgH;QAChH,SAAS,EAAE,IAAI,MAAM,EAAE,GAAG,IAAI,MAAM,EAAE,EAAE,CAAC;QAEzC,sFAAsF;QACtF,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;KAC3B,EAAE,CAAC;CACL,CAAC,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,SAAS,GAAU,QAAQ,cAAc,KAAG,OAAO,CAAC,IAAI,CA0DpE,CAAC"}
1
+ {"version":3,"file":"assert-ext.d.mts","sourceRoot":"","sources":["../../src/functions/assert-ext.mts"],"names":[],"mappings":"AACA,OAAO,oBAAoB,CAAC;AAG5B;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,CAAC;IACxC,6DAA6D;IAC7D,WAAW,EAAE;QACX,8BAA8B;QAC9B,IAAI,EAAE,MAAM,CAAC;QAEb,gHAAgH;QAChH,SAAS,EAAE,IAAI,MAAM,EAAE,GAAG,IAAI,MAAM,EAAE,EAAE,CAAC;QAEzC,sFAAsF;QACtF,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;KAC3B,EAAE,CAAC;CACL,CAAC,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,SAAS,GAAU,QAAQ,cAAc,KAAG,OAAO,CAAC,IAAI,CAuEpE,CAAC"}
@@ -1,4 +1,4 @@
1
- import { isString } from 'ts-data-forge';
1
+ import { isString, Arr } from 'ts-data-forge';
2
2
  import '../node-global.mjs';
3
3
  import { assertPathExists } from './assert-path-exists.mjs';
4
4
 
@@ -23,18 +23,21 @@ const assertExt = async (config) => {
23
23
  if (allIncorrectFiles.length > 0) {
24
24
  const generateErrorMessage = () => {
25
25
  // Group directories by extension for a cleaner message
26
- const extensionGroups = new Map();
27
- for (const { path: dirPath, extension } of config.directories) {
26
+ const extensionGroups = Arr.groupBy(config.directories.map(({ path: dirPath, extension }) => {
28
27
  const relativePath = path.relative(process.cwd(), dirPath);
29
- const extKey = isString(extension) ? extension : extension.join(' or ');
30
- if (!extensionGroups.has(extKey)) {
31
- extensionGroups.set(extKey, []);
32
- }
33
- extensionGroups.get(extKey)?.push(relativePath);
34
- }
28
+ const extKey = isString(extension)
29
+ ? extension
30
+ : extension.join(' or ');
31
+ return {
32
+ relativePath,
33
+ extKey,
34
+ };
35
+ }), ({ extKey }) => extKey);
35
36
  // Generate message parts for each extension
36
37
  const messageParts = Array.from(extensionGroups.entries(), ([ext, dirs]) => {
37
- const dirList = dirs.length === 1 ? dirs[0] : dirs.join(', ');
38
+ const dirList = dirs.length === 1
39
+ ? dirs[0]?.relativePath
40
+ : dirs.map((d) => d.relativePath).join(', ');
38
41
  return `${dirList} should have ${ext} extension`;
39
42
  });
40
43
  return `All files in ${messageParts.join(' and ')}.`;
@@ -1 +1 @@
1
- {"version":3,"file":"assert-ext.mjs","sources":["../../src/functions/assert-ext.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"assert-ext.mjs","sources":["../../src/functions/assert-ext.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"exec-async.d.mts","sourceRoot":"","sources":["../../src/functions/exec-async.mts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC;;;;;GAKG;AACH,eAAO,MAAM,CAAC,GACZ,KAAK,MAAM,EACX,UAAS,QAAQ,CAAC;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAM,KAC7D,OAAO,CACR,MAAM,CAAC,QAAQ,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,aAAa,CAAC,CA4BpE,CAAC"}
1
+ {"version":3,"file":"exec-async.d.mts","sourceRoot":"","sources":["../../src/functions/exec-async.mts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC;;;;;GAKG;AACH,eAAO,MAAM,CAAC,GACZ,KAAK,MAAM,EACX,UAAS,QAAQ,CAAC;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAM,KAC7D,OAAO,CACR,MAAM,CAAC,QAAQ,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,aAAa,CAAC,CA6BpE,CAAC"}
@@ -14,6 +14,7 @@ const $ = (cmd, options = {}) => {
14
14
  }
15
15
  return new Promise((resolve) => {
16
16
  const execOptions = { timeout };
17
+ // eslint-disable-next-line security/detect-child-process
17
18
  exec(cmd, execOptions, (error, stdout, stderr) => {
18
19
  if (!silent) {
19
20
  if (stdout !== '') {
@@ -1 +1 @@
1
- {"version":3,"file":"exec-async.mjs","sources":["../../src/functions/exec-async.mts"],"sourcesContent":[null],"names":[],"mappings":";;;AAGA;;;;;AAKG;AACI,MAAM,CAAC,GAAG,CACf,GAAW,EACX,OAAA,GAA4D,EAAE,KAG5D;IACF,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,OAAO;IAEnD,IAAI,CAAC,MAAM,EAAE;AACX,QAAA,IAAI,CAAC,CAAA,EAAA,EAAK,GAAG,CAAA,CAAE,CAAC;IAClB;AAEA,IAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;AAC7B,QAAA,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE;AAE/B,QAAA,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,KAAI;YAC/C,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,IAAI,MAAM,KAAK,EAAE,EAAE;oBACjB,IAAI,CAAC,MAAM,CAAC;gBACd;AACA,gBAAA,IAAI,MAAM,KAAK,EAAE,EAAE;AACjB,oBAAA,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;gBACvB;YACF;AAEA,YAAA,IAAI,KAAK,KAAK,IAAI,EAAE;gBAClB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC5B;iBAAO;AACL,gBAAA,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YACxC;AACF,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;AACJ;;;;"}
1
+ {"version":3,"file":"exec-async.mjs","sources":["../../src/functions/exec-async.mts"],"sourcesContent":[null],"names":[],"mappings":";;;AAGA;;;;;AAKG;AACI,MAAM,CAAC,GAAG,CACf,GAAW,EACX,OAAA,GAA4D,EAAE,KAG5D;IACF,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,OAAO;IAEnD,IAAI,CAAC,MAAM,EAAE;AACX,QAAA,IAAI,CAAC,CAAA,EAAA,EAAK,GAAG,CAAA,CAAE,CAAC;IAClB;AAEA,IAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;AAC7B,QAAA,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE;;AAG/B,QAAA,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,KAAI;YAC/C,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,IAAI,MAAM,KAAK,EAAE,EAAE;oBACjB,IAAI,CAAC,MAAM,CAAC;gBACd;AACA,gBAAA,IAAI,MAAM,KAAK,EAAE,EAAE;AACjB,oBAAA,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;gBACvB;YACF;AAEA,YAAA,IAAI,KAAK,KAAK,IAAI,EAAE;gBAClB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC5B;iBAAO;AACL,gBAAA,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YACxC;AACF,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;AACJ;;;;"}
@@ -12,7 +12,7 @@ export type GenIndexConfig = DeepReadonly<{
12
12
  /** File extension of index files to generate (default: '.ts') */
13
13
  indexExtension?: `.${string}`;
14
14
  /** File extension to use in export statements (default: '.js') */
15
- exportExtension?: `.${string}`;
15
+ exportExtension?: `.${string}` | 'none';
16
16
  /** Command to run for formatting generated files (default: 'npm run fmt') */
17
17
  formatCommand?: string;
18
18
  /** Whether to suppress output during execution (default: false) */
@@ -1 +1 @@
1
- {"version":3,"file":"gen-index.d.mts","sourceRoot":"","sources":["../../src/functions/gen-index.mts"],"names":[],"mappings":"AAEA,OAAO,oBAAoB,CAAC;AAG5B;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,CAAC;IACxC,kFAAkF;IAClF,eAAe,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IAE5C,+GAA+G;IAC/G,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAEpC,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,SAAS,IAAI,MAAM,EAAE,EAAE,CAAC;IAE3C,iEAAiE;IACjE,cAAc,CAAC,EAAE,IAAI,MAAM,EAAE,CAAC;IAE9B,kEAAkE;IAClE,eAAe,CAAC,EAAE,IAAI,MAAM,EAAE,CAAC;IAE/B,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,mEAAmE;IACnE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC,CAAC;AAYH;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAU,QAAQ,cAAc,KAAG,OAAO,CAAC,IAAI,CA8CnE,CAAC"}
1
+ {"version":3,"file":"gen-index.d.mts","sourceRoot":"","sources":["../../src/functions/gen-index.mts"],"names":[],"mappings":"AAEA,OAAO,oBAAoB,CAAC;AAG5B;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,CAAC;IACxC,kFAAkF;IAClF,eAAe,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IAE5C,+GAA+G;IAC/G,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAEpC,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,SAAS,IAAI,MAAM,EAAE,EAAE,CAAC;IAE3C,iEAAiE;IACjE,cAAc,CAAC,EAAE,IAAI,MAAM,EAAE,CAAC;IAE9B,kEAAkE;IAClE,eAAe,CAAC,EAAE,IAAI,MAAM,EAAE,GAAG,MAAM,CAAC;IAExC,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,mEAAmE;IACnE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC,CAAC;AAYH;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAU,QAAQ,cAAc,KAAG,OAAO,CAAC,IAAI,CA8CnE,CAAC"}
@@ -24,7 +24,7 @@ const genIndex = async (config) => {
24
24
  await assertPathExists(resolvedDir, `Target directory: ${dir}`);
25
25
  }
26
26
  // Step 2: Generate index files
27
- echo('2. Generating index files...');
27
+ echo('Generating index files...');
28
28
  for (const dir of targetDirs) {
29
29
  const resolvedDir = path.resolve(dir);
30
30
  // eslint-disable-next-line no-await-in-loop
@@ -33,7 +33,7 @@ const genIndex = async (config) => {
33
33
  echo('✓ Index files generated\n');
34
34
  // Step 3: Format generated files
35
35
  if (filledConfig.formatCommand !== undefined) {
36
- echo('3. Formatting generated files...');
36
+ echo('Formatting generated files...');
37
37
  const fmtResult = await $(filledConfig.formatCommand, {
38
38
  silent: filledConfig.silent,
39
39
  });
@@ -92,8 +92,8 @@ const generateIndexFileForDir = async (dirPath, config, baseDir) => {
92
92
  try {
93
93
  const actualBaseDir = baseDir ?? dirPath;
94
94
  const entries = await fs.readdir(dirPath, { withFileTypes: true });
95
- const subDirectories = [];
96
- const filesToExport = [];
95
+ const mut_subDirectories = [];
96
+ const mut_filesToExport = [];
97
97
  for (const entry of entries) {
98
98
  const entryName = entry.name;
99
99
  const entryPath = path.join(dirPath, entryName);
@@ -103,16 +103,16 @@ const generateIndexFileForDir = async (dirPath, config, baseDir) => {
103
103
  continue; // Skip excluded directories/files
104
104
  }
105
105
  if (entry.isDirectory()) {
106
- subDirectories.push(entryName);
106
+ mut_subDirectories.push(entryName);
107
107
  // Recursively call for subdirectories first
108
108
  // eslint-disable-next-line no-await-in-loop
109
109
  await generateIndexFileForDir(entryPath, config, actualBaseDir);
110
110
  }
111
111
  else if (entry.isFile() && shouldExportFile(relativePath, config)) {
112
- filesToExport.push(entryName);
112
+ mut_filesToExport.push(entryName);
113
113
  }
114
114
  }
115
- const indexContent = generateIndexContent(subDirectories, filesToExport, config);
115
+ const indexContent = generateIndexContent(mut_subDirectories, mut_filesToExport, config);
116
116
  const indexPath = path.join(dirPath, `index${config.indexExtension}`);
117
117
  await fs.writeFile(indexPath, indexContent);
118
118
  echo(`Generated: ${path.relative(process.cwd(), indexPath)}`);
@@ -121,6 +121,7 @@ const generateIndexFileForDir = async (dirPath, config, baseDir) => {
121
121
  throw new Error(`Failed to generate index for directory ${dirPath}: ${String(error)}`);
122
122
  }
123
123
  };
124
+ const indexRegex = /^index\.[cm]?[jt]s[x]?$/u;
124
125
  /**
125
126
  * Determines if a file should be exported in the index file.
126
127
  * A file is exported if:
@@ -139,7 +140,7 @@ const shouldExportFile = (filePath, config) => {
139
140
  return false;
140
141
  }
141
142
  // Don't export the index file itself
142
- if (/^index\.[cm]?[jt]s[x]?$/u.test(fileName) // Matches index.ts, index.mts, index.js, index.tsx
143
+ if (indexRegex.test(fileName) // Matches index.ts, index.mts, index.js, index.tsx
143
144
  ) {
144
145
  return false;
145
146
  }
@@ -161,10 +162,14 @@ const shouldExportFile = (filePath, config) => {
161
162
  */
162
163
  const generateIndexContent = (subDirectories, filesToExport, config) => {
163
164
  const exportStatements = [
164
- ...subDirectories.map((subDir) => `export * from "./${subDir}/index${config.exportExtension}";`),
165
+ ...subDirectories.map((subDir) => config.exportExtension === 'none'
166
+ ? `export * from "./${subDir}";`
167
+ : `export * from "./${subDir}/index${config.exportExtension}";`),
165
168
  ...filesToExport.map((file) => {
166
169
  const fileNameWithoutExt = path.basename(file, path.extname(file));
167
- return `export * from "./${fileNameWithoutExt}${config.exportExtension}";`;
170
+ return config.exportExtension === 'none'
171
+ ? `export * from "./${fileNameWithoutExt}";`
172
+ : `export * from "./${fileNameWithoutExt}${config.exportExtension}";`;
168
173
  }),
169
174
  ];
170
175
  return exportStatements.length === 0
@@ -1 +1 @@
1
- {"version":3,"file":"gen-index.mjs","sources":["../../src/functions/gen-index.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gen-index.mjs","sources":["../../src/functions/gen-index.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAyCA;;;;AAIG;MACU,QAAQ,GAAG,OAAO,MAAsB,KAAmB;IACtE,IAAI,CAAC,qCAAqC,CAAC;;AAG3C,IAAA,MAAM,YAAY,GAA2B,UAAU,CAAC,MAAM,CAAC;;AAG/D,IAAA,MAAM,UAAU,GACd,OAAO,MAAM,CAAC,eAAe,KAAK;AAChC,UAAE,CAAC,MAAM,CAAC,eAAe;AACzB,UAAE,MAAM,CAAC,eAAe;AAE5B,IAAA,IAAI;;AAEF,QAAA,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;YAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;;YAErC,MAAM,gBAAgB,CAAC,WAAW,EAAE,qBAAqB,GAAG,CAAA,CAAE,CAAC;QACjE;;QAGA,IAAI,CAAC,2BAA2B,CAAC;AACjC,QAAA,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;YAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;;AAErC,YAAA,MAAM,uBAAuB,CAAC,WAAW,EAAE,YAAY,CAAC;QAC1D;QACA,IAAI,CAAC,2BAA2B,CAAC;;AAGjC,QAAA,IAAI,YAAY,CAAC,aAAa,KAAK,SAAS,EAAE;YAC5C,IAAI,CAAC,+BAA+B,CAAC;YACrC,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,YAAY,CAAC,aAAa,EAAE;gBACpD,MAAM,EAAE,YAAY,CAAC,MAAM;AAC5B,aAAA,CAAC;AACF,YAAA,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;gBAC3B,MAAM,IAAI,KAAK,CAAC,CAAA,mBAAA,EAAsB,SAAS,CAAC,KAAK,CAAC,OAAO,CAAA,CAAE,CAAC;YAClE;YACA,IAAI,CAAC,0BAA0B,CAAC;QAClC;QAEA,IAAI,CAAC,mDAAmD,CAAC;IAC3D;IAAE,OAAO,KAAK,EAAE;QACd,IAAI,CAAC,8BAA8B,MAAM,CAAC,KAAK,CAAC,CAAA,EAAA,CAAI,CAAC;AACrD,QAAA,MAAM,KAAK;IACb;AACF;AAEA;;;;;;;;;;AAUG;AACH,MAAM,UAAU,GAAG,CAAC,MAAsB,KAA4B;IACpE,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,CAAC,KAAK,CAAC;IAC3D,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,KAAK,CAAC;IAExD,OAAO;QACL,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,eAAe,EAAE,IAAI,CAAC,MAAM,CAC1B,QAAQ,CAAC,MAAM,CAAC,eAAe;AAC7B,cAAE,CAAC,MAAM,CAAC,eAAe;AACzB,cAAE,MAAM,CAAC,eAAe,CAC3B;QACD,eAAe,EAAE,IAAI,CAAC,MAAM,CAC1B,GAAG,CAAC,QAAQ,CAAC,aAAS;AACpB,YAAA,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS,EAAE;AACxC,gBAAA,OAAO,MAAM,CAAC,eAAe;YAC/B;AACA,YAAA,MAAM,kCAAkC;AAC1C,QAAA,CAAC,CAAC,CACH;AACD,QAAA,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;AAC/C,QAAA,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,KAAK;QAC9C,eAAe;AACf,QAAA,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,KAAK;KAC/B;AACH,CAAC;AAED;;;;;;;AAOG;AACH,MAAM,uBAAuB,GAAG,OAC9B,OAAe,EACf,MAA8B,EAC9B,OAAgB,KACC;AACjB,IAAA,IAAI;AACF,QAAA,MAAM,aAAa,GAAG,OAAO,IAAI,OAAO;AACxC,QAAA,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QAElE,MAAM,kBAAkB,GAAa,EAAE;QACvC,MAAM,iBAAiB,GAAa,EAAE;AAEtC,QAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;AAC3B,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI;YAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;YAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC;AAE5D,YAAA,IACE,MAAM,CAAC,eAAe,CAAC,IAAI,CACzB,CAAC,GAAG,KACF,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC;gBACrC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CACrC,EACD;AACA,gBAAA,SAAS;YACX;AAEA,YAAA,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE;AACvB,gBAAA,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC;;;gBAGlC,MAAM,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,CAAC;YACjE;AAAO,iBAAA,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,gBAAgB,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE;AACnE,gBAAA,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC;YACnC;QACF;QAEA,MAAM,YAAY,GAAG,oBAAoB,CACvC,kBAAkB,EAClB,iBAAiB,EACjB,MAAM,CACP;AAED,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAA,KAAA,EAAQ,MAAM,CAAC,cAAc,CAAA,CAAE,CAAC;QAErE,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,YAAY,CAAC;AAC3C,QAAA,IAAI,CAAC,CAAA,WAAA,EAAc,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAA,CAAE,CAAC;IAC/D;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,MAAM,IAAI,KAAK,CACb,CAAA,uCAAA,EAA0C,OAAO,CAAA,EAAA,EAAK,MAAM,CAAC,KAAK,CAAC,CAAA,CAAE,CACtE;IACH;AACF,CAAC;AAED,MAAM,UAAU,GAAG,0BAA0B;AAE7C;;;;;;;;;AASG;AACH,MAAM,gBAAgB,GAAG,CACvB,QAAgB,EAChB,MAA8B,KACnB;IACX,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAExC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;;IAGlC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACrC,QAAA,OAAO,KAAK;IACd;;AAGA,IAAA,IACE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;MACzB;AACA,QAAA,OAAO,KAAK;IACd;;IAGA,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE;AACrD,QAAA,IACE,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC;YACrC,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,EACrC;AACA,YAAA,OAAO,KAAK;QACd;IACF;AAEA,IAAA,OAAO,IAAI;AACb,CAAC;AAqBD;;;;;;AAMG;AACH,MAAM,oBAAoB,GAAG,CAC3B,cAAiC,EACjC,aAAgC,EAChC,MAA8B,KACpB;AACV,IAAA,MAAM,gBAAgB,GAAG;AACvB,QAAA,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,KAC3B,MAAM,CAAC,eAAe,KAAK;cACvB,CAAA,iBAAA,EAAoB,MAAM,CAAA,EAAA;cAC1B,oBAAoB,MAAM,CAAA,MAAA,EAAS,MAAM,CAAC,eAAe,IAAI,CAClE;AACD,QAAA,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AAC5B,YAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAElE,YAAA,OAAO,MAAM,CAAC,eAAe,KAAK;kBAC9B,CAAA,iBAAA,EAAoB,kBAAkB,CAAA,EAAA;kBACtC,oBAAoB,kBAAkB,CAAA,EAAG,MAAM,CAAC,eAAe,IAAI;AACzE,QAAA,CAAC,CAAC;KACH;AAED,IAAA,OAAO,gBAAgB,CAAC,MAAM,KAAK;AACjC,UAAE;AACF,UAAE,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC;;;;"}
@@ -39,28 +39,28 @@ const executeParallel = async (packages, scriptName, concurrency = 3) => {
39
39
  const executeStages = async (packages, scriptName, concurrency = 3) => {
40
40
  const dependencyGraph = buildDependencyGraph(packages);
41
41
  const sorted = topologicalSortPackages(packages, dependencyGraph);
42
- const stages = [];
42
+ const mut_stages = [];
43
43
  const completed = new Set();
44
44
  while (completed.size < sorted.length) {
45
- const stage = [];
45
+ const mut_stage = [];
46
46
  for (const pkg of sorted) {
47
47
  if (completed.has(pkg.name))
48
48
  continue;
49
49
  const deps = dependencyGraph.get(pkg.name) ?? [];
50
50
  const depsCompleted = deps.every((dep) => completed.has(dep));
51
51
  if (depsCompleted) {
52
- stage.push(pkg);
52
+ mut_stage.push(pkg);
53
53
  }
54
54
  }
55
- if (stage.length === 0) {
55
+ if (mut_stage.length === 0) {
56
56
  throw new Error('Circular dependency detected');
57
57
  }
58
- stages.push(stage);
59
- for (const pkg of stage)
58
+ mut_stages.push(mut_stage);
59
+ for (const pkg of mut_stage)
60
60
  completed.add(pkg.name);
61
61
  }
62
- console.log(`\nExecuting ${scriptName} in ${stages.length} stages...\n`);
63
- for (const [i, stage] of stages.entries()) {
62
+ console.log(`\nExecuting ${scriptName} in ${mut_stages.length} stages...\n`);
63
+ for (const [i, stage] of mut_stages.entries()) {
64
64
  if (stage.length > 0) {
65
65
  console.log(`Stage ${i + 1}: ${stage.map((p) => p.name).join(', ')}`);
66
66
  // eslint-disable-next-line no-await-in-loop
@@ -123,7 +123,7 @@ const executeScript = (pkg, scriptName, { prefix = true } = {}) => pipe(createPr
123
123
  */
124
124
  const topologicalSortPackages = (packages, dependencyGraph) => {
125
125
  const visited = new Set();
126
- const result = [];
126
+ const mut_result = [];
127
127
  const packageMap = new Map(packages.map((p) => [p.name, p]));
128
128
  const visit = (pkgName) => {
129
129
  if (visited.has(pkgName))
@@ -133,12 +133,12 @@ const topologicalSortPackages = (packages, dependencyGraph) => {
133
133
  for (const dep of deps) {
134
134
  visit(dep);
135
135
  }
136
- result.push(pkgName);
136
+ mut_result.push(pkgName);
137
137
  };
138
138
  for (const pkg of packages) {
139
139
  visit(pkg.name);
140
140
  }
141
- return result
141
+ return mut_result
142
142
  .map((pkgName) => packageMap.get(pkgName))
143
143
  .filter(isNotUndefined);
144
144
  };
@@ -1 +1 @@
1
- {"version":3,"file":"execute-parallel.mjs","sources":["../../../src/functions/workspace-utils/execute-parallel.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"execute-parallel.mjs","sources":["../../../src/functions/workspace-utils/execute-parallel.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -20,8 +20,8 @@ const runCmdInParallelAcrossWorkspaces = async ({ rootPackageJsonDir, cmd, concu
20
20
  await executeParallel(filteredPackages, cmd, concurrency);
21
21
  console.log(`\n✅ ${cmd} completed successfully`);
22
22
  }
23
- catch (err) {
24
- console.error(`\n❌ ${cmd} failed:`, err instanceof Error ? err.message : (err?.toString() ?? ''));
23
+ catch (error) {
24
+ console.error(`\n❌ ${cmd} failed:`, error instanceof Error ? error.message : (error?.toString() ?? ''));
25
25
  process.exit(1);
26
26
  }
27
27
  };
@@ -1 +1 @@
1
- {"version":3,"file":"run-cmd-in-parallel.mjs","sources":["../../../src/functions/workspace-utils/run-cmd-in-parallel.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKA;;;;;;;;AAQG;AACI,MAAM,gCAAgC,GAAG,OAAO,EACrD,kBAAkB,EAClB,GAAG,EACH,WAAW,GAAG,CAAC,EACf,sBAAsB,GAMtB,KAAmB;AACnB,IAAA,IAAI;AACF,QAAA,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,kBAAkB,CAAC;AAE/D,QAAA,MAAM,gBAAgB,GACpB,sBAAsB,KAAK;AACzB,cAAE;AACF,cAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEhE,MAAM,eAAe,CAAC,gBAAgB,EAAE,GAAG,EAAE,WAAW,CAAC;AACzD,QAAA,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAA,uBAAA,CAAyB,CAAC;IAClD;IAAE,OAAO,GAAG,EAAE;AACZ,QAAA,OAAO,CAAC,KAAK,CACX,CAAA,IAAA,EAAO,GAAG,CAAA,QAAA,CAAU,EACpB,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC7D;AACD,QAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACjB;AACF;;;;"}
1
+ {"version":3,"file":"run-cmd-in-parallel.mjs","sources":["../../../src/functions/workspace-utils/run-cmd-in-parallel.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKA;;;;;;;;AAQG;AACI,MAAM,gCAAgC,GAAG,OAAO,EACrD,kBAAkB,EAClB,GAAG,EACH,WAAW,GAAG,CAAC,EACf,sBAAsB,GAMtB,KAAmB;AACnB,IAAA,IAAI;AACF,QAAA,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,kBAAkB,CAAC;AAE/D,QAAA,MAAM,gBAAgB,GACpB,sBAAsB,KAAK;AACzB,cAAE;AACF,cAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEhE,MAAM,eAAe,CAAC,gBAAgB,EAAE,GAAG,EAAE,WAAW,CAAC;AACzD,QAAA,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAA,uBAAA,CAAyB,CAAC;IAClD;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,KAAK,CACX,CAAA,IAAA,EAAO,GAAG,CAAA,QAAA,CAAU,EACpB,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CACnE;AACD,QAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACjB;AACF;;;;"}
@@ -22,8 +22,8 @@ const runCmdInStagesAcrossWorkspaces = async ({ rootPackageJsonDir, cmd, concurr
22
22
  await executeStages(filteredPackages, cmd, concurrency);
23
23
  console.log(`\n✅ ${cmd} completed successfully`);
24
24
  }
25
- catch (err) {
26
- console.error(`\n❌ ${cmd} failed:`, err instanceof Error ? err.message : (err?.toString() ?? ''));
25
+ catch (error) {
26
+ console.error(`\n❌ ${cmd} failed:`, error instanceof Error ? error.message : (error?.toString() ?? ''));
27
27
  process.exit(1);
28
28
  }
29
29
  };
@@ -1 +1 @@
1
- {"version":3,"file":"run-cmd-in-stages.mjs","sources":["../../../src/functions/workspace-utils/run-cmd-in-stages.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKA;;;;;;;;;;AAUG;AACI,MAAM,8BAA8B,GAAG,OAAO,EACnD,kBAAkB,EAClB,GAAG,EACH,WAAW,GAAG,CAAC,EACf,sBAAsB,GAMtB,KAAmB;AACnB,IAAA,IAAI;AACF,QAAA,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,kBAAkB,CAAC;AAE/D,QAAA,MAAM,gBAAgB,GACpB,sBAAsB,KAAK;AACzB,cAAE;AACF,cAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEhE,MAAM,aAAa,CAAC,gBAAgB,EAAE,GAAG,EAAE,WAAW,CAAC;AACvD,QAAA,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAA,uBAAA,CAAyB,CAAC;IAClD;IAAE,OAAO,GAAG,EAAE;AACZ,QAAA,OAAO,CAAC,KAAK,CACX,CAAA,IAAA,EAAO,GAAG,CAAA,QAAA,CAAU,EACpB,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC7D;AACD,QAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACjB;AACF;;;;"}
1
+ {"version":3,"file":"run-cmd-in-stages.mjs","sources":["../../../src/functions/workspace-utils/run-cmd-in-stages.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKA;;;;;;;;;;AAUG;AACI,MAAM,8BAA8B,GAAG,OAAO,EACnD,kBAAkB,EAClB,GAAG,EACH,WAAW,GAAG,CAAC,EACf,sBAAsB,GAMtB,KAAmB;AACnB,IAAA,IAAI;AACF,QAAA,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,kBAAkB,CAAC;AAE/D,QAAA,MAAM,gBAAgB,GACpB,sBAAsB,KAAK;AACzB,cAAE;AACF,cAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEhE,MAAM,aAAa,CAAC,gBAAgB,EAAE,GAAG,EAAE,WAAW,CAAC;AACvD,QAAA,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAA,uBAAA,CAAyB,CAAC;IAClD;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,KAAK,CACX,CAAA,IAAA,EAAO,GAAG,CAAA,QAAA,CAAU,EACpB,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CACnE;AACD,QAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACjB;AACF;;;;"}
@@ -1 +1,2 @@
1
+ /* eslint-disable import/unambiguous */
1
2
  /// <reference types="ts-type-forge" />
@@ -1 +1 @@
1
- {"version":3,"file":"node-global.d.mts","sourceRoot":"","sources":["../src/node-global.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,4BAA4B,CAAC;AAarD,OAAO,CAAC,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;IACnB,MAAM,IAAI,EAAE,OAAO,OAAO,CAAC,GAAG,CAAC;IAE/B,MAAM,IAAI,EAAE,OAAO,KAAK,CAAC;IACzB,MAAM,EAAE,EAAE,OAAO,GAAG,CAAC;IACrB,MAAM,IAAI,EAAE,OAAO,KAAK,CAAC;CAC1B"}
1
+ {"version":3,"file":"node-global.d.mts","sourceRoot":"","sources":["../src/node-global.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,WAAW,CAAC;AAGnC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,4BAA4B,CAAC;AAcrD,OAAO,CAAC,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;IACnB,MAAM,IAAI,EAAE,OAAO,OAAO,CAAC,GAAG,CAAC;IAE/B,MAAM,IAAI,EAAE,OAAO,KAAK,CAAC;IACzB,MAAM,EAAE,EAAE,OAAO,GAAG,CAAC;IACrB,MAAM,IAAI,EAAE,OAAO,KAAK,CAAC;CAC1B"}
@@ -10,5 +10,6 @@ const globalsDef = {
10
10
  fs: fs_,
11
11
  glob: glob_,
12
12
  };
13
+ // eslint-disable-next-line functional/immutable-data
13
14
  Object.assign(globalThis, globalsDef);
14
15
  //# sourceMappingURL=node-global.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"node-global.mjs","sources":["../src/node-global.mts"],"sourcesContent":[null],"names":["$_"],"mappings":";;;;;AAKA,MAAM,UAAU,GAAG;AACjB,IAAA,CAAC,EAAEA,CAAE;IACL,IAAI,EAAE,OAAO,CAAC,GAAG;AAEjB,IAAA,IAAI,EAAE,KAAK;AACX,IAAA,EAAE,EAAE,GAAG;AACP,IAAA,IAAI,EAAE,KAAK;CACH;AAEV,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC"}
1
+ {"version":3,"file":"node-global.mjs","sources":["../src/node-global.mts"],"sourcesContent":[null],"names":["$_"],"mappings":";;;;;AAOA,MAAM,UAAU,GAAG;AACjB,IAAA,CAAC,EAAEA,CAAE;IACL,IAAI,EAAE,OAAO,CAAC,GAAG;AAEjB,IAAA,IAAI,EAAE,KAAK;AACX,IAAA,EAAE,EAAE,GAAG;AACP,IAAA,IAAI,EAAE,KAAK;CACH;AAEV;AACA,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-repo-utils",
3
- "version": "5.0.2",
3
+ "version": "5.1.0",
4
4
  "private": false,
5
5
  "keywords": [
6
6
  "typescript"
@@ -16,13 +16,13 @@
16
16
  "exports": {
17
17
  ".": {
18
18
  "import": {
19
- "types": "./dist/index.d.mts",
19
+ "types": "./dist/type.d.mts",
20
20
  "default": "./dist/index.mjs"
21
21
  }
22
22
  }
23
23
  },
24
24
  "module": "./dist/index.mjs",
25
- "types": "./dist/index.d.mts",
25
+ "types": "./dist/type.d.mts",
26
26
  "files": [
27
27
  "src",
28
28
  "dist",
@@ -47,7 +47,7 @@
47
47
  "test:ui": "npm run z:vitest -- --ui",
48
48
  "testw": "npm run z:vitest -- watch",
49
49
  "tsc": "tsc --noEmit",
50
- "tscw": "tsc --noEmit --watch",
50
+ "tscw": "tsc --noEmit --watch -p ./tsconfig.json",
51
51
  "type-check": "tsc --noEmit",
52
52
  "update-packages": "npx npm-check-updates -u --install always",
53
53
  "z:vitest": "vitest --config ./configs/vitest.config.ts"
@@ -57,7 +57,7 @@
57
57
  "fast-glob": "^3.3.3",
58
58
  "micromatch": "^4.0.8",
59
59
  "prettier": "^3.6.2",
60
- "ts-data-forge": "^3.0.2"
60
+ "ts-data-forge": "^3.0.4"
61
61
  },
62
62
  "devDependencies": {
63
63
  "@eslint/js": "^9.31.0",
@@ -69,21 +69,31 @@
69
69
  "@semantic-release/exec": "^7.1.0",
70
70
  "@semantic-release/git": "^10.0.1",
71
71
  "@semantic-release/github": "^11.0.3",
72
- "@semantic-release/npm": "^12.0.1",
72
+ "@semantic-release/npm": "^12.0.2",
73
73
  "@semantic-release/release-notes-generator": "^14.0.3",
74
74
  "@types/node": "^24.1.0",
75
75
  "@vitest/coverage-v8": "^3.2.4",
76
76
  "@vitest/ui": "^3.2.4",
77
77
  "conventional-changelog-conventionalcommits": "^9.1.0",
78
- "cspell": "^9.1.5",
78
+ "cspell": "^9.2.0",
79
79
  "dedent": "^1.6.0",
80
- "eslint": "^9.31.0",
80
+ "eslint": "^9.32.0",
81
+ "eslint-import-resolver-typescript": "4.4.4",
82
+ "eslint-plugin-array-func": "5.0.2",
83
+ "eslint-plugin-functional": "7.1.0",
84
+ "eslint-plugin-import": "2.32.0",
85
+ "eslint-plugin-prefer-arrow-functions": "3.6.2",
86
+ "eslint-plugin-promise": "7.2.1",
87
+ "eslint-plugin-security": "3.0.1",
88
+ "eslint-plugin-unicorn": "60.0.0",
89
+ "eslint-plugin-vitest": "0.5.4",
81
90
  "markdownlint-cli2": "^0.18.1",
82
91
  "prettier-plugin-organize-imports": "^4.2.0",
83
92
  "prettier-plugin-packagejson": "^2.5.19",
84
93
  "rollup": "^4.45.1",
85
94
  "semantic-release": "^24.2.7",
86
95
  "ts-type-forge": "^2.1.1",
96
+ "tslib": "^2.8.1",
87
97
  "tsx": "^4.20.3",
88
98
  "typedoc": "^0.28.7",
89
99
  "typedoc-plugin-markdown": "^4.7.1",
@@ -1,4 +1,4 @@
1
- import { isString } from 'ts-data-forge';
1
+ import { Arr, type IMap, isString } from 'ts-data-forge';
2
2
  import '../node-global.mjs';
3
3
  import { assertPathExists } from './assert-path-exists.mjs';
4
4
 
@@ -47,22 +47,35 @@ export const assertExt = async (config: CheckExtConfig): Promise<void> => {
47
47
  if (allIncorrectFiles.length > 0) {
48
48
  const generateErrorMessage = (): string => {
49
49
  // Group directories by extension for a cleaner message
50
- const extensionGroups = new Map<string, string[]>();
51
-
52
- for (const { path: dirPath, extension } of config.directories) {
53
- const relativePath = path.relative(process.cwd(), dirPath);
54
- const extKey = isString(extension) ? extension : extension.join(' or ');
55
- if (!extensionGroups.has(extKey)) {
56
- extensionGroups.set(extKey, []);
57
- }
58
- extensionGroups.get(extKey)?.push(relativePath);
59
- }
50
+ const extensionGroups: IMap<
51
+ string,
52
+ readonly Readonly<{
53
+ relativePath: string;
54
+ extKey: string;
55
+ }>[]
56
+ > = Arr.groupBy(
57
+ config.directories.map(({ path: dirPath, extension }) => {
58
+ const relativePath = path.relative(process.cwd(), dirPath);
59
+ const extKey = isString(extension)
60
+ ? extension
61
+ : extension.join(' or ');
62
+
63
+ return {
64
+ relativePath,
65
+ extKey,
66
+ };
67
+ }),
68
+ ({ extKey }) => extKey,
69
+ );
60
70
 
61
71
  // Generate message parts for each extension
62
72
  const messageParts = Array.from(
63
73
  extensionGroups.entries(),
64
74
  ([ext, dirs]) => {
65
- const dirList = dirs.length === 1 ? dirs[0] : dirs.join(', ');
75
+ const dirList =
76
+ dirs.length === 1
77
+ ? dirs[0]?.relativePath
78
+ : dirs.map((d) => d.relativePath).join(', ');
66
79
  return `${dirList} should have ${ext} extension`;
67
80
  },
68
81
  );
@@ -3,12 +3,9 @@ import '../node-global.mjs';
3
3
  import { getDiffFrom, getUntrackedFiles } from './diff.mjs';
4
4
 
5
5
  describe('diff', () => {
6
- // Use project root for test files to ensure git tracking
7
- const testFiles: string[] = [];
8
-
9
- afterEach(async () => {
10
- // Clean up test files
11
- for (const file of testFiles) {
6
+ // Helper function to clean up test files
7
+ const cleanupTestFiles = async (files: Set<string>): Promise<void> => {
8
+ for (const file of files) {
12
9
  try {
13
10
  // eslint-disable-next-line no-await-in-loop
14
11
  await fs.rm(file, { force: true });
@@ -16,8 +13,7 @@ describe('diff', () => {
16
13
  // Ignore cleanup errors
17
14
  }
18
15
  }
19
- testFiles.length = 0;
20
- });
16
+ };
21
17
 
22
18
  describe('getUntrackedFiles', () => {
23
19
  test('should return empty array when no files are changed', async () => {
@@ -30,10 +26,12 @@ describe('diff', () => {
30
26
  });
31
27
 
32
28
  test('should detect newly created files', async () => {
29
+ const testFiles = new Set<string>();
30
+
33
31
  // Create a new file in project root
34
32
  const testFileName = 'test-new-file.tmp';
35
33
  const testFilePath = path.join(process.cwd(), testFileName);
36
- testFiles.push(testFilePath);
34
+ testFiles.add(testFilePath);
37
35
 
38
36
  await fs.writeFile(testFilePath, 'test content');
39
37
 
@@ -42,15 +40,19 @@ describe('diff', () => {
42
40
  expect(Result.isOk(result)).toBe(true);
43
41
  if (Result.isOk(result)) {
44
42
  const files = result.value;
45
- expect(files.some((file) => file === testFileName)).toBe(true);
43
+ expect(files).toContain(testFileName);
46
44
  }
45
+
46
+ await cleanupTestFiles(testFiles);
47
47
  });
48
48
 
49
49
  test('should detect modified existing files', async () => {
50
+ const testFiles = new Set<string>();
51
+
50
52
  // Use an existing file in the project that we can modify safely
51
53
  const testFileName = 'test-modify-file.tmp';
52
54
  const testFilePath = path.join(process.cwd(), testFileName);
53
- testFiles.push(testFilePath);
55
+ testFiles.add(testFilePath);
54
56
 
55
57
  // Create and commit the file first
56
58
  await fs.writeFile(testFilePath, 'initial content');
@@ -66,18 +68,23 @@ describe('diff', () => {
66
68
  expect(Result.isOk(result)).toBe(true);
67
69
  if (Result.isOk(result)) {
68
70
  const files = result.value;
69
- expect(files.some((file) => file === testFileName)).toBe(false);
71
+ expect(files).not.toContain(testFileName);
70
72
  }
71
73
 
72
74
  // Reset git state
73
75
  await $(`git reset HEAD ${testFileName}`, { silent: true });
76
+
77
+ await cleanupTestFiles(testFiles);
74
78
  });
75
79
 
76
80
  test('should detect multiple types of changes', async () => {
81
+ const testFiles = new Set<string>();
82
+
77
83
  // Create multiple test files
78
84
  const newFile = path.join(process.cwd(), 'test-new-file.tmp');
79
85
  const modifyFile = path.join(process.cwd(), 'test-modify-file.tmp');
80
- testFiles.push(newFile, modifyFile);
86
+ testFiles.add(newFile);
87
+ testFiles.add(modifyFile);
81
88
 
82
89
  // Create new file
83
90
  await fs.writeFile(newFile, 'new file content');
@@ -94,14 +101,14 @@ describe('diff', () => {
94
101
  expect(Result.isOk(result)).toBe(true);
95
102
  if (Result.isOk(result)) {
96
103
  const files = result.value;
97
- expect(files.some((file) => file === 'test-new-file.tmp')).toBe(true);
98
- expect(files.some((file) => file === 'test-modify-file.tmp')).toBe(
99
- false,
100
- );
104
+ expect(files).toContain('test-new-file.tmp');
105
+ expect(files).not.toContain('test-modify-file.tmp');
101
106
  }
102
107
 
103
108
  // Reset git state
104
109
  await $(`git reset HEAD test-modify-file.tmp`, { silent: true });
110
+
111
+ await cleanupTestFiles(testFiles);
105
112
  });
106
113
 
107
114
  test('should exclude deleted files from results', async () => {
@@ -113,10 +120,10 @@ describe('diff', () => {
113
120
  if (Result.isOk(result)) {
114
121
  const files = result.value;
115
122
  // Verify no deleted files are included (status 'D')
116
- files.forEach((file) => {
123
+ for (const file of files) {
117
124
  expect(typeof file).toBe('string');
118
125
  expect(file.length).toBeGreaterThan(0);
119
- });
126
+ }
120
127
  }
121
128
  });
122
129
 
@@ -137,11 +144,11 @@ describe('diff', () => {
137
144
  const files = result.value;
138
145
 
139
146
  // Each file should be a non-empty string
140
- files.forEach((file) => {
147
+ for (const file of files) {
141
148
  expect(typeof file).toBe('string');
142
149
  expect(file.trim()).toBe(file); // No leading/trailing whitespace
143
150
  expect(file.length).toBeGreaterThan(0);
144
- });
151
+ }
145
152
  }
146
153
  });
147
154
 
@@ -22,6 +22,7 @@ export const $ = (
22
22
  return new Promise((resolve) => {
23
23
  const execOptions = { timeout };
24
24
 
25
+ // eslint-disable-next-line security/detect-child-process
25
26
  exec(cmd, execOptions, (error, stdout, stderr) => {
26
27
  if (!silent) {
27
28
  if (stdout !== '') {
@@ -27,6 +27,7 @@ describe('formatFiles', () => {
27
27
  fs.readFile(filePath, 'utf8');
28
28
 
29
29
  test('should format files matching glob pattern', async () => {
30
+ vi.clearAllMocks();
30
31
  // Setup test directory
31
32
  await fs.mkdir(testDir, { recursive: true });
32
33
 
@@ -84,6 +85,7 @@ describe('formatFiles', () => {
84
85
  });
85
86
 
86
87
  test('should return ok when no files match pattern', async () => {
88
+ vi.clearAllMocks();
87
89
  const result = await formatFiles('/non-existent-path/*.ts', {
88
90
  silent: true,
89
91
  });
@@ -91,6 +93,7 @@ describe('formatFiles', () => {
91
93
  });
92
94
 
93
95
  test('should handle nested directories with glob pattern', async () => {
96
+ vi.clearAllMocks();
94
97
  // Setup test directory with nested structure
95
98
  await fs.mkdir(path.join(testDir, 'src', 'utils'), { recursive: true });
96
99
 
@@ -143,6 +146,7 @@ describe('formatFilesList', () => {
143
146
  fs.readFile(filePath, 'utf8');
144
147
 
145
148
  test('should format a list of files', async () => {
149
+ vi.clearAllMocks();
146
150
  await fs.mkdir(testDir, { recursive: true });
147
151
 
148
152
  try {
@@ -189,6 +193,7 @@ describe('formatFilesList', () => {
189
193
  });
190
194
 
191
195
  test('should return ok for empty file list', async () => {
196
+ vi.clearAllMocks();
192
197
  const result = await formatFilesList([], {
193
198
  silent: true,
194
199
  });
@@ -211,11 +216,8 @@ describe('formatDiffFrom', () => {
211
216
  const readTestFile = async (filePath: string): Promise<string> =>
212
217
  fs.readFile(filePath, 'utf8');
213
218
 
214
- beforeEach(() => {
215
- vi.clearAllMocks();
216
- });
217
-
218
219
  test('should format files from diff', async () => {
220
+ vi.clearAllMocks();
219
221
  await fs.mkdir(testDir, { recursive: true });
220
222
 
221
223
  try {
@@ -250,6 +252,7 @@ describe('formatDiffFrom', () => {
250
252
  });
251
253
 
252
254
  test('should include untracked files when option is set', async () => {
255
+ vi.clearAllMocks();
253
256
  await fs.mkdir(testDir, { recursive: true });
254
257
 
255
258
  try {
@@ -302,6 +305,7 @@ describe('formatDiffFrom', () => {
302
305
  });
303
306
 
304
307
  test('should deduplicate files when including untracked', async () => {
308
+ vi.clearAllMocks();
305
309
  await fs.mkdir(testDir, { recursive: true });
306
310
 
307
311
  try {
@@ -20,7 +20,7 @@ export type GenIndexConfig = DeepReadonly<{
20
20
  indexExtension?: `.${string}`;
21
21
 
22
22
  /** File extension to use in export statements (default: '.js') */
23
- exportExtension?: `.${string}`;
23
+ exportExtension?: `.${string}` | 'none';
24
24
 
25
25
  /** Command to run for formatting generated files (default: 'npm run fmt') */
26
26
  formatCommand?: string;
@@ -35,7 +35,7 @@ type GenIndexConfigInternal = DeepReadonly<{
35
35
  excludePatterns: ISet<string>;
36
36
  sourceExtensions: ISet<`.${string}`>;
37
37
  indexExtension: `.${string}`;
38
- exportExtension: `.${string}`;
38
+ exportExtension: `.${string}` | 'none';
39
39
  silent: boolean;
40
40
  }>;
41
41
 
@@ -65,7 +65,7 @@ export const genIndex = async (config: GenIndexConfig): Promise<void> => {
65
65
  }
66
66
 
67
67
  // Step 2: Generate index files
68
- echo('2. Generating index files...');
68
+ echo('Generating index files...');
69
69
  for (const dir of targetDirs) {
70
70
  const resolvedDir = path.resolve(dir);
71
71
  // eslint-disable-next-line no-await-in-loop
@@ -75,7 +75,7 @@ export const genIndex = async (config: GenIndexConfig): Promise<void> => {
75
75
 
76
76
  // Step 3: Format generated files
77
77
  if (filledConfig.formatCommand !== undefined) {
78
- echo('3. Formatting generated files...');
78
+ echo('Formatting generated files...');
79
79
  const fmtResult = await $(filledConfig.formatCommand, {
80
80
  silent: filledConfig.silent,
81
81
  });
@@ -146,8 +146,8 @@ const generateIndexFileForDir = async (
146
146
  const actualBaseDir = baseDir ?? dirPath;
147
147
  const entries = await fs.readdir(dirPath, { withFileTypes: true });
148
148
 
149
- const subDirectories: string[] = [];
150
- const filesToExport: string[] = [];
149
+ const mut_subDirectories: string[] = [];
150
+ const mut_filesToExport: string[] = [];
151
151
 
152
152
  for (const entry of entries) {
153
153
  const entryName = entry.name;
@@ -165,18 +165,18 @@ const generateIndexFileForDir = async (
165
165
  }
166
166
 
167
167
  if (entry.isDirectory()) {
168
- subDirectories.push(entryName);
168
+ mut_subDirectories.push(entryName);
169
169
  // Recursively call for subdirectories first
170
170
  // eslint-disable-next-line no-await-in-loop
171
171
  await generateIndexFileForDir(entryPath, config, actualBaseDir);
172
172
  } else if (entry.isFile() && shouldExportFile(relativePath, config)) {
173
- filesToExport.push(entryName);
173
+ mut_filesToExport.push(entryName);
174
174
  }
175
175
  }
176
176
 
177
177
  const indexContent = generateIndexContent(
178
- subDirectories,
179
- filesToExport,
178
+ mut_subDirectories,
179
+ mut_filesToExport,
180
180
  config,
181
181
  );
182
182
 
@@ -191,6 +191,8 @@ const generateIndexFileForDir = async (
191
191
  }
192
192
  };
193
193
 
194
+ const indexRegex = /^index\.[cm]?[jt]s[x]?$/u;
195
+
194
196
  /**
195
197
  * Determines if a file should be exported in the index file.
196
198
  * A file is exported if:
@@ -216,7 +218,7 @@ const shouldExportFile = (
216
218
 
217
219
  // Don't export the index file itself
218
220
  if (
219
- /^index\.[cm]?[jt]s[x]?$/u.test(fileName) // Matches index.ts, index.mts, index.js, index.tsx
221
+ indexRegex.test(fileName) // Matches index.ts, index.mts, index.js, index.tsx
220
222
  ) {
221
223
  return false;
222
224
  }
@@ -234,6 +236,25 @@ const shouldExportFile = (
234
236
  return true;
235
237
  };
236
238
 
239
+ if (import.meta.vitest !== undefined) {
240
+ describe('index file regex', () => {
241
+ test.each([
242
+ ['index.ts', true],
243
+ ['index.js', true],
244
+ ['index.mts', true],
245
+ ['index.mjs', true],
246
+ ['index.cts', true],
247
+ ['index.cjs', true],
248
+ ['index.tsx', true],
249
+ ['index.jsx', true],
250
+ ['not-index.ts', false],
251
+ ['index.txt', false],
252
+ ] as const)('indexRegex.test($0) to be $1', (fileName, expected) => {
253
+ expect(indexRegex.test(fileName)).toBe(expected);
254
+ });
255
+ });
256
+ }
257
+
237
258
  /**
238
259
  * Generates the content for an index file.
239
260
  * @param subDirectories - Array of subdirectory names.
@@ -247,13 +268,17 @@ const generateIndexContent = (
247
268
  config: GenIndexConfigInternal,
248
269
  ): string => {
249
270
  const exportStatements = [
250
- ...subDirectories.map(
251
- (subDir) => `export * from "./${subDir}/index${config.exportExtension}";`,
271
+ ...subDirectories.map((subDir) =>
272
+ config.exportExtension === 'none'
273
+ ? `export * from "./${subDir}";`
274
+ : `export * from "./${subDir}/index${config.exportExtension}";`,
252
275
  ),
253
276
  ...filesToExport.map((file) => {
254
277
  const fileNameWithoutExt = path.basename(file, path.extname(file));
255
278
 
256
- return `export * from "./${fileNameWithoutExt}${config.exportExtension}";`;
279
+ return config.exportExtension === 'none'
280
+ ? `export * from "./${fileNameWithoutExt}";`
281
+ : `export * from "./${fileNameWithoutExt}${config.exportExtension}";`;
257
282
  }),
258
283
  ];
259
284
 
@@ -78,11 +78,11 @@ export const executeStages = async (
78
78
 
79
79
  const sorted = topologicalSortPackages(packages, dependencyGraph);
80
80
 
81
- const stages: (readonly Package[])[] = [];
81
+ const mut_stages: (readonly Package[])[] = [];
82
82
  const completed = new Set<string>();
83
83
 
84
84
  while (completed.size < sorted.length) {
85
- const stage: Package[] = [];
85
+ const mut_stage: Package[] = [];
86
86
 
87
87
  for (const pkg of sorted) {
88
88
  if (completed.has(pkg.name)) continue;
@@ -91,21 +91,21 @@ export const executeStages = async (
91
91
  const depsCompleted = deps.every((dep) => completed.has(dep));
92
92
 
93
93
  if (depsCompleted) {
94
- stage.push(pkg);
94
+ mut_stage.push(pkg);
95
95
  }
96
96
  }
97
97
 
98
- if (stage.length === 0) {
98
+ if (mut_stage.length === 0) {
99
99
  throw new Error('Circular dependency detected');
100
100
  }
101
101
 
102
- stages.push(stage);
103
- for (const pkg of stage) completed.add(pkg.name);
102
+ mut_stages.push(mut_stage);
103
+ for (const pkg of mut_stage) completed.add(pkg.name);
104
104
  }
105
105
 
106
- console.log(`\nExecuting ${scriptName} in ${stages.length} stages...\n`);
106
+ console.log(`\nExecuting ${scriptName} in ${mut_stages.length} stages...\n`);
107
107
 
108
- for (const [i, stage] of stages.entries()) {
108
+ for (const [i, stage] of mut_stages.entries()) {
109
109
  if (stage.length > 0) {
110
110
  console.log(`Stage ${i + 1}: ${stage.map((p) => p.name).join(', ')}`);
111
111
  // eslint-disable-next-line no-await-in-loop
@@ -199,7 +199,7 @@ const topologicalSortPackages = (
199
199
  dependencyGraph: ReadonlyMap<string, readonly string[]>,
200
200
  ): readonly Package[] => {
201
201
  const visited = new Set<string>();
202
- const result: string[] = [];
202
+ const mut_result: string[] = [];
203
203
 
204
204
  const packageMap = new Map(packages.map((p) => [p.name, p]));
205
205
 
@@ -212,14 +212,14 @@ const topologicalSortPackages = (
212
212
  visit(dep);
213
213
  }
214
214
 
215
- result.push(pkgName);
215
+ mut_result.push(pkgName);
216
216
  };
217
217
 
218
218
  for (const pkg of packages) {
219
219
  visit(pkg.name);
220
220
  }
221
221
 
222
- return result
222
+ return mut_result
223
223
  .map((pkgName) => packageMap.get(pkgName))
224
224
  .filter(isNotUndefined);
225
225
  };
@@ -33,10 +33,10 @@ export const runCmdInParallelAcrossWorkspaces = async ({
33
33
 
34
34
  await executeParallel(filteredPackages, cmd, concurrency);
35
35
  console.log(`\n✅ ${cmd} completed successfully`);
36
- } catch (err) {
36
+ } catch (error) {
37
37
  console.error(
38
38
  `\n❌ ${cmd} failed:`,
39
- err instanceof Error ? err.message : (err?.toString() ?? ''),
39
+ error instanceof Error ? error.message : (error?.toString() ?? ''),
40
40
  );
41
41
  process.exit(1);
42
42
  }
@@ -35,10 +35,10 @@ export const runCmdInStagesAcrossWorkspaces = async ({
35
35
 
36
36
  await executeStages(filteredPackages, cmd, concurrency);
37
37
  console.log(`\n✅ ${cmd} completed successfully`);
38
- } catch (err) {
38
+ } catch (error) {
39
39
  console.error(
40
40
  `\n❌ ${cmd} failed:`,
41
- err instanceof Error ? err.message : (err?.toString() ?? ''),
41
+ error instanceof Error ? error.message : (error?.toString() ?? ''),
42
42
  );
43
43
  process.exit(1);
44
44
  }
package/src/globals.d.mts CHANGED
@@ -1 +1,2 @@
1
+ /* eslint-disable import/unambiguous */
1
2
  /// <reference types="ts-type-forge" />
@@ -1,6 +1,8 @@
1
1
  import { default as glob_ } from 'fast-glob';
2
2
  import * as fs_ from 'node:fs/promises';
3
3
  import * as path_ from 'node:path';
4
+
5
+ // eslint-disable-next-line import/no-internal-modules
4
6
  import { $ as $_ } from './functions/exec-async.mjs';
5
7
 
6
8
  const globalsDef = {
@@ -12,6 +14,7 @@ const globalsDef = {
12
14
  glob: glob_,
13
15
  } as const;
14
16
 
17
+ // eslint-disable-next-line functional/immutable-data
15
18
  Object.assign(globalThis, globalsDef);
16
19
 
17
20
  declare global {
@@ -1,18 +0,0 @@
1
- describe('index file regex', () => {
2
- const reg = /^index\.[cm]?[jt]s[x]?$/u;
3
-
4
- test.each([
5
- ['index.ts', true],
6
- ['index.js', true],
7
- ['index.mts', true],
8
- ['index.mjs', true],
9
- ['index.cts', true],
10
- ['index.cjs', true],
11
- ['index.tsx', true],
12
- ['index.jsx', true],
13
- ['not-index.ts', false],
14
- ['index.txt', false],
15
- ] as const)('reg.test($0) to be $1', (fileName, expected) => {
16
- expect(reg.test(fileName)).toBe(expected);
17
- });
18
- });