diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 12b02262..c2f637d5 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -121,6 +121,9 @@ jobs: export CC=clang export CFLAGS="-fuse-ld=lld" pnpm --filter=@oxc-node/core build --target s390x-unknown-linux-gnu --use-napi-cross + - host: ubuntu-latest + target: aarch64-unknown-linux-ohos + build: pnpm --filter=@oxc-node/core build --target aarch64-unknown-linux-ohos - host: ubuntu-latest target: wasm32-wasip1-threads build: pnpm --filter=@oxc-node/core build --target wasm32-wasip1-threads @@ -149,7 +152,7 @@ jobs: - uses: goto-bus-stop/setup-zig@abea47f85e598557f500fa1fd2ab7464fcb39406 # v2.2.1 if: ${{ contains(matrix.settings.target, 'musl') }} with: - version: 0.14.0 + version: 0.14.1 - name: Install cargo-zigbuild uses: taiki-e/install-action@c07504cae06f832dc8de08911c9a9c5cddb0d2d3 # v2.56.13 if: ${{ contains(matrix.settings.target, 'musl') }} @@ -157,6 +160,9 @@ jobs: GITHUB_TOKEN: ${{ github.token }} with: tool: cargo-zigbuild + - name: Setup OpenHarmony toolchain + if: ${{ contains(matrix.settings.target, 'ohos') }} + uses: openharmony-rs/setup-ohos-sdk@10564ad8040178be4aa02e0d3a2c25c32779fa3f # v0.2 - name: Setup toolchain run: ${{ matrix.settings.setup }} if: ${{ matrix.settings.setup }} diff --git a/packages/core/index.d.ts b/packages/core/index.d.ts index f78d44e2..26569a72 100644 --- a/packages/core/index.d.ts +++ b/packages/core/index.d.ts @@ -13,12 +13,8 @@ export declare class Output { sourceMap(): string | null } -export function transform(path: string, source: string | Uint8Array): Output - -export function transformAsync(path: string, source: string | Uint8Array): Promise - export declare class OxcTransformer { - constructor(cwd?: string) + constructor(cwd?: string | undefined | null) transform(path: string, source: string | Uint8Array): Output transformAsync(path: string, source: string | Uint8Array | Buffer): Promise } @@ -62,3 +58,7 @@ export interface ResolveFnOutput { url: string importAttributes?: Record | null } + +export declare function transform(path: string, source: string | Uint8Array): Output + +export declare function transformAsync(path: string, source: string | Uint8Array | Buffer): Promise diff --git a/packages/core/index.js b/packages/core/index.js index faf90a5b..d89cb180 100644 --- a/packages/core/index.js +++ b/packages/core/index.js @@ -82,7 +82,6 @@ function requireNative() { } catch (e) { loadErrors.push(e) } - } else if (process.arch === 'arm') { try { return require('./oxc-node.android-arm-eabi.node') @@ -94,7 +93,6 @@ function requireNative() { } catch (e) { loadErrors.push(e) } - } else { loadErrors.push(new Error(`Unsupported architecture on Android ${process.arch}`)) } @@ -110,7 +108,6 @@ function requireNative() { } catch (e) { loadErrors.push(e) } - } else if (process.arch === 'ia32') { try { return require('./oxc-node.win32-ia32-msvc.node') @@ -122,7 +119,6 @@ function requireNative() { } catch (e) { loadErrors.push(e) } - } else if (process.arch === 'arm64') { try { return require('./oxc-node.win32-arm64-msvc.node') @@ -134,22 +130,20 @@ function requireNative() { } catch (e) { loadErrors.push(e) } - } else { loadErrors.push(new Error(`Unsupported architecture on Windows: ${process.arch}`)) } } else if (process.platform === 'darwin') { try { - return require('./oxc-node.darwin-universal.node') - } catch (e) { - loadErrors.push(e) - } - try { - return require('@oxc-node/core-darwin-universal') - } catch (e) { - loadErrors.push(e) - } - + return require('./oxc-node.darwin-universal.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('@oxc-node/core-darwin-universal') + } catch (e) { + loadErrors.push(e) + } if (process.arch === 'x64') { try { return require('./oxc-node.darwin-x64.node') @@ -161,7 +155,6 @@ function requireNative() { } catch (e) { loadErrors.push(e) } - } else if (process.arch === 'arm64') { try { return require('./oxc-node.darwin-arm64.node') @@ -173,7 +166,6 @@ function requireNative() { } catch (e) { loadErrors.push(e) } - } else { loadErrors.push(new Error(`Unsupported architecture on macOS: ${process.arch}`)) } @@ -189,7 +181,6 @@ function requireNative() { } catch (e) { loadErrors.push(e) } - } else if (process.arch === 'arm64') { try { return require('./oxc-node.freebsd-arm64.node') @@ -201,7 +192,6 @@ function requireNative() { } catch (e) { loadErrors.push(e) } - } else { loadErrors.push(new Error(`Unsupported architecture on FreeBSD: ${process.arch}`)) } @@ -209,133 +199,160 @@ function requireNative() { if (process.arch === 'x64') { if (isMusl()) { try { - return require('./oxc-node.linux-x64-musl.node') - } catch (e) { - loadErrors.push(e) - } - try { - return require('@oxc-node/core-linux-x64-musl') - } catch (e) { - loadErrors.push(e) - } - + return require('./oxc-node.linux-x64-musl.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('@oxc-node/core-linux-x64-musl') + } catch (e) { + loadErrors.push(e) + } } else { try { - return require('./oxc-node.linux-x64-gnu.node') - } catch (e) { - loadErrors.push(e) - } - try { - return require('@oxc-node/core-linux-x64-gnu') - } catch (e) { - loadErrors.push(e) - } - + return require('./oxc-node.linux-x64-gnu.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('@oxc-node/core-linux-x64-gnu') + } catch (e) { + loadErrors.push(e) + } } } else if (process.arch === 'arm64') { if (isMusl()) { try { - return require('./oxc-node.linux-arm64-musl.node') - } catch (e) { - loadErrors.push(e) - } - try { - return require('@oxc-node/core-linux-arm64-musl') - } catch (e) { - loadErrors.push(e) - } - + return require('./oxc-node.linux-arm64-musl.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('@oxc-node/core-linux-arm64-musl') + } catch (e) { + loadErrors.push(e) + } } else { try { - return require('./oxc-node.linux-arm64-gnu.node') - } catch (e) { - loadErrors.push(e) - } - try { - return require('@oxc-node/core-linux-arm64-gnu') - } catch (e) { - loadErrors.push(e) - } - + return require('./oxc-node.linux-arm64-gnu.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('@oxc-node/core-linux-arm64-gnu') + } catch (e) { + loadErrors.push(e) + } } } else if (process.arch === 'arm') { if (isMusl()) { try { - return require('./oxc-node.linux-arm-musleabihf.node') - } catch (e) { - loadErrors.push(e) - } - try { - return require('@oxc-node/core-linux-arm-musleabihf') - } catch (e) { - loadErrors.push(e) + return require('./oxc-node.linux-arm-musleabihf.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('@oxc-node/core-linux-arm-musleabihf') + } catch (e) { + loadErrors.push(e) + } + } else { + try { + return require('./oxc-node.linux-arm-gnueabihf.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('@oxc-node/core-linux-arm-gnueabihf') + } catch (e) { + loadErrors.push(e) + } } - + } else if (process.arch === 'riscv64') { + if (isMusl()) { + try { + return require('./oxc-node.linux-riscv64-musl.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('@oxc-node/core-linux-riscv64-musl') + } catch (e) { + loadErrors.push(e) + } } else { try { - return require('./oxc-node.linux-arm-gnueabihf.node') + return require('./oxc-node.linux-riscv64-gnu.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('@oxc-node/core-linux-riscv64-gnu') + } catch (e) { + loadErrors.push(e) + } + } + } else if (process.arch === 'ppc64') { + try { + return require('./oxc-node.linux-ppc64-gnu.node') } catch (e) { loadErrors.push(e) } try { - return require('@oxc-node/core-linux-arm-gnueabihf') + return require('@oxc-node/core-linux-ppc64-gnu') } catch (e) { loadErrors.push(e) } - - } - } else if (process.arch === 'riscv64') { - if (isMusl()) { - try { - return require('./oxc-node.linux-riscv64-musl.node') + } else if (process.arch === 's390x') { + try { + return require('./oxc-node.linux-s390x-gnu.node') } catch (e) { loadErrors.push(e) } try { - return require('@oxc-node/core-linux-riscv64-musl') + return require('@oxc-node/core-linux-s390x-gnu') } catch (e) { loadErrors.push(e) } - - } else { - try { - return require('./oxc-node.linux-riscv64-gnu.node') + } else { + loadErrors.push(new Error(`Unsupported architecture on Linux: ${process.arch}`)) + } + } else if (process.platform === 'openharmony') { + if (process.arch === 'arm64') { + try { + return require('./oxc-node.linux-arm64-ohos.node') } catch (e) { loadErrors.push(e) } try { - return require('@oxc-node/core-linux-riscv64-gnu') + return require('@oxc-node/core-linux-arm64-ohos') } catch (e) { loadErrors.push(e) } - - } - } else if (process.arch === 'ppc64') { + } else if (process.arch === 'x64') { try { - return require('./oxc-node.linux-ppc64-gnu.node') + return require('./oxc-node.linux-x64-ohos.node') } catch (e) { loadErrors.push(e) } try { - return require('@oxc-node/core-linux-ppc64-gnu') + return require('@oxc-node/core-linux-x64-ohos') } catch (e) { loadErrors.push(e) } - - } else if (process.arch === 's390x') { + } else if (process.arch === 'arm') { try { - return require('./oxc-node.linux-s390x-gnu.node') + return require('./oxc-node.linux-arm-ohos.node') } catch (e) { loadErrors.push(e) } try { - return require('@oxc-node/core-linux-s390x-gnu') + return require('@oxc-node/core-linux-arm-ohos') } catch (e) { loadErrors.push(e) } - } else { - loadErrors.push(new Error(`Unsupported architecture on Linux: ${process.arch}`)) + loadErrors.push(new Error(`Unsupported architecture on OpenHarmony: ${process.arch}`)) } } else { loadErrors.push(new Error(`Unsupported OS: ${process.platform}, architecture: ${process.arch}`)) @@ -377,9 +394,9 @@ if (!nativeBinding) { module.exports = nativeBinding module.exports.Output = nativeBinding.Output -module.exports.transform = nativeBinding.transform -module.exports.transformAsync = nativeBinding.transformAsync module.exports.OxcTransformer = nativeBinding.OxcTransformer module.exports.createResolve = nativeBinding.createResolve module.exports.initTracing = nativeBinding.initTracing module.exports.load = nativeBinding.load +module.exports.transform = nativeBinding.transform +module.exports.transformAsync = nativeBinding.transformAsync diff --git a/packages/core/oxc-node.wasi-browser.js b/packages/core/oxc-node.wasi-browser.js index 2dc48af4..4464bccd 100644 --- a/packages/core/oxc-node.wasi-browser.js +++ b/packages/core/oxc-node.wasi-browser.js @@ -59,3 +59,5 @@ export const OxcTransformer = __napiModule.exports.OxcTransformer export const createResolve = __napiModule.exports.createResolve export const initTracing = __napiModule.exports.initTracing export const load = __napiModule.exports.load +export const transform = __napiModule.exports.transform +export const transformAsync = __napiModule.exports.transformAsync diff --git a/packages/core/oxc-node.wasi.cjs b/packages/core/oxc-node.wasi.cjs index 98a0d5dd..895ce86e 100644 --- a/packages/core/oxc-node.wasi.cjs +++ b/packages/core/oxc-node.wasi.cjs @@ -82,7 +82,7 @@ const { instance: __napiInstance, module: __wasiModule, napiModule: __napiModule const kHandle = Object.getOwnPropertySymbols(worker).find(s => s.toString().includes("kHandle") ); - if (kPublicPort) { + if (kHandle) { worker[kHandle].ref = () => {}; } @@ -113,3 +113,5 @@ module.exports.OxcTransformer = __napiModule.exports.OxcTransformer module.exports.createResolve = __napiModule.exports.createResolve module.exports.initTracing = __napiModule.exports.initTracing module.exports.load = __napiModule.exports.load +module.exports.transform = __napiModule.exports.transform +module.exports.transformAsync = __napiModule.exports.transformAsync diff --git a/packages/core/package.json b/packages/core/package.json index 6dbdc4e0..d14675b6 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1113,6 +1113,7 @@ "aarch64-linux-android", "aarch64-unknown-linux-gnu", "aarch64-unknown-linux-musl", + "aarch64-unknown-linux-ohos", "aarch64-pc-windows-msvc", "armv7-unknown-linux-gnueabihf", "powerpc64le-unknown-linux-gnu",