1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.DistPlugin = void 0;
|
4 | const path = require("path");
|
5 | class 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 |
|
32 |
|
33 |
|
34 |
|
35 |
|
36 | function resolveHandlerDoResolve(request, resolveContext, cb) {
|
37 | let $request = Object.assign({}, request);
|
38 | let innerRequest = $request.request;
|
39 | if (!innerRequest || 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 | }
|
66 | exports.DistPlugin = DistPlugin;
|
67 | ;
|