diff --git a/.github/workflows/CI.yaml b/.github/workflows/CI.yaml index b89e062..813a1d2 100644 --- a/.github/workflows/CI.yaml +++ b/.github/workflows/CI.yaml @@ -24,194 +24,192 @@ jobs: matrix: settings: - host: macos-latest - target: x86_64-apple-darwin - architecture: x64 + target: 'x86_64-apple-darwin' build: | yarn build strip -x node/*.node - host: windows-latest build: yarn build - target: x86_64-pc-windows-msvc - architecture: x64 - - host: windows-latest - build: | - yarn build --target i686-pc-windows-msvc - yarn test - target: i686-pc-windows-msvc - architecture: x86 + target: 'x86_64-pc-windows-msvc' + # - host: windows-latest + # build: | + # yarn build --target i686-pc-windows-msvc + # yarn test + # target: 'i686-pc-windows-msvc' - host: ubuntu-latest - target: x86_64-unknown-linux-gnu - architecture: x64 - docker: | - docker pull $DOCKER_REGISTRY_URL/napi-rs/napi-rs/nodejs-rust:lts-debian - docker tag $DOCKER_REGISTRY_URL/napi-rs/napi-rs/nodejs-rust:lts-debian builder - build: | - docker run --rm -v ~/.cargo/git:/root/.cargo/git -v ~/.cargo/registry:/root/.cargo/registry -v $(pwd):/build -w /build builder yarn build && strip node/magic-string-rs.linux-x64-gnu.node + target: 'x86_64-unknown-linux-gnu' + docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian + build: yarn build --target x86_64-unknown-linux-gnu && strip node/magic-string-rs.linux-x64-gnu.node - host: ubuntu-latest - target: x86_64-unknown-linux-musl - architecture: x64 - docker: | - docker pull $DOCKER_REGISTRY_URL/napi-rs/napi-rs/nodejs-rust:lts-alpine - docker tag $DOCKER_REGISTRY_URL/napi-rs/napi-rs/nodejs-rust:lts-alpine builder - build: docker run --rm -v ~/.cargo/git:/root/.cargo/git -v ~/.cargo/registry:/root/.cargo/registry -v $(pwd):/build -w /build builder yarn build && strip node/magic-string-rs.linux-x64-musl.node + target: 'x86_64-unknown-linux-musl' + docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine + build: yarn build && strip node/magic-string-rs.linux-x64-musl.node - host: macos-latest - target: aarch64-apple-darwin + target: 'aarch64-apple-darwin' build: | - yarn build --target=aarch64-apple-darwin + yarn build --target aarch64-apple-darwin strip -x node/*.node - host: ubuntu-latest - architecture: x64 - target: aarch64-unknown-linux-gnu - setup: | - sudo apt-get update - sudo apt-get install g++-aarch64-linux-gnu gcc-aarch64-linux-gnu -y + target: 'aarch64-unknown-linux-gnu' + docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian-aarch64 build: | - yarn build --target=aarch64-unknown-linux-gnu - aarch64-linux-gnu-strip node/magic-string-rs.linux-arm64-gnu.node + yarn build --target aarch64-unknown-linux-gnu + llvm-strip node/magic-string-rs.linux-arm64-gnu.node - host: ubuntu-latest - architecture: x64 - target: armv7-unknown-linux-gnueabihf + target: 'armv7-unknown-linux-gnueabihf' setup: | sudo apt-get update - sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf -y + sudo apt-get install gcc-arm-linux-gnueabihf -y build: | - yarn build --target=armv7-unknown-linux-gnueabihf + yarn build --target armv7-unknown-linux-gnueabihf arm-linux-gnueabihf-strip node/magic-string-rs.linux-arm-gnueabihf.node - host: ubuntu-latest - architecture: x64 - target: aarch64-linux-android + target: 'aarch64-linux-android' build: | - export CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang" - export CC="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang" - export CXX="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang++" - export PATH="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin:${PATH}" yarn build --target aarch64-linux-android - ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-strip node/*.node + ${ANDROID_NDK_LATEST_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip node/*.node - host: ubuntu-latest - architecture: x64 - target: armv7-linux-androideabi + target: 'armv7-linux-androideabi' build: | - export CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang" - export CC="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang" - export CXX="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang++" - export PATH="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin:${PATH}" yarn build --target armv7-linux-androideabi - ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-strip node/*.node + ${ANDROID_NDK_LATEST_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip node/*.node - host: ubuntu-latest - architecture: x64 - target: aarch64-unknown-linux-musl - downloadTarget: aarch64-unknown-linux-musl - docker: | - docker pull ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine - docker tag ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine builder - build: | - docker run --rm -v ~/.cargo/git:/root/.cargo/git -v ~/.cargo/registry:/root/.cargo/registry -v $(pwd):/build -w /build builder sh -c "yarn build --target=aarch64-unknown-linux-musl && /aarch64-linux-musl-cross/bin/aarch64-linux-musl-strip node/magic-string-rs.linux-arm64-musl.node" + target: 'aarch64-unknown-linux-musl' + docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine + build: >- + set -e && + rustup target add aarch64-unknown-linux-musl && + yarn build --target aarch64-unknown-linux-musl && + aarch64-linux-musl-strip node/magic-string-rs.linux-arm64-musl.node - host: windows-latest - architecture: x64 - target: aarch64-pc-windows-msvc + target: 'aarch64-pc-windows-msvc' build: yarn build --target aarch64-pc-windows-msvc - name: stable - ${{ matrix.settings.target }} - node@16 + - host: ubuntu-latest + target: 'riscv64gc-unknown-linux-gnu' + setup: | + sudo apt-get update + sudo apt-get install gcc-riscv64-linux-gnu -y + build: | + yarn build --target riscv64gc-unknown-linux-gnu + riscv64-linux-gnu-strip node/magic-string-rs.linux-riscv64-gnu.node + name: stable - ${{ matrix.settings.target }} - node@20 runs-on: ${{ matrix.settings.host }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 + - name: Setup node - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 + if: ${{ !matrix.settings.docker }} with: - node-version: 16 - check-latest: true + node-version: 20 cache: yarn - architecture: ${{ matrix.settings.architecture }} + - name: Install - uses: actions-rs/toolchain@v1 + uses: dtolnay/rust-toolchain@stable + if: ${{ !matrix.settings.docker }} with: - profile: minimal - override: true toolchain: stable - target: ${{ matrix.settings.target }} - - name: Generate Cargo.lock - uses: actions-rs/cargo@v1 - with: - command: generate-lockfile - - name: Cache cargo registry - uses: actions/cache@v2 + targets: ${{ matrix.settings.target }} + + - name: Cache cargo + uses: actions/cache@v4 with: - path: ~/.cargo/registry - key: ${{ matrix.settings.target }}-node@16-cargo-registry-trimmed-${{ hashFiles('**/Cargo.lock') }} - - name: Cache cargo index - uses: actions/cache@v2 + path: | + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + .cargo-cache + target/ + key: ${{ matrix.settings.target }}-cargo-${{ matrix.settings.host }} + + - uses: goto-bus-stop/setup-zig@v2 + if: ${{ matrix.settings.target == 'armv7-unknown-linux-gnueabihf' }} with: - path: ~/.cargo/git - key: ${{ matrix.settings.target }}-node@16-cargo-index-trimmed-${{ hashFiles('**/Cargo.lock') }} - - name: Cache NPM dependencies - uses: actions/cache@v2 - with: - path: node_modules - key: npm-cache-${{ matrix.settings.target }}-node@16-${{ hashFiles('yarn.lock') }} - - name: Pull latest image - run: ${{ matrix.settings.docker }} - env: - DOCKER_REGISTRY_URL: ghcr.io - if: ${{ matrix.settings.docker }} + version: 0.11.0 + - name: Setup toolchain run: ${{ matrix.settings.setup }} if: ${{ matrix.settings.setup }} shell: bash - - name: Install dependencies - run: yarn install --ignore-scripts --frozen-lockfile --registry https://registry.npmjs.org --network-timeout 300000 - - name: Build + + - name: Setup node x86 + if: matrix.settings.target == 'i686-pc-windows-msvc' + run: yarn config set supportedArchitectures.cpu "ia32" + shell: bash + + - name: 'Install dependencies' + run: yarn install + + - name: Setup node x86 + uses: actions/setup-node@v4 + if: matrix.settings.target == 'i686-pc-windows-msvc' + with: + node-version: 20 + cache: yarn + architecture: x86 + + - name: Build in docker + uses: addnab/docker-run-action@v3 + if: ${{ matrix.settings.docker }} + with: + image: ${{ matrix.settings.docker }} + options: --user 0:0 -v ${{ github.workspace }}/.cargo-cache/git/db:/usr/local/cargo/git/db -v ${{ github.workspace }}/.cargo/registry/cache:/usr/local/cargo/registry/cache -v ${{ github.workspace }}/.cargo/registry/index:/usr/local/cargo/registry/index -v ${{ github.workspace }}:/build -w /build + run: ${{ matrix.settings.build }} + + - name: 'Build' run: ${{ matrix.settings.build }} + if: ${{ !matrix.settings.docker }} shell: bash + - name: Upload artifact - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: bindings-${{ matrix.settings.target }} path: node/${{ env.APP_NAME }}.*.node if-no-files-found: error build-freebsd: - runs-on: macos-10.15 + runs-on: macos-12 name: Build FreeBSD steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Build id: build - uses: vmactions/freebsd-vm@v0.1.5 + uses: cross-platform-actions/action@v0.21.0 env: - DEBUG: napi:* - RUSTUP_HOME: /usr/local/rustup - CARGO_HOME: /usr/local/cargo + DEBUG: 'napi:*' RUSTUP_IO_THREADS: 1 with: - envs: DEBUG RUSTUP_HOME CARGO_HOME RUSTUP_IO_THREADS - usesh: true - mem: 3000 - prepare: | - pkg install -y curl node14 python2 - curl -qL https://www.npmjs.com/install.sh | sh - npm install -g yarn + operating_system: freebsd + version: '13.2' + memory: 8G + cpu_count: 3 + environment_variables: 'DEBUG RUSTUP_IO_THREADS' + shell: bash + run: | + sudo pkg install -y -f curl node libnghttp2 npm + sudo npm install -g yarn --ignore-scripts curl https://sh.rustup.rs -sSf --output rustup.sh sh rustup.sh -y --profile minimal --default-toolchain stable - export PATH="/usr/local/cargo/bin:$PATH" + source "$HOME/.cargo/env" echo "~~~~ rustc --version ~~~~" rustc --version echo "~~~~ node -v ~~~~" node -v echo "~~~~ yarn --version ~~~~" yarn --version - run: | - export PATH="/usr/local/cargo/bin:$PATH" pwd ls -lah whoami env freebsd-version - yarn install --ignore-scripts --frozen-lockfile --registry https://registry.npmjs.org --network-timeout 300000 + yarn install yarn --cwd node build - strip -x node/*.node yarn test rm -rf node_modules rm -rf target + rm -rf .yarn/cache - name: Upload artifact - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: bindings-freebsd path: node/${{ env.APP_NAME }}.*.node @@ -224,38 +222,38 @@ jobs: fail-fast: false matrix: settings: + - host: macos-latest + target: 'x86_64-apple-darwin' - host: windows-latest - target: x86_64-pc-windows-msvc - node: - - '12' - - '14' - - '16' + target: 'x86_64-pc-windows-msvc' + node: ['18', '20'] runs-on: ${{ matrix.settings.host }} + steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 + - name: Setup node - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node }} - check-latest: true - cache: yarn - - name: Cache NPM dependencies - uses: actions/cache@v2 - with: - path: node_modules - key: npm-cache-test-${{ matrix.settings.target }}-${{ matrix.node }}-${{ hashFiles('yarn.lock') }} - - name: Install dependencies - run: yarn install --ignore-scripts --frozen-lockfile --registry https://registry.npmjs.org --network-timeout 300000 + cache: 'yarn' + + - name: 'Install dependencies' + run: yarn install + - name: Download artifacts - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v4 with: name: bindings-${{ matrix.settings.target }} path: ./node + - name: List packages run: ls -R . shell: bash + - name: Test bindings run: yarn test + test-linux-x64-gnu-binding: name: Test bindings on Linux-x64-gnu - node@${{ matrix.node }} needs: @@ -263,36 +261,34 @@ jobs: strategy: fail-fast: false matrix: - node: - - '12' - - '14' - - '16' + node: ['18', '20'] runs-on: ubuntu-latest + steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 + - name: Setup node - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node }} - check-latest: true - cache: yarn - - name: Cache NPM dependencies - uses: actions/cache@v2 - with: - path: node_modules - key: npm-cache-test-linux-x64-gnu-${{ matrix.node }}-${{ hashFiles('yarn.lock') }} - - name: Install dependencies - run: yarn install --ignore-scripts --frozen-lockfile --registry https://registry.npmjs.org --network-timeout 300000 + cache: 'yarn' + + - name: 'Install dependencies' + run: yarn install + - name: Download artifacts - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v4 with: name: bindings-x86_64-unknown-linux-gnu path: ./node + - name: List packages run: ls -R . shell: bash + - name: Test bindings - run: docker run --rm -v $(pwd):/magic-string-rs -w /magic-string-rs node:${{ matrix.node }}-slim yarn test + run: docker run --rm -v $(pwd):/build -w /build node:${{ matrix.node }}-slim yarn test + test-linux-x64-musl-binding: name: Test bindings on x86_64-unknown-linux-musl - node@${{ matrix.node }} needs: @@ -300,36 +296,36 @@ jobs: strategy: fail-fast: false matrix: - node: - - '12' - - '14' - - '16' + node: ['18', '20'] runs-on: ubuntu-latest + steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 + - name: Setup node - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node }} - check-latest: true - cache: yarn - - name: Cache NPM dependencies - uses: actions/cache@v2 - with: - path: node_modules - key: npm-cache-test-x86_64-unknown-linux-musl-${{ matrix.node }}-${{ hashFiles('yarn.lock') }} - - name: Install dependencies - run: yarn install --ignore-scripts --frozen-lockfile --registry https://registry.npmjs.org --network-timeout 300000 + cache: 'yarn' + + - name: 'Install dependencies' + run: | + yarn config set supportedArchitectures.libc "musl" + yarn install + - name: Download artifacts - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v4 with: name: bindings-x86_64-unknown-linux-musl path: ./node + - name: List packages run: ls -R . shell: bash + - name: Test bindings - run: docker run --rm -v $(pwd):/magic-string-rs -w /magic-string-rs node:${{ matrix.node }}-alpine yarn test + run: docker run --rm -v $(pwd):/build -w /build node:${{ matrix.node }}-alpine yarn test + test-linux-aarch64-gnu-binding: name: Test bindings on aarch64-unknown-linux-gnu - node@${{ matrix.node }} needs: @@ -337,70 +333,85 @@ jobs: strategy: fail-fast: false matrix: - node: - - '12' - - '14' - - '16' + node: ['18', '20'] runs-on: ubuntu-latest + steps: - - run: docker run --rm --privileged multiarch/qemu-user-static:register --reset - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 + - name: Download artifacts - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v4 with: name: bindings-aarch64-unknown-linux-gnu path: ./node + - name: List packages run: ls -R . shell: bash - - name: Cache NPM dependencies - uses: actions/cache@v2 - with: - path: node_modules - key: npm-cache-test-linux-aarch64-gnu-${{ matrix.node }}-${{ hashFiles('yarn.lock') }} + - name: Install dependencies - run: yarn install --ignore-scripts --ignore-platform --frozen-lockfile --registry https://registry.npmjs.org --network-timeout 300000 + run: | + yarn config set supportedArchitectures.cpu "arm64" + yarn config set supportedArchitectures.libc "glibc" + yarn install + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + with: + platforms: arm64 + - run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + - name: Setup and run tests uses: addnab/docker-run-action@v3 with: - image: ghcr.io/napi-rs/napi-rs/nodejs:aarch64-${{ matrix.node }} - options: '-v ${{ github.workspace }}:/build -w /build' + image: node:${{ matrix.node }}-slim + options: --platform linux/arm64 -v ${{ github.workspace }}:/build -w /build run: | set -e yarn test ls -la + test-linux-aarch64-musl-binding: name: Test bindings on aarch64-unknown-linux-musl - node@${{ matrix.node }} needs: - build + runs-on: ubuntu-latest + steps: - - run: docker run --rm --privileged multiarch/qemu-user-static:register --reset - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 + - name: Download artifacts - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v4 with: name: bindings-aarch64-unknown-linux-musl path: ./node + - name: List packages run: ls -R . shell: bash - - name: Cache NPM dependencies - uses: actions/cache@v2 - with: - path: node_modules - key: npm-cache-test-linux-aarch64-musl-${{ matrix.node }}-${{ hashFiles('yarn.lock') }} + - name: Install dependencies - run: yarn install --ignore-scripts --ignore-platform --frozen-lockfile --registry https://registry.npmjs.org --network-timeout 300000 + run: | + yarn config set supportedArchitectures.cpu "arm64" + yarn config set supportedArchitectures.libc "musl" + yarn install + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + with: + platforms: arm64 + - run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + - name: Setup and run tests uses: addnab/docker-run-action@v3 with: - image: multiarch/alpine:aarch64-latest-stable - options: '-v ${{ github.workspace }}:/build -w /build' + image: node:lts-alpine + options: --platform linux/arm64 -v ${{ github.workspace }}:/build -w /build run: | set -e - apk add nodejs npm yarn yarn test + test-linux-arm-gnueabihf-binding: name: Test bindings on armv7-unknown-linux-gnueabihf - node@${{ matrix.node }} needs: @@ -408,75 +419,82 @@ jobs: strategy: fail-fast: false matrix: - node: - - '12' - - '14' - - '16' + node: ['18', '20'] runs-on: ubuntu-latest + steps: - - run: docker run --rm --privileged multiarch/qemu-user-static:register --reset - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 + - name: Download artifacts - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v4 with: name: bindings-armv7-unknown-linux-gnueabihf path: ./node + - name: List packages run: ls -R . shell: bash - - name: Cache NPM dependencies - uses: actions/cache@v2 - with: - path: node_modules - key: npm-cache-test-linux-arm-gnueabihf-${{ matrix.node }}-${{ hashFiles('yarn.lock') }} + - name: Install dependencies - run: yarn install --ignore-scripts --ignore-platform --frozen-lockfile --registry https://registry.npmjs.org --network-timeout 300000 + run: | + yarn config set supportedArchitectures.cpu "arm" + yarn install + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + with: + platforms: arm + - run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + - name: Setup and run tests uses: addnab/docker-run-action@v3 with: - image: ghcr.io/napi-rs/napi-rs/nodejs:armhf-${{ matrix.node }} - options: '-v ${{ github.workspace }}:/build -w /build' + image: node:${{ matrix.node }}-bullseye-slim + options: --platform linux/arm/v7 -v ${{ github.workspace }}:/build -w /build run: | set -e yarn test ls -la + publish: name: Publish runs-on: ubuntu-latest needs: - - build-freebsd - - test-macOS-windows-binding - test-linux-x64-gnu-binding - test-linux-x64-musl-binding - test-linux-aarch64-gnu-binding - - test-linux-aarch64-musl-binding - test-linux-arm-gnueabihf-binding + - test-macOS-windows-binding + - test-linux-aarch64-musl-binding + - build-freebsd + steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 + - name: Setup node - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 with: - node-version: 16 - check-latest: true - cache: yarn - - name: Cache NPM dependencies - uses: actions/cache@v2 - with: - path: node_modules - key: npm-cache-publish-ubuntu-latest-${{ hashFiles('yarn.lock') }} - - name: Install dependencies - run: yarn install --ignore-scripts --frozen-lockfile --registry https://registry.npmjs.org --network-timeout 300000 + node-version: 20 + cache: 'yarn' + + - name: 'Install dependencies' + run: yarn install + - name: Download all artifacts - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v4 with: path: node/artifacts + - name: Move artifacts run: yarn --cwd node artifacts + - name: List packages run: ls -R ./node/npm shell: bash + - name: Publish run: | + npm config set provenance true if git log -1 --pretty=%B | grep "^chore(release): v[0-9]\+\.[0-9]\+\.[0-9]\+$"; then echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc diff --git a/node/binding.js b/node/binding.js index bad3de2..3c0f30a 100644 --- a/node/binding.js +++ b/node/binding.js @@ -1,3 +1,9 @@ +/* tslint:disable */ +/* eslint-disable */ +/* prettier-ignore */ + +/* auto-generated by NAPI-RS */ + const { existsSync, readFileSync } = require('fs') const { join } = require('path') @@ -5,25 +11,59 @@ const { platform, arch } = process let nativeBinding = null let localFileExisted = false -let isMusl = false let loadError = null -switch (platform) { - case 'android': - if (arch !== 'arm64') { - throw new Error(`Unsupported architecture on Android ${arch}`) - } - localFileExisted = existsSync( - join(__dirname, 'magic-string-rs.android-arm64.node'), - ) +function isMusl() { + // For Node 10 + if (!process.report || typeof process.report.getReport !== 'function') { try { - if (localFileExisted) { - nativeBinding = require('./magic-string-rs.android-arm64.node') - } else { - nativeBinding = require('@napi-rs/magic-string-android-arm64') - } + const lddPath = require('child_process') + .execSync('which ldd') + .toString() + .trim() + return readFileSync(lddPath, 'utf8').includes('musl') } catch (e) { - loadError = e + return true + } + } else { + const { glibcVersionRuntime } = process.report.getReport().header + return !glibcVersionRuntime + } +} + +switch (platform) { + case 'android': + switch (arch) { + case 'arm64': + localFileExisted = existsSync( + join(__dirname, 'magic-string-rs.android-arm64.node'), + ) + try { + if (localFileExisted) { + nativeBinding = require('./magic-string-rs.android-arm64.node') + } else { + nativeBinding = require('@napi-rs/magic-string-android-arm64') + } + } catch (e) { + loadError = e + } + break + case 'arm': + localFileExisted = existsSync( + join(__dirname, 'magic-string-rs.android-arm-eabi.node'), + ) + try { + if (localFileExisted) { + nativeBinding = require('./magic-string-rs.android-arm-eabi.node') + } else { + nativeBinding = require('@napi-rs/magic-string-android-arm-eabi') + } + } catch (e) { + loadError = e + } + break + default: + throw new Error(`Unsupported architecture on Android ${arch}`) } break case 'win32': @@ -75,6 +115,17 @@ switch (platform) { } break case 'darwin': + localFileExisted = existsSync( + join(__dirname, 'magic-string-rs.darwin-universal.node'), + ) + try { + if (localFileExisted) { + nativeBinding = require('./magic-string-rs.darwin-universal.node') + } else { + nativeBinding = require('@napi-rs/magic-string-darwin-universal') + } + break + } catch {} switch (arch) { case 'x64': localFileExisted = existsSync( @@ -128,8 +179,7 @@ switch (platform) { case 'linux': switch (arch) { case 'x64': - isMusl = readFileSync('/usr/bin/ldd', 'utf8').includes('musl') - if (isMusl) { + if (isMusl()) { localFileExisted = existsSync( join(__dirname, 'magic-string-rs.linux-x64-musl.node'), ) @@ -158,8 +208,7 @@ switch (platform) { } break case 'arm64': - isMusl = readFileSync('/usr/bin/ldd', 'utf8').includes('musl') - if (isMusl) { + if (isMusl()) { localFileExisted = existsSync( join(__dirname, 'magic-string-rs.linux-arm64-musl.node'), ) @@ -201,6 +250,49 @@ switch (platform) { loadError = e } break + case 'riscv64': + if (isMusl()) { + localFileExisted = existsSync( + join(__dirname, 'magic-string-rs.linux-riscv64-musl.node'), + ) + try { + if (localFileExisted) { + nativeBinding = require('./magic-string-rs.linux-riscv64-musl.node') + } else { + nativeBinding = require('@napi-rs/magic-string-linux-riscv64-musl') + } + } catch (e) { + loadError = e + } + } else { + localFileExisted = existsSync( + join(__dirname, 'magic-string-rs.linux-riscv64-gnu.node'), + ) + try { + if (localFileExisted) { + nativeBinding = require('./magic-string-rs.linux-riscv64-gnu.node') + } else { + nativeBinding = require('@napi-rs/magic-string-linux-riscv64-gnu') + } + } catch (e) { + loadError = e + } + } + break + case 's390x': + localFileExisted = existsSync( + join(__dirname, 'magic-string-rs.linux-s390x-gnu.node'), + ) + try { + if (localFileExisted) { + nativeBinding = require('./magic-string-rs.linux-s390x-gnu.node') + } else { + nativeBinding = require('@napi-rs/magic-string-linux-s390x-gnu') + } + } catch (e) { + loadError = e + } + break default: throw new Error(`Unsupported architecture on Linux: ${arch}`) } diff --git a/node/index.d.ts b/node/index.d.ts index 4fd0916..2537978 100644 --- a/node/index.d.ts +++ b/node/index.d.ts @@ -3,26 +3,30 @@ /* auto-generated by NAPI-RS */ -export class ExternalObject { - readonly '': { - readonly '': unique symbol - [K: symbol]: T - } +export interface GenerateDecodedMapOptions { + file?: string + sourceRoot?: string + source?: string + includeContent: boolean + hires: boolean +} +export interface OverwriteOptions { + contentOnly: boolean } /** Only for .d.ts type generation */ export interface DecodedMap { - file?: string | undefined | null + file?: string sources: Array - sourceRoot?: string | undefined | null + sourceRoot?: string sourcesContent: Array names: Array mappings: Array>> } /** Only for .d.ts generation */ export interface GenerateDecodedMapOptions { - file?: string | undefined | null - sourceRoot?: string | undefined | null - source?: string | undefined | null + file?: string + sourceRoot?: string + source?: string includeContent: boolean hires: boolean } diff --git a/node/npm/linux-arm64-gnu/package.json b/node/npm/linux-arm64-gnu/package.json index adec480..c384cbb 100644 --- a/node/npm/linux-arm64-gnu/package.json +++ b/node/npm/linux-arm64-gnu/package.json @@ -37,5 +37,8 @@ "registry": "https://registry.npmjs.org/", "access": "public" }, - "repository": "https://github.com/h-a-n-a/magic-string-rs.git" + "repository": "https://github.com/h-a-n-a/magic-string-rs.git", + "libc": [ + "glibc" + ] } \ No newline at end of file diff --git a/node/npm/linux-arm64-musl/package.json b/node/npm/linux-arm64-musl/package.json index 761f22f..1b0f4d2 100644 --- a/node/npm/linux-arm64-musl/package.json +++ b/node/npm/linux-arm64-musl/package.json @@ -37,5 +37,8 @@ "registry": "https://registry.npmjs.org/", "access": "public" }, - "repository": "https://github.com/h-a-n-a/magic-string-rs.git" + "repository": "https://github.com/h-a-n-a/magic-string-rs.git", + "libc": [ + "musl" + ] } \ No newline at end of file diff --git a/node/npm/linux-riscv64-gnu/README.md b/node/npm/linux-riscv64-gnu/README.md new file mode 100644 index 0000000..7c320cc --- /dev/null +++ b/node/npm/linux-riscv64-gnu/README.md @@ -0,0 +1,3 @@ +# `@napi-rs/magic-string-linux-riscv64-gnu` + +This is the **riscv64gc-unknown-linux-gnu** binary for `@napi-rs/magic-string` diff --git a/node/npm/linux-riscv64-gnu/package.json b/node/npm/linux-riscv64-gnu/package.json new file mode 100644 index 0000000..4d38991 --- /dev/null +++ b/node/npm/linux-riscv64-gnu/package.json @@ -0,0 +1,44 @@ +{ + "name": "@napi-rs/magic-string-linux-riscv64-gnu", + "version": "0.3.4", + "os": [ + "linux" + ], + "cpu": [ + "riscv64" + ], + "main": "magic-string-rs.linux-riscv64-gnu.node", + "files": [ + "magic-string-rs.linux-riscv64-gnu.node" + ], + "description": "rusty magic-string", + "keywords": [ + "magic-string", + "string", + "napi", + "N-API", + "napi-rs" + ], + "authors": [ + { + "name": "h-a-n-a", + "email": "andywangsy@gmail.com" + }, + { + "name": "LongYinan", + "email": "github@lyn.one" + } + ], + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "publishConfig": { + "registry": "https://registry.npmjs.org/", + "access": "public" + }, + "repository": "https://github.com/h-a-n-a/magic-string-rs.git", + "libc": [ + "glibc" + ] +} \ No newline at end of file diff --git a/node/npm/linux-x64-gnu/package.json b/node/npm/linux-x64-gnu/package.json index f26d50d..7bdbf55 100644 --- a/node/npm/linux-x64-gnu/package.json +++ b/node/npm/linux-x64-gnu/package.json @@ -37,5 +37,8 @@ "registry": "https://registry.npmjs.org/", "access": "public" }, - "repository": "https://github.com/h-a-n-a/magic-string-rs.git" + "repository": "https://github.com/h-a-n-a/magic-string-rs.git", + "libc": [ + "glibc" + ] } \ No newline at end of file diff --git a/node/npm/linux-x64-musl/package.json b/node/npm/linux-x64-musl/package.json index fcf97df..fd687a1 100644 --- a/node/npm/linux-x64-musl/package.json +++ b/node/npm/linux-x64-musl/package.json @@ -37,5 +37,8 @@ "registry": "https://registry.npmjs.org/", "access": "public" }, - "repository": "https://github.com/h-a-n-a/magic-string-rs.git" + "repository": "https://github.com/h-a-n-a/magic-string-rs.git", + "libc": [ + "musl" + ] } \ No newline at end of file diff --git a/node/package.json b/node/package.json index 75527f5..639b886 100644 --- a/node/package.json +++ b/node/package.json @@ -55,7 +55,8 @@ "aarch64-unknown-linux-musl", "aarch64-pc-windows-msvc", "aarch64-linux-android", - "armv7-linux-androideabi" + "armv7-linux-androideabi", + "riscv64gc-unknown-linux-gnu" ] } }, diff --git a/package.json b/package.json index 0740cc7..bb7b939 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "test": "mocha -r @swc-node/register node/tests/**/*.spec.ts" }, "devDependencies": { - "@napi-rs/cli": "^2.0.0", + "@napi-rs/cli": "^2.17.0", "@swc-node/register": "^1.4.0", "@types/mocha": "^9.0.0", "@types/node": "^16.11.12", diff --git a/yarn.lock b/yarn.lock index 1b57979..3d3319c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -86,10 +86,10 @@ resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== -"@napi-rs/cli@^2.0.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@napi-rs/cli/-/cli-2.1.0.tgz#c0d34051e7488d6e7f2ffd14ba06909fa68b491d" - integrity sha512-1qXXjODcXqYsBQcmIFxlsg8yh2JDRPg/GJryDxXFOu8L2tscmVPGiPgSfEX3MI1r7jPUxVePKk/Gbv9k22fASw== +"@napi-rs/cli@^2.17.0": + version "2.18.0" + resolved "https://registry.yarnpkg.com/@napi-rs/cli/-/cli-2.18.0.tgz#3064f142e65c87d14e6ddc38e5425aa29a8871eb" + integrity sha512-lfSRT7cs3iC4L+kv9suGYQEezn5Nii7Kpu+THsYVI0tA1Vh59LH45p4QADaD7hvIkmOz79eEGtoKQ9nAkAPkzA== "@napi-rs/triples@^1.0.3": version "1.1.0"