import-maps-webpack-plugin
Version:
A plugin for providing static import maps support to Webpack.
29 lines • 2.61 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ImportMapsWebpackPlugin = void 0;
var webpack_virtual_modules_1 = __importDefault(require("webpack-virtual-modules"));
var helpers_1 = require("./helpers");
var ImportMapsWebpackPlugin = /** @class */ (function () {
function ImportMapsWebpackPlugin() {
}
ImportMapsWebpackPlugin.prototype.apply = function (compiler) {
var root = process.cwd();
var dir = helpers_1.getPackageDir(root);
var map = helpers_1.resolveImportMap(dir);
var keys = Object.keys((map && map.imports) || {});
var localImports = keys.map(function (id) { return "{\n id: " + helpers_1.getHashFor(root, dir, map.imports[id]) + ",\n ref: " + JSON.stringify(id) + ",\n load: () => " + helpers_1.getImportFor(root, dir, map.imports[id]) + ",\n}"; });
var plugin = new webpack_virtual_modules_1.default(keys.reduce(function (prev, id) {
prev[id] = "\n module.exports = require('importmap').resolve(" + JSON.stringify(id) + ");\n ";
return prev;
}, {
'node_modules/importmap.js': "\nif (!window.__importMaps) {\n const imports = [];\n window.__importMaps = true;\n window.__resolveImport = function (id) {\n for (const item of imports) {\n if (item.id === id) {\n return item;\n }\n }\n return {};\n };\n window.__registerImports = function (newImports) {\n newImports.forEach(i => {\n if (!imports.some(j => j.id === i.id)) {\n const item = {\n id: i.id,\n data: undefined,\n };\n item.loading = i.load().then(data => (item.data = data), err => console.error(err));\n imports.push(item);\n }\n });\n };\n}\nconst localImports = [" + localImports.join(',') + "];\nwindow.__registerImports(localImports);\nfunction getId(ref) {\n const [id] = localImports.filter(i => i.ref === ref).map(i => i.id);\n return id;\n}\nexports.ready = function (ref) {\n const refs = Array.isArray(ref) ? ref : (ref ? [ref] : localImports.map(i => i.ref));\n return Promise.all(refs.map(ref => window.__resolveImport(getId(ref)).loading));\n};\nexports.resolve = function (ref) {\n return window.__resolveImport(getId(ref)).data;\n}\n",
}));
plugin.apply(compiler);
};
return ImportMapsWebpackPlugin;
}());
exports.ImportMapsWebpackPlugin = ImportMapsWebpackPlugin;
//# sourceMappingURL=index.js.map