@xylabs/ts-scripts-yarn3 4.0.0-rc.12 → 4.0.0-rc.14

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 (91) hide show
  1. package/dist/actions/clean-docs.mjs +14 -4
  2. package/dist/actions/clean-docs.mjs.map +1 -1
  3. package/dist/actions/clean-eslint.mjs +16 -4
  4. package/dist/actions/clean-eslint.mjs.map +1 -1
  5. package/dist/actions/cycle.mjs +1 -1
  6. package/dist/actions/cycle.mjs.map +1 -1
  7. package/dist/actions/dupdeps.mjs +3 -2
  8. package/dist/actions/dupdeps.mjs.map +1 -1
  9. package/dist/actions/index.mjs +36 -20
  10. package/dist/actions/index.mjs.map +1 -1
  11. package/dist/actions/package/clean-outputs.mjs +16 -2
  12. package/dist/actions/package/clean-outputs.mjs.map +1 -1
  13. package/dist/actions/package/clean-typescript.mjs +16 -2
  14. package/dist/actions/package/clean-typescript.mjs.map +1 -1
  15. package/dist/actions/package/clean.mjs +17 -4
  16. package/dist/actions/package/clean.mjs.map +1 -1
  17. package/dist/actions/package/compile/compile.mjs +12 -5
  18. package/dist/actions/package/compile/compile.mjs.map +1 -1
  19. package/dist/actions/package/compile/getCompilerOptions.mjs +4 -2
  20. package/dist/actions/package/compile/getCompilerOptions.mjs.map +1 -1
  21. package/dist/actions/package/compile/index.mjs +12 -5
  22. package/dist/actions/package/compile/index.mjs.map +1 -1
  23. package/dist/actions/package/compile/packageCompileTsc.mjs +4 -2
  24. package/dist/actions/package/compile/packageCompileTsc.mjs.map +1 -1
  25. package/dist/actions/package/compile/packageCompileTscTypes.mjs +4 -2
  26. package/dist/actions/package/compile/packageCompileTscTypes.mjs.map +1 -1
  27. package/dist/actions/package/compile/packageCompileTsup.mjs.map +1 -1
  28. package/dist/actions/package/index.mjs +66 -46
  29. package/dist/actions/package/index.mjs.map +1 -1
  30. package/dist/actions/package/publint.mjs.map +1 -1
  31. package/dist/actions/package/recompile.mjs +53 -33
  32. package/dist/actions/package/recompile.mjs.map +1 -1
  33. package/dist/actions/statics.mjs +3 -2
  34. package/dist/actions/statics.mjs.map +1 -1
  35. package/dist/bin/package/clean-outputs.mjs +14 -2
  36. package/dist/bin/package/clean-outputs.mjs.map +1 -1
  37. package/dist/bin/package/clean-typescript.mjs +14 -2
  38. package/dist/bin/package/clean-typescript.mjs.map +1 -1
  39. package/dist/bin/package/clean.mjs +15 -4
  40. package/dist/bin/package/clean.mjs.map +1 -1
  41. package/dist/bin/package/compile-only.mjs +12 -5
  42. package/dist/bin/package/compile-only.mjs.map +1 -1
  43. package/dist/bin/package/compile-tsup.mjs.map +1 -1
  44. package/dist/bin/package/compile.mjs +12 -5
  45. package/dist/bin/package/compile.mjs.map +1 -1
  46. package/dist/bin/package/publint.mjs.map +1 -1
  47. package/dist/bin/package/recompile.mjs +31 -13
  48. package/dist/bin/package/recompile.mjs.map +1 -1
  49. package/dist/bin/xy-ts.mjs +18 -7
  50. package/dist/bin/xy-ts.mjs.map +1 -1
  51. package/dist/bin/xy.mjs +18 -7
  52. package/dist/bin/xy.mjs.map +1 -1
  53. package/dist/index.d.ts +3 -1
  54. package/dist/index.mjs +37 -20
  55. package/dist/index.mjs.map +1 -1
  56. package/dist/lib/deleteGlob.mjs +19 -0
  57. package/dist/lib/deleteGlob.mjs.map +1 -0
  58. package/dist/lib/dependencies/DuplicateDetector.mjs +3 -2
  59. package/dist/lib/dependencies/DuplicateDetector.mjs.map +1 -1
  60. package/dist/lib/dependencies/detectDuplicateDependencies.mjs +3 -2
  61. package/dist/lib/dependencies/detectDuplicateDependencies.mjs.map +1 -1
  62. package/dist/lib/dependencies/index.mjs +3 -2
  63. package/dist/lib/dependencies/index.mjs.map +1 -1
  64. package/dist/lib/index.mjs +25 -5
  65. package/dist/lib/index.mjs.map +1 -1
  66. package/dist/lib/loadConfig.mjs +8 -3
  67. package/dist/lib/loadConfig.mjs.map +1 -1
  68. package/dist/xy/index.mjs +18 -7
  69. package/dist/xy/index.mjs.map +1 -1
  70. package/dist/xy/xy.mjs +18 -7
  71. package/dist/xy/xy.mjs.map +1 -1
  72. package/dist/xy/xyCommonCommands.mjs +14 -4
  73. package/dist/xy/xyCommonCommands.mjs.map +1 -1
  74. package/dist/xy/xyInstallCommands.mjs +3 -2
  75. package/dist/xy/xyInstallCommands.mjs.map +1 -1
  76. package/dist/xy/xyLintCommands.mjs +1 -1
  77. package/dist/xy/xyLintCommands.mjs.map +1 -1
  78. package/dist/xy/xyParseOptions.mjs.map +1 -1
  79. package/package.json +10 -13
  80. package/src/actions/clean-docs.ts +2 -3
  81. package/src/actions/clean-eslint.ts +3 -2
  82. package/src/actions/cycle.ts +1 -1
  83. package/src/actions/package/clean-outputs.ts +3 -2
  84. package/src/actions/package/clean-typescript.ts +3 -2
  85. package/src/actions/package/compile/getCompilerOptions.ts +1 -3
  86. package/src/actions/package/publint.ts +1 -1
  87. package/src/lib/deleteGlob.ts +13 -0
  88. package/src/lib/dependencies/DuplicateDetector.ts +1 -3
  89. package/src/lib/index.ts +1 -0
  90. package/src/lib/loadConfig.ts +2 -4
  91. package/src/xy/xyParseOptions.ts +1 -1
@@ -4,7 +4,19 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
4
4
  // src/actions/clean-docs.ts
5
5
  import path from "node:path";
6
6
  import chalk from "chalk";
