عکس Aslemammad
modern polyfills for node native modules based on jspm-coreTypeScript
موضوع‌ها
۰
فورک‌ها
۰
ستاره‌ها
۶
تاریخ ایجاد
۷ تیر ۱۴۰۱
آخرین بروزرسانی
۲ روز قبل

modern-node-polyfills

A way to enable using Node native modules in non-node (Browser, Cloudflare, Deno, ...) environemnts with modern polyfills from JSPM.

Here are the modules that are supported in modern-node-polyfills.

Example

import { polyfillPath } from "modern-node-polyfills";

console.log(await polyfillPath("fs")) 
// /home/bagher/project/@jspm/core/nodelibs/browser/fs.js

polyfillPath

This function returns the path of the requested module.

await polyfillPath("fs");
await polyfillPath("node:fs") // Modules can have the `node` prefix

polyfillContent

It returns the bundled content of a specific node module instead of a path.

console.log(await polyfillContent("fs"));
// the bundled source of `fs`

inject

This function tries to do the work of @rollup/plugin-inject plugin! but it also adds a new option called expressions which is for replacing javascript expressions like __filename.

console.log(await inject("console.log(__filename);", {
  // replaces every global __filename with "/"
  expressions: { __filename: "/" },
  modules: {
    // replaces every global `Buffer` with the imported `Buffer` from the polyfill buffer
    Buffer: [await polyfillPath("buffer"), "Buffer"],
  }
}))
// logs `console.log("/")`

polyfillGlobals

A way to polyfill all global node expressions, in this case, process, Buffer, global, setImmediate, clearImmediate, __dirname and __filename. It's possible to customize the __filename and __dirname values in the second argument of this function.

console.log(await polyfillGlobals(`
    console.log(global);
    console.log(process);
    console.log(Buffer);
    console.log(setImmediate);
    console.log(clearImmediate);
`))
// shows the polyfilled content

Contribution

Feel free to let me know what you need for this package or what issue you have, I'd be happy!