From 2cb265e4723c56607bb6fcf31d453bcf220f8ea5 Mon Sep 17 00:00:00 2001 From: LongYinan Date: Mon, 8 Dec 2025 15:28:44 +0800 Subject: [PATCH] chore: upgrade all deps (#170) * chore: upgrade all deps --- .github/workflows/CI.yml | 8 +- package.json | 16 +- packages/binding/Cargo.toml | 2 +- packages/binding/__test__/optimize.spec.mjs | 20 +- packages/binding/index.js | 80 +- packages/binding/package.json | 4 +- website/app/[[...mdxPath]]/page.jsx | 23 + website/app/layout.jsx | 98 + website/changelog.js | 6 +- website/changelog.md | 281 +- website/{pages => content}/_meta.js | 0 website/{pages => content}/changelog/_meta.js | 8 +- website/content/changelog/index.md | 608 ++++ website/{pages => content}/docs/_meta.js | 0 website/{pages => content}/docs/credits.md | 0 website/{pages => content}/docs/index.mdx | 0 website/{pages => content}/index.mdx | 4 +- website/mdx-components.js | 7 + website/next.config.js | 5 - website/nextra.config.js | 83 - website/package.json | 18 +- website/pages/_app.jsx | 10 - yarn.lock | 3002 ++++++++--------- 23 files changed, 2374 insertions(+), 1909 deletions(-) create mode 100644 website/app/[[...mdxPath]]/page.jsx create mode 100644 website/app/layout.jsx rename website/{pages => content}/_meta.js (100%) rename website/{pages => content}/changelog/_meta.js (67%) create mode 100644 website/content/changelog/index.md rename website/{pages => content}/docs/_meta.js (100%) rename website/{pages => content}/docs/credits.md (100%) rename website/{pages => content}/docs/index.mdx (100%) rename website/{pages => content}/index.mdx (96%) create mode 100644 website/mdx-components.js delete mode 100644 website/nextra.config.js delete mode 100644 website/pages/_app.jsx diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 8f5efe7..4590bae 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -104,9 +104,6 @@ jobs: build: | export TARGET_CC=clang export TARGET_CXX=clang++ - export HOME_DIR=$(node -e "console.log(os.homedir())") - export CROSS_TOOLCHAIN_VERSION=$(node -e "console.log(require('@napi-rs/cross-toolchain/package.json').version)") - export BINDGEN_EXTRA_CLANG_ARGS="--sysroot=$HOME_DIR/.napi-rs/cross-toolchain/$CROSS_TOOLCHAIN_VERSION/aarch64-unknown-linux-gnu/aarch64-unknown-linux-gnu/sysroot" yarn workspace @napi-rs/image build --features with_simd --target aarch64-unknown-linux-gnu --use-napi-cross - host: ubuntu-latest target: aarch64-linux-android @@ -155,7 +152,7 @@ jobs: uses: KyleMayes/install-llvm-action@v2 if: ${{ matrix.settings.target == 'x86_64-unknown-linux-musl' }} with: - version: "20" + version: '20' - name: Install cargo-xwin uses: taiki-e/install-action@v2 if: matrix.settings.target == 'i686-pc-windows-msvc' || matrix.settings.target == 'aarch64-pc-windows-msvc' @@ -221,8 +218,7 @@ jobs: packages/binding/*.node packages/binding/image.wasm32-wasi.wasm if-no-files-found: error - - + build-armv7-linux-gnueabihf: name: Build armv7-unknown-linux-gnueabihf runs-on: ubuntu-latest diff --git a/package.json b/package.json index a5686f6..1188dad 100644 --- a/package.json +++ b/package.json @@ -12,20 +12,20 @@ "website" ], "devDependencies": { - "@napi-rs/cli": "^3.0.4", + "@napi-rs/cli": "^3.5.0", "@taplo/cli": "^0.7.0", - "@types/node": "^24.1.0", + "@types/node": "^24.10.1", "@types/sharp": "^0.32.0", "ava": "^6.4.1", "blurhash": "^2.0.5", - "chalk": "^5.4.1", - "electron": "^39.0.0", - "lerna": "^9.0.0", + "chalk": "^5.6.2", + "electron": "^39.2.6", + "lerna": "^9.0.3", "npm-run-all2": "^8.0.4", - "prettier": "^3.6.2", + "prettier": "^3.7.4", "rxjs": "^7.8.2", - "sharp": "^0.34.3", - "typescript": "^5.8.3" + "sharp": "^0.34.5", + "typescript": "^5.9.3" }, "scripts": { "artifacts": "lerna run artifacts", diff --git a/packages/binding/Cargo.toml b/packages/binding/Cargo.toml index 5923b81..53bfbc7 100644 --- a/packages/binding/Cargo.toml +++ b/packages/binding/Cargo.toml @@ -43,7 +43,7 @@ svgtypes = "0.16" version = "2" [target.'cfg(not(all(target_os = "macos", target_arch = "x86_64")))'.dependencies] -libwebp-sys = { version = "0.14", default-features = false, features = ["std", "parallel", "avx2", "sse41", "neon", "generate-bindings"] } +libwebp-sys = { version = "0.14", default-features = false, features = ["std", "parallel", "avx2", "sse41", "neon"] } [target.'cfg(all(target_os = "macos", target_arch = "x86_64"))'.dependencies] libwebp-sys = { version = "0.14", default-features = false, features = ["std", "parallel", "generate-bindings"] } diff --git a/packages/binding/__test__/optimize.spec.mjs b/packages/binding/__test__/optimize.spec.mjs index be85852..718b325 100644 --- a/packages/binding/__test__/optimize.spec.mjs +++ b/packages/binding/__test__/optimize.spec.mjs @@ -53,15 +53,19 @@ test('should be able to lossless encode webp from jpeg', (t) => { }) test('should be able to encode avif from png', (t) => { - t.true(new Transformer(PNG).avifSync({ - speed: 10, - threads: 1, - }).length < PNG.length) + t.true( + new Transformer(PNG).avifSync({ + speed: 10, + threads: 1, + }).length < PNG.length, + ) }) test('should be able to encode avif from jpeg', (t) => { - t.true(new Transformer(JPEG).avifSync({ - speed: 10, - threads: 1, - }).length < JPEG.length) + t.true( + new Transformer(JPEG).avifSync({ + speed: 10, + threads: 1, + }).length < JPEG.length, + ) }) diff --git a/packages/binding/index.js b/packages/binding/index.js index f50c290..6768adb 100644 --- a/packages/binding/index.js +++ b/packages/binding/index.js @@ -3,9 +3,6 @@ // @ts-nocheck /* auto-generated by NAPI-RS */ -const { createRequire } = require('node:module') -require = createRequire(__filename) - const { readFileSync } = require('node:fs') let nativeBinding = null const loadErrors = [] @@ -66,7 +63,7 @@ const isMuslFromChildProcess = () => { function requireNative() { if (process.env.NAPI_RS_NATIVE_LIBRARY_PATH) { try { - nativeBinding = require(process.env.NAPI_RS_NATIVE_LIBRARY_PATH); + return require(process.env.NAPI_RS_NATIVE_LIBRARY_PATH); } catch (err) { loadErrors.push(err) } @@ -108,7 +105,24 @@ function requireNative() { } } else if (process.platform === 'win32') { if (process.arch === 'x64') { + if (process.config?.variables?.shlib_suffix === 'dll.a' || process.config?.variables?.node_target_type === 'shared_library') { + try { + return require('./image.win32-x64-gnu.node') + } catch (e) { + loadErrors.push(e) + } try { + const binding = require('@napi-rs/image-win32-x64-gnu') + const bindingPackageVersion = require('@napi-rs/image-win32-x64-gnu/package.json').version + if (bindingPackageVersion !== '1.11.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 1.11.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return binding + } catch (e) { + loadErrors.push(e) + } + } else { + try { return require('./image.win32-x64-msvc.node') } catch (e) { loadErrors.push(e) @@ -123,6 +137,7 @@ function requireNative() { } catch (e) { loadErrors.push(e) } + } } else if (process.arch === 'ia32') { try { return require('./image.win32-ia32-msvc.node') @@ -348,6 +363,40 @@ function requireNative() { loadErrors.push(e) } } + } else if (process.arch === 'loong64') { + if (isMusl()) { + try { + return require('./image.linux-loong64-musl.node') + } catch (e) { + loadErrors.push(e) + } + try { + const binding = require('@napi-rs/image-linux-loong64-musl') + const bindingPackageVersion = require('@napi-rs/image-linux-loong64-musl/package.json').version + if (bindingPackageVersion !== '1.11.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 1.11.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return binding + } catch (e) { + loadErrors.push(e) + } + } else { + try { + return require('./image.linux-loong64-gnu.node') + } catch (e) { + loadErrors.push(e) + } + try { + const binding = require('@napi-rs/image-linux-loong64-gnu') + const bindingPackageVersion = require('@napi-rs/image-linux-loong64-gnu/package.json').version + if (bindingPackageVersion !== '1.11.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 1.11.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return binding + } catch (e) { + loadErrors.push(e) + } + } } else if (process.arch === 'riscv64') { if (isMusl()) { try { @@ -477,22 +526,32 @@ function requireNative() { nativeBinding = requireNative() if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) { + let wasiBinding = null + let wasiBindingError = null try { - nativeBinding = require('./image.wasi.cjs') + wasiBinding = require('./image.wasi.cjs') + nativeBinding = wasiBinding } catch (err) { if (process.env.NAPI_RS_FORCE_WASI) { - loadErrors.push(err) + wasiBindingError = err } } if (!nativeBinding) { try { - nativeBinding = require('@napi-rs/image-wasm32-wasi') + wasiBinding = require('@napi-rs/image-wasm32-wasi') + nativeBinding = wasiBinding } catch (err) { if (process.env.NAPI_RS_FORCE_WASI) { + wasiBindingError.cause = err loadErrors.push(err) } } } + if (process.env.NAPI_RS_FORCE_WASI === 'error' && !wasiBinding) { + const error = new Error('WASI binding not found and NAPI_RS_FORCE_WASI is set to error') + error.cause = wasiBindingError + throw error + } } if (!nativeBinding) { @@ -501,7 +560,12 @@ if (!nativeBinding) { `Cannot find native binding. ` + `npm has a bug related to optional dependencies (https://github.com/npm/cli/issues/4828). ` + 'Please try `npm i` again after removing both package-lock.json and node_modules directory.', - { cause: loadErrors } + { + cause: loadErrors.reduce((err, cur) => { + cur.cause = err + return cur + }), + }, ) } throw new Error(`Failed to load native binding`) diff --git a/packages/binding/package.json b/packages/binding/package.json index d91d60c..45c44ea 100644 --- a/packages/binding/package.json +++ b/packages/binding/package.json @@ -72,7 +72,7 @@ }, "repository": "git@github.com:Brooooooklyn/Image.git", "devDependencies": { - "@napi-rs/cli": "^3.1.2", - "@napi-rs/wasm-runtime": "^1.0.3" + "@napi-rs/cli": "^3.5.0", + "@napi-rs/wasm-runtime": "^1.1.0" } } diff --git a/website/app/[[...mdxPath]]/page.jsx b/website/app/[[...mdxPath]]/page.jsx new file mode 100644 index 0000000..8ee6798 --- /dev/null +++ b/website/app/[[...mdxPath]]/page.jsx @@ -0,0 +1,23 @@ +import { generateStaticParamsFor, importPage } from 'nextra/pages' +import { useMDXComponents as getMDXComponents } from '../../mdx-components' + +export const generateStaticParams = generateStaticParamsFor('mdxPath') + +export async function generateMetadata(props) { + const params = await props.params + const { metadata } = await importPage(params.mdxPath) + return metadata +} + +const Wrapper = getMDXComponents().wrapper + +export default async function Page(props) { + const params = await props.params + const result = await importPage(params.mdxPath) + const { default: MDXContent, toc, metadata } = result + return ( + + + + ) +} diff --git a/website/app/layout.jsx b/website/app/layout.jsx new file mode 100644 index 0000000..905f956 --- /dev/null +++ b/website/app/layout.jsx @@ -0,0 +1,98 @@ +import { Footer, Layout, Navbar } from 'nextra-theme-docs' +import { Head } from 'nextra/components' +import { getPageMap } from 'nextra/page-map' +import Script from 'next/script' +import 'nextra-theme-docs/style.css' +import '../style.css' + +export const metadata = { + title: '@napi-rs/image', + description: 'Fast image processing library', + openGraph: { + title: '@napi-rs/image', + description: 'Fast image processing library', + url: 'https://image.napi.rs', + siteName: 'Image', + type: 'website', + images: [ + { + url: 'https://image.napi.rs/img/og.png', + }, + ], + }, + twitter: { + card: 'summary_large_image', + site: '@Brooooook_lyn', + creator: '@Brooooook_lyn', + }, + icons: { + icon: [ + { url: '/img/favicon-32x32.png', sizes: '32x32', type: 'image/png' }, + { url: '/img/favicon-16x16.png', sizes: '16x16', type: 'image/png' }, + ], + apple: '/img/apple-touch-icon.png', + }, +} + +const navbar = ( + + @napi-rs/image + + @napi-rs/image + + + } + projectLink="https://github.com/Brooooooklyn/Image" + chatLink="https://discord.gg/w8DAD7auZc" + /> +) + +const footer = ( + +) + +export default async function RootLayout({ children }) { + return ( + + + +