binary-collections 2.0.9 → 2.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (306) hide show
  1. package/.puppeterrc.cjs +25 -0
  2. package/binaries/binary-executor.cjs +178 -0
  3. package/{bin → binaries}/clean-nodemodule +0 -0
  4. package/binaries/clean-nodemodule.cjs +178 -0
  5. package/binaries/clean-nodemodule.cmd +4 -0
  6. package/{bin → binaries}/clean-nodemodules +0 -0
  7. package/binaries/clean-nodemodules.cjs +178 -0
  8. package/binaries/clean-nodemodules.cmd +5 -0
  9. package/{bin → binaries}/dev +0 -0
  10. package/binaries/dev.cjs +178 -0
  11. package/{bin → binaries}/empty +0 -0
  12. package/binaries/empty.cjs +178 -0
  13. package/{bin → binaries}/git-reduce-size +0 -0
  14. package/binaries/git-reduce-size.cjs +178 -0
  15. package/binaries/javakill.cjs +178 -0
  16. package/{bin → binaries}/javakill.cmd +0 -0
  17. package/binaries/kill-night-crows.bat +7 -0
  18. package/binaries/kill-night-crows.ps1 +172 -0
  19. package/{bin → binaries}/kill-process +0 -0
  20. package/binaries/kill-process.cjs +178 -0
  21. package/binaries/nodekill.cjs +178 -0
  22. package/{bin → binaries}/nodekill.ps1 +0 -0
  23. package/{bin → binaries}/prod +0 -0
  24. package/binaries/prod.cjs +178 -0
  25. package/binaries/py +111 -0
  26. package/binaries/py.cjs +178 -0
  27. package/binaries/py.cmd +49 -0
  28. package/{bin → binaries}/rmfind +0 -0
  29. package/binaries/rmfind.cjs +178 -0
  30. package/{bin → binaries}/rmx +0 -0
  31. package/binaries/rmx.cjs +178 -0
  32. package/{bin → binaries}/submodule-token +0 -0
  33. package/binaries/submodule-token.cjs +178 -0
  34. package/binaries/test-cjs +10 -0
  35. package/binaries/test-cjs.cjs +178 -0
  36. package/binaries/test-cjs.cmd +11 -0
  37. package/binaries/yarn-clean +32 -0
  38. package/binaries/yarn-clean.cjs +178 -0
  39. package/binaries/yarn-clean.cmd +30 -0
  40. package/binaries/yarn-clean.py +148 -0
  41. package/docs-src/clean-github-actions-caches.md +26 -0
  42. package/docs-src/free-chatgpt.md +26 -0
  43. package/lib/binary-collections-config.cjs +3 -2
  44. package/lib/binary-collections-config.mjs +2 -2
  45. package/lib/binary-collections.cjs +513 -105
  46. package/lib/binary-collections.mjs +178 -117
  47. package/lib/changelog.cjs +64 -16
  48. package/lib/changelog.mjs +177 -171
  49. package/lib/{chunk-VVEZVNIV.mjs → chunk-2CBJCW7E.mjs} +3 -3
  50. package/lib/chunk-34IQDTLZ.mjs +27 -0
  51. package/lib/chunk-3HFFECCI.mjs +27 -0
  52. package/lib/chunk-4UHL4WVN.mjs +136 -0
  53. package/lib/{chunk-4BYBVEYC.mjs → chunk-66PAU5PS.mjs} +5 -4
  54. package/lib/chunk-6HHJRKFB.mjs +59 -0
  55. package/lib/chunk-6S4NXESK.mjs +26 -0
  56. package/lib/chunk-7XTEJHOE.mjs +193 -0
  57. package/lib/{chunk-ZYAQRPUL.mjs → chunk-7YD7IPFF.mjs} +2 -2
  58. package/lib/{chunk-SH3L6HHV.mjs → chunk-A2JQXI5Z.mjs} +2 -2
  59. package/lib/{chunk-EGSSKVDH.mjs → chunk-A3VUZEJK.mjs} +1 -1
  60. package/lib/chunk-AJDD5DZM.mjs +109 -0
  61. package/lib/chunk-BZWVHODJ.mjs +62 -0
  62. package/lib/chunk-FCDQGYBF.mjs +136 -0
  63. package/lib/chunk-FKI7IEB5.mjs +172 -0
  64. package/lib/chunk-GEYA2USY.mjs +207 -0
  65. package/lib/chunk-GJTGHXRA.mjs +356 -0
  66. package/lib/{chunk-YV7DO3YV.mjs → chunk-HLGOWBEO.mjs} +1 -1
  67. package/lib/chunk-ID2WBTE2.mjs +80 -0
  68. package/lib/chunk-JXFOHKDM.mjs +239 -0
  69. package/lib/{chunk-YX5U7XDR.mjs → chunk-M3YIYRHT.mjs} +6 -5
  70. package/lib/chunk-N436BNBK.mjs +514 -0
  71. package/lib/chunk-NCXAP7AA.mjs +31 -0
  72. package/lib/chunk-PDN26I7O.mjs +188 -0
  73. package/lib/{chunk-JGR2NW6D.mjs → chunk-PDSXF5HY.mjs} +3 -3
  74. package/lib/{chunk-AASHBCRW.mjs → chunk-QQ4A6DLD.mjs} +8 -0
  75. package/lib/{chunk-ONIBBBQ3.mjs → chunk-RWLXRTYP.mjs} +4 -3
  76. package/lib/chunk-TOIVAQF7.mjs +136 -0
  77. package/lib/chunk-V5SKYJUB.mjs +136 -0
  78. package/lib/chunk-WSRETQCA.mjs +59 -0
  79. package/lib/chunk-XA3SNBPA.mjs +184 -0
  80. package/lib/chunk-XVBFFVCJ.mjs +209 -0
  81. package/lib/chunk-YYLIQQKF.mjs +31 -0
  82. package/lib/{chunk-APBWENF6.mjs → chunk-Z6JLYU2J.mjs} +63 -16
  83. package/lib/chunk-ZDMWBSYF.mjs +81 -0
  84. package/lib/clean-github-actions-caches.cjs +291 -148
  85. package/lib/clean-github-actions-caches.mjs +4 -3
  86. package/lib/del-gradle.cjs +63 -15
  87. package/lib/del-gradle.js +2 -1
  88. package/lib/del-gradle.mjs +2 -2
  89. package/lib/del-node-modules.cjs +143 -148
  90. package/lib/del-node-modules.js +210 -14
  91. package/lib/del-node-modules.mjs +149 -18
  92. package/lib/del-ps.cjs +90 -21
  93. package/lib/del-ps.js +3 -2
  94. package/lib/del-ps.mjs +7 -5
  95. package/lib/del-yarn-caches.cjs +87 -18
  96. package/lib/del-yarn-caches.js +38 -3
  97. package/lib/del-yarn-caches.mjs +6 -6
  98. package/lib/find-node-modules-cli.cjs +5 -4
  99. package/lib/find-node-modules-cli.js +2 -1
  100. package/lib/find-node-modules-cli.mjs +2 -2
  101. package/lib/find-node-modules.cjs +4 -3
  102. package/lib/{find-node-modules.d.ts → find-node-modules.d.cts} +1 -1
  103. package/lib/find-node-modules.mjs +2 -2
  104. package/lib/free-chatgpt.cjs +754 -0
  105. package/lib/free-chatgpt.js +51 -0
  106. package/lib/free-chatgpt.mjs +50 -0
  107. package/lib/git/gitattributes.cjs +2 -1
  108. package/lib/git/{gitattributes.d.ts → gitattributes.d.cts} +7 -2
  109. package/lib/git/gitattributes.mjs +2 -2
  110. package/lib/git/line-endings.cjs +298 -64
  111. package/lib/git/line-endings.mjs +4 -4
  112. package/lib/git/normalize.cjs +26 -36
  113. package/lib/git/normalize.mjs +2 -2
  114. package/lib/git/permissions.cjs +77 -11
  115. package/lib/git/permissions.mjs +3 -3
  116. package/lib/git/pull-strategy.cjs +76 -9
  117. package/lib/git/pull-strategy.mjs +3 -3
  118. package/lib/git/undo-commit-cli.cjs +110 -0
  119. package/lib/git/undo-commit-cli.d.ts +1 -0
  120. package/lib/git/undo-commit-cli.js +4 -0
  121. package/lib/git/undo-commit-cli.mjs +14 -0
  122. package/lib/git/undo-commit.cjs +81 -0
  123. package/lib/git/undo-commit.d.cts +1 -0
  124. package/lib/git/undo-commit.mjs +7 -0
  125. package/lib/git/undo-staged-cli.cjs +110 -0
  126. package/lib/git/undo-staged-cli.d.ts +1 -0
  127. package/lib/git/undo-staged-cli.js +4 -0
  128. package/lib/git/undo-staged-cli.mjs +14 -0
  129. package/lib/git/undo-staged.cjs +81 -0
  130. package/lib/git/undo-staged.d.cts +1 -0
  131. package/lib/git/undo-staged.mjs +7 -0
  132. package/lib/git/user-config.cjs +313 -83
  133. package/lib/git/user-config.mjs +4 -4
  134. package/lib/git/utils.cjs +40 -60
  135. package/lib/git/utils.mjs +2 -2
  136. package/lib/git-diff-cli.cjs +857 -0
  137. package/lib/git-diff-cli.js +16 -0
  138. package/lib/git-diff-cli.mjs +17 -0
  139. package/lib/git-diff.cjs +862 -58
  140. package/lib/git-diff.d.ts +38 -83
  141. package/lib/git-diff.js +152 -0
  142. package/lib/git-diff.mjs +23 -85
  143. package/lib/git-fix.cjs +733 -97
  144. package/lib/git-fix.mjs +10 -9
  145. package/lib/git-purge.cjs +64 -16
  146. package/lib/git-purge.d.cts +1 -0
  147. package/lib/git-purge.mjs +43 -37
  148. package/lib/index.cjs +7 -6
  149. package/lib/index.d.ts +1 -1
  150. package/lib/index.js +2 -5
  151. package/lib/index.mjs +4 -4
  152. package/lib/kill-night-crows.cjs +87 -0
  153. package/lib/kill-night-crows.d.mts +1 -0
  154. package/lib/kill-night-crows.mjs +65 -0
  155. package/lib/npm-run-series.cjs +63 -16
  156. package/lib/npm-run-series.mjs +42 -36
  157. package/lib/package-resolutions-updater-cli.cjs +560 -0
  158. package/lib/package-resolutions-updater-cli.d.mts +1 -0
  159. package/lib/package-resolutions-updater-cli.mjs +124 -0
  160. package/lib/package-resolutions-updater.cjs +178 -158
  161. package/lib/package-resolutions-updater.d.mts +32 -1
  162. package/lib/package-resolutions-updater.mjs +17 -338
  163. package/lib/php-cs-fixer-staged.cjs +105 -0
  164. package/lib/php-cs-fixer-staged.d.cts +2 -0
  165. package/lib/php-cs-fixer-staged.mjs +117 -0
  166. package/lib/print-directory-tree.cjs +320 -207
  167. package/lib/print-directory-tree.mjs +3 -3
  168. package/lib/ps/connected-domain.cjs +25 -2
  169. package/lib/ps/connected-domain.d.ts +10 -2
  170. package/lib/ps/connected-domain.js +5 -2
  171. package/lib/ps/connected-domain.mjs +8 -4
  172. package/lib/ps/index.cjs +345 -322
  173. package/lib/ps/index.d.mjs +1 -1
  174. package/lib/ps/index.js +2 -1
  175. package/lib/ps/index.mjs +179 -182
  176. package/lib/ps/isWin.cjs +24 -1
  177. package/lib/ps/isWin.d.ts +1 -1
  178. package/lib/ps/isWin.js +3 -1
  179. package/lib/ps/isWin.mjs +8 -4
  180. package/lib/ps/table-parser.cjs +167 -159
  181. package/lib/ps/table-parser.d.ts +5 -0
  182. package/lib/ps/table-parser.js +10 -4
  183. package/lib/ps/table-parser.mjs +9 -5
  184. package/lib/remove-module.cjs +310 -0
  185. package/lib/remove-module.d.mts +1 -0
  186. package/lib/remove-module.mjs +111 -0
  187. package/lib/rmpath.cjs +322 -0
  188. package/lib/rmpath.d.mts +3 -0
  189. package/lib/rmpath.mjs +108 -0
  190. package/lib/submodule-install.cjs +311 -86
  191. package/lib/submodule-install.mjs +53 -5
  192. package/lib/submodule-remove-cli.cjs +107 -0
  193. package/lib/submodule-remove-cli.d.ts +1 -0
  194. package/lib/submodule-remove-cli.js +31 -0
  195. package/lib/submodule-remove-cli.mjs +28 -0
  196. package/lib/submodule-remove.cjs +46 -0
  197. package/lib/submodule-remove.d.cts +2 -0
  198. package/lib/submodule-remove.mjs +6 -0
  199. package/lib/utils/chatgpt.cjs +541 -0
  200. package/lib/utils/chatgpt.d.ts +31 -0
  201. package/lib/utils/chatgpt.js +708 -0
  202. package/lib/utils/chatgpt.mjs +8 -0
  203. package/lib/utils/findEnvFiles.cjs +107 -0
  204. package/lib/utils/findEnvFiles.d.ts +8 -0
  205. package/lib/utils/findEnvFiles.js +121 -0
  206. package/lib/utils/findEnvFiles.mjs +8 -0
  207. package/lib/utils/findWorkspaceRoot.cjs +70 -0
  208. package/lib/utils/findWorkspaceRoot.d.ts +9 -0
  209. package/lib/utils/findWorkspaceRoot.js +57 -0
  210. package/lib/utils/findWorkspaceRoot.mjs +40 -0
  211. package/lib/{utils.cjs → utils/index.cjs} +61 -14
  212. package/lib/{utils.mjs → utils/index.mjs} +2 -2
  213. package/lib/utils/isGithubTokenValid.cjs +64 -0
  214. package/lib/utils/isGithubTokenValid.d.ts +7 -0
  215. package/lib/utils/isGithubTokenValid.js +48 -0
  216. package/lib/utils/isGithubTokenValid.mjs +36 -0
  217. package/lib/yarn-reinstall.cjs +220 -38
  218. package/lib/yarn-reinstall.mjs +2 -2
  219. package/package.json +138 -104
  220. package/readme.md +48 -75
  221. package/releases/readme.md +36 -0
  222. package/requirements.txt +1 -0
  223. package/test/README.md +101 -0
  224. package/test/package.json +2 -1
  225. package/test-project/readme.md +26 -0
  226. package/tmp/test-repo/README.md +35 -0
  227. package/tmp/test-repo/package.json +1 -1
  228. package/tmp/typedoc/readme.md +320 -0
  229. package/bin/bash-dummy +0 -56
  230. package/bin/bash-dummy.cmd +0 -25
  231. package/bin/dir-tree.cmd +0 -7
  232. package/bin/git-diff +0 -4
  233. package/bin/git-diff.cmd +0 -7
  234. package/bin/git-fix +0 -36
  235. package/bin/git-fix.cmd +0 -7
  236. package/bin/rmpath +0 -70
  237. package/bin/submodule-install.txt +0 -118
  238. package/bin/submodule-remove +0 -46
  239. package/bin/submodule.txt +0 -172
  240. package/lib/binary-collections-config.d.mts +0 -18
  241. package/lib/binary-collections-config.js +0 -39
  242. package/lib/binary-collections.d.mts +0 -137
  243. package/lib/binary-collections.d.ts +0 -137
  244. package/lib/changelog.d.mts +0 -2
  245. package/lib/changelog.js +0 -226
  246. package/lib/chunk-DPKAJKFO.mjs +0 -171
  247. package/lib/chunk-G3THLIDT.mjs +0 -200
  248. package/lib/chunk-W3ENOM53.mjs +0 -18
  249. package/lib/clean-github-actions-caches.d.mts +0 -169
  250. package/lib/clean-github-actions-caches.d.ts +0 -169
  251. package/lib/del-gradle.d.mts +0 -2
  252. package/lib/del-node-modules.d.mts +0 -2
  253. package/lib/del-ps.d.mts +0 -2
  254. package/lib/del-yarn-caches.d.mts +0 -2
  255. package/lib/find-node-modules-cli.d.mts +0 -1
  256. package/lib/find-node-modules.d.mts +0 -13
  257. package/lib/find-node-modules.js +0 -53
  258. package/lib/git/gitattributes.d.mts +0 -35
  259. package/lib/git/gitattributes.js +0 -223
  260. package/lib/git/line-endings.d.mts +0 -83
  261. package/lib/git/line-endings.d.ts +0 -83
  262. package/lib/git/normalize.d.mts +0 -43
  263. package/lib/git/normalize.d.ts +0 -43
  264. package/lib/git/permissions.d.mts +0 -17
  265. package/lib/git/permissions.d.ts +0 -17
  266. package/lib/git/pull-strategy.d.mts +0 -15
  267. package/lib/git/pull-strategy.d.ts +0 -15
  268. package/lib/git/user-config.d.mts +0 -105
  269. package/lib/git/user-config.d.ts +0 -105
  270. package/lib/git/utils.d.mts +0 -69
  271. package/lib/git/utils.d.ts +0 -69
  272. package/lib/git-diff.d.mts +0 -84
  273. package/lib/git-fix.d.mts +0 -141
  274. package/lib/git-fix.d.ts +0 -141
  275. package/lib/git-purge.d.mts +0 -2
  276. package/lib/git-purge.js +0 -59
  277. package/lib/index.d.mts +0 -1
  278. package/lib/npm-run-series.d.mts +0 -1
  279. package/lib/npm-run-series.js +0 -86
  280. package/lib/package-resolutions-updater.d.ts +0 -352
  281. package/lib/print-directory-tree.d.mts +0 -234
  282. package/lib/print-directory-tree.d.ts +0 -234
  283. package/lib/ps/connected-domain.d.mts +0 -3
  284. package/lib/ps/index.d.d.mts +0 -26
  285. package/lib/ps/index.d.d.ts +0 -26
  286. package/lib/ps/index.d.mts +0 -26
  287. package/lib/ps/isWin.d.mts +0 -3
  288. package/lib/ps/table-parser.d.mts +0 -3
  289. package/lib/submodule-install.d.mts +0 -121
  290. package/lib/submodule-install.d.ts +0 -121
  291. package/lib/utils.d.mts +0 -40
  292. package/lib/utils.js +0 -181
  293. package/lib/yarn-reinstall.d.mts +0 -49
  294. package/lib/yarn-reinstall.d.ts +0 -49
  295. package/src/package-resolutions-updater.mjs +0 -350
  296. package/src/print-directory-tree.cjs +0 -234
  297. package/src/ps/index.js +0 -286
  298. package/src/yarn-reinstall.cjs +0 -49
  299. /package/{bin → binaries}/nodekill +0 -0
  300. /package/{bin → binaries}/nodekill.cmd +0 -0
  301. /package/lib/{binary-collections-config.d.ts → binary-collections-config.d.cts} +0 -0
  302. /package/lib/{changelog.d.ts → changelog.d.cts} +0 -0
  303. /package/lib/{git-purge.d.ts → free-chatgpt.d.ts} +0 -0
  304. /package/lib/{git-diff.d.cts → git-diff-cli.d.ts} +0 -0
  305. /package/lib/{npm-run-series.d.ts → npm-run-series.d.cts} +0 -0
  306. /package/lib/{utils.d.ts → utils/index.d.cts} +0 -0
