UNPKG

@atlassian/webresource-vite-plugin

Version:

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

92 lines 4.29 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; const node_path_1 = __importDefault(require("node:path")); const pretty_data_1 = require("pretty-data"); const generator_1 = require("./association/generator"); const options_1 = require("./helpers/options"); const generator_2 = require("./web-resource/generator"); const defaultResourceParams = new Map().set('svg', [ { name: 'content-type', value: 'image/svg+xml', }, ]); const defaultOptions = { pluginKey: '${atlassian.plugin.key}', xmlDescriptors: 'META-INF/plugin-descriptor/wrm-vite-modules.xml', resourceParamMap: defaultResourceParams, prettyPrint: false, }; const ASSOCIATIONS_PATH_IN_BUNDLE = 'META-INF/fe-manifest-associations'; function webresourcePlugin(options = {}) { const pluginOptions = Object.assign({}, defaultOptions, options); const { pluginKey, xmlDescriptors } = pluginOptions; pluginOptions.resourceParamMap = (0, options_1.ensureResourceParamsAreUnique)((0, options_1.toMap)(pluginOptions.resourceParamMap)); const xmlDescriptorFilepath = node_path_1.default.relative('.', xmlDescriptors); const resolveLocalDep = (dep) => `${pluginKey}:${dep}`; return { name: 'webresource', generateBundle(_, bundle) { // generate WRM metadata used to link bundles together in XML const wrmMetadata = {}; for (const [filename, info] of Object.entries(bundle)) { const key = ('isEntry' in info && info.isEntry ? 'entry_' : 'split_') + info.fileName; wrmMetadata[filename] = { key, }; } const webResources = []; const webResourcesAssets = []; for (const [filename, metadata] of Object.entries(bundle)) { if (!('imports' in metadata)) { // CSS, Images, txt, etc... webResourcesAssets.push({ name: metadata.fileName, location: metadata.fileName }); continue; } const dependencies = metadata.imports.map((i) => resolveLocalDep(wrmMetadata[i].key)); const resources = [{ name: metadata.fileName, location: metadata.fileName }]; if (metadata.viteMetadata?.importedAssets) { metadata.viteMetadata.importedAssets.forEach((asset) => resources.push({ name: asset, location: asset })); } if (metadata.viteMetadata?.importedCss) { metadata.viteMetadata.importedCss.forEach((asset) => resources.push({ name: asset, location: asset })); } webResources.push({ key: wrmMetadata[filename].key, dependencies, resources, }); } if (webResourcesAssets.length) { webResources.push({ // TODO hash? key: 'assets', dependencies: [], resources: webResourcesAssets, }); } this.emitFile({ type: 'asset', name: 'wrm-module-definitions', fileName: xmlDescriptorFilepath, source: pluginOptions.prettyPrint ? pretty_data_1.pd.xml((0, generator_2.generateWebResourcesXml)(pluginOptions, webResources)) : (0, generator_2.generateWebResourcesXml)(pluginOptions, webResources), }); if (pluginOptions.packageName) { const associationsFilepath = node_path_1.default.relative('.', ASSOCIATIONS_PATH_IN_BUNDLE); const fileName = node_path_1.default.join(associationsFilepath, `${pluginKey}-vite.intermediary.json`); this.emitFile({ type: 'asset', name: 'wrm-associations-definitions', fileName, source: (0, generator_1.generateAssociationsReport)(pluginOptions, webResources), }); } }, }; } module.exports = webresourcePlugin; //# sourceMappingURL=index.js.map