123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- const { existsSync } = require('node:fs');
- const path = require('node:path');
- const { platform, arch, report } = require('node:process');
- const isMusl = () => !report.getReport().header.glibcVersionRuntime;
- const bindingsByPlatformAndArch = {
- android: {
- arm: { base: 'android-arm-eabi' },
- arm64: { base: 'android-arm64' }
- },
- darwin: {
- arm64: { base: 'darwin-arm64' },
- x64: { base: 'darwin-x64' }
- },
- freebsd: {
- arm64: { base: 'freebsd-arm64' },
- x64: { base: 'freebsd-x64' }
- },
- linux: {
- arm: { base: 'linux-arm-gnueabihf', musl: 'linux-arm-musleabihf' },
- arm64: { base: 'linux-arm64-gnu', musl: 'linux-arm64-musl' },
- ppc64: { base: 'linux-powerpc64le-gnu', musl: null },
- riscv64: { base: 'linux-riscv64-gnu', musl: null },
- s390x: { base: 'linux-s390x-gnu', musl: null },
- x64: { base: 'linux-x64-gnu', musl: 'linux-x64-musl' }
- },
- win32: {
- arm64: { base: 'win32-arm64-msvc' },
- ia32: { base: 'win32-ia32-msvc' },
- x64: { base: 'win32-x64-msvc' }
- }
- };
- const msvcLinkFilenameByArch = {
- arm64: 'vc_redist.arm64.exe',
- ia32: 'vc_redist.x86.exe',
- x64: 'vc_redist.x64.exe'
- };
- const packageBase = getPackageBase();
- const localName = `./rollup.${packageBase}.node`;
- const requireWithFriendlyError = id => {
- try {
- return require(id);
- } catch (error) {
- if (
- platform === 'win32' &&
- error instanceof Error &&
- error.code === 'ERR_DLOPEN_FAILED' &&
- error.message.includes('The specified module could not be found')
- ) {
- const msvcDownloadLink = `https://aka.ms/vs/17/release/${msvcLinkFilenameByArch[arch]}`;
- throw new Error(
- `Failed to load module ${id}. ` +
- 'Required DLL was not found. ' +
- 'This error usually happens when Microsoft Visual C++ Redistributable is not installed. ' +
- `You can download it from ${msvcDownloadLink}`,
- { cause: error }
- );
- }
- throw new Error(
- `Cannot find module ${id}. ` +
- `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: error }
- );
- }
- };
- const { parse, parseAsync, xxhashBase64Url, xxhashBase36, xxhashBase16 } = requireWithFriendlyError(
- existsSync(path.join(__dirname, localName)) ? localName : `@rollup/rollup-${packageBase}`
- );
- function getPackageBase() {
- const imported = bindingsByPlatformAndArch[platform]?.[arch];
- if (!imported) {
- throwUnsupportedError(false);
- }
- if ('musl' in imported && isMusl()) {
- return imported.musl || throwUnsupportedError(true);
- }
- return imported.base;
- }
- function throwUnsupportedError(isMusl) {
- throw new Error(
- `Your current platform "${platform}${isMusl ? ' (musl)' : ''}" and architecture "${arch}" combination is not yet supported by the native Rollup build. Please use the WASM build "@rollup/wasm-node" instead.
- The following platform-architecture combinations are supported:
- ${Object.entries(bindingsByPlatformAndArch)
- .flatMap(([platformName, architectures]) =>
- Object.entries(architectures).flatMap(([architectureName, { musl }]) => {
- const name = `${platformName}-${architectureName}`;
- return musl ? [name, `${name} (musl)`] : [name];
- })
- )
- .join('\n')}
- If this is important to you, please consider supporting Rollup to make a native build for your platform and architecture available.`
- );
- }
- module.exports.parse = parse;
- module.exports.parseAsync = parseAsync;
- module.exports.xxhashBase64Url = xxhashBase64Url;
- module.exports.xxhashBase36 = xxhashBase36;
- module.exports.xxhashBase16 = xxhashBase16;
|