UNPKG

atlassian-webresource-webpack-plugin

Version:

Auto-generates web-resource definitions from your webpacked code, for usage in an Atlassian product or plugin.

115 lines 5.14 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.extractLibraryDetailsFromWebpackConfig = exports.isSingleRuntime = exports.isRunningInProductionMode = exports.getDependenciesForChunks = exports.getExternalResourcesForChunk = exports.getChunkModules = exports.getAllAsyncChunks = void 0; const flatMap_1 = __importDefault(require("lodash/flatMap")); const uniq_1 = __importDefault(require("lodash/uniq")); const ProvidedExternalDependencyModule_1 = __importDefault(require("./webpack-modules/ProvidedExternalDependencyModule")); const WrmDependencyModule_1 = __importDefault(require("./webpack-modules/WrmDependencyModule")); const WrmResourceModule_1 = __importDefault(require("./webpack-modules/WrmResourceModule")); function isWrmResourceModule(m) { return m instanceof WrmResourceModule_1.default; } function isProvidedDependencyOrWrmDependency(m) { return m instanceof ProvidedExternalDependencyModule_1.default || m instanceof WrmDependencyModule_1.default; } const _getExternalResourceModules = (compilation, chunk) => { return (0, exports.getChunkModules)(compilation, chunk) .filter(isWrmResourceModule) .map((m) => m.getResource()); }; const _getExternalDependencyModules = (compilation, chunk) => { return (0, exports.getChunkModules)(compilation, chunk) .filter(isProvidedDependencyOrWrmDependency) .sort((a, b) => { return ( // eslint-disable-next-line @typescript-eslint/no-var-requires require('webpack/lib/util/comparators.js').compareModulesByPreOrderIndexOrIdentifier(compilation.moduleGraph)(a, b)); }) .map((m) => m.getDependency()); }; const getAllAsyncChunks = (entryPoints) => { const seenChunkGroups = new Set(); const recursivelyGetAllAsyncChunks = (chunkGroups) => { const unseen = chunkGroups.filter((cg) => { // circuit breaker // dont use a chunk group more than once const alreadySeen = seenChunkGroups.has(cg); seenChunkGroups.add(cg); return !alreadySeen; }); return (0, flatMap_1.default)(unseen, (cg) => [...cg.chunks, ...recursivelyGetAllAsyncChunks(cg.getChildren())]); }; // get all async chunks "deep" const allAsyncChunks = (0, flatMap_1.default)(entryPoints, (e) => recursivelyGetAllAsyncChunks(e.getChildren())); // dedupe return (0, uniq_1.default)(allAsyncChunks); }; exports.getAllAsyncChunks = getAllAsyncChunks; const getChunkModules = (compilation, chunk) => { return compilation.chunkGraph.getChunkModules(chunk); }; exports.getChunkModules = getChunkModules; const getExternalResourcesForChunk = (compilation, chunk) => { const externalResources = new Set(); for (const dep of _getExternalResourceModules(compilation, chunk)) { externalResources.add(dep); } return Array.from(externalResources); }; exports.getExternalResourcesForChunk = getExternalResourcesForChunk; const getDependenciesForChunks = (compilation, val) => { const chunks = Array.isArray(val) ? val : [val]; const externalDeps = new Set(); for (const chunk of chunks) { for (const dep of _getExternalDependencyModules(compilation, chunk)) { externalDeps.add(dep); } // TODO: figure out how to pass this "properly" as a module // @ts-expect-error See WrmPlugin.ts where this is set. if (chunk.needsWrmRequire) { externalDeps.add('com.atlassian.plugins.atlassian-plugins-webresource-rest:web-resource-manager'); } } return Array.from(externalDeps); }; exports.getDependenciesForChunks = getDependenciesForChunks; const isRunningInProductionMode = (compiler) => { const { mode } = compiler.options; return mode === 'production' || (mode === 'none' && process.env.NODE_ENV === 'production'); }; exports.isRunningInProductionMode = isRunningInProductionMode; const isSingleRuntime = (compiler) => { const { options } = compiler; const runtimeChunkCfg = options.optimization && options.optimization.runtimeChunk; if (runtimeChunkCfg) { if (runtimeChunkCfg === 'single') { return true; } const { name } = runtimeChunkCfg; if (typeof name === 'string') { return true; } if (typeof name === 'function') { const resultA = name({ name: 'foo' }); const resultB = name({ name: 'bar' }); return resultA === resultB; } } return false; }; exports.isSingleRuntime = isSingleRuntime; const extractLibraryDetailsFromWebpackConfig = (compiler) => { const { library } = compiler.options.output; if (!library) { return { target: compiler.options.externalsType, name: undefined }; } return { target: library.type, name: library.name, }; }; exports.extractLibraryDetailsFromWebpackConfig = extractLibraryDetailsFromWebpackConfig; //# sourceMappingURL=WebpackHelpers.js.map