123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- 'use strict';
- function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
- const inject = _interopDefault(require('rollup-plugin-inject'));
- const path = require('path');
- const crypto = require('crypto');
- const EMPTY_PATH = require.resolve('../polyfills/empty.js');
- function builtinsResolver(opts) {
- const libs = new Map();
- libs.set('process', require.resolve('../polyfills/process-es6'));
- libs.set('buffer', require.resolve('../polyfills/buffer-es6'));
- libs.set('util', require.resolve('../polyfills/util'));
- libs.set('sys', libs.get('util'));
- libs.set('events', require.resolve('../polyfills/events'));
- libs.set('stream', require.resolve('../polyfills/stream'));
- libs.set('path', require.resolve('../polyfills/path'));
- libs.set('querystring', require.resolve('../polyfills/qs'));
- libs.set('punycode', require.resolve('../polyfills/punycode'));
- libs.set('url', require.resolve('../polyfills/url'));
- libs.set('string_decoder', require.resolve('../polyfills/string-decoder'));
- libs.set('http', require.resolve('../polyfills/http'));
- libs.set('https', require.resolve('../polyfills/http'));
- libs.set('os', require.resolve('../polyfills/os'));
- libs.set('assert', require.resolve('../polyfills/assert'));
- libs.set('constants', require.resolve('../polyfills/constants'));
- libs.set('_stream_duplex', require.resolve('../polyfills/readable-stream/duplex'));
- libs.set('_stream_passthrough', require.resolve('../polyfills/readable-stream/passthrough'));
- libs.set('_stream_readable', require.resolve('../polyfills/readable-stream/readable'));
- libs.set('_stream_writable', require.resolve('../polyfills/readable-stream/writable'));
- libs.set('_stream_transform', require.resolve('../polyfills/readable-stream/transform'));
- libs.set('timers', require.resolve('../polyfills/timers'));
- libs.set('console', require.resolve('../polyfills/console'));
- libs.set('vm', require.resolve('../polyfills/vm'));
- libs.set('zlib', require.resolve('../polyfills/zlib'));
- libs.set('tty', require.resolve('../polyfills/tty'));
- libs.set('domain', require.resolve('../polyfills/domain'));
- // not shimmed
- libs.set('dns', EMPTY_PATH);
- libs.set('dgram', EMPTY_PATH);
- libs.set('child_process', EMPTY_PATH);
- libs.set('cluster', EMPTY_PATH);
- libs.set('module', EMPTY_PATH);
- libs.set('net', EMPTY_PATH);
- libs.set('readline', EMPTY_PATH);
- libs.set('repl', EMPTY_PATH);
- libs.set('tls', EMPTY_PATH);
- libs.set('fs', EMPTY_PATH);
- libs.set('crypto', EMPTY_PATH);
- if (opts.fs) {
- libs.set('fs', require.resolve('../polyfills/browserify-fs'));
- }
- if (opts.crypto) {
- libs.set('crypto', require.resolve('../polyfills/crypto-browserify'));
- }
- return (importee) => {
- if (importee && importee.slice(-1) === '/') {
- importee === importee.slice(0, -1);
- }
- if (libs.has(importee)) {
- return { id: libs.get(importee), moduleSideEffects: false };
- }
- return null;
- };
- }
- // @ts-ignore
- function index (opts = {}) {
- const injectPlugin = inject({
- include: opts.include === undefined ? 'node_modules/**/*.js' : undefined,
- exclude: opts.exclude,
- sourceMap: opts.sourceMap,
- modules: {
- 'process': 'process',
- 'Buffer': ['buffer', 'Buffer'],
- 'global': GLOBAL_PATH,
- '__filename': FILENAME_PATH,
- '__dirname': DIRNAME_PATH,
- }
- });
- const basedir = opts.baseDir || '/';
- const dirs = new Map();
- const resolver = builtinsResolver(opts);
- return {
- name: 'node-polyfills',
- resolveId(importee, importer) {
- if (importee === DIRNAME_PATH) {
- const id = getRandomId();
- dirs.set(id, path.dirname('/' + path.relative(basedir, importer)));
- return { id, moduleSideEffects: false };
- }
- if (importee === FILENAME_PATH) {
- const id = getRandomId();
- dirs.set(id, path.dirname('/' + path.relative(basedir, importer)));
- return { id, moduleSideEffects: false };
- }
- return resolver(importee);
- },
- load(id) {
- if (dirs.has(id)) {
- return `export default '${dirs.get(id)}'`;
- }
- },
- transform(code, id) {
- return injectPlugin.transform.call(this, code, id);
- }
- };
- }
- function getRandomId() {
- return crypto.randomBytes(15).toString('hex');
- }
- const GLOBAL_PATH = require.resolve('../polyfills/global.js');
- const DIRNAME_PATH = '\0node-polyfills:dirname';
- const FILENAME_PATH = '\0node-polyfills:filename';
- module.exports = index;
|