vite-plugin-node-polyfills
Version:
A Vite plugin to polyfill Node's Core Modules for browser environments.
130 lines (129 loc) • 5.29 kB
JavaScript
import { createRequire as y } from "node:module";
import _ from "@rollup/plugin-inject";
import B from "node-stdlib-browser";
import { handleCircularDependancyWarning as x } from "node-stdlib-browser/helpers/rollup/plugin";
import T from "node-stdlib-browser/helpers/esbuild/plugin";
const d = (s, l) => b(s) === b(l), e = (s, l) => s ? s === !0 ? !0 : s === l : !1, j = (s) => s.startsWith("node:"), O = (s) => {
const l = s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
return new RegExp(`^${l}$`);
}, b = (s) => s.replace(/^node:/, ""), u = {
buffer: [
"import __buffer_polyfill from 'vite-plugin-node-polyfills/shims/buffer'",
"globalThis.Buffer = globalThis.Buffer || __buffer_polyfill"
],
global: [
"import __global_polyfill from 'vite-plugin-node-polyfills/shims/global'",
"globalThis.global = globalThis.global || __global_polyfill"
],
process: [
"import __process_polyfill from 'vite-plugin-node-polyfills/shims/process'",
"globalThis.process = globalThis.process || __process_polyfill"
]
}, E = (s = {}) => {
const l = {
include: [],
exclude: [],
overrides: {},
protocolImports: !0,
...s,
globals: {
Buffer: !0,
global: !0,
process: !0,
...s.globals
}
}, m = (o) => l.include.length > 0 ? !l.include.some((r) => d(o, r)) : l.exclude.some((r) => d(o, r)), v = (o) => {
if (e(l.globals.Buffer, "dev") && /^buffer$/.test(o))
return "vite-plugin-node-polyfills/shims/buffer";
if (e(l.globals.global, "dev") && /^global$/.test(o))
return "vite-plugin-node-polyfills/shims/global";
if (e(l.globals.process, "dev") && /^process$/.test(o))
return "vite-plugin-node-polyfills/shims/process";
if (o in l.overrides)
return l.overrides[o];
}, g = Object.entries(B).reduce((o, [r, i]) => (!l.protocolImports && j(r) || m(r) || (o[r] = v(b(r)) || i), o), {}), p = y(import.meta.url), f = [
...e(l.globals.Buffer, "dev") ? [p.resolve("vite-plugin-node-polyfills/shims/buffer")] : [],
...e(l.globals.global, "dev") ? [p.resolve("vite-plugin-node-polyfills/shims/global")] : [],
...e(l.globals.process, "dev") ? [p.resolve("vite-plugin-node-polyfills/shims/process")] : []
], a = [
...e(l.globals.Buffer, "dev") ? u.buffer : [],
...e(l.globals.global, "dev") ? u.global : [],
...e(l.globals.process, "dev") ? u.process : [],
""
].join(`
`);
return {
name: "vite-plugin-node-polyfills",
config: (o, r) => {
const i = r.command === "serve", c = {
// https://github.com/niksy/node-stdlib-browser/blob/3e7cd7f3d115ac5c4593b550e7d8c4a82a0d4ac4/README.md#vite
...e(l.globals.Buffer, "build") ? { Buffer: "vite-plugin-node-polyfills/shims/buffer" } : {},
...e(l.globals.global, "build") ? { global: "vite-plugin-node-polyfills/shims/global" } : {},
...e(l.globals.process, "build") ? { process: "vite-plugin-node-polyfills/shims/process" } : {}
};
return {
build: {
rollupOptions: {
onwarn: (t, n) => {
x(t, () => {
if (o.build?.rollupOptions?.onwarn)
return o.build.rollupOptions.onwarn(t, n);
n(t);
});
},
plugins: Object.keys(c).length > 0 ? [_(c)] : []
}
},
esbuild: {
// In dev, the global polyfills need to be injected as a banner in order for isolated scripts (such as Vue SFCs) to have access to them.
banner: i ? a : void 0
},
optimizeDeps: {
exclude: [
...f
],
esbuildOptions: {
banner: i ? { js: a } : void 0,
// https://github.com/niksy/node-stdlib-browser/blob/3e7cd7f3d115ac5c4593b550e7d8c4a82a0d4ac4/README.md?plain=1#L203-L209
define: {
...i && e(l.globals.Buffer, "dev") ? { Buffer: "Buffer" } : {},
...i && e(l.globals.global, "dev") ? { global: "global" } : {},
...i && e(l.globals.process, "dev") ? { process: "process" } : {}
},
inject: [
...f
],
plugins: [
T(g),
// Supress the 'injected path "..." cannot be marked as external' error in Vite 4 (emitted by esbuild).
// https://github.com/evanw/esbuild/blob/edede3c49ad6adddc6ea5b3c78c6ea7507e03020/internal/bundler/bundler.go#L1469
{
name: "vite-plugin-node-polyfills-shims-resolver",
setup(t) {
for (const n of f) {
const h = O(n);
t.onResolve({ filter: h }, () => ({
// https://github.com/evanw/esbuild/blob/edede3c49ad6adddc6ea5b3c78c6ea7507e03020/internal/bundler/bundler.go#L1468
external: !1,
path: n
}));
}
}
}
]
}
},
resolve: {
// https://github.com/niksy/node-stdlib-browser/blob/3e7cd7f3d115ac5c4593b550e7d8c4a82a0d4ac4/README.md?plain=1#L150
alias: {
...g
}
}
};
}
};
};
export {
E as nodePolyfills
};
//# sourceMappingURL=index.js.map