From 9cb5d1e55c4995c1461026f48dbc5916a36adefb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Wed, 11 Jun 2025 19:02:07 +0200 Subject: [PATCH 01/12] Run everything on all platforms --- .github/workflows/check.yml | 39 ++++++++----------------------------- 1 file changed, 8 insertions(+), 31 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index c9708b2e..6185e565 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -18,32 +18,12 @@ jobs: node-version: lts/jod - run: npm ci - run: npm run lint - test-simple: - name: Run tests which doesn't require MacOS - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: lts/jod - - run: npm ci - - run: npm run build - - run: npm test --workspace gyp-to-cmake --workspace cmake-rn --workspace react-native-node-api - test-windows: - name: Run tests on Windows - runs-on: windows-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: lts/jod - - run: npm ci - - run: npm run build - - run: npm test --workspace gyp-to-cmake --workspace cmake-rn --workspace react-native-node-api - - test-macos: - name: Run tests which requires MacOS - runs-on: macos-latest + test: + strategy: + matrix: + runner: [ubuntu-latest, windows-latest, macos-latest] + name: Test (${{ matrix.runner }}) + runs-on: ${{ matrix.runner }} steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 @@ -59,8 +39,5 @@ jobs: # Version here should match the one in React Native template and packages/cmake-rn/src/cli.ts - run: sdkmanager --install "ndk;27.1.12297006" - run: npm ci - - run: npm run build - - run: npm run copy-node-api-headers --workspace react-native-node-api - - run: npm run build-weak-node-api --workspace react-native-node-api - - run: npm run generate-weak-node-api-injector --workspace react-native-node-api - - run: npm test --workspace @react-native-node-api/node-addon-examples + - run: npm run bootstrap + - run: npm test From 22bcaeda4e2e8e749eee227a87ef23d1e25b4bbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Wed, 11 Jun 2025 19:05:15 +0200 Subject: [PATCH 02/12] Fix cross-platform issue when copying examples --- packages/node-addon-examples/scripts/cmake-projects.mts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/node-addon-examples/scripts/cmake-projects.mts b/packages/node-addon-examples/scripts/cmake-projects.mts index a37a84d4..a9d605f3 100644 --- a/packages/node-addon-examples/scripts/cmake-projects.mts +++ b/packages/node-addon-examples/scripts/cmake-projects.mts @@ -1,14 +1,14 @@ import { readdirSync, statSync } from "node:fs"; -import { join } from "node:path"; +import path from "node:path"; -export const EXAMPLES_DIR = new URL("../examples", import.meta.url).pathname; +export const EXAMPLES_DIR = path.resolve(import.meta.dirname, "../examples"); export function findCMakeProjects(dir = EXAMPLES_DIR): string[] { let results: string[] = []; const files = readdirSync(dir); for (const file of files) { - const fullPath = join(dir, file); + const fullPath = path.join(dir, file); if (statSync(fullPath).isDirectory()) { results = results.concat(findCMakeProjects(fullPath)); } else if (file === "CMakeLists.txt") { From 06b12dd4a10373081d4e612c3dc1d0376f259a39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Wed, 11 Jun 2025 19:05:34 +0200 Subject: [PATCH 03/12] Explicit package type --- packages/node-addon-examples/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/node-addon-examples/package.json b/packages/node-addon-examples/package.json index 4700be7e..835485c9 100644 --- a/packages/node-addon-examples/package.json +++ b/packages/node-addon-examples/package.json @@ -1,5 +1,6 @@ { "name": "@react-native-node-api/node-addon-examples", + "type": "commonjs", "private": true, "homepage": "https://github.com/callstackincubator/react-native-node-api", "repository": { From f83683ddb8168c9350634f8a8e213862c57a66ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Tue, 17 Jun 2025 13:08:59 +0200 Subject: [PATCH 04/12] Use default triplets when building examples --- packages/ferric-example/package.json | 2 +- packages/host/package.json | 5 +++-- packages/node-addon-examples/scripts/build-examples.mts | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/ferric-example/package.json b/packages/ferric-example/package.json index 73869b66..515e0a71 100644 --- a/packages/ferric-example/package.json +++ b/packages/ferric-example/package.json @@ -11,7 +11,7 @@ "main": "ferric_example.js", "types": "ferric_example.d.ts", "scripts": { - "build": "ferric build --android --apple" + "build": "ferric build" }, "devDependencies": { "ferric-cli": "^0.1.0" diff --git a/packages/host/package.json b/packages/host/package.json index 1079ef60..81831acb 100644 --- a/packages/host/package.json +++ b/packages/host/package.json @@ -44,9 +44,10 @@ "copy-node-api-headers": "tsx scripts/copy-node-api-headers.ts", "generate-weak-node-api": "tsx scripts/generate-weak-node-api.ts", "generate-weak-node-api-injector": "tsx scripts/generate-weak-node-api-injector.ts", - "build-weak-node-api": "npm run generate-weak-node-api && cmake-rn --android --apple --no-auto-link --no-weak-node-api-linkage --xcframework-extension --source ./weak-node-api", + "build-weak-node-api": "cmake-rn --no-auto-link --no-weak-node-api-linkage --xcframework-extension --source ./weak-node-api", + "build-weak-node-api:all-triplets": "cmake-rn --android --apple --no-auto-link --no-weak-node-api-linkage --xcframework-extension --source ./weak-node-api", "test": "tsx --test --test-reporter=@reporters/github --test-reporter-destination=stdout --test-reporter=spec --test-reporter-destination=stdout src/node/**/*.test.ts src/node/*.test.ts", - "bootstrap": "npm run copy-node-api-headers && npm run generate-weak-node-api-injector && npm run build-weak-node-api" + "bootstrap": "npm run copy-node-api-headers && npm run generate-weak-node-api-injector && npm run generate-weak-node-api && npm run build-weak-node-api" }, "keywords": [ "react-native", diff --git a/packages/node-addon-examples/scripts/build-examples.mts b/packages/node-addon-examples/scripts/build-examples.mts index f43f446f..a8d587e9 100644 --- a/packages/node-addon-examples/scripts/build-examples.mts +++ b/packages/node-addon-examples/scripts/build-examples.mts @@ -7,7 +7,8 @@ const projectDirectories = findCMakeProjects(); for (const projectDirectory of projectDirectories) { console.log(`Running "cmake-rn" in ${projectDirectory}`); execSync( - "cmake-rn --android --apple", + "cmake-rn", + // "cmake-rn --android --apple", // "cmake-rn --triplet aarch64-linux-android --triplet arm64-apple-ios-sim", { cwd: projectDirectory, From 5343b079d4c3fb0c2ca21a84f22a2765e56ad824 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Tue, 17 Jun 2025 13:24:41 +0200 Subject: [PATCH 05/12] Fix getting the WeakNodeApi path --- packages/cmake-rn/src/weak-node-api.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/cmake-rn/src/weak-node-api.ts b/packages/cmake-rn/src/weak-node-api.ts index 7dde4ba6..2f483c9b 100644 --- a/packages/cmake-rn/src/weak-node-api.ts +++ b/packages/cmake-rn/src/weak-node-api.ts @@ -1,6 +1,7 @@ import fs from "node:fs"; import assert from "node:assert/strict"; import path from "node:path"; +import { fileURLToPath } from "node:url"; import { isAndroidTriplet, @@ -16,12 +17,12 @@ export function toCmakePath(input: string) { } export function getWeakNodeApiPath(triplet: SupportedTriplet): string { - const { pathname } = new URL( + const basePath = fileURLToPath( import.meta.resolve("react-native-node-api/weak-node-api") ); - assert(fs.existsSync(pathname), "Weak Node API path does not exist"); + assert(fs.existsSync(basePath), "Weak Node API path does not exist"); if (isAppleTriplet(triplet)) { - const xcframeworkPath = path.join(pathname, "weak-node-api.xcframework"); + const xcframeworkPath = path.join(basePath, "weak-node-api.xcframework"); assert( fs.existsSync(xcframeworkPath), `Expected an XCFramework at ${xcframeworkPath}` @@ -29,15 +30,16 @@ export function getWeakNodeApiPath(triplet: SupportedTriplet): string { return xcframeworkPath; } else if (isAndroidTriplet(triplet)) { const libraryPath = path.join( - pathname, + basePath, "weak-node-api.android.node", ANDROID_ARCHITECTURES[triplet], "libweak-node-api.so" ); assert(fs.existsSync(libraryPath), `Expected library at ${libraryPath}`); return libraryPath; + } else { + throw new Error(`Unexpected triplet: ${triplet}`); } - return pathname; } export function getWeakNodeApiVariables(triplet: SupportedTriplet) { From 424558fa3a7d9319a49114cf3d3f0d5e88f08e85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Thu, 19 Jun 2025 21:53:21 +0200 Subject: [PATCH 06/12] Build ferric-example when bootstrapping --- packages/ferric-example/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/ferric-example/package.json b/packages/ferric-example/package.json index 515e0a71..a7918a27 100644 --- a/packages/ferric-example/package.json +++ b/packages/ferric-example/package.json @@ -11,7 +11,8 @@ "main": "ferric_example.js", "types": "ferric_example.d.ts", "scripts": { - "build": "ferric build" + "build": "ferric build", + "bootstrap": "npm run build" }, "devDependencies": { "ferric-cli": "^0.1.0" From 107540d6c7bb40ce9067c50c7fcf79e2c78810ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Thu, 19 Jun 2025 21:57:50 +0200 Subject: [PATCH 07/12] Add names to workflow --- .github/workflows/check.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 6185e565..a47dbab6 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -1,3 +1,5 @@ +name: Check + on: push: branches: @@ -10,6 +12,7 @@ concurrency: jobs: lint: + name: Lint runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 From a91a23a1c8bdd27b9b4832705ac393d059471b36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Thu, 19 Jun 2025 22:25:22 +0200 Subject: [PATCH 08/12] Install Rust targets --- .github/workflows/check.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index a47dbab6..94e7287b 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -41,6 +41,7 @@ jobs: uses: android-actions/setup-android@v3 # Version here should match the one in React Native template and packages/cmake-rn/src/cli.ts - run: sdkmanager --install "ndk;27.1.12297006" + - run: rustup target add x86_64-linux-android aarch64-linux-android aarch64-apple-ios-sim - run: npm ci - run: npm run bootstrap - run: npm test From 445b8aabc6c10031bb6d6586bca84c90cbf86238 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Thu, 19 Jun 2025 22:31:28 +0200 Subject: [PATCH 09/12] Ensure right order between bootstraps --- package.json | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 416b119a..9c4e7070 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,13 @@ "type": "module", "private": true, "workspaces": [ - "apps/*", - "packages/*" + "apps/test-app", + "packages/gyp-to-cmake", + "packages/cmake-rn", + "packages/ferric", + "packages/host", + "packages/node-addon-examples", + "packages/ferric-example" ], "homepage": "https://github.com/callstackincubator/react-native-node-api#readme", "scripts": { From 9feeeab72dae2e842497b40b98f3e7f4a5726f3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Thu, 19 Jun 2025 22:37:17 +0200 Subject: [PATCH 10/12] Upgrade napi-rs --- package-lock.json | 185 +++++++++++++++-------------------- packages/ferric/package.json | 2 +- 2 files changed, 81 insertions(+), 106 deletions(-) diff --git a/package-lock.json b/package-lock.json index 71abcb99..1c72b7dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,8 +7,13 @@ "name": "@react-native-node-api/root", "license": "MIT", "workspaces": [ - "apps/*", - "packages/*" + "apps/test-app", + "packages/gyp-to-cmake", + "packages/cmake-rn", + "packages/ferric", + "packages/host", + "packages/node-addon-examples", + "packages/ferric-example" ], "devDependencies": { "@eslint/js": "^9.19.0", @@ -3372,15 +3377,15 @@ } }, "node_modules/@napi-rs/cli": { - "version": "3.0.0-alpha.80", - "resolved": "https://registry.npmjs.org/@napi-rs/cli/-/cli-3.0.0-alpha.80.tgz", - "integrity": "sha512-wgzLg9ZBOHJ4NKhw6B1uFtpYKOLiQQ6/kSNJEpjylCvcMyuS/TtBX3L3lFsA9B1AxWFhnVj9yvBWiuDXpleGRg==", + "version": "3.0.0-alpha.89", + "resolved": "https://registry.npmjs.org/@napi-rs/cli/-/cli-3.0.0-alpha.89.tgz", + "integrity": "sha512-Xi/B/unPVZJx12Qmj9+Z3+vfgmGdhp2tjtvH1VFjC6VrToh/i1fOBSv77j9WhYYWayFGhIit7nLcxQWxigXr8A==", "license": "MIT", "dependencies": { "@inquirer/prompts": "^7.4.0", "@napi-rs/cross-toolchain": "^0.0.19", "@napi-rs/wasm-tools": "^0.0.3", - "@octokit/rest": "^21.1.1", + "@octokit/rest": "^22.0.0", "clipanion": "^4.0.0-rc.4", "colorette": "^2.0.20", "debug": "^4.4.0", @@ -4333,187 +4338,157 @@ } }, "node_modules/@octokit/auth-token": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.2.tgz", - "integrity": "sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-6.0.0.tgz", + "integrity": "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==", "license": "MIT", "engines": { - "node": ">= 18" + "node": ">= 20" } }, "node_modules/@octokit/core": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.5.tgz", - "integrity": "sha512-vvmsN0r7rguA+FySiCsbaTTobSftpIDIpPW81trAmsv9TGxg3YCujAxRYp/Uy8xmDgYCzzgulG62H7KYUFmeIg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-7.0.2.tgz", + "integrity": "sha512-ODsoD39Lq6vR6aBgvjTnA3nZGliknKboc9Gtxr7E4WDNqY24MxANKcuDQSF0jzapvGb3KWOEDrKfve4HoWGK+g==", "license": "MIT", "dependencies": { - "@octokit/auth-token": "^5.0.0", - "@octokit/graphql": "^8.2.2", - "@octokit/request": "^9.2.3", - "@octokit/request-error": "^6.1.8", + "@octokit/auth-token": "^6.0.0", + "@octokit/graphql": "^9.0.1", + "@octokit/request": "^10.0.2", + "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0", - "before-after-hook": "^3.0.2", + "before-after-hook": "^4.0.0", "universal-user-agent": "^7.0.0" }, "engines": { - "node": ">= 18" + "node": ">= 20" } }, "node_modules/@octokit/endpoint": { - "version": "10.1.4", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.4.tgz", - "integrity": "sha512-OlYOlZIsfEVZm5HCSR8aSg02T2lbUWOsCQoPKfTXJwDzcHQBrVBGdGXb89dv2Kw2ToZaRtudp8O3ZIYoaOjKlA==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-11.0.0.tgz", + "integrity": "sha512-hoYicJZaqISMAI3JfaDr1qMNi48OctWuOih1m80bkYow/ayPw6Jj52tqWJ6GEoFTk1gBqfanSoI1iY99Z5+ekQ==", "license": "MIT", "dependencies": { "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.2" }, "engines": { - "node": ">= 18" + "node": ">= 20" } }, "node_modules/@octokit/graphql": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.2.2.tgz", - "integrity": "sha512-Yi8hcoqsrXGdt0yObxbebHXFOiUA+2v3n53epuOg1QUgOB6c4XzvisBNVXJSl8RYA5KrDuSL2yq9Qmqe5N0ryA==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-9.0.1.tgz", + "integrity": "sha512-j1nQNU1ZxNFx2ZtKmL4sMrs4egy5h65OMDmSbVyuCzjOcwsHq6EaYjOTGXPQxgfiN8dJ4CriYHk6zF050WEULg==", "license": "MIT", "dependencies": { - "@octokit/request": "^9.2.3", + "@octokit/request": "^10.0.2", "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.0" }, "engines": { - "node": ">= 18" + "node": ">= 20" } }, "node_modules/@octokit/openapi-types": { - "version": "25.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-25.0.0.tgz", - "integrity": "sha512-FZvktFu7HfOIJf2BScLKIEYjDsw6RKc7rBJCdvCTfKsVnx2GEB/Nbzjr29DUdb7vQhlzS/j8qDzdditP0OC6aw==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-25.1.0.tgz", + "integrity": "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA==", "license": "MIT" }, "node_modules/@octokit/plugin-paginate-rest": { - "version": "11.6.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.6.0.tgz", - "integrity": "sha512-n5KPteiF7pWKgBIBJSk8qzoZWcUkza2O6A0za97pMGVrGfPdltxrfmfF5GucHYvHGZD8BdaZmmHGz5cX/3gdpw==", + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-13.1.0.tgz", + "integrity": "sha512-16iNOa4rTTjaWtfsPGJcYYL79FJakseX8TQFIPfVuSPC3s5nkS/DSNQPFPc5lJHgEDBWNMxSApHrEymNblhA9w==", "license": "MIT", "dependencies": { - "@octokit/types": "^13.10.0" + "@octokit/types": "^14.1.0" }, "engines": { - "node": ">= 18" + "node": ">= 20" }, "peerDependencies": { "@octokit/core": ">=6" } }, - "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", - "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", - "license": "MIT" - }, - "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", - "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^24.2.0" - } - }, "node_modules/@octokit/plugin-request-log": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-5.3.1.tgz", - "integrity": "sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-6.0.0.tgz", + "integrity": "sha512-UkOzeEN3W91/eBq9sPZNQ7sUBvYCqYbrrD8gTbBuGtHEuycE4/awMXcYvx6sVYo7LypPhmQwwpUe4Yyu4QZN5Q==", "license": "MIT", "engines": { - "node": ">= 18" + "node": ">= 20" }, "peerDependencies": { "@octokit/core": ">=6" } }, "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "13.5.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.5.0.tgz", - "integrity": "sha512-9Pas60Iv9ejO3WlAX3maE1+38c5nqbJXV5GrncEfkndIpZrJ/WPMRd2xYDcPPEt5yzpxcjw9fWNoPhsSGzqKqw==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-16.0.0.tgz", + "integrity": "sha512-kJVUQk6/dx/gRNLWUnAWKFs1kVPn5O5CYZyssyEoNYaFedqZxsfYs7DwI3d67hGz4qOwaJ1dpm07hOAD1BXx6g==", "license": "MIT", "dependencies": { - "@octokit/types": "^13.10.0" + "@octokit/types": "^14.1.0" }, "engines": { - "node": ">= 18" + "node": ">= 20" }, "peerDependencies": { "@octokit/core": ">=6" } }, - "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", - "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", - "license": "MIT" - }, - "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", - "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^24.2.0" - } - }, "node_modules/@octokit/request": { - "version": "9.2.3", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.2.3.tgz", - "integrity": "sha512-Ma+pZU8PXLOEYzsWf0cn/gY+ME57Wq8f49WTXA8FMHp2Ps9djKw//xYJ1je8Hm0pR2lU9FUGeJRWOtxq6olt4w==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-10.0.2.tgz", + "integrity": "sha512-iYj4SJG/2bbhh+iIpFmG5u49DtJ4lipQ+aPakjL9OKpsGY93wM8w06gvFbEQxcMsZcCvk5th5KkIm2m8o14aWA==", "license": "MIT", "dependencies": { - "@octokit/endpoint": "^10.1.4", - "@octokit/request-error": "^6.1.8", + "@octokit/endpoint": "^11.0.0", + "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0", - "fast-content-type-parse": "^2.0.0", + "fast-content-type-parse": "^3.0.0", "universal-user-agent": "^7.0.2" }, "engines": { - "node": ">= 18" + "node": ">= 20" } }, "node_modules/@octokit/request-error": { - "version": "6.1.8", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.8.tgz", - "integrity": "sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-7.0.0.tgz", + "integrity": "sha512-KRA7VTGdVyJlh0cP5Tf94hTiYVVqmt2f3I6mnimmaVz4UG3gQV/k4mDJlJv3X67iX6rmN7gSHCF8ssqeMnmhZg==", "license": "MIT", "dependencies": { "@octokit/types": "^14.0.0" }, "engines": { - "node": ">= 18" + "node": ">= 20" } }, "node_modules/@octokit/rest": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-21.1.1.tgz", - "integrity": "sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg==", + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-22.0.0.tgz", + "integrity": "sha512-z6tmTu9BTnw51jYGulxrlernpsQYXpui1RK21vmXn8yF5bp6iX16yfTtJYGK5Mh1qDkvDOmp2n8sRMcQmR8jiA==", "license": "MIT", "dependencies": { - "@octokit/core": "^6.1.4", - "@octokit/plugin-paginate-rest": "^11.4.2", - "@octokit/plugin-request-log": "^5.3.1", - "@octokit/plugin-rest-endpoint-methods": "^13.3.0" + "@octokit/core": "^7.0.2", + "@octokit/plugin-paginate-rest": "^13.0.1", + "@octokit/plugin-request-log": "^6.0.0", + "@octokit/plugin-rest-endpoint-methods": "^16.0.0" }, "engines": { - "node": ">= 18" + "node": ">= 20" } }, "node_modules/@octokit/types": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-14.0.0.tgz", - "integrity": "sha512-VVmZP0lEhbo2O1pdq63gZFiGCKkm8PPp8AUOijlwPO6hojEVjspA0MWKP7E4hbvGxzFKNqKr6p0IYtOH/Wf/zA==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-14.1.0.tgz", + "integrity": "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==", "license": "MIT", "dependencies": { - "@octokit/openapi-types": "^25.0.0" + "@octokit/openapi-types": "^25.1.0" } }, "node_modules/@react-native-community/cli": { @@ -6036,9 +6011,9 @@ "license": "MIT" }, "node_modules/before-after-hook": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz", - "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-4.0.0.tgz", + "integrity": "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==", "license": "Apache-2.0" }, "node_modules/bl": { @@ -7357,9 +7332,9 @@ } }, "node_modules/fast-content-type-parse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz", - "integrity": "sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-3.0.0.tgz", + "integrity": "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==", "funding": [ { "type": "github", @@ -11884,7 +11859,7 @@ "version": "0.1.0", "dependencies": { "@commander-js/extra-typings": "^13.1.0", - "@napi-rs/cli": "3.0.0-alpha.80", + "@napi-rs/cli": "3.0.0-alpha.89", "bufout": "^0.3.2", "chalk": "^5.4.1", "commander": "^13.1.0", diff --git a/packages/ferric/package.json b/packages/ferric/package.json index e9e38a24..59919d5e 100644 --- a/packages/ferric/package.json +++ b/packages/ferric/package.json @@ -16,7 +16,7 @@ "start": "tsx src/run.ts" }, "dependencies": { - "@napi-rs/cli": "3.0.0-alpha.80", + "@napi-rs/cli": "3.0.0-alpha.89", "@commander-js/extra-typings": "^13.1.0", "bufout": "^0.3.2", "chalk": "^5.4.1", From 9f968b4c308f61a2d975414f7e5ed91bdf38d0a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Thu, 19 Jun 2025 22:52:02 +0200 Subject: [PATCH 11/12] Fix getting path for weak-node-api on Windows --- packages/ferric/src/cargo.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/ferric/src/cargo.ts b/packages/ferric/src/cargo.ts index dde7222c..26b06970 100644 --- a/packages/ferric/src/cargo.ts +++ b/packages/ferric/src/cargo.ts @@ -2,6 +2,7 @@ import assert from "node:assert/strict"; import cp from "node:child_process"; import fs from "node:fs"; import path from "node:path"; +import { fileURLToPath } from "node:url"; import { spawn } from "bufout"; import chalk from "chalk"; @@ -14,9 +15,9 @@ import { isAppleTarget, } from "./targets.js"; -const WEAK_NODE_API_PATH = new URL( +const WEAK_NODE_API_PATH = fileURLToPath( import.meta.resolve("react-native-node-api/weak-node-api") -).pathname; +); const APPLE_XCFRAMEWORK_CHILDS_PER_TARGET: Record = { "aarch64-apple-darwin": "macos-arm64_x86_64", // Universal From 13cacb8b3422a8fe9eceaa3b135547b35a105e4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Thu, 19 Jun 2025 22:53:14 +0200 Subject: [PATCH 12/12] No need to fail tests fast --- .github/workflows/check.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 94e7287b..bace33bf 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -23,6 +23,7 @@ jobs: - run: npm run lint test: strategy: + fail-fast: false matrix: runner: [ubuntu-latest, windows-latest, macos-latest] name: Test (${{ matrix.runner }})