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
JavaScript
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
;