@rock-js/tools 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.
- package/README.md +7 -0
- package/dist/src/index.d.ts +19 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +20 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/lib/build-cache/common.d.ts +79 -0
- package/dist/src/lib/build-cache/common.d.ts.map +1 -0
- package/dist/src/lib/build-cache/common.js +44 -0
- package/dist/src/lib/build-cache/common.js.map +1 -0
- package/dist/src/lib/build-cache/fetchCachedBuild.d.ts +12 -0
- package/dist/src/lib/build-cache/fetchCachedBuild.d.ts.map +1 -0
- package/dist/src/lib/build-cache/fetchCachedBuild.js +128 -0
- package/dist/src/lib/build-cache/fetchCachedBuild.js.map +1 -0
- package/dist/src/lib/build-cache/getBinaryPath.d.ts +10 -0
- package/dist/src/lib/build-cache/getBinaryPath.d.ts.map +1 -0
- package/dist/src/lib/build-cache/getBinaryPath.js +60 -0
- package/dist/src/lib/build-cache/getBinaryPath.js.map +1 -0
- package/dist/src/lib/build-cache/localBuildCache.d.ts +8 -0
- package/dist/src/lib/build-cache/localBuildCache.d.ts.map +1 -0
- package/dist/src/lib/build-cache/localBuildCache.js +50 -0
- package/dist/src/lib/build-cache/localBuildCache.js.map +1 -0
- package/dist/src/lib/cacheManager.d.ts +15 -0
- package/dist/src/lib/cacheManager.d.ts.map +1 -0
- package/dist/src/lib/cacheManager.js +63 -0
- package/dist/src/lib/cacheManager.js.map +1 -0
- package/dist/src/lib/color.d.ts +3 -0
- package/dist/src/lib/color.d.ts.map +1 -0
- package/dist/src/lib/color.js +6 -0
- package/dist/src/lib/color.js.map +1 -0
- package/dist/src/lib/dev-server/findDevServerPort.d.ts +4 -0
- package/dist/src/lib/dev-server/findDevServerPort.d.ts.map +1 -0
- package/dist/src/lib/dev-server/findDevServerPort.js +27 -0
- package/dist/src/lib/dev-server/findDevServerPort.js.map +1 -0
- package/dist/src/lib/dev-server/getDevMiddleware.d.ts +1 -0
- package/dist/src/lib/dev-server/getDevMiddleware.js +10 -0
- package/dist/src/lib/dev-server/getDevMiddleware.js.map +1 -0
- package/dist/src/lib/dev-server/getNextPort.d.ts +11 -0
- package/dist/src/lib/dev-server/getNextPort.d.ts.map +1 -0
- package/dist/src/lib/dev-server/getNextPort.js +22 -0
- package/dist/src/lib/dev-server/getNextPort.js.map +1 -0
- package/dist/src/lib/dev-server/getReactNativeCommunityCliPlugin.d.ts +1 -0
- package/dist/src/lib/dev-server/getReactNativeCommunityCliPlugin.js +5 -0
- package/dist/src/lib/dev-server/getReactNativeCommunityCliPlugin.js.map +1 -0
- package/dist/src/lib/dev-server/getReactNativeCommunityCliServerApi.d.ts +1 -0
- package/dist/src/lib/dev-server/getReactNativeCommunityCliServerApi.js +8 -0
- package/dist/src/lib/dev-server/getReactNativeCommunityCliServerApi.js.map +1 -0
- package/dist/src/lib/dev-server/getReactNativeCommunityDevServerApi.d.ts +1 -0
- package/dist/src/lib/dev-server/getReactNativeCommunityDevServerApi.js +8 -0
- package/dist/src/lib/dev-server/getReactNativeCommunityDevServerApi.js.map +1 -0
- package/dist/src/lib/dev-server/handlePortUnavailable.d.ts +4 -0
- package/dist/src/lib/dev-server/handlePortUnavailable.d.ts.map +1 -0
- package/dist/src/lib/dev-server/handlePortUnavailable.js +33 -0
- package/dist/src/lib/dev-server/handlePortUnavailable.js.map +1 -0
- package/dist/src/lib/dev-server/isDevServerRunning.d.ts +13 -0
- package/dist/src/lib/dev-server/isDevServerRunning.d.ts.map +1 -0
- package/dist/src/lib/dev-server/isDevServerRunning.js +29 -0
- package/dist/src/lib/dev-server/isDevServerRunning.js.map +1 -0
- package/dist/src/lib/dev-server/logAlreadyRunningBundler.d.ts +1 -0
- package/dist/src/lib/dev-server/logAlreadyRunningBundler.d.ts.map +1 -0
- package/dist/src/lib/dev-server/logAlreadyRunningBundler.js +5 -0
- package/dist/src/lib/dev-server/logAlreadyRunningBundler.js.map +1 -0
- package/dist/src/lib/env.d.ts +2 -0
- package/dist/src/lib/env.d.ts.map +1 -0
- package/dist/src/lib/env.js +11 -0
- package/dist/src/lib/env.js.map +1 -0
- package/dist/src/lib/error.d.ts +6 -0
- package/dist/src/lib/error.d.ts.map +1 -0
- package/dist/src/lib/error.js +11 -0
- package/dist/src/lib/error.js.map +1 -0
- package/dist/src/lib/fingerprint/index.d.ts +20 -0
- package/dist/src/lib/fingerprint/index.d.ts.map +1 -0
- package/dist/src/lib/fingerprint/index.js +128 -0
- package/dist/src/lib/fingerprint/index.js.map +1 -0
- package/dist/src/lib/fingerprint/processExtraSources.d.ts +9 -0
- package/dist/src/lib/fingerprint/processExtraSources.d.ts.map +1 -0
- package/dist/src/lib/fingerprint/processExtraSources.js +76 -0
- package/dist/src/lib/fingerprint/processExtraSources.js.map +1 -0
- package/dist/src/lib/hermes.d.ts +4 -0
- package/dist/src/lib/hermes.d.ts.map +1 -0
- package/dist/src/lib/hermes.js +141 -0
- package/dist/src/lib/hermes.js.map +1 -0
- package/dist/src/lib/isInteractive.d.ts +8 -0
- package/dist/src/lib/isInteractive.d.ts.map +1 -0
- package/dist/src/lib/isInteractive.js +10 -0
- package/dist/src/lib/isInteractive.js.map +1 -0
- package/dist/src/lib/logger.d.ts +11 -0
- package/dist/src/lib/logger.d.ts.map +1 -0
- package/dist/src/lib/logger.js +58 -0
- package/dist/src/lib/logger.js.map +1 -0
- package/dist/src/lib/parse-args.d.ts +1 -0
- package/dist/src/lib/parse-args.d.ts.map +1 -0
- package/dist/src/lib/parse-args.js +5 -0
- package/dist/src/lib/parse-args.js.map +1 -0
- package/dist/src/lib/path.d.ts +4 -0
- package/dist/src/lib/path.d.ts.map +1 -0
- package/dist/src/lib/path.js +36 -0
- package/dist/src/lib/path.js.map +1 -0
- package/dist/src/lib/project.d.ts +9 -0
- package/dist/src/lib/project.d.ts.map +1 -0
- package/dist/src/lib/project.js +33 -0
- package/dist/src/lib/project.js.map +1 -0
- package/dist/src/lib/prompts.d.ts +25 -0
- package/dist/src/lib/prompts.d.ts.map +1 -0
- package/dist/src/lib/prompts.js +106 -0
- package/dist/src/lib/prompts.js.map +1 -0
- package/dist/src/lib/spawn.d.ts +4 -0
- package/dist/src/lib/spawn.d.ts.map +1 -0
- package/dist/src/lib/spawn.js +43 -0
- package/dist/src/lib/spawn.js.map +1 -0
- package/package.json +39 -0
package/README.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export * from './lib/prompts.js';
|
|
2
|
+
export * from './lib/env.js';
|
|
3
|
+
export * from './lib/error.js';
|
|
4
|
+
export { default as logger } from './lib/logger.js';
|
|
5
|
+
export * from './lib/fingerprint/index.js';
|
|
6
|
+
export { default as cacheManager } from './lib/cacheManager.js';
|
|
7
|
+
export * from './lib/parse-args.js';
|
|
8
|
+
export * from './lib/path.js';
|
|
9
|
+
export * from './lib/project.js';
|
|
10
|
+
export * from './lib/build-cache/common.js';
|
|
11
|
+
export * from './lib/build-cache/localBuildCache.js';
|
|
12
|
+
export { getBinaryPath } from './lib/build-cache/getBinaryPath.js';
|
|
13
|
+
export { findDevServerPort } from './lib/dev-server/findDevServerPort.js';
|
|
14
|
+
export { isDevServerRunning } from './lib/dev-server/isDevServerRunning.js';
|
|
15
|
+
export { isInteractive } from './lib/isInteractive.js';
|
|
16
|
+
export { spawn, SubprocessError } from './lib/spawn.js';
|
|
17
|
+
export { color, colorLink } from './lib/color.js';
|
|
18
|
+
export { runHermes } from './lib/hermes.js';
|
|
19
|
+
export { fetchCachedBuild, handleDownloadResponse, handleUploadResponse, } from './lib/build-cache/fetchCachedBuild.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","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,GACvB,MAAM,uCAAuC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export * from './lib/prompts.js';
|
|
2
|
+
export * from './lib/env.js';
|
|
3
|
+
export * from './lib/error.js';
|
|
4
|
+
export { default as logger } from './lib/logger.js';
|
|
5
|
+
export * from './lib/fingerprint/index.js';
|
|
6
|
+
export { default as cacheManager } from './lib/cacheManager.js';
|
|
7
|
+
export * from './lib/parse-args.js';
|
|
8
|
+
export * from './lib/path.js';
|
|
9
|
+
export * from './lib/project.js';
|
|
10
|
+
export * from './lib/build-cache/common.js';
|
|
11
|
+
export * from './lib/build-cache/localBuildCache.js';
|
|
12
|
+
export { getBinaryPath } from './lib/build-cache/getBinaryPath.js';
|
|
13
|
+
export { findDevServerPort } from './lib/dev-server/findDevServerPort.js';
|
|
14
|
+
export { isDevServerRunning } from './lib/dev-server/isDevServerRunning.js';
|
|
15
|
+
export { isInteractive } from './lib/isInteractive.js';
|
|
16
|
+
export { spawn, SubprocessError } from './lib/spawn.js';
|
|
17
|
+
export { color, colorLink } from './lib/color.js';
|
|
18
|
+
export { runHermes } from './lib/hermes.js';
|
|
19
|
+
export { fetchCachedBuild, handleDownloadResponse, handleUploadResponse, } from './lib/build-cache/fetchCachedBuild.js';
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { FingerprintSources } from '../fingerprint/index.js';
|
|
2
|
+
export declare const BUILD_CACHE_DIR = "remote-build";
|
|
3
|
+
export type SupportedRemoteCacheProviders = 'github-actions';
|
|
4
|
+
export type RemoteArtifact = {
|
|
5
|
+
name: string;
|
|
6
|
+
url: string;
|
|
7
|
+
id?: string;
|
|
8
|
+
};
|
|
9
|
+
export type LocalArtifact = {
|
|
10
|
+
name: string;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Interface for implementing remote build cache providers.
|
|
14
|
+
* Remote cache providers allow storing and retrieving native build artifacts (e.g. APK, IPA)
|
|
15
|
+
* from remote storage like S3, GitHub Artifacts etc.
|
|
16
|
+
*/
|
|
17
|
+
export interface RemoteBuildCache {
|
|
18
|
+
/** Unique identifier for this cache provider, will be displayed in logs */
|
|
19
|
+
name: string;
|
|
20
|
+
/**
|
|
21
|
+
* List available artifacts matching the given name pattern
|
|
22
|
+
* @param artifactName - Passed after fingerprinting the build, e.g. `rock-android-debug-1234567890` for android in debug variant
|
|
23
|
+
* @param limit - Optional maximum number of artifacts to return
|
|
24
|
+
* @returns Array of matching remote artifacts, or empty array if none found
|
|
25
|
+
*/
|
|
26
|
+
list({ artifactName, limit, }: {
|
|
27
|
+
artifactName: string | undefined;
|
|
28
|
+
limit?: number;
|
|
29
|
+
}): Promise<RemoteArtifact[]>;
|
|
30
|
+
/**
|
|
31
|
+
* Download a remote artifact to local storage
|
|
32
|
+
* @param artifactName - Name of the artifact to download, e.g. `rock-android-debug-1234567890` for android in debug variant
|
|
33
|
+
* @returns Response object from fetch, which will be used to download the artifact
|
|
34
|
+
*/
|
|
35
|
+
download({ artifactName }: {
|
|
36
|
+
artifactName: string;
|
|
37
|
+
}): Promise<Response>;
|
|
38
|
+
/**
|
|
39
|
+
* Delete a remote artifact
|
|
40
|
+
* @param artifactName - Name of the artifact to delete, e.g. `rock-android-debug-1234567890` for android in debug variant
|
|
41
|
+
* @param limit - Optional maximum number of artifacts to delete
|
|
42
|
+
* @param skipLatest - Optional flag to skip the latest artifact, helpful when deleting all but the latest artifact
|
|
43
|
+
* @returns Array of deleted artifacts
|
|
44
|
+
* @throws {Error} Throws if artifact is not found or deletion fails
|
|
45
|
+
*/
|
|
46
|
+
delete({ artifactName, limit, skipLatest, }: {
|
|
47
|
+
artifactName: string;
|
|
48
|
+
limit?: number;
|
|
49
|
+
skipLatest?: boolean;
|
|
50
|
+
}): Promise<RemoteArtifact[]>;
|
|
51
|
+
/**
|
|
52
|
+
* Upload a local artifact stored in build cache to remote storage
|
|
53
|
+
* @param artifactName - Name of the artifact to upload, e.g. `rock-android-debug-1234567890` for android in debug variant
|
|
54
|
+
* @param uploadArtifactName - Name of the artifact to upload, e.g. `ad-hoc/rock-ios-device-Release-1234567890/YourApp.ipa` for ad-hoc distribution
|
|
55
|
+
* @returns Remote artifact info with response function for upload control
|
|
56
|
+
* @throws {Error} Throws if upload fails
|
|
57
|
+
*/
|
|
58
|
+
upload({ artifactName, uploadArtifactName, }: {
|
|
59
|
+
artifactName: string;
|
|
60
|
+
uploadArtifactName?: string;
|
|
61
|
+
}): Promise<RemoteArtifact & {
|
|
62
|
+
getResponse: (buffer: Buffer | ((baseUrl: string) => Buffer), contentType?: string) => Response;
|
|
63
|
+
}>;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Used formats:
|
|
67
|
+
* - rock-android-debug-1234567890
|
|
68
|
+
* - rock-ios-simulator-debug-1234567890
|
|
69
|
+
* - rock-ios-device-debug-1234567890
|
|
70
|
+
*/
|
|
71
|
+
export declare function formatArtifactName({ platform, traits, root, fingerprintOptions, raw, }: {
|
|
72
|
+
platform?: 'ios' | 'android';
|
|
73
|
+
traits?: string[];
|
|
74
|
+
root: string;
|
|
75
|
+
fingerprintOptions: FingerprintSources;
|
|
76
|
+
raw?: boolean;
|
|
77
|
+
}): Promise<string>;
|
|
78
|
+
export declare function getLocalArtifactPath(artifactName: string): string;
|
|
79
|
+
export declare function getLocalBinaryPath(artifactPath: string): string | null;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../src/lib/build-cache/common.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAMlE,eAAO,MAAM,eAAe,iBAAiB,CAAC;AAE9C,MAAM,MAAM,6BAA6B,GAAG,gBAAgB,CAAC;AAE7D,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IAEb;;;;;OAKG;IACH,IAAI,CAAC,EACH,YAAY,EACZ,KAAK,GACN,EAAE;QACD,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;QACjC,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAE9B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,YAAY,EAAE,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAExE;;;;;;;OAOG;IACH,MAAM,CAAC,EACL,YAAY,EACZ,KAAK,EACL,UAAU,GACX,EAAE;QACD,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAE9B;;;;;;OAMG;IACH,MAAM,CAAC,EACL,YAAY,EACZ,MAAM,GACP,EAAE;QACD,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAE5B;;;;;;;OAOG;IACH,YAAY,CAAC,CAAC,EACZ,YAAY,EACZ,UAAU,EACV,KAAK,GACN,EAAE;QACD,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,EACvC,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,kBAAkB,EAClB,GAAG,GACJ,EAAE;IACD,QAAQ,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBlB;AAED,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,UAExD;AAED,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,iBAKtD"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { color } from '../color.js';
|
|
4
|
+
import { nativeFingerprint } from '../fingerprint/index.js';
|
|
5
|
+
import { isInteractive } from '../isInteractive.js';
|
|
6
|
+
import { getCacheRootPath } from '../project.js';
|
|
7
|
+
import { spinner } from '../prompts.js';
|
|
8
|
+
export const BUILD_CACHE_DIR = 'remote-build';
|
|
9
|
+
/**
|
|
10
|
+
* Used formats:
|
|
11
|
+
* - rock-android-debug-1234567890
|
|
12
|
+
* - rock-ios-simulator-debug-1234567890
|
|
13
|
+
* - rock-ios-device-debug-1234567890
|
|
14
|
+
*/
|
|
15
|
+
export async function formatArtifactName({ platform, traits, root, fingerprintOptions, raw, }) {
|
|
16
|
+
if (!platform || !traits) {
|
|
17
|
+
return '';
|
|
18
|
+
}
|
|
19
|
+
if (raw || !isInteractive()) {
|
|
20
|
+
const { hash } = await nativeFingerprint(root, {
|
|
21
|
+
...fingerprintOptions,
|
|
22
|
+
platform,
|
|
23
|
+
});
|
|
24
|
+
return `rock-${platform}-${traits.join('-')}-${hash}`;
|
|
25
|
+
}
|
|
26
|
+
const loader = spinner();
|
|
27
|
+
loader.start('Calculating project fingerprint');
|
|
28
|
+
const { hash } = await nativeFingerprint(root, {
|
|
29
|
+
...fingerprintOptions,
|
|
30
|
+
platform,
|
|
31
|
+
});
|
|
32
|
+
loader.stop(`Calculated project fingerprint: ${color.bold(color.magenta(hash))}`);
|
|
33
|
+
return `rock-${platform}-${traits.join('-')}-${hash}`;
|
|
34
|
+
}
|
|
35
|
+
export function getLocalArtifactPath(artifactName) {
|
|
36
|
+
return path.join(getCacheRootPath(), BUILD_CACHE_DIR, artifactName);
|
|
37
|
+
}
|
|
38
|
+
export function getLocalBinaryPath(artifactPath) {
|
|
39
|
+
const files = fs.readdirSync(artifactPath);
|
|
40
|
+
// Get the first non-hidden file as the binary
|
|
41
|
+
const binaryName = files.find((file) => file && !file.startsWith('.'));
|
|
42
|
+
return binaryName ? path.join(artifactPath, binaryName) : null;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +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,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,GAOJ;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,EAAE,CAAC;IACzB,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,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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type RemoteBuildCache } from './common.js';
|
|
2
|
+
import type { LocalBuild } from './localBuildCache.js';
|
|
3
|
+
type FetchCachedBuildOptions = {
|
|
4
|
+
artifactName: string;
|
|
5
|
+
remoteCacheProvider: undefined | null | {
|
|
6
|
+
(): RemoteBuildCache;
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
export declare function fetchCachedBuild({ artifactName, remoteCacheProvider, }: FetchCachedBuildOptions): Promise<LocalBuild | undefined>;
|
|
10
|
+
export declare function handleDownloadResponse(response: Response, localArtifactPath: string, onProgress: (progress: string, totalMB: string) => void): Promise<void>;
|
|
11
|
+
export declare function handleUploadResponse(getResponse: (buffer: Buffer) => Response, buffer: Buffer, onProgress: (progress: string, totalMB: string) => void): Promise<void>;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetchCachedBuild.d.ts","sourceRoot":"","sources":["../../../../src/lib/build-cache/fetchCachedBuild.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,KAAK,uBAAuB,GAAG;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,SAAS,GAAG,IAAI,GAAG;QAAE,IAAI,gBAAgB,CAAA;KAAE,CAAC;CAClE,CAAC;AAEF,wBAAsB,gBAAgB,CAAC,EACrC,YAAY,EACZ,mBAAmB,GACpB,EAAE,uBAAuB,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAkD3D;AAED,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,MAAM,EACzB,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,UAAU,CAAC,OAAO,OAAO,CAAC,iBA+CpC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import AdmZip from 'adm-zip';
|
|
4
|
+
import * as tar from 'tar';
|
|
5
|
+
import { color, colorLink } from '../color.js';
|
|
6
|
+
import { RockError } from '../error.js';
|
|
7
|
+
import logger from '../logger.js';
|
|
8
|
+
import { relativeToCwd } from '../path.js';
|
|
9
|
+
import { spinner } from '../prompts.js';
|
|
10
|
+
import { getLocalArtifactPath, getLocalBinaryPath, } from './common.js';
|
|
11
|
+
export async function fetchCachedBuild({ artifactName, remoteCacheProvider, }) {
|
|
12
|
+
if (remoteCacheProvider === null) {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
if (remoteCacheProvider === undefined) {
|
|
16
|
+
logger.warn(`No remote cache provider set. You won't be able to access reusable builds from e.g. GitHub Actions.
|
|
17
|
+
To configure it, set the "remoteCacheProvider" key in ${colorLink('rock.config.mjs')} file. For example:
|
|
18
|
+
|
|
19
|
+
import { providerGitHub } from '@rock-js/provider-github';
|
|
20
|
+
export default {
|
|
21
|
+
// ...
|
|
22
|
+
remoteCacheProvider: providerGitHub()
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
To disable this warning, set the provider to null:
|
|
26
|
+
{
|
|
27
|
+
remoteCacheProvider: null
|
|
28
|
+
}`);
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
const loader = spinner();
|
|
32
|
+
const localArtifactPath = getLocalArtifactPath(artifactName);
|
|
33
|
+
const remoteBuildCache = remoteCacheProvider();
|
|
34
|
+
const response = await remoteBuildCache.download({ artifactName });
|
|
35
|
+
loader.start(`Downloading cached build from ${color.bold(remoteBuildCache.name)}`);
|
|
36
|
+
await handleDownloadResponse(response, localArtifactPath, (progress, totalMB) => {
|
|
37
|
+
loader.message(`Downloading cached build from ${color.bold(remoteBuildCache.name)} (${progress}% of ${totalMB} MB)`);
|
|
38
|
+
});
|
|
39
|
+
await extractArtifactTarballIfNeeded(localArtifactPath);
|
|
40
|
+
const binaryPath = getLocalBinaryPath(localArtifactPath);
|
|
41
|
+
if (!binaryPath) {
|
|
42
|
+
loader.stop(`No binary found for ${color.bold(artifactName)}.`);
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
loader.stop(`Downloaded cached build to: ${colorLink(relativeToCwd(localArtifactPath))}`);
|
|
46
|
+
return {
|
|
47
|
+
name: artifactName,
|
|
48
|
+
artifactPath: localArtifactPath,
|
|
49
|
+
binaryPath,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
async function trackProgressFromStream(response, onProgress) {
|
|
53
|
+
const contentLength = response.headers.get('content-length');
|
|
54
|
+
if (!contentLength || !response.body) {
|
|
55
|
+
return response;
|
|
56
|
+
}
|
|
57
|
+
const totalBytes = parseInt(contentLength, 10);
|
|
58
|
+
const totalMB = (totalBytes / 1024 / 1024).toFixed(2);
|
|
59
|
+
let processedBytes = 0;
|
|
60
|
+
const reader = response.body.getReader();
|
|
61
|
+
const stream = new ReadableStream({
|
|
62
|
+
async start(controller) {
|
|
63
|
+
while (true) {
|
|
64
|
+
const { done, value } = await reader.read();
|
|
65
|
+
if (done) {
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
processedBytes += value.length;
|
|
69
|
+
const progress = ((processedBytes / totalBytes) * 100).toFixed(0);
|
|
70
|
+
onProgress(progress, totalMB);
|
|
71
|
+
controller.enqueue(value);
|
|
72
|
+
}
|
|
73
|
+
controller.close();
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
return new Response(stream);
|
|
77
|
+
}
|
|
78
|
+
export async function handleDownloadResponse(response, localArtifactPath, onProgress) {
|
|
79
|
+
try {
|
|
80
|
+
fs.mkdirSync(localArtifactPath, { recursive: true });
|
|
81
|
+
if (!response.ok || !response.body) {
|
|
82
|
+
throw new Error(`Failed to download artifact: ${response.statusText}`);
|
|
83
|
+
}
|
|
84
|
+
const responseWithProgress = await trackProgressFromStream(response, onProgress);
|
|
85
|
+
const zipPath = localArtifactPath + '.zip';
|
|
86
|
+
const buffer = await responseWithProgress.arrayBuffer();
|
|
87
|
+
fs.writeFileSync(zipPath, new Uint8Array(buffer));
|
|
88
|
+
unzipFile(zipPath, localArtifactPath);
|
|
89
|
+
fs.unlinkSync(zipPath);
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
throw new RockError(`Unexpected error`, { cause: error });
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
export async function handleUploadResponse(getResponse, buffer, onProgress) {
|
|
96
|
+
try {
|
|
97
|
+
const response = getResponse(buffer);
|
|
98
|
+
if (!response.body) {
|
|
99
|
+
throw new Error('Response body is empty');
|
|
100
|
+
}
|
|
101
|
+
const responseWithProgress = await trackProgressFromStream(response, onProgress);
|
|
102
|
+
await responseWithProgress.arrayBuffer();
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
throw new RockError(`Unexpected error during upload`, { cause: error });
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
function unzipFile(zipPath, targetPath) {
|
|
109
|
+
const zip = new AdmZip(zipPath);
|
|
110
|
+
zip.extractAllTo(targetPath, true);
|
|
111
|
+
}
|
|
112
|
+
async function extractArtifactTarballIfNeeded(artifactPath) {
|
|
113
|
+
const tarPath = path.join(artifactPath, 'app.tar.gz');
|
|
114
|
+
// If the tarball is not found, it means the artifact is already unpacked.
|
|
115
|
+
if (!fs.existsSync(tarPath)) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
// iOS simulator build artifact (*.app directory) is packed in .tar.gz file to
|
|
119
|
+
// preserve execute file permission.
|
|
120
|
+
// See: https://github.com/actions/upload-artifact?tab=readme-ov-file#permission-loss
|
|
121
|
+
await tar.extract({
|
|
122
|
+
file: tarPath,
|
|
123
|
+
cwd: artifactPath,
|
|
124
|
+
gzip: true,
|
|
125
|
+
});
|
|
126
|
+
fs.unlinkSync(tarPath);
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=fetchCachedBuild.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetchCachedBuild.js","sourceRoot":"","sources":["../../../../src/lib/build-cache/fetchCachedBuild.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type FingerprintSources } from '../fingerprint/index.js';
|
|
2
|
+
import type { RemoteBuildCache } from './common.js';
|
|
3
|
+
export declare function getBinaryPath({ artifactName, binaryPathFlag, localFlag, remoteCacheProvider, fingerprintOptions, sourceDir, }: {
|
|
4
|
+
artifactName: string;
|
|
5
|
+
binaryPathFlag?: string;
|
|
6
|
+
localFlag?: boolean;
|
|
7
|
+
remoteCacheProvider: null | (() => RemoteBuildCache) | undefined;
|
|
8
|
+
fingerprintOptions: FingerprintSources;
|
|
9
|
+
sourceDir: string;
|
|
10
|
+
}): Promise<string | undefined>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getBinaryPath.d.ts","sourceRoot":"","sources":["../../../../src/lib/build-cache/getBinaryPath.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIpD,wBAAsB,aAAa,CAAC,EAClC,YAAY,EACZ,cAAc,EACd,SAAS,EACT,mBAAmB,EACnB,kBAAkB,EAClB,SAAS,GACV,EAAE;IACD,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mBAAmB,EAAE,IAAI,GAAG,CAAC,MAAM,gBAAgB,CAAC,GAAG,SAAS,CAAC;IACjE,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;CACnB,+BAiCA"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { color, colorLink } from '../color.js';
|
|
2
|
+
import { DEFAULT_IGNORE_PATHS, EXPO_DEFAULT_IGNORE_PATHS, } from '../fingerprint/index.js';
|
|
3
|
+
import logger from '../logger.js';
|
|
4
|
+
import { spawn } from '../spawn.js';
|
|
5
|
+
import { fetchCachedBuild } from './fetchCachedBuild.js';
|
|
6
|
+
import { getLocalBuildCacheBinaryPath } from './localBuildCache.js';
|
|
7
|
+
export async function getBinaryPath({ artifactName, binaryPathFlag, localFlag, remoteCacheProvider, fingerprintOptions, sourceDir, }) {
|
|
8
|
+
// 1. First check if the binary path is provided
|
|
9
|
+
let binaryPath = binaryPathFlag;
|
|
10
|
+
// 2. If not, check if the local build is requested
|
|
11
|
+
if (!binaryPath && !localFlag) {
|
|
12
|
+
binaryPath = getLocalBuildCacheBinaryPath(artifactName);
|
|
13
|
+
}
|
|
14
|
+
// 3. If not, check if the remote cache is requested
|
|
15
|
+
if (!binaryPath && !localFlag) {
|
|
16
|
+
try {
|
|
17
|
+
const cachedBuild = await fetchCachedBuild({
|
|
18
|
+
artifactName,
|
|
19
|
+
remoteCacheProvider,
|
|
20
|
+
});
|
|
21
|
+
if (cachedBuild) {
|
|
22
|
+
binaryPath = cachedBuild.binaryPath;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
const message = error.message;
|
|
27
|
+
const cause = error.cause;
|
|
28
|
+
logger.warn(`Failed to fetch cached build for ${artifactName}: \n${message}`, cause ? `\nCause: ${cause.toString()}` : '');
|
|
29
|
+
await warnIgnoredFiles(fingerprintOptions, sourceDir);
|
|
30
|
+
logger.debug('Remote cache failure error:', error);
|
|
31
|
+
logger.info('Continuing with local build');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return binaryPath;
|
|
35
|
+
}
|
|
36
|
+
async function warnIgnoredFiles(fingerprintOptions, sourceDir) {
|
|
37
|
+
const ignorePaths = [
|
|
38
|
+
...(fingerprintOptions?.ignorePaths ?? []),
|
|
39
|
+
...EXPO_DEFAULT_IGNORE_PATHS,
|
|
40
|
+
...DEFAULT_IGNORE_PATHS,
|
|
41
|
+
];
|
|
42
|
+
const { output } = await spawn('git', [
|
|
43
|
+
'clean',
|
|
44
|
+
'-fdx',
|
|
45
|
+
'--dry-run',
|
|
46
|
+
sourceDir,
|
|
47
|
+
...ignorePaths.flatMap((path) => ['-e', `${path}`]),
|
|
48
|
+
]);
|
|
49
|
+
const ignoredFiles = output
|
|
50
|
+
.split('\n')
|
|
51
|
+
.map((line) => line.replace('Would remove ', ''))
|
|
52
|
+
.filter((line) => line !== '');
|
|
53
|
+
if (ignoredFiles.length > 0) {
|
|
54
|
+
logger.warn(`There are files that likely affect fingerprint:
|
|
55
|
+
${ignoredFiles.map((file) => `- ${color.bold(file)}`).join('\n')}
|
|
56
|
+
Consider removing them or update ${color.bold('fingerprint.ignorePaths')} in ${colorLink('rock.config.mjs')}:
|
|
57
|
+
Read more: ${colorLink('https://www.rockjs.dev/docs/configuration#fingerprint-configuration')}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=getBinaryPath.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getBinaryPath.js","sourceRoot":"","sources":["../../../../src/lib/build-cache/getBinaryPath.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type LocalBuild = {
|
|
2
|
+
name: string;
|
|
3
|
+
artifactPath: string;
|
|
4
|
+
binaryPath: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function queryLocalBuildCache(artifactName: string): LocalBuild | null;
|
|
7
|
+
export declare function saveLocalBuildCache(artifactName: string, binaryPath: string): void;
|
|
8
|
+
export declare function getLocalBuildCacheBinaryPath(artifactName: string): string | undefined;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localBuildCache.d.ts","sourceRoot":"","sources":["../../../../src/lib/build-cache/localBuildCache.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAc5E;AAED,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAsB3E;AAED,wBAAgB,4BAA4B,CAC1C,YAAY,EAAE,MAAM,GACnB,MAAM,GAAG,SAAS,CASpB"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { color, colorLink } from '../color.js';
|
|
4
|
+
import logger from '../logger.js';
|
|
5
|
+
import { relativeToCwd } from '../path.js';
|
|
6
|
+
import { getLocalArtifactPath, getLocalBinaryPath } from './common.js';
|
|
7
|
+
export function queryLocalBuildCache(artifactName) {
|
|
8
|
+
const artifactPath = getLocalArtifactPath(artifactName);
|
|
9
|
+
if (!fs.statSync(artifactPath, { throwIfNoEntry: false })?.isDirectory()) {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
const binaryPath = getLocalBinaryPath(artifactPath);
|
|
13
|
+
if (binaryPath == null || !fs.existsSync(binaryPath)) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
name: artifactName,
|
|
18
|
+
artifactPath,
|
|
19
|
+
binaryPath,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export function saveLocalBuildCache(artifactName, binaryPath) {
|
|
23
|
+
try {
|
|
24
|
+
const cachePath = getLocalArtifactPath(artifactName);
|
|
25
|
+
if (!fs.existsSync(cachePath)) {
|
|
26
|
+
fs.mkdirSync(cachePath, { recursive: true });
|
|
27
|
+
}
|
|
28
|
+
if (fs.statSync(binaryPath).isDirectory()) {
|
|
29
|
+
fs.cpSync(binaryPath, path.join(cachePath, path.basename(binaryPath)), {
|
|
30
|
+
recursive: true,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
fs.copyFileSync(binaryPath, path.join(cachePath, path.basename(binaryPath)));
|
|
35
|
+
}
|
|
36
|
+
logger.debug(`Saved build cache to: ${colorLink(relativeToCwd(cachePath))}`);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
logger.debug('Failed to copy binary to local build cache', error);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export function getLocalBuildCacheBinaryPath(artifactName) {
|
|
43
|
+
const localBuild = queryLocalBuildCache(artifactName);
|
|
44
|
+
if (localBuild) {
|
|
45
|
+
logger.log(`Found build cache for: ${color.bold(color.blue(localBuild.name))}`);
|
|
46
|
+
return localBuild.binaryPath;
|
|
47
|
+
}
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=localBuildCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localBuildCache.js","sourceRoot":"","sources":["../../../../src/lib/build-cache/localBuildCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAQvE,MAAM,UAAU,oBAAoB,CAAC,YAAoB;IACvD,MAAM,YAAY,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;IACxD,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,UAAU,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC;IACpD,IAAI,UAAU,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,YAAY;QACZ,UAAU;KACX,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,YAAoB,EAAE,UAAkB;IAC1E,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;QACrD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YAC1C,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE;gBACrE,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,EAAE,CAAC,YAAY,CACb,UAAU,EACV,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAChD,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,KAAK,CACV,yBAAyB,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,CAC/D,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,YAAoB;IAEpB,MAAM,UAAU,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;IACtD,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,CACR,0BAA0B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CACpE,CAAC;QACF,OAAO,UAAU,CAAC,UAAU,CAAC;IAC/B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { getCacheRootPath } from './project.js';
|
|
2
|
+
type CacheKey = string;
|
|
3
|
+
export declare function getCacheFile(): string;
|
|
4
|
+
declare function removeProjectCache(): void;
|
|
5
|
+
declare function get(key: CacheKey): string | undefined;
|
|
6
|
+
declare function set(key: CacheKey, value: string): void;
|
|
7
|
+
declare function remove(key: CacheKey): void;
|
|
8
|
+
declare const _default: {
|
|
9
|
+
get: typeof get;
|
|
10
|
+
set: typeof set;
|
|
11
|
+
remove: typeof remove;
|
|
12
|
+
removeProjectCache: typeof removeProjectCache;
|
|
13
|
+
getCacheRootPath: typeof getCacheRootPath;
|
|
14
|
+
};
|
|
15
|
+
export default _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cacheManager.d.ts","sourceRoot":"","sources":["../../../src/lib/cacheManager.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAIhD,KAAK,QAAQ,GAAG,MAAM,CAAC;AAGvB,wBAAgB,YAAY,WAE3B;AAwBD,iBAAS,kBAAkB,SAc1B;AAED,iBAAS,GAAG,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAG9C;AAED,iBAAS,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,QAIxC;AAED,iBAAS,MAAM,CAAC,GAAG,EAAE,QAAQ,QAI5B;;;;;;;;AAED,wBAME"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { colorLink } from './color.js';
|
|
4
|
+
import { RockError } from './error.js';
|
|
5
|
+
import logger from './logger.js';
|
|
6
|
+
import { getCacheRootPath } from './project.js';
|
|
7
|
+
const CACHE_FILE_NAME = 'project.json';
|
|
8
|
+
export function getCacheFile() {
|
|
9
|
+
return path.join(getCacheRootPath(), CACHE_FILE_NAME);
|
|
10
|
+
}
|
|
11
|
+
function loadCache() {
|
|
12
|
+
try {
|
|
13
|
+
const cachePath = path.resolve(getCacheFile());
|
|
14
|
+
if (!fs.existsSync(cachePath)) {
|
|
15
|
+
logger.debug(`No cache found at: ${cachePath}`);
|
|
16
|
+
return {};
|
|
17
|
+
}
|
|
18
|
+
const content = fs.readFileSync(cachePath, 'utf8');
|
|
19
|
+
return JSON.parse(content);
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
logger.warn('Failed to load cache', error);
|
|
23
|
+
return {};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function saveCache(cache) {
|
|
27
|
+
const cachePath = path.resolve(getCacheFile());
|
|
28
|
+
fs.mkdirSync(path.dirname(cachePath), { recursive: true });
|
|
29
|
+
fs.writeFileSync(cachePath, JSON.stringify(cache, null, 2));
|
|
30
|
+
}
|
|
31
|
+
function removeProjectCache() {
|
|
32
|
+
try {
|
|
33
|
+
const cachePath = path.resolve(getCacheFile());
|
|
34
|
+
if (fs.existsSync(cachePath)) {
|
|
35
|
+
fs.rmSync(cachePath, { recursive: true });
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
throw new RockError(`Failed to remove cache for ${name}. If you experience any issues when running freshly initialized project, please remove the "${colorLink(path.join(getCacheFile()))}" folder manually.`, { cause: error });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function get(key) {
|
|
43
|
+
const cache = loadCache();
|
|
44
|
+
return cache[key];
|
|
45
|
+
}
|
|
46
|
+
function set(key, value) {
|
|
47
|
+
const cache = loadCache();
|
|
48
|
+
cache[key] = value;
|
|
49
|
+
saveCache(cache);
|
|
50
|
+
}
|
|
51
|
+
function remove(key) {
|
|
52
|
+
const cache = loadCache();
|
|
53
|
+
delete cache[key];
|
|
54
|
+
saveCache(cache);
|
|
55
|
+
}
|
|
56
|
+
export default {
|
|
57
|
+
get,
|
|
58
|
+
set,
|
|
59
|
+
remove,
|
|
60
|
+
removeProjectCache,
|
|
61
|
+
getCacheRootPath,
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=cacheManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cacheManager.js","sourceRoot":"","sources":["../../../src/lib/cacheManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../../src/lib/color.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,OAAO,EAAE,KAAK,EAAE,CAAC;AAEjB,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,UAErC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color.js","sourceRoot":"","sources":["../../../src/lib/color.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,OAAO,EAAE,KAAK,EAAE,CAAC;AAEjB,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findDevServerPort.d.ts","sourceRoot":"","sources":["../../../../src/lib/dev-server/findDevServerPort.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,iBAAiB,gBACf,MAAM,QACb,MAAM,KACX,OAAO,CAAC;IACT,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,OAAO,CAAC;CACzB,CAuBA,CAAC"}
|