UNPKG

3.13 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.DistPlugin = void 0;
4const path = require("path");
5class DistPlugin {
6 constructor(dist) {
7 this.rawDist = dist;
8 this.dist = `/dist/${dist}/`;
9 }
10 apply(resolver) {
11 if (!this.rawDist)
12 return;
13 let dist = this.dist;
14 let HookNames = {
15 resolve: "resolve",
16 internalResolve: "internal-resolve",
17 };
18 let sourceHookName = HookNames.resolve;
19 let targetHookName = HookNames.internalResolve;
20 let tapName = "Aurelia:DistPlugin";
21 resolver.ensureHook(sourceHookName)
22 .tapAsync(tapName, resolveHandlerDoResolve);
23 function determineRewrittenPath(filePath, resolveContext) {
24 filePath = filePath || "";
25 let parts = filePath.split("?");
26 let innerRequest = path.normalize(parts[0]);
27 parts[0] = path.normalize(innerRequest.replace(/[\/\\]dist[\/\\][^/\\]+[\/\\]?/i, dist)).replace(/[\/\\]$/, '');
28 let rewrittenPath = parts.join("?");
29 return rewrittenPath;
30 }
31 // If the request contains /dist/xxx/, try /dist/{rawDist}/
32 // ----
33 // this involves two steps:
34 // - first always resolve the request to find the absolute path
35 // - 2nd tries to swap /dist/xxxx/ with /dist/{rawDist}/ if possible
36 function resolveHandlerDoResolve(request, resolveContext, cb) {
37 let $request = Object.assign({}, request);
38 let innerRequest = $request.request;
39 if (!innerRequest || /* shouldn't interfere relative paths */ innerRequest.startsWith('.'))
40 return cb();
41 let rewrittenPath = determineRewrittenPath(innerRequest, resolveContext);
42 let newRequest = { path: $request.path, request: rewrittenPath, fullySpecified: false };
43 let tobeNotifiedHook = resolver.ensureHook(targetHookName);
44 resolver.doResolve(tobeNotifiedHook, newRequest, "try alternate dist: " + dist + " in only request", resolveContext, (err, result) => {
45 if (err)
46 return cb();
47 if (typeof (result === null || result === void 0 ? void 0 : result.path) !== 'string') {
48 return cb();
49 }
50 let rewrittenPath = determineRewrittenPath(result.path, resolveContext);
51 if (rewrittenPath === result.path) {
52 return cb(null, result);
53 }
54 newRequest = { path: $request.path, request: rewrittenPath, fullySpecified: false };
55 resolver.doResolve(tobeNotifiedHook, newRequest, "try alternate dist " + dist + " in full path", resolveContext, (err, result) => {
56 if (err)
57 return cb();
58 if (result)
59 return cb(null, result);
60 return cb();
61 });
62 });
63 }
64 }
65}
66exports.DistPlugin = DistPlugin;
67;