1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.ModuleDependenciesPlugin = void 0;
|
4 | const BaseIncludePlugin_1 = require("./BaseIncludePlugin");
|
5 | const path = require("path");
|
6 | const TAP_NAME = "Aurelia:ModuleDependencies";
|
7 | ;
|
8 | class ModuleDependenciesPlugin extends BaseIncludePlugin_1.BaseIncludePlugin {
|
9 | |
10 |
|
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 |
|
20 |
|
21 |
|
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 |
|
36 |
|
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 |
|
57 | const deps = this.modules[parser.state.module.resource];
|
58 | if (deps)
|
59 | deps.forEach(addDependency);
|
60 | });
|
61 | }
|
62 | }
|
63 | exports.ModuleDependenciesPlugin = ModuleDependenciesPlugin;
|