feat: upgrade all deps (#132)
@ -1,7 +1,7 @@
|
|||||||
[target.i686-pc-windows-msvc]
|
[target.i686-pc-windows-msvc]
|
||||||
rustflags = ["-C", "target-feature=+sse4.2"]
|
rustflags = ["-C", "target-feature=+avx2"]
|
||||||
[target.x86_64-unknown-linux-gnu]
|
[target.x86_64-unknown-linux-gnu]
|
||||||
rustflags = ["-C", "target-feature=+sse4.2"]
|
rustflags = ["-C", "target-feature=+avx2"]
|
||||||
[target.x86_64-unknown-linux-musl]
|
[target.x86_64-unknown-linux-musl]
|
||||||
rustflags = ["-C", "target-feature=-crt-static"]
|
rustflags = ["-C", "target-feature=-crt-static"]
|
||||||
[target.aarch64-unknown-linux-gnu]
|
[target.aarch64-unknown-linux-gnu]
|
||||||
|
|||||||
137
.github/workflows/CI.yml
vendored
@ -45,6 +45,17 @@ jobs:
|
|||||||
python -m pip install meson
|
python -m pip install meson
|
||||||
yarn workspace @napi-rs/image build --target x86_64-pc-windows-msvc --features with_simd
|
yarn workspace @napi-rs/image build --target x86_64-pc-windows-msvc --features with_simd
|
||||||
target: x86_64-pc-windows-msvc
|
target: x86_64-pc-windows-msvc
|
||||||
|
- host: macos-latest
|
||||||
|
target: aarch64-pc-windows-msvc
|
||||||
|
setup: |
|
||||||
|
brew update
|
||||||
|
brew install meson llvm
|
||||||
|
build: |
|
||||||
|
export XWIN_CACHE_DIR="$(pwd)/.xwin"
|
||||||
|
export XWIN_ARCH=aarch64
|
||||||
|
export PATH="$(brew --prefix llvm)/bin:$PATH"
|
||||||
|
clang --version
|
||||||
|
CFLAGS="-mneon /FIintrin.h" yarn workspace @napi-rs/image build -x --features with_simd --target aarch64-pc-windows-msvc
|
||||||
- host: macos-latest
|
- host: macos-latest
|
||||||
setup: |
|
setup: |
|
||||||
brew update
|
brew update
|
||||||
@ -52,12 +63,12 @@ jobs:
|
|||||||
build: |
|
build: |
|
||||||
export XWIN_CACHE_DIR="$(pwd)/.xwin"
|
export XWIN_CACHE_DIR="$(pwd)/.xwin"
|
||||||
export XWIN_ARCH=x86
|
export XWIN_ARCH=x86
|
||||||
export CFLAGS="-mavx2 -mpclmul"
|
export CFLAGS="-mavx2 -mpclmul /FIintrin.h"
|
||||||
export CXXFLAGS="-mavx2 -mpclmul"
|
export CXXFLAGS="-mavx2 -mpclmul"
|
||||||
export CARGO_PROFILE_RELEASE_LTO="false"
|
export CARGO_PROFILE_RELEASE_LTO="false"
|
||||||
export PATH="$(brew --prefix llvm)/bin:$PATH"
|
export PATH="$(brew --prefix llvm)/bin:$PATH"
|
||||||
clang --version
|
clang --version
|
||||||
CARGO="cargo-xwin" yarn workspace @napi-rs/image build --features with_simd --target i686-pc-windows-msvc
|
yarn workspace @napi-rs/image build -x --features with_simd --target i686-pc-windows-msvc
|
||||||
target: i686-pc-windows-msvc
|
target: i686-pc-windows-msvc
|
||||||
- host: ubuntu-latest
|
- host: ubuntu-latest
|
||||||
target: x86_64-unknown-linux-gnu
|
target: x86_64-unknown-linux-gnu
|
||||||
@ -74,17 +85,16 @@ jobs:
|
|||||||
chmod -R 777 target
|
chmod -R 777 target
|
||||||
- host: ubuntu-latest
|
- host: ubuntu-latest
|
||||||
target: x86_64-unknown-linux-musl
|
target: x86_64-unknown-linux-musl
|
||||||
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
|
docker: ghcr.io/brooooooklyn/canvas/musl-builder:lts
|
||||||
build: >-
|
build: >-
|
||||||
set -e &&
|
set -e &&
|
||||||
unset RUSTFLAGS &&
|
apk add libc++-dev libc++-static &&
|
||||||
unset CC &&
|
cp /usr/lib/gcc/x86_64-alpine-linux-musl/14.2.0/*.o /usr/lib/ &&
|
||||||
unset CXX &&
|
cp /usr/lib/gcc/x86_64-alpine-linux-musl/14.2.0/libgcc.a /usr/lib/ &&
|
||||||
apk add --update --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing --no-cache perl nasm aom-dev meson &&
|
cp /usr/lib/gcc/x86_64-alpine-linux-musl/14.2.0/libgcc_eh.a /usr/lib/ &&
|
||||||
export LIB_AOM_STATIC_LIB_PATH=/usr/lib &&
|
wget "https://github.com/Brooooooklyn/canvas/releases/download/libcxxabi-$(cat llvm-version)/libc++abi-x86_64.a" &&
|
||||||
export LIB_AOM_INCLUDE_PATH=/usr/include/aom/aom &&
|
mv libc++abi-x86_64.a /usr/lib/libc++abi.a &&
|
||||||
export LIB_AOM_PKG_CONFIG_PATH=/usr/lib/pkgconfig &&
|
CXXFLAGS="-std=c++20 -stdlib=libc++ -static -fPIC -fno-cxx-exceptions -fno-exceptions -I/usr/include/c++/v1" CC=clang CXX=clang++ yarn workspace @napi-rs/image build --target x86_64-unknown-linux-musl --features with_simd &&
|
||||||
yarn workspace @napi-rs/image build --target x86_64-unknown-linux-musl --features with_simd &&
|
|
||||||
chmod -R 777 target
|
chmod -R 777 target
|
||||||
- host: macos-latest
|
- host: macos-latest
|
||||||
target: aarch64-apple-darwin
|
target: aarch64-apple-darwin
|
||||||
@ -113,15 +123,6 @@ jobs:
|
|||||||
export CXXFLAGS="-fuse-ld=lld -mcrc -B/usr/aarch64-unknown-linux-gnu/lib/gcc/aarch64-unknown-linux-gnu/4.8.5 --sysroot=/usr/aarch64-unknown-linux-gnu/aarch64-unknown-linux-gnu/sysroot -L/usr/aarch64-unknown-linux-gnu/lib/llvm-18/lib -stdlib=libc++" &&
|
export CXXFLAGS="-fuse-ld=lld -mcrc -B/usr/aarch64-unknown-linux-gnu/lib/gcc/aarch64-unknown-linux-gnu/4.8.5 --sysroot=/usr/aarch64-unknown-linux-gnu/aarch64-unknown-linux-gnu/sysroot -L/usr/aarch64-unknown-linux-gnu/lib/llvm-18/lib -stdlib=libc++" &&
|
||||||
yarn workspace @napi-rs/image build --features with_simd --target aarch64-unknown-linux-gnu &&
|
yarn workspace @napi-rs/image build --features with_simd --target aarch64-unknown-linux-gnu &&
|
||||||
chmod -R 777 target
|
chmod -R 777 target
|
||||||
- host: ubuntu-latest
|
|
||||||
target: armv7-unknown-linux-gnueabihf
|
|
||||||
setup: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install meson gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
|
|
||||||
build: |
|
|
||||||
export CC="arm-linux-gnueabihf-gcc"
|
|
||||||
export CARGO_CFG_TARGET_FEATURE="neon"
|
|
||||||
yarn workspace @napi-rs/image build --target armv7-unknown-linux-gnueabihf --features oxipng_libdeflater --use-napi-cross
|
|
||||||
- host: ubuntu-latest
|
- host: ubuntu-latest
|
||||||
target: aarch64-linux-android
|
target: aarch64-linux-android
|
||||||
build: |
|
build: |
|
||||||
@ -153,7 +154,7 @@ jobs:
|
|||||||
export CMAKE_BUILD_PARALLEL_LEVEL=2
|
export CMAKE_BUILD_PARALLEL_LEVEL=2
|
||||||
yarn workspace @napi-rs/image build --target wasm32-wasip1-threads
|
yarn workspace @napi-rs/image build --target wasm32-wasip1-threads
|
||||||
|
|
||||||
name: stable - ${{ matrix.settings.target }} - node@20
|
name: stable - ${{ matrix.settings.target }} - node@22
|
||||||
runs-on: ${{ matrix.settings.host }}
|
runs-on: ${{ matrix.settings.host }}
|
||||||
env:
|
env:
|
||||||
RUST_TARGET: ${{ matrix.settings.target }}
|
RUST_TARGET: ${{ matrix.settings.target }}
|
||||||
@ -162,14 +163,14 @@ jobs:
|
|||||||
- name: Setup node
|
- name: Setup node
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
node-version: 22
|
||||||
cache: yarn
|
cache: yarn
|
||||||
- name: Setup nasm
|
- name: Setup nasm
|
||||||
uses: ilammy/setup-nasm@v1
|
uses: ilammy/setup-nasm@v1
|
||||||
if: matrix.settings.target == 'x86_64-pc-windows-msvc' || matrix.settings.target == 'x86_64-apple-darwin' || matrix.settings.target == 'i686-pc-windows-msvc'
|
if: matrix.settings.target == 'x86_64-pc-windows-msvc' || matrix.settings.target == 'x86_64-apple-darwin' || matrix.settings.target == 'i686-pc-windows-msvc'
|
||||||
- name: Install cargo-xwin
|
- name: Install cargo-xwin
|
||||||
uses: taiki-e/install-action@v2
|
uses: taiki-e/install-action@v2
|
||||||
if: matrix.settings.target == 'i686-pc-windows-msvc'
|
if: matrix.settings.target == 'i686-pc-windows-msvc' || matrix.settings.target == 'aarch64-pc-windows-msvc'
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ github.token }}
|
GITHUB_TOKEN: ${{ github.token }}
|
||||||
with:
|
with:
|
||||||
@ -194,11 +195,16 @@ jobs:
|
|||||||
- uses: goto-bus-stop/setup-zig@v2
|
- uses: goto-bus-stop/setup-zig@v2
|
||||||
if: ${{ contains(matrix.settings.target, 'musl') }}
|
if: ${{ contains(matrix.settings.target, 'musl') }}
|
||||||
with:
|
with:
|
||||||
version: 0.13.0
|
version: 0.14.1
|
||||||
- name: Setup toolchain
|
- name: Setup toolchain
|
||||||
run: ${{ matrix.settings.setup }}
|
run: ${{ matrix.settings.setup }}
|
||||||
if: ${{ matrix.settings.setup }}
|
if: ${{ matrix.settings.setup }}
|
||||||
shell: bash
|
shell: bash
|
||||||
|
- name: Install LLVM and Clang
|
||||||
|
uses: KyleMayes/install-llvm-action@v2
|
||||||
|
if: ${{ matrix.settings.target == 'armv7-unknown-linux-gnueabihf' }}
|
||||||
|
with:
|
||||||
|
version: '20'
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: yarn install --immutable --mode=skip-build
|
run: yarn install --immutable --mode=skip-build
|
||||||
- name: Build in docker
|
- name: Build in docker
|
||||||
@ -220,6 +226,59 @@ jobs:
|
|||||||
packages/*/*.node
|
packages/*/*.node
|
||||||
packages/*/*.wasm
|
packages/*/*.wasm
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
|
|
||||||
|
|
||||||
|
build-armv7-linux-gnueabihf:
|
||||||
|
name: Build armv7-unknown-linux-gnueabihf
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: debian:buster
|
||||||
|
steps:
|
||||||
|
- name: Setup tools
|
||||||
|
run: |
|
||||||
|
apt-get update
|
||||||
|
apt-get install -y gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf libatomic1-armhf-cross git build-essential cmake ninja-build wget curl gnupg
|
||||||
|
echo "deb http://apt.llvm.org/buster/ llvm-toolchain-buster-18 main" >> /etc/apt/sources.list
|
||||||
|
echo "deb-src http://apt.llvm.org/buster/ llvm-toolchain-buster-18 main" >> /etc/apt/sources.list
|
||||||
|
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -
|
||||||
|
apt-get update
|
||||||
|
apt-get install -y clang-18
|
||||||
|
ln -s /usr/bin/clang-18 /usr/bin/clang
|
||||||
|
ln -s /usr/bin/clang++-18 /usr/bin/clang++
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- name: Setup cmake
|
||||||
|
uses: jwlawson/actions-setup-cmake@v2
|
||||||
|
with:
|
||||||
|
cmake-version: '3.x'
|
||||||
|
- name: Setup node
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: 22
|
||||||
|
- name: Install
|
||||||
|
uses: dtolnay/rust-toolchain@stable
|
||||||
|
with:
|
||||||
|
toolchain: stable
|
||||||
|
targets: 'armv7-unknown-linux-gnueabihf'
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
corepack enable
|
||||||
|
yarn install --immutable --mode=skip-build
|
||||||
|
- name: Config git
|
||||||
|
run: git config --global --add safe.directory "$(pwd)"
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
export CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER=arm-linux-gnueabihf-gcc
|
||||||
|
yarn workspace @napi-rs/image build --target armv7-unknown-linux-gnueabihf --features oxipng_libdeflater
|
||||||
|
- name: Upload artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: bindings-armv7-unknown-linux-gnueabihf
|
||||||
|
path: |
|
||||||
|
packages/*/*.node
|
||||||
|
if-no-files-found: error
|
||||||
|
|
||||||
build-freebsd:
|
build-freebsd:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
name: Build FreeBSD
|
name: Build FreeBSD
|
||||||
@ -227,7 +286,7 @@ jobs:
|
|||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- name: Build
|
- name: Build
|
||||||
id: build
|
id: build
|
||||||
uses: cross-platform-actions/action@v0.26.0
|
uses: cross-platform-actions/action@v0.28.0
|
||||||
env:
|
env:
|
||||||
DEBUG: 'napi:*'
|
DEBUG: 'napi:*'
|
||||||
RUSTUP_HOME: /home/runner/rustup
|
RUSTUP_HOME: /home/runner/rustup
|
||||||
@ -235,7 +294,7 @@ jobs:
|
|||||||
RUSTUP_IO_THREADS: 1
|
RUSTUP_IO_THREADS: 1
|
||||||
with:
|
with:
|
||||||
operating_system: freebsd
|
operating_system: freebsd
|
||||||
version: '14.0'
|
version: '14.2'
|
||||||
memory: 8G
|
memory: 8G
|
||||||
cpu_count: 3
|
cpu_count: 3
|
||||||
environment_variables: 'DEBUG RUSTUP_IO_THREADS'
|
environment_variables: 'DEBUG RUSTUP_IO_THREADS'
|
||||||
@ -284,8 +343,8 @@ jobs:
|
|||||||
- host: macos-latest
|
- host: macos-latest
|
||||||
target: aarch64-apple-darwin
|
target: aarch64-apple-darwin
|
||||||
node:
|
node:
|
||||||
- '18'
|
|
||||||
- '20'
|
- '20'
|
||||||
|
- '22'
|
||||||
runs-on: ${{ matrix.settings.host }}
|
runs-on: ${{ matrix.settings.host }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
@ -310,6 +369,8 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
name: bindings-${{ matrix.settings.target }}
|
name: bindings-${{ matrix.settings.target }}
|
||||||
path: artifacts
|
path: artifacts
|
||||||
|
- name: Create npm dirs
|
||||||
|
run: yarn workspace @napi-rs/image napi create-npm-dirs
|
||||||
- name: Move artifacts
|
- name: Move artifacts
|
||||||
run: yarn artifacts
|
run: yarn artifacts
|
||||||
shell: bash
|
shell: bash
|
||||||
@ -332,8 +393,8 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
node:
|
node:
|
||||||
- '18'
|
|
||||||
- '20'
|
- '20'
|
||||||
|
- '22'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
@ -349,6 +410,8 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
name: bindings-x86_64-unknown-linux-gnu
|
name: bindings-x86_64-unknown-linux-gnu
|
||||||
path: artifacts
|
path: artifacts
|
||||||
|
- name: Create npm dirs
|
||||||
|
run: yarn workspace @napi-rs/image napi create-npm-dirs
|
||||||
- name: Move artifacts
|
- name: Move artifacts
|
||||||
run: yarn artifacts
|
run: yarn artifacts
|
||||||
shell: bash
|
shell: bash
|
||||||
@ -365,8 +428,8 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
node:
|
node:
|
||||||
- '18'
|
|
||||||
- '20'
|
- '20'
|
||||||
|
- '22'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
@ -382,6 +445,8 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
name: bindings-x86_64-unknown-linux-musl
|
name: bindings-x86_64-unknown-linux-musl
|
||||||
path: artifacts
|
path: artifacts
|
||||||
|
- name: Create npm dirs
|
||||||
|
run: yarn workspace @napi-rs/image napi create-npm-dirs
|
||||||
- name: Move artifacts
|
- name: Move artifacts
|
||||||
run: yarn artifacts
|
run: yarn artifacts
|
||||||
shell: bash
|
shell: bash
|
||||||
@ -409,6 +474,8 @@ jobs:
|
|||||||
path: artifacts
|
path: artifacts
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: yarn install --immutable --mode=skip-build
|
run: yarn install --immutable --mode=skip-build
|
||||||
|
- name: Create npm dirs
|
||||||
|
run: yarn workspace @napi-rs/image napi create-npm-dirs
|
||||||
- name: Move artifacts
|
- name: Move artifacts
|
||||||
run: yarn artifacts
|
run: yarn artifacts
|
||||||
shell: bash
|
shell: bash
|
||||||
@ -429,13 +496,13 @@ jobs:
|
|||||||
test-linux-arm-gnueabihf-binding:
|
test-linux-arm-gnueabihf-binding:
|
||||||
name: Test bindings on armv7-unknown-linux-gnueabihf - node@${{ matrix.node }}
|
name: Test bindings on armv7-unknown-linux-gnueabihf - node@${{ matrix.node }}
|
||||||
needs:
|
needs:
|
||||||
- build
|
- build-armv7-linux-gnueabihf
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
node:
|
node:
|
||||||
- '18'
|
|
||||||
- '20'
|
- '20'
|
||||||
|
- '22'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
@ -446,6 +513,8 @@ jobs:
|
|||||||
path: artifacts
|
path: artifacts
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: yarn install --immutable --mode=skip-build
|
run: yarn install --immutable --mode=skip-build
|
||||||
|
- name: Create npm dirs
|
||||||
|
run: yarn workspace @napi-rs/image napi create-npm-dirs
|
||||||
- name: Move artifacts
|
- name: Move artifacts
|
||||||
run: yarn artifacts
|
run: yarn artifacts
|
||||||
shell: bash
|
shell: bash
|
||||||
@ -477,6 +546,8 @@ jobs:
|
|||||||
path: artifacts
|
path: artifacts
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: yarn install --immutable --mode=skip-build
|
run: yarn install --immutable --mode=skip-build
|
||||||
|
- name: Create npm dirs
|
||||||
|
run: yarn workspace @napi-rs/image napi create-npm-dirs
|
||||||
- name: Move artifacts
|
- name: Move artifacts
|
||||||
run: yarn artifacts
|
run: yarn artifacts
|
||||||
shell: bash
|
shell: bash
|
||||||
@ -504,10 +575,12 @@ jobs:
|
|||||||
- name: Setup node
|
- name: Setup node
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
node-version: 22
|
||||||
cache: yarn
|
cache: yarn
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: yarn install --immutable --mode=skip-build
|
run: yarn install --immutable --mode=skip-build
|
||||||
|
- name: Create npm dirs
|
||||||
|
run: yarn workspace @napi-rs/image napi create-npm-dirs
|
||||||
- name: Download all artifacts
|
- name: Download all artifacts
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
|
|||||||
1
.gitignore
vendored
@ -24,3 +24,4 @@ nasa-small.*
|
|||||||
output-overlay-png.png
|
output-overlay-png.png
|
||||||
output-debian.jpeg
|
output-debian.jpeg
|
||||||
*.wasm
|
*.wasm
|
||||||
|
packages/binding/npm
|
||||||
934
.yarn/releases/yarn-4.6.0.cjs
vendored
942
.yarn/releases/yarn-4.9.2.cjs
vendored
Executable file
@ -1,3 +1,3 @@
|
|||||||
nodeLinker: node-modules
|
nodeLinker: node-modules
|
||||||
|
|
||||||
yarnPath: .yarn/releases/yarn-4.6.0.cjs
|
yarnPath: .yarn/releases/yarn-4.9.2.cjs
|
||||||
|
|||||||
1
llvm-version
Normal file
@ -0,0 +1 @@
|
|||||||
|
19.1.7
|
||||||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 8.6 KiB |
24
package.json
@ -12,20 +12,20 @@
|
|||||||
"website"
|
"website"
|
||||||
],
|
],
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@napi-rs/cli": "^3.0.0-alpha.59",
|
"@napi-rs/cli": "^3.0.0-alpha.91",
|
||||||
"@taplo/cli": "^0.7.0",
|
"@taplo/cli": "^0.7.0",
|
||||||
"@types/node": "^22.0.0",
|
"@types/node": "^24.0.4",
|
||||||
"@types/sharp": "^0.32.0",
|
"@types/sharp": "^0.32.0",
|
||||||
"ava": "^6.1.3",
|
"ava": "^6.4.0",
|
||||||
"blurhash": "^2.0.5",
|
"blurhash": "^2.0.5",
|
||||||
"chalk": "^5.3.0",
|
"chalk": "^5.4.1",
|
||||||
"electron": "^33.0.0",
|
"electron": "^37.0.0",
|
||||||
"lerna": "^8.1.6",
|
"lerna": "^8.2.2",
|
||||||
"npm-run-all2": "^7.0.0",
|
"npm-run-all2": "^8.0.4",
|
||||||
"prettier": "^3.3.3",
|
"prettier": "^3.6.1",
|
||||||
"rxjs": "^7.8.1",
|
"rxjs": "^7.8.2",
|
||||||
"sharp": "^0.33.4",
|
"sharp": "^0.34.2",
|
||||||
"typescript": "^5.5.3"
|
"typescript": "^5.8.3"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"artifacts": "lerna run artifacts",
|
"artifacts": "lerna run artifacts",
|
||||||
@ -70,6 +70,6 @@
|
|||||||
"pre-commit": "lint-staged && cargo fmt --all"
|
"pre-commit": "lint-staged && cargo fmt --all"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"packageManager": "yarn@4.6.0",
|
"packageManager": "yarn@4.9.2",
|
||||||
"repository": "git@github.com:Brooooooklyn/Image.git"
|
"repository": "git@github.com:Brooooooklyn/Image.git"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,13 +23,13 @@ jpeg-decoder = "0.3"
|
|||||||
libavif = { version = "0.14", default-features = false, features = ["codec-aom"] }
|
libavif = { version = "0.14", default-features = false, features = ["codec-aom"] }
|
||||||
libc = "0.2"
|
libc = "0.2"
|
||||||
lodepng = "3"
|
lodepng = "3"
|
||||||
napi = { version = "3.0.0-alpha", default-features = false, features = ["napi3"] }
|
napi = { version = "3.0.0-beta", default-features = false, features = ["napi3"] }
|
||||||
napi-derive = { version = "3.0.0-alpha", default-features = false, features = ["type-def"] }
|
napi-derive = { version = "3.0.0-beta", default-features = false, features = ["type-def"] }
|
||||||
num-complex = "0.4"
|
num-complex = "0.4"
|
||||||
num_cpus = "1"
|
num_cpus = "1"
|
||||||
once_cell = "1"
|
once_cell = "1"
|
||||||
png = "0.17"
|
png = "0.17"
|
||||||
resvg = "0.44"
|
resvg = "0.45"
|
||||||
rexif = "0.7"
|
rexif = "0.7"
|
||||||
rgb = "0.8"
|
rgb = "0.8"
|
||||||
svgtypes = "0.15"
|
svgtypes = "0.15"
|
||||||
@ -43,10 +43,10 @@ svgtypes = "0.15"
|
|||||||
version = "2"
|
version = "2"
|
||||||
|
|
||||||
[target.'cfg(not(all(target_os = "macos", target_arch = "x86_64")))'.dependencies]
|
[target.'cfg(not(all(target_os = "macos", target_arch = "x86_64")))'.dependencies]
|
||||||
libwebp-sys = { version = "0.11", default-features = false, features = ["std", "parallel", "avx2", "sse41", "neon"] }
|
libwebp-sys = { version = "0.12", default-features = false, features = ["std", "parallel", "avx2", "sse41", "neon"] }
|
||||||
|
|
||||||
[target.'cfg(all(target_os = "macos", target_arch = "x86_64"))'.dependencies]
|
[target.'cfg(all(target_os = "macos", target_arch = "x86_64"))'.dependencies]
|
||||||
libwebp-sys = { version = "0.11", default-features = false, features = ["std", "parallel"] }
|
libwebp-sys = { version = "0.12", default-features = false, features = ["std", "parallel"] }
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
napi-build = "2"
|
napi-build = "2"
|
||||||
|
|||||||
@ -1,16 +1,16 @@
|
|||||||
import {
|
import {
|
||||||
instantiateNapiModuleSync as __emnapiInstantiateNapiModuleSync,
|
|
||||||
getDefaultContext as __emnapiGetDefaultContext,
|
|
||||||
WASI as __WASI,
|
|
||||||
createOnMessage as __wasmCreateOnMessageForFsProxy,
|
createOnMessage as __wasmCreateOnMessageForFsProxy,
|
||||||
|
getDefaultContext as __emnapiGetDefaultContext,
|
||||||
|
instantiateNapiModuleSync as __emnapiInstantiateNapiModuleSync,
|
||||||
|
WASI as __WASI,
|
||||||
} from '@napi-rs/wasm-runtime'
|
} from '@napi-rs/wasm-runtime'
|
||||||
|
|
||||||
import __wasmUrl from './image.wasm32-wasi.wasm?url'
|
|
||||||
|
|
||||||
const __wasi = new __WASI({
|
const __wasi = new __WASI({
|
||||||
version: 'preview1',
|
version: 'preview1',
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const __wasmUrl = new URL('./image.wasm32-wasi.wasm', import.meta.url).href
|
||||||
const __emnapiContext = __emnapiGetDefaultContext()
|
const __emnapiContext = __emnapiGetDefaultContext()
|
||||||
|
|
||||||
const __sharedMemory = new WebAssembly.Memory({
|
const __sharedMemory = new WebAssembly.Memory({
|
||||||
@ -46,42 +46,14 @@ const {
|
|||||||
return importObject
|
return importObject
|
||||||
},
|
},
|
||||||
beforeInit({ instance }) {
|
beforeInit({ instance }) {
|
||||||
__napi_rs_initialize_modules(instance)
|
for (const name of Object.keys(instance.exports)) {
|
||||||
|
if (name.startsWith('__napi_register__')) {
|
||||||
|
instance.exports[name]()
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
export default __napiModule.exports
|
||||||
function __napi_rs_initialize_modules(__napiInstance) {
|
|
||||||
__napiInstance.exports['__napi_register__AvifConfig_struct_0']?.()
|
|
||||||
__napiInstance.exports['__napi_register__ChromaSubsampling_1']?.()
|
|
||||||
__napiInstance.exports['__napi_register__FastResizeFilter_2']?.()
|
|
||||||
__napiInstance.exports['__napi_register__ResizeFit_3']?.()
|
|
||||||
__napiInstance.exports['__napi_register__FastResizeOptions_struct_4']?.()
|
|
||||||
__napiInstance.exports['__napi_register__JpegCompressOptions_struct_5']?.()
|
|
||||||
__napiInstance.exports['__napi_register__compress_jpeg_sync_6']?.()
|
|
||||||
__napiInstance.exports['__napi_register__CompressJpegTask_impl_7']?.()
|
|
||||||
__napiInstance.exports['__napi_register__compress_jpeg_8']?.()
|
|
||||||
__napiInstance.exports['__napi_register__CompressionType_9']?.()
|
|
||||||
__napiInstance.exports['__napi_register__FilterType_10']?.()
|
|
||||||
__napiInstance.exports['__napi_register__PngEncodeOptions_struct_11']?.()
|
|
||||||
__napiInstance.exports['__napi_register__PngRowFilter_12']?.()
|
|
||||||
__napiInstance.exports['__napi_register__PNGLosslessOptions_struct_13']?.()
|
|
||||||
__napiInstance.exports['__napi_register__lossless_compress_png_sync_14']?.()
|
|
||||||
__napiInstance.exports['__napi_register__LosslessPngTask_impl_15']?.()
|
|
||||||
__napiInstance.exports['__napi_register__lossless_compress_png_16']?.()
|
|
||||||
__napiInstance.exports['__napi_register__PngQuantOptions_struct_17']?.()
|
|
||||||
__napiInstance.exports['__napi_register__png_quantize_sync_18']?.()
|
|
||||||
__napiInstance.exports['__napi_register__PngQuantTask_impl_19']?.()
|
|
||||||
__napiInstance.exports['__napi_register__png_quantize_20']?.()
|
|
||||||
__napiInstance.exports['__napi_register__Orientation_21']?.()
|
|
||||||
__napiInstance.exports['__napi_register__ResizeFilterType_22']?.()
|
|
||||||
__napiInstance.exports['__napi_register__JsColorType_23']?.()
|
|
||||||
__napiInstance.exports['__napi_register__Metadata_struct_24']?.()
|
|
||||||
__napiInstance.exports['__napi_register__MetadataTask_impl_25']?.()
|
|
||||||
__napiInstance.exports['__napi_register__ResizeOptions_struct_26']?.()
|
|
||||||
__napiInstance.exports['__napi_register__EncodeTask_impl_27']?.()
|
|
||||||
__napiInstance.exports['__napi_register__Transformer_struct_28']?.()
|
|
||||||
__napiInstance.exports['__napi_register__Transformer_impl_70']?.()
|
|
||||||
}
|
|
||||||
export const Transformer = __napiModule.exports.Transformer
|
export const Transformer = __napiModule.exports.Transformer
|
||||||
export const ChromaSubsampling = __napiModule.exports.ChromaSubsampling
|
export const ChromaSubsampling = __napiModule.exports.ChromaSubsampling
|
||||||
export const CompressionType = __napiModule.exports.CompressionType
|
export const CompressionType = __napiModule.exports.CompressionType
|
||||||
|
|||||||
@ -9,9 +9,9 @@ const { WASI: __nodeWASI } = require('node:wasi')
|
|||||||
const { Worker } = require('node:worker_threads')
|
const { Worker } = require('node:worker_threads')
|
||||||
|
|
||||||
const {
|
const {
|
||||||
instantiateNapiModuleSync: __emnapiInstantiateNapiModuleSync,
|
|
||||||
getDefaultContext: __emnapiGetDefaultContext,
|
|
||||||
createOnMessage: __wasmCreateOnMessageForFsProxy,
|
createOnMessage: __wasmCreateOnMessageForFsProxy,
|
||||||
|
getDefaultContext: __emnapiGetDefaultContext,
|
||||||
|
instantiateNapiModuleSync: __emnapiInstantiateNapiModuleSync,
|
||||||
} = require('@napi-rs/wasm-runtime')
|
} = require('@napi-rs/wasm-runtime')
|
||||||
|
|
||||||
const __rootDir = __nodePath.parse(process.cwd()).root
|
const __rootDir = __nodePath.parse(process.cwd()).root
|
||||||
@ -56,11 +56,11 @@ const { instance: __napiInstance, module: __wasiModule, napiModule: __napiModule
|
|||||||
return 4
|
return 4
|
||||||
}
|
}
|
||||||
})(),
|
})(),
|
||||||
|
reuseWorker: true,
|
||||||
wasi: __wasi,
|
wasi: __wasi,
|
||||||
onCreateWorker() {
|
onCreateWorker() {
|
||||||
const worker = new Worker(__nodePath.join(__dirname, 'wasi-worker.mjs'), {
|
const worker = new Worker(__nodePath.join(__dirname, 'wasi-worker.mjs'), {
|
||||||
env: process.env,
|
env: process.env,
|
||||||
execArgv: ['--experimental-wasi-unstable-preview1'],
|
|
||||||
})
|
})
|
||||||
worker.onmessage = ({ data }) => {
|
worker.onmessage = ({ data }) => {
|
||||||
__wasmCreateOnMessageForFsProxy(__nodeFs)(data)
|
__wasmCreateOnMessageForFsProxy(__nodeFs)(data)
|
||||||
@ -77,42 +77,14 @@ const { instance: __napiInstance, module: __wasiModule, napiModule: __napiModule
|
|||||||
return importObject
|
return importObject
|
||||||
},
|
},
|
||||||
beforeInit({ instance }) {
|
beforeInit({ instance }) {
|
||||||
__napi_rs_initialize_modules(instance)
|
for (const name of Object.keys(instance.exports)) {
|
||||||
|
if (name.startsWith('__napi_register__')) {
|
||||||
|
instance.exports[name]()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
module.exports = __napiModule.exports
|
||||||
function __napi_rs_initialize_modules(__napiInstance) {
|
|
||||||
__napiInstance.exports['__napi_register__AvifConfig_struct_0']?.()
|
|
||||||
__napiInstance.exports['__napi_register__ChromaSubsampling_1']?.()
|
|
||||||
__napiInstance.exports['__napi_register__FastResizeFilter_2']?.()
|
|
||||||
__napiInstance.exports['__napi_register__ResizeFit_3']?.()
|
|
||||||
__napiInstance.exports['__napi_register__FastResizeOptions_struct_4']?.()
|
|
||||||
__napiInstance.exports['__napi_register__JpegCompressOptions_struct_5']?.()
|
|
||||||
__napiInstance.exports['__napi_register__compress_jpeg_sync_6']?.()
|
|
||||||
__napiInstance.exports['__napi_register__CompressJpegTask_impl_7']?.()
|
|
||||||
__napiInstance.exports['__napi_register__compress_jpeg_8']?.()
|
|
||||||
__napiInstance.exports['__napi_register__CompressionType_9']?.()
|
|
||||||
__napiInstance.exports['__napi_register__FilterType_10']?.()
|
|
||||||
__napiInstance.exports['__napi_register__PngEncodeOptions_struct_11']?.()
|
|
||||||
__napiInstance.exports['__napi_register__PngRowFilter_12']?.()
|
|
||||||
__napiInstance.exports['__napi_register__PNGLosslessOptions_struct_13']?.()
|
|
||||||
__napiInstance.exports['__napi_register__lossless_compress_png_sync_14']?.()
|
|
||||||
__napiInstance.exports['__napi_register__LosslessPngTask_impl_15']?.()
|
|
||||||
__napiInstance.exports['__napi_register__lossless_compress_png_16']?.()
|
|
||||||
__napiInstance.exports['__napi_register__PngQuantOptions_struct_17']?.()
|
|
||||||
__napiInstance.exports['__napi_register__png_quantize_sync_18']?.()
|
|
||||||
__napiInstance.exports['__napi_register__PngQuantTask_impl_19']?.()
|
|
||||||
__napiInstance.exports['__napi_register__png_quantize_20']?.()
|
|
||||||
__napiInstance.exports['__napi_register__Orientation_21']?.()
|
|
||||||
__napiInstance.exports['__napi_register__ResizeFilterType_22']?.()
|
|
||||||
__napiInstance.exports['__napi_register__JsColorType_23']?.()
|
|
||||||
__napiInstance.exports['__napi_register__Metadata_struct_24']?.()
|
|
||||||
__napiInstance.exports['__napi_register__MetadataTask_impl_25']?.()
|
|
||||||
__napiInstance.exports['__napi_register__ResizeOptions_struct_26']?.()
|
|
||||||
__napiInstance.exports['__napi_register__EncodeTask_impl_27']?.()
|
|
||||||
__napiInstance.exports['__napi_register__Transformer_struct_28']?.()
|
|
||||||
__napiInstance.exports['__napi_register__Transformer_impl_70']?.()
|
|
||||||
}
|
|
||||||
module.exports.Transformer = __napiModule.exports.Transformer
|
module.exports.Transformer = __napiModule.exports.Transformer
|
||||||
module.exports.ChromaSubsampling = __napiModule.exports.ChromaSubsampling
|
module.exports.ChromaSubsampling = __napiModule.exports.ChromaSubsampling
|
||||||
module.exports.CompressionType = __napiModule.exports.CompressionType
|
module.exports.CompressionType = __napiModule.exports.CompressionType
|
||||||
|
|||||||
1
packages/binding/index.d.ts
vendored
@ -495,4 +495,3 @@ export interface ResizeOptions {
|
|||||||
filter?: ResizeFilterType
|
filter?: ResizeFilterType
|
||||||
fit?: ResizeFit
|
fit?: ResizeFit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,9 +1,12 @@
|
|||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
// @ts-nocheck
|
||||||
/* auto-generated by NAPI-RS */
|
/* auto-generated by NAPI-RS */
|
||||||
|
|
||||||
const { readFileSync } = require('fs')
|
const { createRequire } = require('node:module')
|
||||||
|
require = createRequire(__filename)
|
||||||
|
|
||||||
|
const { readFileSync } = require('node:fs')
|
||||||
let nativeBinding = null
|
let nativeBinding = null
|
||||||
const loadErrors = []
|
const loadErrors = []
|
||||||
|
|
||||||
@ -32,7 +35,11 @@ const isMuslFromFilesystem = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const isMuslFromReport = () => {
|
const isMuslFromReport = () => {
|
||||||
const report = typeof process.report.getReport === 'function' ? process.report.getReport() : null
|
let report = null
|
||||||
|
if (typeof process.report?.getReport === 'function') {
|
||||||
|
process.report.excludeNetwork = true
|
||||||
|
report = process.report.getReport()
|
||||||
|
}
|
||||||
if (!report) {
|
if (!report) {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
@ -57,7 +64,13 @@ const isMuslFromChildProcess = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function requireNative() {
|
function requireNative() {
|
||||||
if (process.platform === 'android') {
|
if (process.env.NAPI_RS_NATIVE_LIBRARY_PATH) {
|
||||||
|
try {
|
||||||
|
nativeBinding = require(process.env.NAPI_RS_NATIVE_LIBRARY_PATH);
|
||||||
|
} catch (err) {
|
||||||
|
loadErrors.push(err)
|
||||||
|
}
|
||||||
|
} else if (process.platform === 'android') {
|
||||||
if (process.arch === 'arm64') {
|
if (process.arch === 'arm64') {
|
||||||
try {
|
try {
|
||||||
return require('./image.android-arm64.node')
|
return require('./image.android-arm64.node')
|
||||||
@ -336,7 +349,7 @@ if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) {
|
|||||||
nativeBinding = require('./image.wasi.cjs')
|
nativeBinding = require('./image.wasi.cjs')
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (process.env.NAPI_RS_FORCE_WASI) {
|
if (process.env.NAPI_RS_FORCE_WASI) {
|
||||||
console.error(err)
|
loadErrors.push(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!nativeBinding) {
|
if (!nativeBinding) {
|
||||||
@ -344,7 +357,7 @@ if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) {
|
|||||||
nativeBinding = require('@napi-rs/image-wasm32-wasi')
|
nativeBinding = require('@napi-rs/image-wasm32-wasi')
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (process.env.NAPI_RS_FORCE_WASI) {
|
if (process.env.NAPI_RS_FORCE_WASI) {
|
||||||
console.error(err)
|
loadErrors.push(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -352,15 +365,17 @@ if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) {
|
|||||||
|
|
||||||
if (!nativeBinding) {
|
if (!nativeBinding) {
|
||||||
if (loadErrors.length > 0) {
|
if (loadErrors.length > 0) {
|
||||||
// TODO Link to documentation with potential fixes
|
throw new Error(
|
||||||
// - The package owner could build/publish bindings for this arch
|
`Cannot find native binding. ` +
|
||||||
// - The user may need to bundle the correct files
|
`npm has a bug related to optional dependencies (https://github.com/npm/cli/issues/4828). ` +
|
||||||
// - The user may need to re-install node_modules to get new packages
|
'Please try `npm i` again after removing both package-lock.json and node_modules directory.',
|
||||||
throw new Error('Failed to load native binding', { cause: loadErrors })
|
{ cause: loadErrors }
|
||||||
|
)
|
||||||
}
|
}
|
||||||
throw new Error(`Failed to load native binding`)
|
throw new Error(`Failed to load native binding`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
module.exports = nativeBinding
|
||||||
module.exports.Transformer = nativeBinding.Transformer
|
module.exports.Transformer = nativeBinding.Transformer
|
||||||
module.exports.ChromaSubsampling = nativeBinding.ChromaSubsampling
|
module.exports.ChromaSubsampling = nativeBinding.ChromaSubsampling
|
||||||
module.exports.CompressionType = nativeBinding.CompressionType
|
module.exports.CompressionType = nativeBinding.CompressionType
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
/// https://github.com/image-rs/image#generating-fractals
|
//! https://github.com/image-rs/image#generating-fractals
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let imgx = 800;
|
let imgx = 800;
|
||||||
|
|||||||
@ -1,3 +0,0 @@
|
|||||||
# `@napi-rs/image-android-arm64`
|
|
||||||
|
|
||||||
This is the **aarch64-linux-android** binary for `@napi-rs/image`
|
|
||||||
@ -1,38 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "@napi-rs/image-android-arm64",
|
|
||||||
"version": "1.9.2",
|
|
||||||
"cpu": [
|
|
||||||
"arm64"
|
|
||||||
],
|
|
||||||
"main": "image.android-arm64.node",
|
|
||||||
"files": [
|
|
||||||
"image.android-arm64.node"
|
|
||||||
],
|
|
||||||
"description": "Image processing library",
|
|
||||||
"keywords": [
|
|
||||||
"image",
|
|
||||||
"lossless",
|
|
||||||
"compression",
|
|
||||||
"jpeg",
|
|
||||||
"jpg",
|
|
||||||
"png",
|
|
||||||
"svg"
|
|
||||||
],
|
|
||||||
"author": {
|
|
||||||
"email": "github@lyn.one",
|
|
||||||
"name": "LongYinan",
|
|
||||||
"url": "https://lyn.one"
|
|
||||||
},
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10"
|
|
||||||
},
|
|
||||||
"publishConfig": {
|
|
||||||
"registry": "https://registry.npmjs.org/",
|
|
||||||
"access": "public"
|
|
||||||
},
|
|
||||||
"repository": "git@github.com:Brooooooklyn/Image.git",
|
|
||||||
"os": [
|
|
||||||
"android"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
# `@napi-rs/image-darwin-arm64`
|
|
||||||
|
|
||||||
This is the **aarch64-apple-darwin** binary for `@napi-rs/image`
|
|
||||||
@ -1,38 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "@napi-rs/image-darwin-arm64",
|
|
||||||
"version": "1.9.2",
|
|
||||||
"cpu": [
|
|
||||||
"arm64"
|
|
||||||
],
|
|
||||||
"main": "image.darwin-arm64.node",
|
|
||||||
"files": [
|
|
||||||
"image.darwin-arm64.node"
|
|
||||||
],
|
|
||||||
"description": "Image processing library",
|
|
||||||
"keywords": [
|
|
||||||
"image",
|
|
||||||
"lossless",
|
|
||||||
"compression",
|
|
||||||
"jpeg",
|
|
||||||
"jpg",
|
|
||||||
"png",
|
|
||||||
"svg"
|
|
||||||
],
|
|
||||||
"author": {
|
|
||||||
"email": "github@lyn.one",
|
|
||||||
"name": "LongYinan",
|
|
||||||
"url": "https://lyn.one"
|
|
||||||
},
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10"
|
|
||||||
},
|
|
||||||
"publishConfig": {
|
|
||||||
"registry": "https://registry.npmjs.org/",
|
|
||||||
"access": "public"
|
|
||||||
},
|
|
||||||
"repository": "git@github.com:Brooooooklyn/Image.git",
|
|
||||||
"os": [
|
|
||||||
"darwin"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
# `@napi-rs/image-darwin-x64`
|
|
||||||
|
|
||||||
This is the **x86_64-apple-darwin** binary for `@napi-rs/image`
|
|
||||||
@ -1,38 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "@napi-rs/image-darwin-x64",
|
|
||||||
"version": "1.9.2",
|
|
||||||
"cpu": [
|
|
||||||
"x64"
|
|
||||||
],
|
|
||||||
"main": "image.darwin-x64.node",
|
|
||||||
"files": [
|
|
||||||
"image.darwin-x64.node"
|
|
||||||
],
|
|
||||||
"description": "Image processing library",
|
|
||||||
"keywords": [
|
|
||||||
"image",
|
|
||||||
"lossless",
|
|
||||||
"compression",
|
|
||||||
"jpeg",
|
|
||||||
"jpg",
|
|
||||||
"png",
|
|
||||||
"svg"
|
|
||||||
],
|
|
||||||
"author": {
|
|
||||||
"email": "github@lyn.one",
|
|
||||||
"name": "LongYinan",
|
|
||||||
"url": "https://lyn.one"
|
|
||||||
},
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10"
|
|
||||||
},
|
|
||||||
"publishConfig": {
|
|
||||||
"registry": "https://registry.npmjs.org/",
|
|
||||||
"access": "public"
|
|
||||||
},
|
|
||||||
"repository": "git@github.com:Brooooooklyn/Image.git",
|
|
||||||
"os": [
|
|
||||||
"darwin"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
# `@napi-rs/image-freebsd-x64`
|
|
||||||
|
|
||||||
This is the **x86_64-unknown-freebsd** binary for `@napi-rs/image`
|
|
||||||
@ -1,38 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "@napi-rs/image-freebsd-x64",
|
|
||||||
"version": "1.9.2",
|
|
||||||
"cpu": [
|
|
||||||
"x64"
|
|
||||||
],
|
|
||||||
"main": "image.freebsd-x64.node",
|
|
||||||
"files": [
|
|
||||||
"image.freebsd-x64.node"
|
|
||||||
],
|
|
||||||
"description": "Image processing library",
|
|
||||||
"keywords": [
|
|
||||||
"image",
|
|
||||||
"lossless",
|
|
||||||
"compression",
|
|
||||||
"jpeg",
|
|
||||||
"jpg",
|
|
||||||
"png",
|
|
||||||
"svg"
|
|
||||||
],
|
|
||||||
"author": {
|
|
||||||
"email": "github@lyn.one",
|
|
||||||
"name": "LongYinan",
|
|
||||||
"url": "https://lyn.one"
|
|
||||||
},
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10"
|
|
||||||
},
|
|
||||||
"publishConfig": {
|
|
||||||
"registry": "https://registry.npmjs.org/",
|
|
||||||
"access": "public"
|
|
||||||
},
|
|
||||||
"repository": "git@github.com:Brooooooklyn/Image.git",
|
|
||||||
"os": [
|
|
||||||
"freebsd"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
# `@napi-rs/image-linux-arm-gnueabihf`
|
|
||||||
|
|
||||||
This is the **armv7-unknown-linux-gnueabihf** binary for `@napi-rs/image`
|
|
||||||
@ -1,38 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "@napi-rs/image-linux-arm-gnueabihf",
|
|
||||||
"version": "1.9.2",
|
|
||||||
"cpu": [
|
|
||||||
"arm"
|
|
||||||
],
|
|
||||||
"main": "image.linux-arm-gnueabihf.node",
|
|
||||||
"files": [
|
|
||||||
"image.linux-arm-gnueabihf.node"
|
|
||||||
],
|
|
||||||
"description": "Image processing library",
|
|
||||||
"keywords": [
|
|
||||||
"image",
|
|
||||||
"lossless",
|
|
||||||
"compression",
|
|
||||||
"jpeg",
|
|
||||||
"jpg",
|
|
||||||
"png",
|
|
||||||
"svg"
|
|
||||||
],
|
|
||||||
"author": {
|
|
||||||
"email": "github@lyn.one",
|
|
||||||
"name": "LongYinan",
|
|
||||||
"url": "https://lyn.one"
|
|
||||||
},
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10"
|
|
||||||
},
|
|
||||||
"publishConfig": {
|
|
||||||
"registry": "https://registry.npmjs.org/",
|
|
||||||
"access": "public"
|
|
||||||
},
|
|
||||||
"repository": "git@github.com:Brooooooklyn/Image.git",
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
# `@napi-rs/image-linux-arm64-gnu`
|
|
||||||
|
|
||||||
This is the **aarch64-unknown-linux-gnu** binary for `@napi-rs/image`
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
// Node.js 10.x, ignore
|
|
||||||
if (!process.report || typeof process.report.getReport !== 'function') {
|
|
||||||
process.exit(0)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Only GNU system has this field
|
|
||||||
const { glibcVersionRuntime } = process.report.getReport().header
|
|
||||||
|
|
||||||
if (glibcVersionRuntime) {
|
|
||||||
process.exit(0)
|
|
||||||
} else {
|
|
||||||
process.exit(1)
|
|
||||||
}
|
|
||||||
@ -1,41 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "@napi-rs/image-linux-arm64-gnu",
|
|
||||||
"version": "1.9.2",
|
|
||||||
"cpu": [
|
|
||||||
"arm64"
|
|
||||||
],
|
|
||||||
"main": "image.linux-arm64-gnu.node",
|
|
||||||
"files": [
|
|
||||||
"image.linux-arm64-gnu.node"
|
|
||||||
],
|
|
||||||
"description": "Image processing library",
|
|
||||||
"keywords": [
|
|
||||||
"image",
|
|
||||||
"lossless",
|
|
||||||
"compression",
|
|
||||||
"jpeg",
|
|
||||||
"jpg",
|
|
||||||
"png",
|
|
||||||
"svg"
|
|
||||||
],
|
|
||||||
"author": {
|
|
||||||
"email": "github@lyn.one",
|
|
||||||
"name": "LongYinan",
|
|
||||||
"url": "https://lyn.one"
|
|
||||||
},
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10"
|
|
||||||
},
|
|
||||||
"publishConfig": {
|
|
||||||
"registry": "https://registry.npmjs.org/",
|
|
||||||
"access": "public"
|
|
||||||
},
|
|
||||||
"repository": "git@github.com:Brooooooklyn/Image.git",
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
# `@napi-rs/image-linux-arm64-musl`
|
|
||||||
|
|
||||||
This is the **aarch64-unknown-linux-musl** binary for `@napi-rs/image`
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
// Node.js 10.x, ignore
|
|
||||||
if (!process.report || typeof process.report.getReport !== 'function') {
|
|
||||||
process.exit(0)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Only GNU system has this field
|
|
||||||
const { glibcVersionRuntime } = process.report.getReport().header
|
|
||||||
|
|
||||||
if (glibcVersionRuntime) {
|
|
||||||
process.exit(1)
|
|
||||||
} else {
|
|
||||||
process.exit(0)
|
|
||||||
}
|
|
||||||
@ -1,41 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "@napi-rs/image-linux-arm64-musl",
|
|
||||||
"version": "1.9.2",
|
|
||||||
"cpu": [
|
|
||||||
"arm64"
|
|
||||||
],
|
|
||||||
"main": "image.linux-arm64-musl.node",
|
|
||||||
"files": [
|
|
||||||
"image.linux-arm64-musl.node"
|
|
||||||
],
|
|
||||||
"description": "Image processing library",
|
|
||||||
"keywords": [
|
|
||||||
"image",
|
|
||||||
"lossless",
|
|
||||||
"compression",
|
|
||||||
"jpeg",
|
|
||||||
"jpg",
|
|
||||||
"png",
|
|
||||||
"svg"
|
|
||||||
],
|
|
||||||
"author": {
|
|
||||||
"email": "github@lyn.one",
|
|
||||||
"name": "LongYinan",
|
|
||||||
"url": "https://lyn.one"
|
|
||||||
},
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10"
|
|
||||||
},
|
|
||||||
"publishConfig": {
|
|
||||||
"registry": "https://registry.npmjs.org/",
|
|
||||||
"access": "public"
|
|
||||||
},
|
|
||||||
"repository": "git@github.com:Brooooooklyn/Image.git",
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"libc": [
|
|
||||||
"musl"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
# `@napi-rs/image-linux-x64-gnu`
|
|
||||||
|
|
||||||
This is the **x86_64-unknown-linux-gnu** binary for `@napi-rs/image`
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
// Node.js 10.x, ignore
|
|
||||||
if (!process.report || typeof process.report.getReport !== 'function') {
|
|
||||||
process.exit(0)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Only GNU system has this field
|
|
||||||
const { glibcVersionRuntime } = process.report.getReport().header
|
|
||||||
|
|
||||||
if (glibcVersionRuntime) {
|
|
||||||
process.exit(0)
|
|
||||||
} else {
|
|
||||||
process.exit(1)
|
|
||||||
}
|
|
||||||
@ -1,41 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "@napi-rs/image-linux-x64-gnu",
|
|
||||||
"version": "1.9.2",
|
|
||||||
"cpu": [
|
|
||||||
"x64"
|
|
||||||
],
|
|
||||||
"main": "image.linux-x64-gnu.node",
|
|
||||||
"files": [
|
|
||||||
"image.linux-x64-gnu.node"
|
|
||||||
],
|
|
||||||
"description": "Image processing library",
|
|
||||||
"keywords": [
|
|
||||||
"image",
|
|
||||||
"lossless",
|
|
||||||
"compression",
|
|
||||||
"jpeg",
|
|
||||||
"jpg",
|
|
||||||
"png",
|
|
||||||
"svg"
|
|
||||||
],
|
|
||||||
"author": {
|
|
||||||
"email": "github@lyn.one",
|
|
||||||
"name": "LongYinan",
|
|
||||||
"url": "https://lyn.one"
|
|
||||||
},
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10"
|
|
||||||
},
|
|
||||||
"publishConfig": {
|
|
||||||
"registry": "https://registry.npmjs.org/",
|
|
||||||
"access": "public"
|
|
||||||
},
|
|
||||||
"repository": "git@github.com:Brooooooklyn/Image.git",
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
# `@napi-rs/image-linux-x64-musl`
|
|
||||||
|
|
||||||
This is the **x86_64-unknown-linux-musl** binary for `@napi-rs/image`
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
// Node.js 10.x, ignore
|
|
||||||
if (!process.report || typeof process.report.getReport !== 'function') {
|
|
||||||
process.exit(0)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Only GNU system has this field
|
|
||||||
const { glibcVersionRuntime } = process.report.getReport().header
|
|
||||||
|
|
||||||
if (glibcVersionRuntime) {
|
|
||||||
process.exit(1)
|
|
||||||
} else {
|
|
||||||
process.exit(0)
|
|
||||||
}
|
|
||||||
@ -1,41 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "@napi-rs/image-linux-x64-musl",
|
|
||||||
"version": "1.9.2",
|
|
||||||
"cpu": [
|
|
||||||
"x64"
|
|
||||||
],
|
|
||||||
"main": "image.linux-x64-musl.node",
|
|
||||||
"files": [
|
|
||||||
"image.linux-x64-musl.node"
|
|
||||||
],
|
|
||||||
"description": "Image processing library",
|
|
||||||
"keywords": [
|
|
||||||
"image",
|
|
||||||
"lossless",
|
|
||||||
"compression",
|
|
||||||
"jpeg",
|
|
||||||
"jpg",
|
|
||||||
"png",
|
|
||||||
"svg"
|
|
||||||
],
|
|
||||||
"author": {
|
|
||||||
"email": "github@lyn.one",
|
|
||||||
"name": "LongYinan",
|
|
||||||
"url": "https://lyn.one"
|
|
||||||
},
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10"
|
|
||||||
},
|
|
||||||
"publishConfig": {
|
|
||||||
"registry": "https://registry.npmjs.org/",
|
|
||||||
"access": "public"
|
|
||||||
},
|
|
||||||
"repository": "git@github.com:Brooooooklyn/Image.git",
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"libc": [
|
|
||||||
"musl"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
# `@napi-rs/image-wasm32-wasi`
|
|
||||||
|
|
||||||
This is the **wasm32-wasi-preview1-threads** binary for `@napi-rs/image`
|
|
||||||
@ -1,43 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "@napi-rs/image-wasm32-wasi",
|
|
||||||
"version": "1.9.2",
|
|
||||||
"cpu": [
|
|
||||||
"wasm32"
|
|
||||||
],
|
|
||||||
"main": "image.wasi.cjs",
|
|
||||||
"files": [
|
|
||||||
"image.wasm32-wasi.wasm",
|
|
||||||
"image.wasi.cjs",
|
|
||||||
"image.wasi-browser.js",
|
|
||||||
"wasi-worker.mjs",
|
|
||||||
"wasi-worker-browser.mjs"
|
|
||||||
],
|
|
||||||
"description": "Image processing library",
|
|
||||||
"keywords": [
|
|
||||||
"image",
|
|
||||||
"lossless",
|
|
||||||
"compression",
|
|
||||||
"jpeg",
|
|
||||||
"jpg",
|
|
||||||
"png",
|
|
||||||
"svg"
|
|
||||||
],
|
|
||||||
"author": {
|
|
||||||
"email": "github@lyn.one",
|
|
||||||
"name": "LongYinan",
|
|
||||||
"url": "https://lyn.one"
|
|
||||||
},
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=14.0.0"
|
|
||||||
},
|
|
||||||
"publishConfig": {
|
|
||||||
"registry": "https://registry.npmjs.org/",
|
|
||||||
"access": "public"
|
|
||||||
},
|
|
||||||
"repository": "git@github.com:Brooooooklyn/Image.git",
|
|
||||||
"browser": "image.wasi-browser.js",
|
|
||||||
"dependencies": {
|
|
||||||
"@napi-rs/wasm-runtime": "^0.2.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
# `@napi-rs/image-win32-ia32-msvc`
|
|
||||||
|
|
||||||
This is the **i686-pc-windows-msvc** binary for `@napi-rs/image`
|
|
||||||
@ -1,38 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "@napi-rs/image-win32-ia32-msvc",
|
|
||||||
"version": "1.9.2",
|
|
||||||
"cpu": [
|
|
||||||
"ia32"
|
|
||||||
],
|
|
||||||
"main": "image.win32-ia32-msvc.node",
|
|
||||||
"files": [
|
|
||||||
"image.win32-ia32-msvc.node"
|
|
||||||
],
|
|
||||||
"description": "Image processing library",
|
|
||||||
"keywords": [
|
|
||||||
"image",
|
|
||||||
"lossless",
|
|
||||||
"compression",
|
|
||||||
"jpeg",
|
|
||||||
"jpg",
|
|
||||||
"png",
|
|
||||||
"svg"
|
|
||||||
],
|
|
||||||
"author": {
|
|
||||||
"email": "github@lyn.one",
|
|
||||||
"name": "LongYinan",
|
|
||||||
"url": "https://lyn.one"
|
|
||||||
},
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10"
|
|
||||||
},
|
|
||||||
"publishConfig": {
|
|
||||||
"registry": "https://registry.npmjs.org/",
|
|
||||||
"access": "public"
|
|
||||||
},
|
|
||||||
"repository": "git@github.com:Brooooooklyn/Image.git",
|
|
||||||
"os": [
|
|
||||||
"win32"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
# `@napi-rs/image-win32-x64-msvc`
|
|
||||||
|
|
||||||
This is the **x86_64-pc-windows-msvc** binary for `@napi-rs/image`
|
|
||||||
@ -1,38 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "@napi-rs/image-win32-x64-msvc",
|
|
||||||
"version": "1.9.2",
|
|
||||||
"cpu": [
|
|
||||||
"x64"
|
|
||||||
],
|
|
||||||
"main": "image.win32-x64-msvc.node",
|
|
||||||
"files": [
|
|
||||||
"image.win32-x64-msvc.node"
|
|
||||||
],
|
|
||||||
"description": "Image processing library",
|
|
||||||
"keywords": [
|
|
||||||
"image",
|
|
||||||
"lossless",
|
|
||||||
"compression",
|
|
||||||
"jpeg",
|
|
||||||
"jpg",
|
|
||||||
"png",
|
|
||||||
"svg"
|
|
||||||
],
|
|
||||||
"author": {
|
|
||||||
"email": "github@lyn.one",
|
|
||||||
"name": "LongYinan",
|
|
||||||
"url": "https://lyn.one"
|
|
||||||
},
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10"
|
|
||||||
},
|
|
||||||
"publishConfig": {
|
|
||||||
"registry": "https://registry.npmjs.org/",
|
|
||||||
"access": "public"
|
|
||||||
},
|
|
||||||
"repository": "git@github.com:Brooooooklyn/Image.git",
|
|
||||||
"os": [
|
|
||||||
"win32"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -33,6 +33,7 @@
|
|||||||
"targets": [
|
"targets": [
|
||||||
"x86_64-apple-darwin",
|
"x86_64-apple-darwin",
|
||||||
"x86_64-pc-windows-msvc",
|
"x86_64-pc-windows-msvc",
|
||||||
|
"aarch64-pc-windows-msvc",
|
||||||
"x86_64-unknown-linux-gnu",
|
"x86_64-unknown-linux-gnu",
|
||||||
"aarch64-apple-darwin",
|
"aarch64-apple-darwin",
|
||||||
"aarch64-linux-android",
|
"aarch64-linux-android",
|
||||||
@ -66,6 +67,6 @@
|
|||||||
"repository": "git@github.com:Brooooooklyn/Image.git",
|
"repository": "git@github.com:Brooooooklyn/Image.git",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@napi-rs/cli": "^3.0.0-alpha.55",
|
"@napi-rs/cli": "^3.0.0-alpha.55",
|
||||||
"@napi-rs/wasm-runtime": "^0.2.4"
|
"@napi-rs/wasm-runtime": "^0.2.11"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -39,15 +39,14 @@ pub fn compress_jpeg_sync(
|
|||||||
})?;
|
})?;
|
||||||
return BufferSlice::from_data(&env, dest.into_inner());
|
return BufferSlice::from_data(&env, dest.into_inner());
|
||||||
}
|
}
|
||||||
let (buf, outsize, de_c_info, compress_c_info) =
|
let (buf, outsize, de_c_info, compress_c_info) = unsafe { moz_jpeg_compress(input, &options) }?;
|
||||||
unsafe { moz_jpeg_compress(input, &options) }?;
|
|
||||||
unsafe {
|
unsafe {
|
||||||
BufferSlice::from_external(
|
BufferSlice::from_external(
|
||||||
&env,
|
&env,
|
||||||
buf,
|
buf,
|
||||||
outsize,
|
outsize,
|
||||||
(de_c_info, compress_c_info, buf),
|
(de_c_info, compress_c_info, buf),
|
||||||
|(mut input, mut output, buf), _| {
|
|_, (mut input, mut output, buf)| {
|
||||||
mozjpeg_sys::jpeg_destroy_decompress(&mut input);
|
mozjpeg_sys::jpeg_destroy_decompress(&mut input);
|
||||||
mozjpeg_sys::jpeg_destroy_compress(&mut output);
|
mozjpeg_sys::jpeg_destroy_compress(&mut output);
|
||||||
libc::free(buf as *mut std::ffi::c_void);
|
libc::free(buf as *mut std::ffi::c_void);
|
||||||
@ -215,7 +214,7 @@ impl Task for CompressJpegTask {
|
|||||||
buf,
|
buf,
|
||||||
len,
|
len,
|
||||||
(de_c_info, compress_c_info, buf),
|
(de_c_info, compress_c_info, buf),
|
||||||
|(mut input, mut output, buf), _| {
|
|_, (mut input, mut output, buf)| {
|
||||||
mozjpeg_sys::jpeg_destroy_decompress(&mut input);
|
mozjpeg_sys::jpeg_destroy_decompress(&mut input);
|
||||||
mozjpeg_sys::jpeg_destroy_compress(&mut output);
|
mozjpeg_sys::jpeg_destroy_compress(&mut output);
|
||||||
libc::free(buf as *mut std::ffi::c_void);
|
libc::free(buf as *mut std::ffi::c_void);
|
||||||
|
|||||||
@ -185,7 +185,7 @@ pub(crate) struct ImageMetaData {
|
|||||||
|
|
||||||
/// `env` from `Node.js` can ensure the thread safe.
|
/// `env` from `Node.js` can ensure the thread safe.
|
||||||
pub(crate) struct ThreadSafeDynamicImage {
|
pub(crate) struct ThreadSafeDynamicImage {
|
||||||
raw: Uint8Array,
|
raw: Arc<Uint8Array>,
|
||||||
image: *mut Option<ImageMetaData>,
|
image: *mut Option<ImageMetaData>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -198,7 +198,7 @@ impl Drop for ThreadSafeDynamicImage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl ThreadSafeDynamicImage {
|
impl ThreadSafeDynamicImage {
|
||||||
fn new(input: Uint8Array) -> Self {
|
fn new(input: Arc<Uint8Array>) -> Self {
|
||||||
ThreadSafeDynamicImage {
|
ThreadSafeDynamicImage {
|
||||||
image: Box::into_raw(Box::new(None)),
|
image: Box::into_raw(Box::new(None)),
|
||||||
raw: input,
|
raw: input,
|
||||||
@ -412,7 +412,7 @@ struct ImageTransformArgs {
|
|||||||
huerotate: Option<i32>,
|
huerotate: Option<i32>,
|
||||||
orientation: Option<Orientation>,
|
orientation: Option<Orientation>,
|
||||||
crop: Option<(u32, u32, u32, u32)>,
|
crop: Option<(u32, u32, u32, u32)>,
|
||||||
overlay: Vec<(Uint8Array, i64, i64)>,
|
overlay: Vec<(Arc<Uint8Array>, i64, i64)>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct EncodeTask {
|
pub struct EncodeTask {
|
||||||
@ -431,7 +431,7 @@ impl EncodeOutput {
|
|||||||
pub(crate) fn into_buffer_slice(self, env: &Env) -> Result<BufferSlice> {
|
pub(crate) fn into_buffer_slice(self, env: &Env) -> Result<BufferSlice> {
|
||||||
match self {
|
match self {
|
||||||
EncodeOutput::Raw(ptr, len) => unsafe {
|
EncodeOutput::Raw(ptr, len) => unsafe {
|
||||||
BufferSlice::from_external(env, ptr, len, ptr, |pointer, _| {
|
BufferSlice::from_external(env, ptr, len, ptr, |_, pointer| {
|
||||||
Vec::from_raw_parts(pointer, len, len);
|
Vec::from_raw_parts(pointer, len, len);
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
@ -440,7 +440,7 @@ impl EncodeOutput {
|
|||||||
let len = avif_data.len();
|
let len = avif_data.len();
|
||||||
let data_ptr = avif_data.as_slice().as_ptr();
|
let data_ptr = avif_data.as_slice().as_ptr();
|
||||||
unsafe {
|
unsafe {
|
||||||
BufferSlice::from_external(env, data_ptr.cast_mut(), len, avif_data, |data, _| {
|
BufferSlice::from_external(env, data_ptr.cast_mut(), len, avif_data, |_, data| {
|
||||||
drop(data);
|
drop(data);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -558,7 +558,7 @@ impl Task for EncodeTask {
|
|||||||
meta.image = meta.image.crop_imm(x, y, width, height);
|
meta.image = meta.image.crop_imm(x, y, width, height);
|
||||||
}
|
}
|
||||||
for (buffer, x, y) in std::mem::take(&mut self.image_transform_args.overlay).into_iter() {
|
for (buffer, x, y) in std::mem::take(&mut self.image_transform_args.overlay).into_iter() {
|
||||||
let top = ThreadSafeDynamicImage::new(buffer);
|
let top = ThreadSafeDynamicImage::new(buffer.clone());
|
||||||
let top_image_meta = top.get(true)?;
|
let top_image_meta = top.get(true)?;
|
||||||
overlay(&mut meta.image, &top_image_meta.image, x, y);
|
overlay(&mut meta.image, &top_image_meta.image, x, y);
|
||||||
}
|
}
|
||||||
@ -676,7 +676,7 @@ impl Transformer {
|
|||||||
#[napi(constructor)]
|
#[napi(constructor)]
|
||||||
pub fn new(input: Uint8Array) -> Transformer {
|
pub fn new(input: Uint8Array) -> Transformer {
|
||||||
Self {
|
Self {
|
||||||
dynamic_image: Arc::new(ThreadSafeDynamicImage::new(input)),
|
dynamic_image: Arc::new(ThreadSafeDynamicImage::new(Arc::new(input))),
|
||||||
image_transform_args: ImageTransformArgs::default(),
|
image_transform_args: ImageTransformArgs::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -753,7 +753,7 @@ impl Transformer {
|
|||||||
}));
|
}));
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
dynamic_image: Arc::new(ThreadSafeDynamicImage {
|
dynamic_image: Arc::new(ThreadSafeDynamicImage {
|
||||||
raw: vec![0].into(),
|
raw: Arc::new(vec![0].into()),
|
||||||
image: Box::into_raw(image_meta),
|
image: Box::into_raw(image_meta),
|
||||||
}),
|
}),
|
||||||
image_transform_args: Default::default(),
|
image_transform_args: Default::default(),
|
||||||
@ -924,7 +924,10 @@ impl Transformer {
|
|||||||
#[napi]
|
#[napi]
|
||||||
/// Overlay an image at a given coordinate (x, y)
|
/// Overlay an image at a given coordinate (x, y)
|
||||||
pub fn overlay(&mut self, on_top: Uint8Array, x: i64, y: i64) -> Result<&Self> {
|
pub fn overlay(&mut self, on_top: Uint8Array, x: i64, y: i64) -> Result<&Self> {
|
||||||
self.image_transform_args.overlay.push((on_top, x, y));
|
self
|
||||||
|
.image_transform_args
|
||||||
|
.overlay
|
||||||
|
.push((Arc::new(on_top), x, y));
|
||||||
Ok(self)
|
Ok(self)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
1
website/.gitignore
vendored
@ -4,3 +4,4 @@ public/img/example.mjs
|
|||||||
public/img/sharp.mjs
|
public/img/sharp.mjs
|
||||||
public/img/*.manipulated.webp
|
public/img/*.manipulated.webp
|
||||||
public/img/og.png
|
public/img/og.png
|
||||||
|
pages/changelog/index.md
|
||||||
49
website/changelog.js
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
import { writeFile } from 'node:fs/promises'
|
||||||
|
import { join } from 'node:path'
|
||||||
|
import { fileURLToPath } from 'node:url'
|
||||||
|
|
||||||
|
const packageName = '@napi-rs/image'
|
||||||
|
const locale = 'en'
|
||||||
|
|
||||||
|
const releases = await fetch(`https://api.github.com/repos/Brooooooklyn/Image/releases?per_page=100`, {
|
||||||
|
headers: { Authorization: `token ${process.env.GITHUB_TOKEN}` },
|
||||||
|
}).then((res) => res.json())
|
||||||
|
|
||||||
|
const changelog = releases
|
||||||
|
.filter(({ name }) => name?.startsWith(packageName))
|
||||||
|
.map((release) => {
|
||||||
|
const body = release.body
|
||||||
|
.replace(/'/g, "'")
|
||||||
|
.replace(/@([a-zA-Z0-9_-]+)(?=(,| ))/g, '[@$1](https://github.com/$1)')
|
||||||
|
.replace(
|
||||||
|
/https:\/\/github\.com\/(\S+\/\S+\/pull\/\d+)/g,
|
||||||
|
`<a
|
||||||
|
href="$&"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">$1</a>`,
|
||||||
|
)
|
||||||
|
.replace(
|
||||||
|
/https:\/\/github\.com\/(.+?)\/(.+?)\/compare\/(.+?)@(.+?)\.\.\.(.+?)@(.+?)$/g,
|
||||||
|
`<a
|
||||||
|
href="$&"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600">$3@$4...$5@$6</a>`,
|
||||||
|
)
|
||||||
|
return `## <a href="${release.html_url}" target="_blank" rel="noopener">${release.tag_name}</a>
|
||||||
|
${new Date(release.published_at).toLocaleDateString(locale)} \n${body}`
|
||||||
|
})
|
||||||
|
.join('\n\n')
|
||||||
|
|
||||||
|
await writeFile(
|
||||||
|
join(fileURLToPath(import.meta.url), '..', 'pages', 'changelog', 'index.md'),
|
||||||
|
`---
|
||||||
|
title: '@napi-rs/image'
|
||||||
|
description: '@napi-rs/image changelog.'
|
||||||
|
---
|
||||||
|
|
||||||
|
# @napi-rs/image
|
||||||
|
|
||||||
|
${changelog}`,
|
||||||
|
)
|
||||||
497
website/changelog.md
Normal file
@ -0,0 +1,497 @@
|
|||||||
|
## <a href="https://github.com/Brooooooklyn/Image/releases/tag/%40napi-rs/image%401.9.2" target="_blank" rel="noopener">@napi-rs/image@1.9.2</a>
|
||||||
|
4/20/2024
|
||||||
|
## What's Changed
|
||||||
|
* chore: remove libdeflater patch by [@Brooooooklyn](https://github.com/Brooooooklyn) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/89"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/89</a>
|
||||||
|
* chore: bump up Yarn to v4.1.1 by [@renovate](https://github.com/renovate) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/90"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/90</a>
|
||||||
|
* chore: bump up electron version to v30 by [@renovate](https://github.com/renovate) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/92"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/92</a>
|
||||||
|
* chore: bump up all non-major dependencies by [@renovate](https://github.com/renovate) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/91"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/91</a>
|
||||||
|
* chore: bump up @napi-rs/wasm-runtime version to ^0.2.0 by [@renovate](https://github.com/renovate) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/93"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/93</a>
|
||||||
|
* refactor: use `no-const-enum` by [@kyranet](https://github.com/kyranet) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/94"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/94</a>
|
||||||
|
|
||||||
|
## New Contributors
|
||||||
|
* [@kyranet](https://github.com/kyranet) made their first contribution in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/94"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/94</a>
|
||||||
|
|
||||||
|
**Full Changelog**: <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/compare/@napi-rs/image@1.9.1...@napi-rs/image@1.9.2"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600">@napi-rs/image@1.9.1...@napi-rs/image@1.9.2</a>
|
||||||
|
|
||||||
|
## <a href="https://github.com/Brooooooklyn/Image/releases/tag/%40napi-rs/image%401.9.1" target="_blank" rel="noopener">@napi-rs/image@1.9.1</a>
|
||||||
|
2/22/2024
|
||||||
|
## What's Changed
|
||||||
|
* chore: bump up electron version to v29 by [@renovate](https://github.com/renovate) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/87"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/87</a>
|
||||||
|
* fix(image): wasm fallback logic in js-binding file by [@Brooooooklyn](https://github.com/Brooooooklyn) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/88"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/88</a>
|
||||||
|
|
||||||
|
|
||||||
|
**Full Changelog**: <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/compare/@napi-rs/image@1.9.0...@napi-rs/image@1.9.1"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600">@napi-rs/image@1.9.0...@napi-rs/image@1.9.1</a>
|
||||||
|
|
||||||
|
## <a href="https://github.com/Brooooooklyn/Image/releases/tag/%40napi-rs/image%401.9.0" target="_blank" rel="noopener">@napi-rs/image@1.9.0</a>
|
||||||
|
2/19/2024
|
||||||
|
## What's Changed
|
||||||
|
* docs: update examples and site by [@Brooooooklyn](https://github.com/Brooooooklyn) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/85"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/85</a>
|
||||||
|
* feat: upgrade resvg by [@Brooooooklyn](https://github.com/Brooooooklyn) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/86"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/86</a>
|
||||||
|
|
||||||
|
|
||||||
|
**Full Changelog**: <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/compare/@napi-rs/image@1.8.0...@napi-rs/image@1.9.0"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600">@napi-rs/image@1.8.0...@napi-rs/image@1.9.0</a>
|
||||||
|
|
||||||
|
## <a href="https://github.com/Brooooooklyn/Image/releases/tag/%40napi-rs/image%401.8.0" target="_blank" rel="noopener">@napi-rs/image@1.8.0</a>
|
||||||
|
2/14/2024
|
||||||
|
## What's Changed
|
||||||
|
* chore: bump up all non-major dependencies by [@renovate](https://github.com/renovate) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/66"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/66</a>
|
||||||
|
* chore: upgrade dependencies and CI template by [@Brooooooklyn](https://github.com/Brooooooklyn) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/73"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/73</a>
|
||||||
|
* chore: Replace npm-run-all version with npm-run-all2 ^5.0.0 by [@renovate](https://github.com/renovate) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/80"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/80</a>
|
||||||
|
* chore: bump up npm-run-all2 version to v6 by [@renovate](https://github.com/renovate) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/82"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/82</a>
|
||||||
|
* feat: add wasm build by [@Brooooooklyn](https://github.com/Brooooooklyn) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/81"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/81</a>
|
||||||
|
|
||||||
|
|
||||||
|
**Full Changelog**: <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/compare/@napi-rs/image@1.7.0...@napi-rs/image@1.8.0"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600">@napi-rs/image@1.7.0...@napi-rs/image@1.8.0</a>
|
||||||
|
|
||||||
|
## <a href="https://github.com/Brooooooklyn/Image/releases/tag/%40napi-rs/image%401.7.0" target="_blank" rel="noopener">@napi-rs/image@1.7.0</a>
|
||||||
|
9/27/2023
|
||||||
|
## 🚨Security update for CVE-2023-4863
|
||||||
|
- https://github.com/advisories/GHSA-j7hp-h8jx-5ppr
|
||||||
|
- https://blog.isosceles.com/the-webp-0day/
|
||||||
|
|
||||||
|
## What's Changed
|
||||||
|
* feat: upgrade dependencies by [@Brooooooklyn](https://github.com/Brooooooklyn) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/50"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/50</a>
|
||||||
|
* chore: bump up electron version to v26 by [@renovate](https://github.com/renovate) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/58"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/58</a>
|
||||||
|
* chore: bump up Yarn to v3.6.2 by [@renovate](https://github.com/renovate) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/59"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/59</a>
|
||||||
|
* chore: bump up Yarn to v3.6.3 by [@renovate](https://github.com/renovate) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/60"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/60</a>
|
||||||
|
* chore: bump up actions/checkout action to v4 by [@renovate](https://github.com/renovate) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/62"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/62</a>
|
||||||
|
* chore: bump up docker/setup-qemu-action action to v3 by [@renovate](https://github.com/renovate) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/63"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/63</a>
|
||||||
|
* chore: bump up Rust crate mozjpeg-sys to v2 by [@renovate](https://github.com/renovate) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/61"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/61</a>
|
||||||
|
* chore: upgrade dependencies by [@Brooooooklyn](https://github.com/Brooooooklyn) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/64"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/64</a>
|
||||||
|
|
||||||
|
## New Contributors
|
||||||
|
* [@renovate](https://github.com/renovate) made their first contribution in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/58"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/58</a>
|
||||||
|
|
||||||
|
**Full Changelog**: <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/compare/@napi-rs/image@1.6.1...@napi-rs/image@1.7.0"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600">@napi-rs/image@1.6.1...@napi-rs/image@1.7.0</a>
|
||||||
|
|
||||||
|
## <a href="https://github.com/Brooooooklyn/Image/releases/tag/%40napi-rs/image%401.6.1" target="_blank" rel="noopener">@napi-rs/image@1.6.1</a>
|
||||||
|
3/12/2023
|
||||||
|
## What's Changed
|
||||||
|
* chore: bump Nextra to 2.2.16 by [@liby](https://github.com/liby) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/45"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/45</a>
|
||||||
|
* docs: improve changelog parser by [@liby](https://github.com/liby) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/46"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/46</a>
|
||||||
|
* fix(docs): typo correction by [@ggallon](https://github.com/ggallon) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/47"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/47</a>
|
||||||
|
* perf(image): lazy load fontdb Database by [@Brooooooklyn](https://github.com/Brooooooklyn) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/49"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/49</a>
|
||||||
|
|
||||||
|
## New Contributors
|
||||||
|
* [@ggallon](https://github.com/ggallon) made their first contribution in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/47"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/47</a>
|
||||||
|
|
||||||
|
**Full Changelog**: <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/compare/@napi-rs/image@1.6.0...@napi-rs/image@1.6.1"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600">@napi-rs/image@1.6.0...@napi-rs/image@1.6.1</a>
|
||||||
|
|
||||||
|
## <a href="https://github.com/Brooooooklyn/Image/releases/tag/%40napi-rs/image%401.6.0" target="_blank" rel="noopener">@napi-rs/image@1.6.0</a>
|
||||||
|
2/27/2023
|
||||||
|
## What's Changed
|
||||||
|
* change Buffer to Uint8Array in fromRgbaPixels by [@KhafraDev](https://github.com/KhafraDev) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/41"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/41</a>
|
||||||
|
* feat(image): support Transformer from SVG by [@liby](https://github.com/liby) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/44"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/44</a>
|
||||||
|
|
||||||
|
## New Contributors
|
||||||
|
* [@KhafraDev](https://github.com/KhafraDev) made their first contribution in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/41"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/41</a>
|
||||||
|
|
||||||
|
**Full Changelog**: <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/compare/@napi-rs/image@1.5.1...@napi-rs/image@1.6.0"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600">@napi-rs/image@1.5.1...@napi-rs/image@1.6.0</a>
|
||||||
|
|
||||||
|
## <a href="https://github.com/Brooooooklyn/Image/releases/tag/%40napi-rs/image%401.5.1" target="_blank" rel="noopener">@napi-rs/image@1.5.1</a>
|
||||||
|
1/29/2023
|
||||||
|
## [1.5.1](https://github.com/Brooooooklyn/Image/compare/@napi-rs/image@1.5.0...@napi-rs/image@1.5.1) (2023-01-29)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **image:** update napi to fix electron create Buffer issues ([#39](https://github.com/Brooooooklyn/Image/issues/39)) ([e710222](https://github.com/Brooooooklyn/Image/commit/e7102224d67e390e0f897aea21a8da375676479d))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## <a href="https://github.com/Brooooooklyn/Image/releases/tag/%40napi-rs/image%401.5.0" target="_blank" rel="noopener">@napi-rs/image@1.5.0</a>
|
||||||
|
1/17/2023
|
||||||
|
## Core updates
|
||||||
|
|
||||||
|
### Fast Resize
|
||||||
|
Powered by https://github.com/Cykooz/fast_image_resize
|
||||||
|
|
||||||
|
**Performance**
|
||||||
|
#### x86_64 (AVX2)
|
||||||
|
|
||||||
|
```
|
||||||
|
OS: Windows 11 x86_64
|
||||||
|
Kernel: 10.0.22621
|
||||||
|
CPU: AMD Ryzen 9 5950X (32) @ 3.400GHz
|
||||||
|
Memory: 2535MiB / 32055MiB
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
sharp resize: 415.966ms
|
||||||
|
@napi-rs/image resize: 529.884ms
|
||||||
|
fast resize: 316.731ms
|
||||||
|
```
|
||||||
|
|
||||||
|
#### ARM64 (NEON)
|
||||||
|
|
||||||
|
```
|
||||||
|
OS: macOS 13.1 22C65 arm64
|
||||||
|
Host: MacBookPro18,2
|
||||||
|
Kernel: 22.2.0
|
||||||
|
CPU: Apple M1 Max
|
||||||
|
Memory: 8915MiB / 65536MiB
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
sharp resize: 616.549ms
|
||||||
|
@napi-rs/image resize: 525.776ms
|
||||||
|
fast resize: 431.185ms
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
const output = await new Transformer(NASA).fastResize({
|
||||||
|
width: 1024,
|
||||||
|
filter: FastResizeFilter.Lanczos3,
|
||||||
|
}).png()
|
||||||
|
```
|
||||||
|
|
||||||
|
We are keeping the `resize` API because the `ResizeFilter` algorithm is different between the `fast_image_resize` and `image` crates.
|
||||||
|
|
||||||
|
### overlay
|
||||||
|
```js
|
||||||
|
writeFileSync(
|
||||||
|
'output-overlay-png.png',
|
||||||
|
await new Transformer(PNG).overlay(PNG, 200, 200).png()
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
## What's Changed
|
||||||
|
* chore: add issue form templates by [@liby](https://github.com/liby) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/32"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/32</a>
|
||||||
|
* feat(image): implement `overlay` by [@liby](https://github.com/liby) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/33"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/33</a>
|
||||||
|
* feat(image): provide fast resize method by [@Brooooooklyn](https://github.com/Brooooooklyn) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/34"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/34</a>
|
||||||
|
* perf(image): make overlay lazy by [@Brooooooklyn](https://github.com/Brooooooklyn) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/35"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/35</a>
|
||||||
|
|
||||||
|
## New Contributors
|
||||||
|
* [@liby](https://github.com/liby) made their first contribution in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/32"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/32</a>
|
||||||
|
|
||||||
|
**Full Changelog**: <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/compare/@napi-rs/image@1.4.4...@napi-rs/image@1.5.0"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600">@napi-rs/image@1.4.4...@napi-rs/image@1.5.0</a>
|
||||||
|
|
||||||
|
## <a href="https://github.com/Brooooooklyn/Image/releases/tag/%40napi-rs/image%401.4.4" target="_blank" rel="noopener">@napi-rs/image@1.4.4</a>
|
||||||
|
1/3/2023
|
||||||
|
## What's Changed
|
||||||
|
* chore(image): fix android build by [@Brooooooklyn](https://github.com/Brooooooklyn) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/30"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/30</a>
|
||||||
|
|
||||||
|
|
||||||
|
**Full Changelog**: <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/compare/@napi-rs/image@1.4.3...@napi-rs/image@1.4.4"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600">@napi-rs/image@1.4.3...@napi-rs/image@1.4.4</a>
|
||||||
|
|
||||||
|
## <a href="https://github.com/Brooooooklyn/Image/releases/tag/%40napi-rs/image%401.4.3" target="_blank" rel="noopener">@napi-rs/image@1.4.3</a>
|
||||||
|
1/3/2023
|
||||||
|
## What's Changed
|
||||||
|
* Update oxipng by [@Brooooooklyn](https://github.com/Brooooooklyn) in <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/pull/29"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Brooooooklyn/Image/pull/29</a>
|
||||||
|
|
||||||
|
|
||||||
|
**Full Changelog**: <a
|
||||||
|
href="https://github.com/Brooooooklyn/Image/compare/@napi-rs/image@1.4.2...@napi-rs/image@1.4.3"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
className="nx-text-primary-600">@napi-rs/image@1.4.2...@napi-rs/image@1.4.3</a>
|
||||||
|
|
||||||
|
## <a href="https://github.com/Brooooooklyn/Image/releases/tag/%40napi-rs/image%401.4.2" target="_blank" rel="noopener">@napi-rs/image@1.4.2</a>
|
||||||
|
12/20/2022
|
||||||
|
## [1.4.2](https://github.com/Brooooooklyn/Image/compare/@napi-rs/image@1.4.1...@napi-rs/image@1.4.2) (2022-12-20)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **binding:** early return when input images are optimized ([#28](https://github.com/Brooooooklyn/Image/issues/28)) ([b695642](https://github.com/Brooooooklyn/Image/commit/b695642560e5aa43741e6a166119aa7b6d55145f))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## <a href="https://github.com/Brooooooklyn/Image/releases/tag/%40napi-rs/image%401.4.1" target="_blank" rel="noopener">@napi-rs/image@1.4.1</a>
|
||||||
|
10/7/2022
|
||||||
|
## [1.4.1](https://github.com/Brooooooklyn/Image/compare/@napi-rs/image@1.4.0...@napi-rs/image@1.4.1) (2022-10-07)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @napi-rs/image
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## <a href="https://github.com/Brooooooklyn/Image/releases/tag/%40napi-rs/image%401.4.0" target="_blank" rel="noopener">@napi-rs/image@1.4.0</a>
|
||||||
|
8/23/2022
|
||||||
|
# [1.4.0](https://github.com/Brooooooklyn/Image/compare/@napi-rs/image@1.3.0...@napi-rs/image@1.4.0) (2022-08-23)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **image:** upgrade libwebp to 0.7 ([#22](https://github.com/Brooooooklyn/Image/issues/22)) ([d3cde1c](https://github.com/Brooooooklyn/Image/commit/d3cde1c0e22bbd2b0e42ce604dcc668b6e364eb7))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## <a href="https://github.com/Brooooooklyn/Image/releases/tag/%40napi-rs/image%401.3.0" target="_blank" rel="noopener">@napi-rs/image@1.3.0</a>
|
||||||
|
5/18/2022
|
||||||
|
# [1.3.0](https://github.com/Brooooooklyn/Image/compare/@napi-rs/image@1.2.0...@napi-rs/image@1.3.0) (2022-05-18)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **image:** implement rawPixels and rawPixelsSync ([43e3938](https://github.com/Brooooooklyn/Image/commit/43e393860029cd3668aabf4d4362f8048faf4a6b))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## <a href="https://github.com/Brooooooklyn/Image/releases/tag/%40napi-rs/image%401.2.0" target="_blank" rel="noopener">@napi-rs/image@1.2.0</a>
|
||||||
|
5/2/2022
|
||||||
|
# [1.2.0](https://github.com/Brooooooklyn/Image/compare/@napi-rs/image@1.1.2...@napi-rs/image@1.2.0) (2022-05-02)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **image:** implement crop ([8bccc89](https://github.com/Brooooooklyn/Image/commit/8bccc89f54ede29897e156c01ce024ce9f13143b))
|
||||||
|
* **image:** support decode avif and webp ([#18](https://github.com/Brooooooklyn/Image/issues/18)) ([2813560](https://github.com/Brooooooklyn/Image/commit/2813560b9240c143d2c62fbea48d08918a9556af))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## <a href="https://github.com/Brooooooklyn/Image/releases/tag/%40napi-rs/image%401.1.2" target="_blank" rel="noopener">@napi-rs/image@1.1.2</a>
|
||||||
|
4/22/2022
|
||||||
|
## [1.1.2](https://github.com/Brooooooklyn/Image/compare/@napi-rs/image@1.1.1...@napi-rs/image@1.1.2) (2022-04-22)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **image:** manipulate image has no effect ([e224c25](https://github.com/Brooooooklyn/Image/commit/e224c259d709bba704549ca34fa7851da41a6a3d))
|
||||||
|
* **image:** webp encode LumaA8 and Luma8 ([2473680](https://github.com/Brooooooklyn/Image/commit/24736809eaa38237bd618b5860b12ae0ebe91bd6))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## <a href="https://github.com/Brooooooklyn/Image/releases/tag/%40napi-rs/image%401.1.1" target="_blank" rel="noopener">@napi-rs/image@1.1.1</a>
|
||||||
|
4/21/2022
|
||||||
|
## [1.1.1](https://github.com/Brooooooklyn/Image/compare/@napi-rs/image@1.1.0...@napi-rs/image@1.1.1) (2022-04-21)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **binding:** resize options and jpeg compress implementation ([b23c53b](https://github.com/Brooooooklyn/Image/commit/b23c53bf1085ef16b345a995fe130144dcf16a8f))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## <a href="https://github.com/Brooooooklyn/Image/releases/tag/%40napi-rs/image%401.1.0" target="_blank" rel="noopener">@napi-rs/image@1.1.0</a>
|
||||||
|
4/19/2022
|
||||||
|
# 1.1.0 (2022-04-19)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* async Transformer class ([#9](https://github.com/Brooooooklyn/Image/issues/9)) ([7cd00d4](https://github.com/Brooooooklyn/Image/commit/7cd00d41814fb4a683c8b26762bbea558ebb87e2))
|
||||||
|
* **image:** implement png_quantize ([66f5e0f](https://github.com/Brooooooklyn/Image/commit/66f5e0f2ef1e8c692c87963f63994e030203cf14))
|
||||||
|
* **image:** implement svg_min ([5b916b3](https://github.com/Brooooooklyn/Image/commit/5b916b3c3cb93582eb0cbfccdf6a14e2d4deea65))
|
||||||
|
* **image:** support more operations on Transformer ([af8ed99](https://github.com/Brooooooklyn/Image/commit/af8ed994b74a3c8493bd5597b490ac636574c8a2))
|
||||||
|
* **image:** support Transformer from raw rgba pixels ([8d49a8c](https://github.com/Brooooooklyn/Image/commit/8d49a8c4d3e5e04f0c9ff66a07a1620d01241d67))
|
||||||
|
* support avif ([81fc73a](https://github.com/Brooooooklyn/Image/commit/81fc73a7ec3632160fbf17264ff7ec9306c08710))
|
||||||
|
* support webp ([e90ecdc](https://github.com/Brooooooklyn/Image/commit/e90ecdc4b97630a390982e5420790390891ade7c))
|
||||||
|
* transform into monorepo ([#3](https://github.com/Brooooooklyn/Image/issues/3)) ([d0de72e](https://github.com/Brooooooklyn/Image/commit/d0de72e2a884476878f49539c8bf4e85a7e1b2d1))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -1,46 +0,0 @@
|
|||||||
import { useSSG } from 'nextra/ssg'
|
|
||||||
import { MDXRemote } from 'next-mdx-remote'
|
|
||||||
|
|
||||||
export const getChangelog = async (packageName, locale = 'en') => {
|
|
||||||
const releases = await fetch(`https://api.github.com/repos/Brooooooklyn/Image/releases?per_page=100`, {
|
|
||||||
headers: {
|
|
||||||
Authorization: `token ${process.env.GITHUB_TOKEN}`,
|
|
||||||
},
|
|
||||||
}).then((res) => res.json())
|
|
||||||
|
|
||||||
return {
|
|
||||||
props: {
|
|
||||||
ssg: releases
|
|
||||||
.filter(({ name }) => name?.startsWith(packageName))
|
|
||||||
.map((release) => {
|
|
||||||
const body = release.body
|
|
||||||
.replace(/'/g, "'")
|
|
||||||
.replace(/@([a-zA-Z0-9_-]+)(?=(,| ))/g, '[@$1](https://github.com/$1)')
|
|
||||||
.replace(
|
|
||||||
/https:\/\/github\.com\/(\S+\/\S+\/pull\/\d+)/g,
|
|
||||||
`<a
|
|
||||||
href="$&"
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener"
|
|
||||||
className="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">$1</a>`,
|
|
||||||
)
|
|
||||||
.replace(
|
|
||||||
/https:\/\/github\.com\/(.+?)\/(.+?)\/compare\/(.+?)@(.+?)\.\.\.(.+?)@(.+?)$/g,
|
|
||||||
`<a
|
|
||||||
href="$&"
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener"
|
|
||||||
className="nx-text-primary-600">$3@$4...$5@$6</a>`,
|
|
||||||
)
|
|
||||||
return `## <a href="${release.html_url}" target="_blank" rel="noopener">${release.tag_name}</a>
|
|
||||||
${new Date(release.published_at).toLocaleDateString(locale)} \n${body}`
|
|
||||||
})
|
|
||||||
.join('\n\n'),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function Changelog() {
|
|
||||||
const releases = useSSG()
|
|
||||||
return <MDXRemote {...releases} />
|
|
||||||
}
|
|
||||||
@ -3,9 +3,9 @@ import nextra from 'nextra'
|
|||||||
const withNextra = nextra({
|
const withNextra = nextra({
|
||||||
theme: 'nextra-theme-docs',
|
theme: 'nextra-theme-docs',
|
||||||
themeConfig: './nextra.config.js',
|
themeConfig: './nextra.config.js',
|
||||||
staticImage: true,
|
staticImage: false,
|
||||||
latex: true,
|
latex: true,
|
||||||
flexsearch: {
|
search: {
|
||||||
codeblocks: false,
|
codeblocks: false,
|
||||||
},
|
},
|
||||||
defaultShowCopyCode: true,
|
defaultShowCopyCode: true,
|
||||||
|
|||||||
@ -1,26 +1,15 @@
|
|||||||
import { useRouter } from 'next/router'
|
|
||||||
import Script from 'next/script'
|
import Script from 'next/script'
|
||||||
import { useConfig } from 'nextra-theme-docs'
|
import { useConfig } from 'nextra-theme-docs'
|
||||||
|
|
||||||
/**
|
/** @type {import('nextra-theme-docs').DocsThemeConfig} */
|
||||||
* @type {import('nextra-theme-docs').DocsThemeConfig}
|
|
||||||
*/
|
|
||||||
export default {
|
export default {
|
||||||
docsRepositoryBase: 'https://github.com/Brooooooklyn/Image/blob/main/website/',
|
docsRepositoryBase: 'https://github.com/Brooooooklyn/Image/blob/main/website',
|
||||||
project: {
|
project: {
|
||||||
link: 'https://github.com/Brooooooklyn/Image',
|
link: 'https://github.com/Brooooooklyn/Image',
|
||||||
},
|
},
|
||||||
chat: {
|
chat: {
|
||||||
link: 'https://discord.gg/w8DAD7auZc',
|
link: 'https://discord.gg/w8DAD7auZc',
|
||||||
},
|
},
|
||||||
useNextSeoProps() {
|
|
||||||
const { asPath } = useRouter()
|
|
||||||
if (asPath !== '/') {
|
|
||||||
return {
|
|
||||||
titleTemplate: '%s – Image',
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
logo: () => {
|
logo: () => {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
@ -68,13 +57,8 @@ export default {
|
|||||||
)
|
)
|
||||||
},
|
},
|
||||||
editLink: {
|
editLink: {
|
||||||
text: ({ locale }) => {
|
text: () => {
|
||||||
switch (locale) {
|
|
||||||
case 'cn':
|
|
||||||
return '在 GitHub 上编辑本页 →'
|
|
||||||
default:
|
|
||||||
return 'Edit this page on GitHub →'
|
return 'Edit this page on GitHub →'
|
||||||
}
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
footer: {
|
footer: {
|
||||||
|
|||||||
@ -4,20 +4,18 @@
|
|||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@napi-rs/canvas": "^0.1.53",
|
"@napi-rs/canvas": "^0.1.72",
|
||||||
"@napi-rs/image": "^1.9.2",
|
"@napi-rs/image": "^1.9.2",
|
||||||
"chalk": "^5.3.0",
|
"chalk": "^5.4.1",
|
||||||
"next": "^15.0.0",
|
"next": "^15.3.4",
|
||||||
"next-mdx-remote": "^5.0.0",
|
"nextra": "^3",
|
||||||
"nextra": "^2.13.4",
|
"nextra-theme-docs": "^3",
|
||||||
"nextra-theme-docs": "^2.13.4",
|
"react": "^19.1.0",
|
||||||
"node-fetch": "^3.3.2",
|
"react-dom": "^19.1.0",
|
||||||
"react": "^18.3.1",
|
"sharp": "^0.34.2"
|
||||||
"react-dom": "^18.3.1",
|
|
||||||
"sharp": "^0.33.4"
|
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "node generate-img.js && next build",
|
"build": "node generate-img.js && node changelog.js && next build",
|
||||||
"dev": "next dev",
|
"dev": "next dev",
|
||||||
"start": "next start"
|
"start": "next start"
|
||||||
}
|
}
|
||||||
|
|||||||
6
website/pages/_meta.js
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
export default {
|
||||||
|
'*': { theme: { breadcrumb: false } },
|
||||||
|
index: { title: 'Introduction', display: 'hidden', theme: { sidebar: false } },
|
||||||
|
docs: { title: 'Docs', type: 'page' },
|
||||||
|
changelog: { title: 'Changelog', type: 'page' },
|
||||||
|
}
|
||||||
@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"*": {
|
|
||||||
"theme": {
|
|
||||||
"breadcrumb": false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"index": {
|
|
||||||
"title": "Introduction",
|
|
||||||
"display": "hidden",
|
|
||||||
"theme": {
|
|
||||||
"sidebar": false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"docs": {
|
|
||||||
"title": "Docs",
|
|
||||||
"type": "page"
|
|
||||||
},
|
|
||||||
"changelog": {
|
|
||||||
"title": "Changelog",
|
|
||||||
"type": "page"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
7
website/pages/changelog/_meta.js
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
export default {
|
||||||
|
'index': {
|
||||||
|
theme: {
|
||||||
|
sidebar: false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,7 +0,0 @@
|
|||||||
{
|
|
||||||
"*": {
|
|
||||||
"theme": {
|
|
||||||
"sidebar": false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,23 +0,0 @@
|
|||||||
---
|
|
||||||
title: '@napi-rs/image'
|
|
||||||
description: '@napi-rs/image changelog.'
|
|
||||||
---
|
|
||||||
|
|
||||||
import { Changelog, getChangelog } from '../../components/changelog-generator'
|
|
||||||
import { serialize } from 'next-mdx-remote/serialize'
|
|
||||||
|
|
||||||
# @napi-rs/image
|
|
||||||
|
|
||||||
export const getStaticProps = async () => {
|
|
||||||
const {
|
|
||||||
props: { ssg },
|
|
||||||
} = await getChangelog('@napi-rs/image')
|
|
||||||
const mdx = await serialize(ssg)
|
|
||||||
return {
|
|
||||||
props: {
|
|
||||||
ssg: mdx,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
<Changelog />
|
|
||||||
4
website/pages/docs/_meta.js
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
export default {
|
||||||
|
index: 'Documentation',
|
||||||
|
credits: 'Credits',
|
||||||
|
}
|
||||||
@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"index": "Documentation",
|
|
||||||
"credits": "Credits"
|
|
||||||
}
|
|
||||||
@ -376,7 +376,7 @@ const imageOutputWithoutRotateWebp = await new Transformer(WITH_EXIF).resize(450
|
|||||||
writeFileSync('output-exif.no-rotate.image.webp', imageOutputWithoutRotateWebp)
|
writeFileSync('output-exif.no-rotate.image.webp', imageOutputWithoutRotateWebp)
|
||||||
```
|
```
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
With rotate:
|
With rotate:
|
||||||
|
|
||||||
@ -397,7 +397,7 @@ console.timeEnd('@napi-rs/image webp')
|
|||||||
writeFileSync('output-exif.image.webp', imageOutputWebp)
|
writeFileSync('output-exif.image.webp', imageOutputWebp)
|
||||||
```
|
```
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
#### `grayscale`
|
#### `grayscale`
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 8.6 KiB |