| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var path_1 = require("path");
- var Constants = require("../util/constants");
- var helpers_1 = require("../util/helpers");
- var logger_1 = require("../logger/logger");
- var hybrid_file_system_factory_1 = require("../util/hybrid-file-system-factory");
- var watch_memory_system_1 = require("./watch-memory-system");
- var ContextElementDependency = require('webpack/lib/dependencies/ContextElementDependency');
- var IonicEnvironmentPlugin = (function () {
- function IonicEnvironmentPlugin(context, writeToDisk) {
- this.context = context;
- this.writeToDisk = writeToDisk;
- }
- IonicEnvironmentPlugin.prototype.apply = function (compiler) {
- var _this = this;
- compiler.plugin('context-module-factory', function (contextModuleFactory) {
- contextModuleFactory.plugin('after-resolve', function (result, callback) {
- if (!result) {
- return callback();
- }
- var deepLinkConfig = helpers_1.getParsedDeepLinkConfig();
- var webpackDeepLinkModuleDictionary = convertDeepLinkConfigToWebpackFormat(deepLinkConfig);
- var ionicAngularDir = helpers_1.getStringPropertyValue(Constants.ENV_VAR_IONIC_ANGULAR_DIR);
- var ngModuleLoaderDirectory = path_1.join(ionicAngularDir, 'util');
- if (!result.resource.endsWith(ngModuleLoaderDirectory)) {
- return callback(null, result);
- }
- result.resource = _this.context.srcDir;
- result.recursive = true;
- result.dependencies.forEach(function (dependency) { return dependency.critical = false; });
- result.resolveDependencies = function (p1, p2, p3, p4, cb) {
- var dependencies = Object.keys(webpackDeepLinkModuleDictionary)
- .map(function (key) {
- var value = webpackDeepLinkModuleDictionary[key];
- if (value) {
- return new ContextElementDependency(value, key);
- }
- return null;
- }).filter(function (dependency) { return !!dependency; });
- cb(null, dependencies);
- };
- return callback(null, result);
- });
- });
- compiler.plugin('environment', function (otherCompiler, callback) {
- logger_1.Logger.debug('[IonicEnvironmentPlugin] apply: creating environment plugin');
- var hybridFileSystem = hybrid_file_system_factory_1.getInstance(_this.writeToDisk);
- hybridFileSystem.setInputFileSystem(compiler.inputFileSystem);
- hybridFileSystem.setOutputFileSystem(compiler.outputFileSystem);
- compiler.inputFileSystem = hybridFileSystem;
- compiler.outputFileSystem = hybridFileSystem;
- compiler.watchFileSystem = new watch_memory_system_1.WatchMemorySystem(_this.context.fileCache, _this.context.srcDir);
- // do a bunch of webpack specific stuff here, so cast to an any
- // populate the content of the file system with any virtual files
- // inspired by populateWebpackResolver method in Angular's webpack plugin
- var webpackFileSystem = hybridFileSystem;
- var fileStatsDictionary = hybridFileSystem.getAllFileStats();
- var dirStatsDictionary = hybridFileSystem.getAllDirStats();
- _this.initializeWebpackFileSystemCaches(webpackFileSystem);
- for (var _i = 0, _a = Object.keys(fileStatsDictionary); _i < _a.length; _i++) {
- var filePath = _a[_i];
- var stats = fileStatsDictionary[filePath];
- webpackFileSystem._statStorage.data[filePath] = [null, stats];
- webpackFileSystem._readFileStorage.data[filePath] = [null, stats.content];
- }
- for (var _b = 0, _c = Object.keys(dirStatsDictionary); _b < _c.length; _b++) {
- var dirPath = _c[_b];
- var stats = dirStatsDictionary[dirPath];
- var fileNames = hybridFileSystem.getFileNamesInDirectory(dirPath);
- var dirNames = hybridFileSystem.getSubDirs(dirPath);
- webpackFileSystem._statStorage.data[dirPath] = [null, stats];
- webpackFileSystem._readdirStorage.data[dirPath] = [null, fileNames.concat(dirNames)];
- }
- });
- };
- IonicEnvironmentPlugin.prototype.initializeWebpackFileSystemCaches = function (webpackFileSystem) {
- if (!webpackFileSystem._statStorage) {
- webpackFileSystem._statStorage = {};
- }
- if (!webpackFileSystem._statStorage.data) {
- webpackFileSystem._statStorage.data = [];
- }
- if (!webpackFileSystem._readFileStorage) {
- webpackFileSystem._readFileStorage = {};
- }
- if (!webpackFileSystem._readFileStorage.data) {
- webpackFileSystem._readFileStorage.data = [];
- }
- if (!webpackFileSystem._readdirStorage) {
- webpackFileSystem._readdirStorage = {};
- }
- if (!webpackFileSystem._readdirStorage.data) {
- webpackFileSystem._readdirStorage.data = [];
- }
- };
- return IonicEnvironmentPlugin;
- }());
- exports.IonicEnvironmentPlugin = IonicEnvironmentPlugin;
- function convertDeepLinkConfigToWebpackFormat(parsedDeepLinkConfigs) {
- var dictionary = {};
- if (!parsedDeepLinkConfigs) {
- parsedDeepLinkConfigs = new Map();
- }
- parsedDeepLinkConfigs.forEach(function (parsedDeepLinkConfig) {
- if (parsedDeepLinkConfig.userlandModulePath && parsedDeepLinkConfig.absolutePath) {
- dictionary[parsedDeepLinkConfig.userlandModulePath] = parsedDeepLinkConfig.absolutePath;
- }
- });
- return dictionary;
- }
- exports.convertDeepLinkConfigToWebpackFormat = convertDeepLinkConfigToWebpackFormat;
|