UNPKG

aurelia-webpack-plugin

Version:

A plugin for webpack that enables bundling Aurelia applications.

68 lines (67 loc) 3.13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DistPlugin = void 0; const path = require("path"); class DistPlugin { constructor(dist) { this.rawDist = dist; this.dist = `/dist/${dist}/`; } apply(resolver) { if (!this.rawDist) return; let dist = this.dist; let HookNames = { resolve: "resolve", internalResolve: "internal-resolve", }; let sourceHookName = HookNames.resolve; let targetHookName = HookNames.internalResolve; let tapName = "Aurelia:DistPlugin"; resolver.ensureHook(sourceHookName) .tapAsync(tapName, resolveHandlerDoResolve); function determineRewrittenPath(filePath, resolveContext) { filePath = filePath || ""; let parts = filePath.split("?"); let innerRequest = path.normalize(parts[0]); parts[0] = path.normalize(innerRequest.replace(/[\/\\]dist[\/\\][^/\\]+[\/\\]?/i, dist)).replace(/[\/\\]$/, ''); let rewrittenPath = parts.join("?"); return rewrittenPath; } // If the request contains /dist/xxx/, try /dist/{rawDist}/ // ---- // this involves two steps: // - first always resolve the request to find the absolute path // - 2nd tries to swap /dist/xxxx/ with /dist/{rawDist}/ if possible function resolveHandlerDoResolve(request, resolveContext, cb) { let $request = Object.assign({}, request); let innerRequest = $request.request; if (!innerRequest || /* shouldn't interfere relative paths */ innerRequest.startsWith('.')) return cb(); let rewrittenPath = determineRewrittenPath(innerRequest, resolveContext); let newRequest = { path: $request.path, request: rewrittenPath, fullySpecified: false }; let tobeNotifiedHook = resolver.ensureHook(targetHookName); resolver.doResolve(tobeNotifiedHook, newRequest, "try alternate dist: " + dist + " in only request", resolveContext, (err, result) => { if (err) return cb(); if (typeof (result === null || result === void 0 ? void 0 : result.path) !== 'string') { return cb(); } let rewrittenPath = determineRewrittenPath(result.path, resolveContext); if (rewrittenPath === result.path) { return cb(null, result); } newRequest = { path: $request.path, request: rewrittenPath, fullySpecified: false }; resolver.doResolve(tobeNotifiedHook, newRequest, "try alternate dist " + dist + " in full path", resolveContext, (err, result) => { if (err) return cb(); if (result) return cb(null, result); return cb(); }); }); } } } exports.DistPlugin = DistPlugin; ;