UNPKG

2.68 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.ModuleDependenciesPlugin = void 0;
4const BaseIncludePlugin_1 = require("./BaseIncludePlugin");
5const path = require("path");
6const TAP_NAME = "Aurelia:ModuleDependencies";
7;
8class ModuleDependenciesPlugin extends BaseIncludePlugin_1.BaseIncludePlugin {
9 /**
10 * Each hash member is a module name, for which additional module names (or options) are added as dependencies.
11 */
12 constructor(hash) {
13 super();
14 this.root = path.resolve();
15 for (let module in hash) {
16 let deps = hash[module];
17 if (!Array.isArray(deps))
18 deps = [deps];
19 // For convenience we accept null or undefined entries in the input array.
20 // This is for example used by AureliaPlugin to pass the aurelia-app module,
21 // which could be undefined.
22 deps = deps.filter(x => !!x);
23 if (deps.length === 0)
24 delete hash[module];
25 else
26 hash[module] = deps;
27 }
28 this.hash = hash;
29 }
30 apply(compiler) {
31 const hashKeys = Object.getOwnPropertyNames(this.hash);
32 if (hashKeys.length === 0)
33 return;
34 compiler.hooks.beforeCompile.tapPromise(TAP_NAME, () => {
35 // Map the modules passed in ctor to actual resources (files) so that we can
36 // recognize them no matter what the rawRequest was (loaders, relative paths, etc.)
37 this.modules = {};
38 const resolver = compiler.resolverFactory.get("normal", {});
39 return Promise.all(hashKeys.map(module => new Promise(resolve => {
40 resolver.resolve({}, this.root, module, {}, (err, resource) => {
41 if (err) {
42 console.log('error resolving', module);
43 console.log(err.message);
44 resolve(undefined);
45 return;
46 }
47 this.modules[resource] = this.hash[module];
48 resolve(undefined);
49 });
50 }))).then(() => { });
51 });
52 super.apply(compiler);
53 }
54 parser(compilation, parser, addDependency) {
55 parser.hooks.program.tap(TAP_NAME, () => {
56 // We try to match the resource, or the initial module request.
57 const deps = this.modules[parser.state.module.resource];
58 if (deps)
59 deps.forEach(addDependency);
60 });
61 }
62}
63exports.ModuleDependenciesPlugin = ModuleDependenciesPlugin;