@@ -0,0 +1,178 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Built-in Node.js modules:
5
+ *
6
+ * - child_process:
7
+ * Used to launch external scripts/programs.
8
+ *
9
+ * - path:
10
+ * Safely handles file paths across operating systems.
11
+ *
12
+ * - fs:
13
+ * Used to check whether files exist.
14
+ */
15
+ const { spawnSync } = require("child_process");
16
+ const path = require("path");
17
+ const fs = require("fs");
18
+
19
+ /**
20
+ * __dirname
21
+ * Absolute directory path of this launcher script.
22
+ *
23
+ * __filename
24
+ * Absolute path of this launcher file itself.
25
+ *
26
+ * base
27
+ * Filename without extension.
28
+ *
29
+ * Example:
30
+ * File = "/tools/mytool.js"
31
+ *
32
+ * binDir = "/tools"
33
+ * base = "mytool"
34
+ */
35
+ const binDir = __dirname;
36
+ const base = path.basename(__filename, path.extname(__filename));
37
+
38
+ /**
39
+ * Determine which script extensions to search for
40
+ * based on the current operating system.
41
+ *
42
+ * Windows:
43
+ * .cmd
44
+ * .bat
45
+ * .ps1
46
+ * .vbs
47
+ *
48
+ * Linux/macOS:
49
+ * .sh
50
+ * executable file without extension
51
+ */
52
+ const candidates = process.platform === "win32" ? [".cmd", ".bat", ".ps1", ".vbs"] : [".sh", ""];
53
+
54
+ /**
55
+ * Search for the first matching script
56
+ * in the same directory as this launcher.
57
+ *
58
+ * Example:
59
+ * If base = "mytool"
60
+ *
61
+ * Windows checks:
62
+ * mytool.cmd
63
+ * mytool.bat
64
+ * mytool.ps1
65
+ * mytool.vbs
66
+ *
67
+ * Linux/macOS checks:
68
+ * mytool.sh
69
+ * mytool
70
+ */
71
+ let found = null;
72
+
73
+ for (const ext of candidates) {
74
+ const script = path.join(binDir, base + ext);
75
+
76
+ if (fs.existsSync(script)) {
77
+ found = script;
78
+ break;
79
+ }
80
+ }
81
+
82
+ /**
83
+ * If no matching script was found,
84
+ * print an error and exit with failure code 1.
85
+ */
86
+ if (!found) {
87
+ console.error(`No script found for ${base} in ${binDir}`);
88
+ process.exit(1);
89
+ }
90
+
91
+ /**
92
+ * Detect special script types
93
+ * that require a shell/interpreter.
94
+ */
95
+ const isPs1 = found.endsWith(".ps1");
96
+ const isCmd = found.endsWith(".cmd");
97
+
98
+ /**
99
+ * cmd
100
+ * The executable program to launch.
101
+ *
102
+ * args
103
+ * Arguments passed to the executable.
104
+ */
105
+ let cmd, args;
106
+
107
+ /**
108
+ * PowerShell scripts:
109
+ *
110
+ * Run through powershell.exe because .ps1 files
111
+ * are not directly executable like binaries.
112
+ *
113
+ * Flags:
114
+ * -NoProfile
115
+ * Prevent loading user profile scripts.
116
+ *
117
+ * -ExecutionPolicy Bypass
118
+ * Allow script execution even if policy blocks it.
119
+ *
120
+ * -File
121
+ * Specifies the script to execute.
122
+ *
123
+ * process.argv.slice(2)
124
+ * Forward all user-provided command-line arguments.
125
+ */
126
+ if (isPs1) {
127
+ cmd = "powershell.exe";
128
+
129
+ args = ["-NoProfile", "-ExecutionPolicy", "Bypass", "-File", found, ...process.argv.slice(2)];
130
+
131
+ /**
132
+ * CMD batch files:
133
+ *
134
+ * Run through cmd.exe using:
135
+ * /c
136
+ * which means:
137
+ * "execute command and terminate"
138
+ */
139
+ } else if (isCmd) {
140
+ cmd = "cmd.exe";
141
+
142
+ args = ["/c", found, ...process.argv.slice(2)];
143
+
144
+ /**
145
+ * Other scripts:
146
+ *
147
+ * Usually:
148
+ * - shell scripts (.sh)
149
+ * - executable binaries
150
+ *
151
+ * These can be executed directly.
152
+ */
153
+ } else {
154
+ cmd = found;
155
+ args = process.argv.slice(2);
156
+ }
157
+
158
+ /**
159
+ * Execute the selected script synchronously.
160
+ *
161
+ * stdio: "inherit"
162
+ * Shares the current terminal with the child process,
163
+ * so stdout/stderr/input behave normally.
164
+ *
165
+ * spawnSync waits until the child process exits.
166
+ */
167
+ const result = spawnSync(cmd, args, {
168
+ stdio: "inherit"
169
+ });
170
+
171
+ /**
172
+ * Exit using the same exit code
173
+ * returned by the child process.
174
+ *
175
+ * If result.status is null/undefined,
176
+ * default to exit code 1.
177
+ */
178
+ process.exit(result.status ?? 1);
File without changes
@@ -0,0 +1,178 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Built-in Node.js modules:
5
+ *
6
+ * - child_process:
7
+ * Used to launch external scripts/programs.
8
+ *
9
+ * - path:
10
+ * Safely handles file paths across operating systems.
11
+ *
12
+ * - fs:
13
+ * Used to check whether files exist.
14
+ */
15
+ const { spawnSync } = require("child_process");
16
+ const path = require("path");
17
+ const fs = require("fs");
18
+
19
+ /**
20
+ * __dirname
21
+ * Absolute directory path of this launcher script.
22
+ *
23
+ * __filename
24
+ * Absolute path of this launcher file itself.
25
+ *
26
+ * base
27
+ * Filename without extension.
28
+ *
29
+ * Example:
30
+ * File = "/tools/mytool.js"
31
+ *
32
+ * binDir = "/tools"
33
+ * base = "mytool"
34
+ */
35
+ const binDir = __dirname;
36
+ const base = path.basename(__filename, path.extname(__filename));
37
+
38
+ /**
39
+ * Determine which script extensions to search for
40
+ * based on the current operating system.
41
+ *
42
+ * Windows:
43
+ * .cmd
44
+ * .bat
45
+ * .ps1
46
+ * .vbs
47
+ *
48
+ * Linux/macOS:
49
+ * .sh
50
+ * executable file without extension
51
+ */
52
+ const candidates = process.platform === "win32" ? [".cmd", ".bat", ".ps1", ".vbs"] : [".sh", ""];
53
+
54
+ /**
55
+ * Search for the first matching script
56
+ * in the same directory as this launcher.
57
+ *
58
+ * Example:
59
+ * If base = "mytool"
60
+ *
61
+ * Windows checks:
62
+ * mytool.cmd
63
+ * mytool.bat
64
+ * mytool.ps1
65
+ * mytool.vbs
66
+ *
67
+ * Linux/macOS checks:
68
+ * mytool.sh
69
+ * mytool
70
+ */
71
+ let found = null;
72
+
73
+ for (const ext of candidates) {
74
+ const script = path.join(binDir, base + ext);
75
+
76
+ if (fs.existsSync(script)) {
77
+ found = script;
78
+ break;
79
+ }
80
+ }
81
+
82
+ /**
83
+ * If no matching script was found,
84
+ * print an error and exit with failure code 1.
85
+ */
86
+ if (!found) {
87
+ console.error(`No script found for ${base} in ${binDir}`);
88
+ process.exit(1);
89
+ }
90
+
91
+ /**
92
+ * Detect special script types
93
+ * that require a shell/interpreter.
94
+ */
95
+ const isPs1 = found.endsWith(".ps1");
96
+ const isCmd = found.endsWith(".cmd");
97
+
98
+ /**
99
+ * cmd
100
+ * The executable program to launch.
101
+ *
102
+ * args
103
+ * Arguments passed to the executable.
104
+ */
105
+ let cmd, args;
106
+
107
+ /**
108
+ * PowerShell scripts:
109
+ *
110
+ * Run through powershell.exe because .ps1 files
111
+ * are not directly executable like binaries.
112
+ *
113
+ * Flags:
114
+ * -NoProfile
115
+ * Prevent loading user profile scripts.
116
+ *
117
+ * -ExecutionPolicy Bypass
118
+ * Allow script execution even if policy blocks it.
119
+ *
120
+ * -File
121
+ * Specifies the script to execute.
122
+ *
123
+ * process.argv.slice(2)
124
+ * Forward all user-provided command-line arguments.
125
+ */
126
+ if (isPs1) {
127
+ cmd = "powershell.exe";
128
+
129
+ args = ["-NoProfile", "-ExecutionPolicy", "Bypass", "-File", found, ...process.argv.slice(2)];
130
+
131
+ /**
132
+ * CMD batch files:
133
+ *
134
+ * Run through cmd.exe using:
135
+ * /c
136
+ * which means:
137
+ * "execute command and terminate"
138
+ */
139
+ } else if (isCmd) {
140
+ cmd = "cmd.exe";
141
+
142
+ args = ["/c", found, ...process.argv.slice(2)];
143
+
144
+ /**
145
+ * Other scripts:
146
+ *
147
+ * Usually:
148
+ * - shell scripts (.sh)
149
+ * - executable binaries
150
+ *
151
+ * These can be executed directly.
152
+ */
153
+ } else {
154
+ cmd = found;
155
+ args = process.argv.slice(2);
156
+ }
157
+
158
+ /**
159
+ * Execute the selected script synchronously.
160
+ *
161
+ * stdio: "inherit"
162
+ * Shares the current terminal with the child process,
163
+ * so stdout/stderr/input behave normally.
164
+ *
165
+ * spawnSync waits until the child process exits.
166
+ */
167
+ const result = spawnSync(cmd, args, {
168
+ stdio: "inherit"
169
+ });
170
+
171
+ /**
172
+ * Exit using the same exit code
173
+ * returned by the child process.
174
+ *
175
+ * If result.status is null/undefined,
176
+ * default to exit code 1.
177
+ */
178
+ process.exit(result.status ?? 1);
File without changes
@@ -0,0 +1,178 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Built-in Node.js modules:
5
+ *
6
+ * - child_process:
7
+ * Used to launch external scripts/programs.
8
+ *
9
+ * - path:
10
+ * Safely handles file paths across operating systems.
11
+ *
12
+ * - fs:
13
+ * Used to check whether files exist.
14
+ */
15
+ const { spawnSync } = require("child_process");
16
+ const path = require("path");
17
+ const fs = require("fs");
18
+
19
+ /**
20
+ * __dirname
21
+ * Absolute directory path of this launcher script.
22
+ *
23
+ * __filename
24
+ * Absolute path of this launcher file itself.
25
+ *
26
+ * base
27
+ * Filename without extension.
28
+ *
29
+ * Example:
30
+ * File = "/tools/mytool.js"
31
+ *
32
+ * binDir = "/tools"
33
+ * base = "mytool"
34
+ */
35
+ const binDir = __dirname;
36
+ const base = path.basename(__filename, path.extname(__filename));
37
+
38
+ /**
39
+ * Determine which script extensions to search for
40
+ * based on the current operating system.
41
+ *
42
+ * Windows:
43
+ * .cmd
44
+ * .bat
45
+ * .ps1
46
+ * .vbs
47
+ *
48
+ * Linux/macOS:
49
+ * .sh
50
+ * executable file without extension
51
+ */
52
+ const candidates = process.platform === "win32" ? [".cmd", ".bat", ".ps1", ".vbs"] : [".sh", ""];
53
+
54
+ /**
55
+ * Search for the first matching script
56
+ * in the same directory as this launcher.
57
+ *
58
+ * Example:
59
+ * If base = "mytool"
60
+ *
61
+ * Windows checks:
62
+ * mytool.cmd
63
+ * mytool.bat
64
+ * mytool.ps1
65
+ * mytool.vbs
66
+ *
67
+ * Linux/macOS checks:
68
+ * mytool.sh
69
+ * mytool
70
+ */
71
+ let found = null;
72
+
73
+ for (const ext of candidates) {
74
+ const script = path.join(binDir, base + ext);
75
+
76
+ if (fs.existsSync(script)) {
77
+ found = script;
78
+ break;
79
+ }
80
+ }
81
+
82
+ /**
83
+ * If no matching script was found,
84
+ * print an error and exit with failure code 1.
85
+ */
86
+ if (!found) {
87
+ console.error(`No script found for ${base} in ${binDir}`);
88
+ process.exit(1);
89
+ }
90
+
91
+ /**
92
+ * Detect special script types
93
+ * that require a shell/interpreter.
94
+ */
95
+ const isPs1 = found.endsWith(".ps1");
96
+ const isCmd = found.endsWith(".cmd");
97
+
98
+ /**
99
+ * cmd
100
+ * The executable program to launch.
101
+ *
102
+ * args
103
+ * Arguments passed to the executable.
104
+ */
105
+ let cmd, args;
106
+
107
+ /**
108
+ * PowerShell scripts:
109
+ *
110
+ * Run through powershell.exe because .ps1 files
111
+ * are not directly executable like binaries.
112
+ *
113
+ * Flags:
114
+ * -NoProfile
115
+ * Prevent loading user profile scripts.
116
+ *
117
+ * -ExecutionPolicy Bypass
118
+ * Allow script execution even if policy blocks it.
119
+ *
120
+ * -File
121
+ * Specifies the script to execute.
122
+ *
123
+ * process.argv.slice(2)
124
+ * Forward all user-provided command-line arguments.
125
+ */
126
+ if (isPs1) {
127
+ cmd = "powershell.exe";
128
+
129
+ args = ["-NoProfile", "-ExecutionPolicy", "Bypass", "-File", found, ...process.argv.slice(2)];
130
+
131
+ /**
132
+ * CMD batch files:
133
+ *
134
+ * Run through cmd.exe using:
135
+ * /c
136
+ * which means:
137
+ * "execute command and terminate"
138
+ */
139
+ } else if (isCmd) {
140
+ cmd = "cmd.exe";
141
+
142
+ args = ["/c", found, ...process.argv.slice(2)];
143
+
144
+ /**
145
+ * Other scripts:
146
+ *
147
+ * Usually:
148
+ * - shell scripts (.sh)
149
+ * - executable binaries
150
+ *
151
+ * These can be executed directly.
152
+ */
153
+ } else {
154
+ cmd = found;
155
+ args = process.argv.slice(2);
156
+ }
157
+
158
+ /**
159
+ * Execute the selected script synchronously.
160
+ *
161
+ * stdio: "inherit"
162
+ * Shares the current terminal with the child process,
163
+ * so stdout/stderr/input behave normally.
164
+ *
165
+ * spawnSync waits until the child process exits.
166
+ */
167
+ const result = spawnSync(cmd, args, {
168
+ stdio: "inherit"
169
+ });
170
+
171
+ /**
172
+ * Exit using the same exit code
173
+ * returned by the child process.
174
+ *
175
+ * If result.status is null/undefined,
176
+ * default to exit code 1.
177
+ */
178
+ process.exit(result.status ?? 1);
@@ -0,0 +1,178 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Built-in Node.js modules:
5
+ *
6
+ * - child_process:
7
+ * Used to launch external scripts/programs.
8
+ *
9
+ * - path:
10
+ * Safely handles file paths across operating systems.
11
+ *
12
+ * - fs:
13
+ * Used to check whether files exist.
14
+ */
15
+ const { spawnSync } = require("child_process");
16
+ const path = require("path");
17
+ const fs = require("fs");
18
+
19
+ /**
20
+ * __dirname
21
+ * Absolute directory path of this launcher script.
22
+ *
23
+ * __filename
24
+ * Absolute path of this launcher file itself.
25
+ *
26
+ * base
27
+ * Filename without extension.
28
+ *
29
+ * Example:
30
+ * File = "/tools/mytool.js"
31
+ *
32
+ * binDir = "/tools"
33
+ * base = "mytool"
34
+ */
35
+ const binDir = __dirname;
36
+ const base = path.basename(__filename, path.extname(__filename));
37
+
38
+ /**
39
+ * Determine which script extensions to search for
40
+ * based on the current operating system.
41
+ *
42
+ * Windows:
43
+ * .cmd
44
+ * .bat
45
+ * .ps1
46
+ * .vbs
47
+ *
48
+ * Linux/macOS:
49
+ * .sh
50
+ * executable file without extension
51
+ */
52
+ const candidates = process.platform === "win32" ? [".cmd", ".bat", ".ps1", ".vbs"] : [".sh", ""];
53
+
54
+ /**
55
+ * Search for the first matching script
56
+ * in the same directory as this launcher.
57
+ *
58
+ * Example:
59
+ * If base = "mytool"
60
+ *
61
+ * Windows checks:
62
+ * mytool.cmd
63
+ * mytool.bat
64
+ * mytool.ps1
65
+ * mytool.vbs
66
+ *
67
+ * Linux/macOS checks:
68
+ * mytool.sh
69
+ * mytool
70
+ */
71
+ let found = null;
72
+
73
+ for (const ext of candidates) {
74
+ const script = path.join(binDir, base + ext);
75
+
76
+ if (fs.existsSync(script)) {
77
+ found = script;
78
+ break;
79
+ }
80
+ }
81
+
82
+ /**
83
+ * If no matching script was found,
84
+ * print an error and exit with failure code 1.
85
+ */
86
+ if (!found) {
87
+ console.error(`No script found for ${base} in ${binDir}`);
88
+ process.exit(1);
89
+ }
90
+
91
+ /**
92
+ * Detect special script types
93
+ * that require a shell/interpreter.
94
+ */
95
+ const isPs1 = found.endsWith(".ps1");
96
+ const isCmd = found.endsWith(".cmd");
97
+
98
+ /**
99
+ * cmd
100
+ * The executable program to launch.
101
+ *
102
+ * args
103
+ * Arguments passed to the executable.
104
+ */
105
+ let cmd, args;
106
+
107
+ /**
108
+ * PowerShell scripts:
109
+ *
110
+ * Run through powershell.exe because .ps1 files
111
+ * are not directly executable like binaries.
112
+ *
113
+ * Flags:
114
+ * -NoProfile
115
+ * Prevent loading user profile scripts.
116
+ *
117
+ * -ExecutionPolicy Bypass
118
+ * Allow script execution even if policy blocks it.
119
+ *
120
+ * -File
121
+ * Specifies the script to execute.
122
+ *
123
+ * process.argv.slice(2)
124
+ * Forward all user-provided command-line arguments.
125
+ */
126
+ if (isPs1) {
127
+ cmd = "powershell.exe";
128
+
129
+ args = ["-NoProfile", "-ExecutionPolicy", "Bypass", "-File", found, ...process.argv.slice(2)];
130
+
131
+ /**
132
+ * CMD batch files:
133
+ *
134
+ * Run through cmd.exe using:
135
+ * /c
136
+ * which means:
137
+ * "execute command and terminate"
138
+ */
139
+ } else if (isCmd) {
140
+ cmd = "cmd.exe";
141
+
142
+ args = ["/c", found, ...process.argv.slice(2)];
143
+
144
+ /**
145
+ * Other scripts:
146
+ *
147
+ * Usually:
148
+ * - shell scripts (.sh)
149
+ * - executable binaries
150
+ *
151
+ * These can be executed directly.
152
+ */
153
+ } else {
154
+ cmd = found;
155
+ args = process.argv.slice(2);
156
+ }
157
+
158
+ /**
159
+ * Execute the selected script synchronously.
160
+ *
161
+ * stdio: "inherit"
162
+ * Shares the current terminal with the child process,
163
+ * so stdout/stderr/input behave normally.
164
+ *
165
+ * spawnSync waits until the child process exits.
166
+ */
167
+ const result = spawnSync(cmd, args, {
168
+ stdio: "inherit"
169
+ });
170
+
171
+ /**
172
+ * Exit using the same exit code
173
+ * returned by the child process.
174
+ *
175
+ * If result.status is null/undefined,
176
+ * default to exit code 1.
177
+ */
178
+ process.exit(result.status ?? 1);
File without changes
@@ -0,0 +1,7 @@
1
+ @echo off
2
+ setlocal
3
+ set "SCRIPT_DIR=%~dp0"
4
+
5
+ powershell.exe -NoProfile -ExecutionPolicy Bypass -File "%SCRIPT_DIR%kill-night-crows.ps1" %*
6
+ set "EXIT_CODE=%ERRORLEVEL%"
7
+ endlocal & exit /b %EXIT_CODE%