@wavemaker/app-ng-runtime 11.4.0-next.26251 → 11.4.0-next.28151

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. app-ng-runtime/build-task/bundles/index.umd.js +1 -1
  2. app-ng-runtime/build-task/bundles/index.umd.js.map +1 -1
  3. app-ng-runtime/build-task/esm2015/data/form/form-field/form-field.build.js +2 -2
  4. app-ng-runtime/build-task/fesm2015/index.js +1 -1
  5. app-ng-runtime/build-task/fesm2015/index.js.map +1 -1
  6. app-ng-runtime/components/basic/rich-text-editor/bundles/index.umd.js +2 -2
  7. app-ng-runtime/components/basic/rich-text-editor/bundles/index.umd.js.map +1 -1
  8. app-ng-runtime/components/basic/rich-text-editor/esm2015/rich-text-editor.component.js +3 -3
  9. app-ng-runtime/components/basic/rich-text-editor/fesm2015/index.js +2 -2
  10. app-ng-runtime/components/basic/rich-text-editor/fesm2015/index.js.map +1 -1
  11. app-ng-runtime/components/data/list/bundles/index.umd.js +11 -5
  12. app-ng-runtime/components/data/list/bundles/index.umd.js.map +1 -1
  13. app-ng-runtime/components/data/list/esm2015/list.component.js +10 -4
  14. app-ng-runtime/components/data/list/fesm2015/index.js +9 -3
  15. app-ng-runtime/components/data/list/fesm2015/index.js.map +1 -1
  16. app-ng-runtime/components/data/table/bundles/index.umd.js +2 -1
  17. app-ng-runtime/components/data/table/bundles/index.umd.js.map +1 -1
  18. app-ng-runtime/components/data/table/esm2015/table-filter.directive.js +3 -2
  19. app-ng-runtime/components/data/table/fesm2015/index.js +2 -1
  20. app-ng-runtime/components/data/table/fesm2015/index.js.map +1 -1
  21. app-ng-runtime/components/input/epoch/base-date-time.component.d.ts +4 -0
  22. app-ng-runtime/components/input/epoch/bundles/index.umd.js +25 -3
  23. app-ng-runtime/components/input/epoch/bundles/index.umd.js.map +1 -1
  24. app-ng-runtime/components/input/epoch/esm2015/base-date-time.component.js +26 -3
  25. app-ng-runtime/components/input/epoch/esm2015/date/date.component.js +1 -2
  26. app-ng-runtime/components/input/epoch/fesm2015/index.js +25 -3
  27. app-ng-runtime/components/input/epoch/fesm2015/index.js.map +1 -1
  28. app-ng-runtime/components/input/epoch/index.metadata.json +1 -1
  29. app-ng-runtime/mobile/core/bundles/index.umd.js +2 -1
  30. app-ng-runtime/mobile/core/bundles/index.umd.js.map +1 -1
  31. app-ng-runtime/mobile/core/esm2015/services/device.service.js +3 -2
  32. app-ng-runtime/mobile/core/fesm2015/index.js +2 -1
  33. app-ng-runtime/mobile/core/fesm2015/index.js.map +1 -1
  34. app-ng-runtime/mobile/runtime-dynamic/bundles/index.umd.js +3 -2
  35. app-ng-runtime/mobile/runtime-dynamic/bundles/index.umd.js.map +1 -1
  36. app-ng-runtime/mobile/runtime-dynamic/esm2015/services/live-sync.service.js +4 -3
  37. app-ng-runtime/mobile/runtime-dynamic/fesm2015/index.js +3 -2
  38. app-ng-runtime/mobile/runtime-dynamic/fesm2015/index.js.map +1 -1
  39. app-ng-runtime/package.json +1 -1
  40. app-ng-runtime/runtime/base/bundles/index.umd.js +1 -0
  41. app-ng-runtime/runtime/base/bundles/index.umd.js.map +1 -1
  42. app-ng-runtime/runtime/base/esm2015/services/prefab-manager.service.js +2 -1
  43. app-ng-runtime/runtime/base/fesm2015/index.js +1 -0
  44. app-ng-runtime/runtime/base/fesm2015/index.js.map +1 -1
  45. app-ng-runtime/scripts/datatable/datatable.js +31 -12
  46. app-ng-runtime/scripts/summernote/dist/summernote-lite.min.js +3 -3
  47. app-ng-runtime/variables/bundles/index.umd.js +5 -12
  48. app-ng-runtime/variables/bundles/index.umd.js.map +1 -1
  49. app-ng-runtime/variables/esm2015/constants/variables.constants.js +3 -9
  50. app-ng-runtime/variables/fesm2015/index.js +2 -9
  51. app-ng-runtime/variables/fesm2015/index.js.map +1 -1
  52. app-ng-runtime/variables/index.metadata.json +1 -1
@@ -132,15 +132,16 @@
132
132
  error: reject
133
133
  });
