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,317 @@
1
+ import fs from 'node:fs';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ import { getProjectRoot, intro, logger, outro, promptMultiselect, RockError, spawn, spinner, } from '@rock-js/tools';
5
+ const CLEANUP_TASK_NAMES = [
6
+ 'android',
7
+ 'gradle',
8
+ 'cocoapods',
9
+ 'metro',
10
+ 'watchman',
11
+ 'node_modules',
12
+ 'npm',
13
+ 'yarn',
14
+ 'bun',
15
+ 'pnpm',
16
+ 'rock',
17
+ ];
18
+ /**
19
+ * Validates that the provided task names are valid cleanup tasks.
20
+ * @param taskNames - Array of task names to validate
21
+ * @throws {RockError} If any task names are invalid
22
+ */
23
+ function validateCleanupTasks(taskNames) {
24
+ const invalidTasks = taskNames.filter((name) => !CLEANUP_TASK_NAMES.includes(name));
25
+ if (invalidTasks.length > 0) {
26
+ throw new RockError(`Invalid cleanup task(s): ${invalidTasks.join(', ')}. ` +
27
+ `Valid options are: ${CLEANUP_TASK_NAMES.join(', ')}`);
28
+ }
29
+ }
30
+ function removeDirectorySync(dirPath) {
31
+ if (fs.existsSync(dirPath)) {
32
+ try {
33
+ fs.rmSync(dirPath, { recursive: true, force: true });
34
+ logger.debug(`Cleaned directory: ${dirPath}`);
35
+ }
36
+ catch (error) {
37
+ logger.debug(`Failed to clean directory ${dirPath}: ${error}`);
38
+ }
39
+ }
40
+ }
41
+ /**
42
+ * Checks if a project has Metro configuration.
43
+ * @param projectRoot - The root directory of the project
44
+ * @returns True if the project has Metro configuration, false otherwise
45
+ */
46
+ function hasMetroProject(projectRoot) {
47
+ const metroConfig = path.join(projectRoot, 'metro.config.js');
48
+ const metroConfigTs = path.join(projectRoot, 'metro.config.ts');
49
+ const packageJsonPath = path.join(projectRoot, 'package.json');
50
+ if (fs.existsSync(metroConfig) || fs.existsSync(metroConfigTs)) {
51
+ return true;
52
+ }
53
+ if (fs.existsSync(packageJsonPath)) {
54
+ try {
55
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
56
+ return (packageJson.dependencies?.metro || packageJson.devDependencies?.metro);
57
+ }
58
+ catch {
59
+ return false;
60
+ }
61
+ }
62
+ return false;
63
+ }
64
+ /**
65
+ * Cleans temporary directories that match a given pattern.
66
+ * @param pattern - The pattern to match temporary directory names
67
+ */
68
+ function cleanTempDirectoryPattern(pattern) {
69
+ const tmpDir = os.tmpdir();
70
+ try {
71
+ const tmpDirContents = fs.readdirSync(tmpDir);
72
+ const matchingFiles = tmpDirContents
73
+ .filter((name) => name.startsWith(pattern))
74
+ .map((name) => path.join(tmpDir, name));
75
+ for (const file of matchingFiles) {
76
+ removeDirectorySync(file);
77
+ }
78
+ }
79
+ catch (error) {
80
+ logger.debug(`${pattern} cache cleanup failed: ${error}`);
81
+ }
82
+ }
83
+ /**
84
+ * Cleans multiple directories by removing them recursively.
85
+ * @param directories - Array of directory paths to clean
86
+ * @param baseDir - Base directory to resolve relative paths from
87
+ */
88
+ function cleanDirectories(directories, baseDir) {
89
+ for (const dir of directories) {
90
+ const fullPath = path.isAbsolute(dir) ? dir : path.join(baseDir, dir);
91
+ removeDirectorySync(fullPath);
92
+ }
93
+ }
94
+ /**
95
+ * Creates an array of cleanup tasks for a specific project.
96
+ * @param projectRoot - The root directory of the project
97
+ * @param options - Clean options that affect task creation
98
+ * @returns Array of cleanup tasks with their configurations
99
+ */
100
+ function createCleanupTasks(projectRoot, options) {
101
+ const tasks = [];
102
+ // Android cleanup
103
+ tasks.push({
104
+ name: 'android',
105
+ description: '[Android] Gradle build and cache (.gradle, build, .cxx)',
106
+ enabled: true,
107
+ action: async () => {
108
+ const androidDir = path.join(projectRoot, 'android');
109
+ if (fs.existsSync(androidDir)) {
110
+ // Clean Android build directories
111
+ const directoriesToClean = ['.gradle', 'build', '.cxx'];
112
+ cleanDirectories(directoriesToClean, androidDir);
113
+ }
114
+ },
115
+ });
116
+ // Gradlew cleanup (separate task for slower operation)
117
+ tasks.push({
118
+ name: 'gradle',
119
+ description: '[Android] gradlew clean',
120
+ enabled: true,
121
+ action: async () => {
122
+ const androidDir = path.join(projectRoot, 'android');
123
+ const gradlewPath = path.join(androidDir, 'gradlew');
124
+ if (fs.existsSync(gradlewPath)) {
125
+ await spawn(gradlewPath, ['clean'], { cwd: androidDir });
126
+ }
127
+ },
128
+ });
129
+ // CocoaPods cleanup
130
+ tasks.push({
131
+ name: 'cocoapods',
132
+ description: '[iOS] CocoaPods cache and Pods directory',
133
+ enabled: true,
134
+ action: async () => {
135
+ const iosDir = path.join(projectRoot, 'ios');
136
+ if (fs.existsSync(iosDir)) {
137
+ // Remove Pods directory
138
+ cleanDirectories(['Pods'], iosDir);
139
+ // Clean CocoaPods cache
140
+ try {
141
+ await spawn('bundle', ['exec', 'pod', 'cache', 'clean', '--all'], {
142
+ cwd: iosDir,
143
+ });
144
+ }
145
+ catch (error) {
146
+ logger.debug(`Bundle exec pod cache clean failed: ${error}`);
147
+ await spawn('pod', ['cache', 'clean', '--all'], { cwd: iosDir });
148
+ }
149
+ }
150
+ cleanDirectories(['.cocoapods'], os.homedir());
151
+ },
152
+ });
153
+ // Metro cleanup
154
+ tasks.push({
155
+ name: 'metro',
156
+ description: '[JS] Metro and haste-map caches',
157
+ enabled: true,
158
+ action: async () => {
159
+ cleanTempDirectoryPattern('metro-');
160
+ cleanTempDirectoryPattern('haste-map');
161
+ },
162
+ });
163
+ // Watchman cleanup (only for Metro projects)
164
+ const hasMetro = hasMetroProject(projectRoot);
165
+ tasks.push({
166
+ name: 'watchman',
167
+ description: '[JS] Watchman cache for this project',
168
+ enabled: hasMetro,
169
+ action: async () => {
170
+ if (hasMetro) {
171
+ await spawn('watchman', ['watch-del', projectRoot]);
172
+ }
173
+ },
174
+ });
175
+ // node_modules cleanup
176
+ tasks.push({
177
+ name: 'node_modules',
178
+ description: '[JS] node_modules',
179
+ enabled: true,
180
+ action: async () => {
181
+ cleanDirectories(['node_modules'], projectRoot);
182
+ },
183
+ });
184
+ // NPM cleanup
185
+ tasks.push({
186
+ name: 'npm',
187
+ description: '[JS] NPM cache ',
188
+ enabled: options['verify-cache'] ?? false,
189
+ action: async () => {
190
+ await spawn('npm', ['cache', 'verify']);
191
+ },
192
+ });
193
+ // Yarn cleanup
194
+ tasks.push({
195
+ name: 'yarn',
196
+ description: '[JS] Yarn cache',
197
+ enabled: true,
198
+ action: async () => {
199
+ await spawn('yarn', ['cache', 'clean']);
200
+ },
201
+ });
202
+ // Bun cleanup
203
+ tasks.push({
204
+ name: 'bun',
205
+ description: '[JS] Bun cache',
206
+ enabled: true,
207
+ action: async () => {
208
+ await spawn('bun', ['pm', 'cache', 'rm']);
209
+ },
210
+ });
211
+ // PNPM cleanup
212
+ tasks.push({
213
+ name: 'pnpm',
214
+ description: '[JS] pnpm cache',
215
+ enabled: true,
216
+ action: async () => {
217
+ await spawn('pnpm', ['store', 'prune']);
218
+ },
219
+ });
220
+ // Rock cleanup
221
+ tasks.push({
222
+ name: 'rock',
223
+ description: '[Rock] project cache and build artifacts (iOS/Android)',
224
+ enabled: true,
225
+ action: async () => {
226
+ const rockCacheDir = path.join(projectRoot, '.rock', 'cache');
227
+ // Clean project cache file
228
+ const projectCacheFile = path.join(rockCacheDir, 'project.json');
229
+ removeDirectorySync(projectCacheFile);
230
+ // Clean remote build cache directory
231
+ cleanDirectories(['remote-build'], rockCacheDir);
232
+ // Clean iOS archive and export cache directory
233
+ cleanDirectories(['ios'], rockCacheDir);
234
+ // Clean Android build cache directory
235
+ cleanDirectories(['android'], rockCacheDir);
236
+ },
237
+ });
238
+ return tasks;
239
+ }
240
+ /**
241
+ * Executes cleanup tasks for a specific project.
242
+ * @param projectRoot - The root directory of the project to clean
243
+ * @param options - Clean options that determine which tasks to run
244
+ */
245
+ async function cleanProject(projectRoot, options) {
246
+ const tasks = createCleanupTasks(projectRoot, options);
247
+ let selectedTasks;
248
+ const availableTasks = tasks.filter((task) => task.enabled);
249
+ if (options.include && options.include.length > 0) {
250
+ validateCleanupTasks(options.include);
251
+ selectedTasks = tasks.filter((task) => options.include?.includes(task.name) && task.enabled);
252
+ }
253
+ else if (options.all) {
254
+ selectedTasks = availableTasks;
255
+ }
256
+ else {
257
+ const selected = await promptMultiselect({
258
+ message: 'Select caches to clean:',
259
+ options: availableTasks.map((task) => ({
260
+ value: task.name,
261
+ label: task.description,
262
+ })),
263
+ });
264
+ selectedTasks = tasks.filter((task) => selected.includes(task.name));
265
+ }
266
+ for (const task of selectedTasks) {
267
+ const taskSpinner = spinner();
268
+ taskSpinner.start(`Cleaning ${task.description}`);
269
+ try {
270
+ await task.action();
271
+ taskSpinner.stop(`Success: ${task.description}`);
272
+ }
273
+ catch (error) {
274
+ taskSpinner.stop(`Failure: ${task.description}`, 1);
275
+ logger.debug(`Task ${task.name} failed: ${error}`);
276
+ }
277
+ }
278
+ }
279
+ /**
280
+ * Main command function that handles the overall clean operation.
281
+ * @param options - Clean options that control the cleanup behavior
282
+ */
283
+ async function cleanCommand(options) {
284
+ intro('🧹 Rock Clean');
285
+ const projectRoot = getProjectRoot();
286
+ await cleanProject(projectRoot, options);
287
+ outro('Success 🎉.');
288
+ }
289
+ export const cleanPlugin = () => (api) => {
290
+ api.registerCommand({
291
+ name: 'clean',
292
+ description: 'Clean caches and build artifacts for Rock projects',
293
+ action: async (options) => {
294
+ await cleanCommand(options);
295
+ },
296
+ options: [
297
+ {
298
+ name: '--include <list>',
299
+ description: `Comma-separated list of caches to clear (${CLEANUP_TASK_NAMES.join(', ')})`,
300
+ parse: (val) => val.split(','),
301
+ },
302
+ {
303
+ name: '--verify-cache',
304
+ description: 'Whether to verify the cache (currently only applies to npm cache)',
305
+ },
306
+ {
307
+ name: '--all',
308
+ description: 'Clean all available caches without interactive prompt',
309
+ },
310
+ ],
311
+ });
312
+ return {
313
+ name: 'internal_clean',
314
+ description: 'Clean plugin for Rock projects',
315
+ };
316
+ };
317
+ //# sourceMappingURL=clean.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean.js","sourceRoot":"","sources":["../../../../src/lib/plugins/clean.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACL,cAAc,EACd,KAAK,EACL,MAAM,EACN,KAAK,EACL,iBAAiB,EACjB,SAAS,EACT,KAAK,EACL,OAAO,GACR,MAAM,gBAAgB,CAAC;AAgBxB,MAAM,kBAAkB,GAAG;IACzB,SAAS;IACT,QAAQ;IACR,WAAW;IACX,OAAO;IACP,UAAU;IACV,cAAc;IACd,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;CACE,CAAC;AAEX;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,SAAmB;IAC/C,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CACnC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAW,CAAC,CACpD,CAAC;IACF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,SAAS,CACjB,4BAA4B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YACrD,sBAAsB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAe;IAC1C,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,MAAM,CAAC,KAAK,CAAC,sBAAsB,OAAO,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,6BAA6B,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,WAAmB;IAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;IAC9D,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;IAChE,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAE/D,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;YAC1E,OAAO,CACL,WAAW,CAAC,YAAY,EAAE,KAAK,IAAI,WAAW,CAAC,eAAe,EAAE,KAAK,CACtE,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,SAAS,yBAAyB,CAAC,OAAe;IAChD,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,aAAa,GAAG,cAAc;aACjC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;aAC1C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QAE1C,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,0BAA0B,KAAK,EAAE,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,WAAqB,EAAE,OAAe;IAC9D,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACtE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,kBAAkB,CACzB,WAAmB,EACnB,OAAqB;IAErB,MAAM,KAAK,GAAkB,EAAE,CAAC;IAEhC,kBAAkB;IAClB,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,yDAAyD;QACtE,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,KAAK,IAAI,EAAE;YACjB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACrD,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC9B,kCAAkC;gBAClC,MAAM,kBAAkB,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;gBACxD,gBAAgB,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,uDAAuD;IACvD,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,yBAAyB;QACtC,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,KAAK,IAAI,EAAE;YACjB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACrD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YACrD,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC/B,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,oBAAoB;IACpB,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,0CAA0C;QACvD,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,KAAK,IAAI,EAAE;YACjB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YAC7C,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,wBAAwB;gBACxB,gBAAgB,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;gBAEnC,wBAAwB;gBACxB,IAAI,CAAC;oBACH,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;wBAChE,GAAG,EAAE,MAAM;qBACZ,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,KAAK,CAAC,uCAAuC,KAAK,EAAE,CAAC,CAAC;oBAC7D,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;gBACnE,CAAC;YACH,CAAC;YAED,gBAAgB,CAAC,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QACjD,CAAC;KACF,CAAC,CAAC;IAEH,gBAAgB;IAChB,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,iCAAiC;QAC9C,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,KAAK,IAAI,EAAE;YACjB,yBAAyB,CAAC,QAAQ,CAAC,CAAC;YACpC,yBAAyB,CAAC,WAAW,CAAC,CAAC;QACzC,CAAC;KACF,CAAC,CAAC;IAEH,6CAA6C;IAC7C,MAAM,QAAQ,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,sCAAsC;QACnD,OAAO,EAAE,QAAQ;QACjB,MAAM,EAAE,KAAK,IAAI,EAAE;YACjB,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,uBAAuB;IACvB,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,mBAAmB;QAChC,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,KAAK,IAAI,EAAE;YACjB,gBAAgB,CAAC,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC,CAAC;QAClD,CAAC;KACF,CAAC,CAAC;IAEH,cAAc;IACd,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,iBAAiB;QAC9B,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,IAAI,KAAK;QACzC,MAAM,EAAE,KAAK,IAAI,EAAE;YACjB,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC1C,CAAC;KACF,CAAC,CAAC;IAEH,eAAe;IACf,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,iBAAiB;QAC9B,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,KAAK,IAAI,EAAE;YACjB,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1C,CAAC;KACF,CAAC,CAAC;IAEH,cAAc;IACd,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,gBAAgB;QAC7B,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,KAAK,IAAI,EAAE;YACjB,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5C,CAAC;KACF,CAAC,CAAC;IAEH,eAAe;IACf,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,iBAAiB;QAC9B,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,KAAK,IAAI,EAAE;YACjB,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1C,CAAC;KACF,CAAC,CAAC;IAEH,eAAe;IACf,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,wDAAwD;QACrE,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,KAAK,IAAI,EAAE;YACjB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAE9D,2BAA2B;YAC3B,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;YACjE,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;YAEtC,qCAAqC;YACrC,gBAAgB,CAAC,CAAC,cAAc,CAAC,EAAE,YAAY,CAAC,CAAC;YAEjD,+CAA+C;YAC/C,gBAAgB,CAAC,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,CAAC;YAExC,sCAAsC;YACtC,gBAAgB,CAAC,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC,CAAC;QAC9C,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,YAAY,CAAC,WAAmB,EAAE,OAAqB;IACpE,MAAM,KAAK,GAAG,kBAAkB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAEvD,IAAI,aAA4B,CAAC;IACjC,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAE5D,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACtC,aAAa,GAAG,KAAK,CAAC,MAAM,CAC1B,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAC/D,CAAC;IACJ,CAAC;SAAM,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACvB,aAAa,GAAG,cAAc,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC;YACvC,OAAO,EAAE,yBAAyB;YAClC,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACrC,KAAK,EAAE,IAAI,CAAC,IAAI;gBAChB,KAAK,EAAE,IAAI,CAAC,WAAW;aACxB,CAAC,CAAC;SACJ,CAAC,CAAC;QACH,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,WAAW,GAAG,OAAO,EAAE,CAAC;QAC9B,WAAW,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAElD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,WAAW,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;YACpD,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,IAAI,YAAY,KAAK,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,YAAY,CAAC,OAAqB;IAC/C,KAAK,CAAC,eAAe,CAAC,CAAC;IAEvB,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACzC,KAAK,CAAC,aAAa,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GACtB,GAAG,EAAE,CACL,CAAC,GAAc,EAAgB,EAAE;IAC/B,GAAG,CAAC,eAAe,CAAC;QAClB,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,oDAAoD;QACjE,MAAM,EAAE,KAAK,EAAE,OAAqB,EAAE,EAAE;YACtC,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,kBAAkB;gBACxB,WAAW,EAAE,4CAA4C,kBAAkB,CAAC,IAAI,CAC9E,IAAI,CACL,GAAG;gBACJ,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;aACvC;YAED;gBACE,IAAI,EAAE,gBAAgB;gBACtB,WAAW,EACT,mEAAmE;aACtE;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,uDAAuD;aACrE;SACF;KACF,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,gCAAgC;KAC9C,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { PluginApi } from '@rock-js/config';
2
+ import type { FingerprintSources } from '@rock-js/tools';
3
+ type NativeFingerprintCommandOptions = {
4
+ platform: 'ios' | 'android';
5
+ raw?: boolean;
6
+ };
7
+ export declare function nativeFingerprintCommand(path: string, { extraSources, ignorePaths }: FingerprintSources, options: NativeFingerprintCommandOptions): Promise<void>;
8
+ export declare const fingerprintPlugin: () => (api: PluginApi) => {
9
+ name: string;
10
+ description: string;
11
+ };
12
+ export {};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../../../../src/lib/plugins/fingerprint.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAYtD,KAAK,+BAA+B,GAAG;IACrC,QAAQ,EAAE,KAAK,GAAG,SAAS,CAAC;IAC5B,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,MAAM,EACZ,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,kBAAkB,EACjD,OAAO,EAAE,+BAA+B,iBAqDzC;AAeD,eAAO,MAAM,iBAAiB,SAAU,KAAK,SAAS;;;CA4BrD,CAAC"}
@@ -0,0 +1,72 @@
1
+ import { performance } from 'node:perf_hooks';
2
+ import { color, intro, isInteractive, logger, nativeFingerprint, outro, RockError, spinner, } from '@rock-js/tools';
3
+ export async function nativeFingerprintCommand(path, { extraSources, ignorePaths }, options) {
4
+ validateOptions(options);
5
+ const platform = options.platform;
6
+ const readablePlatformName = platform === 'ios' ? 'iOS' : 'Android';
7
+ if (options.raw || !isInteractive()) {
8
+ const fingerprint = await nativeFingerprint(path, {
9
+ platform,
10
+ extraSources,
11
+ ignorePaths,
12
+ });
13
+ console.log(fingerprint.hash);
14
+ // log sources to stderr to avoid polluting the standard output
15
+ console.error(JSON.stringify({
16
+ hash: fingerprint.hash,
17
+ sources: fingerprint.sources.filter((source) => source.hash != null),
18
+ }, null, 2));
19
+ return;
20
+ }
21
+ intro(`${readablePlatformName} Fingerprint`);
22
+ const loader = spinner();
23
+ loader.start("Calculating fingerprint for the project's native parts");
24
+ const start = performance.now();
25
+ const fingerprint = await nativeFingerprint(path, {
26
+ platform,
27
+ extraSources,
28
+ ignorePaths,
29
+ });
30
+ const duration = performance.now() - start;
31
+ loader.stop(`Fingerprint calculated: ${color.bold(color.magenta(fingerprint.hash))}`);
32
+ logger.debug('Sources:', JSON.stringify(fingerprint.sources.filter((source) => source.hash != null), null, 2));
33
+ logger.debug(`Duration: ${(duration / 1000).toFixed(1)}s`);
34
+ outro('Success 🎉.');
35
+ }
36
+ function validateOptions(options) {
37
+ if (!options.platform) {
38
+ throw new RockError('The --platform flag is required. Please specify either "ios" or "android".');
39
+ }
40
+ if (options.platform !== 'ios' && options.platform !== 'android') {
41
+ throw new RockError(`Unsupported platform "${options.platform}". Please specify either "ios" or "android".`);
42
+ }
43
+ }
44
+ export const fingerprintPlugin = () => (api) => {
45
+ api.registerCommand({
46
+ name: 'fingerprint',
47
+ description: 'Calculate fingerprint for given platform',
48
+ action: async (path, options) => {
49
+ const fingerprintOptions = api.getFingerprintOptions();
50
+ const dir = path || api.getProjectRoot();
51
+ await nativeFingerprintCommand(dir, fingerprintOptions, options);
52
+ },
53
+ options: [
54
+ {
55
+ name: '-p, --platform <string>',
56
+ description: 'Select platform, e.g. ios or android',
57
+ },
58
+ {
59
+ name: '--raw',
60
+ description: 'Output the raw fingerprint hash for piping',
61
+ },
62
+ ],
63
+ args: [
64
+ { name: '[path]', description: 'Directory to calculate fingerprint for' },
65
+ ],
66
+ });
67
+ return {
68
+ name: 'internal_fingerprint',
69
+ description: 'Fingerprint plugin',
70
+ };
71
+ };
72
+ //# sourceMappingURL=fingerprint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../../../../src/lib/plugins/fingerprint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { ConfigOutput, PluginApi } from '@rock-js/config';
2
+ export declare const logConfig: (args: {
3
+ platform?: string;
4
+ }, ownConfig: {
5
+ platforms: ConfigOutput["platforms"];
6
+ root: ConfigOutput["root"];
7
+ }) => Promise<void>;
8
+ export declare const logConfigPlugin: (ownConfig: {
9
+ platforms: ConfigOutput["platforms"];
10
+ root: ConfigOutput["root"];
11
+ }) => (api: PluginApi) => {
12
+ name: string;
13
+ description: string;
14
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logConfig.d.ts","sourceRoot":"","sources":["../../../../src/lib/plugins/logConfig.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AA4B5D,eAAO,MAAM,SAAS,GACpB,MAAM;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,EAC3B,WAAW;IACT,SAAS,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IACrC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;CAC5B,kBAoBF,CAAC;AAEF,eAAO,MAAM,eAAe,GACzB,WAAW;IACV,SAAS,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IACrC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;CAC5B,MACA,KAAK,SAAS;;;CAmBd,CAAC"}
@@ -0,0 +1,54 @@
1
+ function isValidRNDependency(config) {
2
+ return (Object.keys(config.platforms).filter((key) => Boolean(config.platforms[key])).length !== 0);
3
+ }
4
+ function filterConfig(config) {
5
+ const filtered = { ...config };
6
+ // `react-native` is not a dependency. When loading it through community CLI it's not an issue,
7
+ // but in our case we don't install `@react-native-community/cli-platform-*` as a dependencies
8
+ // so the config.platforms key is empty, which makes autolinking treat it as a dependency.
9
+ delete filtered.dependencies['react-native'];
10
+ const dependencies = {};
11
+ Object.keys(filtered.dependencies).forEach((item) => {
12
+ if (isValidRNDependency(filtered.dependencies[item])) {
13
+ dependencies[item] = filtered.dependencies[item];
14
+ }
15
+ });
16
+ return {
17
+ ...filtered,
18
+ dependencies,
19
+ };
20
+ }
21
+ export const logConfig = async (args, ownConfig) => {
22
+ const { loadConfigAsync } = await import('@react-native-community/cli-config');
23
+ const config = await loadConfigAsync({
24
+ projectRoot: ownConfig.root,
25
+ selectedPlatform: args.platform,
26
+ });
27
+ const platforms = ownConfig.platforms && args.platform
28
+ ? { [args.platform]: ownConfig.platforms[args.platform] }
29
+ : ownConfig.platforms;
30
+ for (const platform in platforms) {
31
+ config.project[platform] = platforms[platform].autolinkingConfig.project;
32
+ }
33
+ console.log(JSON.stringify(filterConfig(config), null, 2));
34
+ };
35
+ export const logConfigPlugin = (ownConfig) => (api) => {
36
+ api.registerCommand({
37
+ name: 'config',
38
+ description: 'Output autolinking config',
39
+ action: async (args) => {
40
+ await logConfig(args, ownConfig);
41
+ },
42
+ options: [
43
+ {
44
+ name: '-p, --platform <string>',
45
+ description: 'Select platform, e.g. ios or android',
46
+ },
47
+ ],
48
+ });
49
+ return {
50
+ name: 'internal_config',
51
+ description: 'Configuration plugin',
52
+ };
53
+ };
54
+ //# sourceMappingURL=logConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logConfig.js","sourceRoot":"","sources":["../../../../src/lib/plugins/logConfig.ts"],"names":[],"mappings":"AAMA,SAAS,mBAAmB,CAAC,MAAwB;IACnD,OAAO,CACL,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAC3C,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAC/B,CAAC,MAAM,KAAK,CAAC,CACf,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,MAAc;IAClC,MAAM,QAAQ,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAC/B,+FAA+F;IAC/F,8FAA8F;IAC9F,0FAA0F;IAC1F,OAAO,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAqC,EAAE,CAAC;IAC1D,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAClD,IAAI,mBAAmB,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACrD,YAAY,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO;QACL,GAAG,QAAQ;QACX,YAAY;KACb,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAC5B,IAA2B,EAC3B,SAGC,EACD,EAAE;IACF,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CACtC,oCAAoC,CACrC,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;QACnC,WAAW,EAAE,SAAS,CAAC,IAAI;QAC3B,gBAAgB,EAAE,IAAI,CAAC,QAAQ;KAChC,CAAC,CAAC;IAEH,MAAM,SAAS,GACb,SAAS,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ;QAClC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;QACzD,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC;IAE1B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC;IAC3E,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAC1B,CAAC,SAGA,EAAE,EAAE,CACL,CAAC,GAAc,EAAE,EAAE;IACjB,GAAG,CAAC,eAAe,CAAC;QAClB,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,2BAA2B;QACxC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACrB,MAAM,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,yBAAyB;gBAC/B,WAAW,EAAE,sCAAsC;aACpD;SACF;KACF,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,sBAAsB;KACpC,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { PluginApi, PluginOutput } from '@rock-js/config';
2
+ export declare const remoteCachePlugin: () => (api: PluginApi) => PluginOutput;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remoteCache.d.ts","sourceRoot":"","sources":["../../../../src/lib/plugins/remoteCache.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAiP5D,eAAO,MAAM,iBAAiB,SAE3B,KAAK,SAAS,KAAG,YA6DjB,CAAC"}