7
- import { rimrafSync } from "rimraf";
7
+
8
+ // src/lib/deleteGlob.ts
9
+ import fs from "node:fs";
10
+ import { glob } from "glob";
11
+ var deleteGlob = /* @__PURE__ */ __name((globPath) => {
12
+ const files = glob.sync(globPath);
13
+ for (const file of files) {
14
+ fs.rmSync(file, {
15
+ recursive: true,
16
+ force: true
17
+ });
18
+ }
19
+ }, "deleteGlob");
8
20
 
9
21
  // src/lib/yarn/workspace/yarnWorkspaces.ts
10
22
  import { spawnSync } from "node:child_process";
@@ -30,9 +42,7 @@ var yarnWorkspaces = /* @__PURE__ */ __name(() => {
30
42
  var cleanDocs = /* @__PURE__ */ __name(() => {
31
43
  const pkgName = process.env.npm_package_name;
32
44
  console.log(chalk.green(`Cleaning Docs [${pkgName}]`));
33
- for (const { location } of yarnWorkspaces()) rimrafSync(path.join(location, "docs"), {
34
- glob: true
35
- });
45
+ for (const { location } of yarnWorkspaces()) deleteGlob(path.join(location, "docs"));
36
46
  return 0;
37
47
  }, "cleanDocs");
38
48
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/actions/clean-docs.ts","../../src/lib/yarn/workspace/yarnWorkspaces.ts"],"sourcesContent":["import path from 'node:path'\n\nimport chalk from 'chalk'\nimport { rimrafSync } from 'rimraf'\n\nimport { yarnWorkspaces } from '../lib/index.ts'\n\nexport const cleanDocs = () => {\n const pkgName = process.env.npm_package_name\n console.log(chalk.green(`Cleaning Docs [${pkgName}]`))\n for (const { location } of yarnWorkspaces()) rimrafSync(path.join(location, 'docs'), { glob: true })\n return 0\n}\n","import { spawnSync } from 'node:child_process'\n\nimport { Workspace } from './Workspace.ts'\n\nexport const yarnWorkspaces = (): Workspace[] => {\n const result = spawnSync('yarn', ['workspaces', 'list', '--json', '--recursive'], { encoding: 'utf8', shell: true })\n if (result.error) {\n throw result.error\n }\n return (\n result.stdout\n .toString()\n // NOTE: This probably doesn't work on Windows\n // TODO: Replace /r/n with /n first\n .split('\\n')\n .slice(0, -1)\n .map((item) => {\n return JSON.parse(item)\n })\n )\n}\n"],"mappings":";;;;AAAA,OAAOA,UAAU;AAEjB,OAAOC,WAAW;AAClB,SAASC,kBAAkB;;;ACH3B,SAASC,iBAAiB;AAInB,IAAMC,iBAAiB,6BAAA;AAC5B,QAAMC,SAASC,UAAU,QAAQ;IAAC;IAAc;IAAQ;IAAU;KAAgB;IAAEC,UAAU;IAAQC,OAAO;EAAK,CAAA;AAClH,MAAIH,OAAOI,OAAO;AAChB,UAAMJ,OAAOI;EACf;AACA,SACEJ,OAAOK,OACJC,SAAQ,EAGRC,MAAM,IAAA,EACNC,MAAM,GAAG,EAAC,EACVC,IAAI,CAACC,SAAAA;AACJ,WAAOC,KAAKC,MAAMF,IAAAA;EACpB,CAAA;AAEN,GAhB8B;;;ADGvB,IAAMG,YAAY,6BAAA;AACvB,QAAMC,UAAUC,QAAQC,IAAIC;AAC5BC,UAAQC,IAAIC,MAAMC,MAAM,kBAAkBP,OAAAA,GAAU,CAAA;AACpD,aAAW,EAAEQ,SAAQ,KAAMC,eAAAA,EAAkBC,YAAWC,KAAKC,KAAKJ,UAAU,MAAA,GAAS;IAAEK,MAAM;EAAK,CAAA;AAClG,SAAO;AACT,GALyB;","names":["path","chalk","rimrafSync","spawnSync","yarnWorkspaces","result","spawnSync","encoding","shell","error","stdout","toString","split","slice","map","item","JSON","parse","cleanDocs","pkgName","process","env","npm_package_name","console","log","chalk","green","location","yarnWorkspaces","rimrafSync","path","join","glob"]}
1
+ {"version":3,"sources":["../../src/actions/clean-docs.ts","../../src/lib/deleteGlob.ts","../../src/lib/yarn/workspace/yarnWorkspaces.ts"],"sourcesContent":["import path from 'node:path'\n\nimport chalk from 'chalk'\n\nimport { deleteGlob, yarnWorkspaces } from '../lib/index.ts'\n\nexport const cleanDocs = () => {\n const pkgName = process.env.npm_package_name\n console.log(chalk.green(`Cleaning Docs [${pkgName}]`))\n for (const { location } of yarnWorkspaces()) deleteGlob(path.join(location, 'docs'))\n return 0\n}\n","import fs from 'node:fs'\n\nimport { glob } from 'glob'\n\nexport const deleteGlob = (globPath: string) => {\n // Find all files matching the glob pattern\n const files = glob.sync(globPath)\n\n // Remove each file or directory\n for (const file of files) {\n fs.rmSync(file, { recursive: true, force: true })\n }\n}\n","import { spawnSync } from 'node:child_process'\n\nimport { Workspace } from './Workspace.ts'\n\nexport const yarnWorkspaces = (): Workspace[] => {\n const result = spawnSync('yarn', ['workspaces', 'list', '--json', '--recursive'], { encoding: 'utf8', shell: true })\n if (result.error) {\n throw result.error\n }\n return (\n result.stdout\n .toString()\n // NOTE: This probably doesn't work on Windows\n // TODO: Replace /r/n with /n first\n .split('\\n')\n .slice(0, -1)\n .map((item) => {\n return JSON.parse(item)\n })\n )\n}\n"],"mappings":";;;;AAAA,OAAOA,UAAU;AAEjB,OAAOC,WAAW;;;ACFlB,OAAOC,QAAQ;AAEf,SAASC,YAAY;AAEd,IAAMC,aAAa,wBAACC,aAAAA;AAEzB,QAAMC,QAAQC,KAAKC,KAAKH,QAAAA;AAGxB,aAAWI,QAAQH,OAAO;AACxBI,OAAGC,OAAOF,MAAM;MAAEG,WAAW;MAAMC,OAAO;IAAK,CAAA;EACjD;AACF,GAR0B;;;ACJ1B,SAASC,iBAAiB;AAInB,IAAMC,iBAAiB,6BAAA;AAC5B,QAAMC,SAASC,UAAU,QAAQ;IAAC;IAAc;IAAQ;IAAU;KAAgB;IAAEC,UAAU;IAAQC,OAAO;EAAK,CAAA;AAClH,MAAIH,OAAOI,OAAO;AAChB,UAAMJ,OAAOI;EACf;AACA,SACEJ,OAAOK,OACJC,SAAQ,EAGRC,MAAM,IAAA,EACNC,MAAM,GAAG,EAAC,EACVC,IAAI,CAACC,SAAAA;AACJ,WAAOC,KAAKC,MAAMF,IAAAA;EACpB,CAAA;AAEN,GAhB8B;;;AFEvB,IAAMG,YAAY,6BAAA;AACvB,QAAMC,UAAUC,QAAQC,IAAIC;AAC5BC,UAAQC,IAAIC,MAAMC,MAAM,kBAAkBP,OAAAA,GAAU,CAAA;AACpD,aAAW,EAAEQ,SAAQ,KAAMC,eAAAA,EAAkBC,YAAWC,KAAKC,KAAKJ,UAAU,MAAA,CAAA;AAC5E,SAAO;AACT,GALyB;","names":["path","chalk","fs","glob","deleteGlob","globPath","files","glob","sync","file","fs","rmSync","recursive","force","spawnSync","yarnWorkspaces","result","spawnSync","encoding","shell","error","stdout","toString","split","slice","map","item","JSON","parse","cleanDocs","pkgName","process","env","npm_package_name","console","log","chalk","green","location","yarnWorkspaces","deleteGlob","path","join"]}
@@ -4,14 +4,26 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
4
4
  // src/actions/clean-eslint.ts
5
5
  import path from "node:path";
6
6
  import chalk from "chalk";
7
- import { rimrafSync } from "rimraf";
7
+
8
+ // src/lib/deleteGlob.ts
9
+ import fs from "node:fs";
10
+ import { glob } from "glob";
11
+ var deleteGlob = /* @__PURE__ */ __name((globPath) => {
12
+ const files = glob.sync(globPath);
13
+ for (const file of files) {
14
+ fs.rmSync(file, {
15
+ recursive: true,
16
+ force: true
17
+ });
18
+ }
19
+ }, "deleteGlob");
20
+
21
+ // src/actions/clean-eslint.ts
8
22
  var cleanESLint = /* @__PURE__ */ __name(() => {
9
23
  const pkg = process.env.INIT_CWD ?? ".";
10
24
  const pkgName = process.env.npm_package_name;
11
25
  console.log(chalk.green(`Cleaning ESLint [${pkgName}]`));
12
- rimrafSync(path.join(pkg, ".eslintcache"), {
13
- glob: true
14
- });
26
+ deleteGlob(path.join(pkg, ".eslintcache"));
15
27
  return 0;
16
28
  }, "cleanESLint");
17
29
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/actions/clean-eslint.ts"],"sourcesContent":["import path from 'node:path'\n\nimport chalk from 'chalk'\nimport { rimrafSync } from 'rimraf'\n\nexport const cleanESLint = () => {\n const pkg = process.env.INIT_CWD ?? '.'\n const pkgName = process.env.npm_package_name\n console.log(chalk.green(`Cleaning ESLint [${pkgName}]`))\n\n rimrafSync(path.join(pkg, '.eslintcache'), { glob: true })\n\n return 0\n}\n"],"mappings":";;;;AAAA,OAAOA,UAAU;AAEjB,OAAOC,WAAW;AAClB,SAASC,kBAAkB;AAEpB,IAAMC,cAAc,6BAAA;AACzB,QAAMC,MAAMC,QAAQC,IAAIC,YAAY;AACpC,QAAMC,UAAUH,QAAQC,IAAIG;AAC5BC,UAAQC,IAAIC,MAAMC,MAAM,oBAAoBL,OAAAA,GAAU,CAAA;AAEtDM,aAAWC,KAAKC,KAAKZ,KAAK,cAAA,GAAiB;IAAEa,MAAM;EAAK,CAAA;AAExD,SAAO;AACT,GAR2B;","names":["path","chalk","rimrafSync","cleanESLint","pkg","process","env","INIT_CWD","pkgName","npm_package_name","console","log","chalk","green","rimrafSync","path","join","glob"]}
1
+ {"version":3,"sources":["../../src/actions/clean-eslint.ts","../../src/lib/deleteGlob.ts"],"sourcesContent":["import path from 'node:path'\n\nimport chalk from 'chalk'\n\nimport { deleteGlob } from '../lib/index.ts'\n\nexport const cleanESLint = () => {\n const pkg = process.env.INIT_CWD ?? '.'\n const pkgName = process.env.npm_package_name\n console.log(chalk.green(`Cleaning ESLint [${pkgName}]`))\n\n deleteGlob(path.join(pkg, '.eslintcache'))\n\n return 0\n}\n","import fs from 'node:fs'\n\nimport { glob } from 'glob'\n\nexport const deleteGlob = (globPath: string) => {\n // Find all files matching the glob pattern\n const files = glob.sync(globPath)\n\n // Remove each file or directory\n for (const file of files) {\n fs.rmSync(file, { recursive: true, force: true })\n }\n}\n"],"mappings":";;;;AAAA,OAAOA,UAAU;AAEjB,OAAOC,WAAW;;;ACFlB,OAAOC,QAAQ;AAEf,SAASC,YAAY;AAEd,IAAMC,aAAa,wBAACC,aAAAA;AAEzB,QAAMC,QAAQC,KAAKC,KAAKH,QAAAA;AAGxB,aAAWI,QAAQH,OAAO;AACxBI,OAAGC,OAAOF,MAAM;MAAEG,WAAW;MAAMC,OAAO;IAAK,CAAA;EACjD;AACF,GAR0B;;;ADEnB,IAAMC,cAAc,6BAAA;AACzB,QAAMC,MAAMC,QAAQC,IAAIC,YAAY;AACpC,QAAMC,UAAUH,QAAQC,IAAIG;AAC5BC,UAAQC,IAAIC,MAAMC,MAAM,oBAAoBL,OAAAA,GAAU,CAAA;AAEtDM,aAAWC,KAAKC,KAAKZ,KAAK,cAAA,CAAA;AAE1B,SAAO;AACT,GAR2B;","names":["path","chalk","fs","glob","deleteGlob","globPath","files","glob","sync","file","fs","rmSync","recursive","force","cleanESLint","pkg","process","env","INIT_CWD","pkgName","npm_package_name","console","log","chalk","green","deleteGlob","path","join"]}
@@ -9,7 +9,7 @@ var cycle = /* @__PURE__ */ __name(async () => {
9
9
  fix: false,
10
10
  overrideConfig: {
11
11
  rules: {
12
- "import/no-cycle": [
12
+ "import-x/no-cycle": [
13
13
  "error",
14
14
  {
15
15
  maxDepth: 10
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/actions/cycle.ts"],"sourcesContent":["import { cwd } from 'node:process'\n\nimport { ESLint } from 'eslint'\n\nexport const cycle = async () => {\n const eslint = new ESLint({ fix: false, overrideConfig: {\n rules: {\n 'import/no-cycle': ['error', { maxDepth: 10 }],\n },\n } })\n const results = await eslint.lintFiles(['src/**/*.ts*', 'packages/**/src/**/*.ts*'])\n\n const formatter = await eslint.loadFormatter('stylish')\n const resultText = formatter.format(results, { cwd: cwd(), rulesMeta: {} })\n console.log(resultText)\n\n return results.length\n}\n"],"mappings":";;;;AAAA,SAASA,WAAW;AAEpB,SAASC,cAAc;AAEhB,IAAMC,QAAQ,mCAAA;AACnB,QAAMC,SAAS,IAAIC,OAAO;IAAEC,KAAK;IAAOC,gBAAgB;MACtDC,OAAO;QACL,mBAAmB;UAAC;UAAS;YAAEC,UAAU;UAAG;;MAC9C;IACF;EAAE,CAAA;AACF,QAAMC,UAAU,MAAMN,OAAOO,UAAU;IAAC;IAAgB;GAA2B;AAEnF,QAAMC,YAAY,MAAMR,OAAOS,cAAc,SAAA;AAC7C,QAAMC,aAAaF,UAAUG,OAAOL,SAAS;IAAEM,KAAKA,IAAAA;IAAOC,WAAW,CAAC;EAAE,CAAA;AACzEC,UAAQC,IAAIL,UAAAA;AAEZ,SAAOJ,QAAQU;AACjB,GAbqB;","names":["cwd","ESLint","cycle","eslint","ESLint","fix","overrideConfig","rules","maxDepth","results","lintFiles","formatter","loadFormatter","resultText","format","cwd","rulesMeta","console","log","length"]}
1
+ {"version":3,"sources":["../../src/actions/cycle.ts"],"sourcesContent":["import { cwd } from 'node:process'\n\nimport { ESLint } from 'eslint'\n\nexport const cycle = async () => {\n const eslint = new ESLint({ fix: false, overrideConfig: {\n rules: {\n 'import-x/no-cycle': ['error', { maxDepth: 10 }],\n },\n } })\n const results = await eslint.lintFiles(['src/**/*.ts*', 'packages/**/src/**/*.ts*'])\n\n const formatter = await eslint.loadFormatter('stylish')\n const resultText = formatter.format(results, { cwd: cwd(), rulesMeta: {} })\n console.log(resultText)\n\n return results.length\n}\n"],"mappings":";;;;AAAA,SAASA,WAAW;AAEpB,SAASC,cAAc;AAEhB,IAAMC,QAAQ,mCAAA;AACnB,QAAMC,SAAS,IAAIC,OAAO;IAAEC,KAAK;IAAOC,gBAAgB;MACtDC,OAAO;QACL,qBAAqB;UAAC;UAAS;YAAEC,UAAU;UAAG;;MAChD;IACF;EAAE,CAAA;AACF,QAAMC,UAAU,MAAMN,OAAOO,UAAU;IAAC;IAAgB;GAA2B;AAEnF,QAAMC,YAAY,MAAMR,OAAOS,cAAc,SAAA;AAC7C,QAAMC,aAAaF,UAAUG,OAAOL,SAAS;IAAEM,KAAKA,IAAAA;IAAOC,WAAW,CAAC;EAAE,CAAA;AACzEC,UAAQC,IAAIL,UAAAA;AAEZ,SAAOJ,QAAQU;AACjB,GAbqB;","names":["cwd","ESLint","cycle","eslint","ESLint","fix","overrideConfig","rules","maxDepth","results","lintFiles","formatter","loadFormatter","resultText","format","cwd","rulesMeta","console","log","length"]}
@@ -56,7 +56,6 @@ var safeExit = /* @__PURE__ */ __name((func, exitOnFail = true) => {
56
56
  // src/lib/dependencies/DuplicateDetector.ts
57
57
  import { EOL } from "node:os";
58
58
  import chalk2 from "chalk";
59
- import uniq from "lodash/uniq.js";
60
59
 
61
60
  // src/lib/jsonFormatters.ts
62
61
  var multiLineToJSONArray = /* @__PURE__ */ __name((output) => {
@@ -127,7 +126,9 @@ var DuplicateDetector = class {
127
126
  acc.duplicateVersions.push(acc.currentVersion);
128
127
  }
129
128
  acc.duplicateVersions.push(version);
130
- acc.duplicateVersions = uniq(acc.duplicateVersions);
129
+ acc.duplicateVersions = [
130
+ ...new Set(acc.duplicateVersions)
131
+ ];
131
132
  }
132
133
  return acc;
133
134
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/actions/dupdeps.ts","../../src/lib/dependencies/detectDuplicateDependencies.ts","../../src/lib/processEx.ts","../../src/lib/withError.ts","../../src/lib/withErrnoException.ts","../../src/lib/safeExit.ts","../../src/lib/dependencies/DuplicateDetector.ts","../../src/lib/jsonFormatters.ts","../../src/lib/parsedPackageJSON.ts"],"sourcesContent":["import chalk from 'chalk'\n\nimport { detectDuplicateDependencies, parsedPackageJSON } from '../lib/index.ts'\n\nexport const dupdeps = () => {\n console.log(chalk.green('Checking all Dependencies for Duplicates'))\n\n const allDependencies = parsedPackageJSON()?.dependencies\n const dependencies = Object.entries(allDependencies).map(([k]) => k)\n\n return detectDuplicateDependencies(dependencies)\n}\n","import { execSync } from 'node:child_process'\n\nimport { safeExit } from '../safeExit.ts'\nimport { DuplicateDetector } from './DuplicateDetector.ts'\n\nexport const detectDuplicateDependencies = (depsFromPackageJSON?: string[], DefaultDependencies?: string[]) => {\n let exitCode = 0\n\n const dependencies = depsFromPackageJSON?.length ? depsFromPackageJSON : DefaultDependencies\n\n return safeExit(() => {\n if (dependencies) {\n for (const dependency of dependencies) {\n let output: string\n\n try {\n const cmd = `yarn why ${dependency} --json`\n output = execSync(cmd).toString()\n } catch (e) {\n console.error(`Error running yarn why: ${e}`)\n exitCode = 1\n continue\n }\n\n if (output) {\n exitCode = new DuplicateDetector(output, dependency).detect()\n } else {\n console.log(`${dependency} - N/A`)\n if (depsFromPackageJSON) {\n exitCode = 1\n console.log(`🚨 Library ${dependency} was requested in package.json but not found`)\n }\n }\n }\n return exitCode\n } else {\n console.log('🚨 No dependencies where passed')\n return exitCode\n }\n })\n}\n","import chalk from 'chalk'\n\nimport { withErrnoException } from './withErrnoException.ts'\nimport { withError } from './withError.ts'\n\nexport const processEx = (ex: unknown) => {\n const error = typeof ex === 'string' ? new Error(ex) : ex\n const exitCode\n = withErrnoException(error, (error) => {\n if (error.code === 'ENOENT') {\n console.error(chalk.red(`'${error.path}' not found.`))\n } else {\n console.error(chalk.red(`Errno: ${error.code}`))\n }\n return error.errno ?? -1\n })\n ?? withError(error, (error) => {\n console.error(chalk.red(`${error.name}: ${error.message}`))\n return -1\n })\n ?? (() => {\n console.error(chalk.red(`Unexpected Error: ${JSON.stringify(ex, null, 2)}`))\n return -1\n })()\n // This allows us to use a previously set exit code\n process.exit(process.exitCode ?? exitCode)\n}\n","export const withError = <T extends Error = Error>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ex: any,\n closure: (error: T) => number,\n predicate = (ex: T) => ex.name !== undefined && ex.message !== undefined,\n) => {\n return predicate(ex as T) ? closure(ex as T) : undefined\n}\n","import { withError } from './withError.ts'\n\nexport const withErrnoException = <T extends NodeJS.ErrnoException = NodeJS.ErrnoException>(ex: unknown, closure: (error: T) => number) => {\n return withError<T>(ex, closure, (ex: unknown) => (ex as NodeJS.ErrnoException).errno !== undefined)\n}\n","/** Catch child process a crash and returns the code */\n\nimport { processEx } from './processEx.ts'\n\nconst safeExit = (func: () => number, exitOnFail = true): number => {\n try {\n const result = func()\n if (result && exitOnFail) {\n process.exit(result)\n }\n return result\n } catch (ex) {\n return processEx(ex)\n }\n}\n\nconst safeExitAsync = async (func: () => Promise<number>, exitOnFail = true): Promise<number> => {\n try {\n const result = await func()\n if (result && exitOnFail) {\n process.exit(result)\n }\n return result\n } catch (ex) {\n return processEx(ex)\n }\n}\n\nexport { safeExit, safeExitAsync }\n","import { EOL } from 'node:os'\n\nimport chalk from 'chalk'\n// eslint-disable-next-line import/no-internal-modules\nimport uniq from 'lodash/uniq.js'\n\nimport { multiLineToJSONArray } from '../jsonFormatters.ts'\n\ninterface ChildFields {\n descriptor: string\n locator: string\n}\n\nconst trimVirtualMeta = (value: string): string => {\n const virtualParts = value.split('virtual:')\n if (virtualParts.length > 1) {\n const hashParts = virtualParts[1].split('#')\n return virtualParts[0] + hashParts[1]\n } else {\n return value\n }\n}\n\nconst trimObjectDependencyVirtualMeta = (obj: Record<string, ChildFields>): Record<string, ChildFields> => {\n const resultObj: Record<string, ChildFields> = {}\n for (const [key, value] of Object.entries(obj)) {\n resultObj[trimVirtualMeta(key)] = {\n descriptor: trimVirtualMeta(value.descriptor),\n locator: trimVirtualMeta(value.locator),\n }\n }\n return resultObj\n}\n\nconst trimDependencyVirtualMeta = (dependencies: DependencyEntries): DependencyEntries => {\n return dependencies.map((dependency) => {\n return { children: trimObjectDependencyVirtualMeta(dependency.children), value: trimVirtualMeta(dependency.value) }\n })\n}\n\ninterface DependencyEntry {\n children: Record<string, ChildFields>\n value: string\n}\n\ntype DependencyEntries = DependencyEntry[]\n\ninterface Results {\n currentVersion: string | undefined\n dependency: string\n duplicateVersions: string[]\n}\n\nexport class DuplicateDetector {\n private dependency: string\n private dependencyEntries: DependencyEntries\n\n constructor(output: string, dependency: string) {\n this.dependency = dependency\n this.dependencyEntries = trimDependencyVirtualMeta(multiLineToJSONArray(output))\n }\n\n detect() {\n // eslint-disable-next-line unicorn/no-array-reduce\n const result = this.dependencyEntries.reduce(this.detectReducer, this.resultsFactory(this.dependency))\n if (result.duplicateVersions.length > 0) {\n console.log(chalk.yellow(`${EOL}Duplicates found for: ${this.dependency}`))\n const duplicateVersions = result.duplicateVersions.toString().replaceAll(',', `${EOL} `)\n console.log(chalk.grey(` ${duplicateVersions}`, EOL))\n return 1\n } else {\n console.log(`${this.dependency} - OK`)\n return 0\n }\n }\n\n private detectReducer(acc: Results, entry: DependencyEntry) {\n const version = Object.entries(entry.children).map(([k]) => k)[0]\n\n if (!acc.currentVersion) {\n acc.currentVersion = version\n return acc\n }\n\n if (acc.currentVersion && acc.currentVersion !== version && !version.includes('@virtual:')) {\n // if first duplicate, push the current version as the first duplicate\n if (acc.duplicateVersions.length === 0) {\n acc.duplicateVersions.push(acc.currentVersion)\n }\n acc.duplicateVersions.push(version)\n acc.duplicateVersions = uniq(acc.duplicateVersions)\n }\n return acc\n }\n\n private resultsFactory = (dependency: string): Results => ({ currentVersion: undefined, dependency, duplicateVersions: [] })\n}\n","export const multiLineToJSONArray = (output: string) => {\n const withCommas = output.replaceAll('\\r\\n', '').replaceAll('\\n', ',')\n const cleanCollection = withCommas.slice(0, Math.max(0, withCommas.length - 1))\n const collection = `[${cleanCollection}]`\n return JSON.parse(collection)\n}\n","import { readFileSync } from 'node:fs'\n\nexport const parsedPackageJSON = (path?: string) => {\n const pathToPackageJSON = path ?? process.env.npm_package_json ?? ''\n const packageJSON = readFileSync(pathToPackageJSON).toString()\n return JSON.parse(packageJSON)\n}\n"],"mappings":"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","names":["chalk","execSync","chalk","withError","ex","closure","predicate","name","undefined","message","withErrnoException","ex","closure","withError","errno","undefined","processEx","ex","error","Error","exitCode","withErrnoException","code","console","chalk","red","path","errno","withError","name","message","JSON","stringify","process","exit","safeExit","func","exitOnFail","result","process","exit","ex","processEx","EOL","chalk","uniq","multiLineToJSONArray","output","withCommas","replaceAll","cleanCollection","slice","Math","max","length","collection","JSON","parse","trimVirtualMeta","value","virtualParts","split","length","hashParts","trimObjectDependencyVirtualMeta","obj","resultObj","key","Object","entries","descriptor","locator","trimDependencyVirtualMeta","dependencies","map","dependency","children","DuplicateDetector","dependencyEntries","constructor","output","multiLineToJSONArray","detect","result","reduce","detectReducer","resultsFactory","duplicateVersions","console","log","chalk","yellow","EOL","toString","replaceAll","grey","acc","entry","version","k","currentVersion","includes","push","uniq","undefined","detectDuplicateDependencies","depsFromPackageJSON","DefaultDependencies","exitCode","dependencies","length","safeExit","dependency","output","cmd","execSync","toString","e","console","error","DuplicateDetector","detect","log","readFileSync","parsedPackageJSON","path","pathToPackageJSON","process","env","npm_package_json","packageJSON","readFileSync","toString","JSON","parse","dupdeps","console","log","chalk","green","allDependencies","parsedPackageJSON","dependencies","Object","entries","map","k","detectDuplicateDependencies"]}
1
+ {"version":3,"sources":["../../src/actions/dupdeps.ts","../../src/lib/dependencies/detectDuplicateDependencies.ts","../../src/lib/processEx.ts","../../src/lib/withError.ts","../../src/lib/withErrnoException.ts","../../src/lib/safeExit.ts","../../src/lib/dependencies/DuplicateDetector.ts","../../src/lib/jsonFormatters.ts","../../src/lib/parsedPackageJSON.ts"],"sourcesContent":["import chalk from 'chalk'\n\nimport { detectDuplicateDependencies, parsedPackageJSON } from '../lib/index.ts'\n\nexport const dupdeps = () => {\n console.log(chalk.green('Checking all Dependencies for Duplicates'))\n\n const allDependencies = parsedPackageJSON()?.dependencies\n const dependencies = Object.entries(allDependencies).map(([k]) => k)\n\n return detectDuplicateDependencies(dependencies)\n}\n","import { execSync } from 'node:child_process'\n\nimport { safeExit } from '../safeExit.ts'\nimport { DuplicateDetector } from './DuplicateDetector.ts'\n\nexport const detectDuplicateDependencies = (depsFromPackageJSON?: string[], DefaultDependencies?: string[]) => {\n let exitCode = 0\n\n const dependencies = depsFromPackageJSON?.length ? depsFromPackageJSON : DefaultDependencies\n\n return safeExit(() => {\n if (dependencies) {\n for (const dependency of dependencies) {\n let output: string\n\n try {\n const cmd = `yarn why ${dependency} --json`\n output = execSync(cmd).toString()\n } catch (e) {\n console.error(`Error running yarn why: ${e}`)\n exitCode = 1\n continue\n }\n\n if (output) {\n exitCode = new DuplicateDetector(output, dependency).detect()\n } else {\n console.log(`${dependency} - N/A`)\n if (depsFromPackageJSON) {\n exitCode = 1\n console.log(`🚨 Library ${dependency} was requested in package.json but not found`)\n }\n }\n }\n return exitCode\n } else {\n console.log('🚨 No dependencies where passed')\n return exitCode\n }\n })\n}\n","import chalk from 'chalk'\n\nimport { withErrnoException } from './withErrnoException.ts'\nimport { withError } from './withError.ts'\n\nexport const processEx = (ex: unknown) => {\n const error = typeof ex === 'string' ? new Error(ex) : ex\n const exitCode\n = withErrnoException(error, (error) => {\n if (error.code === 'ENOENT') {\n console.error(chalk.red(`'${error.path}' not found.`))\n } else {\n console.error(chalk.red(`Errno: ${error.code}`))\n }\n return error.errno ?? -1\n })\n ?? withError(error, (error) => {\n console.error(chalk.red(`${error.name}: ${error.message}`))\n return -1\n })\n ?? (() => {\n console.error(chalk.red(`Unexpected Error: ${JSON.stringify(ex, null, 2)}`))\n return -1\n })()\n // This allows us to use a previously set exit code\n process.exit(process.exitCode ?? exitCode)\n}\n","export const withError = <T extends Error = Error>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ex: any,\n closure: (error: T) => number,\n predicate = (ex: T) => ex.name !== undefined && ex.message !== undefined,\n) => {\n return predicate(ex as T) ? closure(ex as T) : undefined\n}\n","import { withError } from './withError.ts'\n\nexport const withErrnoException = <T extends NodeJS.ErrnoException = NodeJS.ErrnoException>(ex: unknown, closure: (error: T) => number) => {\n return withError<T>(ex, closure, (ex: unknown) => (ex as NodeJS.ErrnoException).errno !== undefined)\n}\n","/** Catch child process a crash and returns the code */\n\nimport { processEx } from './processEx.ts'\n\nconst safeExit = (func: () => number, exitOnFail = true): number => {\n try {\n const result = func()\n if (result && exitOnFail) {\n process.exit(result)\n }\n return result\n } catch (ex) {\n return processEx(ex)\n }\n}\n\nconst safeExitAsync = async (func: () => Promise<number>, exitOnFail = true): Promise<number> => {\n try {\n const result = await func()\n if (result && exitOnFail) {\n process.exit(result)\n }\n return result\n } catch (ex) {\n return processEx(ex)\n }\n}\n\nexport { safeExit, safeExitAsync }\n","import { EOL } from 'node:os'\n\nimport chalk from 'chalk'\n\nimport { multiLineToJSONArray } from '../jsonFormatters.ts'\n\ninterface ChildFields {\n descriptor: string\n locator: string\n}\n\nconst trimVirtualMeta = (value: string): string => {\n const virtualParts = value.split('virtual:')\n if (virtualParts.length > 1) {\n const hashParts = virtualParts[1].split('#')\n return virtualParts[0] + hashParts[1]\n } else {\n return value\n }\n}\n\nconst trimObjectDependencyVirtualMeta = (obj: Record<string, ChildFields>): Record<string, ChildFields> => {\n const resultObj: Record<string, ChildFields> = {}\n for (const [key, value] of Object.entries(obj)) {\n resultObj[trimVirtualMeta(key)] = {\n descriptor: trimVirtualMeta(value.descriptor),\n locator: trimVirtualMeta(value.locator),\n }\n }\n return resultObj\n}\n\nconst trimDependencyVirtualMeta = (dependencies: DependencyEntries): DependencyEntries => {\n return dependencies.map((dependency) => {\n return { children: trimObjectDependencyVirtualMeta(dependency.children), value: trimVirtualMeta(dependency.value) }\n })\n}\n\ninterface DependencyEntry {\n children: Record<string, ChildFields>\n value: string\n}\n\ntype DependencyEntries = DependencyEntry[]\n\ninterface Results {\n currentVersion: string | undefined\n dependency: string\n duplicateVersions: string[]\n}\n\nexport class DuplicateDetector {\n private dependency: string\n private dependencyEntries: DependencyEntries\n\n constructor(output: string, dependency: string) {\n this.dependency = dependency\n this.dependencyEntries = trimDependencyVirtualMeta(multiLineToJSONArray(output))\n }\n\n detect() {\n // eslint-disable-next-line unicorn/no-array-reduce\n const result = this.dependencyEntries.reduce(this.detectReducer, this.resultsFactory(this.dependency))\n if (result.duplicateVersions.length > 0) {\n console.log(chalk.yellow(`${EOL}Duplicates found for: ${this.dependency}`))\n const duplicateVersions = result.duplicateVersions.toString().replaceAll(',', `${EOL} `)\n console.log(chalk.grey(` ${duplicateVersions}`, EOL))\n return 1\n } else {\n console.log(`${this.dependency} - OK`)\n return 0\n }\n }\n\n private detectReducer(acc: Results, entry: DependencyEntry) {\n const version = Object.entries(entry.children).map(([k]) => k)[0]\n\n if (!acc.currentVersion) {\n acc.currentVersion = version\n return acc\n }\n\n if (acc.currentVersion && acc.currentVersion !== version && !version.includes('@virtual:')) {\n // if first duplicate, push the current version as the first duplicate\n if (acc.duplicateVersions.length === 0) {\n acc.duplicateVersions.push(acc.currentVersion)\n }\n acc.duplicateVersions.push(version)\n acc.duplicateVersions = [...new Set(acc.duplicateVersions)]\n }\n return acc\n }\n\n private resultsFactory = (dependency: string): Results => ({ currentVersion: undefined, dependency, duplicateVersions: [] })\n}\n","export const multiLineToJSONArray = (output: string) => {\n const withCommas = output.replaceAll('\\r\\n', '').replaceAll('\\n', ',')\n const cleanCollection = withCommas.slice(0, Math.max(0, withCommas.length - 1))\n const collection = `[${cleanCollection}]`\n return JSON.parse(collection)\n}\n","import { readFileSync } from 'node:fs'\n\nexport const parsedPackageJSON = (path?: string) => {\n const pathToPackageJSON = path ?? process.env.npm_package_json ?? ''\n const packageJSON = readFileSync(pathToPackageJSON).toString()\n return JSON.parse(packageJSON)\n}\n"],"mappings":"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","names":["chalk","execSync","chalk","withError","ex","closure","predicate","name","undefined","message","withErrnoException","ex","closure","withError","errno","undefined","processEx","ex","error","Error","exitCode","withErrnoException","code","console","chalk","red","path","errno","withError","name","message","JSON","stringify","process","exit","safeExit","func","exitOnFail","result","process","exit","ex","processEx","EOL","chalk","multiLineToJSONArray","output","withCommas","replaceAll","cleanCollection","slice","Math","max","length","collection","JSON","parse","trimVirtualMeta","value","virtualParts","split","length","hashParts","trimObjectDependencyVirtualMeta","obj","resultObj","key","Object","entries","descriptor","locator","trimDependencyVirtualMeta","dependencies","map","dependency","children","DuplicateDetector","dependencyEntries","constructor","output","multiLineToJSONArray","detect","result","reduce","detectReducer","resultsFactory","duplicateVersions","console","log","chalk","yellow","EOL","toString","replaceAll","grey","acc","entry","version","k","currentVersion","includes","push","Set","undefined","detectDuplicateDependencies","depsFromPackageJSON","DefaultDependencies","exitCode","dependencies","length","safeExit","dependency","output","cmd","execSync","toString","e","console","error","DuplicateDetector","detect","log","readFileSync","parsedPackageJSON","path","pathToPackageJSON","process","env","npm_package_json","packageJSON","readFileSync","toString","JSON","parse","dupdeps","console","log","chalk","green","allDependencies","parsedPackageJSON","dependencies","Object","entries","map","k","detectDuplicateDependencies"]}
@@ -17,6 +17,19 @@ var checkResult = /* @__PURE__ */ __name((name, result, level = "error", exitOnF
17
17
  }
18
18
  }, "checkResult");
19
19
 
20
+ // src/lib/deleteGlob.ts
21
+ import fs from "node:fs";
22
+ import { glob } from "glob";
23
+ var deleteGlob = /* @__PURE__ */ __name((globPath) => {
24
+ const files = glob.sync(globPath);
25
+ for (const file of files) {
26
+ fs.rmSync(file, {
27
+ recursive: true,
28
+ force: true
29
+ });
30
+ }
31
+ }, "deleteGlob");
32
+
20
33
  // src/lib/dependencies/detectDuplicateDependencies.ts
21
34
  import { execSync } from "node:child_process";
22
35
 
@@ -80,7 +93,6 @@ var safeExitAsync = /* @__PURE__ */ __name(async (func, exitOnFail = true) => {
80
93
  // src/lib/dependencies/DuplicateDetector.ts
81
94
  import { EOL } from "node:os";
82
95
  import chalk3 from "chalk";
83
- import uniq from "lodash/uniq.js";
84
96
 
85
97
  // src/lib/jsonFormatters.ts
86
98
  var multiLineToJSONArray = /* @__PURE__ */ __name((output) => {
@@ -151,7 +163,9 @@ var DuplicateDetector = class {
151
163
  acc.duplicateVersions.push(acc.currentVersion);
152
164
  }
153
165
  acc.duplicateVersions.push(version);
154
- acc.duplicateVersions = uniq(acc.duplicateVersions);
166
+ acc.duplicateVersions = [
167
+ ...new Set(acc.duplicateVersions)
168
+ ];
155
169
  }
156
170
  return acc;
157
171
  }
@@ -315,11 +329,13 @@ var generateIgnoreFiles = /* @__PURE__ */ __name((filename3, pkg) => {
315
329
  // src/lib/loadConfig.ts
316
330
  import chalk5 from "chalk";
317
331
  import { cosmiconfig } from "cosmiconfig";
318
- import merge from "lodash/merge.js";
319
332
  var config;
320
333
  var loadConfig = /* @__PURE__ */ __name(async (params) => {
321
334
  if (config) {
322
- return merge({}, config, params);
335
+ return {
336
+ ...config,
337
+ ...params
338
+ };
323
339
  }
324
340
  const cosmicConfigResult = await cosmiconfig("xy", {
325
341
  cache: true
@@ -329,7 +345,10 @@ var loadConfig = /* @__PURE__ */ __name(async (params) => {
329
345
  if (configFilePath) {
330
346
  console.log(chalk5.gray(`Loading config from ${configFilePath}`));
331
347
  }
332
- return merge({}, config, params);
348
+ return {
349
+ ...config,
350
+ ...params
351
+ };
333
352
  }, "loadConfig");
334
353
 
335
354
  // src/lib/parsedPackageJSON.ts
@@ -527,13 +546,10 @@ var cleanAll = /* @__PURE__ */ __name(({ verbose }) => {
527
546
  // src/actions/clean-docs.ts
528
547
  import path from "node:path";
529
548
  import chalk9 from "chalk";
530
- import { rimrafSync } from "rimraf";
531
549
  var cleanDocs = /* @__PURE__ */ __name(() => {
532
550
  const pkgName = process.env.npm_package_name;
533
551
  console.log(chalk9.green(`Cleaning Docs [${pkgName}]`));
534
- for (const { location } of yarnWorkspaces()) rimrafSync(path.join(location, "docs"), {
535
- glob: true
536
- });
552
+ for (const { location } of yarnWorkspaces()) deleteGlob(path.join(location, "docs"));
537
553
  return 0;
538
554
  }, "cleanDocs");
539
555
 
@@ -685,7 +701,7 @@ var cycle = /* @__PURE__ */ __name(async () => {
685
701
  fix: false,
686
702
  overrideConfig: {
687
703
  rules: {
688
- "import/no-cycle": [
704
+ "import-x/no-cycle": [
689
705
  "error",
690
706
  {
691
707
  maxDepth: 10
@@ -1222,7 +1238,6 @@ var npmignoreGen = /* @__PURE__ */ __name((pkg) => generateIgnoreFiles(filename2
1222
1238
  // src/actions/package/clean-outputs.ts
1223
1239
  import path3 from "node:path";
1224
1240
  import chalk18 from "chalk";
1225
- import { rimraf } from "rimraf";
1226
1241
  var packageCleanOutputs = /* @__PURE__ */ __name(async () => {
1227
1242
  const pkg = process.env.INIT_CWD ?? ".";
1228
1243
  const pkgName = process.env.npm_package_name;
@@ -1232,14 +1247,13 @@ var packageCleanOutputs = /* @__PURE__ */ __name(async () => {
1232
1247
  path3.join(pkg, "docs")
1233
1248
  ];
1234
1249
  console.log(chalk18.green(`Cleaning Outputs [${pkgName}]`));
1235
- await Promise.all(folders.map((folder) => rimraf(folder)));
1250
+ await Promise.all(folders.map((folder) => deleteGlob(folder)));
1236
1251
  return 0;
1237
1252
  }, "packageCleanOutputs");
1238
1253
 
1239
1254
  // src/actions/package/clean-typescript.ts
1240
1255
  import path4 from "node:path";
1241
1256
  import chalk19 from "chalk";
1242
- import { rimraf as rimraf2 } from "rimraf";
1243
1257
  var packageCleanTypescript = /* @__PURE__ */ __name(async () => {
1244
1258
  const pkg = process.env.INIT_CWD ?? ".";
1245
1259
  const pkgName = process.env.npm_package_name;
@@ -1249,7 +1263,7 @@ var packageCleanTypescript = /* @__PURE__ */ __name(async () => {
1249
1263
  path4.join(pkg, ".tsconfig.*"),
1250
1264
  path4.join(pkg, ".eslintcache")
1251
1265
  ];
1252
- await Promise.all(files.map((file) => rimraf2(file)));
1266
+ await Promise.all(files.map((file) => deleteGlob(file)));
1253
1267
  return 0;
1254
1268
  }, "packageCleanTypescript");
1255
1269
 
@@ -1265,11 +1279,11 @@ var packageClean = /* @__PURE__ */ __name(async () => {
1265
1279
  import chalk22 from "chalk";
1266
1280
 
1267
1281
  // src/actions/package/publint.ts
1268
- import { promises as fs } from "node:fs";
1282
+ import { promises as fs2 } from "node:fs";
1269
1283
  import chalk20 from "chalk";
1270
1284
  var packagePublint = /* @__PURE__ */ __name(async (params) => {
1271
1285
  const pkgDir = process.env.INIT_CWD;
1272
- const pkg = JSON.parse(await fs.readFile(`${pkgDir}/package.json`, "utf8"));
1286
+ const pkg = JSON.parse(await fs2.readFile(`${pkgDir}/package.json`, "utf8"));
1273
1287
  console.log(chalk20.green(`Publint: ${pkg.name}`));
1274
1288
  console.log(chalk20.gray(pkgDir));
1275
1289
  const { publint: publint2 } = await import("publint");
@@ -1313,7 +1327,6 @@ import { DiagnosticCategory, formatDiagnosticsWithColorAndContext, getLineAndCha
1313
1327
 
1314
1328
  // src/actions/package/compile/getCompilerOptions.ts
1315
1329
  import { createRequire } from "node:module";
1316
- import merge2 from "lodash/merge.js";
1317
1330
  import { findConfigFile, readConfigFile, sys } from "typescript";
1318
1331
  var getNested = /* @__PURE__ */ __name((config2) => {
1319
1332
  if (config2.extends) {
@@ -1333,7 +1346,10 @@ var getCompilerOptionsJSONFollowExtends = /* @__PURE__ */ __name((filename3) =>
1333
1346
  var getCompilerOptions = /* @__PURE__ */ __name((options, tsconfig = "tsconfig.json") => {
1334
1347
  const configFileName = findConfigFile("./", sys.fileExists, tsconfig);
1335
1348
  const configFileCompilerOptions = configFileName ? getCompilerOptionsJSONFollowExtends(configFileName) : void 0;
1336
- return merge2({}, configFileCompilerOptions, options);
1349
+ return {
1350
+ ...configFileCompilerOptions,
1351
+ ...options
1352
+ };
1337
1353
  }, "getCompilerOptions");
1338
1354
 
1339
1355
  // src/actions/package/compile/packageCompileTsc.ts
@@ -1392,9 +1408,9 @@ var packageCompileTsc = /* @__PURE__ */ __name(async (noEmit, config2, compilerO
1392
1408
  import { build as build2, defineConfig } from "tsup";
1393
1409
 
1394
1410
  // src/actions/package/compile/inputs.ts
1395
- import { glob } from "glob";
1411
+ import { glob as glob2 } from "glob";
1396
1412
  var getAllInputs2 = /* @__PURE__ */ __name((folder) => {
1397
- return glob.sync(`${folder}/**/*.*`, {
1413
+ return glob2.sync(`${folder}/**/*.*`, {
1398
1414
  ignore: [
1399
1415
  "**/*.spec.*",
1400
1416
  "**/*.stories.*",