oak-cli/plugins/NodePolyfillWebpackPlugin.js

93 lines
3.4 KiB
JavaScript

'use strict';
const { ProvidePlugin } = require('webpack');
const filterObject = require('filter-obj');
function createAliasFilter({ includeAliases, excludeAliases }) {
if (includeAliases.length > 0) {
return (object) =>
filterObject(object, (key) => includeAliases.includes(key));
}
return (object) =>
filterObject(object, (key) => !excludeAliases.includes(key));
}
module.exports = class NodePolyfillPlugin {
constructor(options = {}) {
this.options = {
excludeAliases: [],
includeAliases: [],
...options,
};
if (
this.options.includeAliases.length > 0 &&
this.options.excludeAliases.length > 0
) {
throw new Error(
'excludeAliases and includeAliases are mutually exclusive'
);
}
}
apply(compiler) {
const filter = createAliasFilter(this.options);
compiler.options.plugins.push(
new ProvidePlugin(
filter({
Buffer: [require.resolve('buffer/'), 'Buffer'],
console: require.resolve('console-browserify'),
process: require.resolve('process/browser'),
})
)
);
compiler.options.resolve.fallback = {
...filter({
assert: require.resolve('assert/'),
buffer: require.resolve('buffer/'),
console: require.resolve('console-browserify'),
constants: require.resolve('constants-browserify'),
crypto: require.resolve('crypto-browserify'),
domain: require.resolve('domain-browser'),
events: require.resolve('events/'),
http: require.resolve('stream-http'),
https: require.resolve('https-browserify'),
os: require.resolve('os-browserify/browser'),
path: require.resolve('path-browserify'),
punycode: require.resolve('punycode/'),
process: require.resolve('process/browser'),
querystring: require.resolve('querystring-es3'),
stream: require.resolve('stream-browserify'),
/* eslint-disable camelcase */
_stream_duplex: require.resolve(
'readable-stream/lib/_stream_duplex'
),
_stream_passthrough: require.resolve(
'readable-stream/lib/_stream_passthrough'
),
_stream_readable: require.resolve(
'readable-stream/lib/_stream_readable'
),
_stream_transform: require.resolve(
'readable-stream/lib/_stream_transform'
),
_stream_writable: require.resolve(
'readable-stream/lib/_stream_writable'
),
string_decoder: require.resolve('string_decoder/'),
/* eslint-enable camelcase */
sys: require.resolve('util/'),
timers: require.resolve('timers-browserify'),
tty: require.resolve('tty-browserify'),
url: require.resolve('url/'),
util: require.resolve('util/'),
vm: require.resolve('vm-browserify'),
zlib: require.resolve('browserify-zlib'),
}),
...compiler.options.resolve.fallback,
};
}
};