@rock-js/tools 0.10.2 → 0.11.1

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.
@@ -18,3 +18,4 @@ export { color, colorLink } from './lib/color.js';
18
18
  export { runHermes } from './lib/hermes.js';
19
19
  export { fetchCachedBuild, handleDownloadResponse, handleUploadResponse, } from './lib/build-cache/fetchCachedBuild.js';
20
20
  export { getInfoPlist } from './lib/getInfoPlist.js';
21
+ export { getReactNativeVersion } from './lib/getReactNativeVersion.js';
package/dist/src/index.js CHANGED
@@ -18,4 +18,5 @@ export { color, colorLink } from './lib/color.js';
18
18
  export { runHermes } from './lib/hermes.js';
19
19
  export { fetchCachedBuild, handleDownloadResponse, handleUploadResponse, } from './lib/build-cache/fetchCachedBuild.js';
20
20
  export { getInfoPlist } from './lib/getInfoPlist.js';
21
+ export { getReactNativeVersion } from './lib/getReactNativeVersion.js';
21
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAChE,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sCAAsC,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAChE,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sCAAsC,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC"}
@@ -68,13 +68,13 @@ export interface RemoteBuildCache {
68
68
  * - rock-ios-simulator-debug-1234567890
69
69
  * - rock-ios-device-debug-1234567890
70
70
  */
71
- export declare function formatArtifactName({ platform, traits, root, fingerprintOptions, raw, silent, }: {
71
+ export declare function formatArtifactName({ platform, traits, root, fingerprintOptions, raw, type, }: {
72
72
  platform?: 'ios' | 'android';
73
73
  traits?: string[];
74
74
  root: string;
75
75
  fingerprintOptions: FingerprintSources;
76
76
  raw?: boolean;
77
- silent?: boolean;
77
+ type?: 'create' | 'update';
78
78
  }): Promise<string>;
79
79
  export declare function getLocalArtifactPath(artifactName: string): string;
80
80
  export declare function getLocalBinaryPath(artifactPath: string): string | null;
@@ -3,7 +3,6 @@ import path from 'node:path';
3
3
  import { color } from '../color.js';
4
4
  import { nativeFingerprint } from '../fingerprint/index.js';
5
5
  import { isInteractive } from '../isInteractive.js';
6
- import logger from '../logger.js';
7
6
  import { getCacheRootPath } from '../project.js';
8
7
  import { spinner } from '../prompts.js';
9
8
  export const BUILD_CACHE_DIR = 'remote-build';
@@ -13,7 +12,7 @@ export const BUILD_CACHE_DIR = 'remote-build';
13
12
  * - rock-ios-simulator-debug-1234567890
14
13
  * - rock-ios-device-debug-1234567890
15
14
  */
16
- export async function formatArtifactName({ platform, traits, root, fingerprintOptions, raw, silent, }) {
15
+ export async function formatArtifactName({ platform, traits, root, fingerprintOptions, raw, type, }) {
17
16
  if (!platform || !traits) {
18
17
  return '';
19
18
  }
@@ -24,16 +23,15 @@ export async function formatArtifactName({ platform, traits, root, fingerprintOp
24
23
  });
25
24
  return `rock-${platform}-${traits.join('-')}-${hash}`;
26
25
  }
27
- const loader = spinner({ silent });
28
- loader.start('Calculating project fingerprint');
26
+ const startMessage = type === 'update' ? 'Updating' : 'Calculating';
27
+ const stopMessage = type === 'update' ? 'Updated' : 'Calculated';
28
+ const loader = spinner();
29
+ loader.start(`${startMessage} project fingerprint`);
29
30
  const { hash } = await nativeFingerprint(root, {
30
31
  ...fingerprintOptions,
31
32
  platform,
32
33
  });
33
- loader.stop(`Calculated project fingerprint: ${color.bold(color.magenta(hash))}`);
34
- if (silent) {
35
- logger.debug(`Calculated project fingerprint: ${hash}`);
36
- }
34
+ loader.stop(`${stopMessage} project fingerprint: ${color.bold(color.magenta(hash))}`);
37
35
  return `rock-${platform}-${traits.join('-')}-${hash}`;
38
36
  }
39
37
  export function getLocalArtifactPath(artifactName) {
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../src/lib/build-cache/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,CAAC,MAAM,eAAe,GAAG,cAAc,CAAC;AAqF9C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EACvC,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,kBAAkB,EAClB,GAAG,EACH,MAAM,GAQP;IACC,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;QAC5B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE;YAC7C,GAAG,kBAAkB;YACrB,QAAQ;SACT,CAAC,CAAC;QACH,OAAO,QAAQ,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IACxD,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACnC,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAChD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE;QAC7C,GAAG,kBAAkB;QACrB,QAAQ;KACT,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,CACT,mCAAmC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CACrE,CAAC;IACF,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,mCAAmC,IAAI,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,QAAQ,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,YAAoB;IACvD,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,YAAoB;IACrD,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAC3C,8CAA8C;IAC9C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjE,CAAC"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../src/lib/build-cache/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,CAAC,MAAM,eAAe,GAAG,cAAc,CAAC;AAqF9C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EACvC,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,kBAAkB,EAClB,GAAG,EACH,IAAI,GAQL;IACC,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;QAC5B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE;YAC7C,GAAG,kBAAkB;YACrB,QAAQ;SACT,CAAC,CAAC;QACH,OAAO,QAAQ,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IACxD,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC;IACpE,MAAM,WAAW,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;IAEjE,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC;IACzB,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,sBAAsB,CAAC,CAAC;IACpD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE;QAC7C,GAAG,kBAAkB;QACrB,QAAQ;KACT,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,CACT,GAAG,WAAW,yBAAyB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CACzE,CAAC;IACF,OAAO,QAAQ,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,YAAoB;IACvD,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,YAAoB;IACrD,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAC3C,8CAA8C;IAC9C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjE,CAAC"}
@@ -1,10 +1,11 @@
1
1
  import { type FingerprintSources } from '../fingerprint/index.js';
2
2
  import type { RemoteBuildCache } from './common.js';
3
- export declare function getBinaryPath({ artifactName, binaryPathFlag, localFlag, remoteCacheProvider, fingerprintOptions, sourceDir, }: {
3
+ export declare function getBinaryPath({ artifactName, binaryPathFlag, localFlag, remoteCacheProvider, fingerprintOptions, sourceDir, platformName, }: {
4
4
  artifactName: string;
5
5
  binaryPathFlag?: string;
6
6
  localFlag?: boolean;
7
7
  remoteCacheProvider: null | (() => RemoteBuildCache) | undefined;
8
8
  fingerprintOptions: FingerprintSources;
9
9
  sourceDir: string;
10
+ platformName: string;
10
11
  }): Promise<string | undefined>;
@@ -1,10 +1,12 @@
1
+ import path from 'node:path';
1
2
  import { color, colorLink } from '../color.js';
2
- import { DEFAULT_IGNORE_PATHS, EXPO_DEFAULT_IGNORE_PATHS, } from '../fingerprint/index.js';
3
+ import { getAllIgnorePaths } from '../fingerprint/ignorePaths.js';
3
4
  import logger from '../logger.js';
5
+ import { getProjectRoot } from '../project.js';
4
6
  import { spawn } from '../spawn.js';
5
7
  import { fetchCachedBuild } from './fetchCachedBuild.js';
6
8
  import { getLocalBuildCacheBinaryPath } from './localBuildCache.js';
7
- export async function getBinaryPath({ artifactName, binaryPathFlag, localFlag, remoteCacheProvider, fingerprintOptions, sourceDir, }) {
9
+ export async function getBinaryPath({ artifactName, binaryPathFlag, localFlag, remoteCacheProvider, fingerprintOptions, sourceDir, platformName, }) {
8
10
  // 1. First check if the binary path is provided
9
11
  let binaryPath = binaryPathFlag;
10
12
  // 2. If not, check if the local build is requested
@@ -28,14 +30,14 @@ export async function getBinaryPath({ artifactName, binaryPathFlag, localFlag, r
28
30
  logger.warn(`Remote Cache: Failed to fetch cached build for ${color.bold(artifactName)}.
29
31
  Cause: ${message}${cause ? `\n${cause.toString()}` : ''}
30
32
  Read more: ${colorLink('https://rockjs.dev/docs/configuration#remote-cache-configuration')}`);
31
- await warnIgnoredFiles(fingerprintOptions, sourceDir);
33
+ await warnIgnoredFiles(fingerprintOptions, platformName, sourceDir);
32
34
  logger.debug('Remote cache failure error:', error);
33
35
  logger.info('Continuing with local build');
34
36
  }
35
37
  }
36
38
  return binaryPath;
37
39
  }
38
- async function warnIgnoredFiles(fingerprintOptions, sourceDir) {
40
+ async function warnIgnoredFiles(fingerprintOptions, platformName, sourceDir) {
39
41
  // @todo unify git helpers from create-app
40
42
  try {
41
43
  await spawn('git', ['rev-parse', '--is-inside-work-tree'], {
@@ -47,10 +49,11 @@ async function warnIgnoredFiles(fingerprintOptions, sourceDir) {
47
49
  // Not a git repository, skip the git clean check
48
50
  return;
49
51
  }
52
+ const projectRoot = getProjectRoot();
50
53
  const ignorePaths = [
51
54
  ...(fingerprintOptions?.ignorePaths ?? []),
52
- ...EXPO_DEFAULT_IGNORE_PATHS,
53
- ...DEFAULT_IGNORE_PATHS,
55
+ // git expects relative paths
56
+ ...getAllIgnorePaths(platformName, path.relative(projectRoot, sourceDir)),
54
57
  ];
55
58
  const { output } = await spawn('git', [
56
59
  'clean',
@@ -1 +1 @@
1
- {"version":3,"file":"getBinaryPath.js","sourceRoot":"","sources":["../../../../src/lib/build-cache/getBinaryPath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EACL,oBAAoB,EACpB,yBAAyB,GAE1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AAEpE,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAClC,YAAY,EACZ,cAAc,EACd,SAAS,EACT,mBAAmB,EACnB,kBAAkB,EAClB,SAAS,GAQV;IACC,gDAAgD;IAChD,IAAI,UAAU,GAAG,cAAc,CAAC;IAEhC,mDAAmD;IACnD,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9B,UAAU,GAAG,4BAA4B,CAAC,YAAY,CAAC,CAAC;IAC1D,CAAC;IAED,oDAAoD;IACpD,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC;gBACzC,YAAY;gBACZ,mBAAmB;aACpB,CAAC,CAAC;YACH,IAAI,WAAW,EAAE,CAAC;gBAChB,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC;YACtC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAI,KAAmB,CAAC,OAAO,CAAC;YAC7C,MAAM,KAAK,GAAI,KAAmB,CAAC,KAAK,CAAC;YACzC,MAAM,CAAC,IAAI,CACT,kDAAkD,KAAK,CAAC,IAAI,CAC1D,YAAY,CACb;SACA,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;aAC1C,SAAS,CACZ,kEAAkE,CACnE,EAAE,CACJ,CAAC;YACF,MAAM,gBAAgB,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;YACtD,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;YACnD,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,kBAAsC,EACtC,SAAiB;IAEjB,0CAA0C;IAC1C,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,uBAAuB,CAAC,EAAE;YACzD,KAAK,EAAE,QAAQ;YACf,GAAG,EAAE,SAAS;SACf,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,iDAAiD;QACjD,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG;QAClB,GAAG,CAAC,kBAAkB,EAAE,WAAW,IAAI,EAAE,CAAC;QAC1C,GAAG,yBAAyB;QAC5B,GAAG,oBAAoB;KACxB,CAAC;IACF,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE;QACpC,OAAO;QACP,MAAM;QACN,WAAW;QACX,SAAS;QACT,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;KACpD,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,MAAM;SACxB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;SAChD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;IAEjC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC;EACd,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;mCAC7B,KAAK,CAAC,IAAI,CACvC,yBAAyB,CAC1B,OAAO,SAAS,CAAC,iBAAiB,CAAC;aAC3B,SAAS,CAChB,qEAAqE,CACtE,EAAE,CAAC,CAAC;IACP,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"getBinaryPath.js","sourceRoot":"","sources":["../../../../src/lib/build-cache/getBinaryPath.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function getDefaultIgnorePaths(): string[];
2
+ export declare function getPlatformDirIgnorePaths(platform: string, sourceDir: string): string[];
3
+ export declare function getAllIgnorePaths(platform: string, sourceDir: string): string[];
@@ -0,0 +1,56 @@
1
+ // export const FINGERPRINT_IGNORE_FILENAME = '.fingerprintignore'. TODO: should we include this?
2
+ function getAndroidIgnorePaths(sourceDir) {
3
+ return [
4
+ `${sourceDir}/app/.gradle`,
5
+ `${sourceDir}/build`,
6
+ `${sourceDir}/**/build`,
7
+ `${sourceDir}/**/.cxx`,
8
+ `${sourceDir}/.kotlin`,
9
+ `${sourceDir}/local.properties`,
10
+ `${sourceDir}/.idea`,
11
+ `${sourceDir}/.gradle`,
12
+ `${sourceDir}/gradlew.bat`, // Often has different line endings, thus we have to ignore it
13
+ // Android annotations - revisit
14
+ '**/android-annotation/build',
15
+ '**/android-annotation/.cxx',
16
+ '**/android-annotation/.gradle',
17
+ '**/android-annotation-processor/build',
18
+ '**/android-annotation-processor/.cxx',
19
+ '**/android-annotation-processor/.gradle',
20
+ // Android gradle plugins
21
+ '**/*-gradle-plugin/build',
22
+ '**/*-gradle-plugin/.cxx',
23
+ '**/*-gradle-plugin/.gradle',
24
+ ];
25
+ }
26
+ function getIOSIgnorePaths(sourceDir) {
27
+ return [
28
+ `${sourceDir}/build`,
29
+ `${sourceDir}/.xcode.env.local`,
30
+ `${sourceDir}/**/project.xcworkspace`,
31
+ `${sourceDir}/*.xcworkspace/xcuserdata`,
32
+ `${sourceDir}/DerivedData`,
33
+ `${sourceDir}/Pods`,
34
+ `${sourceDir}/tmp.xcconfig`, // added by react-native-config,
35
+ `${sourceDir}/**/*.xcworkspace`,
36
+ ];
37
+ }
38
+ export function getDefaultIgnorePaths() {
39
+ return ['**/.DS_Store'];
40
+ }
41
+ export function getPlatformDirIgnorePaths(platform, sourceDir) {
42
+ if (platform === 'android') {
43
+ return getAndroidIgnorePaths(sourceDir);
44
+ }
45
+ else if (platform === 'ios') {
46
+ return getIOSIgnorePaths(sourceDir);
47
+ }
48
+ return [];
49
+ }
50
+ export function getAllIgnorePaths(platform, sourceDir) {
51
+ return [
52
+ ...getDefaultIgnorePaths(),
53
+ ...getPlatformDirIgnorePaths(platform, sourceDir),
54
+ ];
55
+ }
56
+ //# sourceMappingURL=ignorePaths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ignorePaths.js","sourceRoot":"","sources":["../../../../src/lib/fingerprint/ignorePaths.ts"],"names":[],"mappings":"AAAA,iGAAiG;AAEjG,SAAS,qBAAqB,CAAC,SAAiB;IAC9C,OAAO;QACL,GAAG,SAAS,cAAc;QAC1B,GAAG,SAAS,QAAQ;QACpB,GAAG,SAAS,WAAW;QACvB,GAAG,SAAS,UAAU;QACtB,GAAG,SAAS,UAAU;QACtB,GAAG,SAAS,mBAAmB;QAC/B,GAAG,SAAS,QAAQ;QACpB,GAAG,SAAS,UAAU;QACtB,GAAG,SAAS,cAAc,EAAE,8DAA8D;QAE1F,gCAAgC;QAChC,6BAA6B;QAC7B,4BAA4B;QAC5B,+BAA+B;QAC/B,uCAAuC;QACvC,sCAAsC;QACtC,yCAAyC;QAEzC,yBAAyB;QACzB,0BAA0B;QAC1B,yBAAyB;QACzB,4BAA4B;KAC7B,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,SAAiB;IAC1C,OAAO;QACL,GAAG,SAAS,QAAQ;QACpB,GAAG,SAAS,mBAAmB;QAC/B,GAAG,SAAS,yBAAyB;QACrC,GAAG,SAAS,2BAA2B;QACvC,GAAG,SAAS,cAAc;QAC1B,GAAG,SAAS,OAAO;QACnB,GAAG,SAAS,eAAe,EAAE,gCAAgC;QAC7D,GAAG,SAAS,mBAAmB;KAChC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,CAAC,cAAc,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,QAAgB,EAAE,SAAiB;IAC3E,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;SAAM,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QAC9B,OAAO,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,SAAiB;IACnE,OAAO;QACL,GAAG,qBAAqB,EAAE;QAC1B,GAAG,yBAAyB,CAAC,QAAQ,EAAE,SAAS,CAAC;KAClD,CAAC;AACJ,CAAC"}
@@ -1,18 +1,14 @@
1
- import type { FingerprintSource } from '@expo/fingerprint';
2
- export { DEFAULT_IGNORE_PATHS as EXPO_DEFAULT_IGNORE_PATHS } from '@expo/fingerprint';
3
- export declare const DEFAULT_IGNORE_PATHS: string[];
1
+ import { type FingerprintResult } from 'fs-fingerprint';
4
2
  export type FingerprintSources = {
5
3
  extraSources: string[];
6
4
  ignorePaths: string[];
5
+ env: string[];
7
6
  };
8
7
  export type FingerprintOptions = {
9
8
  platform: 'ios' | 'android';
10
9
  extraSources: string[];
11
10
  ignorePaths: string[];
12
- };
13
- export type FingerprintResult = {
14
- hash: string;
15
- sources: FingerprintSource[];
11
+ env: string[];
16
12
  };
17
13
  /**
18
14
  * Calculates the fingerprint of the native parts project of the project.
@@ -1,126 +1,93 @@
1
- import crypto from 'node:crypto';
1
+ import fs from 'node:fs/promises';
2
2
  import path from 'node:path';
3
- import { createFingerprintAsync } from '@expo/fingerprint';
4
- import { RockError } from '../error.js';
5
- import logger from '../logger.js';
3
+ import { calculateFingerprint } from 'fs-fingerprint';
4
+ import { getReactNativeVersion, logger } from '../../index.js';
6
5
  import { spawn } from '../spawn.js';
7
- import { processExtraSources } from './processExtraSources.js';
8
- export { DEFAULT_IGNORE_PATHS as EXPO_DEFAULT_IGNORE_PATHS } from '@expo/fingerprint';
9
- const HASH_ALGORITHM = 'sha1';
10
- const EXCLUDED_SOURCES = [
11
- 'expoAutolinkingConfig:ios',
12
- 'expoAutolinkingConfig:android',
13
- ];
14
- export const DEFAULT_IGNORE_PATHS = [
15
- 'android/build',
16
- 'android/**/build',
17
- 'android/**/.cxx',
18
- 'android/.kotlin/**',
19
- 'ios/DerivedData',
20
- 'ios/Pods',
21
- 'ios/tmp.xcconfig', // added by react-native-config
22
- 'ios/**/*.xcworkspace',
23
- 'node_modules',
24
- 'android/local.properties',
25
- 'android/.idea',
26
- 'android/.gradle',
27
- ];
6
+ import { getDefaultIgnorePaths, getPlatformDirIgnorePaths, } from './ignorePaths.js';
28
7
  /**
29
8
  * Calculates the fingerprint of the native parts project of the project.
30
9
  */
31
10
  export async function nativeFingerprint(projectRoot, options) {
32
- const platform = options.platform;
33
- // Use stdout to avoid deprecation warnings
34
- const { stdout: autolinkingConfigString } = await spawn('rock', ['config', '-p', options.platform], { cwd: projectRoot, stdio: 'pipe', preferLocal: true });
35
- const autolinkingSources = parseAutolinkingSources({
36
- config: JSON.parse(autolinkingConfigString),
37
- reasons: ['rncoreAutolinking'],
38
- contentsId: 'rncoreAutolinkingConfig',
11
+ let autolinkingConfig;
12
+ try {
13
+ // Use stdout to avoid deprecation warnings
14
+ const { stdout: autolinkingConfigString } = await spawn('rock', ['config', '-p', options.platform], { cwd: projectRoot, stdio: 'pipe' });
15
+ autolinkingConfig = JSON.parse(autolinkingConfigString);
16
+ }
17
+ catch {
18
+ throw new Error('Failed to read autolinking config');
19
+ }
20
+ const packageJSONPath = path.join(projectRoot, 'package.json');
21
+ const packageJSON = await readPackageJSON(packageJSONPath);
22
+ const scripts = packageJSON['scripts'];
23
+ const platforms = Object.keys(autolinkingConfig.project).map((key) => {
24
+ return {
25
+ platform: key,
26
+ sourceDir: path.relative(projectRoot, autolinkingConfig.project[key].sourceDir),
27
+ };
39
28
  });
40
- const fingerprint = await createFingerprintAsync(projectRoot, {
41
- platforms: [platform],
42
- extraSources: [
43
- ...autolinkingSources,
44
- ...processExtraSources(options.extraSources, projectRoot, options.ignorePaths),
29
+ if (platforms.length === 0) {
30
+ throw new Error('No platforms found in autolinking project config');
31
+ }
32
+ const fingerprint = await calculateFingerprint(projectRoot, {
33
+ ignoreFilePath: '.gitignore',
34
+ include: [
35
+ ...platforms.map((platform) => platform.sourceDir),
36
+ ...options.extraSources.map((source) => path.isAbsolute(source) ? path.relative(projectRoot, source) : source),
37
+ ],
38
+ extraInputs: [
39
+ { key: 'scripts', json: scripts },
40
+ {
41
+ key: 'autolinkingSources',
42
+ json: parseAutolinkingSources(autolinkingConfig),
43
+ },
44
+ {
45
+ key: 'reactNativeVersion',
46
+ json: { version: getReactNativeVersion(projectRoot) },
47
+ },
48
+ ...(options.env.length > 0 ? [{ key: 'env', json: options.env }] : []),
49
+ ],
50
+ exclude: [
51
+ ...getDefaultIgnorePaths(),
52
+ ...platforms.flatMap(({ platform, sourceDir }) => getPlatformDirIgnorePaths(platform, sourceDir)),
53
+ ...(options.ignorePaths ?? []),
45
54
  ],
46
- ignorePaths: [...DEFAULT_IGNORE_PATHS, ...(options.ignorePaths ?? [])],
47
55
  });
48
- // Filter out un-relevant sources as these caused hash mismatch between local and remote builds
49
- const sources = fingerprint.sources.filter((source) => 'id' in source ? !EXCLUDED_SOURCES.includes(source.id) : true);
50
- const hash = await hashSources(sources);
51
- return { hash, sources };
56
+ return fingerprint;
52
57
  }
53
- async function hashSources(sources) {
54
- let input = '';
55
- for (const source of sources) {
56
- if (source.hash != null) {
57
- input += `${createSourceId(source)}-${source.hash}\n`;
58
- }
58
+ const readPackageJSON = async (packageJSONPath) => {
59
+ try {
60
+ const packageJSONContent = await fs.readFile(packageJSONPath, 'utf-8');
61
+ return JSON.parse(packageJSONContent);
59
62
  }
60
- const hasher = crypto.createHash(HASH_ALGORITHM);
61
- hasher.update(input);
62
- return hasher.digest('hex');
63
- }
64
- function createSourceId(source) {
65
- switch (source.type) {
66
- case 'contents':
67
- return source.id;
68
- case 'file':
69
- return source.filePath;
70
- case 'dir':
71
- return source.filePath;
72
- default:
73
- // @ts-expect-error: we intentionally want to detect invalid types
74
- throw new RockError(`Unsupported source type: ${source.type}`);
63
+ catch {
64
+ throw new Error(`Failed to read package.json at: ${packageJSONPath}`);
75
65
  }
76
- }
66
+ };
77
67
  function toPosixPath(filePath) {
78
68
  return filePath.replace(/\\/g, '/');
79
69
  }
80
- function parseAutolinkingSources({ config, reasons, contentsId, }) {
81
- const results = [];
70
+ function parseAutolinkingSources(config) {
82
71
  const { root } = config;
83
- const autolinkingConfig = {};
84
72
  for (const [depName, depData] of Object.entries(config.dependencies)) {
85
73
  try {
86
74
  stripAutolinkingAbsolutePaths(depData, root);
87
- const filePath = toPosixPath(depData.root);
88
- results.push({ type: 'dir', filePath, reasons });
89
- autolinkingConfig[depName] = depData;
90
75
  }
91
76
  catch (e) {
92
77
  logger.debug(`Error adding react-native core autolinking - ${depName}.\n${e}`);
93
78
  }
94
79
  }
95
- results.push({
96
- type: 'contents',
97
- id: contentsId,
98
- contents: JSON.stringify(autolinkingConfig),
99
- reasons,
100
- });
101
- return results;
80
+ return config.dependencies;
102
81
  }
103
82
  function stripAutolinkingAbsolutePaths(dependency, root) {
104
83
  const dependencyRoot = dependency.root;
105
- const cmakeDepRoot = process.platform === 'win32' ? toPosixPath(dependencyRoot) : dependencyRoot;
84
+ const posixDependencyRoot = toPosixPath(dependencyRoot);
106
85
  dependency.root = toPosixPath(path.relative(root, dependencyRoot));
107
86
  for (const platformData of Object.values(dependency.platforms)) {
108
87
  for (const [key, value] of Object.entries(platformData ?? {})) {
109
- let newValue;
110
- if (process.platform === 'win32' &&
111
- ['cmakeListsPath', 'cxxModuleCMakeListsPath'].includes(key)) {
112
- // CMake paths on Windows are serving in slashes,
113
- // we have to check startsWith with the same slashes.
114
- // @todo revisit windows logic
115
- newValue = value?.startsWith?.(cmakeDepRoot)
116
- ? toPosixPath(path.relative(root, value))
117
- : value;
118
- }
119
- else {
120
- newValue = value?.startsWith?.(dependencyRoot)
121
- ? toPosixPath(path.relative(root, value))
122
- : value;
123
- }
88
+ const newValue = value?.startsWith?.(posixDependencyRoot)
89
+ ? toPosixPath(path.relative(root, value))
90
+ : value;
124
91
  platformData[key] = newValue;
125
92
  }
126
93
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/fingerprint/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/fingerprint/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function getReactNativeVersion(root: string): any;
@@ -0,0 +1,13 @@
1
+ import fs from 'node:fs';
2
+ import { createRequire } from 'node:module';
3
+ import path from 'node:path';
4
+ export function getReactNativeVersion(root) {
5
+ try {
6
+ const require = createRequire(import.meta.url);
7
+ return JSON.parse(fs.readFileSync(path.join(require.resolve('react-native', { paths: [root] }), '..', 'package.json'), 'utf-8')).version;
8
+ }
9
+ catch {
10
+ return 'unknown';
11
+ }
12
+ }
13
+ //# sourceMappingURL=getReactNativeVersion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getReactNativeVersion.js","sourceRoot":"","sources":["../../../src/lib/getReactNativeVersion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,KAAK,CACf,EAAE,CAAC,YAAY,CACb,IAAI,CAAC,IAAI,CACP,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAClD,IAAI,EACJ,cAAc,CACf,EACD,OAAO,CACR,CACF,CAAC,OAAO,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rock-js/tools",
3
- "version": "0.10.2",
3
+ "version": "0.11.1",
4
4
  "type": "module",
5
5
  "types": "./dist/src/index.d.ts",
6
6
  "exports": {
@@ -18,11 +18,11 @@
18
18
  },
19
19
  "dependencies": {
20
20
  "@clack/prompts": "^0.11.0",
21
- "@expo/fingerprint": "^0.11.6",
22
21
  "@types/adm-zip": "^0.5.7",
23
22
  "adm-zip": "^0.5.16",
24
23
  "appdirsjs": "^1.2.7",
25
24
  "fast-glob": "^3.3.2",
25
+ "fs-fingerprint": "^0.7.0",
26
26
  "is-unicode-supported": "^2.1.0",
27
27
  "nano-spawn": "^0.2.0",
28
28
  "picocolors": "^1.1.1",
@@ -31,7 +31,7 @@
31
31
  "tslib": "^2.3.0"
32
32
  },
33
33
  "devDependencies": {
34
- "@rock-js/test-helpers": "^0.10.2"
34
+ "@rock-js/test-helpers": "^0.11.1"
35
35
  },
36
36
  "publishConfig": {
37
37
  "access": "public"
@@ -1,9 +0,0 @@
1
- import type { HashSourceContents, HashSourceDir } from '@expo/fingerprint';
2
- /**
3
- * Processes extra source files and directories for fingerprinting.
4
- * @param extraSources Array of file paths, directory paths, or glob patterns
5
- * @param projectRoot Root directory of the project
6
- * @param ignorePaths Optional array of paths to ignore
7
- * @returns Array of processed sources with their contents or directory information
8
- */
9
- export declare function processExtraSources(extraSources: string[], projectRoot: string, ignorePaths?: string[]): (HashSourceDir | HashSourceContents)[];
@@ -1,76 +0,0 @@
1
- import fs from 'node:fs';
2
- import path from 'node:path';
3
- import glob from 'fast-glob';
4
- import logger from '../logger.js';
5
- /**
6
- * Processes extra source files and directories for fingerprinting.
7
- * @param extraSources Array of file paths, directory paths, or glob patterns
8
- * @param projectRoot Root directory of the project
9
- * @param ignorePaths Optional array of paths to ignore
10
- * @returns Array of processed sources with their contents or directory information
11
- */
12
- export function processExtraSources(extraSources, projectRoot, ignorePaths) {
13
- const processedSources = [];
14
- for (const source of extraSources) {
15
- try {
16
- const isGlobPattern = glob.isDynamicPattern(source);
17
- if (isGlobPattern) {
18
- const matches = glob.sync(source, {
19
- cwd: projectRoot,
20
- ignore: ignorePaths ?? [],
21
- });
22
- for (const match of matches) {
23
- const absolutePath = path.join(projectRoot, match);
24
- if (fs.existsSync(absolutePath)) {
25
- const stats = fs.statSync(absolutePath);
26
- if (stats.isDirectory()) {
27
- processedSources.push({
28
- type: 'dir',
29
- filePath: absolutePath,
30
- reasons: ['custom-user-config'],
31
- });
32
- }
33
- else {
34
- processedSources.push({
35
- type: 'contents',
36
- id: absolutePath,
37
- contents: fs.readFileSync(absolutePath, 'utf-8'),
38
- reasons: ['custom-user-config'],
39
- });
40
- }
41
- }
42
- }
43
- continue;
44
- }
45
- const absolutePath = path.isAbsolute(source)
46
- ? source
47
- : path.join(projectRoot, source);
48
- if (!fs.existsSync(absolutePath)) {
49
- logger.warn(`Extra source "${absolutePath}" does not exist, skipping...`);
50
- continue;
51
- }
52
- const stats = fs.statSync(absolutePath);
53
- const relativePath = path.relative(projectRoot, absolutePath);
54
- if (stats.isDirectory()) {
55
- processedSources.push({
56
- type: 'dir',
57
- filePath: relativePath,
58
- reasons: ['custom-user-config'],
59
- });
60
- }
61
- else {
62
- processedSources.push({
63
- type: 'contents',
64
- id: relativePath,
65
- contents: fs.readFileSync(absolutePath, 'utf-8'),
66
- reasons: ['custom-user-config'],
67
- });
68
- }
69
- }
70
- catch (error) {
71
- logger.debug(`Error processing extra source "${source}": ${error}`);
72
- }
73
- }
74
- return processedSources;
75
- }
76
- //# sourceMappingURL=processExtraSources.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"processExtraSources.js","sourceRoot":"","sources":["../../../../src/lib/fingerprint/processExtraSources.ts"],"names":[],"mappings":"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"}