config.js 35KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. var path_1 = require("path");
  4. var fs_extra_1 = require("fs-extra");
  5. var logger_1 = require("../logger/logger");
  6. var helpers_1 = require("./helpers");
  7. var file_cache_1 = require("./file-cache");
  8. var Constants = require("./constants");
  9. /**
  10. * Create a context object which is used by all the build tasks.
  11. * Filling the config data uses the following hierarchy, which will
  12. * keep going down the list until it, or if it, finds data.
  13. *
  14. * 1) Get from the passed in context variable
  15. * 2) Get from the config file set using the command-line args
  16. * 3) Get from environment variable
  17. * 4) Get from package.json config property
  18. * 5) Get environment variables
  19. *
  20. * Lastly, Ionic's default configs will always fill in any data
  21. * which is missing from the user's data.
  22. */
  23. function generateContext(context) {
  24. if (!context) {
  25. context = {};
  26. }
  27. if (!context.fileCache) {
  28. context.fileCache = new file_cache_1.FileCache();
  29. }
  30. context.isProd = [
  31. context.isProd,
  32. hasArg('--prod')
  33. ].find(function (val) { return typeof val === 'boolean'; });
  34. setProcessEnvVar(Constants.ENV_VAR_IONIC_ENV, (context.isProd ? Constants.ENV_VAR_PROD : Constants.ENV_VAR_DEV));
  35. // If context is prod then the following flags must be set to true
  36. context.runAot = [
  37. context.runAot,
  38. context.isProd || hasArg('--aot'),
  39. ].find(function (val) { return typeof val === 'boolean'; });
  40. context.runMinifyJs = [
  41. context.runMinifyJs,
  42. context.isProd || hasArg('--minifyJs')
  43. ].find(function (val) { return typeof val === 'boolean'; });
  44. context.runMinifyCss = [
  45. context.runMinifyCss,
  46. context.isProd || hasArg('--minifyCss')
  47. ].find(function (val) { return typeof val === 'boolean'; });
  48. context.optimizeJs = [
  49. context.optimizeJs,
  50. context.isProd || hasArg('--optimizeJs')
  51. ].find(function (val) { return typeof val === 'boolean'; });
  52. if (typeof context.isWatch !== 'boolean') {
  53. context.isWatch = hasArg('--watch');
  54. }
  55. setProcessEnvVar(Constants.ENV_VAR_IONIC_AOT, "" + context.runAot);
  56. logger_1.Logger.debug(Constants.ENV_VAR_IONIC_AOT + " set to " + context.runAot);
  57. setProcessEnvVar(Constants.ENV_VAR_IONIC_MINIFY_JS, "" + context.runMinifyJs);
  58. logger_1.Logger.debug(Constants.ENV_VAR_IONIC_MINIFY_JS + " set to " + context.runMinifyJs);
  59. setProcessEnvVar(Constants.ENV_VAR_IONIC_MINIFY_CSS, "" + context.runMinifyCss);
  60. logger_1.Logger.debug(Constants.ENV_VAR_IONIC_MINIFY_CSS + " set to " + context.runMinifyCss);
  61. setProcessEnvVar(Constants.ENV_VAR_IONIC_OPTIMIZE_JS, "" + context.optimizeJs);
  62. logger_1.Logger.debug(Constants.ENV_VAR_IONIC_OPTIMIZE_JS + " set to " + context.optimizeJs);
  63. setProcessEnvVar(Constants.ENV_VAR_IONIC_MINIFY_JS, "" + context.runMinifyJs);
  64. logger_1.Logger.debug(Constants.ENV_VAR_IONIC_MINIFY_JS + " set to " + context.runMinifyJs);
  65. context.rootDir = path_1.resolve(context.rootDir || getConfigValue(context, '--rootDir', null, Constants.ENV_VAR_ROOT_DIR, Constants.ENV_VAR_ROOT_DIR.toLowerCase(), processCwd));
  66. setProcessEnvVar(Constants.ENV_VAR_ROOT_DIR, context.rootDir);
  67. logger_1.Logger.debug("rootDir set to " + context.rootDir);
  68. context.tmpDir = path_1.resolve(context.tmpDir || getConfigValue(context, '--tmpDir', null, Constants.ENV_VAR_TMP_DIR, Constants.ENV_VAR_TMP_DIR.toLowerCase(), path_1.join(context.rootDir, Constants.TMP_DIR)));
  69. setProcessEnvVar(Constants.ENV_VAR_TMP_DIR, context.tmpDir);
  70. logger_1.Logger.debug("tmpDir set to " + context.tmpDir);
  71. context.srcDir = path_1.resolve(context.srcDir || getConfigValue(context, '--srcDir', null, Constants.ENV_VAR_SRC_DIR, Constants.ENV_VAR_SRC_DIR.toLowerCase(), path_1.join(context.rootDir, Constants.SRC_DIR)));
  72. setProcessEnvVar(Constants.ENV_VAR_SRC_DIR, context.srcDir);
  73. logger_1.Logger.debug("srcDir set to " + context.srcDir);
  74. var deepLinksDir = path_1.resolve(getConfigValue(context, '--deepLinksDir', null, Constants.ENV_VAR_DEEPLINKS_DIR, Constants.ENV_VAR_DEEPLINKS_DIR.toLowerCase(), context.srcDir));
  75. setProcessEnvVar(Constants.ENV_VAR_DEEPLINKS_DIR, deepLinksDir);
  76. logger_1.Logger.debug("deepLinksDir set to " + deepLinksDir);
  77. context.wwwDir = path_1.resolve(context.wwwDir || getConfigValue(context, '--wwwDir', null, Constants.ENV_VAR_WWW_DIR, Constants.ENV_VAR_WWW_DIR.toLowerCase(), path_1.join(context.rootDir, Constants.WWW_DIR)));
  78. setProcessEnvVar(Constants.ENV_VAR_WWW_DIR, context.wwwDir);
  79. logger_1.Logger.debug("wwwDir set to " + context.wwwDir);
  80. context.wwwIndex = getConfigValue(context, '--wwwIndex', null, Constants.ENV_VAR_HTML_TO_SERVE, Constants.ENV_VAR_HTML_TO_SERVE.toLowerCase(), 'index.html');
  81. setProcessEnvVar(Constants.ENV_VAR_HTML_TO_SERVE, context.wwwIndex);
  82. logger_1.Logger.debug("wwwIndex set to " + context.wwwIndex);
  83. context.buildDir = path_1.resolve(context.buildDir || getConfigValue(context, '--buildDir', null, Constants.ENV_VAR_BUILD_DIR, Constants.ENV_VAR_BUILD_DIR.toLowerCase(), path_1.join(context.wwwDir, Constants.BUILD_DIR)));
  84. setProcessEnvVar(Constants.ENV_VAR_BUILD_DIR, context.buildDir);
  85. logger_1.Logger.debug("buildDir set to " + context.buildDir);
  86. var fontsDir = path_1.resolve(getConfigValue(context, '--fontsDir', null, Constants.ENV_VAR_FONTS_DIR, Constants.ENV_VAR_FONTS_DIR.toLowerCase(), path_1.join(context.wwwDir, 'assets', 'fonts')));
  87. setProcessEnvVar(Constants.ENV_VAR_FONTS_DIR, fontsDir);
  88. logger_1.Logger.debug("fontsDir set to " + fontsDir);
  89. context.sourcemapDir = path_1.resolve(context.sourcemapDir || getConfigValue(context, '--sourcemapDir', null, Constants.ENV_VAR_SOURCEMAP_DIR, Constants.ENV_VAR_SOURCEMAP_DIR.toLowerCase(), Constants.SOURCEMAP_DIR));
  90. setProcessEnvVar(Constants.ENV_VAR_SOURCEMAP_DIR, context.sourcemapDir);
  91. logger_1.Logger.debug("sourcemapDir set to " + context.sourcemapDir);
  92. context.pagesDir = path_1.resolve(context.pagesDir || getConfigValue(context, '--pagesDir', null, Constants.ENV_VAR_PAGES_DIR, Constants.ENV_VAR_PAGES_DIR.toLowerCase(), path_1.join(context.srcDir, 'pages')));
  93. setProcessEnvVar(Constants.ENV_VAR_PAGES_DIR, context.pagesDir);
  94. logger_1.Logger.debug("pagesDir set to " + context.pagesDir);
  95. context.componentsDir = path_1.resolve(context.componentsDir || getConfigValue(context, '--componentsDir', null, Constants.ENV_VAR_COMPONENTS_DIR, Constants.ENV_VAR_COMPONENTS_DIR.toLowerCase(), path_1.join(context.srcDir, 'components')));
  96. setProcessEnvVar(Constants.ENV_VAR_COMPONENTS_DIR, context.componentsDir);
  97. logger_1.Logger.debug("componentsDir set to " + context.componentsDir);
  98. context.directivesDir = path_1.resolve(context.directivesDir || getConfigValue(context, '--directivesDir', null, Constants.ENV_VAR_DIRECTIVES_DIR, Constants.ENV_VAR_DIRECTIVES_DIR.toLowerCase(), path_1.join(context.srcDir, 'directives')));
  99. setProcessEnvVar(Constants.ENV_VAR_DIRECTIVES_DIR, context.directivesDir);
  100. logger_1.Logger.debug("directivesDir set to " + context.directivesDir);
  101. context.pipesDir = path_1.resolve(context.pipesDir || getConfigValue(context, '--pipesDir', null, Constants.ENV_VAR_PIPES_DIR, Constants.ENV_VAR_PIPES_DIR.toLowerCase(), path_1.join(context.srcDir, 'pipes')));
  102. setProcessEnvVar(Constants.ENV_VAR_PIPES_DIR, context.pipesDir);
  103. logger_1.Logger.debug("pipesDir set to " + context.pipesDir);
  104. context.providersDir = path_1.resolve(context.providersDir || getConfigValue(context, '--providersDir', null, Constants.ENV_VAR_PROVIDERS_DIR, Constants.ENV_VAR_PROVIDERS_DIR.toLowerCase(), path_1.join(context.srcDir, 'providers')));
  105. setProcessEnvVar(Constants.ENV_VAR_PROVIDERS_DIR, context.providersDir);
  106. logger_1.Logger.debug("providersDir set to " + context.providersDir);
  107. context.nodeModulesDir = path_1.join(context.rootDir, Constants.NODE_MODULES);
  108. setProcessEnvVar(Constants.ENV_VAR_NODE_MODULES_DIR, context.nodeModulesDir);
  109. logger_1.Logger.debug("nodeModulesDir set to " + context.nodeModulesDir);
  110. context.ionicAngularDir = path_1.resolve(context.ionicAngularDir || getConfigValue(context, '--ionicAngularDir', null, Constants.ENV_VAR_IONIC_ANGULAR_DIR, Constants.ENV_VAR_IONIC_ANGULAR_DIR.toLowerCase(), path_1.join(context.nodeModulesDir, Constants.IONIC_ANGULAR)));
  111. setProcessEnvVar(Constants.ENV_VAR_IONIC_ANGULAR_DIR, context.ionicAngularDir);
  112. logger_1.Logger.debug("ionicAngularDir set to " + context.ionicAngularDir);
  113. var angularDir = path_1.resolve(getConfigValue(context, '--angularDir', null, Constants.ENV_VAR_ANGULAR_CORE_DIR, Constants.ENV_VAR_ANGULAR_CORE_DIR.toLowerCase(), path_1.join(context.nodeModulesDir, Constants.AT_ANGULAR, 'core')));
  114. setProcessEnvVar(Constants.ENV_VAR_ANGULAR_CORE_DIR, angularDir);
  115. logger_1.Logger.debug("angularDir set to " + angularDir);
  116. context.angularCoreDir = angularDir;
  117. var typescriptDir = path_1.resolve(getConfigValue(context, '--typescriptDir', null, Constants.ENV_VAR_TYPESCRIPT_DIR, Constants.ENV_VAR_TYPESCRIPT_DIR.toLowerCase(), path_1.join(context.nodeModulesDir, Constants.TYPESCRIPT)));
  118. setProcessEnvVar(Constants.ENV_VAR_TYPESCRIPT_DIR, typescriptDir);
  119. logger_1.Logger.debug("typescriptDir set to " + typescriptDir);
  120. context.typescriptDir = typescriptDir;
  121. var defaultCoreCompilerFilePath = path_1.join(context.ionicAngularDir, 'compiler');
  122. context.coreCompilerFilePath = path_1.resolve(context.coreCompilerFilePath || getConfigValue(context, '--coreCompilerFilePath', null, Constants.ENV_VAR_CORE_COMPILER_FILE_PATH, Constants.ENV_VAR_CORE_COMPILER_FILE_PATH.toLowerCase(), defaultCoreCompilerFilePath));
  123. setProcessEnvVar(Constants.ENV_VAR_CORE_COMPILER_FILE_PATH, context.coreCompilerFilePath);
  124. logger_1.Logger.debug("coreCompilerFilePath set to " + context.coreCompilerFilePath);
  125. var defaultCoreDir = context.ionicAngularDir;
  126. context.coreDir = path_1.resolve(context.coreDir || getConfigValue(context, '--coreDir', null, Constants.ENV_VAR_CORE_DIR, Constants.ENV_VAR_CORE_DIR.toLowerCase(), defaultCoreDir));
  127. setProcessEnvVar(Constants.ENV_VAR_CORE_DIR, context.coreDir);
  128. logger_1.Logger.debug("coreDir set to " + context.coreDir);
  129. var rxjsDir = path_1.resolve(getConfigValue(context, '--rxjsDir', null, Constants.ENV_VAR_RXJS_DIR, Constants.ENV_VAR_RXJS_DIR.toLowerCase(), path_1.join(context.nodeModulesDir, Constants.RXJS)));
  130. setProcessEnvVar(Constants.ENV_VAR_RXJS_DIR, rxjsDir);
  131. logger_1.Logger.debug("rxjsDir set to " + rxjsDir);
  132. var ionicAngularTemplatesDir = path_1.join(context.ionicAngularDir, 'templates');
  133. setProcessEnvVar(Constants.ENV_VAR_IONIC_ANGULAR_TEMPLATE_DIR, ionicAngularTemplatesDir);
  134. logger_1.Logger.debug("ionicAngularTemplatesDir set to " + ionicAngularTemplatesDir);
  135. context.platform = getConfigValue(context, '--platform', null, Constants.ENV_VAR_PLATFORM, null, null);
  136. setProcessEnvVar(Constants.ENV_VAR_PLATFORM, context.platform);
  137. logger_1.Logger.debug("platform set to " + context.platform);
  138. context.target = getConfigValue(context, '--target', null, Constants.ENV_VAR_TARGET, null, null);
  139. setProcessEnvVar(Constants.ENV_VAR_TARGET, context.target);
  140. logger_1.Logger.debug("target set to " + context.target);
  141. var ionicAngularEntryPoint = path_1.resolve(getConfigValue(context, '--ionicAngularEntryPoint', null, Constants.ENV_VAR_IONIC_ANGULAR_ENTRY_POINT, Constants.ENV_VAR_IONIC_ANGULAR_ENTRY_POINT.toLowerCase(), path_1.join(context.ionicAngularDir, 'index.js')));
  142. setProcessEnvVar(Constants.ENV_VAR_IONIC_ANGULAR_ENTRY_POINT, ionicAngularEntryPoint);
  143. logger_1.Logger.debug("ionicAngularEntryPoint set to " + ionicAngularEntryPoint);
  144. var appScriptsDir = path_1.join(__dirname, '..', '..');
  145. setProcessEnvVar(Constants.ENV_VAR_APP_SCRIPTS_DIR, appScriptsDir);
  146. logger_1.Logger.debug("appScriptsDir set to " + appScriptsDir);
  147. var generateSourceMap = getConfigValue(context, '--generateSourceMap', null, Constants.ENV_VAR_GENERATE_SOURCE_MAP, Constants.ENV_VAR_GENERATE_SOURCE_MAP.toLowerCase(), context.isProd || context.runMinifyJs ? null : 'true');
  148. setProcessEnvVar(Constants.ENV_VAR_GENERATE_SOURCE_MAP, generateSourceMap);
  149. logger_1.Logger.debug("generateSourceMap set to " + generateSourceMap);
  150. var sourceMapTypeValue = getConfigValue(context, '--sourceMapType', null, Constants.ENV_VAR_SOURCE_MAP_TYPE, Constants.ENV_VAR_SOURCE_MAP_TYPE.toLowerCase(), Constants.SOURCE_MAP_TYPE_EXPENSIVE);
  151. setProcessEnvVar(Constants.ENV_VAR_SOURCE_MAP_TYPE, sourceMapTypeValue);
  152. logger_1.Logger.debug("sourceMapType set to " + sourceMapTypeValue);
  153. var moveSourceMaps = getConfigValue(context, '--moveSourceMaps', null, Constants.ENV_VAR_MOVE_SOURCE_MAPS, Constants.ENV_VAR_MOVE_SOURCE_MAPS.toLowerCase(), 'true');
  154. setProcessEnvVar(Constants.ENV_VAR_MOVE_SOURCE_MAPS, moveSourceMaps);
  155. logger_1.Logger.debug("moveSourceMaps set to " + moveSourceMaps);
  156. var tsConfigPathValue = path_1.resolve(getConfigValue(context, '--tsconfig', null, Constants.ENV_TS_CONFIG, Constants.ENV_TS_CONFIG.toLowerCase(), path_1.join(context.rootDir, 'tsconfig.json')));
  157. setProcessEnvVar(Constants.ENV_TS_CONFIG, tsConfigPathValue);
  158. logger_1.Logger.debug("tsconfig set to " + tsConfigPathValue);
  159. var readConfigJson = getConfigValue(context, '--readConfigJson', null, Constants.ENV_READ_CONFIG_JSON, Constants.ENV_READ_CONFIG_JSON.toLowerCase(), 'true');
  160. setProcessEnvVar(Constants.ENV_READ_CONFIG_JSON, readConfigJson);
  161. logger_1.Logger.debug("readConfigJson set to " + readConfigJson);
  162. var appEntryPointPathValue = path_1.resolve(getConfigValue(context, '--appEntryPoint', null, Constants.ENV_APP_ENTRY_POINT, Constants.ENV_APP_ENTRY_POINT.toLowerCase(), path_1.join(context.srcDir, 'app', 'main.ts')));
  163. setProcessEnvVar(Constants.ENV_APP_ENTRY_POINT, appEntryPointPathValue);
  164. logger_1.Logger.debug("appEntryPoint set to " + appEntryPointPathValue);
  165. context.appNgModulePath = path_1.resolve(getConfigValue(context, '--appNgModulePath', null, Constants.ENV_APP_NG_MODULE_PATH, Constants.ENV_APP_NG_MODULE_PATH.toLowerCase(), path_1.join(context.srcDir, 'app', 'app.module.ts')));
  166. setProcessEnvVar(Constants.ENV_APP_NG_MODULE_PATH, context.appNgModulePath);
  167. logger_1.Logger.debug("appNgModulePath set to " + context.appNgModulePath);
  168. context.componentsNgModulePath = path_1.resolve(getConfigValue(context, '--componentsNgModulePath', null, Constants.ENV_COMPONENTS_NG_MODULE_PATH, Constants.ENV_COMPONENTS_NG_MODULE_PATH.toLowerCase(), path_1.join(context.srcDir, 'components', 'components.module.ts')));
  169. setProcessEnvVar(Constants.ENV_COMPONENTS_NG_MODULE_PATH, context.componentsNgModulePath);
  170. logger_1.Logger.debug("componentsNgModulePath set to " + context.componentsNgModulePath);
  171. context.pipesNgModulePath = path_1.resolve(getConfigValue(context, '--pipesNgModulePath', null, Constants.ENV_PIPES_NG_MODULE_PATH, Constants.ENV_PIPES_NG_MODULE_PATH.toLowerCase(), path_1.join(context.srcDir, 'pipes', 'pipes.module.ts')));
  172. setProcessEnvVar(Constants.ENV_PIPES_NG_MODULE_PATH, context.pipesNgModulePath);
  173. logger_1.Logger.debug("pipesNgModulePath set to " + context.pipesNgModulePath);
  174. context.directivesNgModulePath = path_1.resolve(getConfigValue(context, '--directivesNgModulePath', null, Constants.ENV_DIRECTIVES_NG_MODULE_PATH, Constants.ENV_DIRECTIVES_NG_MODULE_PATH.toLowerCase(), path_1.join(context.srcDir, 'directives', 'directives.module.ts')));
  175. setProcessEnvVar(Constants.ENV_DIRECTIVES_NG_MODULE_PATH, context.directivesNgModulePath);
  176. logger_1.Logger.debug("directivesNgModulePath set to " + context.directivesNgModulePath);
  177. var appNgModuleClass = getConfigValue(context, '--appNgModuleClass', null, Constants.ENV_APP_NG_MODULE_CLASS, Constants.ENV_APP_NG_MODULE_CLASS.toLowerCase(), 'AppModule');
  178. setProcessEnvVar(Constants.ENV_APP_NG_MODULE_CLASS, appNgModuleClass);
  179. logger_1.Logger.debug("appNgModuleClass set to " + appNgModuleClass);
  180. var pathToGlobUtil = path_1.join(getProcessEnvVar(Constants.ENV_VAR_APP_SCRIPTS_DIR), 'dist', 'util', 'glob-util.js');
  181. setProcessEnvVar(Constants.ENV_GLOB_UTIL, pathToGlobUtil);
  182. logger_1.Logger.debug("pathToGlobUtil set to " + pathToGlobUtil);
  183. var cleanBeforeCopy = getConfigValue(context, '--cleanBeforeCopy', null, Constants.ENV_CLEAN_BEFORE_COPY, Constants.ENV_CLEAN_BEFORE_COPY.toLowerCase(), null);
  184. setProcessEnvVar(Constants.ENV_CLEAN_BEFORE_COPY, cleanBeforeCopy);
  185. logger_1.Logger.debug("cleanBeforeCopy set to " + cleanBeforeCopy);
  186. context.outputJsFileName = getConfigValue(context, '--outputJsFileName', null, Constants.ENV_OUTPUT_JS_FILE_NAME, Constants.ENV_OUTPUT_JS_FILE_NAME.toLowerCase(), 'main.js');
  187. setProcessEnvVar(Constants.ENV_OUTPUT_JS_FILE_NAME, context.outputJsFileName);
  188. logger_1.Logger.debug("outputJsFileName set to " + context.outputJsFileName);
  189. context.outputCssFileName = getConfigValue(context, '--outputCssFileName', null, Constants.ENV_OUTPUT_CSS_FILE_NAME, Constants.ENV_OUTPUT_CSS_FILE_NAME.toLowerCase(), 'main.css');
  190. setProcessEnvVar(Constants.ENV_OUTPUT_CSS_FILE_NAME, context.outputCssFileName);
  191. logger_1.Logger.debug("outputCssFileName set to " + context.outputCssFileName);
  192. var webpackFactoryPath = path_1.join(getProcessEnvVar(Constants.ENV_VAR_APP_SCRIPTS_DIR), 'dist', 'webpack', 'ionic-webpack-factory.js');
  193. setProcessEnvVar(Constants.ENV_WEBPACK_FACTORY, webpackFactoryPath);
  194. logger_1.Logger.debug("webpackFactoryPath set to " + webpackFactoryPath);
  195. var webpackLoaderPath = path_1.join(getProcessEnvVar(Constants.ENV_VAR_APP_SCRIPTS_DIR), 'dist', 'webpack', 'loader.js');
  196. setProcessEnvVar(Constants.ENV_WEBPACK_LOADER, webpackLoaderPath);
  197. logger_1.Logger.debug("webpackLoaderPath set to " + webpackLoaderPath);
  198. var cacheLoaderPath = path_1.join(getProcessEnvVar(Constants.ENV_VAR_APP_SCRIPTS_DIR), 'dist', 'webpack', 'cache-loader.js');
  199. setProcessEnvVar(Constants.ENV_CACHE_LOADER, cacheLoaderPath);
  200. logger_1.Logger.debug("cacheLoaderPath set to " + cacheLoaderPath);
  201. var aotWriteToDisk = getConfigValue(context, '--aotWriteToDisk', null, Constants.ENV_AOT_WRITE_TO_DISK, Constants.ENV_AOT_WRITE_TO_DISK.toLowerCase(), null);
  202. setProcessEnvVar(Constants.ENV_AOT_WRITE_TO_DISK, aotWriteToDisk);
  203. logger_1.Logger.debug("aotWriteToDisk set to " + aotWriteToDisk);
  204. var printWebpackDependencyTree = getConfigValue(context, '--printWebpackDependencyTree', null, Constants.ENV_PRINT_WEBPACK_DEPENDENCY_TREE, Constants.ENV_PRINT_WEBPACK_DEPENDENCY_TREE.toLowerCase(), null);
  205. setProcessEnvVar(Constants.ENV_PRINT_WEBPACK_DEPENDENCY_TREE, printWebpackDependencyTree);
  206. logger_1.Logger.debug("printWebpackDependencyTree set to " + printWebpackDependencyTree);
  207. var typeCheckOnLint = getConfigValue(context, '--typeCheckOnLint', null, Constants.ENV_TYPE_CHECK_ON_LINT, Constants.ENV_TYPE_CHECK_ON_LINT.toLowerCase(), null);
  208. setProcessEnvVar(Constants.ENV_TYPE_CHECK_ON_LINT, typeCheckOnLint);
  209. logger_1.Logger.debug("typeCheckOnLint set to " + typeCheckOnLint);
  210. var bailOnLintError = getConfigValue(context, '--bailOnLintError', null, Constants.ENV_BAIL_ON_LINT_ERROR, Constants.ENV_BAIL_ON_LINT_ERROR.toLowerCase(), null);
  211. setProcessEnvVar(Constants.ENV_BAIL_ON_LINT_ERROR, bailOnLintError);
  212. logger_1.Logger.debug("bailOnLintError set to " + bailOnLintError);
  213. var enableLint = getConfigValue(context, '--enableLint', null, Constants.ENV_ENABLE_LINT, Constants.ENV_ENABLE_LINT.toLowerCase(), 'true');
  214. setProcessEnvVar(Constants.ENV_ENABLE_LINT, enableLint);
  215. logger_1.Logger.debug("enableLint set to " + enableLint);
  216. var disableLogging = getConfigValue(context, '--disableLogging', null, Constants.ENV_DISABLE_LOGGING, Constants.ENV_DISABLE_LOGGING.toLowerCase(), null);
  217. setProcessEnvVar(Constants.ENV_DISABLE_LOGGING, disableLogging);
  218. logger_1.Logger.debug("disableLogging set to " + disableLogging);
  219. var startWatchTimeout = getConfigValue(context, '--startWatchTimeout', null, Constants.ENV_START_WATCH_TIMEOUT, Constants.ENV_START_WATCH_TIMEOUT.toLowerCase(), '3000');
  220. setProcessEnvVar(Constants.ENV_START_WATCH_TIMEOUT, startWatchTimeout);
  221. logger_1.Logger.debug("startWatchTimeout set to " + startWatchTimeout);
  222. var ngModuleFileNameSuffix = getConfigValue(context, '--ngModuleFileNameSuffix', null, Constants.ENV_NG_MODULE_FILE_NAME_SUFFIX, Constants.ENV_NG_MODULE_FILE_NAME_SUFFIX.toLowerCase(), '.module.ts');
  223. setProcessEnvVar(Constants.ENV_NG_MODULE_FILE_NAME_SUFFIX, ngModuleFileNameSuffix);
  224. logger_1.Logger.debug("ngModuleFileNameSuffix set to " + ngModuleFileNameSuffix);
  225. var polyfillName = getConfigValue(context, '--polyfillFileName', null, Constants.ENV_POLYFILL_FILE_NAME, Constants.ENV_POLYFILL_FILE_NAME.toLowerCase(), 'polyfills.js');
  226. setProcessEnvVar(Constants.ENV_POLYFILL_FILE_NAME, polyfillName);
  227. logger_1.Logger.debug("polyfillName set to " + polyfillName);
  228. var purgeUnusedFonts = getConfigValue(context, '--purgeUnusedFonts', null, Constants.ENV_PURGE_UNUSED_FONTS, Constants.ENV_PURGE_UNUSED_FONTS.toLowerCase(), 'true');
  229. setProcessEnvVar(Constants.ENV_PURGE_UNUSED_FONTS, purgeUnusedFonts);
  230. logger_1.Logger.debug("purgeUnusedFonts set to " + purgeUnusedFonts);
  231. /* Provider Path Stuff */
  232. setProcessEnvVar(Constants.ENV_ACTION_SHEET_CONTROLLER_CLASSNAME, 'ActionSheetController');
  233. setProcessEnvVar(Constants.ENV_ACTION_SHEET_CONTROLLER_PATH, path_1.join(context.ionicAngularDir, 'components', 'action-sheet', 'action-sheet-controller.js'));
  234. setProcessEnvVar(Constants.ENV_ACTION_SHEET_VIEW_CONTROLLER_PATH, path_1.join(context.ionicAngularDir, 'components', 'action-sheet', 'action-sheet.js'));
  235. setProcessEnvVar(Constants.ENV_ACTION_SHEET_COMPONENT_PATH, path_1.join(context.ionicAngularDir, 'components', 'action-sheet', 'action-sheet-component.js'));
  236. setProcessEnvVar(Constants.ENV_ACTION_SHEET_COMPONENT_FACTORY_PATH, path_1.join(context.ionicAngularDir, 'components', 'action-sheet', 'action-sheet-component.ngfactory.js'));
  237. setProcessEnvVar(Constants.ENV_ALERT_CONTROLLER_CLASSNAME, 'AlertController');
  238. setProcessEnvVar(Constants.ENV_ALERT_CONTROLLER_PATH, path_1.join(context.ionicAngularDir, 'components', 'alert', 'alert-controller.js'));
  239. setProcessEnvVar(Constants.ENV_ALERT_VIEW_CONTROLLER_PATH, path_1.join(context.ionicAngularDir, 'components', 'alert', 'alert.js'));
  240. setProcessEnvVar(Constants.ENV_ALERT_COMPONENT_PATH, path_1.join(context.ionicAngularDir, 'components', 'alert', 'alert-component.js'));
  241. setProcessEnvVar(Constants.ENV_ALERT_COMPONENT_FACTORY_PATH, path_1.join(context.ionicAngularDir, 'components', 'alert', 'alert-component.ngfactory.js'));
  242. setProcessEnvVar(Constants.ENV_APP_ROOT_COMPONENT_PATH, path_1.join(context.ionicAngularDir, 'components', 'app', 'app-root.js'));
  243. setProcessEnvVar(Constants.ENV_LOADING_CONTROLLER_CLASSNAME, 'LoadingController');
  244. setProcessEnvVar(Constants.ENV_LOADING_CONTROLLER_PATH, path_1.join(context.ionicAngularDir, 'components', 'loading', 'loading-controller.js'));
  245. setProcessEnvVar(Constants.ENV_LOADING_VIEW_CONTROLLER_PATH, path_1.join(context.ionicAngularDir, 'components', 'loading', 'loading.js'));
  246. setProcessEnvVar(Constants.ENV_LOADING_COMPONENT_PATH, path_1.join(context.ionicAngularDir, 'components', 'loading', 'loading-component.js'));
  247. setProcessEnvVar(Constants.ENV_LOADING_COMPONENT_FACTORY_PATH, path_1.join(context.ionicAngularDir, 'components', 'loading', 'loading-component.ngfactory.js'));
  248. setProcessEnvVar(Constants.ENV_MODAL_CONTROLLER_CLASSNAME, 'ModalController');
  249. setProcessEnvVar(Constants.ENV_MODAL_CONTROLLER_PATH, path_1.join(context.ionicAngularDir, 'components', 'modal', 'modal-controller.js'));
  250. setProcessEnvVar(Constants.ENV_MODAL_VIEW_CONTROLLER_PATH, path_1.join(context.ionicAngularDir, 'components', 'modal', 'modal.js'));
  251. setProcessEnvVar(Constants.ENV_MODAL_COMPONENT_PATH, path_1.join(context.ionicAngularDir, 'components', 'modal', 'modal-component.js'));
  252. setProcessEnvVar(Constants.ENV_MODAL_COMPONENT_FACTORY_PATH, path_1.join(context.ionicAngularDir, 'components', 'modal', 'modal-component.ngfactory.js'));
  253. setProcessEnvVar(Constants.ENV_PICKER_CONTROLLER_CLASSNAME, 'PickerController');
  254. setProcessEnvVar(Constants.ENV_PICKER_CONTROLLER_PATH, path_1.join(context.ionicAngularDir, 'components', 'picker', 'picker-controller.js'));
  255. setProcessEnvVar(Constants.ENV_PICKER_VIEW_CONTROLLER_PATH, path_1.join(context.ionicAngularDir, 'components', 'picker', 'picker.js'));
  256. setProcessEnvVar(Constants.ENV_PICKER_COMPONENT_PATH, path_1.join(context.ionicAngularDir, 'components', 'picker', 'picker-component.js'));
  257. setProcessEnvVar(Constants.ENV_PICKER_COMPONENT_FACTORY_PATH, path_1.join(context.ionicAngularDir, 'components', 'picker', 'picker-component.ngfactory.js'));
  258. setProcessEnvVar(Constants.ENV_POPOVER_CONTROLLER_CLASSNAME, 'PopoverController');
  259. setProcessEnvVar(Constants.ENV_POPOVER_CONTROLLER_PATH, path_1.join(context.ionicAngularDir, 'components', 'popover', 'popover-controller.js'));
  260. setProcessEnvVar(Constants.ENV_POPOVER_VIEW_CONTROLLER_PATH, path_1.join(context.ionicAngularDir, 'components', 'popover', 'popover.js'));
  261. setProcessEnvVar(Constants.ENV_POPOVER_COMPONENT_PATH, path_1.join(context.ionicAngularDir, 'components', 'popover', 'popover-component.js'));
  262. setProcessEnvVar(Constants.ENV_POPOVER_COMPONENT_FACTORY_PATH, path_1.join(context.ionicAngularDir, 'components', 'popover', 'popover-component.ngfactory.js'));
  263. setProcessEnvVar(Constants.ENV_SELECT_POPOVER_CLASSNAME, 'SelectPopover');
  264. setProcessEnvVar(Constants.ENV_SELECT_POPOVER_COMPONENT_PATH, path_1.join(context.ionicAngularDir, 'components', 'select', 'select-popover-component.js'));
  265. setProcessEnvVar(Constants.ENV_SELECT_POPOVER_COMPONENT_FACTORY_PATH, path_1.join(context.ionicAngularDir, 'components', 'select', 'select-popover-component.ngfactory.js'));
  266. setProcessEnvVar(Constants.ENV_TOAST_CONTROLLER_CLASSNAME, 'ToastController');
  267. setProcessEnvVar(Constants.ENV_TOAST_CONTROLLER_PATH, path_1.join(context.ionicAngularDir, 'components', 'toast', 'toast-controller.js'));
  268. setProcessEnvVar(Constants.ENV_TOAST_VIEW_CONTROLLER_PATH, path_1.join(context.ionicAngularDir, 'components', 'toast', 'toast.js'));
  269. setProcessEnvVar(Constants.ENV_TOAST_COMPONENT_PATH, path_1.join(context.ionicAngularDir, 'components', 'toast', 'toast-component.js'));
  270. setProcessEnvVar(Constants.ENV_TOAST_COMPONENT_FACTORY_PATH, path_1.join(context.ionicAngularDir, 'components', 'toast', 'toast-component.ngfactory.js'));
  271. var parseDeepLinks = getConfigValue(context, '--parseDeepLinks', null, Constants.ENV_PARSE_DEEPLINKS, Constants.ENV_PARSE_DEEPLINKS.toLowerCase(), 'true');
  272. setProcessEnvVar(Constants.ENV_PARSE_DEEPLINKS, parseDeepLinks);
  273. logger_1.Logger.debug("parseDeepLinks set to " + parseDeepLinks);
  274. var skipReadIonicAngular = getConfigValue(context, '--skipIonicAngularVersion', null, Constants.ENV_SKIP_IONIC_ANGULAR_VERSION, Constants.ENV_SKIP_IONIC_ANGULAR_VERSION.toLowerCase(), 'false');
  275. setProcessEnvVar(Constants.ENV_SKIP_IONIC_ANGULAR_VERSION, skipReadIonicAngular);
  276. logger_1.Logger.debug("skipReadIonicAngular set to " + skipReadIonicAngular);
  277. if (!isValidBundler(context.bundler)) {
  278. context.bundler = bundlerStrategy(context);
  279. logger_1.Logger.debug("bundler set to " + context.bundler);
  280. }
  281. context.inlineTemplates = true;
  282. checkDebugMode();
  283. if (helpers_1.getBooleanPropertyValue(Constants.ENV_DISABLE_LOGGING)) {
  284. console.debug = function () { };
  285. console.error = function () { };
  286. console.info = function () { };
  287. console.log = function () { };
  288. console.trace = function () { };
  289. console.warn = function () { };
  290. }
  291. return context;
  292. }
  293. exports.generateContext = generateContext;
  294. function getUserConfigFile(context, task, userConfigFile) {
  295. if (!context) {
  296. context = generateContext(context);
  297. }
  298. if (userConfigFile) {
  299. return path_1.resolve(userConfigFile);
  300. }
  301. var defaultConfig = getConfigValue(context, task.fullArg, task.shortArg, task.envVar, task.packageConfig, null);
  302. if (defaultConfig) {
  303. return path_1.join(context.rootDir, defaultConfig);
  304. }
  305. return null;
  306. }
  307. exports.getUserConfigFile = getUserConfigFile;
  308. function fillConfigDefaults(userConfigFile, defaultConfigFile) {
  309. var userConfig = null;
  310. if (userConfigFile) {
  311. try {
  312. // check if exists first, so we can print a more specific error message
  313. // since required config could also throw MODULE_NOT_FOUND
  314. fs_extra_1.statSync(userConfigFile);
  315. // create a fresh copy of the config each time
  316. userConfig = require(userConfigFile);
  317. // if user config returns a function call it to determine proper object
  318. if (typeof userConfig === 'function') {
  319. userConfig = userConfig();
  320. }
  321. }
  322. catch (e) {
  323. if (e.code === 'ENOENT') {
  324. console.error("Config file \"" + userConfigFile + "\" not found. Using defaults instead.");
  325. }
  326. else {
  327. console.error("There was an error in config file \"" + userConfigFile + "\". Using defaults instead.");
  328. console.error(e);
  329. }
  330. }
  331. }
  332. var defaultConfig = require(path_1.join('..', '..', 'config', defaultConfigFile));
  333. // create a fresh copy of the config each time
  334. // always assign any default values which were not already supplied by the user
  335. return helpers_1.objectAssign({}, defaultConfig, userConfig);
  336. }
  337. exports.fillConfigDefaults = fillConfigDefaults;
  338. function bundlerStrategy(context) {
  339. return Constants.BUNDLER_WEBPACK;
  340. }
  341. exports.bundlerStrategy = bundlerStrategy;
  342. function isValidBundler(bundler) {
  343. return bundler === Constants.BUNDLER_WEBPACK;
  344. }
  345. function getConfigValue(context, argFullName, argShortName, envVarName, packageConfigProp, defaultValue) {
  346. if (!context) {
  347. context = generateContext(context);
  348. }
  349. // first see if the value was set in the command-line args
  350. var argVal = getArgValue(argFullName, argShortName);
  351. if (argVal !== null) {
  352. return argVal;
  353. }
  354. // next see if it was set in the environment variables
  355. // which also checks if it was set in the package.json config property
  356. var envVar = getProcessEnvVar(envVarName);
  357. if (envVar !== null) {
  358. return envVar;
  359. }
  360. var packageConfig = getPackageJsonConfig(context, packageConfigProp);
  361. if (packageConfig !== null) {
  362. return packageConfig;
  363. }
  364. // return the default if nothing above was found
  365. return defaultValue;
  366. }
  367. exports.getConfigValue = getConfigValue;
  368. function getArgValue(fullName, shortName) {
  369. for (var i = 2; i < processArgv.length; i++) {
  370. var arg = processArgv[i];
  371. if (arg === fullName || (shortName && arg === shortName)) {
  372. var val = processArgv[i + 1];
  373. if (val !== undefined && val !== '') {
  374. return val;
  375. }
  376. }
  377. }
  378. return null;
  379. }
  380. function hasConfigValue(context, argFullName, argShortName, envVarName, defaultValue) {
  381. if (!context) {
  382. context = generateContext(context);
  383. }
  384. if (hasArg(argFullName, argShortName)) {
  385. return true;
  386. }
  387. // next see if it was set in the environment variables
  388. // which also checks if it was set in the package.json config property
  389. var envVar = getProcessEnvVar(envVarName);
  390. if (envVar !== null) {
  391. return true;
  392. }
  393. var packageConfig = getPackageJsonConfig(context, envVarName);
  394. if (packageConfig !== null) {
  395. return true;
  396. }
  397. // return the default if nothing above was found
  398. return defaultValue;
  399. }
  400. exports.hasConfigValue = hasConfigValue;
  401. function hasArg(fullName, shortName) {
  402. if (shortName === void 0) { shortName = null; }
  403. return !!(processArgv.some(function (a) { return a.toLowerCase() === fullName.toLowerCase(); }) ||
  404. (shortName !== null && processArgv.some(function (a) { return a.toLowerCase() === shortName.toLowerCase(); })));
  405. }
  406. exports.hasArg = hasArg;
  407. function replacePathVars(context, filePath) {
  408. if (Array.isArray(filePath)) {
  409. return filePath.map(function (f) { return replacePathVars(context, f); });
  410. }
  411. if (typeof filePath === 'object') {
  412. var clonedFilePaths = Object.assign({}, filePath);
  413. for (var key in clonedFilePaths) {
  414. clonedFilePaths[key] = replacePathVars(context, clonedFilePaths[key]);
  415. }
  416. return clonedFilePaths;
  417. }
  418. return filePath.replace('{{SRC}}', context.srcDir)
  419. .replace('{{WWW}}', context.wwwDir)
  420. .replace('{{TMP}}', context.tmpDir)
  421. .replace('{{ROOT}}', context.rootDir)
  422. .replace('{{BUILD}}', context.buildDir);
  423. }
  424. exports.replacePathVars = replacePathVars;
  425. function getNodeBinExecutable(context, cmd) {
  426. var cmdPath = path_1.join(context.rootDir, 'node_modules', '.bin', cmd);
  427. try {
  428. fs_extra_1.accessSync(cmdPath);
  429. }
  430. catch (e) {
  431. cmdPath = null;
  432. }
  433. return cmdPath;
  434. }
  435. exports.getNodeBinExecutable = getNodeBinExecutable;
  436. var checkedDebug = false;
  437. function checkDebugMode() {
  438. if (!checkedDebug) {
  439. if (hasArg('--debug') || getProcessEnvVar('ionic_debug_mode') === 'true') {
  440. processEnv.ionic_debug_mode = 'true';
  441. }
  442. checkedDebug = true;
  443. }
  444. }
  445. function isDebugMode() {
  446. return (processEnv.ionic_debug_mode === 'true');
  447. }
  448. exports.isDebugMode = isDebugMode;
  449. var processArgv;
  450. function setProcessArgs(argv) {
  451. processArgv = argv;
  452. }
  453. exports.setProcessArgs = setProcessArgs;
  454. setProcessArgs(process.argv);
  455. function addArgv(value) {
  456. processArgv.push(value);
  457. }
  458. exports.addArgv = addArgv;
  459. var processEnv;
  460. function setProcessEnv(env) {
  461. processEnv = env;
  462. }
  463. exports.setProcessEnv = setProcessEnv;
  464. setProcessEnv(process.env);
  465. function setProcessEnvVar(key, value) {
  466. if (key && value) {
  467. processEnv[key] = value;
  468. }
  469. }
  470. exports.setProcessEnvVar = setProcessEnvVar;
  471. function getProcessEnvVar(key) {
  472. var val = processEnv[key];
  473. if (val !== undefined) {
  474. if (val === 'true') {
  475. return true;
  476. }
  477. if (val === 'false') {
  478. return false;
  479. }
  480. return val;
  481. }
  482. return null;
  483. }
  484. exports.getProcessEnvVar = getProcessEnvVar;
  485. var processCwd;
  486. function setCwd(cwd) {
  487. processCwd = cwd;
  488. }
  489. exports.setCwd = setCwd;
  490. setCwd(process.cwd());
  491. function getPackageJsonConfig(context, key) {
  492. var packageJsonData = getAppPackageJsonData(context);
  493. if (packageJsonData && packageJsonData.config) {
  494. var val = packageJsonData.config[key];
  495. if (val !== undefined) {
  496. if (val === 'true') {
  497. return true;
  498. }
  499. if (val === 'false') {
  500. return false;
  501. }
  502. return val;
  503. }
  504. }
  505. return null;
  506. }
  507. exports.getPackageJsonConfig = getPackageJsonConfig;
  508. var appPackageJsonData = null;
  509. function setAppPackageJsonData(data) {
  510. appPackageJsonData = data;
  511. }
  512. exports.setAppPackageJsonData = setAppPackageJsonData;
  513. function getAppPackageJsonData(context) {
  514. if (!appPackageJsonData) {
  515. try {
  516. appPackageJsonData = fs_extra_1.readJSONSync(path_1.join(context.rootDir, 'package.json'));
  517. }
  518. catch (e) { }
  519. }
  520. return appPackageJsonData;
  521. }