expo-native-cache-provider 0.1.8 → 0.2.0
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/build/repack/Repack.d.ts
CHANGED
|
@@ -2,10 +2,18 @@ import type { SigningConfig } from "../hybrid/HybridCache.js";
|
|
|
2
2
|
export declare class Repack {
|
|
3
3
|
static repackAndroid(sourceAppPath: string, outputPath: string, projectRoot: string, signing?: SigningConfig): Promise<string>;
|
|
4
4
|
/**
|
|
5
|
-
* Repacks an AAB with a fresh JS bundle.
|
|
6
|
-
*
|
|
5
|
+
* Repacks an AAB with a fresh JS bundle + assets + app.config,
|
|
6
|
+
* mirroring what repackAppAndroidAsync does for APK.
|
|
7
7
|
*/
|
|
8
8
|
static repackAAB(sourceAABPath: string, outputPath: string, projectRoot: string, signing?: SigningConfig): Promise<string>;
|
|
9
|
+
/** Resolves the app entry file using expo's own resolver, falling back to index.js */
|
|
10
|
+
private static resolveEntryFile;
|
|
11
|
+
/** Detects if the project uses the Hermes JS engine */
|
|
12
|
+
private static isHermesEnabled;
|
|
13
|
+
/** Reads the resolved public Expo app config */
|
|
14
|
+
private static readAppConfig;
|
|
15
|
+
/** Copies expo-updates app.manifest into the AAB assets if expo-updates is installed */
|
|
16
|
+
private static copyExpoUpdatesManifestIfNeeded;
|
|
9
17
|
private static findBundleInAAB;
|
|
10
18
|
private static findRecursive;
|
|
11
19
|
static repackIOS(sourceAppPath: string, outputPath: string, projectRoot: string, signing?: SigningConfig): Promise<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Repack.d.ts","sourceRoot":"","sources":["../../src/repack/Repack.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAM9D,qBAAa,MAAM;WACL,aAAa,CACzB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC;IAwBlB;;;OAGG;WACU,SAAS,CACrB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"Repack.d.ts","sourceRoot":"","sources":["../../src/repack/Repack.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAM9D,qBAAa,MAAM;WACL,aAAa,CACzB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC;IAwBlB;;;OAGG;WACU,SAAS,CACrB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC;IA0ElB,sFAAsF;IACtF,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAa/B,uDAAuD;IACvD,OAAO,CAAC,MAAM,CAAC,eAAe;IAU9B,gDAAgD;IAChD,OAAO,CAAC,MAAM,CAAC,aAAa;IAkB5B,wFAAwF;IACxF,OAAO,CAAC,MAAM,CAAC,+BAA+B;IAmC9C,OAAO,CAAC,MAAM,CAAC,eAAe;IAY9B,OAAO,CAAC,MAAM,CAAC,aAAa;WAaf,SAAS,CACrB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC;CAmBlB"}
|
package/build/repack/Repack.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { repackAppAndroidAsync, repackAppIosAsync } from "@expo/repack-app";
|
|
2
|
-
import { execSync } from "node:child_process";
|
|
3
|
-
import { mkdirSync, copyFileSync, rmSync, existsSync, readdirSync } from "node:fs";
|
|
2
|
+
import { execSync, execFileSync } from "node:child_process";
|
|
3
|
+
import { mkdirSync, copyFileSync, rmSync, existsSync, readdirSync, writeFileSync, cpSync } from "node:fs";
|
|
4
4
|
import os from "node:os";
|
|
5
5
|
import path from "node:path";
|
|
6
6
|
export class Repack {
|
|
@@ -28,26 +28,55 @@ export class Repack {
|
|
|
28
28
|
return outputPath;
|
|
29
29
|
}
|
|
30
30
|
/**
|
|
31
|
-
* Repacks an AAB with a fresh JS bundle.
|
|
32
|
-
*
|
|
31
|
+
* Repacks an AAB with a fresh JS bundle + assets + app.config,
|
|
32
|
+
* mirroring what repackAppAndroidAsync does for APK.
|
|
33
33
|
*/
|
|
34
34
|
static async repackAAB(sourceAABPath, outputPath, projectRoot, signing) {
|
|
35
35
|
const tmpDir = path.join(os.tmpdir(), `repack-aab-${Date.now()}`);
|
|
36
36
|
const extractDir = path.join(tmpDir, "extracted");
|
|
37
|
-
const
|
|
37
|
+
const bundlesDir = path.join(tmpDir, "bundles");
|
|
38
|
+
const assetsDestDir = path.join(bundlesDir, "assets");
|
|
39
|
+
const bundleOutput = path.join(bundlesDir, "index.android.bundle");
|
|
38
40
|
try {
|
|
39
41
|
mkdirSync(extractDir, { recursive: true });
|
|
42
|
+
mkdirSync(assetsDestDir, { recursive: true });
|
|
40
43
|
// Extract AAB
|
|
41
44
|
execSync(`unzip -q "${sourceAABPath}" -d "${extractDir}"`, { stdio: "inherit" });
|
|
42
|
-
//
|
|
45
|
+
// Resolve entry file the same way expo does
|
|
46
|
+
const entryFile = Repack.resolveEntryFile(projectRoot);
|
|
47
|
+
// Detect hermes engine (expo checks android.jsEngine ?? jsEngine)
|
|
48
|
+
const isHermes = Repack.isHermesEnabled(projectRoot);
|
|
49
|
+
// Build expo export:embed args — mirrors hi() in repack-app
|
|
50
|
+
const exportArgs = [
|
|
51
|
+
"expo", "export:embed",
|
|
52
|
+
"--platform", "android",
|
|
53
|
+
"--entry-file", entryFile,
|
|
54
|
+
"--bundle-output", bundleOutput,
|
|
55
|
+
"--assets-dest", assetsDestDir,
|
|
56
|
+
"--dev", "false",
|
|
57
|
+
"--reset-cache",
|
|
58
|
+
];
|
|
59
|
+
if (isHermes) {
|
|
60
|
+
exportArgs.push("--minify", "false", "--bytecode", "true", "--unstable-transform-profile", "hermes");
|
|
61
|
+
}
|
|
62
|
+
execFileSync("npx", exportArgs, { cwd: projectRoot, stdio: "inherit", env: process.env });
|
|
63
|
+
// Find the JS bundle inside the AAB and replace it
|
|
43
64
|
const bundleInAAB = Repack.findBundleInAAB(extractDir);
|
|
44
|
-
// Generate fresh JS bundle
|
|
45
|
-
execSync(`npx expo export:embed --entry-file index.js --bundle-output "${bundleOutput}" --platform android --dev false`, { cwd: projectRoot, stdio: "inherit", env: process.env });
|
|
46
|
-
// Replace bundle
|
|
47
65
|
copyFileSync(bundleOutput, bundleInAAB);
|
|
48
|
-
//
|
|
66
|
+
// Copy updated assets into base/assets/ (mirrors bc() in repack-app)
|
|
67
|
+
const aabAssetsDir = path.join(extractDir, "base", "assets");
|
|
68
|
+
if (existsSync(assetsDestDir)) {
|
|
69
|
+
cpSync(assetsDestDir, aabAssetsDir, { recursive: true, force: true });
|
|
70
|
+
}
|
|
71
|
+
// Generate and copy app.config (mirrors gi() + copyFile in repack-app)
|
|
72
|
+
const appConfig = Repack.readAppConfig(projectRoot);
|
|
73
|
+
writeFileSync(path.join(aabAssetsDir, "app.config"), JSON.stringify(appConfig));
|
|
74
|
+
// Handle expo-updates app.manifest if expo-updates is present
|
|
75
|
+
Repack.copyExpoUpdatesManifestIfNeeded(projectRoot, tmpDir, aabAssetsDir);
|
|
76
|
+
// Re-zip into AAB — use find to add only files (no directory entries),
|
|
77
|
+
// because bundletool rejects AABs that contain directory zip entries.
|
|
49
78
|
mkdirSync(path.dirname(outputPath), { recursive: true });
|
|
50
|
-
execSync(`cd "${extractDir}" &&
|
|
79
|
+
execSync(`cd "${extractDir}" && find . -type f | zip "${path.resolve(outputPath)}" -@`, { stdio: "inherit" });
|
|
51
80
|
// Sign if keystore provided
|
|
52
81
|
if (!signing?.disabled && signing?.keystorePath) {
|
|
53
82
|
execSync(`jarsigner -keystore "${signing.keystorePath}" -storepass "${signing.keystorePassword ?? "android"}" "${outputPath}" "${signing.keyAlias ?? "androiddebugkey"}"`, { stdio: "inherit" });
|
|
@@ -58,6 +87,65 @@ export class Repack {
|
|
|
58
87
|
rmSync(tmpDir, { recursive: true, force: true });
|
|
59
88
|
}
|
|
60
89
|
}
|
|
90
|
+
/** Resolves the app entry file using expo's own resolver, falling back to index.js */
|
|
91
|
+
static resolveEntryFile(projectRoot) {
|
|
92
|
+
try {
|
|
93
|
+
const result = execFileSync("node", ["-e", "require('expo/scripts/resolveAppEntry')", projectRoot, "android", "absolute"], { cwd: projectRoot, stdio: "pipe", env: process.env });
|
|
94
|
+
return result.toString().trim();
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return "index.js";
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/** Detects if the project uses the Hermes JS engine */
|
|
101
|
+
static isHermesEnabled(projectRoot) {
|
|
102
|
+
try {
|
|
103
|
+
const config = Repack.readAppConfig(projectRoot);
|
|
104
|
+
const engine = config.android?.jsEngine ?? config.jsEngine;
|
|
105
|
+
return engine !== "jsc";
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
return true; // default to hermes (expo default since SDK 47)
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/** Reads the resolved public Expo app config */
|
|
112
|
+
static readAppConfig(projectRoot) {
|
|
113
|
+
try {
|
|
114
|
+
const result = execFileSync("node", ["-e", `
|
|
115
|
+
const configPkg = require.resolve('@expo/config', { paths: [process.argv[1]] });
|
|
116
|
+
const { getConfig } = require(configPkg);
|
|
117
|
+
const { exp } = getConfig(process.argv[1], { isPublicConfig: true, skipSDKVersionRequirement: true });
|
|
118
|
+
process.stdout.write(JSON.stringify(exp));
|
|
119
|
+
`, projectRoot], { cwd: projectRoot, stdio: "pipe", env: process.env });
|
|
120
|
+
return JSON.parse(result.toString());
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
return {};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/** Copies expo-updates app.manifest into the AAB assets if expo-updates is installed */
|
|
127
|
+
static copyExpoUpdatesManifestIfNeeded(projectRoot, workingDir, aabAssetsDir) {
|
|
128
|
+
try {
|
|
129
|
+
// Check if expo-updates is in dependencies
|
|
130
|
+
const pkgJson = JSON.parse(execFileSync("node", ["-e", `
|
|
131
|
+
const { getPackageJson } = require(require.resolve('@expo/config', { paths: [process.argv[1]] }));
|
|
132
|
+
process.stdout.write(JSON.stringify(getPackageJson(process.argv[1])));
|
|
133
|
+
`, projectRoot], { cwd: projectRoot, stdio: "pipe", env: process.env }).toString());
|
|
134
|
+
if (!pkgJson?.dependencies?.["expo-updates"])
|
|
135
|
+
return;
|
|
136
|
+
// Resolve createUpdatesResources script
|
|
137
|
+
const entryFile = Repack.resolveEntryFile(projectRoot);
|
|
138
|
+
const createUpdatesScript = require.resolve("expo-updates/utils/build/createUpdatesResources.js", { paths: [projectRoot] });
|
|
139
|
+
execFileSync("node", [createUpdatesScript, "android", projectRoot, workingDir, "all", entryFile], { cwd: projectRoot, stdio: "inherit", env: process.env });
|
|
140
|
+
const manifestSrc = path.join(workingDir, "app.manifest");
|
|
141
|
+
if (existsSync(manifestSrc)) {
|
|
142
|
+
copyFileSync(manifestSrc, path.join(aabAssetsDir, "app.manifest"));
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
// expo-updates not present or createUpdatesResources unavailable — skip
|
|
147
|
+
}
|
|
148
|
+
}
|
|
61
149
|
static findBundleInAAB(extractDir) {
|
|
62
150
|
// Standard location in AAB produced by Gradle
|
|
63
151
|
const standard = path.join(extractDir, "base", "assets", "index.android.bundle");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Repack.js","sourceRoot":"","sources":["../../src/repack/Repack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE5E,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"Repack.js","sourceRoot":"","sources":["../../src/repack/Repack.ts"],"names":[],"mappings":"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"}
|