134
134
  }).then(function (fileContent) {
135
+ var port = location.port ? ':' + location.port : '';
135
136
  var path = _this_1.localAppUrl ||
136
- (location.protocol + "//" + location.hostname + location.pathname);
137
+ (location.protocol + "//" + location.hostname + port + location.pathname);
137
138
  var cordovaPath = path;
138
139
  if (cordovaPath.endsWith('.html')) {
139
140
  var splits = cordovaPath.split('/').slice(0);
140
141
  cordovaPath = splits.slice(0, splits.length - 1).join('/');
141
142
  }
142
143
  cordovaPath += '/cordova.js';
143
- var mAppUrl = location.protocol + "//" + location.hostname + core.transformFileURI(localDir + 'live-index.html');
144
+ var mAppUrl = location.protocol + "//" + location.hostname + port + core.transformFileURI(localDir + 'live-index.html');
144
145
  fileContent = fileContent.replace('cordova.js', cordovaPath);
145
146
  fileContent = fileContent.replace('<head>', "\n <head>\n <base href=\"" + _this_1.deployedUrl + "\">\n <meta name=\"liveSync.deployedUrl\" value=\"" + _this_1.deployedUrl + "\">\n <meta name=\"liveSync.syncAppUrl\" value=\"" + mAppUrl + "\">\n <meta name=\"liveSync.localAppUrl\" value=\"" + path + "\">");
146
147
  return _this_1.file.writeFile(localDir, 'live-index.html', fileContent, {
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.js","sources":["../../../../projects/mobile/runtime-dynamic/src/services/live-sync.service.ts","../../../../projects/mobile/runtime-dynamic/src/mobile-runtime-dynamic.module.ts","../../../../projects/mobile/runtime-dynamic/src/index.ts"],"sourcesContent":["import { Observable } from 'rxjs';\n\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { File } from '@awesome-cordova-plugins/file/ngx';\n\nimport { App, hasCordova, transformFileURI } from '@wm/core';\nimport { DeviceService, NetworkService } from '@wm/mobile/core';\n\ndeclare const window, location, cordova;\ndeclare const $, _;\n\ninterface Settings {\n enabled: boolean,\n position: {\n left: number,\n top: number,\n },\n show: boolean,\n cordovaPlugins: {}\n}\n\n@Injectable()\nexport class LiveSyncInterceptor implements HttpInterceptor {\n\n private urlsToSkip: string[] = [];\n private deployedUrl = '';\n private localAppUrl = '';\n private syncAppUrl = '';\n private urlsToLoadFromLocal = {\n 'config.json': 'config.json',\n };\n private urlsToLoadFromLive = {\n 'metadata/app/service-definitions.json': 'services/servicedefs',\n 'metadata/app/security-config.json': 'services/security/info'\n };\n private prefabServicePattern = /^metadata\\/prefabs\\/.*\\/service-definitions.json$/;\n private isLiveSyncEnabled = false;\n private settings: Settings = {\n enabled: false,\n position: null,\n show: true,\n cordovaPlugins: null\n };\n\n constructor(private app: App,\n private deviceService: DeviceService,\n private networkService: NetworkService,\n private file: File) {\n this.loadSettings();\n this.isLiveSyncEnabled = this.settings.enabled && hasCordova();\n this.deployedUrl = $('meta[name=\"liveSync.deployedUrl\"]').attr('value');\n this.localAppUrl = $('meta[name=\"liveSync.localAppUrl\"]').attr('value');\n this.syncAppUrl = $('meta[name=\"liveSync.syncAppUrl\"]').attr('value');\n this.defineAPI();\n if (!this.isLiveSyncEnabled) {\n this.goToLocalApp();\n if (this.deviceService.isAppConnectedToPreview()) {\n this.deviceService.whenReady().then(() => {\n this.deployedUrl = app.deployedUrl;\n if (!this.networkService.isConnected()) {\n return;\n }\n this.renderUI();\n if (!this.localAppUrl && !this.settings.cordovaPlugins) {\n this.getPlugins().then(plugins => {\n this.settings.cordovaPlugins = plugins;\n this.saveSettings();\n });\n }\n });\n }\n return;\n }\n if (this.syncAppUrl && this.deployedUrl) {\n this.deviceService.getConfig().baseUrl = this.deployedUrl;\n this.patchSQLite();\n this.patchHistoryApi();\n Object.keys(this.urlsToLoadFromLocal).forEach(k => {\n this.urlsToLoadFromLocal[k] = this.syncAppUrl + this.urlsToLoadFromLocal[k];\n });\n this.patchApp();\n this.renderUI();\n } else {\n window.navigator.splashscreen.hide = () => {};\n this.deployedUrl = app.deployedUrl;\n this.isLiveSyncEnabled = false;\n this.deviceService.whenReady().then(() => {\n this.networkService.isConnected() && this.launch();\n });\n }\n }\n\n private goToLocalApp() {\n if (this.localAppUrl) {\n location.href = this.localAppUrl;\n }\n }\n\n private defineAPI() {\n (window as any).liveSync = (flag) => {\n if (this.settings.enabled === !!flag \n || !this.networkService.isConnected()) {\n return;\n }\n this.settings.enabled = !!flag;\n this.saveSettings();\n setTimeout(() => {\n window.navigator.splashscreen.show();\n location.reload();\n }, 100);\n };\n }\n\n private transformPrefabServicedefinitions(url: string) {\n let isValid = this.prefabServicePattern.test(url),\n prefabName = '',\n prefabLoc = 0;\n if (isValid) {\n prefabLoc = 'metadata/prefabs/'.length;\n prefabName = url.substring(prefabLoc, url.indexOf('/', prefabLoc));\n return 'services/prefabs/' + prefabName + '/servicedefs';\n }\n return url;\n }\n\n public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (!this.isLiveSyncEnabled) {\n return next.handle(request);\n }\n const deployedUrl = this.app.deployedUrl;\n let url = request.url;\n url = this.urlsToLoadFromLive[url] || this.urlsToLoadFromLocal[url] || url;\n url = this.transformPrefabServicedefinitions(url);\n if (url.startsWith('//')) {\n url = deployedUrl.split('//')[0] + url;\n }\n if (url.indexOf('://') < 0\n || this.urlsToSkip.indexOf(url) >= 0) {\n url = deployedUrl + '/' + url;\n }\n request = request.clone({url: url});\n return next.handle(request);\n }\n\n private mashUpHtmlFile() {\n const localDir = cordova.file.cacheDirectory;\n return new Promise((resolve, reject) => {\n $.ajax({\n url: this.deployedUrl + 'index.html',\n dataType: 'html',\n success: resolve,\n error: reject\n });\n }).then((fileContent: string) => {\n let path = this.localAppUrl || \n (`${location.protocol}//${location.hostname}${location.pathname}`);\n let cordovaPath = path;\n if (cordovaPath.endsWith('.html')) {\n const splits = cordovaPath.split('/').slice(0, );\n cordovaPath = splits.slice(0, splits.length - 1).join('/');\n }\n cordovaPath += '/cordova.js';\n const mAppUrl = `${location.protocol}//${location.hostname}${transformFileURI(localDir + 'live-index.html')}`;\n fileContent = fileContent.replace('cordova.js', cordovaPath);\n fileContent = fileContent.replace('<head>', `\n <head>\n <base href=\"${this.deployedUrl}\">\n <meta name=\"liveSync.deployedUrl\" value=\"${this.deployedUrl}\">\n <meta name=\"liveSync.syncAppUrl\" value=\"${mAppUrl}\">\n <meta name=\"liveSync.localAppUrl\" value=\"${path}\">`);\n return this.file.writeFile(localDir, 'live-index.html', fileContent, {\n replace: true\n }).then(() => mAppUrl);\n });\n }\n\n private getPlugins() {\n return new Promise((resolve, reject) => {\n $.get(this.deployedUrl + 'config.xml').done(function (res) {\n const plugins = {};\n $(res).find('plugin').each(function(p) { \n plugins[$(this).attr('name')] = $(this).attr('spec');\n });\n resolve(plugins);\n }).fail(reject);\n });\n }\n\n private hasPluginsChanged() {\n return this.deviceService.whenReady()\n .then(() => this.getPlugins())\n .then(plugins => {\n const pluginsInApk = this.settings.cordovaPlugins || {};\n return !!Object.keys(plugins)\n .find(k => !pluginsInApk[k] || pluginsInApk[k] !== plugins[k]);\n });\n }\n\n private launch() {\n return this.mashUpHtmlFile()\n .then((filePath) => {\n localStorage.setItem('WM.NetworkService.isConnected', 'true');\n localStorage.setItem('WM.NetworkService._autoConnect', 'true');\n sessionStorage.setItem('debugMode', 'true');\n \n setTimeout(() => {\n window.navigator.splashscreen.show();\n window.location.href = filePath;\n }, 2000);\n });\n }\n\n private patchSQLite() {\n // Offline sql is not supported.\n delete window['SQLitePlugin'];\n }\n\n private patchApp() {\n this.app.reload = () => {\n if (this.networkService.isConnected()){\n window.navigator.splashscreen.show();\n this.launch();\n }\n };\n window['reloadApp'] = this.app.reload;\n }\n\n private patchHistoryApi() {\n const location = this.syncAppUrl;\n const origReplace = window.history.replaceState;\n window.history.replaceState = (state: any, title: string, url: string) => {\n if (url.startsWith('#')) {\n url = location + url;\n }\n origReplace.call(window.history, state, title, url);\n };\n const origPush = window.history.pushState;\n window.history.pushState = (state: any, title: string, url: string) => {\n if (url.startsWith('#')) {\n url = location + url;\n }\n origPush.call(window.history, state, title, url);\n };\n }\n\n public loadSettings() {\n const value = sessionStorage.getItem('wm.liveSync.settings');\n try {\n this.settings = value ? JSON.parse(value) : this.settings;\n } catch(e) {\n this.saveSettings();\n }\n }\n\n public saveSettings() {\n sessionStorage.setItem('wm.liveSync.settings', JSON.stringify(this.settings));\n }\n\n public renderUI() {\n if (this.settings.enabled) {\n this.hasPluginsChanged().then((changed) => {\n if (changed) {\n new DialogComponent({\n title: 'Require new build',\n info: 'Cordova Plugins in this app do not match with configuration of project in Studio.' + \n ' So, new Cordova Build is required for Live Sync to work properly.',\n iconClass: 'fa fa-warning fa-4x live-sync-warning-icon',\n actions: [{\n title: 'Got it',\n primary: true\n }]\n }).render();\n }\n });\n }\n new LiveSyncComponent(this.settings, () => {\n this.saveSettings();\n }).render();\n }\n\n}\n\nclass DialogComponent {\n private $ele: any = $('<div><div>');\n\n constructor(public options: {\n title? : string,\n info? : string,\n iconClass?: string,\n actions? : {\n title: string,\n action?: (dialog: DialogComponent) => void,\n primary?: boolean\n }[]\n }) {\n \n }\n\n dismiss() {\n this.$ele.remove();\n }\n\n render() {\n this.$ele = $(\n `<div class=\"live-sync-modal live-sync-control\">\n <div class=\"live-sync-info-container\">\n <span class=\"${this.options.iconClass}\">\n </span>\n <label class=\"live-sync-title\">\n ${this.options.title}\n </label>\n <label class=\"live-sync-description\"> \n ${this.options.info}\n </label>\n <div class=\"live-sync-action-panel\">\n ${this.options.actions.map((a) => {\n return a ? `\n <button \n type=\"button\"\n class=\"live-sync-action ${a.primary ? ' live-sync-primary-action' : ''}\">\n ${a.title}\n </button>` : '';\n }).join('')}\n </div>\n </div>\n </div>\n `\n );\n $('body').append(this.$ele);\n const _this = this;\n this.$ele.find('.live-sync-action').each(function(index) {\n $(this).bind('click', () => {\n const action = _this.options.actions[index].action;\n if (action) {\n action(_this);\n }\n _this.dismiss();\n });\n });\n }\n}\n\nclass LiveSyncComponent {\n private $ele = $(\n `<div class=\"live-sync-control\">\n <button class=\"live-sync-control-btn\" type=\"button\">\n </button>\n </div>`);\n\n constructor(private settings: Settings, private onChange: () => void) {\n\n }\n\n private setPosition() {\n const menuIcon = this.$ele.find('.live-sync-control-btn');\n const position = this.settings.position;\n if(position) {\n menuIcon.css('left', position.left + 'px');\n menuIcon.css('top', position.top + 'px');\n }\n }\n\n private listenForShowEvent() {\n $('body').bind('touchstart', () => {\n const timerId = setTimeout(() => {\n this.settings.show = true;\n this.onChange();\n this.showConfirmation();\n }, 5000);\n $('body').bind('touchend', () => {\n clearTimeout(timerId);\n });\n });\n }\n\n private showConfirmation() {\n new DialogComponent({\n title: 'Enable Live Sync?',\n info: 'App UI is pulled from studio. But, offline functionality is turned off.',\n iconClass: 'live-sync-control-icon',\n actions: [{\n title: 'No',\n action: () => {\n this.settings.show = false;\n this.onChange();\n this.showHelpInfo();\n }\n }, {\n title: 'Yes',\n action: () => {\n window.liveSync(true);\n },\n primary: true\n }]\n }).render();\n };\n\n private showHelpInfo() {\n new DialogComponent({\n title: '',\n info: 'Tap and hold anywhere for 5 seconds to turn on Live Sync.',\n iconClass: 'live-sync-retrieval-info-icon',\n actions: [{\n title: 'Got it',\n primary: true\n }]\n }).render();\n };\n\n private renderButton() {\n const menuIcon = this.$ele.find('.live-sync-control-btn');\n this.$ele.on('touchstart', (event) => {\n event.stopPropagation();\n let addClass = true;\n $(document).on('touchmove.liveSync', (event) => {\n var origEvent = event.originalEvent.touches[0];\n if (origEvent && origEvent.pageX) {\n this.settings.position = {\n left: origEvent.pageX,\n top: origEvent.pageY\n };\n }\n this.setPosition();\n if (addClass) {\n menuIcon.addClass('touched');\n addClass = false;\n }\n });\n $(document).one('touchend', (event) => {\n this.onChange();\n menuIcon.removeClass('touched');\n $(document).off('touchmove.liveSync');\n });\n });\n menuIcon.click(() => window.reloadApp());\n $('body').append(this.$ele);\n }\n\n public render() {\n this.setPosition();\n if (this.settings.enabled) {\n this.renderButton();\n } else if (this.settings.show) {\n this.showConfirmation();\n }\n this.listenForShowEvent();\n }\n}","import { NgModule } from '@angular/core';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\n\n\nimport { BasicModule } from '@wm/mobile/components/basic';\nimport { SearchModule } from '@wm/mobile/components/basic/search';\n\nimport { SegmentedControlModule } from '@wm/mobile/components/containers/segmented-control';\n\nimport { MediaListModule } from '@wm/mobile/components/data/media-list';\n\nimport { BarcodeScannerModule } from '@wm/mobile/components/device/barcode-scanner';\nimport { CameraModule } from '@wm/mobile/components/device/camera';\n\nimport { FileUploadModule } from '@wm/mobile/components/input/file-upload';\n\nimport { PageModule } from '@wm/mobile/components/page';\nimport { LeftPanelModule } from '@wm/mobile/components/page/left-panel';\nimport { MobileNavbarModule } from '@wm/mobile/components/page/mobile-navbar';\nimport { TabBarModule } from '@wm/mobile/components/page/tab-bar';\nimport { LiveSyncInterceptor } from './services/live-sync.service';\n\nexport const MOBILE_COMPONENT_MODULES_FOR_ROOT = [\n BasicModule,\n SearchModule,\n SegmentedControlModule,\n MediaListModule,\n BarcodeScannerModule,\n CameraModule,\n FileUploadModule,\n PageModule,\n LeftPanelModule,\n MobileNavbarModule,\n TabBarModule\n];\n\n@NgModule({\n providers: [{\n provide: HTTP_INTERCEPTORS,\n useClass: LiveSyncInterceptor,\n multi: true\n }]\n})\nexport class MobileRuntimeDynamicModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n\nexport {LiveSyncInterceptor as ɵa} from './services/live-sync.service';"],"names":["hasCordova","transformFileURI","Injectable","App","DeviceService","NetworkService","File","BasicModule","SearchModule","SegmentedControlModule","MediaListModule","BarcodeScannerModule","CameraModule","FileUploadModule","PageModule","LeftPanelModule","MobileNavbarModule","TabBarModule","NgModule","HTTP_INTERCEPTORS"],"mappings":"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"}
1
+ {"version":3,"file":"index.umd.js","sources":["../../../../projects/mobile/runtime-dynamic/src/services/live-sync.service.ts","../../../../projects/mobile/runtime-dynamic/src/mobile-runtime-dynamic.module.ts","../../../../projects/mobile/runtime-dynamic/src/index.ts"],"sourcesContent":["import { Observable } from 'rxjs';\n\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { File } from '@awesome-cordova-plugins/file/ngx';\n\nimport { App, hasCordova, transformFileURI } from '@wm/core';\nimport { DeviceService, NetworkService } from '@wm/mobile/core';\n\ndeclare const window, location, cordova;\ndeclare const $, _;\n\ninterface Settings {\n enabled: boolean,\n position: {\n left: number,\n top: number,\n },\n show: boolean,\n cordovaPlugins: {}\n}\n\n@Injectable()\nexport class LiveSyncInterceptor implements HttpInterceptor {\n\n private urlsToSkip: string[] = [];\n private deployedUrl = '';\n private localAppUrl = '';\n private syncAppUrl = '';\n private urlsToLoadFromLocal = {\n 'config.json': 'config.json',\n };\n private urlsToLoadFromLive = {\n 'metadata/app/service-definitions.json': 'services/servicedefs',\n 'metadata/app/security-config.json': 'services/security/info'\n };\n private prefabServicePattern = /^metadata\\/prefabs\\/.*\\/service-definitions.json$/;\n private isLiveSyncEnabled = false;\n private settings: Settings = {\n enabled: false,\n position: null,\n show: true,\n cordovaPlugins: null\n };\n\n constructor(private app: App,\n private deviceService: DeviceService,\n private networkService: NetworkService,\n private file: File) {\n this.loadSettings();\n this.isLiveSyncEnabled = this.settings.enabled && hasCordova();\n this.deployedUrl = $('meta[name=\"liveSync.deployedUrl\"]').attr('value');\n this.localAppUrl = $('meta[name=\"liveSync.localAppUrl\"]').attr('value');\n this.syncAppUrl = $('meta[name=\"liveSync.syncAppUrl\"]').attr('value');\n this.defineAPI();\n if (!this.isLiveSyncEnabled) {\n this.goToLocalApp();\n if (this.deviceService.isAppConnectedToPreview()) {\n this.deviceService.whenReady().then(() => {\n this.deployedUrl = app.deployedUrl;\n if (!this.networkService.isConnected()) {\n return;\n }\n this.renderUI();\n if (!this.localAppUrl && !this.settings.cordovaPlugins) {\n this.getPlugins().then(plugins => {\n this.settings.cordovaPlugins = plugins;\n this.saveSettings();\n });\n }\n });\n }\n return;\n }\n if (this.syncAppUrl && this.deployedUrl) {\n this.deviceService.getConfig().baseUrl = this.deployedUrl;\n this.patchSQLite();\n this.patchHistoryApi();\n Object.keys(this.urlsToLoadFromLocal).forEach(k => {\n this.urlsToLoadFromLocal[k] = this.syncAppUrl + this.urlsToLoadFromLocal[k];\n });\n this.patchApp();\n this.renderUI();\n } else {\n window.navigator.splashscreen.hide = () => {};\n this.deployedUrl = app.deployedUrl;\n this.isLiveSyncEnabled = false;\n this.deviceService.whenReady().then(() => {\n this.networkService.isConnected() && this.launch();\n });\n }\n }\n\n private goToLocalApp() {\n if (this.localAppUrl) {\n location.href = this.localAppUrl;\n }\n }\n\n private defineAPI() {\n (window as any).liveSync = (flag) => {\n if (this.settings.enabled === !!flag \n || !this.networkService.isConnected()) {\n return;\n }\n this.settings.enabled = !!flag;\n this.saveSettings();\n setTimeout(() => {\n window.navigator.splashscreen.show();\n location.reload();\n }, 100);\n };\n }\n\n private transformPrefabServicedefinitions(url: string) {\n let isValid = this.prefabServicePattern.test(url),\n prefabName = '',\n prefabLoc = 0;\n if (isValid) {\n prefabLoc = 'metadata/prefabs/'.length;\n prefabName = url.substring(prefabLoc, url.indexOf('/', prefabLoc));\n return 'services/prefabs/' + prefabName + '/servicedefs';\n }\n return url;\n }\n\n public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (!this.isLiveSyncEnabled) {\n return next.handle(request);\n }\n const deployedUrl = this.app.deployedUrl;\n let url = request.url;\n url = this.urlsToLoadFromLive[url] || this.urlsToLoadFromLocal[url] || url;\n url = this.transformPrefabServicedefinitions(url);\n if (url.startsWith('//')) {\n url = deployedUrl.split('//')[0] + url;\n }\n if (url.indexOf('://') < 0\n || this.urlsToSkip.indexOf(url) >= 0) {\n url = deployedUrl + '/' + url;\n }\n request = request.clone({url: url});\n return next.handle(request);\n }\n\n private mashUpHtmlFile() {\n const localDir = cordova.file.cacheDirectory;\n return new Promise((resolve, reject) => {\n $.ajax({\n url: this.deployedUrl + 'index.html',\n dataType: 'html',\n success: resolve,\n error: reject\n });\n }).then((fileContent: string) => {\n const port = location.port ? ':' + location.port : '';\n let path = this.localAppUrl || \n (`${location.protocol}//${location.hostname}${port}${location.pathname}`);\n let cordovaPath = path;\n if (cordovaPath.endsWith('.html')) {\n const splits = cordovaPath.split('/').slice(0, );\n cordovaPath = splits.slice(0, splits.length - 1).join('/');\n }\n cordovaPath += '/cordova.js';\n const mAppUrl = `${location.protocol}//${location.hostname}${port}${transformFileURI(localDir + 'live-index.html')}`;\n fileContent = fileContent.replace('cordova.js', cordovaPath);\n fileContent = fileContent.replace('<head>', `\n <head>\n <base href=\"${this.deployedUrl}\">\n <meta name=\"liveSync.deployedUrl\" value=\"${this.deployedUrl}\">\n <meta name=\"liveSync.syncAppUrl\" value=\"${mAppUrl}\">\n <meta name=\"liveSync.localAppUrl\" value=\"${path}\">`);\n return this.file.writeFile(localDir, 'live-index.html', fileContent, {\n replace: true\n }).then(() => mAppUrl);\n });\n }\n\n private getPlugins() {\n return new Promise((resolve, reject) => {\n $.get(this.deployedUrl + 'config.xml').done(function (res) {\n const plugins = {};\n $(res).find('plugin').each(function(p) { \n plugins[$(this).attr('name')] = $(this).attr('spec');\n });\n resolve(plugins);\n }).fail(reject);\n });\n }\n\n private hasPluginsChanged() {\n return this.deviceService.whenReady()\n .then(() => this.getPlugins())\n .then(plugins => {\n const pluginsInApk = this.settings.cordovaPlugins || {};\n return !!Object.keys(plugins)\n .find(k => !pluginsInApk[k] || pluginsInApk[k] !== plugins[k]);\n });\n }\n\n private launch() {\n return this.mashUpHtmlFile()\n .then((filePath) => {\n localStorage.setItem('WM.NetworkService.isConnected', 'true');\n localStorage.setItem('WM.NetworkService._autoConnect', 'true');\n sessionStorage.setItem('debugMode', 'true');\n \n setTimeout(() => {\n window.navigator.splashscreen.show();\n window.location.href = filePath;\n }, 2000);\n });\n }\n\n private patchSQLite() {\n // Offline sql is not supported.\n delete window['SQLitePlugin'];\n }\n\n private patchApp() {\n this.app.reload = () => {\n if (this.networkService.isConnected()){\n window.navigator.splashscreen.show();\n this.launch();\n }\n };\n window['reloadApp'] = this.app.reload;\n }\n\n private patchHistoryApi() {\n const location = this.syncAppUrl;\n const origReplace = window.history.replaceState;\n window.history.replaceState = (state: any, title: string, url: string) => {\n if (url.startsWith('#')) {\n url = location + url;\n }\n origReplace.call(window.history, state, title, url);\n };\n const origPush = window.history.pushState;\n window.history.pushState = (state: any, title: string, url: string) => {\n if (url.startsWith('#')) {\n url = location + url;\n }\n origPush.call(window.history, state, title, url);\n };\n }\n\n public loadSettings() {\n const value = sessionStorage.getItem('wm.liveSync.settings');\n try {\n this.settings = value ? JSON.parse(value) : this.settings;\n } catch(e) {\n this.saveSettings();\n }\n }\n\n public saveSettings() {\n sessionStorage.setItem('wm.liveSync.settings', JSON.stringify(this.settings));\n }\n\n public renderUI() {\n if (this.settings.enabled) {\n this.hasPluginsChanged().then((changed) => {\n if (changed) {\n new DialogComponent({\n title: 'Require new build',\n info: 'Cordova Plugins in this app do not match with configuration of project in Studio.' + \n ' So, new Cordova Build is required for Live Sync to work properly.',\n iconClass: 'fa fa-warning fa-4x live-sync-warning-icon',\n actions: [{\n title: 'Got it',\n primary: true\n }]\n }).render();\n }\n });\n }\n new LiveSyncComponent(this.settings, () => {\n this.saveSettings();\n }).render();\n }\n\n}\n\nclass DialogComponent {\n private $ele: any = $('<div><div>');\n\n constructor(public options: {\n title? : string,\n info? : string,\n iconClass?: string,\n actions? : {\n title: string,\n action?: (dialog: DialogComponent) => void,\n primary?: boolean\n }[]\n }) {\n \n }\n\n dismiss() {\n this.$ele.remove();\n }\n\n render() {\n this.$ele = $(\n `<div class=\"live-sync-modal live-sync-control\">\n <div class=\"live-sync-info-container\">\n <span class=\"${this.options.iconClass}\">\n </span>\n <label class=\"live-sync-title\">\n ${this.options.title}\n </label>\n <label class=\"live-sync-description\"> \n ${this.options.info}\n </label>\n <div class=\"live-sync-action-panel\">\n ${this.options.actions.map((a) => {\n return a ? `\n <button \n type=\"button\"\n class=\"live-sync-action ${a.primary ? ' live-sync-primary-action' : ''}\">\n ${a.title}\n </button>` : '';\n }).join('')}\n </div>\n </div>\n </div>\n `\n );\n $('body').append(this.$ele);\n const _this = this;\n this.$ele.find('.live-sync-action').each(function(index) {\n $(this).bind('click', () => {\n const action = _this.options.actions[index].action;\n if (action) {\n action(_this);\n }\n _this.dismiss();\n });\n });\n }\n}\n\nclass LiveSyncComponent {\n private $ele = $(\n `<div class=\"live-sync-control\">\n <button class=\"live-sync-control-btn\" type=\"button\">\n </button>\n </div>`);\n\n constructor(private settings: Settings, private onChange: () => void) {\n\n }\n\n private setPosition() {\n const menuIcon = this.$ele.find('.live-sync-control-btn');\n const position = this.settings.position;\n if(position) {\n menuIcon.css('left', position.left + 'px');\n menuIcon.css('top', position.top + 'px');\n }\n }\n\n private listenForShowEvent() {\n $('body').bind('touchstart', () => {\n const timerId = setTimeout(() => {\n this.settings.show = true;\n this.onChange();\n this.showConfirmation();\n }, 5000);\n $('body').bind('touchend', () => {\n clearTimeout(timerId);\n });\n });\n }\n\n private showConfirmation() {\n new DialogComponent({\n title: 'Enable Live Sync?',\n info: 'App UI is pulled from studio. But, offline functionality is turned off.',\n iconClass: 'live-sync-control-icon',\n actions: [{\n title: 'No',\n action: () => {\n this.settings.show = false;\n this.onChange();\n this.showHelpInfo();\n }\n }, {\n title: 'Yes',\n action: () => {\n window.liveSync(true);\n },\n primary: true\n }]\n }).render();\n };\n\n private showHelpInfo() {\n new DialogComponent({\n title: '',\n info: 'Tap and hold anywhere for 5 seconds to turn on Live Sync.',\n iconClass: 'live-sync-retrieval-info-icon',\n actions: [{\n title: 'Got it',\n primary: true\n }]\n }).render();\n };\n\n private renderButton() {\n const menuIcon = this.$ele.find('.live-sync-control-btn');\n this.$ele.on('touchstart', (event) => {\n event.stopPropagation();\n let addClass = true;\n $(document).on('touchmove.liveSync', (event) => {\n var origEvent = event.originalEvent.touches[0];\n if (origEvent && origEvent.pageX) {\n this.settings.position = {\n left: origEvent.pageX,\n top: origEvent.pageY\n };\n }\n this.setPosition();\n if (addClass) {\n menuIcon.addClass('touched');\n addClass = false;\n }\n });\n $(document).one('touchend', (event) => {\n this.onChange();\n menuIcon.removeClass('touched');\n $(document).off('touchmove.liveSync');\n });\n });\n menuIcon.click(() => window.reloadApp());\n $('body').append(this.$ele);\n }\n\n public render() {\n this.setPosition();\n if (this.settings.enabled) {\n this.renderButton();\n } else if (this.settings.show) {\n this.showConfirmation();\n }\n this.listenForShowEvent();\n }\n}","import { NgModule } from '@angular/core';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\n\n\nimport { BasicModule } from '@wm/mobile/components/basic';\nimport { SearchModule } from '@wm/mobile/components/basic/search';\n\nimport { SegmentedControlModule } from '@wm/mobile/components/containers/segmented-control';\n\nimport { MediaListModule } from '@wm/mobile/components/data/media-list';\n\nimport { BarcodeScannerModule } from '@wm/mobile/components/device/barcode-scanner';\nimport { CameraModule } from '@wm/mobile/components/device/camera';\n\nimport { FileUploadModule } from '@wm/mobile/components/input/file-upload';\n\nimport { PageModule } from '@wm/mobile/components/page';\nimport { LeftPanelModule } from '@wm/mobile/components/page/left-panel';\nimport { MobileNavbarModule } from '@wm/mobile/components/page/mobile-navbar';\nimport { TabBarModule } from '@wm/mobile/components/page/tab-bar';\nimport { LiveSyncInterceptor } from './services/live-sync.service';\n\nexport const MOBILE_COMPONENT_MODULES_FOR_ROOT = [\n BasicModule,\n SearchModule,\n SegmentedControlModule,\n MediaListModule,\n BarcodeScannerModule,\n CameraModule,\n FileUploadModule,\n PageModule,\n LeftPanelModule,\n MobileNavbarModule,\n TabBarModule\n];\n\n@NgModule({\n providers: [{\n provide: HTTP_INTERCEPTORS,\n useClass: LiveSyncInterceptor,\n multi: true\n }]\n})\nexport class MobileRuntimeDynamicModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n\nexport {LiveSyncInterceptor as ɵa} from './services/live-sync.service';"],"names":["hasCordova","transformFileURI","Injectable","App","DeviceService","NetworkService","File","BasicModule","SearchModule","SegmentedControlModule","MediaListModule","BarcodeScannerModule","CameraModule","FileUploadModule","PageModule","LeftPanelModule","MobileNavbarModule","TabBarModule","NgModule","HTTP_INTERCEPTORS"],"mappings":";;;;;;;QA8CI,6BAAoB,GAAQ,EAChB,aAA4B,EAC5B,cAA8B,EAC9B,IAAU;YAHtB,mBA8CC;YA9CmB,QAAG,GAAH,GAAG,CAAK;YAChB,kBAAa,GAAb,aAAa,CAAe;YAC5B,mBAAc,GAAd,cAAc,CAAgB;YAC9B,SAAI,GAAJ,IAAI,CAAM;YAvBd,eAAU,GAAa,EAAE,CAAC;YAC1B,gBAAW,GAAG,EAAE,CAAC;YACjB,gBAAW,GAAG,EAAE,CAAC;YACjB,eAAU,GAAG,EAAE,CAAC;YAChB,wBAAmB,GAAG;gBAC1B,aAAa,EAAE,aAAa;aAC/B,CAAC;YACM,uBAAkB,GAAG;gBACzB,uCAAuC,EAAE,sBAAsB;gBAC/D,mCAAmC,EAAE,wBAAwB;aAChE,CAAC;YACM,yBAAoB,GAAG,mDAAmD,CAAC;YAC3E,sBAAiB,GAAG,KAAK,CAAC;YAC1B,aAAQ,GAAa;gBACzB,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,IAAI;gBACd,IAAI,EAAE,IAAI;gBACV,cAAc,EAAE,IAAI;aACvB,CAAC;YAMM,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAIA,eAAU,EAAE,CAAC;YAC/D,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,mCAAmC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,mCAAmC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxE,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,kCAAkC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtE,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBACzB,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,IAAI,IAAI,CAAC,aAAa,CAAC,uBAAuB,EAAE,EAAE;oBAC9C,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC;wBAChC,OAAI,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;wBACnC,IAAI,CAAC,OAAI,CAAC,cAAc,CAAC,WAAW,EAAE,EAAE;4BACpC,OAAO;yBACV;wBACD,OAAI,CAAC,QAAQ,EAAE,CAAC;wBAChB,IAAI,CAAC,OAAI,CAAC,WAAW,IAAI,CAAC,OAAI,CAAC,QAAQ,CAAC,cAAc,EAAE;4BACpD,OAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,UAAA,OAAO;gCAC1B,OAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,OAAO,CAAC;gCACvC,OAAI,CAAC,YAAY,EAAE,CAAC;6BACvB,CAAC,CAAC;yBACN;qBACJ,CAAC,CAAC;iBACN;gBACD,OAAO;aACV;YACD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE;gBACrC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC;gBAC1D,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,UAAA,CAAC;oBAC3C,OAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAI,CAAC,UAAU,GAAG,OAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;iBAC/E,CAAC,CAAC;gBACH,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChB,IAAI,CAAC,QAAQ,EAAE,CAAC;aACnB;iBAAM;gBACH,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,GAAG,eAAQ,CAAC;gBAC9C,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;gBACnC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;gBAC/B,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC;oBAChC,OAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,OAAI,CAAC,MAAM,EAAE,CAAC;iBACtD,CAAC,CAAC;aACN;SACR;QAEO,0CAAY,GAAZ;YACJ,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;aACpC;SACJ;QAEO,uCAAS,GAAT;YAAA,mBAaP;YAZI,MAAc,CAAC,QAAQ,GAAG,UAAC,IAAI;gBAC5B,IAAI,OAAI,CAAC,QAAQ,CAAC,OAAO,KAAK,CAAC,CAAC,IAAI;uBAC7B,CAAC,OAAI,CAAC,cAAc,CAAC,WAAW,EAAE,EAAE;oBACvC,OAAO;iBACV;gBACD,OAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC/B,OAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,UAAU,CAAC;oBACP,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;oBACrC,QAAQ,CAAC,MAAM,EAAE,CAAC;iBACrB,EAAE,GAAG,CAAC,CAAC;aACX,CAAC;SACL;QAEO,+DAAiC,GAAjC,UAAkC,GAAW;YACjD,IAAI,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,EAC7C,UAAU,GAAG,EAAE,EACf,SAAS,GAAG,CAAC,CAAC;YAClB,IAAI,OAAO,EAAE;gBACT,SAAS,GAAG,mBAAmB,CAAC,MAAM,CAAC;gBACvC,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;gBACnE,OAAO,mBAAmB,GAAG,UAAU,GAAG,cAAc,CAAC;aAC5D;YACD,OAAO,GAAG,CAAC;SACd;QAEM,uCAAS,GAAT,UAAU,OAAyB,EAAE,IAAiB;YACzD,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBACzB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;aAC/B;YACD,IAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;YACzC,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;YACtB,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;YAC3E,GAAG,GAAG,IAAI,CAAC,iCAAiC,CAAC,GAAG,CAAC,CAAC;YAClD,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;gBACtB,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;aAC1C;YACD,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;mBACnB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACtC,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,GAAG,CAAC;aACjC;YACD,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,EAAC,GAAG,EAAE,GAAG,EAAC,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;SAC/B;QAEO,4CAAc,GAAd;YAAA,mBA+BP;YA9BG,IAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC;YAC7C,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;gBAC/B,CAAC,CAAC,IAAI,CAAC;oBACH,GAAG,EAAE,OAAI,CAAC,WAAW,GAAG,YAAY;oBACpC,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,OAAO;oBAChB,KAAK,EAAE,MAAM;iBAChB,CAAC,CAAC;aACN,CAAC,CAAC,IAAI,CAAC,UAAC,WAAmB;gBACxB,IAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,GAAG,GAAG,GAAG,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC;gBACtD,IAAI,IAAI,GAAG,OAAI,CAAC,WAAW;qBACnB,QAAQ,CAAC,QAAQ,UAAK,QAAQ,CAAC,QAAQ,GAAG,IAAI,GAAG,QAAQ,CAAC,QAAU,CAAC,CAAC;gBAC9E,IAAI,WAAW,GAAG,IAAI,CAAC;gBACvB,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;oBAC/B,IAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAG,CAAC;oBACjD,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iBAC9D;gBACD,WAAW,IAAI,aAAa,CAAC;gBAC7B,IAAM,OAAO,GAAM,QAAQ,CAAC,QAAQ,UAAK,QAAQ,CAAC,QAAQ,GAAG,IAAI,GAAGC,qBAAgB,CAAC,QAAQ,GAAG,iBAAiB,CAAG,CAAC;gBACrH,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;gBAC7D,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,wDAE1B,OAAI,CAAC,WAAW,yEACa,OAAI,CAAC,WAAW,wEACjB,OAAO,yEACN,IAAI,QAAI,CAAC,CAAC;gBACzD,OAAO,OAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,iBAAiB,EAAE,WAAW,EAAE;oBACjE,OAAO,EAAE,IAAI;iBAChB,CAAC,CAAC,IAAI,CAAC,cAAO,OAAA,OAAO,GAAA,CAAC,CAAC;aAC3B,CAAC,CAAC;SACN;QAEO,wCAAU,GAAV;YAAA,mBAUP;YATG,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;gBAC/B,CAAC,CAAC,GAAG,CAAC,OAAI,CAAC,WAAW,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG;oBACrD,IAAM,OAAO,GAAG,EAAE,CAAC;oBACnB,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAS,CAAC;wBACjC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;qBACxD,CAAC,CAAC;oBACH,OAAO,CAAC,OAAO,CAAC,CAAC;iBACpB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACnB,CAAC,CAAC;SACN;QAEO,+CAAiB,GAAjB;YAAA,mBAQP;YAPG,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;iBACpC,IAAI,CAAC,cAAM,OAAA,OAAI,CAAC,UAAU,EAAE,GAAA,CAAC;iBAC7B,IAAI,CAAC,UAAA,OAAO;gBACT,IAAM,YAAY,GAAG,OAAI,CAAC,QAAQ,CAAC,cAAc,IAAI,EAAE,CAAC;gBACxD,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;qBACxB,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAA,CAAC,CAAC;aACtE,CAAC,CAAC;SACN;QAEO,oCAAM,GAAN;YACJ,OAAO,IAAI,CAAC,cAAc,EAAE;iBAC3B,IAAI,CAAC,UAAC,QAAQ;gBACX,YAAY,CAAC,OAAO,CAAC,+BAA+B,EAAE,MAAM,CAAC,CAAC;gBAC9D,YAAY,CAAC,OAAO,CAAC,gCAAgC,EAAE,MAAM,CAAC,CAAC;gBAC/D,cAAc,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;gBAE5C,UAAU,CAAC;oBACP,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;oBACrC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC;iBACnC,EAAE,IAAI,CAAC,CAAC;aACZ,CAAC,CAAC;SACN;QAEO,yCAAW,GAAX;;YAEJ,OAAO,MAAM,CAAC,cAAc,CAAC,CAAC;SACjC;QAEO,sCAAQ,GAAR;YAAA,mBAQP;YAPG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG;gBACd,IAAI,OAAI,CAAC,cAAc,CAAC,WAAW,EAAE,EAAC;oBAClC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;oBACrC,OAAI,CAAC,MAAM,EAAE,CAAC;iBACjB;aACJ,CAAC;YACF,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;SACzC;QAEO,6CAAe,GAAf;YACJ,IAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC;YACjC,IAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;YAChD,MAAM,CAAC,OAAO,CAAC,YAAY,GAAG,UAAC,KAAU,EAAE,KAAa,EAAE,GAAW;gBACjE,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;oBACrB,GAAG,GAAG,QAAQ,GAAG,GAAG,CAAC;iBACxB;gBACD,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;aACvD,CAAC;YACF,IAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;YAC1C,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,UAAC,KAAU,EAAE,KAAa,EAAE,GAAW;gBAC9D,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;oBACrB,GAAG,GAAG,QAAQ,GAAG,GAAG,CAAC;iBACxB;gBACD,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;aACpD,CAAC;SACL;QAEM,0CAAY,GAAZ;YACH,IAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;YAC7D,IAAI;gBACA,IAAI,CAAC,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;aAC7D;YAAC,OAAM,CAAC,EAAE;gBACP,IAAI,CAAC,YAAY,EAAE,CAAC;aACvB;SACJ;QAEM,0CAAY,GAAZ;YACH,cAAc,CAAC,OAAO,CAAC,sBAAsB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;SACjF;QAEM,sCAAQ,GAAR;YAAA,mBAoBN;YAnBG,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;gBACvB,IAAI,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,UAAC,OAAO;oBAClC,IAAI,OAAO,EAAE;wBACT,IAAI,eAAe,CAAC;4BAChB,KAAK,EAAE,mBAAmB;4BAC1B,IAAI,EAAE,mFAAmF;gCACzF,oEAAoE;4BACpE,SAAS,EAAE,4CAA4C;4BACvD,OAAO,EAAE,CAAC;oCACN,KAAK,EAAE,QAAQ;oCACf,OAAO,EAAE,IAAI;iCAChB,CAAC;yBACL,CAAC,CAAC,MAAM,EAAE,CAAC;qBACf;iBACJ,CAAC,CAAC;aACN;YACD,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACjC,OAAI,CAAC,YAAY,EAAE,CAAC;aACvB,CAAC,CAAC,MAAM,EAAE,CAAC;SACf;;;;gBAlQJC,iBAAU;;;gBAhBFC,QAAG;gBACHC,oBAAa;gBAAEC,qBAAc;gBAH7BC,QAAI;;IAwRb;QAGI,yBAAmB,OASlB;YATkB,YAAO,GAAP,OAAO,CASzB;YAXO,SAAI,GAAQ,CAAC,CAAC,YAAY,CAAC,CAAC;SAanC;QAED,iCAAO,GAAP;YACI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;SACtB;QAED,gCAAM,GAAN;YACI,IAAI,CAAC,IAAI,GAAG,CAAC,CACT,4JAE2B,IAAI,CAAC,OAAO,CAAC,SAAS,qIAG/B,IAAI,CAAC,OAAO,CAAC,KAAK,6IAGlB,IAAI,CAAC,OAAO,CAAC,IAAI,wIAGjB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,UAAC,CAAC;gBACzB,OAAO,CAAC,GAAG,oKAGmB,CAAC,CAAC,OAAO,GAAG,2BAA2B,GAAG,EAAE,sDAChE,CAAC,CAAC,KAAK,gDACP,GAAG,EAAE,CAAC;aACnB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,uGAI1B,CACJ,CAAC;YACF,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAM,KAAK,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,UAAS,KAAK;gBACnD,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE;oBAClB,IAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;oBACnD,IAAI,MAAM,EAAE;wBACR,MAAM,CAAC,KAAK,CAAC,CAAC;qBACjB;oBACD,KAAK,CAAC,OAAO,EAAE,CAAC;iBACnB,CAAC,CAAC;aACN,CAAC,CAAC;SACN;8BACJ;KAAA,IAAA;IAED;QAOI,2BAAoB,QAAkB,EAAU,QAAoB;YAAhD,aAAQ,GAAR,QAAQ,CAAU;YAAU,aAAQ,GAAR,QAAQ,CAAY;YAN5D,SAAI,GAAG,CAAC,CACZ,gJAGO,CAAC,CAAC;SAIZ;QAEO,uCAAW,GAAX;YACJ,IAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YAC1D,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACxC,IAAG,QAAQ,EAAE;gBACT,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;gBAC3C,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;aAC5C;SACJ;QAEO,8CAAkB,GAAlB;YAAA,mBAWP;YAVG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE;gBACzB,IAAM,OAAO,GAAG,UAAU,CAAC;oBACvB,OAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;oBAC1B,OAAI,CAAC,QAAQ,EAAE,CAAC;oBAChB,OAAI,CAAC,gBAAgB,EAAE,CAAC;iBAC3B,EAAE,IAAI,CAAC,CAAC;gBACT,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE;oBACvB,YAAY,CAAC,OAAO,CAAC,CAAC;iBACzB,CAAC,CAAC;aACN,CAAC,CAAC;SACN;QAEO,4CAAgB,GAAhB;YAAA,mBAoBP;YAnBG,IAAI,eAAe,CAAC;gBAChB,KAAK,EAAE,mBAAmB;gBAC1B,IAAI,EAAE,yEAAyE;gBAC/E,SAAS,EAAE,wBAAwB;gBACnC,OAAO,EAAE,CAAC;wBACN,KAAK,EAAE,IAAI;wBACX,MAAM,EAAE;4BACJ,OAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC;4BAC3B,OAAI,CAAC,QAAQ,EAAE,CAAC;4BAChB,OAAI,CAAC,YAAY,EAAE,CAAC;yBACvB;qBACJ,EAAE;wBACC,KAAK,EAAE,KAAK;wBACZ,MAAM,EAAE;4BACJ,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;yBACzB;wBACD,OAAO,EAAE,IAAI;qBAChB,CAAC;aACL,CAAC,CAAC,MAAM,EAAE,CAAC;SACf;QAAA,CAAC;QAEM,wCAAY,GAAZ;YACJ,IAAI,eAAe,CAAC;gBAChB,KAAK,EAAE,EAAE;gBACT,IAAI,EAAE,2DAA2D;gBACjE,SAAS,EAAE,+BAA+B;gBAC1C,OAAO,EAAE,CAAC;wBACN,KAAK,EAAE,QAAQ;wBACf,OAAO,EAAE,IAAI;qBAChB,CAAC;aACL,CAAC,CAAC,MAAM,EAAE,CAAC;SACf;QAAA,CAAC;QAEM,wCAAY,GAAZ;YAAA,mBA2BP;YA1BG,IAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YAC1D,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,UAAC,KAAK;gBAC7B,KAAK,CAAC,eAAe,EAAE,CAAC;gBACxB,IAAI,QAAQ,GAAG,IAAI,CAAC;gBACpB,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,oBAAoB,EAAE,UAAC,KAAK;oBACvC,IAAI,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC/C,IAAI,SAAS,IAAI,SAAS,CAAC,KAAK,EAAE;wBAC9B,OAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG;4BACrB,IAAI,EAAE,SAAS,CAAC,KAAK;4BACrB,GAAG,EAAE,SAAS,CAAC,KAAK;yBACvB,CAAC;qBACL;oBACD,OAAI,CAAC,WAAW,EAAE,CAAC;oBACnB,IAAI,QAAQ,EAAE;wBACV,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;wBAC7B,QAAQ,GAAG,KAAK,CAAC;qBACpB;iBACJ,CAAC,CAAC;gBACH,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,UAAC,KAAK;oBAC9B,OAAI,CAAC,QAAQ,EAAE,CAAC;oBAChB,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;oBAChC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;iBACzC,CAAC,CAAC;aACN,CAAC,CAAC;YACH,QAAQ,CAAC,KAAK,CAAC,cAAM,OAAA,MAAM,CAAC,SAAS,EAAE,GAAA,CAAC,CAAC;YACzC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC/B;QAEM,kCAAM,GAAN;YACH,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;gBACvB,IAAI,CAAC,YAAY,EAAE,CAAC;aACvB;iBAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;gBAC3B,IAAI,CAAC,gBAAgB,EAAE,CAAC;aAC3B;YACD,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAC7B;gCACJ;KAAA;;QC5aY,iCAAiC,GAAG;QAC7CC,iBAAW;QACXC,mBAAY;QACZC,uCAAsB;QACtBC,yBAAe;QACfC,mCAAoB;QACpBC,mBAAY;QACZC,2BAAgB;QAChBC,eAAU;QACVC,yBAAe;QACfC,+BAAkB;QAClBC,mBAAY;MACd;;QASF;;;;;gBAPCC,eAAQ,SAAC;oBACN,SAAS,EAAE,CAAC;4BACR,OAAO,EAAEC,sBAAiB;4BAC1B,QAAQ,EAAE,mBAAmB;4BAC7B,KAAK,EAAE,IAAI;yBACd,CAAC;iBACL;;;IC1CD;;;;;;;;;;;;;;"}
@@ -127,15 +127,16 @@ export class LiveSyncInterceptor {
127
127
  error: reject
128
128
  });
129
129
  }).then((fileContent) => {
130
+ const port = location.port ? ':' + location.port : '';
130
131
  let path = this.localAppUrl ||
131
- (`${location.protocol}//${location.hostname}${location.pathname}`);
132
+ (`${location.protocol}//${location.hostname}${port}${location.pathname}`);
132
133
  let cordovaPath = path;
133
134
  if (cordovaPath.endsWith('.html')) {
134
135
  const splits = cordovaPath.split('/').slice(0);
135
136
  cordovaPath = splits.slice(0, splits.length - 1).join('/');
136
137
  }
137
138
  cordovaPath += '/cordova.js';
138
- const mAppUrl = `${location.protocol}//${location.hostname}${transformFileURI(localDir + 'live-index.html')}`;
139
+ const mAppUrl = `${location.protocol}//${location.hostname}${port}${transformFileURI(localDir + 'live-index.html')}`;
139
140
  fileContent = fileContent.replace('cordova.js', cordovaPath);
140
141
  fileContent = fileContent.replace('<head>', `
141
142
  <head>
@@ -400,4 +401,4 @@ class LiveSyncComponent {
400
401
  this.listenForShowEvent();
401
402
  }
402
403
  }
403
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS1zeW5jLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tb2JpbGUvcnVudGltZS1keW5hbWljL3NyYy9zZXJ2aWNlcy9saXZlLXN5bmMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUV6RCxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBZ0JoRSxNQUFNLE9BQU8sbUJBQW1CO0lBc0I1QixZQUFvQixHQUFRLEVBQ2hCLGFBQTRCLEVBQzVCLGNBQThCLEVBQzlCLElBQVU7UUFIRixRQUFHLEdBQUgsR0FBRyxDQUFLO1FBQ2hCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixTQUFJLEdBQUosSUFBSSxDQUFNO1FBdkJkLGVBQVUsR0FBYSxFQUFFLENBQUM7UUFDMUIsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQix3QkFBbUIsR0FBRztZQUMxQixhQUFhLEVBQUUsYUFBYTtTQUMvQixDQUFDO1FBQ00sdUJBQWtCLEdBQUc7WUFDekIsdUNBQXVDLEVBQUUsc0JBQXNCO1lBQy9ELG1DQUFtQyxFQUFFLHdCQUF3QjtTQUNoRSxDQUFDO1FBQ00seUJBQW9CLEdBQUcsbURBQW1ELENBQUM7UUFDM0Usc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzFCLGFBQVEsR0FBYTtZQUN6QixPQUFPLEVBQUUsS0FBSztZQUNkLFFBQVEsRUFB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bkIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTtZQUN2QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDdkI7YUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFO1lBQzNCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQzNCO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDOUIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBIdHRwRXZlbnQsIEh0dHBIYW5kbGVyLCBIdHRwSW50ZXJjZXB0b3IsIEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBGaWxlIH0gZnJvbSAnQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL2ZpbGUvbmd4JztcblxuaW1wb3J0IHsgQXBwLCBoYXNDb3Jkb3ZhLCB0cmFuc2Zvcm1GaWxlVVJJIH0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgRGV2aWNlU2VydmljZSwgTmV0d29ya1NlcnZpY2UgfSBmcm9tICdAd20vbW9iaWxlL2NvcmUnO1xuXG5kZWNsYXJlIGNvbnN0IHdpbmRvdywgbG9jYXRpb24sIGNvcmRvdmE7XG5kZWNsYXJlIGNvbnN0ICQsIF87XG5cbmludGVyZmFjZSBTZXR0aW5ncyB7XG4gICAgZW5hYmxlZDogYm9vbGVhbixcbiAgICBwb3NpdGlvbjoge1xuICAgICAgICBsZWZ0OiBudW1iZXIsXG4gICAgICAgIHRvcDogbnVtYmVyLFxuICAgIH0sXG4gICAgc2hvdzogYm9vbGVhbixcbiAgICBjb3Jkb3ZhUGx1Z2luczoge31cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIExpdmVTeW5jSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xuXG4gICAgcHJpdmF0ZSB1cmxzVG9Ta2lwOiBzdHJpbmdbXSA9IFtdO1xuICAgIHByaXZhdGUgZGVwbG95ZWRVcmwgPSAnJztcbiAgICBwcml2YXRlIGxvY2FsQXBwVXJsID0gJyc7XG4gICAgcHJpdmF0ZSBzeW5jQXBwVXJsID0gJyc7XG4gICAgcHJpdmF0ZSB1cmxzVG9Mb2FkRnJvbUxvY2FsID0ge1xuICAgICAgICAnY29uZmlnLmpzb24nOiAnY29uZmlnLmpzb24nLFxuICAgIH07XG4gICAgcHJpdmF0ZSB1cmxzVG9Mb2FkRnJvbUxpdmUgPSB7XG4gICAgICAgICdtZXRhZGF0YS9hcHAvc2VydmljZS1kZWZpbml0aW9ucy5qc29uJzogJ3NlcnZpY2VzL3NlcnZpY2VkZWZzJyxcbiAgICAgICAgJ21ldGFkYXRhL2FwcC9zZWN1cml0eS1jb25maWcuanNvbic6ICdzZXJ2aWNlcy9zZWN1cml0eS9pbmZvJ1xuICAgIH07XG4gICAgcHJpdmF0ZSBwcmVmYWJTZXJ2aWNlUGF0dGVybiA9IC9ebWV0YWRhdGFcXC9wcmVmYWJzXFwvLipcXC9zZXJ2aWNlLWRlZmluaXRpb25zLmpzb24kLztcbiAgICBwcml2YXRlIGlzTGl2ZVN5bmNFbmFibGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBzZXR0aW5nczogU2V0dGluZ3MgPSB7XG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBwb3NpdGlvbjogbnVsbCxcbiAgICAgICAgc2hvdzogdHJ1ZSxcbiAgICAgICAgY29yZG92YVBsdWdpbnM6IG51bGxcbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBhcHA6IEFwcCxcbiAgICAgICAgcHJpdmF0ZSBkZXZpY2VTZXJ2aWNlOiBEZXZpY2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5ldHdvcmtTZXJ2aWNlOiBOZXR3b3JrU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBmaWxlOiBGaWxlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRTZXR0aW5ncygpO1xuICAgICAgICAgICAgdGhpcy5pc0xpdmVTeW5jRW5hYmxlZCA9IHRoaXMuc2V0dGluZ3MuZW5hYmxlZCAmJiBoYXNDb3Jkb3ZhKCk7XG4gICAgICAgICAgICB0aGlzLmRlcGxveWVkVXJsID0gJCgnbWV0YVtuYW1lPVwibGl2ZVN5bmMuZGVwbG95ZWRVcmxcIl0nKS5hdHRyKCd2YWx1ZScpO1xuICAgICAgICAgICAgdGhpcy5sb2NhbEFwcFVybCA9ICQoJ21ldGFbbmFtZT1cImxpdmVTeW5jLmxvY2FsQXBwVXJsXCJdJykuYXR0cigndmFsdWUnKTtcbiAgICAgICAgICAgIHRoaXMuc3luY0FwcFVybCA9ICQoJ21ldGFbbmFtZT1cImxpdmVTeW5jLnN5bmNBcHBVcmxcIl0nKS5hdHRyKCd2YWx1ZScpO1xuICAgICAgICAgICAgdGhpcy5kZWZpbmVBUEkoKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0xpdmVTeW5jRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ29Ub0xvY2FsQXBwKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGV2aWNlU2VydmljZS5pc0FwcENvbm5lY3RlZFRvUHJldmlldygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlU2VydmljZS53aGVuUmVhZHkoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwbG95ZWRVcmwgPSBhcHAuZGVwbG95ZWRVcmw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubmV0d29ya1NlcnZpY2UuaXNDb25uZWN0ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVUkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5sb2NhbEFwcFVybCAmJiAhdGhpcy5zZXR0aW5ncy5jb3Jkb3ZhUGx1Z2lucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0UGx1Z2lucygpLnRoZW4ocGx1Z2lucyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MuY29yZG92YVBsdWdpbnMgPSBwbHVnaW5zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc3luY0FwcFVybCAmJiB0aGlzLmRlcGxveWVkVXJsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2VTZXJ2aWNlLmdldENvbmZpZygpLmJhc2VVcmwgPSB0aGlzLmRlcGxveWVkVXJsO1xuICAgICAgICAgICAgICAgIHRoaXMucGF0Y2hTUUxpdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhdGNoSGlzdG9yeUFwaSgpO1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMudXJsc1RvTG9hZEZyb21Mb2NhbCkuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cmxzVG9Mb2FkRnJvbUxvY2FsW2tdID0gdGhpcy5zeW5jQXBwVXJsICsgdGhpcy51cmxzVG9Mb2FkRnJvbUxvY2FsW2tdO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMucGF0Y2hBcHAoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclVJKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5uYXZpZ2F0b3Iuc3BsYXNoc2NyZWVuLmhpZGUgPSAoKSA9PiB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlcGxveWVkVXJsID0gYXBwLmRlcGxveWVkVXJsO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMaXZlU3luY0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZVNlcnZpY2Uud2hlblJlYWR5KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV0d29ya1NlcnZpY2UuaXNDb25uZWN0ZWQoKSAmJiB0aGlzLmxhdW5jaCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ29Ub0xvY2FsQXBwKCkge1xuICAgICAgICBpZiAodGhpcy5sb2NhbEFwcFVybCkge1xuICAgICAgICAgICAgbG9jYXRpb24uaHJlZiA9IHRoaXMubG9jYWxBcHBVcmw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGRlZmluZUFQSSgpIHtcbiAgICAgICAgKHdpbmRvdyBhcyBhbnkpLmxpdmVTeW5jID0gKGZsYWcpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmVuYWJsZWQgPT09ICEhZmxhZyBcbiAgICAgICAgICAgICAgICB8fCAhdGhpcy5uZXR3b3JrU2VydmljZS5pc0Nvbm5lY3RlZCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5lbmFibGVkID0gISFmbGFnO1xuICAgICAgICAgICAgdGhpcy5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5uYXZpZ2F0b3Iuc3BsYXNoc2NyZWVuLnNob3coKTtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0cmFuc2Zvcm1QcmVmYWJTZXJ2aWNlZGVmaW5pdGlvbnModXJsOiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IGlzVmFsaWQgPSB0aGlzLnByZWZhYlNlcnZpY2VQYXR0ZXJuLnRlc3QodXJsKSxcbiAgICAgICAgICAgIHByZWZhYk5hbWUgPSAnJyxcbiAgICAgICAgICAgIHByZWZhYkxvYyA9IDA7XG4gICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICBwcmVmYWJMb2MgPSAnbWV0YWRhdGEvcHJlZmFicy8nLmxlbmd0aDtcbiAgICAgICAgICAgIHByZWZhYk5hbWUgPSB1cmwuc3Vic3RyaW5nKHByZWZhYkxvYywgdXJsLmluZGV4T2YoJy8nLCBwcmVmYWJMb2MpKTtcbiAgICAgICAgICAgIHJldHVybiAnc2VydmljZXMvcHJlZmFicy8nICsgcHJlZmFiTmFtZSArICcvc2VydmljZWRlZnMnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuXG4gICAgcHVibGljIGludGVyY2VwdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzTGl2ZVN5bmNFbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVwbG95ZWRVcmwgPSB0aGlzLmFwcC5kZXBsb3llZFVybDtcbiAgICAgICAgbGV0IHVybCA9IHJlcXVlc3QudXJsO1xuICAgICAgICB1cmwgPSB0aGlzLnVybHNUb0xvYWRGcm9tTGl2ZVt1cmxdIHx8IHRoaXMudXJsc1RvTG9hZEZyb21Mb2NhbFt1cmxdIHx8IHVybDtcbiAgICAgICAgdXJsID0gdGhpcy50cmFuc2Zvcm1QcmVmYWJTZXJ2aWNlZGVmaW5pdGlvbnModXJsKTtcbiAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKCcvLycpKSB7XG4gICAgICAgICAgICB1cmwgPSBkZXBsb3llZFVybC5zcGxpdCgnLy8nKVswXSArIHVybDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXJsLmluZGV4T2YoJzovLycpIDwgMFxuICAgICAgICAgICAgfHwgdGhpcy51cmxzVG9Ta2lwLmluZGV4T2YodXJsKSA+PSAwKSB7XG4gICAgICAgICAgICB1cmwgPSBkZXBsb3llZFVybCArICcvJyArIHVybDtcbiAgICAgICAgfVxuICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdC5jbG9uZSh7dXJsOiB1cmx9KTtcbiAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFzaFVwSHRtbEZpbGUoKSB7XG4gICAgICAgIGNvbnN0IGxvY2FsRGlyID0gY29yZG92YS5maWxlLmNhY2hlRGlyZWN0b3J5O1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICB1cmw6IHRoaXMuZGVwbG95ZWRVcmwgKyAnaW5kZXguaHRtbCcsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdodG1sJyxcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiByZXNvbHZlLFxuICAgICAgICAgICAgICAgIGVycm9yOiByZWplY3RcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KS50aGVuKChmaWxlQ29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGF0aCA9IHRoaXMubG9jYWxBcHBVcmwgfHwgXG4gICAgICAgICAgICAgICAgKGAke2xvY2F0aW9uLnByb3RvY29sfS8vJHtsb2NhdGlvbi5ob3N0bmFtZX0ke2xvY2F0aW9uLnBhdGhuYW1lfWApO1xuICAgICAgICAgICAgbGV0IGNvcmRvdmFQYXRoID0gcGF0aDtcbiAgICAgICAgICAgIGlmIChjb3Jkb3ZhUGF0aC5lbmRzV2l0aCgnLmh0bWwnKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwbGl0cyA9IGNvcmRvdmFQYXRoLnNwbGl0KCcvJykuc2xpY2UoMCwgKTtcbiAgICAgICAgICAgICAgICBjb3Jkb3ZhUGF0aCA9IHNwbGl0cy5zbGljZSgwLCBzcGxpdHMubGVuZ3RoIC0gMSkuam9pbignLycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29yZG92YVBhdGggKz0gJy9jb3Jkb3ZhLmpzJztcbiAgICAgICAgICAgIGNvbnN0IG1BcHBVcmwgPSBgJHtsb2NhdGlvbi5wcm90b2NvbH0vLyR7bG9jYXRpb24uaG9zdG5hbWV9JHt0cmFuc2Zvcm1GaWxlVVJJKGxvY2FsRGlyICsgJ2xpdmUtaW5kZXguaHRtbCcpfWA7XG4gICAgICAgICAgICBmaWxlQ29udGVudCA9IGZpbGVDb250ZW50LnJlcGxhY2UoJ2NvcmRvdmEuanMnLCBjb3Jkb3ZhUGF0aCk7XG4gICAgICAgICAgICBmaWxlQ29udGVudCA9IGZpbGVDb250ZW50LnJlcGxhY2UoJzxoZWFkPicsIGBcbiAgICAgICAgICAgIDxoZWFkPlxuICAgICAgICAgICAgICAgIDxiYXNlIGhyZWY9XCIke3RoaXMuZGVwbG95ZWRVcmx9XCI+XG4gICAgICAgICAgICAgICAgPG1ldGEgbmFtZT1cImxpdmVTeW5jLmRlcGxveWVkVXJsXCIgdmFsdWU9XCIke3RoaXMuZGVwbG95ZWRVcmx9XCI+XG4gICAgICAgICAgICAgICAgPG1ldGEgbmFtZT1cImxpdmVTeW5jLnN5bmNBcHBVcmxcIiB2YWx1ZT1cIiR7bUFwcFVybH1cIj5cbiAgICAgICAgICAgICAgICA8bWV0YSBuYW1lPVwibGl2ZVN5bmMubG9jYWxBcHBVcmxcIiB2YWx1ZT1cIiR7cGF0aH1cIj5gKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbGUud3JpdGVGaWxlKGxvY2FsRGlyLCAnbGl2ZS1pbmRleC5odG1sJywgZmlsZUNvbnRlbnQsIHtcbiAgICAgICAgICAgICAgICByZXBsYWNlOiB0cnVlXG4gICAgICAgICAgICB9KS50aGVuKCgpICA9PiBtQXBwVXJsKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQbHVnaW5zKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgJC5nZXQodGhpcy5kZXBsb3llZFVybCArICdjb25maWcueG1sJykuZG9uZShmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGx1Z2lucyA9IHt9O1xuICAgICAgICAgICAgICAgICQocmVzKS5maW5kKCdwbHVnaW4nKS5lYWNoKGZ1bmN0aW9uKHApIHsgXG4gICAgICAgICAgICAgICAgICAgIHBsdWdpbnNbJCh0aGlzKS5hdHRyKCduYW1lJyldID0gJCh0aGlzKS5hdHRyKCdzcGVjJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShwbHVnaW5zKTtcbiAgICAgICAgICAgIH0pLmZhaWwocmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNQbHVnaW5zQ2hhbmdlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGV2aWNlU2VydmljZS53aGVuUmVhZHkoKVxuICAgICAgICAudGhlbigoKSA9PiB0aGlzLmdldFBsdWdpbnMoKSlcbiAgICAgICAgLnRoZW4ocGx1Z2lucyA9PiB7XG4gICAgICAgICAgICBjb25zdCBwbHVnaW5zSW5BcGsgPSB0aGlzLnNldHRpbmdzLmNvcmRvdmFQbHVnaW5zIHx8IHt9O1xuICAgICAgICAgICAgcmV0dXJuICEhT2JqZWN0LmtleXMocGx1Z2lucylcbiAgICAgICAgICAgICAgICAuZmluZChrID0+ICFwbHVnaW5zSW5BcGtba10gfHwgcGx1Z2luc0luQXBrW2tdICE9PSBwbHVnaW5zW2tdKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsYXVuY2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hc2hVcEh0bWxGaWxlKClcbiAgICAgICAgLnRoZW4oKGZpbGVQYXRoKSA9PiB7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnV00uTmV0d29ya1NlcnZpY2UuaXNDb25uZWN0ZWQnLCAndHJ1ZScpO1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ1dNLk5ldHdvcmtTZXJ2aWNlLl9hdXRvQ29ubmVjdCcsICd0cnVlJyk7XG4gICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdkZWJ1Z01vZGUnLCAndHJ1ZScpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB3aW5kb3cubmF2aWdhdG9yLnNwbGFzaHNjcmVlbi5zaG93KCk7XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBmaWxlUGF0aDtcbiAgICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhdGNoU1FMaXRlKCkge1xuICAgICAgICAvLyBPZmZsaW5lIHNxbCBpcyBub3Qgc3VwcG9ydGVkLlxuICAgICAgICBkZWxldGUgd2luZG93WydTUUxpdGVQbHVnaW4nXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhdGNoQXBwKCkge1xuICAgICAgICB0aGlzLmFwcC5yZWxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5uZXR3b3JrU2VydmljZS5pc0Nvbm5lY3RlZCgpKXtcbiAgICAgICAgICAgICAgICB3aW5kb3cubmF2aWdhdG9yLnNwbGFzaHNjcmVlbi5zaG93KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXVuY2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgd2luZG93WydyZWxvYWRBcHAnXSA9IHRoaXMuYXBwLnJlbG9hZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhdGNoSGlzdG9yeUFwaSgpIHtcbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLnN5bmNBcHBVcmw7XG4gICAgICAgIGNvbnN0IG9yaWdSZXBsYWNlID0gd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlO1xuICAgICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUgPSAoc3RhdGU6IGFueSwgdGl0bGU6IHN0cmluZywgdXJsOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGlmICh1cmwuc3RhcnRzV2l0aCgnIycpKSB7XG4gICAgICAgICAgICAgICAgdXJsID0gbG9jYXRpb24gKyB1cmw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcmlnUmVwbGFjZS5jYWxsKHdpbmRvdy5oaXN0b3J5LCBzdGF0ZSwgdGl0bGUsIHVybCk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG9yaWdQdXNoID0gd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlO1xuICAgICAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUgPSAoc3RhdGU6IGFueSwgdGl0bGU6IHN0cmluZywgdXJsOiBzdHJpbmcpID0+ICB7XG4gICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJyMnKSkge1xuICAgICAgICAgICAgICAgIHVybCA9IGxvY2F0aW9uICsgdXJsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3JpZ1B1c2guY2FsbCh3aW5kb3cuaGlzdG9yeSwgc3RhdGUsIHRpdGxlLCB1cmwpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2FkU2V0dGluZ3MoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnd20ubGl2ZVN5bmMuc2V0dGluZ3MnKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MgPSB2YWx1ZSA/IEpTT04ucGFyc2UodmFsdWUpIDogdGhpcy5zZXR0aW5ncztcbiAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICB0aGlzLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNhdmVTZXR0aW5ncygpIHtcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnd20ubGl2ZVN5bmMuc2V0dGluZ3MnLCBKU09OLnN0cmluZ2lmeSh0aGlzLnNldHRpbmdzKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbmRlclVJKCkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmhhc1BsdWdpbnNDaGFuZ2VkKCkudGhlbigoY2hhbmdlZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ldyBEaWFsb2dDb21wb25lbnQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdSZXF1aXJlIG5ldyBidWlsZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmZvOiAnQ29yZG92YSBQbHVnaW5zIGluIHRoaXMgYXBwIGRvIG5vdCBtYXRjaCB3aXRoIGNvbmZpZ3VyYXRpb24gb2YgcHJvamVjdCBpbiBTdHVkaW8uJyArIFxuICAgICAgICAgICAgICAgICAgICAgICAgJyBTbywgbmV3IENvcmRvdmEgQnVpbGQgaXMgcmVxdWlyZWQgZm9yIExpdmUgU3luYyB0byB3b3JrIHByb3Blcmx5LicsXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uQ2xhc3M6ICdmYSBmYS13YXJuaW5nIGZhLTR4IGxpdmUtc3luYy13YXJuaW5nLWljb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ0dvdCBpdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWFyeTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICAgICAgfSkucmVuZGVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbmV3IExpdmVTeW5jQ29tcG9uZW50KHRoaXMuc2V0dGluZ3MsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgIH0pLnJlbmRlcigpO1xuICAgIH1cblxufVxuXG5jbGFzcyBEaWFsb2dDb21wb25lbnQge1xuICAgIHByaXZhdGUgJGVsZTogYW55ID0gJCgnPGRpdj48ZGl2PicpO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIG9wdGlvbnM6IHtcbiAgICAgICAgdGl0bGU/IDogc3RyaW5nLFxuICAgICAgICBpbmZvPyA6IHN0cmluZyxcbiAgICAgICAgaWNvbkNsYXNzPzogc3RyaW5nLFxuICAgICAgICBhY3Rpb25zPyA6IHtcbiAgICAgICAgICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgICAgICAgICBhY3Rpb24/OiAoZGlhbG9nOiBEaWFsb2dDb21wb25lbnQpID0+IHZvaWQsXG4gICAgICAgICAgICBwcmltYXJ5PzogYm9vbGVhblxuICAgICAgICB9W11cbiAgICB9KSB7XG4gICAgICAgIFxuICAgIH1cblxuICAgIGRpc21pc3MoKSB7XG4gICAgICAgIHRoaXMuJGVsZS5yZW1vdmUoKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIHRoaXMuJGVsZSA9ICQoXG4gICAgICAgICAgICBgPGRpdiBjbGFzcz1cImxpdmUtc3luYy1tb2RhbCBsaXZlLXN5bmMtY29udHJvbFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGl2ZS1zeW5jLWluZm8tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIiR7dGhpcy5vcHRpb25zLmljb25DbGFzc31cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxpdmUtc3luYy10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5vcHRpb25zLnRpdGxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxpdmUtc3luYy1kZXNjcmlwdGlvblwiPiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMub3B0aW9ucy5pbmZvfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXZlLXN5bmMtYWN0aW9uLXBhbmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLm9wdGlvbnMuYWN0aW9ucy5tYXAoKGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPyBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGl2ZS1zeW5jLWFjdGlvbiAke2EucHJpbWFyeSA/ICcgbGl2ZS1zeW5jLXByaW1hcnktYWN0aW9uJyA6ICcnfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7YS50aXRsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+YCA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmpvaW4oJycpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgYFxuICAgICAgICApO1xuICAgICAgICAkKCdib2R5JykuYXBwZW5kKHRoaXMuJGVsZSk7XG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcbiAgICAgICAgdGhpcy4kZWxlLmZpbmQoJy5saXZlLXN5bmMtYWN0aW9uJykuZWFjaChmdW5jdGlvbihpbmRleCkge1xuICAgICAgICAgICAgJCh0aGlzKS5iaW5kKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb24gPSBfdGhpcy5vcHRpb25zLmFjdGlvbnNbaW5kZXhdLmFjdGlvbjtcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbihfdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF90aGlzLmRpc21pc3MoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmNsYXNzIExpdmVTeW5jQ29tcG9uZW50IHtcbiAgICBwcml2YXRlICRlbGUgPSAkKFxuICAgICAgICBgPGRpdiBjbGFzcz1cImxpdmUtc3luYy1jb250cm9sXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibGl2ZS1zeW5jLWNvbnRyb2wtYnRuXCIgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PmApO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzZXR0aW5nczogU2V0dGluZ3MsIHByaXZhdGUgb25DaGFuZ2U6ICgpID0+IHZvaWQpIHtcblxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UG9zaXRpb24oKSB7XG4gICAgICAgIGNvbnN0IG1lbnVJY29uID0gdGhpcy4kZWxlLmZpbmQoJy5saXZlLXN5bmMtY29udHJvbC1idG4nKTtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnNldHRpbmdzLnBvc2l0aW9uO1xuICAgICAgICBpZihwb3NpdGlvbikge1xuICAgICAgICAgICAgbWVudUljb24uY3NzKCdsZWZ0JywgcG9zaXRpb24ubGVmdCArICdweCcpO1xuICAgICAgICAgICAgbWVudUljb24uY3NzKCd0b3AnLCBwb3NpdGlvbi50b3AgKyAncHgnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbGlzdGVuRm9yU2hvd0V2ZW50KCkge1xuICAgICAgICAkKCdib2R5JykuYmluZCgndG91Y2hzdGFydCcsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVySWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdzLnNob3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dDb25maXJtYXRpb24oKTtcbiAgICAgICAgICAgIH0sIDUwMDApO1xuICAgICAgICAgICAgJCgnYm9keScpLmJpbmQoJ3RvdWNoZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3dDb25maXJtYXRpb24oKSB7XG4gICAgICAgIG5ldyBEaWFsb2dDb21wb25lbnQoe1xuICAgICAgICAgICAgdGl0bGU6ICdFbmFibGUgTGl2ZSBTeW5jPycsXG4gICAgICAgICAgICBpbmZvOiAnQXBwIFVJIGlzIHB1bGxlZCBmcm9tIHN0dWRpby4gQnV0LCBvZmZsaW5lIGZ1bmN0aW9uYWxpdHkgaXMgdHVybmVkIG9mZi4nLFxuICAgICAgICAgICAgaWNvbkNsYXNzOiAnbGl2ZS1zeW5jLWNvbnRyb2wtaWNvbicsXG4gICAgICAgICAgICBhY3Rpb25zOiBbe1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnTm8nLFxuICAgICAgICAgICAgICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdzLnNob3cgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dIZWxwSW5mbygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogJ1llcycsXG4gICAgICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5saXZlU3luYyh0cnVlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHByaW1hcnk6IHRydWVcbiAgICAgICAgICAgIH1dXG4gICAgICAgIH0pLnJlbmRlcigpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHNob3dIZWxwSW5mbygpIHtcbiAgICAgICAgbmV3IERpYWxvZ0NvbXBvbmVudCh7XG4gICAgICAgICAgICB0aXRsZTogJycsXG4gICAgICAgICAgICBpbmZvOiAnVGFwIGFuZCBob2xkIGFueXdoZXJlIGZvciA1IHNlY29uZHMgdG8gdHVybiBvbiBMaXZlIFN5bmMuJyxcbiAgICAgICAgICAgIGljb25DbGFzczogJ2xpdmUtc3luYy1yZXRyaWV2YWwtaW5mby1pY29uJyxcbiAgICAgICAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdHb3QgaXQnLFxuICAgICAgICAgICAgICAgIHByaW1hcnk6IHRydWVcbiAgICAgICAgICAgIH1dXG4gICAgICAgIH0pLnJlbmRlcigpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHJlbmRlckJ1dHRvbigpIHtcbiAgICAgICAgY29uc3QgbWVudUljb24gPSB0aGlzLiRlbGUuZmluZCgnLmxpdmUtc3luYy1jb250cm9sLWJ0bicpO1xuICAgICAgICB0aGlzLiRlbGUub24oJ3RvdWNoc3RhcnQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgbGV0IGFkZENsYXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICQoZG9jdW1lbnQpLm9uKCd0b3VjaG1vdmUubGl2ZVN5bmMnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgb3JpZ0V2ZW50ID0gZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdO1xuICAgICAgICAgICAgICAgIGlmIChvcmlnRXZlbnQgJiYgb3JpZ0V2ZW50LnBhZ2VYKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MucG9zaXRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiBvcmlnRXZlbnQucGFnZVgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3A6IG9yaWdFdmVudC5wYWdlWVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgaWYgKGFkZENsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lbnVJY29uLmFkZENsYXNzKCd0b3VjaGVkJyk7XG4gICAgICAgICAgICAgICAgICAgIGFkZENsYXNzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAkKGRvY3VtZW50KS5vbmUoJ3RvdWNoZW5kJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSgpO1xuICAgICAgICAgICAgICAgIG1lbnVJY29uLnJlbW92ZUNsYXNzKCd0b3VjaGVkJyk7XG4gICAgICAgICAgICAgICAgJChkb2N1bWVudCkub2ZmKCd0b3VjaG1vdmUubGl2ZVN5bmMnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgbWVudUljb24uY2xpY2soKCkgPT4gd2luZG93LnJlbG9hZEFwcCgpKTtcbiAgICAgICAgJCgnYm9keScpLmFwcGVuZCh0aGlzLiRlbGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW5kZXIoKSB7XG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24oKTtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJCdXR0b24oKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNldHRpbmdzLnNob3cpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0NvbmZpcm1hdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGlzdGVuRm9yU2hvd0V2ZW50KCk7XG4gICAgfVxufSJdfQ==
404
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS1zeW5jLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tb2JpbGUvcnVudGltZS1keW5hbWljL3NyYy9zZXJ2aWNlcy9saXZlLXN5bmMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUV6RCxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBZ0JoRSxNQUFNLE9BQU8sbUJBQW1CO0lBc0I1QixZQUFvQixHQUFRLEVBQ2hCLGFBQTRCLEVBQzVCLGNBQThCLEVBQzlCLElBQVU7UUFIRixRQUFHLEdBQUgsR0FBRyxDQUFLO1FBQ2hCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixTQUFJLEdBQUosSUFBSSxDQUFNO1FBdkJkLGVBQVUsR0FBYSxFQUFFLENBQUM7UUFDMUIsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQix3QkFBbUIsR0FBRztZQUMxQixhQUFhLEVBQUUsYUFBYTtTQUMvQixDQUFDO1FBQ00sdUJBQWtCLEdBQUc7WUFDekIsdUNBQXVDLEVBQUUsc0JBQXNCO1lBQy9ELG1DQUFtQyxFQUFFLHdCQUF3QjtTQUNoRSxDQUFDO1FBQ00seUJBQW9CLEdBQUcsbURBQW1ELENBQUM7UUFDM0Usc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzFCLGFBQVEsR0FBYTtZQUN6QixPQUFPLEVBQUUsS0FBSztZQUNkLFFBQVEsRUFB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O1FBQ3pDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFTSxNQUFNO1FBQ1QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3ZCO2FBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRTtZQUMzQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUMzQjtRQUNELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgSHR0cEV2ZW50LCBIdHRwSGFuZGxlciwgSHR0cEludGVyY2VwdG9yLCBIdHRwUmVxdWVzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRmlsZSB9IGZyb20gJ0Bhd2Vzb21lLWNvcmRvdmEtcGx1Z2lucy9maWxlL25neCc7XG5cbmltcG9ydCB7IEFwcCwgaGFzQ29yZG92YSwgdHJhbnNmb3JtRmlsZVVSSSB9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IERldmljZVNlcnZpY2UsIE5ldHdvcmtTZXJ2aWNlIH0gZnJvbSAnQHdtL21vYmlsZS9jb3JlJztcblxuZGVjbGFyZSBjb25zdCB3aW5kb3csIGxvY2F0aW9uLCBjb3Jkb3ZhO1xuZGVjbGFyZSBjb25zdCAkLCBfO1xuXG5pbnRlcmZhY2UgU2V0dGluZ3Mge1xuICAgIGVuYWJsZWQ6IGJvb2xlYW4sXG4gICAgcG9zaXRpb246IHtcbiAgICAgICAgbGVmdDogbnVtYmVyLFxuICAgICAgICB0b3A6IG51bWJlcixcbiAgICB9LFxuICAgIHNob3c6IGJvb2xlYW4sXG4gICAgY29yZG92YVBsdWdpbnM6IHt9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBMaXZlU3luY0ludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcblxuICAgIHByaXZhdGUgdXJsc1RvU2tpcDogc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIGRlcGxveWVkVXJsID0gJyc7XG4gICAgcHJpdmF0ZSBsb2NhbEFwcFVybCA9ICcnO1xuICAgIHByaXZhdGUgc3luY0FwcFVybCA9ICcnO1xuICAgIHByaXZhdGUgdXJsc1RvTG9hZEZyb21Mb2NhbCA9IHtcbiAgICAgICAgJ2NvbmZpZy5qc29uJzogJ2NvbmZpZy5qc29uJyxcbiAgICB9O1xuICAgIHByaXZhdGUgdXJsc1RvTG9hZEZyb21MaXZlID0ge1xuICAgICAgICAnbWV0YWRhdGEvYXBwL3NlcnZpY2UtZGVmaW5pdGlvbnMuanNvbic6ICdzZXJ2aWNlcy9zZXJ2aWNlZGVmcycsXG4gICAgICAgICdtZXRhZGF0YS9hcHAvc2VjdXJpdHktY29uZmlnLmpzb24nOiAnc2VydmljZXMvc2VjdXJpdHkvaW5mbydcbiAgICB9O1xuICAgIHByaXZhdGUgcHJlZmFiU2VydmljZVBhdHRlcm4gPSAvXm1ldGFkYXRhXFwvcHJlZmFic1xcLy4qXFwvc2VydmljZS1kZWZpbml0aW9ucy5qc29uJC87XG4gICAgcHJpdmF0ZSBpc0xpdmVTeW5jRW5hYmxlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgc2V0dGluZ3M6IFNldHRpbmdzID0ge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgcG9zaXRpb246IG51bGwsXG4gICAgICAgIHNob3c6IHRydWUsXG4gICAgICAgIGNvcmRvdmFQbHVnaW5zOiBudWxsXG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBwOiBBcHAsXG4gICAgICAgIHByaXZhdGUgZGV2aWNlU2VydmljZTogRGV2aWNlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBuZXR3b3JrU2VydmljZTogTmV0d29ya1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZmlsZTogRmlsZSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkU2V0dGluZ3MoKTtcbiAgICAgICAgICAgIHRoaXMuaXNMaXZlU3luY0VuYWJsZWQgPSB0aGlzLnNldHRpbmdzLmVuYWJsZWQgJiYgaGFzQ29yZG92YSgpO1xuICAgICAgICAgICAgdGhpcy5kZXBsb3llZFVybCA9ICQoJ21ldGFbbmFtZT1cImxpdmVTeW5jLmRlcGxveWVkVXJsXCJdJykuYXR0cigndmFsdWUnKTtcbiAgICAgICAgICAgIHRoaXMubG9jYWxBcHBVcmwgPSAkKCdtZXRhW25hbWU9XCJsaXZlU3luYy5sb2NhbEFwcFVybFwiXScpLmF0dHIoJ3ZhbHVlJyk7XG4gICAgICAgICAgICB0aGlzLnN5bmNBcHBVcmwgPSAkKCdtZXRhW25hbWU9XCJsaXZlU3luYy5zeW5jQXBwVXJsXCJdJykuYXR0cigndmFsdWUnKTtcbiAgICAgICAgICAgIHRoaXMuZGVmaW5lQVBJKCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNMaXZlU3luY0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9Mb2NhbEFwcCgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRldmljZVNlcnZpY2UuaXNBcHBDb25uZWN0ZWRUb1ByZXZpZXcoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZVNlcnZpY2Uud2hlblJlYWR5KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcGxveWVkVXJsID0gYXBwLmRlcGxveWVkVXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm5ldHdvcmtTZXJ2aWNlLmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclVJKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubG9jYWxBcHBVcmwgJiYgIXRoaXMuc2V0dGluZ3MuY29yZG92YVBsdWdpbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFBsdWdpbnMoKS50aGVuKHBsdWdpbnMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdzLmNvcmRvdmFQbHVnaW5zID0gcGx1Z2lucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnN5bmNBcHBVcmwgJiYgdGhpcy5kZXBsb3llZFVybCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlU2VydmljZS5nZXRDb25maWcoKS5iYXNlVXJsID0gdGhpcy5kZXBsb3llZFVybDtcbiAgICAgICAgICAgICAgICB0aGlzLnBhdGNoU1FMaXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXRjaEhpc3RvcnlBcGkoKTtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnVybHNUb0xvYWRGcm9tTG9jYWwpLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXJsc1RvTG9hZEZyb21Mb2NhbFtrXSA9IHRoaXMuc3luY0FwcFVybCArIHRoaXMudXJsc1RvTG9hZEZyb21Mb2NhbFtrXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhdGNoQXBwKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJVSSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cubmF2aWdhdG9yLnNwbGFzaHNjcmVlbi5oaWRlID0gKCkgPT4ge307XG4gICAgICAgICAgICAgICAgdGhpcy5kZXBsb3llZFVybCA9IGFwcC5kZXBsb3llZFVybDtcbiAgICAgICAgICAgICAgICB0aGlzLmlzTGl2ZVN5bmNFbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2VTZXJ2aWNlLndoZW5SZWFkeSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ldHdvcmtTZXJ2aWNlLmlzQ29ubmVjdGVkKCkgJiYgdGhpcy5sYXVuY2goKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdvVG9Mb2NhbEFwcCgpIHtcbiAgICAgICAgaWYgKHRoaXMubG9jYWxBcHBVcmwpIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSB0aGlzLmxvY2FsQXBwVXJsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZWZpbmVBUEkoKSB7XG4gICAgICAgICh3aW5kb3cgYXMgYW55KS5saXZlU3luYyA9IChmbGFnKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5lbmFibGVkID09PSAhIWZsYWcgXG4gICAgICAgICAgICAgICAgfHwgIXRoaXMubmV0d29ya1NlcnZpY2UuaXNDb25uZWN0ZWQoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MuZW5hYmxlZCA9ICEhZmxhZztcbiAgICAgICAgICAgIHRoaXMuc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB3aW5kb3cubmF2aWdhdG9yLnNwbGFzaHNjcmVlbi5zaG93KCk7XG4gICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJhbnNmb3JtUHJlZmFiU2VydmljZWRlZmluaXRpb25zKHVybDogc3RyaW5nKSB7XG4gICAgICAgIGxldCBpc1ZhbGlkID0gdGhpcy5wcmVmYWJTZXJ2aWNlUGF0dGVybi50ZXN0KHVybCksXG4gICAgICAgICAgICBwcmVmYWJOYW1lID0gJycsXG4gICAgICAgICAgICBwcmVmYWJMb2MgPSAwO1xuICAgICAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgICAgICAgcHJlZmFiTG9jID0gJ21ldGFkYXRhL3ByZWZhYnMvJy5sZW5ndGg7XG4gICAgICAgICAgICBwcmVmYWJOYW1lID0gdXJsLnN1YnN0cmluZyhwcmVmYWJMb2MsIHVybC5pbmRleE9mKCcvJywgcHJlZmFiTG9jKSk7XG4gICAgICAgICAgICByZXR1cm4gJ3NlcnZpY2VzL3ByZWZhYnMvJyArIHByZWZhYk5hbWUgKyAnL3NlcnZpY2VkZWZzJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbnRlcmNlcHQocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XG4gICAgICAgIGlmICghdGhpcy5pc0xpdmVTeW5jRW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlcGxveWVkVXJsID0gdGhpcy5hcHAuZGVwbG95ZWRVcmw7XG4gICAgICAgIGxldCB1cmwgPSByZXF1ZXN0LnVybDtcbiAgICAgICAgdXJsID0gdGhpcy51cmxzVG9Mb2FkRnJvbUxpdmVbdXJsXSB8fCB0aGlzLnVybHNUb0xvYWRGcm9tTG9jYWxbdXJsXSB8fCB1cmw7XG4gICAgICAgIHVybCA9IHRoaXMudHJhbnNmb3JtUHJlZmFiU2VydmljZWRlZmluaXRpb25zKHVybCk7XG4gICAgICAgIGlmICh1cmwuc3RhcnRzV2l0aCgnLy8nKSkge1xuICAgICAgICAgICAgdXJsID0gZGVwbG95ZWRVcmwuc3BsaXQoJy8vJylbMF0gKyB1cmw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVybC5pbmRleE9mKCc6Ly8nKSA8IDBcbiAgICAgICAgICAgIHx8IHRoaXMudXJsc1RvU2tpcC5pbmRleE9mKHVybCkgPj0gMCkge1xuICAgICAgICAgICAgdXJsID0gZGVwbG95ZWRVcmwgKyAnLycgKyB1cmw7XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3QuY2xvbmUoe3VybDogdXJsfSk7XG4gICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1hc2hVcEh0bWxGaWxlKCkge1xuICAgICAgICBjb25zdCBsb2NhbERpciA9IGNvcmRvdmEuZmlsZS5jYWNoZURpcmVjdG9yeTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgdXJsOiB0aGlzLmRlcGxveWVkVXJsICsgJ2luZGV4Lmh0bWwnLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnaHRtbCcsXG4gICAgICAgICAgICAgICAgc3VjY2VzczogcmVzb2x2ZSxcbiAgICAgICAgICAgICAgICBlcnJvcjogcmVqZWN0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkudGhlbigoZmlsZUNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcG9ydCA9IGxvY2F0aW9uLnBvcnQgPyAnOicgKyBsb2NhdGlvbi5wb3J0IDogJyc7XG4gICAgICAgICAgICBsZXQgcGF0aCA9IHRoaXMubG9jYWxBcHBVcmwgfHwgXG4gICAgICAgICAgICAgICAgKGAke2xvY2F0aW9uLnByb3RvY29sfS8vJHtsb2NhdGlvbi5ob3N0bmFtZX0ke3BvcnR9JHtsb2NhdGlvbi5wYXRobmFtZX1gKTtcbiAgICAgICAgICAgIGxldCBjb3Jkb3ZhUGF0aCA9IHBhdGg7XG4gICAgICAgICAgICBpZiAoY29yZG92YVBhdGguZW5kc1dpdGgoJy5odG1sJykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGxpdHMgPSBjb3Jkb3ZhUGF0aC5zcGxpdCgnLycpLnNsaWNlKDAsICk7XG4gICAgICAgICAgICAgICAgY29yZG92YVBhdGggPSBzcGxpdHMuc2xpY2UoMCwgc3BsaXRzLmxlbmd0aCAtIDEpLmpvaW4oJy8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvcmRvdmFQYXRoICs9ICcvY29yZG92YS5qcyc7XG4gICAgICAgICAgICBjb25zdCBtQXBwVXJsID0gYCR7bG9jYXRpb24ucHJvdG9jb2x9Ly8ke2xvY2F0aW9uLmhvc3RuYW1lfSR7cG9ydH0ke3RyYW5zZm9ybUZpbGVVUkkobG9jYWxEaXIgKyAnbGl2ZS1pbmRleC5odG1sJyl9YDtcbiAgICAgICAgICAgIGZpbGVDb250ZW50ID0gZmlsZUNvbnRlbnQucmVwbGFjZSgnY29yZG92YS5qcycsIGNvcmRvdmFQYXRoKTtcbiAgICAgICAgICAgIGZpbGVDb250ZW50ID0gZmlsZUNvbnRlbnQucmVwbGFjZSgnPGhlYWQ+JywgYFxuICAgICAgICAgICAgPGhlYWQ+XG4gICAgICAgICAgICAgICAgPGJhc2UgaHJlZj1cIiR7dGhpcy5kZXBsb3llZFVybH1cIj5cbiAgICAgICAgICAgICAgICA8bWV0YSBuYW1lPVwibGl2ZVN5bmMuZGVwbG95ZWRVcmxcIiB2YWx1ZT1cIiR7dGhpcy5kZXBsb3llZFVybH1cIj5cbiAgICAgICAgICAgICAgICA8bWV0YSBuYW1lPVwibGl2ZVN5bmMuc3luY0FwcFVybFwiIHZhbHVlPVwiJHttQXBwVXJsfVwiPlxuICAgICAgICAgICAgICAgIDxtZXRhIG5hbWU9XCJsaXZlU3luYy5sb2NhbEFwcFVybFwiIHZhbHVlPVwiJHtwYXRofVwiPmApO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsZS53cml0ZUZpbGUobG9jYWxEaXIsICdsaXZlLWluZGV4Lmh0bWwnLCBmaWxlQ29udGVudCwge1xuICAgICAgICAgICAgICAgIHJlcGxhY2U6IHRydWVcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgID0+IG1BcHBVcmwpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBsdWdpbnMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAkLmdldCh0aGlzLmRlcGxveWVkVXJsICsgJ2NvbmZpZy54bWwnKS5kb25lKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwbHVnaW5zID0ge307XG4gICAgICAgICAgICAgICAgJChyZXMpLmZpbmQoJ3BsdWdpbicpLmVhY2goZnVuY3Rpb24ocCkgeyBcbiAgICAgICAgICAgICAgICAgICAgcGx1Z2luc1skKHRoaXMpLmF0dHIoJ25hbWUnKV0gPSAkKHRoaXMpLmF0dHIoJ3NwZWMnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHBsdWdpbnMpO1xuICAgICAgICAgICAgfSkuZmFpbChyZWplY3QpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc1BsdWdpbnNDaGFuZ2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZXZpY2VTZXJ2aWNlLndoZW5SZWFkeSgpXG4gICAgICAgIC50aGVuKCgpID0+IHRoaXMuZ2V0UGx1Z2lucygpKVxuICAgICAgICAudGhlbihwbHVnaW5zID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpbnNJbkFwayA9IHRoaXMuc2V0dGluZ3MuY29yZG92YVBsdWdpbnMgfHwge307XG4gICAgICAgICAgICByZXR1cm4gISFPYmplY3Qua2V5cyhwbHVnaW5zKVxuICAgICAgICAgICAgICAgIC5maW5kKGsgPT4gIXBsdWdpbnNJbkFwa1trXSB8fCBwbHVnaW5zSW5BcGtba10gIT09IHBsdWdpbnNba10pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxhdW5jaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFzaFVwSHRtbEZpbGUoKVxuICAgICAgICAudGhlbigoZmlsZVBhdGgpID0+IHtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdXTS5OZXR3b3JrU2VydmljZS5pc0Nvbm5lY3RlZCcsICd0cnVlJyk7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnV00uTmV0d29ya1NlcnZpY2UuX2F1dG9Db25uZWN0JywgJ3RydWUnKTtcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2RlYnVnTW9kZScsICd0cnVlJyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5uYXZpZ2F0b3Iuc3BsYXNoc2NyZWVuLnNob3coKTtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGZpbGVQYXRoO1xuICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGF0Y2hTUUxpdGUoKSB7XG4gICAgICAgIC8vIE9mZmxpbmUgc3FsIGlzIG5vdCBzdXBwb3J0ZWQuXG4gICAgICAgIGRlbGV0ZSB3aW5kb3dbJ1NRTGl0ZVBsdWdpbiddO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGF0Y2hBcHAoKSB7XG4gICAgICAgIHRoaXMuYXBwLnJlbG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm5ldHdvcmtTZXJ2aWNlLmlzQ29ubmVjdGVkKCkpe1xuICAgICAgICAgICAgICAgIHdpbmRvdy5uYXZpZ2F0b3Iuc3BsYXNoc2NyZWVuLnNob3coKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxhdW5jaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB3aW5kb3dbJ3JlbG9hZEFwcCddID0gdGhpcy5hcHAucmVsb2FkO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGF0Y2hIaXN0b3J5QXBpKCkge1xuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHRoaXMuc3luY0FwcFVybDtcbiAgICAgICAgY29uc3Qgb3JpZ1JlcGxhY2UgPSB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGU7XG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSA9IChzdGF0ZTogYW55LCB0aXRsZTogc3RyaW5nLCB1cmw6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKCcjJykpIHtcbiAgICAgICAgICAgICAgICB1cmwgPSBsb2NhdGlvbiArIHVybDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9yaWdSZXBsYWNlLmNhbGwod2luZG93Lmhpc3RvcnksIHN0YXRlLCB0aXRsZSwgdXJsKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb3JpZ1B1c2ggPSB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGU7XG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSA9IChzdGF0ZTogYW55LCB0aXRsZTogc3RyaW5nLCB1cmw6IHN0cmluZykgPT4gIHtcbiAgICAgICAgICAgIGlmICh1cmwuc3RhcnRzV2l0aCgnIycpKSB7XG4gICAgICAgICAgICAgICAgdXJsID0gbG9jYXRpb24gKyB1cmw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcmlnUHVzaC5jYWxsKHdpbmRvdy5oaXN0b3J5LCBzdGF0ZSwgdGl0bGUsIHVybCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGxvYWRTZXR0aW5ncygpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd3bS5saXZlU3luYy5zZXR0aW5ncycpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5ncyA9IHZhbHVlID8gSlNPTi5wYXJzZSh2YWx1ZSkgOiB0aGlzLnNldHRpbmdzO1xuICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2F2ZVNldHRpbmdzKCkge1xuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCd3bS5saXZlU3luYy5zZXR0aW5ncycsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2V0dGluZ3MpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVuZGVyVUkoKSB7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzUGx1Z2luc0NoYW5nZWQoKS50aGVuKChjaGFuZ2VkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3IERpYWxvZ0NvbXBvbmVudCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVpcmUgbmV3IGJ1aWxkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZm86ICdDb3Jkb3ZhIFBsdWdpbnMgaW4gdGhpcyBhcHAgZG8gbm90IG1hdGNoIHdpdGggY29uZmlndXJhdGlvbiBvZiBwcm9qZWN0IGluIFN0dWRpby4nICsgXG4gICAgICAgICAgICAgICAgICAgICAgICAnIFNvLCBuZXcgQ29yZG92YSBCdWlsZCBpcyByZXF1aXJlZCBmb3IgTGl2ZSBTeW5jIHRvIHdvcmsgcHJvcGVybHkuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25DbGFzczogJ2ZhIGZhLXdhcm5pbmcgZmEtNHggbGl2ZS1zeW5jLXdhcm5pbmctaWNvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25zOiBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnR290IGl0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltYXJ5OiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgICAgICAgICB9KS5yZW5kZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBuZXcgTGl2ZVN5bmNDb21wb25lbnQodGhpcy5zZXR0aW5ncywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgfSkucmVuZGVyKCk7XG4gICAgfVxuXG59XG5cbmNsYXNzIERpYWxvZ0NvbXBvbmVudCB7XG4gICAgcHJpdmF0ZSAkZWxlOiBhbnkgPSAkKCc8ZGl2PjxkaXY+Jyk7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgb3B0aW9uczoge1xuICAgICAgICB0aXRsZT8gOiBzdHJpbmcsXG4gICAgICAgIGluZm8/IDogc3RyaW5nLFxuICAgICAgICBpY29uQ2xhc3M/OiBzdHJpbmcsXG4gICAgICAgIGFjdGlvbnM/IDoge1xuICAgICAgICAgICAgdGl0bGU6IHN0cmluZyxcbiAgICAgICAgICAgIGFjdGlvbj86IChkaWFsb2c6IERpYWxvZ0NvbXBvbmVudCkgPT4gdm9pZCxcbiAgICAgICAgICAgIHByaW1hcnk/OiBib29sZWFuXG4gICAgICAgIH1bXVxuICAgIH0pIHtcbiAgICAgICAgXG4gICAgfVxuXG4gICAgZGlzbWlzcygpIHtcbiAgICAgICAgdGhpcy4kZWxlLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgdGhpcy4kZWxlID0gJChcbiAgICAgICAgICAgIGA8ZGl2IGNsYXNzPVwibGl2ZS1zeW5jLW1vZGFsIGxpdmUtc3luYy1jb250cm9sXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXZlLXN5bmMtaW5mby1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiJHt0aGlzLm9wdGlvbnMuaWNvbkNsYXNzfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGl2ZS1zeW5jLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLm9wdGlvbnMudGl0bGV9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGl2ZS1zeW5jLWRlc2NyaXB0aW9uXCI+ICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5vcHRpb25zLmluZm99XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpdmUtc3luYy1hY3Rpb24tcGFuZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMub3B0aW9ucy5hY3Rpb25zLm1hcCgoYSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSA/IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaXZlLXN5bmMtYWN0aW9uICR7YS5wcmltYXJ5ID8gJyBsaXZlLXN5bmMtcHJpbWFyeS1hY3Rpb24nIDogJyd9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHthLnRpdGxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5gIDogJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuam9pbignJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBgXG4gICAgICAgICk7XG4gICAgICAgICQoJ2JvZHknKS5hcHBlbmQodGhpcy4kZWxlKTtcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLiRlbGUuZmluZCgnLmxpdmUtc3luYy1hY3Rpb24nKS5lYWNoKGZ1bmN0aW9uKGluZGV4KSB7XG4gICAgICAgICAgICAkKHRoaXMpLmJpbmQoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IF90aGlzLm9wdGlvbnMuYWN0aW9uc1tpbmRleF0uYWN0aW9uO1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uKF90aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX3RoaXMuZGlzbWlzcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuY2xhc3MgTGl2ZVN5bmNDb21wb25lbnQge1xuICAgIHByaXZhdGUgJGVsZSA9ICQoXG4gICAgICAgIGA8ZGl2IGNsYXNzPVwibGl2ZS1zeW5jLWNvbnRyb2xcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJsaXZlLXN5bmMtY29udHJvbC1idG5cIiB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+YCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNldHRpbmdzOiBTZXR0aW5ncywgcHJpdmF0ZSBvbkNoYW5nZTogKCkgPT4gdm9pZCkge1xuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRQb3NpdGlvbigpIHtcbiAgICAgICAgY29uc3QgbWVudUljb24gPSB0aGlzLiRlbGUuZmluZCgnLmxpdmUtc3luYy1jb250cm9sLWJ0bicpO1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuc2V0dGluZ3MucG9zaXRpb247XG4gICAgICAgIGlmKHBvc2l0aW9uKSB7XG4gICAgICAgICAgICBtZW51SWNvbi5jc3MoJ2xlZnQnLCBwb3NpdGlvbi5sZWZ0ICsgJ3B4Jyk7XG4gICAgICAgICAgICBtZW51SWNvbi5jc3MoJ3RvcCcsIHBvc2l0aW9uLnRvcCArICdweCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsaXN0ZW5Gb3JTaG93RXZlbnQoKSB7XG4gICAgICAgICQoJ2JvZHknKS5iaW5kKCd0b3VjaHN0YXJ0JywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGltZXJJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3Muc2hvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0NvbmZpcm1hdGlvbigpO1xuICAgICAgICAgICAgfSwgNTAwMCk7XG4gICAgICAgICAgICAkKCdib2R5JykuYmluZCgndG91Y2hlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2hvd0NvbmZpcm1hdGlvbigpIHtcbiAgICAgICAgbmV3IERpYWxvZ0NvbXBvbmVudCh7XG4gICAgICAgICAgICB0aXRsZTogJ0VuYWJsZSBMaXZlIFN5bmM/JyxcbiAgICAgICAgICAgIGluZm86ICdBcHAgVUkgaXMgcHVsbGVkIGZyb20gc3R1ZGlvLiBCdXQsIG9mZmxpbmUgZnVuY3Rpb25hbGl0eSBpcyB0dXJuZWQgb2ZmLicsXG4gICAgICAgICAgICBpY29uQ2xhc3M6ICdsaXZlLXN5bmMtY29udHJvbC1pY29uJyxcbiAgICAgICAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdObycsXG4gICAgICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3Muc2hvdyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0hlbHBJbmZvKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnWWVzJyxcbiAgICAgICAgICAgICAgICBhY3Rpb246ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxpdmVTeW5jKHRydWUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcHJpbWFyeTogdHJ1ZVxuICAgICAgICAgICAgfV1cbiAgICAgICAgfSkucmVuZGVyKCk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgc2hvd0hlbHBJbmZvKCkge1xuICAgICAgICBuZXcgRGlhbG9nQ29tcG9uZW50KHtcbiAgICAgICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgICAgIGluZm86ICdUYXAgYW5kIGhvbGQgYW55d2hlcmUgZm9yIDUgc2Vjb25kcyB0byB0dXJuIG9uIExpdmUgU3luYy4nLFxuICAgICAgICAgICAgaWNvbkNsYXNzOiAnbGl2ZS1zeW5jLXJldHJpZXZhbC1pbmZvLWljb24nLFxuICAgICAgICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgICAgICAgICB0aXRsZTogJ0dvdCBpdCcsXG4gICAgICAgICAgICAgICAgcHJpbWFyeTogdHJ1ZVxuICAgICAgICAgICAgfV1cbiAgICAgICAgfSkucmVuZGVyKCk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgcmVuZGVyQnV0dG9uKCkge1xuICAgICAgICBjb25zdCBtZW51SWNvbiA9IHRoaXMuJGVsZS5maW5kKCcubGl2ZS1zeW5jLWNvbnRyb2wtYnRuJyk7XG4gICAgICAgIHRoaXMuJGVsZS5vbigndG91Y2hzdGFydCcsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBsZXQgYWRkQ2xhc3MgPSB0cnVlO1xuICAgICAgICAgICAgJChkb2N1bWVudCkub24oJ3RvdWNobW92ZS5saXZlU3luYycsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBvcmlnRXZlbnQgPSBldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF07XG4gICAgICAgICAgICAgICAgaWYgKG9yaWdFdmVudCAmJiBvcmlnRXZlbnQucGFnZVgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5wb3NpdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IG9yaWdFdmVudC5wYWdlWCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogb3JpZ0V2ZW50LnBhZ2VZXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24oKTtcbiAgICAgICAgICAgICAgICBpZiAoYWRkQ2xhc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVudUljb24uYWRkQ2xhc3MoJ3RvdWNoZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgYWRkQ2xhc3MgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICQoZG9jdW1lbnQpLm9uZSgndG91Y2hlbmQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgbWVudUljb24ucmVtb3ZlQ2xhc3MoJ3RvdWNoZWQnKTtcbiAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5vZmYoJ3RvdWNobW92ZS5saXZlU3luYycpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBtZW51SWNvbi5jbGljaygoKSA9PiB3aW5kb3cucmVsb2FkQXBwKCkpO1xuICAgICAgICAkKCdib2R5JykuYXBwZW5kKHRoaXMuJGVsZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbmRlcigpIHtcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbigpO1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckJ1dHRvbigpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2V0dGluZ3Muc2hvdykge1xuICAgICAgICAgICAgdGhpcy5zaG93Q29uZmlybWF0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5saXN0ZW5Gb3JTaG93RXZlbnQoKTtcbiAgICB9XG59Il19
@@ -140,15 +140,16 @@ class LiveSyncInterceptor {
140
140
  error: reject
141
141
  });
142
142
  }).then((fileContent) => {
143
+ const port = location.port ? ':' + location.port : '';
143
144
  let path = this.localAppUrl ||
144
- (`${location.protocol}//${location.hostname}${location.pathname}`);
145
+ (`${location.protocol}//${location.hostname}${port}${location.pathname}`);
145
146
  let cordovaPath = path;
146
147
  if (cordovaPath.endsWith('.html')) {
147
148
  const splits = cordovaPath.split('/').slice(0);
148
149
  cordovaPath = splits.slice(0, splits.length - 1).join('/');
149
150
  }
150
151
  cordovaPath += '/cordova.js';
151
- const mAppUrl = `${location.protocol}//${location.hostname}${transformFileURI(localDir + 'live-index.html')}`;
152
+ const mAppUrl = `${location.protocol}//${location.hostname}${port}${transformFileURI(localDir + 'live-index.html')}`;
152
153
  fileContent = fileContent.replace('cordova.js', cordovaPath);
153
154
  fileContent = fileContent.replace('<head>', `
154
155
  <head>
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../projects/mobile/runtime-dynamic/src/services/live-sync.service.ts","../../../../projects/mobile/runtime-dynamic/src/mobile-runtime-dynamic.module.ts","../../../../projects/mobile/runtime-dynamic/src/index.ts"],"sourcesContent":["import { Observable } from 'rxjs';\n\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { File } from '@awesome-cordova-plugins/file/ngx';\n\nimport { App, hasCordova, transformFileURI } from '@wm/core';\nimport { DeviceService, NetworkService } from '@wm/mobile/core';\n\ndeclare const window, location, cordova;\ndeclare const $, _;\n\ninterface Settings {\n enabled: boolean,\n position: {\n left: number,\n top: number,\n },\n show: boolean,\n cordovaPlugins: {}\n}\n\n@Injectable()\nexport class LiveSyncInterceptor implements HttpInterceptor {\n\n private urlsToSkip: string[] = [];\n private deployedUrl = '';\n private localAppUrl = '';\n private syncAppUrl = '';\n private urlsToLoadFromLocal = {\n 'config.json': 'config.json',\n };\n private urlsToLoadFromLive = {\n 'metadata/app/service-definitions.json': 'services/servicedefs',\n 'metadata/app/security-config.json': 'services/security/info'\n };\n private prefabServicePattern = /^metadata\\/prefabs\\/.*\\/service-definitions.json$/;\n private isLiveSyncEnabled = false;\n private settings: Settings = {\n enabled: false,\n position: null,\n show: true,\n cordovaPlugins: null\n };\n\n constructor(private app: App,\n private deviceService: DeviceService,\n private networkService: NetworkService,\n private file: File) {\n this.loadSettings();\n this.isLiveSyncEnabled = this.settings.enabled && hasCordova();\n this.deployedUrl = $('meta[name=\"liveSync.deployedUrl\"]').attr('value');\n this.localAppUrl = $('meta[name=\"liveSync.localAppUrl\"]').attr('value');\n this.syncAppUrl = $('meta[name=\"liveSync.syncAppUrl\"]').attr('value');\n this.defineAPI();\n if (!this.isLiveSyncEnabled) {\n this.goToLocalApp();\n if (this.deviceService.isAppConnectedToPreview()) {\n this.deviceService.whenReady().then(() => {\n this.deployedUrl = app.deployedUrl;\n if (!this.networkService.isConnected()) {\n return;\n }\n this.renderUI();\n if (!this.localAppUrl && !this.settings.cordovaPlugins) {\n this.getPlugins().then(plugins => {\n this.settings.cordovaPlugins = plugins;\n this.saveSettings();\n });\n }\n });\n }\n return;\n }\n if (this.syncAppUrl && this.deployedUrl) {\n this.deviceService.getConfig().baseUrl = this.deployedUrl;\n this.patchSQLite();\n this.patchHistoryApi();\n Object.keys(this.urlsToLoadFromLocal).forEach(k => {\n this.urlsToLoadFromLocal[k] = this.syncAppUrl + this.urlsToLoadFromLocal[k];\n });\n this.patchApp();\n this.renderUI();\n } else {\n window.navigator.splashscreen.hide = () => {};\n this.deployedUrl = app.deployedUrl;\n this.isLiveSyncEnabled = false;\n this.deviceService.whenReady().then(() => {\n this.networkService.isConnected() && this.launch();\n });\n }\n }\n\n private goToLocalApp() {\n if (this.localAppUrl) {\n location.href = this.localAppUrl;\n }\n }\n\n private defineAPI() {\n (window as any).liveSync = (flag) => {\n if (this.settings.enabled === !!flag \n || !this.networkService.isConnected()) {\n return;\n }\n this.settings.enabled = !!flag;\n this.saveSettings();\n setTimeout(() => {\n window.navigator.splashscreen.show();\n location.reload();\n }, 100);\n };\n }\n\n private transformPrefabServicedefinitions(url: string) {\n let isValid = this.prefabServicePattern.test(url),\n prefabName = '',\n prefabLoc = 0;\n if (isValid) {\n prefabLoc = 'metadata/prefabs/'.length;\n prefabName = url.substring(prefabLoc, url.indexOf('/', prefabLoc));\n return 'services/prefabs/' + prefabName + '/servicedefs';\n }\n return url;\n }\n\n public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (!this.isLiveSyncEnabled) {\n return next.handle(request);\n }\n const deployedUrl = this.app.deployedUrl;\n let url = request.url;\n url = this.urlsToLoadFromLive[url] || this.urlsToLoadFromLocal[url] || url;\n url = this.transformPrefabServicedefinitions(url);\n if (url.startsWith('//')) {\n url = deployedUrl.split('//')[0] + url;\n }\n if (url.indexOf('://') < 0\n || this.urlsToSkip.indexOf(url) >= 0) {\n url = deployedUrl + '/' + url;\n }\n request = request.clone({url: url});\n return next.handle(request);\n }\n\n private mashUpHtmlFile() {\n const localDir = cordova.file.cacheDirectory;\n return new Promise((resolve, reject) => {\n $.ajax({\n url: this.deployedUrl + 'index.html',\n dataType: 'html',\n success: resolve,\n error: reject\n });\n }).then((fileContent: string) => {\n let path = this.localAppUrl || \n (`${location.protocol}//${location.hostname}${location.pathname}`);\n let cordovaPath = path;\n if (cordovaPath.endsWith('.html')) {\n const splits = cordovaPath.split('/').slice(0, );\n cordovaPath = splits.slice(0, splits.length - 1).join('/');\n }\n cordovaPath += '/cordova.js';\n const mAppUrl = `${location.protocol}//${location.hostname}${transformFileURI(localDir + 'live-index.html')}`;\n fileContent = fileContent.replace('cordova.js', cordovaPath);\n fileContent = fileContent.replace('<head>', `\n <head>\n <base href=\"${this.deployedUrl}\">\n <meta name=\"liveSync.deployedUrl\" value=\"${this.deployedUrl}\">\n <meta name=\"liveSync.syncAppUrl\" value=\"${mAppUrl}\">\n <meta name=\"liveSync.localAppUrl\" value=\"${path}\">`);\n return this.file.writeFile(localDir, 'live-index.html', fileContent, {\n replace: true\n }).then(() => mAppUrl);\n });\n }\n\n private getPlugins() {\n return new Promise((resolve, reject) => {\n $.get(this.deployedUrl + 'config.xml').done(function (res) {\n const plugins = {};\n $(res).find('plugin').each(function(p) { \n plugins[$(this).attr('name')] = $(this).attr('spec');\n });\n resolve(plugins);\n }).fail(reject);\n });\n }\n\n private hasPluginsChanged() {\n return this.deviceService.whenReady()\n .then(() => this.getPlugins())\n .then(plugins => {\n const pluginsInApk = this.settings.cordovaPlugins || {};\n return !!Object.keys(plugins)\n .find(k => !pluginsInApk[k] || pluginsInApk[k] !== plugins[k]);\n });\n }\n\n private launch() {\n return this.mashUpHtmlFile()\n .then((filePath) => {\n localStorage.setItem('WM.NetworkService.isConnected', 'true');\n localStorage.setItem('WM.NetworkService._autoConnect', 'true');\n sessionStorage.setItem('debugMode', 'true');\n \n setTimeout(() => {\n window.navigator.splashscreen.show();\n window.location.href = filePath;\n }, 2000);\n });\n }\n\n private patchSQLite() {\n // Offline sql is not supported.\n delete window['SQLitePlugin'];\n }\n\n private patchApp() {\n this.app.reload = () => {\n if (this.networkService.isConnected()){\n window.navigator.splashscreen.show();\n this.launch();\n }\n };\n window['reloadApp'] = this.app.reload;\n }\n\n private patchHistoryApi() {\n const location = this.syncAppUrl;\n const origReplace = window.history.replaceState;\n window.history.replaceState = (state: any, title: string, url: string) => {\n if (url.startsWith('#')) {\n url = location + url;\n }\n origReplace.call(window.history, state, title, url);\n };\n const origPush = window.history.pushState;\n window.history.pushState = (state: any, title: string, url: string) => {\n if (url.startsWith('#')) {\n url = location + url;\n }\n origPush.call(window.history, state, title, url);\n };\n }\n\n public loadSettings() {\n const value = sessionStorage.getItem('wm.liveSync.settings');\n try {\n this.settings = value ? JSON.parse(value) : this.settings;\n } catch(e) {\n this.saveSettings();\n }\n }\n\n public saveSettings() {\n sessionStorage.setItem('wm.liveSync.settings', JSON.stringify(this.settings));\n }\n\n public renderUI() {\n if (this.settings.enabled) {\n this.hasPluginsChanged().then((changed) => {\n if (changed) {\n new DialogComponent({\n title: 'Require new build',\n info: 'Cordova Plugins in this app do not match with configuration of project in Studio.' + \n ' So, new Cordova Build is required for Live Sync to work properly.',\n iconClass: 'fa fa-warning fa-4x live-sync-warning-icon',\n actions: [{\n title: 'Got it',\n primary: true\n }]\n }).render();\n }\n });\n }\n new LiveSyncComponent(this.settings, () => {\n this.saveSettings();\n }).render();\n }\n\n}\n\nclass DialogComponent {\n private $ele: any = $('<div><div>');\n\n constructor(public options: {\n title? : string,\n info? : string,\n iconClass?: string,\n actions? : {\n title: string,\n action?: (dialog: DialogComponent) => void,\n primary?: boolean\n }[]\n }) {\n \n }\n\n dismiss() {\n this.$ele.remove();\n }\n\n render() {\n this.$ele = $(\n `<div class=\"live-sync-modal live-sync-control\">\n <div class=\"live-sync-info-container\">\n <span class=\"${this.options.iconClass}\">\n </span>\n <label class=\"live-sync-title\">\n ${this.options.title}\n </label>\n <label class=\"live-sync-description\"> \n ${this.options.info}\n </label>\n <div class=\"live-sync-action-panel\">\n ${this.options.actions.map((a) => {\n return a ? `\n <button \n type=\"button\"\n class=\"live-sync-action ${a.primary ? ' live-sync-primary-action' : ''}\">\n ${a.title}\n </button>` : '';\n }).join('')}\n </div>\n </div>\n </div>\n `\n );\n $('body').append(this.$ele);\n const _this = this;\n this.$ele.find('.live-sync-action').each(function(index) {\n $(this).bind('click', () => {\n const action = _this.options.actions[index].action;\n if (action) {\n action(_this);\n }\n _this.dismiss();\n });\n });\n }\n}\n\nclass LiveSyncComponent {\n private $ele = $(\n `<div class=\"live-sync-control\">\n <button class=\"live-sync-control-btn\" type=\"button\">\n </button>\n </div>`);\n\n constructor(private settings: Settings, private onChange: () => void) {\n\n }\n\n private setPosition() {\n const menuIcon = this.$ele.find('.live-sync-control-btn');\n const position = this.settings.position;\n if(position) {\n menuIcon.css('left', position.left + 'px');\n menuIcon.css('top', position.top + 'px');\n }\n }\n\n private listenForShowEvent() {\n $('body').bind('touchstart', () => {\n const timerId = setTimeout(() => {\n this.settings.show = true;\n this.onChange();\n this.showConfirmation();\n }, 5000);\n $('body').bind('touchend', () => {\n clearTimeout(timerId);\n });\n });\n }\n\n private showConfirmation() {\n new DialogComponent({\n title: 'Enable Live Sync?',\n info: 'App UI is pulled from studio. But, offline functionality is turned off.',\n iconClass: 'live-sync-control-icon',\n actions: [{\n title: 'No',\n action: () => {\n this.settings.show = false;\n this.onChange();\n this.showHelpInfo();\n }\n }, {\n title: 'Yes',\n action: () => {\n window.liveSync(true);\n },\n primary: true\n }]\n }).render();\n };\n\n private showHelpInfo() {\n new DialogComponent({\n title: '',\n info: 'Tap and hold anywhere for 5 seconds to turn on Live Sync.',\n iconClass: 'live-sync-retrieval-info-icon',\n actions: [{\n title: 'Got it',\n primary: true\n }]\n }).render();\n };\n\n private renderButton() {\n const menuIcon = this.$ele.find('.live-sync-control-btn');\n this.$ele.on('touchstart', (event) => {\n event.stopPropagation();\n let addClass = true;\n $(document).on('touchmove.liveSync', (event) => {\n var origEvent = event.originalEvent.touches[0];\n if (origEvent && origEvent.pageX) {\n this.settings.position = {\n left: origEvent.pageX,\n top: origEvent.pageY\n };\n }\n this.setPosition();\n if (addClass) {\n menuIcon.addClass('touched');\n addClass = false;\n }\n });\n $(document).one('touchend', (event) => {\n this.onChange();\n menuIcon.removeClass('touched');\n $(document).off('touchmove.liveSync');\n });\n });\n menuIcon.click(() => window.reloadApp());\n $('body').append(this.$ele);\n }\n\n public render() {\n this.setPosition();\n if (this.settings.enabled) {\n this.renderButton();\n } else if (this.settings.show) {\n this.showConfirmation();\n }\n this.listenForShowEvent();\n }\n}","import { NgModule } from '@angular/core';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\n\n\nimport { BasicModule } from '@wm/mobile/components/basic';\nimport { SearchModule } from '@wm/mobile/components/basic/search';\n\nimport { SegmentedControlModule } from '@wm/mobile/components/containers/segmented-control';\n\nimport { MediaListModule } from '@wm/mobile/components/data/media-list';\n\nimport { BarcodeScannerModule } from '@wm/mobile/components/device/barcode-scanner';\nimport { CameraModule } from '@wm/mobile/components/device/camera';\n\nimport { FileUploadModule } from '@wm/mobile/components/input/file-upload';\n\nimport { PageModule } from '@wm/mobile/components/page';\nimport { LeftPanelModule } from '@wm/mobile/components/page/left-panel';\nimport { MobileNavbarModule } from '@wm/mobile/components/page/mobile-navbar';\nimport { TabBarModule } from '@wm/mobile/components/page/tab-bar';\nimport { LiveSyncInterceptor } from './services/live-sync.service';\n\nexport const MOBILE_COMPONENT_MODULES_FOR_ROOT = [\n BasicModule,\n SearchModule,\n SegmentedControlModule,\n MediaListModule,\n BarcodeScannerModule,\n CameraModule,\n FileUploadModule,\n PageModule,\n LeftPanelModule,\n MobileNavbarModule,\n TabBarModule\n];\n\n@NgModule({\n providers: [{\n provide: HTTP_INTERCEPTORS,\n useClass: LiveSyncInterceptor,\n multi: true\n }]\n})\nexport class MobileRuntimeDynamicModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n\nexport {LiveSyncInterceptor as ɵa} from './services/live-sync.service';"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../projects/mobile/runtime-dynamic/src/services/live-sync.service.ts","../../../../projects/mobile/runtime-dynamic/src/mobile-runtime-dynamic.module.ts","../../../../projects/mobile/runtime-dynamic/src/index.ts"],"sourcesContent":["import { Observable } from 'rxjs';\n\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { File } from '@awesome-cordova-plugins/file/ngx';\n\nimport { App, hasCordova, transformFileURI } from '@wm/core';\nimport { DeviceService, NetworkService } from '@wm/mobile/core';\n\ndeclare const window, location, cordova;\ndeclare const $, _;\n\ninterface Settings {\n enabled: boolean,\n position: {\n left: number,\n top: number,\n },\n show: boolean,\n cordovaPlugins: {}\n}\n\n@Injectable()\nexport class LiveSyncInterceptor implements HttpInterceptor {\n\n private urlsToSkip: string[] = [];\n private deployedUrl = '';\n private localAppUrl = '';\n private syncAppUrl = '';\n private urlsToLoadFromLocal = {\n 'config.json': 'config.json',\n };\n private urlsToLoadFromLive = {\n 'metadata/app/service-definitions.json': 'services/servicedefs',\n 'metadata/app/security-config.json': 'services/security/info'\n };\n private prefabServicePattern = /^metadata\\/prefabs\\/.*\\/service-definitions.json$/;\n private isLiveSyncEnabled = false;\n private settings: Settings = {\n enabled: false,\n position: null,\n show: true,\n cordovaPlugins: null\n };\n\n constructor(private app: App,\n private deviceService: DeviceService,\n private networkService: NetworkService,\n private file: File) {\n this.loadSettings();\n this.isLiveSyncEnabled = this.settings.enabled && hasCordova();\n this.deployedUrl = $('meta[name=\"liveSync.deployedUrl\"]').attr('value');\n this.localAppUrl = $('meta[name=\"liveSync.localAppUrl\"]').attr('value');\n this.syncAppUrl = $('meta[name=\"liveSync.syncAppUrl\"]').attr('value');\n this.defineAPI();\n if (!this.isLiveSyncEnabled) {\n this.goToLocalApp();\n if (this.deviceService.isAppConnectedToPreview()) {\n this.deviceService.whenReady().then(() => {\n this.deployedUrl = app.deployedUrl;\n if (!this.networkService.isConnected()) {\n return;\n }\n this.renderUI();\n if (!this.localAppUrl && !this.settings.cordovaPlugins) {\n this.getPlugins().then(plugins => {\n this.settings.cordovaPlugins = plugins;\n this.saveSettings();\n });\n }\n });\n }\n return;\n }\n if (this.syncAppUrl && this.deployedUrl) {\n this.deviceService.getConfig().baseUrl = this.deployedUrl;\n this.patchSQLite();\n this.patchHistoryApi();\n Object.keys(this.urlsToLoadFromLocal).forEach(k => {\n this.urlsToLoadFromLocal[k] = this.syncAppUrl + this.urlsToLoadFromLocal[k];\n });\n this.patchApp();\n this.renderUI();\n } else {\n window.navigator.splashscreen.hide = () => {};\n this.deployedUrl = app.deployedUrl;\n this.isLiveSyncEnabled = false;\n this.deviceService.whenReady().then(() => {\n this.networkService.isConnected() && this.launch();\n });\n }\n }\n\n private goToLocalApp() {\n if (this.localAppUrl) {\n location.href = this.localAppUrl;\n }\n }\n\n private defineAPI() {\n (window as any).liveSync = (flag) => {\n if (this.settings.enabled === !!flag \n || !this.networkService.isConnected()) {\n return;\n }\n this.settings.enabled = !!flag;\n this.saveSettings();\n setTimeout(() => {\n window.navigator.splashscreen.show();\n location.reload();\n }, 100);\n };\n }\n\n private transformPrefabServicedefinitions(url: string) {\n let isValid = this.prefabServicePattern.test(url),\n prefabName = '',\n prefabLoc = 0;\n if (isValid) {\n prefabLoc = 'metadata/prefabs/'.length;\n prefabName = url.substring(prefabLoc, url.indexOf('/', prefabLoc));\n return 'services/prefabs/' + prefabName + '/servicedefs';\n }\n return url;\n }\n\n public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (!this.isLiveSyncEnabled) {\n return next.handle(request);\n }\n const deployedUrl = this.app.deployedUrl;\n let url = request.url;\n url = this.urlsToLoadFromLive[url] || this.urlsToLoadFromLocal[url] || url;\n url = this.transformPrefabServicedefinitions(url);\n if (url.startsWith('//')) {\n url = deployedUrl.split('//')[0] + url;\n }\n if (url.indexOf('://') < 0\n || this.urlsToSkip.indexOf(url) >= 0) {\n url = deployedUrl + '/' + url;\n }\n request = request.clone({url: url});\n return next.handle(request);\n }\n\n private mashUpHtmlFile() {\n const localDir = cordova.file.cacheDirectory;\n return new Promise((resolve, reject) => {\n $.ajax({\n url: this.deployedUrl + 'index.html',\n dataType: 'html',\n success: resolve,\n error: reject\n });\n }).then((fileContent: string) => {\n const port = location.port ? ':' + location.port : '';\n let path = this.localAppUrl || \n (`${location.protocol}//${location.hostname}${port}${location.pathname}`);\n let cordovaPath = path;\n if (cordovaPath.endsWith('.html')) {\n const splits = cordovaPath.split('/').slice(0, );\n cordovaPath = splits.slice(0, splits.length - 1).join('/');\n }\n cordovaPath += '/cordova.js';\n const mAppUrl = `${location.protocol}//${location.hostname}${port}${transformFileURI(localDir + 'live-index.html')}`;\n fileContent = fileContent.replace('cordova.js', cordovaPath);\n fileContent = fileContent.replace('<head>', `\n <head>\n <base href=\"${this.deployedUrl}\">\n <meta name=\"liveSync.deployedUrl\" value=\"${this.deployedUrl}\">\n <meta name=\"liveSync.syncAppUrl\" value=\"${mAppUrl}\">\n <meta name=\"liveSync.localAppUrl\" value=\"${path}\">`);\n return this.file.writeFile(localDir, 'live-index.html', fileContent, {\n replace: true\n }).then(() => mAppUrl);\n });\n }\n\n private getPlugins() {\n return new Promise((resolve, reject) => {\n $.get(this.deployedUrl + 'config.xml').done(function (res) {\n const plugins = {};\n $(res).find('plugin').each(function(p) { \n plugins[$(this).attr('name')] = $(this).attr('spec');\n });\n resolve(plugins);\n }).fail(reject);\n });\n }\n\n private hasPluginsChanged() {\n return this.deviceService.whenReady()\n .then(() => this.getPlugins())\n .then(plugins => {\n const pluginsInApk = this.settings.cordovaPlugins || {};\n return !!Object.keys(plugins)\n .find(k => !pluginsInApk[k] || pluginsInApk[k] !== plugins[k]);\n });\n }\n\n private launch() {\n return this.mashUpHtmlFile()\n .then((filePath) => {\n localStorage.setItem('WM.NetworkService.isConnected', 'true');\n localStorage.setItem('WM.NetworkService._autoConnect', 'true');\n sessionStorage.setItem('debugMode', 'true');\n \n setTimeout(() => {\n window.navigator.splashscreen.show();\n window.location.href = filePath;\n }, 2000);\n });\n }\n\n private patchSQLite() {\n // Offline sql is not supported.\n delete window['SQLitePlugin'];\n }\n\n private patchApp() {\n this.app.reload = () => {\n if (this.networkService.isConnected()){\n window.navigator.splashscreen.show();\n this.launch();\n }\n };\n window['reloadApp'] = this.app.reload;\n }\n\n private patchHistoryApi() {\n const location = this.syncAppUrl;\n const origReplace = window.history.replaceState;\n window.history.replaceState = (state: any, title: string, url: string) => {\n if (url.startsWith('#')) {\n url = location + url;\n }\n origReplace.call(window.history, state, title, url);\n };\n const origPush = window.history.pushState;\n window.history.pushState = (state: any, title: string, url: string) => {\n if (url.startsWith('#')) {\n url = location + url;\n }\n origPush.call(window.history, state, title, url);\n };\n }\n\n public loadSettings() {\n const value = sessionStorage.getItem('wm.liveSync.settings');\n try {\n this.settings = value ? JSON.parse(value) : this.settings;\n } catch(e) {\n this.saveSettings();\n }\n }\n\n public saveSettings() {\n sessionStorage.setItem('wm.liveSync.settings', JSON.stringify(this.settings));\n }\n\n public renderUI() {\n if (this.settings.enabled) {\n this.hasPluginsChanged().then((changed) => {\n if (changed) {\n new DialogComponent({\n title: 'Require new build',\n info: 'Cordova Plugins in this app do not match with configuration of project in Studio.' + \n ' So, new Cordova Build is required for Live Sync to work properly.',\n iconClass: 'fa fa-warning fa-4x live-sync-warning-icon',\n actions: [{\n title: 'Got it',\n primary: true\n }]\n }).render();\n }\n });\n }\n new LiveSyncComponent(this.settings, () => {\n this.saveSettings();\n }).render();\n }\n\n}\n\nclass DialogComponent {\n private $ele: any = $('<div><div>');\n\n constructor(public options: {\n title? : string,\n info? : string,\n iconClass?: string,\n actions? : {\n title: string,\n action?: (dialog: DialogComponent) => void,\n primary?: boolean\n }[]\n }) {\n \n }\n\n dismiss() {\n this.$ele.remove();\n }\n\n render() {\n this.$ele = $(\n `<div class=\"live-sync-modal live-sync-control\">\n <div class=\"live-sync-info-container\">\n <span class=\"${this.options.iconClass}\">\n </span>\n <label class=\"live-sync-title\">\n ${this.options.title}\n </label>\n <label class=\"live-sync-description\"> \n ${this.options.info}\n </label>\n <div class=\"live-sync-action-panel\">\n ${this.options.actions.map((a) => {\n return a ? `\n <button \n type=\"button\"\n class=\"live-sync-action ${a.primary ? ' live-sync-primary-action' : ''}\">\n ${a.title}\n </button>` : '';\n }).join('')}\n </div>\n </div>\n </div>\n `\n );\n $('body').append(this.$ele);\n const _this = this;\n this.$ele.find('.live-sync-action').each(function(index) {\n $(this).bind('click', () => {\n const action = _this.options.actions[index].action;\n if (action) {\n action(_this);\n }\n _this.dismiss();\n });\n });\n }\n}\n\nclass LiveSyncComponent {\n private $ele = $(\n `<div class=\"live-sync-control\">\n <button class=\"live-sync-control-btn\" type=\"button\">\n </button>\n </div>`);\n\n constructor(private settings: Settings, private onChange: () => void) {\n\n }\n\n private setPosition() {\n const menuIcon = this.$ele.find('.live-sync-control-btn');\n const position = this.settings.position;\n if(position) {\n menuIcon.css('left', position.left + 'px');\n menuIcon.css('top', position.top + 'px');\n }\n }\n\n private listenForShowEvent() {\n $('body').bind('touchstart', () => {\n const timerId = setTimeout(() => {\n this.settings.show = true;\n this.onChange();\n this.showConfirmation();\n }, 5000);\n $('body').bind('touchend', () => {\n clearTimeout(timerId);\n });\n });\n }\n\n private showConfirmation() {\n new DialogComponent({\n title: 'Enable Live Sync?',\n info: 'App UI is pulled from studio. But, offline functionality is turned off.',\n iconClass: 'live-sync-control-icon',\n actions: [{\n title: 'No',\n action: () => {\n this.settings.show = false;\n this.onChange();\n this.showHelpInfo();\n }\n }, {\n title: 'Yes',\n action: () => {\n window.liveSync(true);\n },\n primary: true\n }]\n }).render();\n };\n\n private showHelpInfo() {\n new DialogComponent({\n title: '',\n info: 'Tap and hold anywhere for 5 seconds to turn on Live Sync.',\n iconClass: 'live-sync-retrieval-info-icon',\n actions: [{\n title: 'Got it',\n primary: true\n }]\n }).render();\n };\n\n private renderButton() {\n const menuIcon = this.$ele.find('.live-sync-control-btn');\n this.$ele.on('touchstart', (event) => {\n event.stopPropagation();\n let addClass = true;\n $(document).on('touchmove.liveSync', (event) => {\n var origEvent = event.originalEvent.touches[0];\n if (origEvent && origEvent.pageX) {\n this.settings.position = {\n left: origEvent.pageX,\n top: origEvent.pageY\n };\n }\n this.setPosition();\n if (addClass) {\n menuIcon.addClass('touched');\n addClass = false;\n }\n });\n $(document).one('touchend', (event) => {\n this.onChange();\n menuIcon.removeClass('touched');\n $(document).off('touchmove.liveSync');\n });\n });\n menuIcon.click(() => window.reloadApp());\n $('body').append(this.$ele);\n }\n\n public render() {\n this.setPosition();\n if (this.settings.enabled) {\n this.renderButton();\n } else if (this.settings.show) {\n this.showConfirmation();\n }\n this.listenForShowEvent();\n }\n}","import { NgModule } from '@angular/core';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\n\n\nimport { BasicModule } from '@wm/mobile/components/basic';\nimport { SearchModule } from '@wm/mobile/components/basic/search';\n\nimport { SegmentedControlModule } from '@wm/mobile/components/containers/segmented-control';\n\nimport { MediaListModule } from '@wm/mobile/components/data/media-list';\n\nimport { BarcodeScannerModule } from '@wm/mobile/components/device/barcode-scanner';\nimport { CameraModule } from '@wm/mobile/components/device/camera';\n\nimport { FileUploadModule } from '@wm/mobile/components/input/file-upload';\n\nimport { PageModule } from '@wm/mobile/components/page';\nimport { LeftPanelModule } from '@wm/mobile/components/page/left-panel';\nimport { MobileNavbarModule } from '@wm/mobile/components/page/mobile-navbar';\nimport { TabBarModule } from '@wm/mobile/components/page/tab-bar';\nimport { LiveSyncInterceptor } from './services/live-sync.service';\n\nexport const MOBILE_COMPONENT_MODULES_FOR_ROOT = [\n BasicModule,\n SearchModule,\n SegmentedControlModule,\n MediaListModule,\n BarcodeScannerModule,\n CameraModule,\n FileUploadModule,\n PageModule,\n LeftPanelModule,\n MobileNavbarModule,\n TabBarModule\n];\n\n@NgModule({\n providers: [{\n provide: HTTP_INTERCEPTORS,\n useClass: LiveSyncInterceptor,\n multi: true\n }]\n})\nexport class MobileRuntimeDynamicModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n\nexport {LiveSyncInterceptor as ɵa} from './services/live-sync.service';"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wavemaker/app-ng-runtime",
3
- "version": "11.4.0-next.26251",
3
+ "version": "11.4.0-next.28151",
4
4
  "description": "All modules required for a wavemaker application.",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -586,6 +586,7 @@
586
586
  PrefabManagerService.prototype.loadScripts = function (prefabName, _a) {
587
587
  var _b = _a === void 0 ? { resources: { scripts: [] } } : _a, scripts = _b.resources.scripts;
588
588
  var baseUrl = getPrefabBaseUrl(prefabName);
589
+ scripts = scripts.filter(function (script) { return !script.startsWith('npm://'); });
589
590
  var _scripts = scripts.map(function (url) { return getPrefabResourceUrl(url, baseUrl); });
590
591
  return i2.loadScripts(_scripts, true);
591
592
  };