binary-collections 2.0.10 → 2.0.12

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 (290) hide show
  1. package/.opencode/package.json +5 -0
  2. package/.puppeterrc.cjs +25 -0
  3. package/binaries/binary-executor.cjs +138 -3
  4. package/binaries/clean-nodemodule.cjs +138 -3
  5. package/binaries/clean-nodemodules.cjs +138 -3
  6. package/binaries/dev.cjs +138 -3
  7. package/binaries/empty.cjs +138 -3
  8. package/binaries/git-reduce-size.cjs +138 -3
  9. package/binaries/javakill.cjs +138 -3
  10. package/binaries/kill-night-crows.bat +7 -0
  11. package/binaries/kill-night-crows.ps1 +172 -0
  12. package/binaries/kill-process.cjs +138 -3
  13. package/binaries/nodekill.cjs +138 -3
  14. package/binaries/prod.cjs +138 -3
  15. package/binaries/py +111 -0
  16. package/binaries/py.cjs +178 -0
  17. package/binaries/py.cmd +49 -0
  18. package/binaries/rmfind.cjs +138 -3
  19. package/binaries/rmx +15 -1
  20. package/binaries/rmx.cjs +138 -3
  21. package/binaries/rmx.cmd +12 -0
  22. package/binaries/submodule-token.cjs +138 -3
  23. package/binaries/test-cjs +18 -0
  24. package/binaries/test-cjs.cjs +178 -0
  25. package/binaries/test-cjs.cmd +26 -0
  26. package/binaries/test-esm +16 -0
  27. package/binaries/test-esm.cjs +178 -0
  28. package/binaries/test-esm.cmd +23 -0
  29. package/binaries/yarn-clean +32 -0
  30. package/binaries/yarn-clean.cjs +178 -0
  31. package/binaries/yarn-clean.cmd +30 -0
  32. package/binaries/yarn-clean.py +166 -0
  33. package/binaries/yc +110 -0
  34. package/binaries/yc.cjs +178 -0
  35. package/lib/binary-collections/config.cjs +126 -0
  36. package/lib/binary-collections/config.mjs +7 -0
  37. package/lib/binary-collections/executeScript.cjs +19 -0
  38. package/lib/binary-collections/executeScript.d.cts +12 -0
  39. package/lib/binary-collections/executeScript.mjs +6 -0
  40. package/lib/binary-collections/findScript.cjs +284 -0
  41. package/lib/binary-collections/findScript.d.cts +12 -0
  42. package/lib/binary-collections/findScript.mjs +7 -0
  43. package/lib/binary-collections/listScript.cjs +266 -0
  44. package/lib/binary-collections/listScript.d.cts +19 -0
  45. package/lib/binary-collections/listScript.mjs +7 -0
  46. package/lib/binary-collections.cjs +342 -194
  47. package/lib/binary-collections.mjs +22 -268
  48. package/lib/changelog.cjs +61 -13
  49. package/lib/changelog.mjs +1 -1
  50. package/lib/{chunk-E6FDDAOO.mjs → chunk-2LSRSEXF.mjs} +2 -2
  51. package/lib/chunk-34IQDTLZ.mjs +27 -0
  52. package/lib/chunk-3HFFECCI.mjs +27 -0
  53. package/lib/{chunk-V3N3JEUF.mjs → chunk-5RTXZVCW.mjs} +60 -13
  54. package/lib/chunk-66KDU4TX.mjs +268 -0
  55. package/lib/chunk-6PU7BAHB.mjs +61 -0
  56. package/lib/{chunk-6HHJRKFB.mjs → chunk-BZWVHODJ.mjs} +4 -1
  57. package/lib/chunk-C6D2TTYU.mjs +32 -0
  58. package/lib/chunk-FB2WKVJD.mjs +158 -0
  59. package/lib/{chunk-66PAU5PS.mjs → chunk-G5UUEWUO.mjs} +9 -5
  60. package/lib/{chunk-HO6GHCOB.mjs → chunk-GAGABICI.mjs} +198 -63
  61. package/lib/chunk-H44UWUFY.mjs +105 -0
  62. package/lib/chunk-NCZPTKDV.mjs +79 -0
  63. package/lib/chunk-NGFK3EYW.mjs +28 -0
  64. package/lib/chunk-NVEG3LEZ.mjs +143 -0
  65. package/lib/chunk-OGXVGBRI.mjs +29 -0
  66. package/lib/chunk-OXV52GD5.mjs +62 -0
  67. package/lib/{chunk-PDSXF5HY.mjs → chunk-PDN26I7O.mjs} +1 -0
  68. package/lib/chunk-PXBMHE7O.mjs +35 -0
  69. package/lib/chunk-R5FJOR63.mjs +47 -0
  70. package/lib/chunk-SPTECFE5.mjs +180 -0
  71. package/lib/chunk-UXCFNAR6.mjs +55 -0
  72. package/lib/chunk-V2IBPCEV.mjs +39 -0
  73. package/lib/chunk-XPJGCDOD.mjs +14 -0
  74. package/lib/{chunk-AI4CVPJ7.mjs → chunk-ZDMWBSYF.mjs} +4 -4
  75. package/lib/chunk-ZOWVMII3.mjs +228 -0
  76. package/lib/clean-github-actions-caches-cli.cjs +465 -0
  77. package/lib/clean-github-actions-caches-cli.d.cts +1 -0
  78. package/lib/clean-github-actions-caches-cli.mjs +56 -0
  79. package/lib/clean-github-actions-caches.cjs +152 -160
  80. package/lib/clean-github-actions-caches.d.cts +15 -1
  81. package/lib/clean-github-actions-caches.mjs +4 -130
  82. package/lib/cross-env/command.cjs +63 -0
  83. package/lib/cross-env/command.d.ts +8 -0
  84. package/lib/cross-env/command.js +45 -0
  85. package/lib/cross-env/command.mjs +9 -0
  86. package/lib/cross-env/index.cjs +178 -0
  87. package/lib/cross-env/index.d.ts +8 -0
  88. package/lib/cross-env/index.js +102 -0
  89. package/lib/cross-env/index.mjs +101 -0
  90. package/lib/cross-env/variable.cjs +60 -0
  91. package/lib/cross-env/variable.d.ts +7 -0
  92. package/lib/cross-env/variable.js +59 -0
  93. package/lib/cross-env/variable.mjs +9 -0
  94. package/lib/del-gradle.cjs +61 -13
  95. package/lib/del-gradle.js +9 -8
  96. package/lib/del-gradle.mjs +1 -1
  97. package/lib/del-node-modules.cjs +143 -148
  98. package/lib/del-node-modules.js +210 -14
  99. package/lib/del-node-modules.mjs +148 -17
  100. package/lib/del-ps.cjs +61 -13
  101. package/lib/del-ps.js +9 -8
  102. package/lib/del-ps.mjs +1 -1
  103. package/lib/del-yarn-caches.cjs +61 -13
  104. package/lib/del-yarn-caches.js +2 -2
  105. package/lib/del-yarn-caches.mjs +1 -1
  106. package/lib/file/copy-cli.cjs +92 -0
  107. package/lib/file/copy-cli.d.mts +1 -0
  108. package/lib/file/copy-cli.mjs +55 -0
  109. package/lib/file/copy.cjs +56 -0
  110. package/lib/file/copy.d.mts +1 -0
  111. package/lib/file/copy.mjs +8 -0
  112. package/lib/file/move-cli.cjs +91 -0
  113. package/lib/file/move-cli.d.mts +1 -0
  114. package/lib/file/move-cli.mjs +55 -0
  115. package/lib/file/move.cjs +55 -0
  116. package/lib/file/move.d.mts +1 -0
  117. package/lib/file/move.mjs +8 -0
  118. package/lib/find-node-modules-cli.js +2 -1
  119. package/lib/free-chatgpt.cjs +259 -47
  120. package/lib/free-chatgpt.js +10 -10
  121. package/lib/free-chatgpt.mjs +2 -2
  122. package/lib/git/gitattributes.cjs +1 -0
  123. package/lib/git/gitattributes.d.cts +7 -2
  124. package/lib/git/gitattributes.mjs +1 -1
  125. package/lib/git/line-endings.cjs +2 -1
  126. package/lib/git/line-endings.mjs +2 -2
  127. package/lib/git/undo-commit-cli.cjs +110 -0
  128. package/lib/git/undo-commit-cli.d.ts +1 -0
  129. package/lib/git/undo-commit-cli.js +4 -0
  130. package/lib/git/undo-commit-cli.mjs +14 -0
  131. package/lib/git/undo-commit.cjs +81 -0
  132. package/lib/git/undo-commit.d.cts +1 -0
  133. package/lib/git/undo-commit.mjs +7 -0
  134. package/lib/git/undo-staged-cli.cjs +110 -0
  135. package/lib/git/undo-staged-cli.d.ts +1 -0
  136. package/lib/git/undo-staged-cli.js +4 -0
  137. package/lib/git/undo-staged-cli.mjs +14 -0
  138. package/lib/git/undo-staged.cjs +81 -0
  139. package/lib/git/undo-staged.d.cts +1 -0
  140. package/lib/git/undo-staged.mjs +7 -0
  141. package/lib/git/user-config.cjs +61 -14
  142. package/lib/git/user-config.mjs +2 -2
  143. package/lib/git-diff-cli.cjs +427 -75
  144. package/lib/git-diff-cli.d.ts +1 -0
  145. package/lib/git-diff-cli.js +1 -0
  146. package/lib/git-diff-cli.mjs +6 -4
  147. package/lib/git-diff.cjs +426 -75
  148. package/lib/git-diff.d.ts +2 -1
  149. package/lib/git-diff.js +91 -34
  150. package/lib/git-diff.mjs +5 -4
  151. package/lib/git-fix.cjs +64 -16
  152. package/lib/git-fix.mjs +10 -10
  153. package/lib/git-purge.cjs +61 -13
  154. package/lib/git-purge.mjs +1 -1
  155. package/lib/index.d.ts +1 -1
  156. package/lib/kill-night-crows.cjs +87 -0
  157. package/lib/kill-night-crows.d.mts +1 -0
  158. package/lib/kill-night-crows.mjs +65 -0
  159. package/lib/node-cache-cleaner/npm.cjs +65 -0
  160. package/lib/node-cache-cleaner/npm.d.ts +2 -0
  161. package/lib/node-cache-cleaner/npm.js +41 -0
  162. package/lib/node-cache-cleaner/npm.mjs +10 -0
  163. package/lib/node-cache-cleaner/npx.cjs +89 -0
  164. package/lib/node-cache-cleaner/npx.d.ts +4 -0
  165. package/lib/node-cache-cleaner/npx.js +82 -0
  166. package/lib/{ps/index.d.mjs → node-cache-cleaner/npx.mjs} +6 -5
  167. package/lib/node-cache-cleaner/yarn.cjs +73 -0
  168. package/lib/node-cache-cleaner/yarn.d.ts +2 -0
  169. package/lib/node-cache-cleaner/yarn.js +62 -0
  170. package/lib/node-cache-cleaner/yarn.mjs +10 -0
  171. package/lib/node-cache-cleaner-cli.cjs +182 -0
  172. package/lib/node-cache-cleaner-cli.d.ts +2 -0
  173. package/lib/node-cache-cleaner-cli.js +60 -0
  174. package/lib/node-cache-cleaner-cli.mjs +56 -0
  175. package/lib/node-executor.cjs +91 -0
  176. package/lib/node-executor.d.cts +2 -0
  177. package/lib/node-executor.mjs +103 -0
  178. package/lib/npm-run-series.cjs +79 -39
  179. package/lib/npm-run-series.mjs +20 -6
  180. package/lib/package-resolutions-updater-cli.cjs +645 -0
  181. package/lib/package-resolutions-updater-cli.d.mts +1 -0
  182. package/lib/package-resolutions-updater-cli.mjs +102 -0
  183. package/lib/package-resolutions-updater.cjs +259 -133
  184. package/lib/package-resolutions-updater.d.mts +51 -1
  185. package/lib/package-resolutions-updater.mjs +18 -294
  186. package/lib/php-cs-fixer-staged.cjs +105 -0
  187. package/lib/php-cs-fixer-staged.d.cts +2 -0
  188. package/lib/php-cs-fixer-staged.mjs +117 -0
  189. package/lib/print-directory-tree.cjs +62 -14
  190. package/lib/print-directory-tree.mjs +2 -2
  191. package/lib/ps/connected-domain.d.ts +1 -1
  192. package/lib/ps/connected-domain.js +10 -10
  193. package/lib/ps/index.cjs +1 -1
  194. package/lib/ps/index.mjs +177 -171
  195. package/lib/ps/isWin.js +1 -1
  196. package/lib/ps/table-parser.js +6 -6
  197. package/lib/remove-module.cjs +61 -13
  198. package/lib/remove-module.mjs +1 -1
  199. package/lib/rm-node-module-cli.cjs +222 -0
  200. package/lib/rm-node-module-cli.d.cts +1 -0
  201. package/lib/rm-node-module-cli.mjs +89 -0
  202. package/lib/rm-node-modules.cjs +127 -0
  203. package/lib/rm-node-modules.d.cts +35 -0
  204. package/lib/{binary-collections-config.mjs → rm-node-modules.mjs} +3 -3
  205. package/lib/rmpath.cjs +63 -15
  206. package/lib/rmpath.mjs +2 -2
  207. package/lib/submodule-install.cjs +107 -47
  208. package/lib/submodule-install.mjs +48 -35
  209. package/lib/submodule-remove-cli.cjs +6 -3
  210. package/lib/submodule-remove-cli.js +3 -3
  211. package/lib/submodule-remove-cli.mjs +2 -3
  212. package/lib/submodule-remove.cjs +4 -1
  213. package/lib/submodule-remove.mjs +1 -1
  214. package/lib/utils/chatgpt.cjs +198 -34
  215. package/lib/utils/chatgpt.js +260 -93
  216. package/lib/utils/chatgpt.mjs +1 -1
  217. package/lib/utils/findEnvFiles.cjs +89 -0
  218. package/lib/utils/findEnvFiles.d.cts +19 -0
  219. package/lib/utils/findEnvFiles.mjs +6 -0
  220. package/lib/utils/findWorkspaceRoot.cjs +70 -0
  221. package/lib/utils/findWorkspaceRoot.d.ts +9 -0
  222. package/lib/utils/findWorkspaceRoot.js +57 -0
  223. package/lib/utils/findWorkspaceRoot.mjs +40 -0
  224. package/lib/utils/index.cjs +60 -13
  225. package/lib/utils/index.mjs +1 -1
  226. package/lib/utils/isGithubTokenValid.cjs +64 -0
  227. package/lib/utils/isGithubTokenValid.d.ts +7 -0
  228. package/lib/utils/isGithubTokenValid.js +48 -0
  229. package/lib/utils/isGithubTokenValid.mjs +36 -0
  230. package/lib/{ps/index.d.cjs → utils/isWindows.cjs} +17 -3
  231. package/lib/utils/isWindows.d.ts +5 -0
  232. package/lib/utils/isWindows.js +10 -0
  233. package/lib/utils/isWindows.mjs +8 -0
  234. package/lib/utils/runBash.cjs +53 -0
  235. package/lib/utils/runBash.d.cts +12 -0
  236. package/lib/utils/runBash.mjs +66 -0
  237. package/lib/yarn-per-branch-lock-installer.cjs +97 -0
  238. package/lib/yarn-per-branch-lock-installer.d.cts +2 -0
  239. package/lib/yarn-per-branch-lock-installer.mjs +109 -0
  240. package/lib/yarn-reinstall.cjs +61 -13
  241. package/lib/yarn-reinstall.mjs +1 -1
  242. package/package.json +133 -110
  243. package/readme.html +784 -0
  244. package/readme.md +116 -229
  245. package/releases/readme.md +1 -1
  246. package/requirements.txt +1 -0
  247. package/test/README.md +2 -2
  248. package/test-project/package.json +8 -2
  249. package/test-project/workspaces/workspace-a/package.json +135 -0
  250. package/test-project/workspaces/workspace-a/readme.md +20 -0
  251. package/test-project/workspaces/workspace-a/release/readme.md +42 -0
  252. package/test-project/workspaces/workspace-a/test/demo/package.json +25 -0
  253. package/test-project/workspaces/workspace-a/test/readme.md +12 -0
  254. package/test-project/workspaces/workspace-b/package.json +139 -0
  255. package/test-project/workspaces/workspace-b/readme.md +94 -0
  256. package/test-project/workspaces/workspace-b/requirements.txt +1 -0
  257. package/test-project/workspaces/workspace-b/test/sample-project/package.json +7 -0
  258. package/test-project/workspaces/workspace-b/themes/hexo-theme-flowbite/package.json +96 -0
  259. package/test-project/workspaces/workspace-b/themes/hexo-theme-flowbite/readme.md +156 -0
  260. package/tmp/rm-node-modules-test-project/package.json +17 -0
  261. package/tmp/rm-node-modules-test-project/packages/workspace-a/package.json +16 -0
  262. package/tmp/rm-node-modules-test-project/packages/workspace-b/package.json +16 -0
  263. package/tmp/test-repo/README.md +2 -35
  264. package/tmp/test-repo/package.json +13 -3
  265. package/docs-src/clean-github-actions-caches.md +0 -26
  266. package/docs-src/free-chatgpt.md +0 -26
  267. package/lib/binary-collections-config.cjs +0 -15
  268. package/lib/chunk-4EWQC6GZ.mjs +0 -382
  269. package/lib/chunk-4ZI7BQKQ.mjs +0 -381
  270. package/lib/chunk-5J2BEPY5.mjs +0 -83
  271. package/lib/chunk-AGZYRDC2.mjs +0 -323
  272. package/lib/chunk-BDCHCWHD.mjs +0 -136
  273. package/lib/chunk-BEZKJ25G.mjs +0 -140
  274. package/lib/chunk-DI5MDPSN.mjs +0 -386
  275. package/lib/chunk-GJTGHXRA.mjs +0 -356
  276. package/lib/chunk-HMRMTYZM.mjs +0 -40
  277. package/lib/chunk-HN52G2YL.mjs +0 -305
  278. package/lib/chunk-LEM5OMRP.mjs +0 -384
  279. package/lib/chunk-O6SWBEOQ.mjs +0 -81
  280. package/lib/chunk-RCP7DHVY.mjs +0 -190
  281. package/lib/chunk-SBNDSKG5.mjs +0 -136
  282. package/lib/chunk-U6SO4QEV.mjs +0 -320
  283. package/lib/chunk-XD6BJK6Q.mjs +0 -351
  284. package/lib/chunk-YXSFGA2D.mjs +0 -383
  285. package/lib/git/gitattributes.d.ts +0 -33
  286. package/lib/git/gitattributes.js +0 -223
  287. package/lib/ps/index.d.ts +0 -2
  288. package/lib/ps/index.js +0 -253
  289. package/tmp/typedoc/readme.md +0 -320
  290. /package/lib/{binary-collections-config.d.cts → binary-collections/config.d.cts} +0 -0
