expo-modules-autolinking 56.0.7 → 56.0.9
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/CHANGELOG.md +15 -0
- package/build/platforms/devtools.js +11 -3
- package/build/platforms/devtools.js.map +1 -1
- package/build/utils.d.ts +1 -0
- package/build/utils.js +5 -0
- package/build/utils.js.map +1 -1
- package/package.json +4 -4
- package/scripts/ios/precompiled_modules.rb +3 -1
- package/src/platforms/devtools.ts +15 -3
- package/src/utils.ts +5 -0
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,20 @@
|
|
|
10
10
|
|
|
11
11
|
### 💡 Others
|
|
12
12
|
|
|
13
|
+
## 56.0.9 — 2026-05-20
|
|
14
|
+
|
|
15
|
+
### 🐛 Bug fixes
|
|
16
|
+
|
|
17
|
+
- Fix Hermes version resolution polarity in `precompiled_modules.rb` so external prebuilt artifacts are looked up under the V1 Hermes subfolder by default, matching `hermes-engine.podspec`. ([#46053](https://github.com/expo/expo/pull/46053) by [@chrfalch](https://github.com/chrfalch))
|
|
18
|
+
|
|
19
|
+
### 💡 Others
|
|
20
|
+
|
|
21
|
+
- Bump to `@expo/spawn-async@^1.8.0` ([#45999](https://github.com/expo/expo/pull/45999) by [@kitten](https://github.com/kitten))
|
|
22
|
+
|
|
23
|
+
## 56.0.8 — 2026-05-19
|
|
24
|
+
|
|
25
|
+
_This version does not introduce any user-facing changes._
|
|
26
|
+
|
|
13
27
|
## 56.0.7 — 2026-05-15
|
|
14
28
|
|
|
15
29
|
### 🐛 Bug fixes
|
|
@@ -17,6 +31,7 @@
|
|
|
17
31
|
- [iOS] Fixed `pod install` failing with `bad component (expected absolute path component)` for precompiled Expo modules when the project lives under a path containing non-ASCII characters (e.g. emoji). ([#45779](https://github.com/expo/expo/pull/45779) by [@tsapeta](https://github.com/tsapeta))
|
|
18
32
|
- [iOS] Cache prebuilt module status lookups to reduce repeated `File.exist?` calls during `pod install`. ([#45742](https://github.com/expo/expo/pull/45742) by [@chrfalch](https://github.com/chrfalch))
|
|
19
33
|
- [iOS] Wire the macro plugin flag into `ExpoModulesCore`'s own xcconfig so SourceKit can resolve `#externalMacro` references in core source files. ([#45778](https://github.com/expo/expo/pull/45778) by [@tsapeta](https://github.com/tsapeta))
|
|
34
|
+
- Disallow devtools plugins to point to `webpageRoot` outside of their own bounds ([#45841](https://github.com/expo/expo/pull/45841) by [@kitten](https://github.com/kitten))
|
|
20
35
|
|
|
21
36
|
## 56.0.6 — 2026-05-13
|
|
22
37
|
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.resolveModuleAsync = resolveModuleAsync;
|
|
7
7
|
exports.resolveExtraBuildDependenciesAsync = resolveExtraBuildDependenciesAsync;
|
|
8
8
|
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const utils_1 = require("../utils");
|
|
9
10
|
async function resolveModuleAsync(packageName, revision) {
|
|
10
11
|
const devtoolsConfig = revision.config?.toJSON().devtools;
|
|
11
12
|
if (devtoolsConfig == null) {
|
|
@@ -14,12 +15,19 @@ async function resolveModuleAsync(packageName, revision) {
|
|
|
14
15
|
return {
|
|
15
16
|
packageName,
|
|
16
17
|
packageRoot: revision.path,
|
|
17
|
-
webpageRoot: devtoolsConfig.webpageRoot
|
|
18
|
-
? path_1.default.join(revision.path, devtoolsConfig.webpageRoot)
|
|
19
|
-
: undefined,
|
|
18
|
+
webpageRoot: await resolveWebpageRoot(revision.path, devtoolsConfig.webpageRoot),
|
|
20
19
|
cliExtensions: devtoolsConfig.cliExtensions,
|
|
21
20
|
};
|
|
22
21
|
}
|
|
22
|
+
async function resolveWebpageRoot(packageRoot, configuredWebpageRoot) {
|
|
23
|
+
if (!configuredWebpageRoot) {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
const resolvedWebpageRoot = path_1.default.resolve(packageRoot, configuredWebpageRoot);
|
|
27
|
+
// NOTE(@kitten): Failing realpath-ing, typically due to ENOENT, results in the original value
|
|
28
|
+
const webpageRoot = (await (0, utils_1.maybeRealpath)(resolvedWebpageRoot)) ?? resolvedWebpageRoot;
|
|
29
|
+
return (0, utils_1.isPathInside)(webpageRoot, packageRoot) ? webpageRoot : undefined;
|
|
30
|
+
}
|
|
23
31
|
async function resolveExtraBuildDependenciesAsync(_projectNativeRoot) {
|
|
24
32
|
return null;
|
|
25
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtools.js","sourceRoot":"","sources":["../../src/platforms/devtools.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"devtools.js","sourceRoot":"","sources":["../../src/platforms/devtools.ts"],"names":[],"mappings":";;;;;AAKA,gDAeC;AAeD,gFAIC;AAvCD,gDAAwB;AAGxB,oCAAuD;AAEhD,KAAK,UAAU,kBAAkB,CACtC,WAAmB,EACnB,QAAyB;IAEzB,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC;IAC1D,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,WAAW;QACX,WAAW,EAAE,QAAQ,CAAC,IAAI;QAC1B,WAAW,EAAE,MAAM,kBAAkB,CAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,WAAW,CAAC;QAChF,aAAa,EAAE,cAAc,CAAC,aAAa;KAC5C,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,WAAmB,EACnB,qBAAyC;IAEzC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,mBAAmB,GAAG,cAAI,CAAC,OAAO,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;IAC7E,8FAA8F;IAC9F,MAAM,WAAW,GAAG,CAAC,MAAM,IAAA,qBAAa,EAAC,mBAAmB,CAAC,CAAC,IAAI,mBAAmB,CAAC;IACtF,OAAO,IAAA,oBAAY,EAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1E,CAAC;AAEM,KAAK,UAAU,kCAAkC,CACtD,kBAA0B;IAE1B,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/build/utils.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export declare function scanFilesRecursively(parentPath: string, includeDirector
|
|
|
11
11
|
export declare const fileExistsAsync: (file: string) => Promise<string | null>;
|
|
12
12
|
export declare const fastJoin: (from: string, append: string) => string;
|
|
13
13
|
export declare const maybeRealpath: (target: string) => Promise<string | null>;
|
|
14
|
+
export declare function isPathInside(child: string, parent: string): boolean;
|
|
14
15
|
export type PackageJson = Record<string, unknown> & {
|
|
15
16
|
name?: string;
|
|
16
17
|
version?: string;
|
package/build/utils.js
CHANGED
|
@@ -7,6 +7,7 @@ exports.loadPackageJson = exports.maybeRealpath = exports.fastJoin = exports.fil
|
|
|
7
7
|
exports.listFilesSorted = listFilesSorted;
|
|
8
8
|
exports.listFilesInDirectories = listFilesInDirectories;
|
|
9
9
|
exports.scanFilesRecursively = scanFilesRecursively;
|
|
10
|
+
exports.isPathInside = isPathInside;
|
|
10
11
|
const fs_1 = __importDefault(require("fs"));
|
|
11
12
|
const path_1 = __importDefault(require("path"));
|
|
12
13
|
const memoize_1 = require("./memoize");
|
|
@@ -84,6 +85,10 @@ const maybeRealpath = async (target) => {
|
|
|
84
85
|
}
|
|
85
86
|
};
|
|
86
87
|
exports.maybeRealpath = maybeRealpath;
|
|
88
|
+
function isPathInside(child, parent) {
|
|
89
|
+
const relative = path_1.default.relative(parent, child);
|
|
90
|
+
return !!relative && !relative.startsWith('..') && !path_1.default.isAbsolute(relative);
|
|
91
|
+
}
|
|
87
92
|
exports.loadPackageJson = (0, memoize_1.memoize)(async function loadPackageJson(jsonPath) {
|
|
88
93
|
try {
|
|
89
94
|
const packageJsonText = await fs_1.default.promises.readFile(jsonPath, 'utf8');
|
package/build/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;;;;AAMA,0CAaC;AAGD,wDAoBC;AAGD,oDA+BC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "expo-modules-autolinking",
|
|
3
|
-
"version": "56.0.
|
|
3
|
+
"version": "56.0.9",
|
|
4
4
|
"description": "Scripts that autolink Expo modules.",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -44,12 +44,12 @@
|
|
|
44
44
|
"expo-module-scripts": "56.0.2"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@expo/require-utils": "^56.1.
|
|
48
|
-
"@expo/spawn-async": "^1.
|
|
47
|
+
"@expo/require-utils": "^56.1.2",
|
|
48
|
+
"@expo/spawn-async": "^1.8.0",
|
|
49
49
|
"chalk": "^4.1.0",
|
|
50
50
|
"commander": "^7.2.0"
|
|
51
51
|
},
|
|
52
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "c4c9867a0bcbb188e55ecaec4998e38d33108a5d",
|
|
53
53
|
"scripts": {
|
|
54
54
|
"build": "expo-module build",
|
|
55
55
|
"clean": "expo-module clean",
|
|
@@ -1754,7 +1754,9 @@ module Expo
|
|
|
1754
1754
|
@hermes_version ||= begin
|
|
1755
1755
|
rn_path = react_native_path
|
|
1756
1756
|
if rn_path
|
|
1757
|
-
|
|
1757
|
+
# Matches hermes-engine.podspec polarity: V1 is the default, classic
|
|
1758
|
+
# is selected only when the consuming app explicitly sets the env var to "0".
|
|
1759
|
+
is_v1 = ENV['RCT_HERMES_V1_ENABLED'] != '0'
|
|
1758
1760
|
props_path = File.join(rn_path, 'sdks', 'hermes-engine', 'version.properties')
|
|
1759
1761
|
version = File.exist?(props_path) ?
|
|
1760
1762
|
parse_version_properties(props_path)[is_v1 ? 'HERMES_V1_VERSION_NAME' : 'HERMES_VERSION_NAME'] : nil
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import path from 'path';
|
|
2
2
|
|
|
3
3
|
import type { ExtraDependencies, ModuleDescriptorDevTools, PackageRevision } from '../types';
|
|
4
|
+
import { isPathInside, maybeRealpath } from '../utils';
|
|
4
5
|
|
|
5
6
|
export async function resolveModuleAsync(
|
|
6
7
|
packageName: string,
|
|
@@ -14,13 +15,24 @@ export async function resolveModuleAsync(
|
|
|
14
15
|
return {
|
|
15
16
|
packageName,
|
|
16
17
|
packageRoot: revision.path,
|
|
17
|
-
webpageRoot: devtoolsConfig.webpageRoot
|
|
18
|
-
? path.join(revision.path, devtoolsConfig.webpageRoot)
|
|
19
|
-
: undefined,
|
|
18
|
+
webpageRoot: await resolveWebpageRoot(revision.path, devtoolsConfig.webpageRoot),
|
|
20
19
|
cliExtensions: devtoolsConfig.cliExtensions,
|
|
21
20
|
};
|
|
22
21
|
}
|
|
23
22
|
|
|
23
|
+
async function resolveWebpageRoot(
|
|
24
|
+
packageRoot: string,
|
|
25
|
+
configuredWebpageRoot: string | undefined
|
|
26
|
+
): Promise<string | undefined> {
|
|
27
|
+
if (!configuredWebpageRoot) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
const resolvedWebpageRoot = path.resolve(packageRoot, configuredWebpageRoot);
|
|
31
|
+
// NOTE(@kitten): Failing realpath-ing, typically due to ENOENT, results in the original value
|
|
32
|
+
const webpageRoot = (await maybeRealpath(resolvedWebpageRoot)) ?? resolvedWebpageRoot;
|
|
33
|
+
return isPathInside(webpageRoot, packageRoot) ? webpageRoot : undefined;
|
|
34
|
+
}
|
|
35
|
+
|
|
24
36
|
export async function resolveExtraBuildDependenciesAsync(
|
|
25
37
|
_projectNativeRoot: string
|
|
26
38
|
): Promise<ExtraDependencies | null> {
|
package/src/utils.ts
CHANGED
|
@@ -95,6 +95,11 @@ export const maybeRealpath = async (target: string): Promise<string | null> => {
|
|
|
95
95
|
}
|
|
96
96
|
};
|
|
97
97
|
|
|
98
|
+
export function isPathInside(child: string, parent: string): boolean {
|
|
99
|
+
const relative = path.relative(parent, child);
|
|
100
|
+
return !!relative && !relative.startsWith('..') && !path.isAbsolute(relative);
|
|
101
|
+
}
|
|
102
|
+
|
|
98
103
|
export type PackageJson = Record<string, unknown> & {
|
|
99
104
|
name?: string;
|
|
100
105
|
version?: string;
|