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
@@ -1,169 +0,0 @@
1
- const axios = require("axios");
2
- const { parseGitRemotes } = require("./utils");
3
- const path = require("upath");
4
- const fs = require("fs");
5
- const projectDir = process.cwd();
6
- const envPath = path.join(projectDir, ".env");
7
-
8
- // Load the .env file using dotenv
9
- if (fs.existsSync(envPath)) {
10
- require("dotenv").config({ path: envPath });
11
- } else {
12
- console.warn(`.env file not found at ${envPath}`);
13
- }
14
-
15
- // delete caches leaving single last cache based on creation date
16
-
17
- const ACCESS_TOKEN = process.env.GITHUB_TOKEN || process.env.ACCESS_TOKEN;
18
-
19
- if (!ACCESS_TOKEN) {
20
- throw new Error(
21
- "Access token is not provided. Please set ACCESS_TOKEN or GITHUB_TOKEN in your environment variables."
22
- );
23
- }
24
-
25
- /**
26
- * Deletes a GitHub Actions cache.
27
- * @param {string} GH_REPO - The GitHub repository in the format "owner/repo".
28
- * @param {string} cacheId - The ID of the cache to delete.
29
- * @returns {Promise} - A promise that resolves on success and rejects on error.
30
- */
31
- function deleteGitHubActionsCache(GH_REPO, cacheId) {
32
- return new Promise((resolve, reject) => {
33
- const url = `https://api.github.com/repos/${GH_REPO}/actions/caches/${cacheId}`;
34
- const token = ACCESS_TOKEN;
35
-
36
- if (!token) {
37
- return reject(new Error("Access token is not provided"));
38
- }
39
-
40
- axios
41
- .delete(url, {
42
- headers: {
43
- Authorization: `token ${token}`,
44
- Accept: "application/vnd.github.v3+json"
45
- }
46
- })
47
- .then((response) => {
48
- console.log(`Cache (${cacheId}) deleted successfully`, response.data);
49
- resolve(response.data); // Resolve with the response data
50
- })
51
- .catch((error) => {
52
- console.error("Error deleting cache:", error.response?.data || error.message || "Unknown error");
53
- reject(error); // Reject with the error
54
- });
55
- });
56
- }
57
-
58
- /**
59
- * list github actions caches
60
- * @param {string} GH_REPO
61
- * @returns {Promise<Record<string, Record<string, any>[]>>}
62
- */
63
- function get_caches(GH_REPO) {
64
- const url = `https://api.github.com/repos/${GH_REPO}/actions/caches`;
65
-
66
- return new Promise((resolve, reject) => {
67
- axios
68
- .get(url, {
69
- headers: {
70
- Accept: "application/vnd.github.v3+json",
71
- Authorization: `token ${ACCESS_TOKEN}`
72
- }
73
- })
74
- .then((response) => {
75
- /**
76
- * @type {Record<string, any>[]}
77
- */
78
- const data = response.data.actions_caches;
79
- // resolve(response.data);
80
- /**
81
- * extract the prefix from the key
82
- * @param {string} key
83
- * @returns
84
- */
85
- const getPrefix = (key) => {
86
- const split = key.split(/[-_]/);
87
- if (split.length == 3) {
88
- return `${split[0]}-${split[1]}`;
89
- } else if (split.length > 3) {
90
- return `${split[0]}-${split[1]}-${split[2]}`;
91
- }
92
- return split[0];
93
- };
94
-
95
- // Group by prefix
96
- const grouped = data.reduce(
97
- /**
98
- * @param {Record<string, Record<string, any>[]>} acc
99
- * @param {Record<string, any>} item
100
- * @returns {Record<string, Record<string, any>[]>}
101
- */
102
- (acc, item) => {
103
- const prefix = getPrefix(item.key);
104
-
105
- if (!acc[prefix]) {
106
- acc[prefix] = [];
107
- }
108
-
109
- acc[prefix].push(item);
110
-
111
- return acc;
112
- },
113
- {}
114
- );
115
-
116
- // Convert the grouped object into an array of arrays
117
- // const result = Object.values(grouped);
118
- resolve(grouped);
119
- })
120
- .catch((error) => {
121
- console.error("Error fetching data:", error);
122
- reject(error); // Reject the promise with the error
123
- });
124
- });
125
- }
126
-
127
- /**
128
- * Deletes old GitHub Actions caches for the current repository (origin remote),
129
- * keeping only the most recent cache for each prefix (based on creation date).
130
- * Retrieves caches, groups by prefix, sorts by creation date, and deletes all but the latest.
131
- */
132
- (async () => {
133
- try {
134
- const remotes = await parseGitRemotes();
135
- const GH_REPO = remotes.origin;
136
- const caches = await get_caches(GH_REPO);
137
-
138
- for (const key in caches) {
139
- if (Object.hasOwnProperty.call(caches, key)) {
140
- const items = caches[key]
141
- .sort((a, b) => new Date(b.created_at) - new Date(a.created_at))
142
- .map((item) => ({
143
- ...item,
144
- human_readable_date: new Date(item.created_at).toLocaleString()
145
- }));
146
-
147
- if (items.length > 1) {
148
- const ids = items.map((o) => o.id);
149
- ids.shift(); // keep the most recent cache
150
- if (ids.length > 0) {
151
- for (const id of ids) {
152
- try {
153
- await deleteGitHubActionsCache(GH_REPO, id);
154
- } catch (err) {
155
- console.error(`Error deleting cache ${id}:`, err);
156
- }
157
- }
158
- } else {
159
- console.log(`cache prefix ${key} no cache left`);
160
- }
161
- } else {
162
- console.log(`cache prefix ${key} only have 1 cache`);
163
- }
164
- }
165
- }
166
- } catch (e) {
167
- console.error(`Error: ${e}`);
168
- }
169
- })();
@@ -1,169 +0,0 @@
1
- const axios = require("axios");
2
- const { parseGitRemotes } = require("./utils");
3
- const path = require("upath");
4
- const fs = require("fs");
5
- const projectDir = process.cwd();
6
- const envPath = path.join(projectDir, ".env");
7
-
8
- // Load the .env file using dotenv
9
- if (fs.existsSync(envPath)) {
10
- require("dotenv").config({ path: envPath });
11
- } else {
12
- console.warn(`.env file not found at ${envPath}`);
13
- }
14
-
15
- // delete caches leaving single last cache based on creation date
16
-
17
- const ACCESS_TOKEN = process.env.GITHUB_TOKEN || process.env.ACCESS_TOKEN;
18
-
19
- if (!ACCESS_TOKEN) {
20
- throw new Error(
21
- "Access token is not provided. Please set ACCESS_TOKEN or GITHUB_TOKEN in your environment variables."
22
- );
23
- }
24
-
25
- /**
26
- * Deletes a GitHub Actions cache.
27
- * @param {string} GH_REPO - The GitHub repository in the format "owner/repo".
28
- * @param {string} cacheId - The ID of the cache to delete.
29
- * @returns {Promise} - A promise that resolves on success and rejects on error.
30
- */
31
- function deleteGitHubActionsCache(GH_REPO, cacheId) {
32
- return new Promise((resolve, reject) => {
33
- const url = `https://api.github.com/repos/${GH_REPO}/actions/caches/${cacheId}`;
34
- const token = ACCESS_TOKEN;
35
-
36
- if (!token) {
37
- return reject(new Error("Access token is not provided"));
38
- }
39
-
40
- axios
41
- .delete(url, {
42
- headers: {
43
- Authorization: `token ${token}`,
44
- Accept: "application/vnd.github.v3+json"
45
- }
46
- })
47
- .then((response) => {
48
- console.log(`Cache (${cacheId}) deleted successfully`, response.data);
49
- resolve(response.data); // Resolve with the response data
50
- })
51
- .catch((error) => {
52
- console.error("Error deleting cache:", error.response?.data || error.message || "Unknown error");
53
- reject(error); // Reject with the error
54
- });
55
- });
56
- }
57
-
58
- /**
59
- * list github actions caches
60
- * @param {string} GH_REPO
61
- * @returns {Promise<Record<string, Record<string, any>[]>>}
62
- */
63
- function get_caches(GH_REPO) {
64
- const url = `https://api.github.com/repos/${GH_REPO}/actions/caches`;
65
-
66
- return new Promise((resolve, reject) => {
67
- axios
68
- .get(url, {
69
- headers: {
70
- Accept: "application/vnd.github.v3+json",
71
- Authorization: `token ${ACCESS_TOKEN}`
72
- }
73
- })
74
- .then((response) => {
75
- /**
76
- * @type {Record<string, any>[]}
77
- */
78
- const data = response.data.actions_caches;
79
- // resolve(response.data);
80
- /**
81
- * extract the prefix from the key
82
- * @param {string} key
83
- * @returns
84
- */
85
- const getPrefix = (key) => {
86
- const split = key.split(/[-_]/);
87
- if (split.length == 3) {
88
- return `${split[0]}-${split[1]}`;
89
- } else if (split.length > 3) {
90
- return `${split[0]}-${split[1]}-${split[2]}`;
91
- }
92
- return split[0];
93
- };
94
-
95
- // Group by prefix
96
- const grouped = data.reduce(
97
- /**
98
- * @param {Record<string, Record<string, any>[]>} acc
99
- * @param {Record<string, any>} item
100
- * @returns {Record<string, Record<string, any>[]>}
101
- */
102
- (acc, item) => {
103
- const prefix = getPrefix(item.key);
104
-
105
- if (!acc[prefix]) {
106
- acc[prefix] = [];
107
- }
108
-
109
- acc[prefix].push(item);
110
-
111
- return acc;
112
- },
113
- {}
114
- );
115
-
116
- // Convert the grouped object into an array of arrays
117
- // const result = Object.values(grouped);
118
- resolve(grouped);
119
- })
120
- .catch((error) => {
121
- console.error("Error fetching data:", error);
122
- reject(error); // Reject the promise with the error
123
- });
124
- });
125
- }
126
-
127
- /**
128
- * Deletes old GitHub Actions caches for the current repository (origin remote),
129
- * keeping only the most recent cache for each prefix (based on creation date).
130
- * Retrieves caches, groups by prefix, sorts by creation date, and deletes all but the latest.
131
- */
132
- (async () => {
133
- try {
134
- const remotes = await parseGitRemotes();
135
- const GH_REPO = remotes.origin;
136
- const caches = await get_caches(GH_REPO);
137
-
138
- for (const key in caches) {
139
- if (Object.hasOwnProperty.call(caches, key)) {
140
- const items = caches[key]
141
- .sort((a, b) => new Date(b.created_at) - new Date(a.created_at))
142
- .map((item) => ({
143
- ...item,
144
- human_readable_date: new Date(item.created_at).toLocaleString()
145
- }));
146
-
147
- if (items.length > 1) {
148
- const ids = items.map((o) => o.id);
149
- ids.shift(); // keep the most recent cache
150
- if (ids.length > 0) {
151
- for (const id of ids) {
152
- try {
153
- await deleteGitHubActionsCache(GH_REPO, id);
154
- } catch (err) {
155
- console.error(`Error deleting cache ${id}:`, err);
156
- }
157
- }
158
- } else {
159
- console.log(`cache prefix ${key} no cache left`);
160
- }
161
- } else {
162
- console.log(`cache prefix ${key} only have 1 cache`);
163
- }
164
- }
165
- }
166
- } catch (e) {
167
- console.error(`Error: ${e}`);
168
- }
169
- })();
@@ -1,2 +0,0 @@
1
-
2
- export { }
@@ -1,2 +0,0 @@
1
-
2
- export { }
package/lib/del-ps.d.mts DELETED
@@ -1,2 +0,0 @@
1
-
2
- export { }
@@ -1,2 +0,0 @@
1
-
2
- export { }
@@ -1 +0,0 @@
1
- #!/usr/bin/env node
@@ -1,13 +0,0 @@
1
- /**
2
- * Asynchronously finds all "node_modules" directories within the given directory.
3
- *
4
- * @param {string} [dir=process.cwd()] - The directory to start the search from. Defaults to the current working directory.
5
- * @param {function} [callback=null] - Optional callback function that gets called with each found "node_modules" path.
6
- * @returns {Promise<string[]>} - A promise that resolves to an array of full paths to "node_modules" directories.
7
- */
8
- declare function findNodeModules(dir?: string, callback?: Function): Promise<string[]>;
9
- declare namespace findNodeModules {
10
- export { findNodeModules as default };
11
- }
12
-
13
- export { findNodeModules as default };
@@ -1,53 +0,0 @@
1
- const glob = require("glob");
2
- const path = require("path");
3
- /**
4
- * Asynchronously finds all "node_modules" directories within the given directory.
5
- *
6
- * @param {string} [dir=process.cwd()] - The directory to start the search from. Defaults to the current working directory.
7
- * @param {function} [callback=null] - Optional callback function that gets called with each found "node_modules" path.
8
- * @returns {Promise<string[]>} - A promise that resolves to an array of full paths to "node_modules" directories.
9
- */
10
- function findNodeModules(dir = process.cwd(), callback = null) {
11
- const finalDir = typeof dir === "string" ? dir : process.cwd();
12
- return new Promise((resolve, reject) => {
13
- const results = [];
14
- const g3 = new glob.Glob("**/node_modules", {
15
- withFileTypes: false,
16
- cwd: finalDir,
17
- ignore: ["**/.git*", "**/vendor/**"]
18
- });
19
- const stream = g3.stream();
20
- stream.on("data", (result) => {
21
- const fullPath = path.resolve(finalDir, result);
22
- if (typeof callback === "function") {
23
- try {
24
- callback(fullPath); // Safely invoke callback
25
- }
26
- catch (err) {
27
- console.error("findNodeModules callback error:", err);
28
- }
29
- }
30
- results.push(fullPath);
31
- });
32
- stream.on("error", (err) => reject(err)); // Handle errors
33
- stream.on("end", () => {
34
- if (results.length === 0) {
35
- console.log("No node_modules directories found.");
36
- }
37
- resolve(results); // Resolve the full array when the stream ends
38
- });
39
- });
40
- }
41
- // Support both CommonJS and ESM usage
42
- if (typeof module !== "undefined" && require.main === module) {
43
- findNodeModules(null, console.log)
44
- .then((dirs) => {
45
- console.log(`Found ${dirs.length} node_modules directories.`);
46
- })
47
- .catch((err) => {
48
- console.error("Error finding node_modules directories:", err);
49
- });
50
- }
51
- // ESM export support
52
- module.exports = findNodeModules;
53
- module.exports.default = findNodeModules;
@@ -1,35 +0,0 @@
1
- /**
2
- * Parse existing .gitattributes file into structured rules
3
- * @param {string} gitattributesPath - Path to .gitattributes file
4
- * @returns {Array} Array of parsed rules
5
- */
6
- declare function parseGitAttributes(gitattributesPath: string): any[];
7
- /**
8
- * Check if two patterns conflict (same or overlapping file patterns)
9
- * @param {string} pattern1 - First pattern
10
- * @param {string} pattern2 - Second pattern
11
- * @returns {boolean} True if patterns conflict
12
- */
13
- declare function patternsConflict(pattern1: string, pattern2: string): boolean;
14
- /**
15
- * Merge existing rules with desired rules, detecting conflicts
16
- * @param {Array} existingRules - Parsed existing rules
17
- * @param {Array} desiredRules - Desired rules to add
18
- * @returns {Object} Result with mergedRules, conflicts, and changes
19
- */
20
- declare function mergeGitAttributeRules(existingRules: any[], desiredRules: any[]): any;
21
- /**
22
- * Format merged rules back into .gitattributes content
23
- * @param {Array} rules - Merged rules array
24
- * @returns {string} Formatted .gitattributes content
25
- */
26
- declare function formatGitAttributes(rules: any[]): string;
27
- /**
28
- * Update .gitattributes file with new rules, handling conflicts intelligently
29
- * @param {string} gitattributesPath - Path to .gitattributes file
30
- * @param {Array} desiredRules - Array of desired rules to add/merge
31
- * @returns {Object} Result with success status, conflicts, and changes
32
- */
33
- declare function updateGitAttributes(gitattributesPath: string, desiredRules: any[]): any;
34
-
35
- export { formatGitAttributes, mergeGitAttributeRules, parseGitAttributes, patternsConflict, updateGitAttributes };
@@ -1,223 +0,0 @@
1
- const fs = require("fs");
2
- /**
3
- * Parse existing .gitattributes file into structured rules
4
- * @param {string} gitattributesPath - Path to .gitattributes file
5
- * @returns {Array} Array of parsed rules
6
- */
7
- function parseGitAttributes(gitattributesPath) {
8
- const rules = [];
9
- if (!fs.existsSync(gitattributesPath)) {
10
- return rules;
11
- }
12
- const content = fs.readFileSync(gitattributesPath, "utf8");
13
- const lines = content.split("\n");
14
- lines.forEach((line, index) => {
15
- const trimmedLine = line.trim();
16
- // Skip empty lines and comments
17
- if (!trimmedLine || trimmedLine.startsWith("#")) {
18
- rules.push({
19
- type: trimmedLine.startsWith("#") ? "comment" : "empty",
20
- content: line,
21
- lineNumber: index + 1
22
- });
23
- return;
24
- }
25
- // Parse rule line
26
- const parts = trimmedLine.split(/\s+/);
27
- if (parts.length >= 2) {
28
- const pattern = parts[0];
29
- const attributes = parts.slice(1).join(" ");
30
- rules.push({
31
- type: "rule",
32
- pattern,
33
- attributes,
34
- content: line,
35
- lineNumber: index + 1
36
- });
37
- }
38
- else {
39
- // Invalid line, keep as-is
40
- rules.push({
41
- type: "invalid",
42
- content: line,
43
- lineNumber: index + 1
44
- });
45
- }
46
- });
47
- return rules;
48
- }
49
- /**
50
- * Check if two patterns conflict (same or overlapping file patterns)
51
- * @param {string} pattern1 - First pattern
52
- * @param {string} pattern2 - Second pattern
53
- * @returns {boolean} True if patterns conflict
54
- */
55
- function patternsConflict(pattern1, pattern2) {
56
- // Exact match
57
- if (pattern1 === pattern2) {
58
- return true;
59
- }
60
- // Universal pattern conflicts with everything
61
- if (pattern1 === "*" || pattern2 === "*") {
62
- return pattern1 !== pattern2;
63
- }
64
- // Simple glob overlap detection
65
- const normalize = (p) => p.replace(/\{[^}]+\}/g, "*").replace(/\*+/g, "*");
66
- const norm1 = normalize(pattern1);
67
- const norm2 = normalize(pattern2);
68
- return norm1 === norm2;
69
- }
70
- /**
71
- * Merge existing rules with desired rules, detecting conflicts
72
- * @param {Array} existingRules - Parsed existing rules
73
- * @param {Array} desiredRules - Desired rules to add
74
- * @returns {Object} Result with mergedRules, conflicts, and changes
75
- */
76
- function mergeGitAttributeRules(existingRules, desiredRules) {
77
- let mergedRules;
78
- if (existingRules.length === 0) {
79
- // If no existing rules, just add all desired rules in order
80
- mergedRules = desiredRules.map((desired, idx) => ({
81
- type: "rule",
82
- pattern: desired.pattern,
83
- attributes: desired.attributes,
84
- content: `${desired.pattern} ${desired.attributes}`,
85
- lineNumber: idx + 1,
86
- added: true
87
- }));
88
- return {
89
- mergedRules,
90
- conflicts: [],
91
- changes: desiredRules.map((rule) => ({ action: "added", pattern: rule.pattern, attributes: rule.attributes }))
92
- };
93
- }
94
- else {
95
- mergedRules = [...existingRules];
96
- }
97
- const conflicts = [];
98
- const changes = [];
99
- desiredRules.forEach((desired) => {
100
- // Look for an exact pattern match in existing rules
101
- const existingIdx = mergedRules.findIndex((r) => r.type === "rule" && r.pattern === desired.pattern);
102
- if (existingIdx !== -1) {
103
- const existing = mergedRules[existingIdx];
104
- if (existing.attributes === desired.attributes) {
105
- // Already present, do nothing
106
- conflicts.push({
107
- pattern: desired.pattern,
108
- existing: existing.attributes,
109
- proposed: desired.attributes,
110
- action: "kept existing (identical)"
111
- });
112
- }
113
- else if (desired.priority > (existing.priority || 0)) {
114
- // Replace with higher priority rule
115
- mergedRules[existingIdx] = {
116
- type: "rule",
117
- pattern: desired.pattern,
118
- attributes: desired.attributes,
119
- content: `${desired.pattern} ${desired.attributes}`,
120
- lineNumber: existing.lineNumber,
121
- replaced: true
122
- };
123
- conflicts.push({
124
- pattern: desired.pattern,
125
- existing: existing.attributes,
126
- proposed: desired.attributes,
127
- action: "replaced (higher priority)"
128
- });
129
- changes.push({
130
- action: "replaced",
131
- pattern: desired.pattern,
132
- attributes: desired.attributes,
133
- oldAttributes: existing.attributes
134
- });
135
- }
136
- else {
137
- // Keep existing rule
138
- conflicts.push({
139
- pattern: desired.pattern,
140
- existing: existing.attributes,
141
- proposed: desired.attributes,
142
- action: "kept existing (lower priority)"
143
- });
144
- }
145
- }
146
- else {
147
- // No exact pattern match, add new rule
148
- mergedRules.push({
149
- type: "rule",
150
- pattern: desired.pattern,
151
- attributes: desired.attributes,
152
- content: `${desired.pattern} ${desired.attributes}`,
153
- lineNumber: mergedRules.length + 1,
154
- added: true
155
- });
156
- changes.push({
157
- action: "added",
158
- pattern: desired.pattern,
159
- attributes: desired.attributes
160
- });
161
- }
162
- });
163
- return { mergedRules, conflicts, changes };
164
- }
165
- /**
166
- * Format merged rules back into .gitattributes content
167
- * @param {Array} rules - Merged rules array
168
- * @returns {string} Formatted .gitattributes content
169
- */
170
- function formatGitAttributes(rules) {
171
- return (rules
172
- .map((rule) => {
173
- if (rule.type === "rule") {
174
- return `${rule.pattern} ${rule.attributes}`;
175
- }
176
- return rule.content;
177
- })
178
- .join("\n") + "\n");
179
- }
180
- /**
181
- * Update .gitattributes file with new rules, handling conflicts intelligently
182
- * @param {string} gitattributesPath - Path to .gitattributes file
183
- * @param {Array} desiredRules - Array of desired rules to add/merge
184
- * @returns {Object} Result with success status, conflicts, and changes
185
- */
186
- function updateGitAttributes(gitattributesPath, desiredRules) {
187
- try {
188
- // Parse existing .gitattributes
189
- const existingRules = parseGitAttributes(gitattributesPath);
190
- // Merge rules and detect conflicts
191
- const { mergedRules, conflicts, changes } = mergeGitAttributeRules(existingRules, desiredRules);
192
- // Write updated .gitattributes if changes were made
193
- let success = false;
194
- if (changes.length > 0) {
195
- const newContent = formatGitAttributes(mergedRules);
196
- fs.writeFileSync(gitattributesPath, newContent);
197
- success = true;
198
- }
199
- return {
200
- success,
201
- conflicts,
202
- changes,
203
- message: success
204
- ? `Updated .gitattributes with ${changes.length} changes`
205
- : "No changes needed - all rules already present"
206
- };
207
- }
208
- catch (error) {
209
- return {
210
- success: false,
211
- error: error.message,
212
- conflicts: [],
213
- changes: []
214
- };
215
- }
216
- }
217
- module.exports = {
218
- parseGitAttributes,
219
- patternsConflict,
220
- mergeGitAttributeRules,
221
- formatGitAttributes,
222
- updateGitAttributes
223
- };