UNPKG

@procore/core-scripts

Version:

A CLI to enhance your development experience

202 lines • 7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.importContainsPackage = importContainsPackage; exports.setupWebpack = setupWebpack; const tslib_1 = require("tslib"); const path = tslib_1.__importStar(require("path")); const webpack_1 = tslib_1.__importDefault(require("webpack")); const webpack_bundle_analyzer_1 = require("webpack-bundle-analyzer"); const config_1 = require("../../babel/config"); const environment_1 = require("../../environment"); function importContainsPackage(importFrom, packageName) { return RegExp(`(^${packageName}?(/|$)).*`).test(importFrom); } function getExternals(packageJson) { var _a; return Object.keys((_a = packageJson === null || packageJson === void 0 ? void 0 : packageJson.peerDependencies) !== null && _a !== void 0 ? _a : {}).map((peerDep) => // eslint-disable-next-line consistent-return (data, callback) => { var _a; // peerDependency matches the import path being requested, externalize the peerDep const request = (_a = data.request) !== null && _a !== void 0 ? _a : ''; if (importContainsPackage(request, peerDep)) { return callback(null, { amd: request, commonjs: request, commonjs2: request, }); } // continue without externalizing the import callback(); }); } function setupWebpack(config, opts) { const buildFolder = opts.workspace.resolve('dist'); const suffix = Buffer.from(opts.workspace.packageJson.name + opts.workspace.packageJson.version) .toString('base64') .slice(0, 5); const externals = getExternals(opts.workspace.packageJson); const isProduction = opts.env === 'production'; const envVariables = { NODE_ENV: opts.env, }; Object.entries({ index: 'index' }).forEach((entry) => { const name = entry[0]; const filePath = opts.workspace.resolve('src', entry[1]); config.entry(name).add(filePath); }); config.merge({ context: opts.workspace.context, devtool: isProduction ? 'source-map' : 'eval-source-map', externals, mode: opts.env, output: { filename: '[name].js', hashFunction: 'xxhash64', libraryTarget: 'umd', path: buildFolder, }, resolve: { extensions: ['.js', '.jsx', '.json', '.ts', '.tsx'], fallback: { assert: 'assert', buffer: 'buffer', console: 'console-browserify', constants: 'constants-browserify', crypto: 'crypto-browserify', domain: 'domain-browser', events: 'events', http: 'stream-http', https: 'https-browserify', os: 'os-browserify/browser', path: 'path-browserify', punycode: 'punycode', process: 'process/browser', querystring: 'querystring-es3', stream: 'stream-browserify', _stream_duplex: 'readable-stream/duplex', _stream_passthrough: 'readable-stream/passthrough', _stream_readable: 'readable-stream/readable', _stream_transform: 'readable-stream/transform', _stream_writable: 'readable-stream/writable', string_decoder: 'string_decoder', sys: 'util', timers: 'timers-browserify', tty: 'tty-browserify', url: 'url', util: 'util', vm: 'vm-browserify', zlib: 'browserify-zlib', }, }, }); config.when(Boolean(opts.analyze), () => { config.plugin('bundleAnalyzer').use(webpack_bundle_analyzer_1.BundleAnalyzerPlugin); }); config .plugin('injectEnvVariables') .use(webpack_1.default.DefinePlugin, [(0, environment_1.stringifyEnvironment)(envVariables)]); config.plugin('javaScriptSourceMap').use(webpack_1.default.SourceMapDevToolPlugin, [ { append: '\n//# sourceMappingURL=[url]', exclude: [/node_modules\/*/], filename: './[file].map', moduleFilenameTemplate: (info) => { return path .relative(buildFolder, info.absoluteResourcePath) .replace(/\\/g, '/'); }, publicPath: '/', test: /\.js$/, }, ]); config.module .rule('assets') .test(/\.(eot|svg|ttf|woff|woff2|png)$/) .use('url') .loader(require.resolve('url-loader')); config.module .rule('javascript') .test(/\.(js|mjs|jsx|ts|tsx)$/) .exclude.add(/node_modules/) .end() .use('babel') .loader(require.resolve('babel-loader')) .options((0, config_1.createConfigForLib)(opts.env)) .end(); config.module .rule('styles') .test(/\.s?css$/) .exclude.add(/node_modules/) .end() .use('style') .loader(require.resolve('style-loader')) .options({ esModule: false, }) .end() .use('css') .loader(require.resolve('css-loader')) .options({ esModule: false, modules: { localIdentName: isProduction ? `[hash:base64:5]-${suffix}` : `[local]-${suffix}`, }, }) .end() .use('sass') .loader(require.resolve('sass-loader')); config.module .rule('coreCss') .test(/@procore\/core-css.*\.css$/) .include.add(/node_modules/) .end() .use('style') .loader(require.resolve('style-loader')) .end() .use('css') .loader(require.resolve('css-loader')) .options({ modules: { localIdentName: isProduction ? `[hash:base64:5]-${suffix}` : `[local]-${suffix}`, }, }); config.module .rule('thirdPartyStyles') .test(/\.css$/) .include.add(/node_modules/) .end() .exclude.add(/core-css/) .end() .use('style') .loader('style-loader') .end() .use('css') .loader('css-loader'); config.module .rule('compiler') .test(/core-css(.*)\.scss$/) .include.add(/node_modules/) .end() .use('style') .loader(require.resolve('style-loader')) .end() .use('css') .loader(require.resolve('css-loader')) .options({ modules: { localIdentName: isProduction ? `[hash:base64:5]-${suffix}` : `[local]-${suffix}`, }, }) .end() .use('sass') .loader(require.resolve('sass-loader')); return config; } //# sourceMappingURL=setupWebpack.js.map