rock 0.3.1 → 0.8.13

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 (77) hide show
  1. package/README.md +51 -196
  2. package/dist/src/bin.d.ts +2 -0
  3. package/dist/src/bin.d.ts.map +1 -0
  4. package/dist/src/bin.js +7 -0
  5. package/dist/src/bin.js.map +1 -0
  6. package/dist/src/index.d.ts +2 -0
  7. package/dist/src/index.d.ts.map +1 -0
  8. package/dist/src/index.js +2 -0
  9. package/dist/src/index.js.map +1 -0
  10. package/dist/src/lib/adHocTemplates.d.ts +13 -0
  11. package/dist/src/lib/adHocTemplates.js +366 -0
  12. package/dist/src/lib/adHocTemplates.js.map +1 -0
  13. package/dist/src/lib/checkDeprecatedOptions.d.ts +1 -0
  14. package/dist/src/lib/checkDeprecatedOptions.d.ts.map +1 -0
  15. package/dist/src/lib/checkDeprecatedOptions.js +60 -0
  16. package/dist/src/lib/checkDeprecatedOptions.js.map +1 -0
  17. package/dist/src/lib/cli.d.ts +6 -0
  18. package/dist/src/lib/cli.d.ts.map +1 -0
  19. package/dist/src/lib/cli.js +101 -0
  20. package/dist/src/lib/cli.js.map +1 -0
  21. package/dist/src/lib/plugins/clean.d.ts +2 -0
  22. package/dist/src/lib/plugins/clean.d.ts.map +1 -0
  23. package/dist/src/lib/plugins/clean.js +317 -0
  24. package/dist/src/lib/plugins/clean.js.map +1 -0
  25. package/dist/src/lib/plugins/fingerprint.d.ts +12 -0
  26. package/dist/src/lib/plugins/fingerprint.d.ts.map +1 -0
  27. package/dist/src/lib/plugins/fingerprint.js +72 -0
  28. package/dist/src/lib/plugins/fingerprint.js.map +1 -0
  29. package/dist/src/lib/plugins/logConfig.d.ts +14 -0
  30. package/dist/src/lib/plugins/logConfig.d.ts.map +1 -0
  31. package/dist/src/lib/plugins/logConfig.js +54 -0
  32. package/dist/src/lib/plugins/logConfig.js.map +1 -0
  33. package/dist/src/lib/plugins/remoteCache.d.ts +2 -0
  34. package/dist/src/lib/plugins/remoteCache.d.ts.map +1 -0
  35. package/dist/src/lib/plugins/remoteCache.js +335 -0
  36. package/dist/src/lib/plugins/remoteCache.js.map +1 -0
  37. package/dist/src/lib/plugins/templateIndexHtml.d.ts +5 -0
  38. package/dist/src/lib/plugins/templateIndexHtml.js +189 -0
  39. package/dist/src/lib/plugins/templateIndexHtml.js.map +1 -0
  40. package/dist/src/lib/plugins/templateManifestPlist.d.ts +8 -0
  41. package/dist/src/lib/plugins/templateManifestPlist.js +36 -0
  42. package/dist/src/lib/plugins/templateManifestPlist.js.map +1 -0
  43. package/package.json +31 -44
  44. package/.npmignore +0 -1
  45. package/CHANGELOG.md +0 -61
  46. package/LICENSE +0 -15
  47. package/bin/rock +0 -51
  48. package/lib/rock.js +0 -191
  49. package/lib/tweezers.js +0 -43
  50. package/lib/util.js +0 -10
  51. package/test/mocha.opts +0 -3
  52. package/test/resources/expect/myapp/LICENSE +0 -15
  53. package/test/resources/expect/myapp/README.md +0 -18
  54. package/test/resources/expect/myapp/ignore_this/READTHIS.md +0 -1
  55. package/test/resources/expect/myapp/lib/cool_module.js +0 -4
  56. package/test/resources/expect/myapp/test/cool_module.test.js +0 -4
  57. package/test/resources/rock.conf.json +0 -3
  58. package/test/resources/rocks/node-lib/.rock/rock.json +0 -9
  59. package/test/resources/rocks/node-lib/.rock/scripts/bye.js +0 -1
  60. package/test/resources/rocks/node-lib/.rock/scripts/hi.sh +0 -3
  61. package/test/resources/rocks/node-lib/LICENSE +0 -15
  62. package/test/resources/rocks/node-lib/README.md +0 -18
  63. package/test/resources/rocks/node-lib/ignore_this/READTHIS.md +0 -1
  64. package/test/resources/rocks/node-lib/lib/{{project-name}}.js +0 -4
  65. package/test/resources/rocks/node-lib/test/{{project-name}}.test.js +0 -4
  66. package/test/resources/rocks/node-lib-tmpl/.rock/rock.json +0 -13
  67. package/test/resources/rocks/node-lib-tmpl/.rock/scripts/bye.js +0 -1
  68. package/test/resources/rocks/node-lib-tmpl/.rock/scripts/hi.sh +0 -3
  69. package/test/resources/rocks/node-lib-tmpl/LICENSE +0 -15
  70. package/test/resources/rocks/node-lib-tmpl/README.md +0 -18
  71. package/test/resources/rocks/node-lib-tmpl/ignore_this/READTHIS.md +0 -1
  72. package/test/resources/rocks/node-lib-tmpl/lib/@@project-name@@.js +0 -4
  73. package/test/resources/rocks/node-lib-tmpl/test/@@project-name@@.test.js +0 -4
  74. package/test/rock-bin.test.js +0 -81
  75. package/test/rock-dload-github.test.js +0 -54
  76. package/test/rock-file.test.js +0 -49
  77. package/test/rock.test.js +0 -90
