Buckets:
| /*! | |
| Copyright 2013 Lovell Fuller and others. | |
| SPDX-License-Identifier: Apache-2.0 | |
| */ | |
| // Inspects the runtime environment and exports the relevant sharp.node binary | |
| const { familySync, versionSync } = require("detect-libc"); | |
| const libvips = require("./libvips.cjs"); | |
| const pkg = require('../package.json'); | |
| const { version } = pkg; | |
| const { runtimePlatformArch, isUnsupportedNodeRuntime, prebuiltPlatforms, minimumLibvipsVersion } = libvips; | |
| const runtimePlatform = runtimePlatformArch(); | |
| /* node:coverage disable */ | |
| let sharp; | |
| const errors = []; | |
| try { | |
| sharp = require(`../src/build/Release/sharp-${runtimePlatform}-${version}.node`); | |
| } catch (err) { | |
| errors.push(err); | |
| } | |
| if (!sharp) { | |
| try { | |
| sharp = require(`../src/build/Release/sharp-wasm32-${version}.node`); | |
| } catch (err) { | |
| errors.push(err); | |
| } | |
| } | |
| if (!sharp) { | |
| try { | |
| switch (runtimePlatform) { | |
| case "darwin-arm64": | |
| sharp = require("@img/sharp-darwin-arm64/sharp.node"); | |
| break; | |
| case "darwin-x64": | |
| sharp = require("@img/sharp-darwin-x64/sharp.node"); | |
| break; | |
| case "linux-arm": | |
| sharp = require("@img/sharp-linux-arm/sharp.node"); | |
| break; | |
| case "linux-arm64": | |
| sharp = require("@img/sharp-linux-arm64/sharp.node"); | |
| break; | |
| case "linux-ppc64": | |
| sharp = require("@img/sharp-linux-ppc64/sharp.node"); | |
| break; | |
| case "linux-riscv64": | |
| sharp = require("@img/sharp-linux-riscv64/sharp.node"); | |
| break; | |
| case "linux-s390x": | |
| sharp = require("@img/sharp-linux-s390x/sharp.node"); | |
| break; | |
| case "linux-x64": | |
| sharp = require("@img/sharp-linux-x64/sharp.node"); | |
| break; | |
| case "linuxmusl-arm64": | |
| sharp = require("@img/sharp-linuxmusl-arm64/sharp.node"); | |
| break; | |
| case "linuxmusl-x64": | |
| sharp = require("@img/sharp-linuxmusl-x64/sharp.node"); | |
| break; | |
| case "win32-arm64": | |
| sharp = require("@img/sharp-win32-arm64/sharp.node"); | |
| break; | |
| case "win32-ia32": | |
| sharp = require("@img/sharp-win32-ia32/sharp.node"); | |
| break; | |
| case "win32-x64": | |
| sharp = require("@img/sharp-win32-x64/sharp.node"); | |
| break; | |
| case "freebsd-arm64": | |
| case "freebsd-x64": | |
| sharp = require("@img/sharp-freebsd-wasm32/sharp.node"); | |
| break; | |
| case "linux-wasm32": | |
| sharp = require("@img/sharp-webcontainers-wasm32/sharp.node"); | |
| break; | |
| } | |
| if (sharp && ["linux-x64", "linuxmusl-x64"].includes(runtimePlatform) && !sharp._isUsingX64V2()) { | |
| const err = new Error("Prebuilt binaries for Linux x64 require v2 microarchitecture"); | |
| err.code = "Unsupported CPU"; | |
| errors.push(err); | |
| sharp = null; | |
| } | |
| if (sharp && process.versions.electron && runtimePlatform.startsWith("linux")) { | |
| process.emitWarning( | |
| "Binaries provided by Electron for use on Linux may be incompatible with sharp - see https://sharp.pixelplumbing.com/install#electron-and-linux", | |
| { code: "SharpElectronLinux" } | |
| ); | |
| } | |
| } catch (err) { | |
| errors.push(err); | |
| } | |
| } | |
| if (!sharp) { | |
| try { | |
| sharp = require("@img/sharp-wasm32/sharp.node"); | |
| } catch (err) { | |
| errors.push(err); | |
| } | |
| } | |
| if (!sharp) { | |
| const [isLinux, isMacOs, isWindows] = ["linux", "darwin", "win32"].map((os) => runtimePlatform.startsWith(os)); | |
| const help = [`Could not load the "sharp" module using the ${runtimePlatform} runtime`]; | |
| errors.forEach((err) => { | |
| if (!err.code.endsWith("MODULE_NOT_FOUND")) { | |
| help.push(`${err.code}: ${err.message}`); | |
| } | |
| }); | |
| const messages = errors.map((err) => err.message).join(" "); | |
| help.push("Possible solutions:"); | |
| // Common error messages | |
| if (isUnsupportedNodeRuntime()) { | |
| const { found, expected } = isUnsupportedNodeRuntime(); | |
| help.push("- Please upgrade Node.js:", ` Found ${found}`, ` Requires ${expected}`); | |
| } else if (prebuiltPlatforms.includes(runtimePlatform)) { | |
| const [os, cpu] = runtimePlatform.split("-"); | |
| const libc = os.endsWith("musl") ? " --libc=musl" : ""; | |
| help.push( | |
| "- Ensure optional dependencies can be installed:", | |
| " npm install --include=optional sharp", | |
| "- Ensure your package manager supports multi-platform installation:", | |
| " See https://sharp.pixelplumbing.com/install#cross-platform", | |
| "- Add platform-specific dependencies:", | |
| ` npm install --os=${os.replace("musl", "")}${libc} --cpu=${cpu} sharp`, | |
| ); | |
| } else { | |
| help.push( | |
| `- Manually install libvips >= ${minimumLibvipsVersion}`, | |
| " See https://sharp.pixelplumbing.com/install#building-from-source", | |
| "- Add WebAssembly-based dependencies:", | |
| " npm install sharp @img/sharp-wasm32", | |
| ); | |
| } | |
| if (isLinux && /(symbol not found|CXXABI_)/i.test(messages)) { | |
| try { | |
| const { config } = require(`@img/sharp-libvips-${runtimePlatform}/package`); | |
| const libcFound = `${familySync()} ${versionSync()}`; | |
| const libcRequires = `${config.musl ? "musl" : "glibc"} ${config.musl || config.glibc}`; | |
| help.push("- Update your OS:", ` Found ${libcFound}`, ` Requires ${libcRequires}`); | |
| } catch (_errEngines) {} | |
| } | |
| if (isLinux && /\/snap\/core[0-9]{2}/.test(messages)) { | |
| help.push("- Remove the Node.js Snap, which does not support native modules", " snap remove node"); | |
| } | |
| if (isMacOs && /Incompatible library version/.test(messages)) { | |
| help.push("- Update Homebrew:", " brew update && brew upgrade vips"); | |
| } | |
| if (errors.some((err) => err.code === "ERR_DLOPEN_DISABLED")) { | |
| help.push("- Run Node.js without using the --no-addons flag"); | |
| } | |
| // Link to installation docs | |
| if (isWindows && /The specified procedure could not be found/.test(messages)) { | |
| help.push( | |
| "- Using the canvas package on Windows?", | |
| " See https://sharp.pixelplumbing.com/install#canvas-and-windows", | |
| "- Check for outdated versions of sharp in the dependency tree:", | |
| " npm ls sharp", | |
| ); | |
| } | |
| help.push("- Consult the installation documentation:", " See https://sharp.pixelplumbing.com/install"); | |
| throw new Error(help.join("\n")); | |
| } | |
| module.exports = sharp; | |
Xet Storage Details
- Size:
- 6.2 kB
- Xet hash:
- 9a53aa970de4d3eb0597ad9e156353d251149f188bc8b82037547f392a15fba0
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.