{"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["import { createRequire } from \"node:module\";\nimport inject from \"@rollup/plugin-inject\";\nimport stdLibBrowser from \"@bangjelkoski/node-stdlib-browser\";\nimport { handleCircularDependancyWarning } from \"@bangjelkoski/node-stdlib-browser/helpers/rollup/plugin\";\nimport esbuildPlugin from \"@bangjelkoski/node-stdlib-browser/helpers/esbuild/plugin\";\nimport type { Plugin } from \"vite\";\n\ninterface PolyfillOptions {\n  protocolImports: boolean;\n}\n\n/**\n * Returns a Vite plugin to polyfill Node's Core Modules for browser environments. Supports `node:` protocol imports.\n *\n * @example Use it in `vite.config.ts`\n *\n * ```ts\n * // vite.config.ts\n * import { defineConfig } from 'vite'\n * import { nodePolyfills } from 'vite-plugin-node-polyfills'\n *\n * export default defineConfig({\n *   plugins: [\n *     nodePolyfills({\n *       // Whether to polyfill `node:` protocol imports.\n *       protocolImports: true,\n *     }),\n *   ],\n * })\n * ```\n */\nexport const nodePolyfills = (\n  options: Partial<PolyfillOptions> = {}\n): Plugin => {\n  const require = createRequire(import.meta.url);\n  const globalShimsPath = require.resolve(\n    \"@bangjelkoski/node-stdlib-browser/helpers/esbuild/shim\"\n  );\n  const optionsResolved: PolyfillOptions = {\n    protocolImports: true,\n    // User options take priority.\n    ...options,\n  };\n\n  return {\n    name: \"vite-plugin-node-polyfills\",\n    config: (_config, _env) => {\n      const polyfills = Object.entries(stdLibBrowser).reduce(\n        (included: Record<string, string>, [name, value]) => {\n          if (!optionsResolved.protocolImports) {\n            const isProtocolImport = /^node:/.test(name);\n\n            if (isProtocolImport) {\n              return included;\n            }\n          }\n\n          included[name] = value;\n\n          return included;\n        },\n        {}\n      );\n\n      return {\n        build: {\n          rollupOptions: {\n            onwarn: (warning, rollupWarn) => {\n              handleCircularDependancyWarning(warning, rollupWarn);\n            },\n            plugins: [\n              {\n                ...inject({\n                  // https://github.com/niksy/node-stdlib-browser/blob/3e7cd7f3d115ac5c4593b550e7d8c4a82a0d4ac4/README.md#vite\n                  global: [globalShimsPath, \"global\"],\n                  process: [globalShimsPath, \"process\"],\n                  Buffer: [globalShimsPath, \"Buffer\"],\n                }),\n              },\n            ],\n          },\n        },\n        optimizeDeps: {\n          esbuildOptions: {\n            // https://github.com/niksy/node-stdlib-browser/blob/3e7cd7f3d115ac5c4593b550e7d8c4a82a0d4ac4/README.md?plain=1#L203-L209\n            define: {\n              Buffer: \"Buffer\",\n              global: \"global\",\n              process: \"process\",\n            },\n            inject: [globalShimsPath],\n            plugins: [\n              esbuildPlugin(polyfills),\n              // Supress the 'injected path \"...\" cannot be marked as external' error in Vite 4 (emitted by esbuild).\n              // https://github.com/evanw/esbuild/blob/edede3c49ad6adddc6ea5b3c78c6ea7507e03020/internal/bundler/bundler.go#L1469\n              {\n                name: \"vite-plugin-node-polyfills-shims-resolver\",\n                setup(build) {\n                  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping\n                  const escapedGlobalShimsPath = globalShimsPath.replace(\n                    /[.*+?^${}()|[\\]\\\\]/g,\n                    \"\\\\$&\"\n                  );\n                  const filter = new RegExp(`^${escapedGlobalShimsPath}$`);\n\n                  // https://esbuild.github.io/plugins/#on-resolve\n                  build.onResolve({ filter }, () => {\n                    return {\n                      // https://github.com/evanw/esbuild/blob/edede3c49ad6adddc6ea5b3c78c6ea7507e03020/internal/bundler/bundler.go#L1468\n                      external: false,\n                      path: globalShimsPath,\n                    };\n                  });\n                },\n              },\n            ],\n          },\n        },\n        resolve: {\n          // https://github.com/niksy/node-stdlib-browser/blob/3e7cd7f3d115ac5c4593b550e7d8c4a82a0d4ac4/README.md?plain=1#L150\n          alias: {\n            ...polyfills,\n          },\n        },\n      };\n    },\n  };\n};\n"],"names":["nodePolyfills","options","globalShimsPath","createRequire","optionsResolved","_config","_env","polyfills","stdLibBrowser","included","name","value","warning","rollupWarn","handleCircularDependancyWarning","inject","esbuildPlugin","build","escapedGlobalShimsPath","filter"],"mappings":"oYA+BaA,EAAgB,CAC3BC,EAAoC,KACzB,CAEX,MAAMC,EADUC,gBAAc,OAAA,SAAA,IAAA,GAAA,SAAA,QAAA,IAAA,QAAA,UAAA,EAAA,KAAA,SAAA,eAAA,SAAA,cAAA,KAAA,IAAA,IAAA,YAAA,SAAA,OAAA,EAAA,IAAe,EACb,QAC9B,wDAAA,EAEIC,EAAmC,CACvC,gBAAiB,GAEjB,GAAGH,CAAA,EAGE,MAAA,CACL,KAAM,6BACN,OAAQ,CAACI,EAASC,IAAS,CACzB,MAAMC,EAAY,OAAO,QAAQC,EAAAA,OAAa,EAAE,OAC9C,CAACC,EAAkC,CAACC,EAAMC,CAAK,KACzC,CAACP,EAAgB,iBACM,SAAS,KAAKM,CAAI,IAO7CD,EAASC,GAAQC,GAEVF,GAET,CAAC,CAAA,EAGI,MAAA,CACL,MAAO,CACL,cAAe,CACb,OAAQ,CAACG,EAASC,IAAe,CAC/BC,kCAAgCF,EAASC,CAAU,CACrD,EACA,QAAS,CACP,CACE,GAAGE,UAAO,CAER,OAAQ,CAACb,EAAiB,QAAQ,EAClC,QAAS,CAACA,EAAiB,SAAS,EACpC,OAAQ,CAACA,EAAiB,QAAQ,CAAA,CACnC,CACH,CACF,CACF,CACF,EACA,aAAc,CACZ,eAAgB,CAEd,OAAQ,CACN,OAAQ,SACR,OAAQ,SACR,QAAS,SACX,EACA,OAAQ,CAACA,CAAe,EACxB,QAAS,CACPc,EAAAA,QAAcT,CAAS,EAGvB,CACE,KAAM,4CACN,MAAMU,EAAO,CAEX,MAAMC,EAAyBhB,EAAgB,QAC7C,sBACA,MAAA,EAEIiB,EAAS,IAAI,OAAO,IAAID,IAAyB,EAGvDD,EAAM,UAAU,CAAE,OAAAE,CAAO,EAAG,KACnB,CAEL,SAAU,GACV,KAAMjB,CAAA,EAET,CACH,CACF,CACF,CACF,CACF,EACA,QAAS,CAEP,MAAO,CACL,GAAGK,CACL,CACF,CAAA,CAEJ,CAAA,CAEJ"}