package/readme.html ADDED
@@ -0,0 +1,784 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Binary Collections - Documentation</title>
7
+ <style>
8
+ /* CSS Variables for Theming */
9
+ :root {
10
+ --bg-body: #0d1117;
11
+ --bg-card: #161b22;
12
+ --bg-border: #30363d;
13
+ --text-main: #c9d1d9;
14
+ --text-muted: #8b949e;
15
+ --accent-primary: #58a6ff;
16
+ --accent-secondary: #238636;
17
+ --accent-danger: #da3633;
18
+ --code-bg: #000000;
19
+ --font-main: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
20
+ --font-mono: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
21
+ }
22
+
23
+ /* Reset & Base Styles */
24
+ * { box-sizing: border-box; margin: 0; padding: 0; }
25
+
26
+ body {
27
+ font-family: var(--font-main);
28
+ background-color: var(--bg-body);
29
+ color: var(--text-main);
30
+ line-height: 1.6;
31
+ -webkit-font-smoothing: antialiased;
32
+ }
33
+
34
+ a { color: var(--accent-primary); text-decoration: none; }
35
+ a:hover { text-decoration: underline; }
36
+
37
+ /* Layout */
38
+ .container {
39
+ max-width: 1200px;
40
+ margin: 0 auto;
41
+ padding: 0 20px;
42
+ }
43
+
44
+ /* Header */
45
+ header {
46
+ background-color: var(--bg-card);
47
+ border-bottom: 1px solid var(--bg-border);
48
+ padding: 2rem 0;
49
+ margin-bottom: 2rem;
50
+ position: sticky;
51
+ top: 0;
52
+ z-index: 100;
53
+ }
54
+
55
+ .header-content {
56
+ display: flex;
57
+ justify-content: space-between;
58
+ align-items: center;
59
+ }
60
+
61
+ h1 {
62
+ font-size: 1.8rem;
63
+ font-weight: 700;
64
+ color: #fff;
65
+ display: flex;
66
+ align-items: center;
67
+ gap: 10px;
68
+ }
69
+
70
+ .badge {
71
+ font-size: 0.8rem;
72
+ background: var(--bg-border);
73
+ padding: 2px 8px;
74
+ border-radius: 12px;
75
+ color: var(--text-muted);
76
+ font-weight: normal;
77
+ }
78
+
79
+ .btn-download {
80
+ background-color: var(--accent-secondary);
81
+ color: white;
82
+ border: none;
83
+ padding: 10px 20px;
84
+ border-radius: 6px;
85
+ font-weight: 600;
86
+ cursor: pointer;
87
+ display: flex;
88
+ align-items: center;
89
+ gap: 8px;
90
+ transition: background 0.2s;
91
+ }
92
+
93
+ .btn-download:hover { background-color: #2ea043; text-decoration: none; }
94
+
95
+ /* Content Grid */
96
+ .showcase-layout {
97
+ display: grid;
98
+ grid-template-columns: 250px 1fr;
99
+ gap: 2rem;
100
+ padding-bottom: 4rem;
101
+ }
102
+
103
+ /* Sidebar Navigation */
104
+ .sidebar {
105
+ position: sticky;
106
+ top: 100px;
107
+ height: fit-content;
108
+ }
109
+
110
+ .nav-title {
111
+ font-size: 0.9rem;
112
+ text-transform: uppercase;
113
+ letter-spacing: 1px;
114
+ color: var(--text-muted);
115
+ margin-bottom: 1rem;
116
+ font-weight: 600;
117
+ }
118
+
119
+ .nav-links { list-style: none; }
120
+ .nav-links li { margin-bottom: 0.5rem; }
121
+ .nav-links a {
122
+ color: var(--text-muted);
123
+ font-size: 0.95rem;
124
+ display: block;
125
+ padding: 4px 0;
126
+ transition: color 0.2s;
127
+ }
128
+ .nav-links a:hover, .nav-links a.active {
129
+ color: var(--accent-primary);
130
+ }
131
+
132
+ /* Main Content Area */
133
+ .content {
134
+ font-size: 1.05rem;
135
+ }
136
+
137
+ /* Typography & Components */
138
+ h2 {
139
+ font-size: 1.5rem;
140
+ border-bottom: 1px solid var(--bg-border);
141
+ padding-bottom: 0.5rem;
142
+ margin-top: 2.5rem;
143
+ margin-bottom: 1.5rem;
144
+ color: #fff;
145
+ }
146
+
147
+ h3 {
148
+ font-size: 1.25rem;
149
+ margin-top: 2rem;
150
+ margin-bottom: 1rem;
151
+ color: #e6edf3;
152
+ }
153
+
154
+ p { margin-bottom: 1rem; }
155
+
156
+ ul, ol { margin-bottom: 1rem; padding-left: 2rem; }
157
+ li { margin-bottom: 0.5rem; }
158
+
159
+ /* Feature Grid */
160
+ .feature-grid {
161
+ display: grid;
162
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
163
+ gap: 1rem;
164
+ margin-bottom: 2rem;
165
+ }
166
+
167
+ .feature-card {
168
+ background: var(--bg-card);
169
+ border: 1px solid var(--bg-border);
170
+ padding: 1.5rem;
171
+ border-radius: 6px;
172
+ }
173
+
174
+ .feature-icon { font-size: 2rem; margin-bottom: 0.5rem; display: block; }
175
+ .feature-title { font-weight: 600; color: #fff; margin-bottom: 0.25rem; display: block; }
176
+ .feature-desc { font-size: 0.9rem; color: var(--text-muted); }
177
+
178
+ /* Code Blocks */
179
+ pre {
180
+ background: var(--code-bg);
181
+ padding: 1.2rem;
182
+ border-radius: 6px;
183
+ overflow-x: auto;
184
+ margin-bottom: 1.5rem;
185
+ border: 1px solid var(--bg-border);
186
+ position: relative;
187
+ }
188
+
189
+ code {
190
+ font-family: var(--font-mono);
191
+ font-size: 0.9em;
192
+ }
193
+
194
+ /* Inline Code */
195
+ p code, li code {
196
+ background: rgba(110, 118, 129, 0.4);
197
+ padding: 0.2em 0.4em;
198
+ border-radius: 4px;
199
+ font-size: 85%;
200
+ }
201
+
202
+ /* Tables */
203
+ table {
204
+ width: 100%;
205
+ border-collapse: collapse;
206
+ margin-bottom: 1.5rem;
207
+ display: block;
208
+ overflow-x: auto;
209
+ white-space: nowrap;
210
+ }
211
+
212
+ th, td {
213
+ padding: 12px 16px;
214
+ border: 1px solid var(--bg-border);
215
+ text-align: left;
216
+ }
217
+
218
+ th {
219
+ background: var(--bg-card);
220
+ font-weight: 600;
221
+ color: #fff;
222
+ }
223
+
224
+ tr:nth-child(even) { background: rgba(110, 118, 129, 0.04); }
225
+
226
+ /* Images */
227
+ img {
228
+ max-width: 100%;
229
+ border-radius: 6px;
230
+ border: 1px solid var(--bg-border);
231
+ margin: 1rem 0;
232
+ }
233
+
234
+ /* Alerts/Callouts */
235
+ .callout {
236
+ padding: 1rem;
237
+ border-left: 4px solid var(--accent-primary);
238
+ background: rgba(88, 166, 255, 0.1);
239
+ border-radius: 4px;
240
+ margin-bottom: 1.5rem;
241
+ }
242
+ .callout-title { font-weight: 700; color: var(--accent-primary); display: block; margin-bottom: 0.5rem;}
243
+
244
+ /* Responsive */
245
+ @media (max-width: 768px) {
246
+ .showcase-layout { grid-template-columns: 1fr; }
247
+ .sidebar { display: none; } /* Hide sidebar on mobile for simplicity */
248
+ .header-content { flex-direction: column; gap: 1rem; text-align: center; }
249
+ }
250
+ </style>
251
+ </head>
252
+ <body>
253
+
254
+ <!-- Header -->
255
+ <header>
256
+ <div class="container header-content">
257
+ <div>
258
+ <h1>Binary Collections <span class="badge">v1.0.0</span></h1>
259
+ <p style="color: var(--text-muted);">A comprehensive toolkit of Node.js CLI utilities.</p>
260
+ </div>
261
+ <button class="btn-download" onclick="downloadReadme()">
262
+ <svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
263
+ <path d="M8 12l-4-4h2.5V3h3v5H12L8 12zm0 2.5c-3.037 0-5.5-2.463-5.5-5.5S4.963 3.5 8 3.5 13.5 5.963 13.5 9 11.037 14.5 8 14.5z"/>
264
+ </svg>
265
+ Download README.md
266
+ </button>
267
+ </div>
268
+ </header>
269
+
270
+ <div class="container showcase-layout">
271
+ <!-- Sidebar Navigation -->
272
+ <aside class="sidebar">
273
+ <div class="nav-title">Overview</div>
274
+ <ul class="nav-links">
275
+ <li><a href="#features">Features</a></li>
276
+ <li><a href="#installation">Installation</a></li>
277
+ <li><a href="#vscode">VSCode Setup</a></li>
278
+ <li><a href="#tools">Available Tools</a></li>
279
+ <li><a href="#git-tools">Git Tools</a></li>
280
+ <li><a href="#npm-tools">NPM Scripts</a></li>
281
+ <li><a href="#pkg-tools">Package Management</a></li>
282
+ <li><a href="#cleanup">Cleanup Tools</a></li>
283
+ <li><a href="#troubleshooting">Troubleshooting</a></li>
284
+ <li><a href="#contributing">Contributing</a></li>
285
+ </ul>
286
+ </aside>
287
+
288
+ <!-- Main Content -->
289
+ <main class="content">
290
+
291
+ <section id="features">
292
+ <h2>Features</h2>
293
+ <div class="feature-grid">
294
+ <div class="feature-card">
295
+ <span class="feature-icon">🧹</span>
296
+ <span class="feature-title">Cleanup Tools</span>
297
+ <span class="feature-desc">Remove node_modules, yarn caches, gradle builds.</span>
298
+ </div>
299
+ <div class="feature-card">
300
+ <span class="feature-icon">🔄</span>
301
+ <span class="feature-title">Git Utilities</span>
302
+ <span class="feature-desc">Submodule management, repo purging, and diffs.</span>
303
+ </div>
304
+ <div class="feature-card">
305
+ <span class="feature-icon">📦</span>
306
+ <span class="feature-title">Build Tools</span>
307
+ <span class="feature-desc">NPM script runners and package management.</span>
308
+ </div>
309
+ <div class="feature-card">
310
+ <span class="feature-icon">⚡</span>
311
+ <span class="feature-title">Dev Helpers</span>
312
+ <span class="feature-desc">Process management and environment setup.</span>
313
+ </div>
314
+ </div>
315
+ </section>
316
+
317
+ <section id="installation">
318
+ <h2>Installation</h2>
319
+
320
+ <h3>Clone Repository</h3>
321
+ <pre><code>git clone -b master https://github.com/dimaslanjaka/bin bin</code></pre>
322
+
323
+ <h3>NPM Installation</h3>
324
+ <pre><code># Install locally
325
+ npm install binary-collections
326
+
327
+ # Install globally
328
+ npm install binary-collections -g
329
+
330
+ # Install from release archive
331
+ npm install binary-collections@https://github.com/dimaslanjaka/bin/raw/master/releases/bin.tgz</code></pre>
332
+
333
+ <h3>Direct Run (No Install)</h3>
334
+ <pre><code># Yarn berry
335
+ yarn dlx binary-collections@https://raw.githubusercontent.com/dimaslanjaka/bin/master/releases/bin.tgz <command-name>
336
+
337
+ # NPX
338
+ npx -y binary-collections@https://raw.githubusercontent.com/dimaslanjaka/bin/master/releases/bin.tgz <command-name></code></pre>
339
+ </section>
340
+
341
+ <section id="vscode">
342
+ <h2>VSCode Setup</h2>
343
+ <p>Create or update <code>.vscode/settings.json</code> to add binary tools to your integrated terminal PATH:</p>
344
+ <pre><code>{
345
+ "terminal.integrated.env.linux": {
346
+ "PATH": "${env:PATH}:${workspaceFolder}/node_modules/.bin:${workspaceFolder}/bin"
347
+ },
348
+ "terminal.integrated.env.windows": {
349
+ "PATH": "${env:PATH};${workspaceFolder}\\node_modules\\.bin;${workspaceFolder}\\bin"
350
+ }
351
+ // ... other settings
352
+ }</code></pre>
353
+ </section>
354
+
355
+ <section id="tools">
356
+ <h2>Available Tools</h2>
357
+ <p>To list all available executable tools, run:</p>
358
+ <pre><code>binary-collections list</code></pre>
359
+
360
+ <h3>Quick Reference</h3>
361
+ <table>
362
+ <thead>
363
+ <tr>
364
+ <th>Category</th>
365
+ <th>Commands</th>
366
+ <th>Description</th>
367
+ </tr>
368
+ </thead>
369
+ <tbody>
370
+ <tr>
371
+ <td><strong>Git</strong></td>
372
+ <td><code>git-purge</code>, <code>git-diff</code>, <code>git-fix</code>, <code>git-reduce-size</code></td>
373
+ <td>Git repository management and optimization</td>
374
+ </tr>
375
+ <tr>
376
+ <td><strong>Submodules</strong></td>
377
+ <td><code>submodule-install</code>, <code>submodule-remove</code></td>
378
+ <td>Git submodule operations</td>
379
+ </tr>
380
+ <tr>
381
+ <td><strong>NPM Scripts</strong></td>
382
+ <td><code>nrs</code>, <code>run-s</code>, <code>run-series</code></td>
383
+ <td>Run npm scripts in series</td>
384
+ </tr>
385
+ <tr>
386
+ <td><strong>Package Mgmt</strong></td>
387
+ <td><code>yarn-reinstall</code>, <code>pkg-res-updater</code></td>
388
+ <td>Yarn/package resolutions management</td>
389
+ </tr>
390
+ <tr>
391
+ <td><strong>Process Mgmt</strong></td>
392
+ <td><code>kill-process</code>, <code>nodekill</code>, <code>javakill</code></td>
393
+ <td>Process management and termination</td>
394
+ </tr>
395
+ <tr>
396
+ <td><strong>Cleanup</strong></td>
397
+ <td><code>del-nodemodules</code>, <code>del-yarncaches</code>, <code>del-gradle</code></td>
398
+ <td>Cache and build directory cleanup</td>
399
+ </tr>
400
+ <tr>
401
+ <td><strong>GitHub Actions</strong></td>
402
+ <td><code>clear-gh-caches</code></td>
403
+ <td>Remove old GitHub Actions caches</td>
404
+ </tr>
405
+ </tbody>
406
+ </table>
407
+ </section>
408
+
409
+ <section id="git-tools">
410
+ <h2>Git Tools</h2>
411
+
412
+ <h3>Git Repository Purge</h3>
413
+ <p>Cleans and optimizes Git repositories by pruning reflogs.</p>
414
+ <pre><code>git-purge</code></pre>
415
+ <img src="https://github.com/dimaslanjaka/bin/assets/12471057/2805c54e-28a7-491d-b381-de2593a854b3" alt="Git purge screenshot" style="max-height: 300px;">
416
+
417
+ <h3>Git Fix Utility</h3>
418
+ <p>Comprehensive Git configuration fixer for cross-platform development.</p>
419
+ <div class="callout">
420
+ <span class="callout-title">Note</span>
421
+ This tool is non-interactive. All configuration is argument-driven.
422
+ </div>
423
+ <pre><code>git-fix # Apply all fixes
424
+ git-fix --lf-only # Force LF line endings only
425
+ git-fix --permissions # Ignore file permissions only
426
+ git-fix --user # Configure Git user from environment vars
427
+ git-fix --user NAME EMAIL # Configure Git user with specific values
428
+ git-fix --user --update-remote # Configure user and update remote URL</code></pre>
429
+ <ul>
430
+ <li><strong>Line Endings:</strong> Forces LF (<code>core.autocrlf = false</code>)</li>
431
+ <li><strong>Permissions:</strong> Ignores file permission changes (<code>core.filemode = false</code>)</li>
432
+ <li><strong>Normalize:</strong> Creates/updates <code>.gitattributes</code> with proper rules</li>
433
+ <li><strong>User Config:</strong> Sets user from <code>GITHUB_USER</code> / <code>GITHUB_EMAIL</code> or CLI args</li>
434
+ </ul>
435
+
436
+ <h3>Submodule Management</h3>
437
+ <ul>
438
+ <li><code>submodule-install</code>: Install and setup submodules</li>
439
+ <li><code>submodule-remove</code>: Remove git submodules with interactive selection</li>
440
+ </ul>
441
+ </section>
442
+
443
+ <section id="npm-tools">
444
+ <h2>NPM Script Runner</h2>
445
+ <p><strong>Binaries:</strong> <code>nrs</code>, <code>run-s</code>, <code>run-series</code>, <code>npm-run-series</code></p>
446
+ <p>Run multiple npm scripts in series with pattern matching support.</p>
447
+
448
+ <table>
449
+ <thead>
450
+ <tr>
451
+ <th>Flag</th>
452
+ <th>Description</th>
453
+ </tr>
454
+ </thead>
455
+ <tbody>
456
+ <tr><td><code>--yarn</code></td><td>Use <code>yarn run</code> instead of npm</td></tr>
457
+ <tr><td><code>--verbose</code>, <code>-v</code></td><td>Enable verbose output</td></tr>
458
+ </tbody>
459
+ </table>
460
+
461
+ <h3>Example</h3>
462
+ <pre><code># In package.json
463
+ "scripts": {
464
+ "namescript:xx": "echo xx",
465
+ "namescript:xy": "echo xy",
466
+ "namescript": "nrs --yarn=true --verbose=true \"namescript:**\""
467
+ }</code></pre>
468
+ </section>
469
+
470
+ <section id="pkg-tools">
471
+ <h2>Package Management Tools</h2>
472
+
473
+ <h3>Yarn Package Reinstaller</h3>
474
+ <pre><code>yarn-reinstall <packageName> [--dev|-D|--peer|-P|--optional|-O]</code></pre>
475
+
476
+ <h3>Package Resolutions Manager</h3>
477
+ <p>Manage package resolutions in <code>package.json</code>. (Aliases: <code>pkg-resolutions-updater</code>, <code>pkg-res-updater</code>)</p>
478
+ <pre><code>pkg-resolutions-updater</code></pre>
479
+ </section>
480
+
481
+ <section id="cleanup">
482
+ <h2>Cleanup Tools</h2>
483
+
484
+ <h3>Node Modules Cleaner</h3>
485
+ <p>Remove <code>node_modules</code> directories recursively.</p>
486
+ <pre><code>del-nodemodules # Primary command
487
+ del-node-modules # Alternative</code></pre>
488
+
489
+ <h3>Yarn & Gradle Cleaners</h3>
490
+ <pre><code>del-yarncaches # Clear yarn cache directories
491
+ del-gradle # Delete gradle build folders</code></pre>
492
+
493
+ <h3>GitHub Actions Cache Cleaner</h3>
494
+ <p>Removes old GitHub Actions caches, keeping only the latest.</p>
495
+ <pre><code>clear-gh-caches</code></pre>
496
+ </section>
497
+
498
+ <section id="troubleshooting">
499
+ <h2>Troubleshooting</h2>
500
+
501
+ <h3>Submodule Installation Issues</h3>
502
+ <p>If you encounter this error:</p>
503
+ <pre><code>fatal: 'origin/<branch>' is not a commit and a branch '<branch>' cannot be created from it</code></pre>
504
+ <p><strong>Solution:</strong> Delete the <code>.git/modules</code> directory before running <code>submodule-install</code>.</p>
505
+
506
+ <h3>Complete Submodule Setup Example</h3>
507
+ <pre><code>echo "Initializing submodules..."
508
+ git submodule init
509
+ git submodule foreach "git submodule init"
510
+
511
+ echo "Syncing submodules..."
512
+ git submodule sync
513
+ git submodule foreach "git submodule sync"
514
+
515
+ echo "Updating submodules..."
516
+ npx --yes rimraf .git/modules
517
+ npx --yes binary-collections submodule-install</code></pre>
518
+ </section>
519
+
520
+ <section id="contributing">
521
+ <h2>Development & Contributing</h2>
522
+ <p>The list of available binaries is auto-generated by <code>build.mjs</code>. To update the binary list:</p>
523
+ <pre><code>yarn run build
524
+ # or
525
+ node build.mjs</code></pre>
526
+ <p>This scans the project and updates <code>package.json</code>. Contributions are welcome!</p>
527
+ </section>
528
+
529
+ <footer style="margin-top: 4rem; padding-top: 2rem; border-top: 1px solid var(--bg-border); color: var(--text-muted); font-size: 0.9rem;">
530
+ <p>Licensed under the terms specified in the LICENSE file.</p>
531
+ <p>&copy; Binary Collections Contributors.</p>
532
+ </footer>
533
+
534
+ </main>
535
+ </div>
536
+
537
+ <!-- Logic to generate and download the refined README.md -->
538
+ <script>
539
+ function downloadReadme() {
540
+ // This string contains the REFINED Markdown content
541
+ const markdownContent = `# Binary Collections
542
+
543
+ A comprehensive toolkit of Node.js CLI utilities for streamlining development workflows. Includes tools for git operations, dependency management, build processes, automation, and more.
544
+
545
+ ## Features
546
+
547
+ - 🧹 **Cleanup Tools**: Remove node_modules, yarn caches, gradle builds
548
+ - 🔄 **Git Utilities**: Submodule management, repository purging, diff tools
549
+ - 📦 **Build Tools**: NPM script runners, package management utilities
550
+ - ⚡ **Development Helpers**: Process management, environment setup tools
551
+
552
+ ## Installation
553
+
554
+ ### Clone Repository
555
+ \`\`\`bash
556
+ git clone -b master https://github.com/dimaslanjaka/bin bin
557
+ \`\`\`
558
+
559
+ ### NPM Installation
560
+ \`\`\`bash
561
+ # Install locally
562
+ npm install binary-collections
563
+
564
+ # Install globally
565
+ npm install binary-collections -g
566
+
567
+ # Install from release archive
568
+ npm install binary-collections@https://github.com/dimaslanjaka/bin/raw/master/releases/bin.tgz
569
+ \`\`\`
570
+
571
+ ### Direct Run
572
+ \`\`\`bash
573
+ # Yarn berry
574
+ yarn dlx binary-collections@https://raw.githubusercontent.com/dimaslanjaka/bin/master/releases/bin.tgz <command-name>
575
+
576
+ # NPX
577
+ npx -y binary-collections@https://raw.githubusercontent.com/dimaslanjaka/bin/master/releases/bin.tgz <command-name>
578
+ \`\`\`
579
+
580
+ ## VSCode Setup
581
+
582
+ Create \`.vscode/settings.json\` to add binary tools to your PATH:
583
+
584
+ \`\`\`jsonc
585
+ {
586
+ "terminal.integrated.env.linux": {
587
+ "PATH": "${env:PATH}:${workspaceFolder}/node_modules/.bin:${workspaceFolder}/bin"
588
+ },
589
+ "terminal.integrated.env.windows": {
590
+ "PATH": "${env:PATH};${workspaceFolder}\\node_modules\\.bin;${workspaceFolder}\\bin"
591
+ }
592
+ }
593
+ \`\`\`
594
+
595
+ ## Available Tools
596
+
597
+ To list all available executable tools, run:
598
+ \`\`\`bash
599
+ binary-collections list
600
+ \`\`\`
601
+
602
+ ### Quick Reference
603
+
604
+ | Category | Commands | Description |
605
+ |---|---|---|
606
+ | **Git** | \`git-purge\`, \`git-diff\`, \`git-fix\`, \`git-reduce-size\` | Git repository management and optimization |
607
+ | **Submodules** | \`submodule\`, \`submodule-install\`, \`submodule-remove\`, \`submodule-token\` | Git submodule operations |
608
+ | **NPM Scripts** | \`nrs\`, \`run-s\`, \`run-series\`, \`npm-run-series\` | Run npm scripts in series with pattern matching |
609
+ | **Package Mgmt** | \`yarn-reinstall\`, \`pkg-resolutions-updater\`, \`pkg-res-updater\` | Yarn/package resolutions management utilities |
610
+ | **Node.js Dev** | \`find-node-modules\`, \`find-nodemodules\`, \`dev\`, \`prod\`, \`empty\` | Node.js development helpers |
611
+ | **Process Mgmt** | \`kill-process\`, \`nodekill\`, \`javakill\`, \`del-ps\` | Process management and termination |
612
+ | **File System** | \`rmfind\`, \`rmpath\`, \`rmx\`, \`print-tree\`, \`dir-tree\` | File system operations |
613
+ | **Cleanup** | \`del-nodemodules\`, \`del-yarncaches\`, \`del-gradle\` | Cache and build directory cleanup |
614
+ | **GitHub Actions** | \`clear-gh-caches\`, \`clean-github-actions-cache\` | Remove old GitHub Actions caches, keep only latest |
615
+
616
+ ## Git Tools
617
+
618
+ ### Git Repository Purge
619
+ Clean and optimize git repositories by pruning reflogs.
620
+ \`\`\`bash
621
+ git-purge
622
+ \`\`\`
623
+
624
+ ![Git purge screenshot](https://github.com/dimaslanjaka/bin/assets/12471057/2805c54e-28a7-491d-b381-de2593a854b3)
625
+
626
+ ### Git Fix Utility
627
+ Comprehensive Git configuration fixer for cross-platform development.
628
+
629
+ > **Note:** This tool is non-interactive. All configuration is argument-driven.
630
+
631
+ \`\`\`bash
632
+ git-fix # Apply all fixes
633
+ git-fix --lf-only # Force LF line endings only
634
+ git-fix --permissions # Ignore file permissions only
635
+ git-fix --normalize # Normalize existing files only
636
+ git-fix --user # Configure Git user from environment
637
+ git-fix --user NAME EMAIL # Configure Git user with specific values
638
+ git-fix --user --update-remote # Also update remote URL to match user
639
+ \`\`\`
640
+
641
+ **Features:**
642
+ - Forces LF line endings (\`core.autocrlf = false\`)
643
+ - Ignores file permission changes (\`core.filemode = false\`)
644
+ - Sets pull strategy to false (prevents auto-rebase)
645
+ - Normalizes existing line endings
646
+ - Creates/updates \`.gitattributes\` with proper line ending rules
647
+ - Configures Git user from environment variables (\`GITHUB_USER\`, \`GITHUB_EMAIL\`) or CLI arguments
648
+ - \`--update-remote\` flag: Update remote URL to match the configured user (for HTTPS remotes)
649
+
650
+ ### Git Repository Size Reducer
651
+ Reduce git repository size by cleaning up history.
652
+ \`\`\`bash
653
+ git-reduce-size
654
+ \`\`\`
655
+
656
+ ### Submodule Management
657
+ - **\`submodule\`** - General submodule operations
658
+ - **\`submodule-install\`** - Install and setup submodules
659
+ - **\`submodule-remove\`** - Remove git submodules with interactive selection
660
+
661
+ ![Submodule remover screenshot](https://github.com/user-attachments/assets/659c2fa3-f12f-45cb-a66f-aed3807e0023)
662
+
663
+ ## NPM Script Runner
664
+
665
+ **Binaries**: \`nrs\`, \`run-s\`, \`run-series\`, \`npm-run-series\`
666
+
667
+ Run multiple npm scripts in series with pattern matching support.
668
+
669
+ ### Options
670
+ | Flag | Description |
671
+ |---------------------|---------------------------------------------|
672
+ | \`--yarn\` | Use \`yarn run <script-name>\` instead of npm |
673
+ | \`--verbose\`, \`-v\` | Enable verbose output |
674
+
675
+ ### Example
676
+ Execute all scripts matching the pattern \`namescript:**\`:
677
+ \`\`\`json
678
+ {
679
+ "scripts": {
680
+ "namescript:xx": "echo xx",
681
+ "namescript:xxx": "echo xxx",
682
+ "namescript": "nrs --yarn=true --verbose=true \"namescript:**\""
683
+ }
684
+ }
685
+ \`\`\`
686
+
687
+ ## Package Management Tools
688
+
689
+ ### Yarn Package Reinstaller
690
+ Reinstall yarn packages with dependency type flags.
691
+ \`\`\`bash
692
+ yarn-reinstall <packageName> [--dev|-D|--peer|-P|--optional|-O]
693
+ \`\`\`
694
+
695
+ ### Package Resolutions Manager
696
+ Manage package resolutions in package.json (aliases: \`pkg-resolutions-updater\`, \`pkg-res-updater\`).
697
+ \`\`\`bash
698
+ pkg-resolutions-updater
699
+ \`\`\`
700
+
701
+ ## Cleanup Tools
702
+
703
+ ### Node Modules Cleaner
704
+ Remove node_modules directories recursively.
705
+ \`\`\`bash
706
+ del-nodemodules # Primary command
707
+ del-node-modules # Alternative
708
+ \`\`\`
709
+
710
+ ### Yarn Cache Cleaner
711
+ Clear yarn cache directories.
712
+ \`\`\`bash
713
+ del-yarncaches # Primary command
714
+ \`\`\`
715
+
716
+ ### Gradle Build Cleaner
717
+ Delete gradle build folders.
718
+ \`\`\`bash
719
+ del-gradle
720
+ \`\`\`
721
+
722
+ ### GitHub Actions Cache Cleaner
723
+ Remove old GitHub Actions caches, keep only latest.
724
+ \`\`\`bash
725
+ clear-gh-caches
726
+ \`\`\`
727
+
728
+ ## Troubleshooting
729
+
730
+ ### Submodule Installation Issues
731
+ If you encounter the following error:
732
+ \`\`\`log
733
+ fatal: 'origin/<branch>' is not a commit and a branch '<branch>' cannot be created from it
734
+ \`\`\`
735
+ **Solution**: Delete \`.git/modules\` directory before running \`submodule-install\`.
736
+
737
+ #### Complete Submodule Setup Example
738
+ \`\`\`bash
739
+ echo "Initializing submodules..."
740
+ git submodule init
741
+ git submodule foreach "git submodule init"
742
+
743
+ echo "Syncing submodules..."
744
+ git submodule sync
745
+ git submodule foreach "git submodule sync"
746
+
747
+ echo "Updating submodules..."
748
+ npx --yes rimraf .git/modules
749
+ npx --yes binary-collections submodule-install
750
+ \`\`\`
751
+
752
+ ## Development
753
+
754
+ The list of available binaries and utilities is auto-generated by the build script (\`build.mjs\`). All CLI tools and binaries are collected from the \`bin/\`, \`lib/\` folders.
755
+
756
+ To update the binary list:
757
+ \`\`\`bash
758
+ yarn run build
759
+ # or
760
+ node build.mjs
761
+ \`\`\`
762
+
763
+ ## Contributing
764
+
765
+ Contributions are welcome! Please feel free to submit a Pull Request.
766
+
767
+ ## License
768
+
769
+ This project is licensed under the terms specified in the LICENSE file.
770
+ `;
771
+
772
+ const blob = new Blob([markdownContent], { type: 'text/markdown' });
773
+ const url = URL.createObjectURL(blob);
774
+ const a = document.createElement('a');
775
+ a.href = url;
776
+ a.download = 'README.md';
777
+ document.body.appendChild(a);
778
+ a.click();
779
+ document.body.removeChild(a);
780
+ URL.revokeObjectURL(url);
781
+ }
782
+ </script>
783
+ </body>
784
+ </html>