import * as unitTestingConfigLoader from './unit-testing-config-loader'; import { loader } from 'webpack'; import { getOptions } from 'loader-utils'; import * as escapeRegExp from 'escape-string-regexp'; // Matches all source, markup and style files that are not in App_Resources and in tests folder const defaultMatch = '(?ignoredFiles) { registerModules = `(?new RegExp(registerModules); } if (unitTesting) { source = unitTestingConfigLoader({ appFullPath, projectRoot, angular, rootPagesRegExp: registerModules }); this.callback(null, source); return; } const hmr = ` if (module.hot) { const hmrUpdate = require("@nativescript/webpack/hmr").hmrUpdate; global.__coreModulesLiveSync = global.__onLiveSync; global.__onLiveSync = function () { // handle hot updated on LiveSync hmrUpdate(); }; global.hmrRefresh = function({ type, path } = {}) { // the hot updates are applied, ask the modules to apply the changes setTimeout(() => { global.__coreModulesLiveSync({ type, path }); }); }; // handle hot updated on initial app start hmrUpdate(); } `; let sourceModule = '@nativescript/core'; if (platform && platform !== 'ios' && platform !== 'android') { sourceModule = `nativescript-platform-${platform}`; } source = ` require("${sourceModule}/bundle-entry-points"); ${source} `; if (angular) { source = ` ${hmr} ${source} `; } else if (registerModules) { source = ` ${hmr} const context = require.context("~/", true, ${registerModules}); global.registerWebpackModules(context); if (module.hot) { module.hot.accept(context.id, () => { console.log("HMR: Accept module '" + context.id + "' from '" + module.id + "'"); }); } ${source} `; } if (loadCss) { source = ` require("${angular ? '@nativescript/webpack/helpers/load-application-css-angular' : '@nativescript/webpack/helpers/load-application-css-regular'}")(); ${source} `; } this.callback(null, source, map); }; export default loader;