@@ -0,0 +1,366 @@
1
+ // Template functions for ad-hoc iOS distribution
2
+ export function templateIndexHtml({ appName, version, bundleIdentifier, }) {
3
+ return `<!DOCTYPE html>
4
+ <html lang="en">
5
+ <head>
6
+ <meta charset="UTF-8" />
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
8
+ <title>Download ${appName} for iOS</title>
9
+ <style>
10
+ :root {
11
+ /* Light mode variables */
12
+ --bg-primary: #ffffff;
13
+ --bg-secondary: #f5f5f7;
14
+ --text-primary: #1d1d1f;
15
+ --text-secondary: #86868b;
16
+ --accent-primary: #8232ff;
17
+ --accent-hover: rgba(130, 50, 255, 0.3);
18
+ --border-color: #e5e5e7;
19
+ --shadow-color: rgba(0, 0, 0, 0.1);
20
+ }
21
+
22
+ @media (prefers-color-scheme: dark) {
23
+ :root {
24
+ /* Dark mode variables */
25
+ --bg-primary: #1c1c1e;
26
+ --bg-secondary: #2c2c2e;
27
+ --text-primary: #ffffff;
28
+ --text-secondary: #8e8e93;
29
+ --accent-primary: #8232ff;
30
+ --accent-hover: rgba(130, 50, 255, 0.4);
31
+ --border-color: #38383a;
32
+ --shadow-color: rgba(0, 0, 0, 0.3);
33
+ }
34
+ }
35
+
36
+ * {
37
+ margin: 0;
38
+ padding: 0;
39
+ box-sizing: border-box;
40
+ }
41
+
42
+ body {
43
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
44
+ Oxygen, Ubuntu, Cantarell, sans-serif;
45
+ min-height: 100vh;
46
+ display: flex;
47
+ align-items: center;
48
+ justify-content: center;
49
+ padding: 20px;
50
+ font-size: 16px;
51
+ background-color: var(--bg-primary);
52
+ color: var(--text-primary);
53
+ transition: background-color 0.3s ease, color 0.3s ease;
54
+ }
55
+
56
+ .container {
57
+ text-align: center;
58
+ max-width: 500px;
59
+ width: 100%;
60
+ }
61
+
62
+ .app-icon {
63
+ width: 100px;
64
+ height: 100px;
65
+ margin: 0 auto 15px;
66
+ display: flex;
67
+ align-items: center;
68
+ justify-content: center;
69
+ font-size: 48px;
70
+ color: var(--text-primary);
71
+ background: var(--bg-secondary);
72
+ border-radius: 25px;
73
+ transition: background-color 0.3s ease;
74
+ }
75
+
76
+ h1 {
77
+ color: var(--text-primary);
78
+ font-size: 28px;
79
+ font-weight: 600;
80
+ margin-bottom: 15px;
81
+ overflow-wrap: break-word;
82
+ transition: color 0.3s ease;
83
+ }
84
+
85
+ .subtitle {
86
+ color: var(--text-secondary);
87
+ font-size: 16px;
88
+ line-height: 1.5;
89
+ margin-bottom: 30px;
90
+ transition: color 0.3s ease;
91
+ }
92
+
93
+ .version {
94
+ color: var(--text-primary);
95
+ font-size: 16px;
96
+ line-height: 1.5;
97
+ margin-bottom: 10px;
98
+ transition: color 0.3s ease;
99
+ }
100
+
101
+ .download-button {
102
+ background: var(--accent-primary);
103
+ color: white;
104
+ border: none;
105
+ padding: 16px 32px;
106
+ border-radius: 4px;
107
+ font-size: 14px;
108
+ font-weight: 600;
109
+ cursor: pointer;
110
+ transition: all 0.3s ease;
111
+ text-decoration: none;
112
+ display: inline-block;
113
+ margin-bottom: 20px;
114
+ box-shadow: 0 4px 12px var(--shadow-color);
115
+ }
116
+
117
+ .download-button:hover {
118
+ transform: translateY(-2px);
119
+ box-shadow: 0 8px 24px var(--accent-hover);
120
+ }
121
+
122
+ .download-button:active {
123
+ transform: translateY(0);
124
+ }
125
+
126
+ .instructions {
127
+ background: var(--bg-secondary);
128
+ border-radius: 4px;
129
+ padding: 20px;
130
+ margin-top: 20px;
131
+ text-align: left;
132
+ border: 1px solid var(--border-color);
133
+ transition: background-color 0.3s ease, border-color 0.3s ease;
134
+ }
135
+
136
+ .instructions h3 {
137
+ color: var(--text-primary);
138
+ font-size: 16px;
139
+ margin-bottom: 10px;
140
+ transition: color 0.3s ease;
141
+ }
142
+
143
+ .instructions ol {
144
+ color: var(--text-secondary);
145
+ font-size: 14px;
146
+ line-height: 1.6;
147
+ padding-left: 20px;
148
+ transition: color 0.3s ease;
149
+ }
150
+
151
+ .instructions li {
152
+ margin-bottom: 8px;
153
+ }
154
+
155
+ .adhoc-info {
156
+ text-align: left;
157
+ margin-top: 20px;
158
+ padding: 1em 2em;
159
+ border-left: 3px solid var(--accent-primary);
160
+ background: var(--bg-primary);
161
+ border-radius: 4px;
162
+ transition: background-color 0.3s ease;
163
+ }
164
+
165
+ .adhoc-info-title {
166
+ font-weight: 600;
167
+ margin-bottom: 10px;
168
+ color: var(--text-primary);
169
+ transition: color 0.3s ease;
170
+ }
171
+
172
+ .adhoc-info-text {
173
+ color: var(--text-primary);
174
+ margin: 0;
175
+ transition: color 0.3s ease;
176
+ }
177
+
178
+ .footer {
179
+ text-align: center;
180
+ margin-top: 40px;
181
+ font-size: 12px;
182
+ color: var(--text-secondary);
183
+ transition: color 0.3s ease;
184
+ }
185
+
186
+ .link {
187
+ color: var(--accent-primary);
188
+ text-decoration: none;
189
+ transition: color 0.3s ease;
190
+ }
191
+
192
+ .link:hover {
193
+ text-decoration: underline;
194
+ }
195
+
196
+ .toast {
197
+ padding: 1em 3em;
198
+ font-size: 14px;
199
+ border: 1px solid var(--accent-primary);
200
+ color: var(--text-primary);
201
+ position: fixed;
202
+ bottom: 1em;
203
+ left: 50%;
204
+ transform: translateX(-50%);
205
+ max-width: 500px;
206
+ width: calc(100% - 2em);
207
+ text-align: left;
208
+ border-radius: 4px;
209
+ background-color: var(--bg-primary);
210
+ display: none;
211
+ box-shadow: 0 8px 24px var(--shadow-color);
212
+ transition: background-color 0.3s ease, border-color 0.3s ease, color 0.3s ease;
213
+ }
214
+
215
+ .toast-visible {
216
+ display: block;
217
+ animation: slideUp 0.3s ease;
218
+ }
219
+
220
+ @keyframes slideUp {
221
+ from {
222
+ opacity: 0;
223
+ transform: translateX(-50%) translateY(20px);
224
+ }
225
+ to {
226
+ opacity: 1;
227
+ transform: translateX(-50%) translateY(0);
228
+ }
229
+ }
230
+
231
+ .toast-icon {
232
+ font-size: 1em;
233
+ position: absolute;
234
+ left: 1em;
235
+ top: 50%;
236
+ transform: translateY(-50%);
237
+ }
238
+
239
+ .toast-close {
240
+ font-size: 1em;
241
+ padding: 0.5em;
242
+ cursor: pointer;
243
+ position: absolute;
244
+ right: 1em;
245
+ top: 50%;
246
+ transform: translateY(-50%);
247
+ color: var(--text-secondary);
248
+ transition: color 0.3s ease;
249
+ }
250
+
251
+ .toast-close:hover {
252
+ color: var(--text-primary);
253
+ }
254
+
255
+ /* Smooth transitions for all elements */
256
+ * {
257
+ transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease;
258
+ }
259
+ </style>
260
+ </head>
261
+ <body>
262
+ <div class="container">
263
+ <div class="app-icon">📱</div>
264
+
265
+ <div id="home-screen-toast" class="toast">
266
+ <span class="toast-icon">💡</span>
267
+ <p>Check Home Screen to see installation progress</p>
268
+ <span class="toast-close" onclick="hideToast()">✕</span>
269
+ </div>
270
+
271
+ <h1>${appName}</h1>
272
+ <p class="version">${bundleIdentifier} (${version})</p>
273
+ <p class="subtitle">
274
+ Download and install the latest version of our iOS app directly to your
275
+ device.
276
+ </p>
277
+
278
+ <a href="#" id="install-link" class="download-button" onclick="showToast()">
279
+ Install App
280
+ </a>
281
+
282
+ <script>
283
+ // Update the link dynamically to point to the manifest.plist
284
+ const link = document.getElementById('install-link');
285
+ const currentUrl = window.location.href;
286
+ const manifestUrl = currentUrl.replace('index.html', 'manifest.plist');
287
+ link.href = \`itms-services://?action=download-manifest&url=\${encodeURIComponent(manifestUrl)}\`;
288
+
289
+ function showToast() {
290
+ setTimeout(() => {
291
+ const toast = document.getElementById('home-screen-toast');
292
+ toast.classList.add('toast-visible');
293
+ }, 2000);
294
+ }
295
+
296
+ function hideToast() {
297
+ const toast = document.getElementById('home-screen-toast');
298
+ toast.classList.remove('toast-visible');
299
+ }
300
+ </script>
301
+
302
+ <div class="instructions">
303
+ <h3>Installation Instructions:</h3>
304
+ <ol>
305
+ <li>Tap the "Install App" button above</li>
306
+ <li>When prompted, tap "Install" in the popup dialog</li>
307
+ <li>The app will now start installing and will be available on your home screen</li>
308
+ </ol>
309
+ </div>
310
+
311
+ <div class="adhoc-info">
312
+ <p class="adhoc-info-title">Ad-hoc Distribution</p>
313
+ <p class="adhoc-info-text">
314
+ This app is distributed via ad-hoc distribution for testing purposes.
315
+ Your device must either be enrolled in enterprise distribution or have its UDID added to the app's provisioning profile.
316
+ <br><br>
317
+ Learn more at <a class="link" href="https://rockjs.dev/docs/cli#ad-hoc-distribution">Rock Ad-hoc documentation</a>.
318
+ </p>
319
+ </div>
320
+ <div class="footer">
321
+ <p>
322
+ Generated with <a class="link" href="https://rockjs.dev">Rock</a> by
323
+ <a class="link" href="https://callstack.com">Callstack</a>
324
+ </p>
325
+ </div>
326
+ </div>
327
+ </body>
328
+ </html>
329
+ `;
330
+ }
331
+ export function templateManifestPlist({ baseUrl, ipaName, bundleIdentifier, version, appName, platformIdentifier, }) {
332
+ return `<?xml version="1.0" encoding="UTF-8"?>
333
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
334
+ <plist version="1.0">
335
+ <dict>
336
+ <key>items</key>
337
+ <array>
338
+ <dict>
339
+ <key>assets</key>
340
+ <array>
341
+ <dict>
342
+ <key>kind</key>
343
+ <string>software-package</string>
344
+ <key>url</key>
345
+ <string>${baseUrl}/${ipaName}</string>
346
+ </dict>
347
+ </array>
348
+ <key>metadata</key>
349
+ <dict>
350
+ <key>bundle-identifier</key>
351
+ <string>${bundleIdentifier}</string>
352
+ <key>bundle-version</key>
353
+ <string>${version}</string>
354
+ <key>kind</key>
355
+ <string>software</string>
356
+ <key>platform-identifier</key>
357
+ <string>${platformIdentifier ?? 'com.apple.platform.iphoneos'}</string>
358
+ <key>title</key>
359
+ <string>${appName}</string>
360
+ </dict>
361
+ </dict>
362
+ </array>
363
+ </dict>
364
+ </plist>`;
365
+ }
366
+ //# sourceMappingURL=adHocTemplates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adHocTemplates.js","sourceRoot":"","sources":["../../../src/lib/adHocTemplates.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,MAAM,UAAU,iBAAiB,CAAC,EAChC,OAAO,EACP,OAAO,EACP,gBAAgB,GAKjB;IACC,OAAO;;;;;wBAKe,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAuQjB,OAAO;6BACQ,gBAAgB,KAAK,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDtD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,EACpC,OAAO,EACP,OAAO,EACP,gBAAgB,EAChB,OAAO,EACP,OAAO,EACP,kBAAkB,GAQnB;IACC,OAAO;;;;;;;;;;;;;gCAauB,OAAO,IAAI,OAAO;;;;;;4BAMtB,gBAAgB;;4BAEhB,OAAO;;;;4BAKf,kBAAkB,IAAI,6BACxB;;4BAEU,OAAO;;;;;aAKtB,CAAC;AACd,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const checkDeprecatedOptions: (argv: string[]) => void;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkDeprecatedOptions.d.ts","sourceRoot":"","sources":["../../../src/lib/checkDeprecatedOptions.ts"],"names":[],"mappings":"AAgFA,eAAO,MAAM,sBAAsB,GAAI,MAAM,MAAM,EAAE,SAapD,CAAC"}
@@ -0,0 +1,60 @@
1
+ import { color, logger } from '@rock-js/tools';
2
+ const npxBin = 'npx rock';
3
+ const checkDeprecatedCommand = (argv, oldCmd, newCmd, deprecatedFlags) => {
4
+ if (argv.includes(oldCmd)) {
5
+ const args = argv.slice(argv.indexOf(oldCmd) + 1);
6
+ const formattedFlags = getFormattedFlagsArray(deprecatedFlags, args);
7
+ logger.error(`The "${oldCmd}" command was renamed to "${newCmd}".`);
8
+ logFlagsAndCommand(formattedFlags, newCmd, args, deprecatedFlags);
9
+ process.exit(1);
10
+ }
11
+ };
12
+ const checkCurrentCommand = (argv, cmd, deprecatedFlags) => {
13
+ if (argv.includes(cmd)) {
14
+ const args = argv.slice(argv.indexOf(cmd) + 1);
15
+ const formattedFlags = getFormattedFlagsArray(deprecatedFlags, args);
16
+ if (formattedFlags.length > 0) {
17
+ logFlagsAndCommand(formattedFlags, cmd, args, deprecatedFlags);
18
+ process.exit(1);
19
+ }
20
+ }
21
+ };
22
+ function getFormattedFlagsArray(flags, args) {
23
+ return flags
24
+ .map(({ old, new: newFlag }) => args.includes(old)
25
+ ? `• "${color.bold(old)}" changed to "${color.bold(newFlag)}"`
26
+ : undefined)
27
+ .filter(Boolean);
28
+ }
29
+ function logFlagsAndCommand(formattedFlags, cmd, args, deprecatedFlags) {
30
+ if (formattedFlags.length > 0) {
31
+ logger.error(`Found deprecated flags:
32
+ ${formattedFlags.join('\n')}`);
33
+ }
34
+ const newArgs = args.map((arg) => {
35
+ const newFlag = deprecatedFlags.find((flag) => arg === flag.old);
36
+ return newFlag ? newFlag.new : arg;
37
+ });
38
+ logger.error(`Use new command${formattedFlags ? ' with new flags' : ''}:
39
+ ${color.bold(npxBin)} ${color.bold(cmd)} ${color.bold(newArgs.join(' '))}`);
40
+ }
41
+ const deprecatedAndroidFlags = [
42
+ { old: '--mode', new: '--variant' },
43
+ { old: '--appId', new: '--app-id' },
44
+ { old: '--appIdSuffix', new: '--app-id-suffix' },
45
+ { old: '--no-remote-cache', new: '--local' },
46
+ ];
47
+ const deprecatedIosFlags = [
48
+ { old: '--mode', new: '--configuration' },
49
+ { old: '--buildFolder', new: '--build-folder' },
50
+ { old: '--no-remote-cache', new: '--local' },
51
+ ];
52
+ export const checkDeprecatedOptions = (argv) => {
53
+ // Check deprecated commands
54
+ checkDeprecatedCommand(argv, 'run-android', 'run:android', deprecatedAndroidFlags);
55
+ checkDeprecatedCommand(argv, 'run-ios', 'run:ios', deprecatedIosFlags);
56
+ // Check current commands for deprecated flags
57
+ checkCurrentCommand(argv, 'run:android', deprecatedAndroidFlags);
58
+ checkCurrentCommand(argv, 'run:ios', deprecatedIosFlags);
59
+ };
60
+ //# sourceMappingURL=checkDeprecatedOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkDeprecatedOptions.js","sourceRoot":"","sources":["../../../src/lib/checkDeprecatedOptions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ type CliOptions = {
2
+ cwd: string;
3
+ argv: string[];
4
+ };
5
+ export declare const cli: ({ cwd, argv }: CliOptions) => Promise<void>;
6
+ export {};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/lib/cli.ts"],"names":[],"mappings":"AAgBA,KAAK,UAAU,GAAG;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,GAAG,GAAU,eAAe,UAAU,kBAqElD,CAAC"}
@@ -0,0 +1,101 @@
1
+ import { createRequire } from 'node:module';
2
+ import { dirname } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { getConfig } from '@rock-js/config';
5
+ import { colorLink, logger, resolveFilenameUp, RockError } from '@rock-js/tools';
6
+ import { Command } from 'commander';
7
+ import { checkDeprecatedOptions } from './checkDeprecatedOptions.js';
8
+ import { cleanPlugin } from './plugins/clean.js';
9
+ import { fingerprintPlugin } from './plugins/fingerprint.js';
10
+ import { logConfigPlugin } from './plugins/logConfig.js';
11
+ import { remoteCachePlugin } from './plugins/remoteCache.js';
12
+ const require = createRequire(import.meta.url);
13
+ const __dirname = dirname(fileURLToPath(import.meta.url));
14
+ const { version } = require(resolveFilenameUp(__dirname, 'package.json'));
15
+ export const cli = async ({ cwd, argv }) => {
16
+ if (argv) {
17
+ logger.setVerbose(argv.includes('--verbose'));
18
+ checkDeprecatedOptions(argv);
19
+ }
20
+ const program = new Command();
21
+ program
22
+ .name('rock')
23
+ .description('Rock CLI.')
24
+ .option('--verbose', 'enable verbose logging')
25
+ .version(version);
26
+ const internalPlugins = [
27
+ remoteCachePlugin,
28
+ logConfigPlugin,
29
+ fingerprintPlugin,
30
+ cleanPlugin,
31
+ ];
32
+ // Register commands from the config
33
+ const config = await getConfig(cwd, internalPlugins);
34
+ ensureUniqueCommands(config.commands);
35
+ config.commands?.forEach((command) => {
36
+ const cmd = program
37
+ .command(command.name)
38
+ .description(command.description || '')
39
+ .action(async (...args) => {
40
+ try {
41
+ await command.action(...args);
42
+ }
43
+ catch (error) {
44
+ if (error instanceof RockError) {
45
+ if (logger.isVerbose()) {
46
+ logger.error(error);
47
+ }
48
+ else {
49
+ logger.error(error.message);
50
+ if (error.cause) {
51
+ logger.error(`Cause: ${error.cause}`);
52
+ }
53
+ }
54
+ }
55
+ else {
56
+ logger.error(`Unexpected error while running "${command.name}":`, error);
57
+ }
58
+ process.exit(1);
59
+ }
60
+ });
61
+ // Positional args
62
+ for (const arg of command.args || []) {
63
+ cmd.argument(arg.name, arg.description, arg.default);
64
+ }
65
+ // Flags
66
+ for (const opt of command.options || []) {
67
+ // Note: we cannot use default idempotent parse, as it prevents us from using variadic options.
68
+ if (opt.parse) {
69
+ cmd.option(opt.name, opt.description, opt.parse, opt.default);
70
+ }
71
+ else {
72
+ cmd.option(opt.name, opt.description, opt.default);
73
+ }
74
+ }
75
+ });
76
+ await program.parseAsync(argv);
77
+ };
78
+ function ensureUniqueCommands(commands) {
79
+ if (!commands)
80
+ return;
81
+ const commandNames = new Map();
82
+ for (const command of commands) {
83
+ if (commandNames.has(command.name)) {
84
+ const duplicate = commandNames.get(command.name);
85
+ const samePluginTwice = command.__origin === duplicate.__origin;
86
+ if (samePluginTwice) {
87
+ logger.error(`Found duplicated command "${command.name}" registered twice by the same "${command.__origin}" plugin in ${colorLink('rock.config.mjs')} file.
88
+ Please declare the plugin only once.`);
89
+ }
90
+ else {
91
+ logger.error(`Found duplicated command "${command.name}" registered by 2 plugins in ${colorLink('rock.config.mjs')} file:
92
+ 1. Added by "${command.__origin}" plugin
93
+ 2. Added by "${duplicate.__origin}" plugin
94
+ Command names must be unique. Please check if you import a plugin multiple times or use incompatible plugins.`);
95
+ }
96
+ process.exit(1);
97
+ }
98
+ commandNames.set(command.name, command);
99
+ }
100
+ }
101
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/lib/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { PluginApi, PluginOutput } from '@rock-js/config';
2
+ export declare const cleanPlugin: () => (api: PluginApi) => PluginOutput;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean.d.ts","sourceRoot":"","sources":["../../../../src/lib/plugins/clean.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AA8V5D,eAAO,MAAM,WAAW,SAErB,KAAK,SAAS,KAAG,YAgCjB,CAAC"}