aboutsummaryrefslogtreecommitdiffstats
path: root/vanilla/node_modules/rollup/dist/native.js
diff options
context:
space:
mode:
Diffstat (limited to 'vanilla/node_modules/rollup/dist/native.js')
-rw-r--r--vanilla/node_modules/rollup/dist/native.js161
1 files changed, 161 insertions, 0 deletions
diff --git a/vanilla/node_modules/rollup/dist/native.js b/vanilla/node_modules/rollup/dist/native.js
new file mode 100644
index 0000000..962a101
--- /dev/null
+++ b/vanilla/node_modules/rollup/dist/native.js
@@ -0,0 +1,161 @@
+const { existsSync } = require('node:fs');
+const path = require('node:path');
+const { platform, arch, report } = require('node:process');
+const { spawnSync } = require('node:child_process');
+
+const getReportHeader = () => {
+ try {
+ if (platform !== 'win32') {
+ return report.getReport().header;
+ }
+
+ // This is needed because report.getReport() crashes the process on Windows sometimes.
+ const script =
+ "console.log(JSON.stringify(require('node:process').report.getReport().header));";
+ const child = spawnSync(process.execPath, ['-p', script], {
+ encoding: 'utf8',
+ timeout: 3000,
+ windowsHide: true
+ });
+
+ if (child.status !== 0) {
+ return null;
+ }
+
+ // The output from node -p might include a trailing 'undefined' and newline
+ const stdout = child.stdout?.replace(/undefined\r?\n?$/, '').trim();
+ if (!stdout) {
+ return null;
+ }
+
+ return JSON.parse(stdout);
+ } catch {
+ return null;
+ }
+};
+
+let reportHeader;
+const isMingw32 = () => {
+ reportHeader ??= getReportHeader();
+
+ return reportHeader?.osName?.startsWith('MINGW32_NT') ?? false;
+};
+
+const isMusl = () => {
+ reportHeader ??= getReportHeader();
+
+ return reportHeader ? !reportHeader.glibcVersionRuntime : false;
+};
+
+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' },
+ loong64: { base: 'linux-loong64-gnu', musl: 'linux-loong64-musl' },
+ ppc64: { base: 'linux-ppc64-gnu', musl: 'linux-ppc64-musl' },
+ riscv64: { base: 'linux-riscv64-gnu', musl: 'linux-riscv64-musl' },
+ s390x: { base: 'linux-s390x-gnu', musl: null },
+ x64: { base: 'linux-x64-gnu', musl: 'linux-x64-musl' }
+ },
+ openbsd: {
+ x64: { base: 'openbsd-x64' }
+ },
+ openharmony: {
+ arm64: { base: 'openharmony-arm64' }
+ },
+ win32: {
+ arm64: { base: 'win32-arm64-msvc' },
+ ia32: { base: 'win32-ia32-msvc' },
+ x64: {
+ base: isMingw32() ? 'win32-x64-gnu' : '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;