1 | "use strict";
|
2 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3 | return new (P || (P = Promise))(function (resolve, reject) {
|
4 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
5 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
6 | function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
7 | step((generator = generator.apply(thisArg, _arguments || [])).next());
|
8 | });
|
9 | };
|
10 | var __generator = (this && this.__generator) || function (thisArg, body) {
|
11 | var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
12 | return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
13 | function verb(n) { return function (v) { return step([n, v]); }; }
|
14 | function step(op) {
|
15 | if (f) throw new TypeError("Generator is already executing.");
|
16 | while (_) try {
|
17 | if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t;
|
18 | if (y = 0, t) op = [0, t.value];
|
19 | switch (op[0]) {
|
20 | case 0: case 1: t = op; break;
|
21 | case 4: _.label++; return { value: op[1], done: false };
|
22 | case 5: _.label++; y = op[1]; op = [0]; continue;
|
23 | case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
24 | default:
|
25 | if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
26 | if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
27 | if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
28 | if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
29 | if (t[2]) _.ops.pop();
|
30 | _.trys.pop(); continue;
|
31 | }
|
32 | op = body.call(thisArg, _);
|
33 | } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
34 | if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
35 | }
|
36 | };
|
37 | Object.defineProperty(exports, "__esModule", { value: true });
|
38 | var path = require("path");
|
39 | var camelcase = require("camelcase");
|
40 | var utils_1 = require("./utils");
|
41 | var keys = Object.keys;
|
42 | function getExternalModuleNames(fileList, projectPath, predefined) {
|
43 | if (predefined === void 0) { predefined = {}; }
|
44 | return __awaiter(this, void 0, void 0, function () {
|
45 | var externalModuleNames, nodeModulePaths, potentialExternalModules, uniqueModuleNames, _i, uniqueModuleNames_1, moduleName;
|
46 | return __generator(this, function (_a) {
|
47 | switch (_a.label) {
|
48 | case 0:
|
49 | externalModuleNames = {};
|
50 | return [4 , resolveNodeModulePaths(projectPath)];
|
51 | case 1:
|
52 | nodeModulePaths = _a.sent();
|
53 | potentialExternalModules = fileList.reduce(function (allModuleNames, aFile) {
|
54 | return utils_1.uniqueArray(allModuleNames, aFile.getExternalModules());
|
55 | }, []);
|
56 | uniqueModuleNames = utils_1.uniqueArray(potentialExternalModules, keys(predefined))
|
57 | .filter(function (moduleName) { return predefined[moduleName] !== false; });
|
58 | for (_i = 0, uniqueModuleNames_1 = uniqueModuleNames; _i < uniqueModuleNames_1.length; _i++) {
|
59 | moduleName = uniqueModuleNames_1[_i];
|
60 | if (isModuleAvailable(moduleName, nodeModulePaths)) {
|
61 | externalModuleNames[moduleName] = predefined[moduleName] || convertModuleToCommonJs(moduleName);
|
62 | }
|
63 | else {
|
64 | throw Error("Could not find module \"" + moduleName + "\". Did you install it?\nWe looked in:\n" + nodeModulePaths.join('\n'));
|
65 | }
|
66 | }
|
67 | return [2 , externalModuleNames];
|
68 | }
|
69 | });
|
70 | });
|
71 | }
|
72 | exports.getExternalModuleNames = getExternalModuleNames;
|
73 | function convertModuleToCommonJs(moduleName) {
|
74 | return moduleName
|
75 | .replace(/^@/, '')
|
76 | .split(/[\/\\]/)
|
77 | .map(function (part) { return camelcase(part); })
|
78 | .join('.')
|
79 | .replace(/angular/i, 'ng');
|
80 | }
|
81 | exports.convertModuleToCommonJs = convertModuleToCommonJs;
|
82 | function nodeModuleExist(absPath) {
|
83 | return __awaiter(this, void 0, void 0, function () {
|
84 | var nodeModulePath;
|
85 | return __generator(this, function (_a) {
|
86 | nodeModulePath = path.resolve(absPath, 'node_modules');
|
87 | if (utils_1.isDirectory(nodeModulePath)) {
|
88 | return [2 , nodeModulePath];
|
89 | }
|
90 | return [2 , false];
|
91 | });
|
92 | });
|
93 | }
|
94 | exports.nodeModuleExist = nodeModuleExist;
|
95 | function resolveNodeModulePaths(searchInPath) {
|
96 | return __awaiter(this, void 0, void 0, function () {
|
97 | var nodeModulePaths, currentPathNodeModule, parentDir, _a, _b;
|
98 | return __generator(this, function (_c) {
|
99 | switch (_c.label) {
|
100 | case 0:
|
101 | nodeModulePaths = [];
|
102 | return [4 , nodeModuleExist(searchInPath)];
|
103 | case 1:
|
104 | currentPathNodeModule = _c.sent();
|
105 | if (currentPathNodeModule !== false) {
|
106 | nodeModulePaths = utils_1.uniqueArray(nodeModulePaths, [currentPathNodeModule]);
|
107 | }
|
108 | parentDir = path.dirname(searchInPath);
|
109 | if (!(parentDir !== '/')) return [3 , 3];
|
110 | _a = utils_1.uniqueArray;
|
111 | _b = [nodeModulePaths];
|
112 | return [4 , resolveNodeModulePaths(parentDir)];
|
113 | case 2:
|
114 | nodeModulePaths = _a.apply(void 0, _b.concat([_c.sent()]));
|
115 | _c.label = 3;
|
116 | case 3: return [2 , nodeModulePaths];
|
117 | }
|
118 | });
|
119 | });
|
120 | }
|
121 | exports.resolveNodeModulePaths = resolveNodeModulePaths;
|
122 | function isModuleAvailable(moduleName, nodeModulePaths) {
|
123 | return __awaiter(this, void 0, void 0, function () {
|
124 | return __generator(this, function (_a) {
|
125 | return [2 , nodeModulePaths.some(function (aPath) { return utils_1.isFile(path.resolve(aPath, moduleName, 'package.json')); })];
|
126 | });
|
127 | });
|
128 | }
|
129 | exports.isModuleAvailable = isModuleAvailable;
|
130 | function isExternalModule(externalModules, idOrPathToTest) {
|
131 | return keys(externalModules).some(function (moduleName) {
|
132 | var moduleNamePattern = '^' + moduleName.replace(/[.?*+^$[\]\\(){}|-]/g, '\\$&');
|
133 | return (new RegExp(moduleNamePattern)).test(idOrPathToTest);
|
134 | });
|
135 | }
|
136 | exports.isExternalModule = isExternalModule;
|