New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

single-spa-angular

Package Overview
Dependencies
Maintainers
13
Versions
87
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

single-spa-angular - npm Package Compare versions

Comparing version 4.0.1 to 4.1.0

bundles/single-spa-angular-internals.umd.js

115

bundles/single-spa-angular.umd.js
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common')) :
typeof define === 'function' && define.amd ? define('single-spa-angular', ['exports', '@angular/core', '@angular/common'], factory) :
(global = global || self, factory(global['single-spa-angular'] = {}, global.ng.core, global.ng.common));
}(this, (function (exports, core, common) { 'use strict';
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('single-spa-angular/internals'), require('@angular/core'), require('@angular/common')) :
typeof define === 'function' && define.amd ? define('single-spa-angular', ['exports', 'single-spa-angular/internals', '@angular/core', '@angular/common'], factory) :
(global = global || self, factory(global['single-spa-angular'] = {}, global['single-spa-angular'].internals, global.ng.core, global.ng.common));
}(this, (function (exports, internals, core, common) { 'use strict';

@@ -300,2 +300,8 @@ /*! *****************************************************************************

return __generator(this, function (_a) {
// Angular provides an opportunity to develop `zone-less` application, where developers
// have to trigger change detection manually.
// See https://angular.io/guide/zone#noopzone
if (opts.NgZone === 'noop') {
return [2 /*return*/];
}
// In order for multiple Angular apps to work concurrently on a page, they each need a unique identifier.

@@ -324,12 +330,13 @@ opts.zoneIdentifier = "single-spa-angular:" + (props.name || props.appName);

function mount(opts, props) {
var _a;
return __awaiter(this, void 0, void 0, function () {
var domElementGetter, containerEl, bootstrapPromise, module, singleSpaPlatformLocation, bootstrappedOpts, ngZone;
return __generator(this, function (_a) {
switch (_a.label) {
var domElementGetter, containerEl, bootstrapPromise, module, singleSpaPlatformLocation, ngZoneEnabled, bootstrappedOpts, ngZone;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
domElementGetter = chooseDomElementGetter(opts, props);
domElementGetter = internals.chooseDomElementGetter(opts, props);
if (!domElementGetter) {
throw Error("cannot mount angular application '" + (props.name || props.appName) + "' without a domElementGetter provided either as an opt or a prop");
}
containerEl = getContainerEl(domElementGetter);
containerEl = internals.getContainerEl(domElementGetter);
containerEl.innerHTML = opts.template;

@@ -342,3 +349,3 @@ bootstrapPromise = opts.bootstrapFunction(props);

case 1:
module = _a.sent();
module = _b.sent();
if (!module || typeof module.destroy !== 'function') {

@@ -348,13 +355,20 @@ throw Error("single-spa-angular: the opts.bootstrapFunction returned a promise that did not resolve with a valid Angular module. Did you call platformBrowser().bootstrapModuleFactory() correctly?");

singleSpaPlatformLocation = module.injector.get(SingleSpaPlatformLocation, null);
ngZoneEnabled = opts.NgZone !== 'noop';
// The user has to provide `BrowserPlatformLocation` only if his application uses routing.
// So if he provided `Router` but didn't provide `BrowserPlatformLocation` then we have to inform him.
if (opts.Router && singleSpaPlatformLocation === null) {
// Also `getSingleSpaExtraProviders()` function should be called only if the doesn't use
// `zone-less` change detection, if `NgZone` is `noop` then we can skip it.
if (ngZoneEnabled && opts.Router && singleSpaPlatformLocation === null) {
throw new Error("\t\n single-spa-angular: could not retrieve extra providers from the platform injector. Did you call getSingleSpaExtraProviders() when creating platform?\t\n ");
}
bootstrappedOpts = opts;
ngZone = module.injector.get(opts.NgZone);
singleSpaPlatformLocation.setNgZone(ngZone);
bootstrappedOpts.bootstrappedNgZone = ngZone;
bootstrappedOpts.bootstrappedNgZone['_inner']._properties[bootstrappedOpts.zoneIdentifier] = true;
window.addEventListener('single-spa:routing-event', bootstrappedOpts.routingEventListener);
if (ngZoneEnabled) {
ngZone = module.injector.get(opts.NgZone);
// `NgZone` can be enabled but routing may not be used thus `getSingleSpaExtraProviders()`
// function was not called.
(_a = singleSpaPlatformLocation) === null || _a === void 0 ? void 0 : _a.setNgZone(ngZone);
bootstrappedOpts.bootstrappedNgZone = ngZone;
bootstrappedOpts.bootstrappedNgZone['_inner']._properties[bootstrappedOpts.zoneIdentifier] = true;
window.addEventListener('single-spa:routing-event', bootstrappedOpts.routingEventListener);
}
bootstrappedOpts.bootstrappedModule = module;

@@ -375,3 +389,5 @@ return [2 /*return*/, module];

}
window.removeEventListener('single-spa:routing-event', opts.routingEventListener);
if (opts.routingEventListener) {
window.removeEventListener('single-spa:routing-event', opts.routingEventListener);
}
if (opts.AnimationEngine) {

@@ -383,7 +399,5 @@ animationEngine = opts.bootstrappedModule.injector.get(opts.AnimationEngine);

delete opts.bootstrappedModule;
if (ivyEnabled()) {
// This is an issue. Issue has been created and Angular team is working on the fix:
// https://github.com/angular/angular/issues/36449
removeApplicationFromDOMIfIvyEnabled(opts, props);
}
// This is an issue. Issue has been created and Angular team is working on the fix:
// https://github.com/angular/angular/issues/36449
internals.removeApplicationFromDOMIfIvyEnabled(opts, props);
return [2 /*return*/];

@@ -393,59 +407,2 @@ });

}
function ivyEnabled() {
try {
// `ɵivyEnabled` variable is exposed starting from version 8.
// We use `require` here except of a single `import { ɵivyEnabled }` because the
// developer can use Angular version that doesn't expose it (all versions <8).
// The `catch` statement will handle those cases.
// eslint-disable-next-line
var ɵivyEnabled = require('@angular/core').ɵivyEnabled;
return !!ɵivyEnabled;
}
catch (_a) {
return false;
}
}
function removeApplicationFromDOMIfIvyEnabled(opts, props) {
var domElementGetter = chooseDomElementGetter(opts, props);
var domElement = getContainerEl(domElementGetter);
// View Engine removes all nodes automatically when calling `NgModuleRef.destroy()`,
// which calls `ComponentRef.destroy()`.
// Basically this will remove `app-root` or any other selector from the container element.
while (domElement.firstChild)
domElement.removeChild(domElement.firstChild);
}
function getContainerEl(domElementGetter) {
var element = domElementGetter();
if (!element) {
throw Error('domElementGetter did not return a valid dom element');
}
return element;
}
function chooseDomElementGetter(opts, props) {
props = props && props.customProps ? props.customProps : props;
if (props.domElement) {
return function () { return props.domElement; };
}
else if (props.domElementGetter) {
return props.domElementGetter;
}
else if (opts.domElementGetter) {
return opts.domElementGetter;
}
else {
return defaultDomElementGetter(props.name);
}
}
function defaultDomElementGetter(name) {
return function getDefaultDomElement() {
var id = "single-spa-application:" + name;
var domElement = document.getElementById(id);
if (!domElement) {
domElement = document.createElement('div');
domElement.id = id;
document.body.appendChild(domElement);
}
return domElement;
};
}

@@ -452,0 +409,0 @@ var ParcelComponent = /** @class */ (function () {

@@ -1,2 +0,2 @@

!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@angular/core"),require("@angular/common")):"function"==typeof define&&define.amd?define("single-spa-angular",["exports","@angular/core","@angular/common"],e):e((t=t||self)["single-spa-angular"]={},t.ng.core,t.ng.common)}(this,(function(t,e,n){"use strict";
!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("single-spa-angular/internals"),require("@angular/core"),require("@angular/common")):"function"==typeof define&&define.amd?define("single-spa-angular",["exports","single-spa-angular/internals","@angular/core","@angular/common"],n):n((t=t||self)["single-spa-angular"]={},t["single-spa-angular"].internals,t.ng.core,t.ng.common)}(this,(function(t,n,e,o){"use strict";
/*! *****************************************************************************

@@ -15,3 +15,3 @@ Copyright (c) Microsoft Corporation. All rights reserved.

and limitations under the License.
***************************************************************************** */var o=function(t,e){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)};var r=function(){return(r=Object.assign||function(t){for(var e,n=1,o=arguments.length;n<o;n++)for(var r in e=arguments[n])Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t}).apply(this,arguments)};function i(t,e,n,o){var r,i=arguments.length,a=i<3?e:null===o?o=Object.getOwnPropertyDescriptor(e,n):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,n,o);else for(var u=t.length-1;u>=0;u--)(r=t[u])&&(a=(i<3?r(a):i>3?r(e,n,a):r(e,n))||a);return i>3&&a&&Object.defineProperty(e,n,a),a}function a(t,e,n,o){return new(n||(n=Promise))((function(r,i){function a(t){try{l(o.next(t))}catch(t){i(t)}}function u(t){try{l(o.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,u)}l((o=o.apply(t,e||[])).next())}))}function u(t,e){var n,o,r,i,a={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,o&&(r=2&i[0]?o.return:i[0]?o.throw||((r=o.return)&&r.call(o),0):o.next)&&!(r=r.call(o,i[1])).done)return r;switch(o=0,r&&(i=[2&i[0],r.value]),i[0]){case 0:case 1:r=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,o=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(r=a.trys,(r=r.length>0&&r[r.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!r||i[1]>r[0]&&i[1]<r[3])){a.label=i[1];break}if(6===i[0]&&a.label<r[1]){a.label=r[1],r=i;break}if(r&&a.label<r[2]){a.label=r[2],a.ops.push(i);break}r[2]&&a.ops.pop(),a.trys.pop();continue}i=e.call(t,a)}catch(t){i=[6,t],o=0}finally{n=r=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}function l(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var o,r,i=n.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){r={error:t}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return a}function s(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(l(arguments[e]));return t}var p=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return function(t,e){function n(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}(n,t),n.prototype.onPopState=function(e){var n=this;t.prototype.onPopState.call(this,(function(t){n.ngZone.run((function(){return e(t)}))}))},n.prototype.setNgZone=function(t){this.ngZone=t},n=i([e.Injectable()],n)}(n["ɵBrowserPlatformLocation"]);var c={NgZone:null,bootstrapFunction:null,template:null,Router:void 0,domElementGetter:void 0,AnimationEngine:void 0,updateFunction:function(){return Promise.resolve()}};function d(t,e){return a(this,void 0,void 0,(function(){return u(this,(function(n){return t.zoneIdentifier="single-spa-angular:"+(e.name||e.appName),t.NgZone.isInAngularZone=function(){return!0===window.Zone.current._properties[t.zoneIdentifier]},t.routingEventListener=function(){t.bootstrappedNgZone.run((function(){}))},[2]}))}))}function f(t,e){return a(this,void 0,void 0,(function(){var n,o,r,i,a,l;return u(this,(function(u){switch(u.label){case 0:if(!(n=g(t,e)))throw Error("cannot mount angular application '"+(e.name||e.appName)+"' without a domElementGetter provided either as an opt or a prop");if(h(n).innerHTML=t.template,!((o=t.bootstrapFunction(e))instanceof Promise))throw Error("single-spa-angular: the opts.bootstrapFunction must return a promise, but instead returned a '"+typeof o+"' that is not a Promise");return[4,o];case 1:if(!(r=u.sent())||"function"!=typeof r.destroy)throw Error("single-spa-angular: the opts.bootstrapFunction returned a promise that did not resolve with a valid Angular module. Did you call platformBrowser().bootstrapModuleFactory() correctly?");if(i=r.injector.get(p,null),t.Router&&null===i)throw new Error("\t\n single-spa-angular: could not retrieve extra providers from the platform injector. Did you call getSingleSpaExtraProviders() when creating platform?\t\n ");return a=t,l=r.injector.get(t.NgZone),i.setNgZone(l),a.bootstrappedNgZone=l,a.bootstrappedNgZone._inner._properties[a.zoneIdentifier]=!0,window.addEventListener("single-spa:routing-event",a.routingEventListener),a.bootstrappedModule=r,[2,r]}}))}))}function m(t,e){return a(this,void 0,void 0,(function(){return u(this,(function(n){return t.Router&&t.bootstrappedModule.injector.get(t.Router).dispose(),window.removeEventListener("single-spa:routing-event",t.routingEventListener),t.AnimationEngine&&t.bootstrappedModule.injector.get(t.AnimationEngine)._transitionEngine.flush(),t.bootstrappedModule.destroy(),delete t.bootstrappedModule,function(){try{return!!require("@angular/core").ɵivyEnabled}catch(t){return!1}}()&&function(t,e){var n=h(g(t,e));for(;n.firstChild;)n.removeChild(n.firstChild)}(t,e),[2]}))}))}function h(t){var e=t();if(!e)throw Error("domElementGetter did not return a valid dom element");return e}function g(t,e){return(e=e&&e.customProps?e.customProps:e).domElement?function(){return e.domElement}:e.domElementGetter?e.domElementGetter:t.domElementGetter?t.domElementGetter:(n=e.name,function(){var t="single-spa-application:"+n,e=document.getElementById(t);return e||((e=document.createElement("div")).id=t,document.body.appendChild(e)),e});var n}var v=function(){function t(t){this.host=t,this.onParcelMount=null,this.wrapWith="div",this.customProps={},this.appendTo=null,this.handleError=function(t){return console.error(t)},this.createdDomElement=null,this.hasError=!1,this.unmounted=!0}return t.prototype.ngOnInit=function(){var t=this;if(!this.config)throw new Error("single-spa-angular's Parcel component requires the [config] binding to either be a parcel config or a loading function that returns a promise. See https://github.com/CanopyTax/single-spa-angular");this.addThingToDo("mount",(function(){var e,n=t.mountParcel;if(!n)throw new Error("\n\t\t\t\t <parcel> was not passed a [mountParcel] binding.\n\t\t\t\t If you are using <parcel> within a module that is not a single-spa application, you will need to import mountRootParcel from single-spa and pass it into <parcel> as a [mountParcel] binding\n\t\t\t\t");t.appendTo?(t.createdDomElement=e=document.createElement(t.wrapWith),t.appendTo.appendChild(e)):(t.createdDomElement=e=document.createElement(t.wrapWith),t.host.nativeElement.children[0].appendChild(e));return t.parcel=n(t.config,r({domElement:e},t.customProps)),t.onParcelMount&&t.parcel.mountPromise.then(t.onParcelMount),t.unmounted=!1,t.parcel.mountPromise}))},t.prototype.ngOnChanges=function(){var t=this;this.addThingToDo("update",(function(){if(t.parcel&&t.parcel.update)return t.parcel.update(t.customProps)}))},t.prototype.ngOnDestroy=function(){var t=this;this.addThingToDo("unmount",(function(){if(t.parcel&&"MOUNTED"===t.parcel.getStatus())return t.parcel.unmount()})),this.createdDomElement&&this.createdDomElement.parentNode.removeChild(this.createdDomElement),this.unmounted=!0},t.prototype.addThingToDo=function(t,e){var n=this;this.hasError&&"unmount"!==t||(this.nextThingToDo=(this.nextThingToDo||Promise.resolve()).then((function(){for(var o=[],r=0;r<arguments.length;r++)o[r]=arguments[r];if(!n.unmounted||"unmount"===t)return e.apply(void 0,s(o))})).catch((function(e){throw n.nextThingToDo=Promise.resolve(),n.hasError=!0,e&&e.message&&(e.message="During '"+t+"', parcel threw an error: "+e.message),"function"==typeof n.handleError?n.handleError(e):setTimeout((function(){throw e})),e})))},t.ctorParameters=function(){return[{type:e.ElementRef}]},i([e.Input()],t.prototype,"config",void 0),i([e.Input()],t.prototype,"mountParcel",void 0),i([e.Input()],t.prototype,"onParcelMount",void 0),i([e.Input()],t.prototype,"wrapWith",void 0),i([e.Input()],t.prototype,"customProps",void 0),i([e.Input()],t.prototype,"appendTo",void 0),i([e.Input()],t.prototype,"handleError",void 0),t=i([e.Component({selector:"parcel",template:"<div></div>"})],t)}(),y=function(){function t(){}return t=i([e.NgModule({declarations:[v],exports:[v],entryComponents:[v]})],t)}();t.ParcelComponent=v,t.ParcelModule=y,t.getSingleSpaExtraProviders=function(){return[{provide:p,useClass:p,deps:[[new e.Inject(n.DOCUMENT)]]},{provide:n.PlatformLocation,useExisting:p}]},t.singleSpaAngular=function(t){if("object"!=typeof t)throw Error("single-spa-angular requires a configuration object");var e=r(r({},c),t);if("function"!=typeof e.bootstrapFunction)throw Error("single-spa-angular must be passed an opts.bootstrapFunction");if("string"!=typeof e.template)throw Error("single-spa-angular must be passed opts.template string");if(!e.NgZone)throw Error("single-spa-angular must be passed the NgZone opt");return{bootstrap:d.bind(null,e),mount:f.bind(null,e),unmount:m.bind(null,e),update:e.updateFunction}},t.ɵa=p,Object.defineProperty(t,"__esModule",{value:!0})}));
***************************************************************************** */var r=function(t,n){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var e in n)n.hasOwnProperty(e)&&(t[e]=n[e])})(t,n)};var i=function(){return(i=Object.assign||function(t){for(var n,e=1,o=arguments.length;e<o;e++)for(var r in n=arguments[e])Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r]);return t}).apply(this,arguments)};function a(t,n,e,o){var r,i=arguments.length,a=i<3?n:null===o?o=Object.getOwnPropertyDescriptor(n,e):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,n,e,o);else for(var u=t.length-1;u>=0;u--)(r=t[u])&&(a=(i<3?r(a):i>3?r(n,e,a):r(n,e))||a);return i>3&&a&&Object.defineProperty(n,e,a),a}function u(t,n,e,o){return new(e||(e=Promise))((function(r,i){function a(t){try{l(o.next(t))}catch(t){i(t)}}function u(t){try{l(o.throw(t))}catch(t){i(t)}}function l(t){var n;t.done?r(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(a,u)}l((o=o.apply(t,n||[])).next())}))}function l(t,n){var e,o,r,i,a={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(e)throw new TypeError("Generator is already executing.");for(;a;)try{if(e=1,o&&(r=2&i[0]?o.return:i[0]?o.throw||((r=o.return)&&r.call(o),0):o.next)&&!(r=r.call(o,i[1])).done)return r;switch(o=0,r&&(i=[2&i[0],r.value]),i[0]){case 0:case 1:r=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,o=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(r=a.trys,(r=r.length>0&&r[r.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!r||i[1]>r[0]&&i[1]<r[3])){a.label=i[1];break}if(6===i[0]&&a.label<r[1]){a.label=r[1],r=i;break}if(r&&a.label<r[2]){a.label=r[2],a.ops.push(i);break}r[2]&&a.ops.pop(),a.trys.pop();continue}i=n.call(t,a)}catch(t){i=[6,t],o=0}finally{e=r=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}function s(t,n){var e="function"==typeof Symbol&&t[Symbol.iterator];if(!e)return t;var o,r,i=e.call(t),a=[];try{for(;(void 0===n||n-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){r={error:t}}finally{try{o&&!o.done&&(e=i.return)&&e.call(i)}finally{if(r)throw r.error}}return a}function p(){for(var t=[],n=0;n<arguments.length;n++)t=t.concat(s(arguments[n]));return t}var c=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return function(t,n){function e(){this.constructor=t}r(t,n),t.prototype=null===n?Object.create(n):(e.prototype=n.prototype,new e)}(n,t),n.prototype.onPopState=function(n){var e=this;t.prototype.onPopState.call(this,(function(t){e.ngZone.run((function(){return n(t)}))}))},n.prototype.setNgZone=function(t){this.ngZone=t},n=a([e.Injectable()],n)}(o["ɵBrowserPlatformLocation"]);var f={NgZone:null,bootstrapFunction:null,template:null,Router:void 0,domElementGetter:void 0,AnimationEngine:void 0,updateFunction:function(){return Promise.resolve()}};function d(t,n){return u(this,void 0,void 0,(function(){return l(this,(function(e){return"noop"===t.NgZone||(t.zoneIdentifier="single-spa-angular:"+(n.name||n.appName),t.NgZone.isInAngularZone=function(){return!0===window.Zone.current._properties[t.zoneIdentifier]},t.routingEventListener=function(){t.bootstrappedNgZone.run((function(){}))}),[2]}))}))}function h(t,e){var o;return u(this,void 0,void 0,(function(){var r,i,a,u,s,p,f;return l(this,(function(l){switch(l.label){case 0:if(!(r=n.chooseDomElementGetter(t,e)))throw Error("cannot mount angular application '"+(e.name||e.appName)+"' without a domElementGetter provided either as an opt or a prop");if(n.getContainerEl(r).innerHTML=t.template,!((i=t.bootstrapFunction(e))instanceof Promise))throw Error("single-spa-angular: the opts.bootstrapFunction must return a promise, but instead returned a '"+typeof i+"' that is not a Promise");return[4,i];case 1:if(!(a=l.sent())||"function"!=typeof a.destroy)throw Error("single-spa-angular: the opts.bootstrapFunction returned a promise that did not resolve with a valid Angular module. Did you call platformBrowser().bootstrapModuleFactory() correctly?");if(u=a.injector.get(c,null),(s="noop"!==t.NgZone)&&t.Router&&null===u)throw new Error("\t\n single-spa-angular: could not retrieve extra providers from the platform injector. Did you call getSingleSpaExtraProviders() when creating platform?\t\n ");return p=t,s&&(f=a.injector.get(t.NgZone),null===(o=u)||void 0===o||o.setNgZone(f),p.bootstrappedNgZone=f,p.bootstrappedNgZone._inner._properties[p.zoneIdentifier]=!0,window.addEventListener("single-spa:routing-event",p.routingEventListener)),p.bootstrappedModule=a,[2,a]}}))}))}function g(t,e){return u(this,void 0,void 0,(function(){return l(this,(function(o){return t.Router&&t.bootstrappedModule.injector.get(t.Router).dispose(),t.routingEventListener&&window.removeEventListener("single-spa:routing-event",t.routingEventListener),t.AnimationEngine&&t.bootstrappedModule.injector.get(t.AnimationEngine)._transitionEngine.flush(),t.bootstrappedModule.destroy(),delete t.bootstrappedModule,n.removeApplicationFromDOMIfIvyEnabled(t,e),[2]}))}))}var m=function(){function t(t){this.host=t,this.onParcelMount=null,this.wrapWith="div",this.customProps={},this.appendTo=null,this.handleError=function(t){return console.error(t)},this.createdDomElement=null,this.hasError=!1,this.unmounted=!0}return t.prototype.ngOnInit=function(){var t=this;if(!this.config)throw new Error("single-spa-angular's Parcel component requires the [config] binding to either be a parcel config or a loading function that returns a promise. See https://github.com/CanopyTax/single-spa-angular");this.addThingToDo("mount",(function(){var n,e=t.mountParcel;if(!e)throw new Error("\n\t\t\t\t <parcel> was not passed a [mountParcel] binding.\n\t\t\t\t If you are using <parcel> within a module that is not a single-spa application, you will need to import mountRootParcel from single-spa and pass it into <parcel> as a [mountParcel] binding\n\t\t\t\t");t.appendTo?(t.createdDomElement=n=document.createElement(t.wrapWith),t.appendTo.appendChild(n)):(t.createdDomElement=n=document.createElement(t.wrapWith),t.host.nativeElement.children[0].appendChild(n));return t.parcel=e(t.config,i({domElement:n},t.customProps)),t.onParcelMount&&t.parcel.mountPromise.then(t.onParcelMount),t.unmounted=!1,t.parcel.mountPromise}))},t.prototype.ngOnChanges=function(){var t=this;this.addThingToDo("update",(function(){if(t.parcel&&t.parcel.update)return t.parcel.update(t.customProps)}))},t.prototype.ngOnDestroy=function(){var t=this;this.addThingToDo("unmount",(function(){if(t.parcel&&"MOUNTED"===t.parcel.getStatus())return t.parcel.unmount()})),this.createdDomElement&&this.createdDomElement.parentNode.removeChild(this.createdDomElement),this.unmounted=!0},t.prototype.addThingToDo=function(t,n){var e=this;this.hasError&&"unmount"!==t||(this.nextThingToDo=(this.nextThingToDo||Promise.resolve()).then((function(){for(var o=[],r=0;r<arguments.length;r++)o[r]=arguments[r];if(!e.unmounted||"unmount"===t)return n.apply(void 0,p(o))})).catch((function(n){throw e.nextThingToDo=Promise.resolve(),e.hasError=!0,n&&n.message&&(n.message="During '"+t+"', parcel threw an error: "+n.message),"function"==typeof e.handleError?e.handleError(n):setTimeout((function(){throw n})),n})))},t.ctorParameters=function(){return[{type:e.ElementRef}]},a([e.Input()],t.prototype,"config",void 0),a([e.Input()],t.prototype,"mountParcel",void 0),a([e.Input()],t.prototype,"onParcelMount",void 0),a([e.Input()],t.prototype,"wrapWith",void 0),a([e.Input()],t.prototype,"customProps",void 0),a([e.Input()],t.prototype,"appendTo",void 0),a([e.Input()],t.prototype,"handleError",void 0),t=a([e.Component({selector:"parcel",template:"<div></div>"})],t)}(),v=function(){function t(){}return t=a([e.NgModule({declarations:[m],exports:[m],entryComponents:[m]})],t)}();t.ParcelComponent=m,t.ParcelModule=v,t.getSingleSpaExtraProviders=function(){return[{provide:c,useClass:c,deps:[[new e.Inject(o.DOCUMENT)]]},{provide:o.PlatformLocation,useExisting:c}]},t.singleSpaAngular=function(t){if("object"!=typeof t)throw Error("single-spa-angular requires a configuration object");var n=i(i({},f),t);if("function"!=typeof n.bootstrapFunction)throw Error("single-spa-angular must be passed an opts.bootstrapFunction");if("string"!=typeof n.template)throw Error("single-spa-angular must be passed opts.template string");if(!n.NgZone)throw Error("single-spa-angular must be passed the NgZone opt");return{bootstrap:d.bind(null,n),mount:h.bind(null,n),unmount:g.bind(null,n),update:n.updateFunction}},t.ɵa=c,Object.defineProperty(t,"__esModule",{value:!0})}));
//# sourceMappingURL=single-spa-angular.umd.min.js.map
import { __awaiter } from "tslib";
import { getContainerEl, chooseDomElementGetter, removeApplicationFromDOMIfIvyEnabled, } from 'single-spa-angular/internals';
import { SingleSpaPlatformLocation } from './extra-providers';

@@ -37,2 +38,8 @@ const defaultOpts = {

return __awaiter(this, void 0, void 0, function* () {
// Angular provides an opportunity to develop `zone-less` application, where developers
// have to trigger change detection manually.
// See https://angular.io/guide/zone#noopzone
if (opts.NgZone === 'noop') {
return;
}
// In order for multiple Angular apps to work concurrently on a page, they each need a unique identifier.

@@ -59,2 +66,3 @@ opts.zoneIdentifier = `single-spa-angular:${props.name || props.appName}`;

function mount(opts, props) {
var _a;
return __awaiter(this, void 0, void 0, function* () {

@@ -76,5 +84,8 @@ const domElementGetter = chooseDomElementGetter(opts, props);

const singleSpaPlatformLocation = module.injector.get(SingleSpaPlatformLocation, null);
const ngZoneEnabled = opts.NgZone !== 'noop';
// The user has to provide `BrowserPlatformLocation` only if his application uses routing.
// So if he provided `Router` but didn't provide `BrowserPlatformLocation` then we have to inform him.
if (opts.Router && singleSpaPlatformLocation === null) {
// Also `getSingleSpaExtraProviders()` function should be called only if the doesn't use
// `zone-less` change detection, if `NgZone` is `noop` then we can skip it.
if (ngZoneEnabled && opts.Router && singleSpaPlatformLocation === null) {
throw new Error(`

@@ -85,7 +96,11 @@ single-spa-angular: could not retrieve extra providers from the platform injector. Did you call getSingleSpaExtraProviders() when creating platform?

const bootstrappedOpts = opts;
const ngZone = module.injector.get(opts.NgZone);
singleSpaPlatformLocation.setNgZone(ngZone);
bootstrappedOpts.bootstrappedNgZone = ngZone;
bootstrappedOpts.bootstrappedNgZone['_inner']._properties[bootstrappedOpts.zoneIdentifier] = true;
window.addEventListener('single-spa:routing-event', bootstrappedOpts.routingEventListener);
if (ngZoneEnabled) {
const ngZone = module.injector.get(opts.NgZone);
// `NgZone` can be enabled but routing may not be used thus `getSingleSpaExtraProviders()`
// function was not called.
(_a = singleSpaPlatformLocation) === null || _a === void 0 ? void 0 : _a.setNgZone(ngZone);
bootstrappedOpts.bootstrappedNgZone = ngZone;
bootstrappedOpts.bootstrappedNgZone['_inner']._properties[bootstrappedOpts.zoneIdentifier] = true;
window.addEventListener('single-spa:routing-event', bootstrappedOpts.routingEventListener);
}
bootstrappedOpts.bootstrappedModule = module;

@@ -103,3 +118,5 @@ return module;

}
window.removeEventListener('single-spa:routing-event', opts.routingEventListener);
if (opts.routingEventListener) {
window.removeEventListener('single-spa:routing-event', opts.routingEventListener);
}
if (opts.AnimationEngine) {

@@ -135,66 +152,7 @@ /*

delete opts.bootstrappedModule;
if (ivyEnabled()) {
// This is an issue. Issue has been created and Angular team is working on the fix:
// https://github.com/angular/angular/issues/36449
removeApplicationFromDOMIfIvyEnabled(opts, props);
}
// This is an issue. Issue has been created and Angular team is working on the fix:
// https://github.com/angular/angular/issues/36449
removeApplicationFromDOMIfIvyEnabled(opts, props);
});
}
function ivyEnabled() {
try {
// `ɵivyEnabled` variable is exposed starting from version 8.
// We use `require` here except of a single `import { ɵivyEnabled }` because the
// developer can use Angular version that doesn't expose it (all versions <8).
// The `catch` statement will handle those cases.
// eslint-disable-next-line
const { ɵivyEnabled } = require('@angular/core');
return !!ɵivyEnabled;
}
catch (_a) {
return false;
}
}
function removeApplicationFromDOMIfIvyEnabled(opts, props) {
const domElementGetter = chooseDomElementGetter(opts, props);
const domElement = getContainerEl(domElementGetter);
// View Engine removes all nodes automatically when calling `NgModuleRef.destroy()`,
// which calls `ComponentRef.destroy()`.
// Basically this will remove `app-root` or any other selector from the container element.
while (domElement.firstChild)
domElement.removeChild(domElement.firstChild);
}
function getContainerEl(domElementGetter) {
const element = domElementGetter();
if (!element) {
throw Error('domElementGetter did not return a valid dom element');
}
return element;
}
function chooseDomElementGetter(opts, props) {
props = props && props.customProps ? props.customProps : props;
if (props.domElement) {
return () => props.domElement;
}
else if (props.domElementGetter) {
return props.domElementGetter;
}
else if (opts.domElementGetter) {
return opts.domElementGetter;
}
else {
return defaultDomElementGetter(props.name);
}
}
function defaultDomElementGetter(name) {
return function getDefaultDomElement() {
const id = `single-spa-application:${name}`;
let domElement = document.getElementById(id);
if (!domElement) {
domElement = document.createElement('div');
domElement.id = id;
document.body.appendChild(domElement);
}
return domElement;
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLXNwYS1hbmd1bGFyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vc2luZ2xlLXNwYS1hbmd1bGFyLyIsInNvdXJjZXMiOlsic3JjL3NpbmdsZS1zcGEtYW5ndWxhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBR0EsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFOUQsTUFBTSxXQUFXLEdBQUc7SUFDbEIsMERBQTBEO0lBQzFELE1BQU0sRUFBRSxJQUFLO0lBQ2IsaUJBQWlCLEVBQUUsSUFBSztJQUN4QixRQUFRLEVBQUUsSUFBSztJQUNmLGdCQUFnQjtJQUNoQixNQUFNLEVBQUUsU0FBUztJQUNqQixnQkFBZ0IsRUFBRSxTQUFTO0lBQzNCLGVBQWUsRUFBRSxTQUFTO0lBQzFCLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFO0NBQ3hDLENBQUM7QUFFRixNQUFNLFVBQVUsZ0JBQWdCLENBQUMsUUFBOEI7SUFDN0QsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUU7UUFDaEMsTUFBTSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztLQUNuRTtJQUVELE1BQU0sSUFBSSxtQ0FDTCxXQUFXLEdBQ1gsUUFBUSxDQUNaLENBQUM7SUFFRixJQUFJLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixLQUFLLFVBQVUsRUFBRTtRQUNoRCxNQUFNLEtBQUssQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO0tBQzVFO0lBRUQsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFO1FBQ3JDLE1BQU0sS0FBSyxDQUFDLHdEQUF3RCxDQUFDLENBQUM7S0FDdkU7SUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtRQUNoQixNQUFNLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO0tBQ2pFO0lBRUQsT0FBTztRQUNMLFNBQVMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFB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LGdCQUFnQixFQUFFO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0tBQzlCO1NBQU07UUFDTCxPQUFPLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUM1QztBQUNILENBQUM7QUFFRCxTQUFTLHVCQUF1QixDQUFDLElBQVk7SUFDM0MsT0FBTyxTQUFTLG9CQUFvQjtRQUNsQyxNQUFNLEVBQUUsR0FBRywwQkFBMEIsSUFBSSxFQUFFLENBQUM7UUFDNUMsSUFBSSxVQUFVLEdBQXVCLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFakUsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLFVBQVUsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ25CLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3ZDO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nWm9uZSwgVHlwZSwgTmdNb2R1bGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFwcFByb3BzLCBMaWZlQ3ljbGVzIH0gZnJvbSAnc2luZ2xlLXNwYSc7XG5cbmltcG9ydCB7IFNpbmdsZVNwYVBsYXRmb3JtTG9jYXRpb24gfSBmcm9tICcuL2V4dHJhLXByb3ZpZGVycyc7XG5cbmNvbnN0IGRlZmF1bHRPcHRzID0ge1xuICAvLyBSZXF1aXJlZCBvcHRzIHRoYXQgd2lsbCBiZSBzZXQgYnkgdGhlIGxpYnJhcnkgY29uc3VtZXIuXG4gIE5nWm9uZTogbnVsbCEsXG4gIGJvb3RzdHJhcEZ1bmN0aW9uOiBudWxsISxcbiAgdGVtcGxhdGU6IG51bGwhLFxuICAvLyBvcHRpb25hbCBvcHRzXG4gIFJvdXRlcjogdW5kZWZpbmVkLFxuICBkb21FbGVtZW50R2V0dGVyOiB1bmRlZmluZWQsIC8vIG9ubHkgb3B0aW9uYWwgaWYgeW91IHByb3ZpZGUgYSBkb21FbGVtZW50R2V0dGVyIGFzIGEgY3VzdG9tIHByb3BcbiAgQW5pbWF0aW9uRW5naW5lOiB1bmRlZmluZWQsXG4gIHVwZGF0ZUZ1bmN0aW9uOiAoKSA9PiBQcm9taXNlLnJlc29sdmUoKSxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBzaW5nbGVTcGFBbmd1bGFyKHVzZXJPcHRzOiBTaW5nbGVTcGFBbmd1bGFyT3B0cyk6IExpZmVDeWNsZXMge1xuICBpZiAodHlwZW9mIHVzZXJPcHRzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IEVycm9yKCdzaW5nbGUtc3BhLWFuZ3VsYXIgcmVxdWlyZXMgYSBjb25maWd1cmF0aW9uIG9iamVjdCcpO1xuICB9XG5cbiAgY29uc3Qgb3B0czogU2luZ2xlU3BhQW5ndWxhck9wdHMgPSB7XG4gICAgLi4uZGVmYXVsdE9wdHMsXG4gICAgLi4udXNlck9wdHMsXG4gIH07XG5cbiAgaWYgKHR5cGVvZiBvcHRzLmJvb3RzdHJhcEZ1bmN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgRXJyb3IoJ3NpbmdsZS1zcGEtYW5ndWxhciBtdXN0IGJlIHBhc3NlZCBhbiBvcHRzLmJvb3RzdHJhcEZ1bmN0aW9uJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIG9wdHMudGVtcGxhdGUgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgRXJyb3IoJ3NpbmdsZS1zcGEtYW5ndWxhciBtdXN0IGJlIHBhc3NlZCBvcHRzLnRlbXBsYXRlIHN0cmluZycpO1xuICB9XG5cbiAgaWYgKCFvcHRzLk5nWm9uZSkge1xuICAgIHRocm93IEVycm9yKGBzaW5nbGUtc3BhLWFuZ3VsYXIgbXVzdCBiZSBwYXNzZWQgdGhlIE5nWm9uZSBvcHRgKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYm9vdHN0cmFwOiBib290c3RyYXAuYmluZChudWxsLCBvcHRzIGFzIEJvb3RzdHJhcHBlZFNpbmdsZVNwYUFuZ3VsYXJPcHRzKSxcbiAgICBtb3VudDogbW91bnQuYmluZChudWxsLCBvcHRzKSxcbiAgICB1bm1vdW50OiB1bm1vdW50LmJpbmQobnVsbCwgb3B0cyBhcyBCb290c3RyYXBwZWRTaW5nbGVTcGFBbmd1bGFyT3B0cyksXG4gICAgdXBkYXRlOiBvcHRzLnVwZGF0ZUZ1bmN0aW9uLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBib290c3RyYXAob3B0czogQm9vdHN0cmFwcGVkU2luZ2xlU3BhQW5ndWxhck9wdHMsIHByb3BzOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gSW4gb3JkZXIgZm9yIG11bHRpcGxlIEFuZ3VsYXIgYXBwcyB0byB3b3JrIGNvbmN1cnJlbnRseSBvbiBhIHBhZ2UsIHRoZXkgZWFjaCBuZWVkIGEgdW5pcXVlIGlkZW50aWZpZXIuXG4gIG9wdHMuem9uZUlkZW50aWZpZXIgPSBgc2luZ2xlLXNwYS1hbmd1bGFyOiR7cHJvcHMubmFtZSB8fCBwcm9wcy5hcHBOYW1lfWA7XG5cbiAgLy8gVGhpcyBpcyBhIGhhY2ssIHNpbmNlIE5nWm9uZSBkb2Vzbid0IGFsbG93IHlvdSB0byBjb25maWd1cmUgdGhlIHByb3BlcnR5IHRoYXQgaWRlbnRpZmllcyB5b3VyIHpvbmUuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vUGxhY2VNZS1TQVMvc2luZ2xlLXNwYS1hbmd1bGFyLWNsaS9pc3N1ZXMvMzMsXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5nbGUtc3BhL3NpbmdsZS1zcGEtYW5ndWxhci9pc3N1ZXMvNDcsXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi9hMTRkYzJkN2E0ODIxYTE5ZjIwYTk1NDcwNTNhNTczNDc5OGY1NDFlL3BhY2thZ2VzL2NvcmUvc3JjL3pvbmUvbmdfem9uZS50cyNMMTQ0LFxuICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iL2ExNGRjMmQ3YTQ4MjFhMTlmMjBhOTU0NzA1M2E1NzM0Nzk4ZjU0MWUvcGFja2FnZXMvY29yZS9zcmMvem9uZS9uZ196b25lLnRzI0wyNTdcbiAgb3B0cy5OZ1pvbmUuaXNJbkFuZ3VsYXJab25lID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gd2luZG93LlpvbmUuY3VycmVudC5fcHJvcGVydGllc1tvcHRzLnpvbmVJZGVudGlmaWVyXSA9PT0gdHJ1ZTtcbiAgfTtcblxuICBvcHRzLnJvdXRpbmdFdmVudExpc3RlbmVyID0gKCkgPT4ge1xuICAgIG9wdHMuYm9vdHN0cmFwcGVkTmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3NpbmdsZS1zcGEvc2luZ2xlLXNwYS1hbmd1bGFyL2lzc3Vlcy84NlxuICAgICAgLy8gWm9uZSBpcyB1bmF3YXJlIG9mIHRoZSBzaW5nbGUtc3BhIG5hdmlnYXRpb24gY2hhbmdlIGFuZCBzbyBBbmd1bGFyIGNoYW5nZSBkZXRlY3Rpb24gZG9lc24ndCB3b3JrXG4gICAgICAvLyB1bmxlc3Mgd2UgdGVsbCBab25lIHRoYXQgc29tZXRoaW5nIGhhcHBlbmVkXG4gICAgfSk7XG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1vdW50KG9wdHM6IFNpbmdsZVNwYUFuZ3VsYXJPcHRzLCBwcm9wczogYW55KTogUHJvbWlzZTxOZ01vZHVsZVJlZjxhbnk+PiB7XG4gIGNvbnN0IGRvbUVsZW1lbnRHZXR0ZXIgPSBjaG9vc2VEb21FbGVtZW50R2V0dGVyKG9wdHMsIHByb3BzKTtcblxuICBpZiAoIWRvbUVsZW1lbnRHZXR0ZXIpIHtcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIGBjYW5ub3QgbW91bnQgYW5ndWxhciBhcHBsaWNhdGlvbiAnJHtcbiAgICAgICAgcHJvcHMubmFtZSB8fCBwcm9wcy5hcHBOYW1lXG4gICAgICB9JyB3aXRob3V0IGEgZG9tRWxlbWVudEdldHRlciBwcm92aWRlZCBlaXRoZXIgYXMgYW4gb3B0IG9yIGEgcHJvcGAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGNvbnRhaW5lckVsID0gZ2V0Q29udGFpbmVyRWwoZG9tRWxlbWVudEdldHRlcik7XG4gIGNvbnRhaW5lckVsLmlubmVySFRNTCA9IG9wdHMudGVtcGxhdGU7XG4gIGNvbnN0IGJvb3RzdHJhcFByb21pc2UgPSBvcHRzLmJvb3RzdHJhcEZ1bmN0aW9uKHByb3BzKTtcblxuICBpZiAoIShib290c3RyYXBQcm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZSkpIHtcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIGBzaW5nbGUtc3BhLWFuZ3VsYXI6IHRoZSBvcHRzLmJvb3RzdHJhcEZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgcHJvbWlzZSwgYnV0IGluc3RlYWQgcmV0dXJuZWQgYSAnJHt0eXBlb2YgYm9vdHN0cmFwUHJvbWlzZX0nIHRoYXQgaXMgbm90IGEgUHJvbWlzZWAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IG1vZHVsZTogTmdNb2R1bGVSZWY8YW55PiA9IGF3YWl0IGJvb3RzdHJhcFByb21pc2U7XG5cbiAgaWYgKCFtb2R1bGUgfHwgdHlwZW9mIG1vZHVsZS5kZXN0cm95ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICBgc2luZ2xlLXNwYS1hbmd1bGFyOiB0aGUgb3B0cy5ib290c3RyYXBGdW5jdGlvbiByZXR1cm5lZCBhIHByb21pc2UgdGhhdCBkaWQgbm90IHJlc29sdmUgd2l0aCBhIHZhbGlkIEFuZ3VsYXIgbW9kdWxlLiBEaWQgeW91IGNhbGwgcGxhdGZvcm1Ccm93c2VyKCkuYm9vdHN0cmFwTW9kdWxlRmFjdG9yeSgpIGNvcnJlY3RseT9gLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBzaW5nbGVTcGFQbGF0Zm9ybUxvY2F0aW9uOiBTaW5nbGVTcGFQbGF0Zm9ybUxvY2F0aW9uIHwgbnVsbCA9IG1vZHVsZS5pbmplY3Rvci5nZXQoXG4gICAgU2luZ2xlU3BhUGxhdGZvcm1Mb2NhdGlvbixcbiAgICBudWxsLFxuICApO1xuXG4gIC8vIFRoZSB1c2VyIGhhcyB0byBwcm92aWRlIGBCcm93c2VyUGxhdGZvcm1Mb2NhdGlvbmAgb25seSBpZiBoaXMgYXBwbGljYXRpb24gdXNlcyByb3V0aW5nLlxuICAvLyBTbyBpZiBoZSBwcm92aWRlZCBgUm91dGVyYCBidXQgZGlkbid0IHByb3ZpZGUgYEJyb3dzZXJQbGF0Zm9ybUxvY2F0aW9uYCB0aGVuIHdlIGhhdmUgdG8gaW5mb3JtIGhpbS5cbiAgaWYgKG9wdHMuUm91dGVyICYmIHNpbmdsZVNwYVBsYXRmb3JtTG9jYXRpb24gPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFx0XG4gICAgICBzaW5nbGUtc3BhLWFuZ3VsYXI6IGNvdWxkIG5vdCByZXRyaWV2ZSBleHRyYSBwcm92aWRlcnMgZnJvbSB0aGUgcGxhdGZvcm0gaW5qZWN0b3IuIERpZCB5b3UgY2FsbCBnZXRTaW5nbGVTcGFFeHRyYVByb3ZpZGVycygpIHdoZW4gY3JlYXRpbmcgcGxhdGZvcm0/XHRcbiAgICBgKTtcbiAgfVxuXG4gIGNvbnN0IGJvb3RzdHJhcHBlZE9wdHMgPSBvcHRzIGFzIEJvb3RzdHJhcHBlZFNpbmdsZVNwYUFuZ3VsYXJPcHRzO1xuICBjb25zdCBuZ1pvbmU6IE5nWm9uZSA9IG1vZHVsZS5pbmplY3Rvci5nZXQob3B0cy5OZ1pvbmUpO1xuXG4gIHNpbmdsZVNwYVBsYXRmb3JtTG9jYXRpb24hLnNldE5nWm9uZShuZ1pvbmUpO1xuICBib290c3RyYXBwZWRPcHRzLmJvb3RzdHJhcHBlZE5nWm9uZSA9IG5nWm9uZTtcbiAgYm9vdHN0cmFwcGVkT3B0cy5ib290c3RyYXBwZWROZ1pvbmVbJ19pbm5lciddLl9wcm9wZXJ0aWVzW2Jvb3RzdHJhcHBlZE9wdHMuem9uZUlkZW50aWZpZXJdID0gdHJ1ZTtcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3NpbmdsZS1zcGE6cm91dGluZy1ldmVudCcsIGJvb3RzdHJhcHBlZE9wdHMucm91dGluZ0V2ZW50TGlzdGVuZXIpO1xuICBib290c3RyYXBwZWRPcHRzLmJvb3RzdHJhcHBlZE1vZHVsZSA9IG1vZHVsZTtcblxuICByZXR1cm4gbW9kdWxlO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5hc3luYyBmdW5jdGlvbiB1bm1vdW50KG9wdHM6IEJvb3RzdHJhcHBlZFNpbmdsZVNwYUFuZ3VsYXJPcHRzLCBwcm9wczogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChvcHRzLlJvdXRlcikge1xuICAgIC8vIFdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzE5MDc5XG4gICAgY29uc3Qgcm91dGVyID0gb3B0cy5ib290c3RyYXBwZWRNb2R1bGUuaW5qZWN0b3IuZ2V0KG9wdHMuUm91dGVyKTtcbiAgICByb3V0ZXIuZGlzcG9zZSgpO1xuICB9XG5cbiAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3NpbmdsZS1zcGE6cm91dGluZy1ldmVudCcsIG9wdHMucm91dGluZ0V2ZW50TGlzdGVuZXIpO1xuXG4gIGlmIChvcHRzLkFuaW1hdGlvbkVuZ2luZSkge1xuICAgIC8qXG4gICAgVGhlIEJyb3dzZXJBbmltYXRpb25zTW9kdWxlIGRvZXMgbm90IGNsZWFuIHVwIGFmdGVyIGl0c2VsZiA6JyguIFdoZW4geW91IHVubW91bnQvZGVzdHJveSB0aGUgbWFpbiBtb2R1bGUsIHRoZVxuICAgIEJyb3dzZXJBbmltYXRpb25zTW9kdWxlIHVzZXMgYW4gQW5pbWF0aW9uUmVuZGVyZXIgdGhpbmcgdG8gcmVtb3ZlIGRvbSBlbGVtZW50cyBmcm9tIHRoZSBwYWdlLiBCdXQgdGhlIEFuaW1hdGlvblJlbmRlcmVyXG4gICAgZGVmZXJzIHRoZSBhY3R1YWwgd29yayB0byB0aGUgVHJhbnNpdGlvbkFuaW1hdGlvbkVuZ2luZSB0byBkbyB0aGlzLCBhbmQgdGhlIFRyYW5zaXRpb25BbmltYXRpb25FbmdpbmUgZG9lc24ndCBhY3R1YWxseVxuICAgIHJlbW92ZSB0aGUgZG9tIG5vZGUsIGJ1dCBqdXN0IGNhbGxzIFwibWFya0VsZW1lbnRBc1JlbW92ZWQoKVwiLlxuXG4gICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi9kYjYyY2NmOWViNDZlZTg5MzY2YWRlNTg2MzY1ZWEwMjdiYjkzZWIxL3BhY2thZ2VzL2FuaW1hdGlvbnMvYnJvd3Nlci9zcmMvcmVuZGVyL3RyYW5zaXRpb25fYW5pbWF0aW9uX2VuZ2luZS50cyNMNzE3XG5cbiAgICBXaGF0IG1hcmtBc1JlbW92ZWREb2VzIGlzIHB1dCBpdCBpbnRvIGFuIGFycmF5IGNhbGxlZCBcImNvbGxlY3RlZExlYXZlRWxlbWVudHNcIiwgd2hpY2ggaXMgYWxsIHRoZSBlbGVtZW50cyB0aGF0IHNob3VsZCBiZSByZW1vdmVkXG4gICAgYWZ0ZXIgdGhlIERPTSBoYXMgaGFkIGEgY2hhbmNlIHRvIGRvIGFueSBhbmltYXRpb25zLlxuXG4gICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi9tYXN0ZXIvcGFja2FnZXMvYW5pbWF0aW9ucy9icm93c2VyL3NyYy9yZW5kZXIvdHJhbnNpdGlvbl9hbmltYXRpb25fZW5naW5lLnRzI0w1MjVcblxuICAgIFRoZSBhY3R1YWwgZG9tIG5vZGVzIGFyZW4ndCByZW1vdmVkIHVudGlsIHRoZSBUcmFuc2l0aW9uQW5pbWF0aW9uRW5naW5lIFwiZmx1c2hlc1wiLlxuXG4gICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi9kYjYyY2NmOWViNDZlZTg5MzY2YWRlNTg2MzY1ZWEwMjdiYjkzZWIxL3BhY2thZ2VzL2FuaW1hdGlvbnMvYnJvd3Nlci9zcmMvcmVuZGVyL3RyYW5zaXRpb25fYW5pbWF0aW9uX2VuZ2luZS50cyNMODUxXG5cbiAgICBVbmZvcnR1bmF0ZWx5LCB0aG91Z2gsIHRoYXQgXCJmbHVzaFwiIHdpbGwgbmV2ZXIgaGFwcGVuLCBzaW5jZSB0aGUgZW50aXJlIG1vZHVsZSBpcyBiZWluZyBkZXN0cm95ZWQgYW5kIHRoZXJlIHdpbGwgYmUgbm8gbW9yZSBmbHVzaGVzLlxuICAgIFNvIHdoYXQgd2UgZG8gaW4gdGhpcyBjb2RlIGlzIGZvcmNlIG9uZSBtb3JlIGZsdXNoIG9mIHRoZSBhbmltYXRpb25zIGFmdGVyIHRoZSBtb2R1bGUgaXMgZGVzdHJveWVkLlxuXG4gICAgSWRlYWxseSwgd2Ugd291bGQgZG8gdGhpcyBieSBnZXR0aW5nIHRoZSBUcmFuc2l0aW9uQW5pbWF0aW9uRW5naW5lIGRpcmVjdGx5IGFuZCBmbHVzaGluZyBpdC4gVW5mb3J0dW5hdGVseSwgdGhvdWdoLCBpdCdzIHByaXZhdGUgY2xhc3NcbiAgICB0aGF0IGNhbm5vdCBiZSBpbXBvcnRlZCBhbmQgaXMgbm90IHByb3ZpZGVkIHRvIHRoZSBkZXBlbmRlbmN5IGluamVjdG9yLiBTbywgaW5zdGVhZCwgd2UgZ2V0IGl0cyB3cmFwcGVyIGNsYXNzLCBBbmltYXRpb25FbmdpbmUsIGFuZCB0aGVuXG4gICAgYWNjZXNzIGl0cyBwcml2YXRlIHZhcmlhYmxlIHJlZmVyZW5jZSB0byB0aGUgVHJhbnNpdGlvbkFuaW1hdGlvbkVuZ2luZSBzbyB0aGF0IHdlIGNhbiBjYWxsIGZsdXNoLlxuICAgICovXG4gICAgY29uc3QgYW5pbWF0aW9uRW5naW5lID0gb3B0cy5ib290c3RyYXBwZWRNb2R1bGUuaW5qZWN0b3IuZ2V0KG9wdHMuQW5pbWF0aW9uRW5naW5lKTtcbiAgICBhbmltYXRpb25FbmdpbmUuX3RyYW5zaXRpb25FbmdpbmUuZmx1c2goKTtcbiAgfVxuXG4gIG9wdHMuYm9vdHN0cmFwcGVkTW9kdWxlLmRlc3Ryb3koKTtcbiAgZGVsZXRlIG9wdHMuYm9vdHN0cmFwcGVkTW9kdWxlO1xuXG4gIGlmIChpdnlFbmFibGVkKCkpIHtcbiAgICAvLyBUaGlzIGlzIGFuIGlzc3VlLiBJc3N1ZSBoYXMgYmVlbiBjcmVhdGVkIGFuZCBBbmd1bGFyIHRlYW0gaXMgd29ya2luZyBvbiB0aGUgZml4OlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzM2NDQ5XG4gICAgcmVtb3ZlQXBwbGljYXRpb25Gcm9tRE9NSWZJdnlFbmFibGVkKG9wdHMsIHByb3BzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpdnlFbmFibGVkKCk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIC8vIGDJtWl2eUVuYWJsZWRgIHZhcmlhYmxlIGlzIGV4cG9zZWQgc3RhcnRpbmcgZnJvbSB2ZXJzaW9uIDguXG4gICAgLy8gV2UgdXNlIGByZXF1aXJlYCBoZXJlIGV4Y2VwdCBvZiBhIHNpbmdsZSBgaW1wb3J0IHsgybVpdnlFbmFibGVkIH1gIGJlY2F1c2UgdGhlXG4gICAgLy8gZGV2ZWxvcGVyIGNhbiB1c2UgQW5ndWxhciB2ZXJzaW9uIHRoYXQgZG9lc24ndCBleHBvc2UgaXQgKGFsbCB2ZXJzaW9ucyA8OCkuXG4gICAgLy8gVGhlIGBjYXRjaGAgc3RhdGVtZW50IHdpbGwgaGFuZGxlIHRob3NlIGNhc2VzLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIGNvbnN0IHsgybVpdnlFbmFibGVkIH0gPSByZXF1aXJlKCdAYW5ndWxhci9jb3JlJyk7XG4gICAgcmV0dXJuICEhybVpdnlFbmFibGVkO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlQXBwbGljYXRpb25Gcm9tRE9NSWZJdnlFbmFibGVkKG9wdHM6IFNpbmdsZVNwYUFuZ3VsYXJPcHRzLCBwcm9wczogYW55KTogdm9pZCB7XG4gIGNvbnN0IGRvbUVsZW1lbnRHZXR0ZXIgPSBjaG9vc2VEb21FbGVtZW50R2V0dGVyKG9wdHMsIHByb3BzKTtcbiAgY29uc3QgZG9tRWxlbWVudCA9IGdldENvbnRhaW5lckVsKGRvbUVsZW1lbnRHZXR0ZXIpO1xuICAvLyBWaWV3IEVuZ2luZSByZW1vdmVzIGFsbCBub2RlcyBhdXRvbWF0aWNhbGx5IHdoZW4gY2FsbGluZyBgTmdNb2R1bGVSZWYuZGVzdHJveSgpYCxcbiAgLy8gd2hpY2ggY2FsbHMgYENvbXBvbmVudFJlZi5kZXN0cm95KClgLlxuICAvLyBCYXNpY2FsbHkgdGhpcyB3aWxsIHJlbW92ZSBgYXBwLXJvb3RgIG9yIGFueSBvdGhlciBzZWxlY3RvciBmcm9tIHRoZSBjb250YWluZXIgZWxlbWVudC5cbiAgd2hpbGUgKGRvbUVsZW1lbnQuZmlyc3RDaGlsZCkgZG9tRWxlbWVudC5yZW1vdmVDaGlsZChkb21FbGVtZW50LmZpcnN0Q2hpbGQpO1xufVxuXG5mdW5jdGlvbiBnZXRDb250YWluZXJFbChkb21FbGVtZW50R2V0dGVyOiBEb21FbGVtZW50R2V0dGVyKTogbmV2ZXIgfCBIVE1MRWxlbWVudCB7XG4gIGNvbnN0IGVsZW1lbnQgPSBkb21FbGVtZW50R2V0dGVyKCk7XG5cbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgdGhyb3cgRXJyb3IoJ2RvbUVsZW1lbnRHZXR0ZXIgZGlkIG5vdCByZXR1cm4gYSB2YWxpZCBkb20gZWxlbWVudCcpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGNob29zZURvbUVsZW1lbnRHZXR0ZXIob3B0czogU2luZ2xlU3BhQW5ndWxhck9wdHMsIHByb3BzOiBhbnkpOiBEb21FbGVtZW50R2V0dGVyIHtcbiAgcHJvcHMgPSBwcm9wcyAmJiBwcm9wcy5jdXN0b21Qcm9wcyA/IHByb3BzLmN1c3RvbVByb3BzIDogcHJvcHM7XG4gIGlmIChwcm9wcy5kb21FbGVtZW50KSB7XG4gICAgcmV0dXJuICgpID0+IHByb3BzLmRvbUVsZW1lbnQ7XG4gIH0gZWxzZSBpZiAocHJvcHMuZG9tRWxlbWVudEdldHRlcikge1xuICAgIHJldHVybiBwcm9wcy5kb21FbGVtZW50R2V0dGVyO1xuICB9IGVsc2UgaWYgKG9wdHMuZG9tRWxlbWVudEdldHRlcikge1xuICAgIHJldHVybiBvcHRzLmRvbUVsZW1lbnRHZXR0ZXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRlZmF1bHREb21FbGVtZW50R2V0dGVyKHByb3BzLm5hbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHREb21FbGVtZW50R2V0dGVyKG5hbWU6IHN0cmluZyk6IERvbUVsZW1lbnRHZXR0ZXIge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0RGVmYXVsdERvbUVsZW1lbnQoKSB7XG4gICAgY29uc3QgaWQgPSBgc2luZ2xlLXNwYS1hcHBsaWNhdGlvbjoke25hbWV9YDtcbiAgICBsZXQgZG9tRWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXG4gICAgaWYgKCFkb21FbGVtZW50KSB7XG4gICAgICBkb21FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBkb21FbGVtZW50LmlkID0gaWQ7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvbUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBkb21FbGVtZW50O1xuICB9O1xufVxuXG50eXBlIERvbUVsZW1lbnRHZXR0ZXIgPSAoKSA9PiBIVE1MRWxlbWVudDtcblxuaW50ZXJmYWNlIFNpbmdsZVNwYUFuZ3VsYXJPcHRzIHtcbiAgTmdab25lOiB0eXBlb2YgTmdab25lO1xuICBib290c3RyYXBGdW5jdGlvbihwcm9wczogQXBwUHJvcHMpOiBQcm9taXNlPE5nTW9kdWxlUmVmPGFueT4+O1xuICB1cGRhdGVGdW5jdGlvbj8ocHJvcHM6IEFwcFByb3BzKTogUHJvbWlzZTxhbnk+O1xuICB0ZW1wbGF0ZTogc3RyaW5nO1xuICBSb3V0ZXI/OiBUeXBlPGFueT47XG4gIGRvbUVsZW1lbnRHZXR0ZXI/KCk6IEhUTUxFbGVtZW50O1xuICBBbmltYXRpb25FbmdpbmU/OiBUeXBlPGFueT47XG59XG5cbmludGVyZmFjZSBCb290c3RyYXBwZWRTaW5nbGVTcGFBbmd1bGFyT3B0cyBleHRlbmRzIFNpbmdsZVNwYUFuZ3VsYXJPcHRzIHtcbiAgYm9vdHN0cmFwcGVkTmdab25lOiBOZ1pvbmU7XG4gIGJvb3RzdHJhcHBlZE1vZHVsZTogTmdNb2R1bGVSZWY8YW55PjtcbiAgcm91dGluZ0V2ZW50TGlzdGVuZXI6ICgpID0+IHZvaWQ7XG4gIHpvbmVJZGVudGlmaWVyOiBzdHJpbmc7XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLXNwYS1hbmd1bGFyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vc2luZ2xlLXNwYS1hbmd1bGFyLyIsInNvdXJjZXMiOlsic3JjL3NpbmdsZS1zcGEtYW5ndWxhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxFQUNMLGNBQWMsRUFDZCxzQkFBc0IsRUFDdEIsb0NBQW9DLEdBR3JDLE1BQU0sOEJBQThCLENBQUM7QUFFdEMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFOUQsTUFBTSxXQUFXLEdBQUc7SUFDbEIsMERBQTBEO0lBQzFELE1BQU0sRUFBRSxJQUFLO0lBQ2IsaUJBQWlCLEVBQUUsSUFBSztJQUN4QixRQUFRLEVBQUUsSUFBSztJQUNmLGdCQUFnQjtJQUNoQixNQUFNLEVBQUUsU0FBUztJQUNqQixnQkFBZ0IsRUFBRSxTQUFTO0lBQzNCLGVBQWUsRUFBRSxTQUFTO0lBQzFCLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFO0NBQ3hDLENBQUM7QUFFRixNQUFNLFVBQVUsZ0JBQWdCLENBQUMsUUFBOEI7SUFDN0QsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUU7UUFDaEMsTUFBTSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztLQUNuRTtJQUVELE1BQU0sSUFBSSxtQ0FDTCxXQUFXLEdBQ1gsUUFBUSxDQUNaLENBQUM7SUFFRixJQUFJLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixLQUFLLFVBQVUsRUFBRTtRQUNoRCxNQUFNLEtBQUssQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO0tBQzVFO0lBRUQsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFO1FBQ3JDLE1BQU0sS0FBSyxDQUFDLHdEQUF3RCxDQUFDLENBQUM7S0FDdkU7SUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtRQUNoQixNQUFNLEtBQUssQ0FBQyxrREFBa0Qs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QUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNuRixlQUFlLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDM0M7UUFFRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFFL0IsbUZBQW1GO1FBQ25GLGtEQUFrRDtRQUNsRCxvQ0FBb0MsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEQsQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExpZmVDeWNsZXMgfSBmcm9tICdzaW5nbGUtc3BhJztcbmltcG9ydCB7XG4gIGdldENvbnRhaW5lckVsLFxuICBjaG9vc2VEb21FbGVtZW50R2V0dGVyLFxuICByZW1vdmVBcHBsaWNhdGlvbkZyb21ET01JZkl2eUVuYWJsZWQsXG4gIFNpbmdsZVNwYUFuZ3VsYXJPcHRzLFxuICBCb290c3RyYXBwZWRTaW5nbGVTcGFBbmd1bGFyT3B0cyxcbn0gZnJvbSAnc2luZ2xlLXNwYS1hbmd1bGFyL2ludGVybmFscyc7XG5cbmltcG9ydCB7IFNpbmdsZVNwYVBsYXRmb3JtTG9jYXRpb24gfSBmcm9tICcuL2V4dHJhLXByb3ZpZGVycyc7XG5cbmNvbnN0IGRlZmF1bHRPcHRzID0ge1xuICAvLyBSZXF1aXJlZCBvcHRzIHRoYXQgd2lsbCBiZSBzZXQgYnkgdGhlIGxpYnJhcnkgY29uc3VtZXIuXG4gIE5nWm9uZTogbnVsbCEsXG4gIGJvb3RzdHJhcEZ1bmN0aW9uOiBudWxsISxcbiAgdGVtcGxhdGU6IG51bGwhLFxuICAvLyBvcHRpb25hbCBvcHRzXG4gIFJvdXRlcjogdW5kZWZpbmVkLFxuICBkb21FbGVtZW50R2V0dGVyOiB1bmRlZmluZWQsIC8vIG9ubHkgb3B0aW9uYWwgaWYgeW91IHByb3ZpZGUgYSBkb21FbGVtZW50R2V0dGVyIGFzIGEgY3VzdG9tIHByb3BcbiAgQW5pbWF0aW9uRW5naW5lOiB1bmRlZmluZWQsXG4gIHVwZGF0ZUZ1bmN0aW9uOiAoKSA9PiBQcm9taXNlLnJlc29sdmUoKSxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBzaW5nbGVTcGFBbmd1bGFyKHVzZXJPcHRzOiBTaW5nbGVTcGFBbmd1bGFyT3B0cyk6IExpZmVDeWNsZXMge1xuICBpZiAodHlwZW9mIHVzZXJPcHRzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IEVycm9yKCdzaW5nbGUtc3BhLWFuZ3VsYXIgcmVxdWlyZXMgYSBjb25maWd1cmF0aW9uIG9iamVjdCcpO1xuICB9XG5cbiAgY29uc3Qgb3B0czogU2luZ2xlU3BhQW5ndWxhck9wdHMgPSB7XG4gICAgLi4uZGVmYXVsdE9wdHMsXG4gICAgLi4udXNlck9wdHMsXG4gIH07XG5cbiAgaWYgKHR5cGVvZiBvcHRzLmJvb3RzdHJhcEZ1bmN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgRXJyb3IoJ3NpbmdsZS1zcGEtYW5ndWxhciBtdXN0IGJlIHBhc3NlZCBhbiBvcHRzLmJvb3RzdHJhcEZ1bmN0aW9uJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIG9wdHMudGVtcGxhdGUgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgRXJyb3IoJ3NpbmdsZS1zcGEtYW5ndWxhciBtdXN0IGJlIHBhc3NlZCBvcHRzLnRlbXBsYXRlIHN0cmluZycpO1xuICB9XG5cbiAgaWYgKCFvcHRzLk5nWm9uZSkge1xuICAgIHRocm93IEVycm9yKGBzaW5nbGUtc3BhLWFuZ3VsYXIgbXVzdCBiZSBwYXNzZWQgdGhlIE5nWm9uZSBvcHRgKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYm9vdHN0cmFwOiBib290c3RyYXAuYmluZChudWxsLCBvcHRzIGFzIEJvb3RzdHJhcHBlZFNpbmdsZVNwYUFuZ3VsYXJPcHRzKSxcbiAgICBtb3VudDogbW91bnQuYmluZChudWxsLCBvcHRzKSxcbiAgICB1bm1vdW50OiB1bm1vdW50LmJpbmQobnVsbCwgb3B0cyBhcyBCb290c3RyYXBwZWRTaW5nbGVTcGFBbmd1bGFyT3B0cyksXG4gICAgdXBkYXRlOiBvcHRzLnVwZGF0ZUZ1bmN0aW9uLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBib290c3RyYXAob3B0czogQm9vdHN0cmFwcGVkU2luZ2xlU3BhQW5ndWxhck9wdHMsIHByb3BzOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gQW5ndWxhciBwcm92aWRlcyBhbiBvcHBvcnR1bml0eSB0byBkZXZlbG9wIGB6b25lLWxlc3NgIGFwcGxpY2F0aW9uLCB3aGVyZSBkZXZlbG9wZXJzXG4gIC8vIGhhdmUgdG8gdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIG1hbnVhbGx5LlxuICAvLyBTZWUgaHR0cHM6Ly9hbmd1bGFyLmlvL2d1aWRlL3pvbmUjbm9vcHpvbmVcbiAgaWYgKG9wdHMuTmdab25lID09PSAnbm9vcCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBJbiBvcmRlciBmb3IgbXVsdGlwbGUgQW5ndWxhciBhcHBzIHRvIHdvcmsgY29uY3VycmVudGx5IG9uIGEgcGFnZSwgdGhleSBlYWNoIG5lZWQgYSB1bmlxdWUgaWRlbnRpZmllci5cbiAgb3B0cy56b25lSWRlbnRpZmllciA9IGBzaW5nbGUtc3BhLWFuZ3VsYXI6JHtwcm9wcy5uYW1lIHx8IHByb3BzLmFwcE5hbWV9YDtcblxuICAvLyBUaGlzIGlzIGEgaGFjaywgc2luY2UgTmdab25lIGRvZXNuJ3QgYWxsb3cgeW91IHRvIGNvbmZpZ3VyZSB0aGUgcHJvcGVydHkgdGhhdCBpZGVudGlmaWVzIHlvdXIgem9uZS5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9QbGFjZU1lLVNBUy9zaW5nbGUtc3BhLWFuZ3VsYXItY2xpL2lzc3Vlcy8zMyxcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmdsZS1zcGEvc2luZ2xlLXNwYS1hbmd1bGFyL2lzc3Vlcy80NyxcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iL2ExNGRjMmQ3YTQ4MjFhMTlmMjBhOTU0NzA1M2E1NzM0Nzk4ZjU0MWUvcGFja2FnZXMvY29yZS9zcmMvem9uZS9uZ196b25lLnRzI0wxNDQsXG4gIC8vIGFuZCBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2Jsb2IvYTE0ZGMyZDdhNDgyMWExOWYyMGE5NTQ3MDUzYTU3MzQ3OThmNTQxZS9wYWNrYWdlcy9jb3JlL3NyYy96b25lL25nX3pvbmUudHMjTDI1N1xuICBvcHRzLk5nWm9uZS5pc0luQW5ndWxhclpvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiB3aW5kb3cuWm9uZS5jdXJyZW50Ll9wcm9wZXJ0aWVzW29wdHMuem9uZUlkZW50aWZpZXJdID09PSB0cnVlO1xuICB9O1xuXG4gIG9wdHMucm91dGluZ0V2ZW50TGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgb3B0cy5ib290c3RyYXBwZWROZ1pvbmUhLnJ1bigoKSA9PiB7XG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3NpbmdsZS1zcGEvc2luZ2xlLXNwYS1hbmd1bGFyL2lzc3Vlcy84NlxuICAgICAgLy8gWm9uZSBpcyB1bmF3YXJlIG9mIHRoZSBzaW5nbGUtc3BhIG5hdmlnYXRpb24gY2hhbmdlIGFuZCBzbyBBbmd1bGFyIGNoYW5nZSBkZXRlY3Rpb24gZG9lc24ndCB3b3JrXG4gICAgICAvLyB1bmxlc3Mgd2UgdGVsbCBab25lIHRoYXQgc29tZXRoaW5nIGhhcHBlbmVkXG4gICAgfSk7XG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1vdW50KG9wdHM6IFNpbmdsZVNwYUFuZ3VsYXJPcHRzLCBwcm9wczogYW55KTogUHJvbWlzZTxOZ01vZHVsZVJlZjxhbnk+PiB7XG4gIGNvbnN0IGRvbUVsZW1lbnRHZXR0ZXIgPSBjaG9vc2VEb21FbGVtZW50R2V0dGVyKG9wdHMsIHByb3BzKTtcblxuICBpZiAoIWRvbUVsZW1lbnRHZXR0ZXIpIHtcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIGBjYW5ub3QgbW91bnQgYW5ndWxhciBhcHBsaWNhdGlvbiAnJHtcbiAgICAgICAgcHJvcHMubmFtZSB8fCBwcm9wcy5hcHBOYW1lXG4gICAgICB9JyB3aXRob3V0IGEgZG9tRWxlbWVudEdldHRlciBwcm92aWRlZCBlaXRoZXIgYXMgYW4gb3B0IG9yIGEgcHJvcGAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGNvbnRhaW5lckVsID0gZ2V0Q29udGFpbmVyRWwoZG9tRWxlbWVudEdldHRlcik7XG4gIGNvbnRhaW5lckVsLmlubmVySFRNTCA9IG9wdHMudGVtcGxhdGU7XG4gIGNvbnN0IGJvb3RzdHJhcFByb21pc2UgPSBvcHRzLmJvb3RzdHJhcEZ1bmN0aW9uKHByb3BzKTtcblxuICBpZiAoIShib290c3RyYXBQcm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZSkpIHtcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIGBzaW5nbGUtc3BhLWFuZ3VsYXI6IHRoZSBvcHRzLmJvb3RzdHJhcEZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgcHJvbWlzZSwgYnV0IGluc3RlYWQgcmV0dXJuZWQgYSAnJHt0eXBlb2YgYm9vdHN0cmFwUHJvbWlzZX0nIHRoYXQgaXMgbm90IGEgUHJvbWlzZWAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IG1vZHVsZTogTmdNb2R1bGVSZWY8YW55PiA9IGF3YWl0IGJvb3RzdHJhcFByb21pc2U7XG5cbiAgaWYgKCFtb2R1bGUgfHwgdHlwZW9mIG1vZHVsZS5kZXN0cm95ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICBgc2luZ2xlLXNwYS1hbmd1bGFyOiB0aGUgb3B0cy5ib290c3RyYXBGdW5jdGlvbiByZXR1cm5lZCBhIHByb21pc2UgdGhhdCBkaWQgbm90IHJlc29sdmUgd2l0aCBhIHZhbGlkIEFuZ3VsYXIgbW9kdWxlLiBEaWQgeW91IGNhbGwgcGxhdGZvcm1Ccm93c2VyKCkuYm9vdHN0cmFwTW9kdWxlRmFjdG9yeSgpIGNvcnJlY3RseT9gLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBzaW5nbGVTcGFQbGF0Zm9ybUxvY2F0aW9uOiBTaW5nbGVTcGFQbGF0Zm9ybUxvY2F0aW9uIHwgbnVsbCA9IG1vZHVsZS5pbmplY3Rvci5nZXQoXG4gICAgU2luZ2xlU3BhUGxhdGZvcm1Mb2NhdGlvbixcbiAgICBudWxsLFxuICApO1xuXG4gIGNvbnN0IG5nWm9uZUVuYWJsZWQgPSBvcHRzLk5nWm9uZSAhPT0gJ25vb3AnO1xuXG4gIC8vIFRoZSB1c2VyIGhhcyB0byBwcm92aWRlIGBCcm93c2VyUGxhdGZvcm1Mb2NhdGlvbmAgb25seSBpZiBoaXMgYXBwbGljYXRpb24gdXNlcyByb3V0aW5nLlxuICAvLyBTbyBpZiBoZSBwcm92aWRlZCBgUm91dGVyYCBidXQgZGlkbid0IHByb3ZpZGUgYEJyb3dzZXJQbGF0Zm9ybUxvY2F0aW9uYCB0aGVuIHdlIGhhdmUgdG8gaW5mb3JtIGhpbS5cbiAgLy8gQWxzbyBgZ2V0U2luZ2xlU3BhRXh0cmFQcm92aWRlcnMoKWAgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGlmIHRoZSBkb2Vzbid0IHVzZVxuICAvLyBgem9uZS1sZXNzYCBjaGFuZ2UgZGV0ZWN0aW9uLCBpZiBgTmdab25lYCBpcyBgbm9vcGAgdGhlbiB3ZSBjYW4gc2tpcCBpdC5cbiAgaWYgKG5nWm9uZUVuYWJsZWQgJiYgb3B0cy5Sb3V0ZXIgJiYgc2luZ2xlU3BhUGxhdGZvcm1Mb2NhdGlvbiA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgXHRcbiAgICAgIHNpbmdsZS1zcGEtYW5ndWxhcjogY291bGQgbm90IHJldHJpZXZlIGV4dHJhIHByb3ZpZGVycyBmcm9tIHRoZSBwbGF0Zm9ybSBpbmplY3Rvci4gRGlkIHlvdSBjYWxsIGdldFNpbmdsZVNwYUV4dHJhUHJvdmlkZXJzKCkgd2hlbiBjcmVhdGluZyBwbGF0Zm9ybT9cdFxuICAgIGApO1xuICB9XG5cbiAgY29uc3QgYm9vdHN0cmFwcGVkT3B0cyA9IG9wdHMgYXMgQm9vdHN0cmFwcGVkU2luZ2xlU3BhQW5ndWxhck9wdHM7XG5cbiAgaWYgKG5nWm9uZUVuYWJsZWQpIHtcbiAgICBjb25zdCBuZ1pvbmU6IGltcG9ydCgnQGFuZ3VsYXIvY29yZScpLk5nWm9uZSA9IG1vZHVsZS5pbmplY3Rvci5nZXQob3B0cy5OZ1pvbmUpO1xuICAgIC8vIGBOZ1pvbmVgIGNhbiBiZSBlbmFibGVkIGJ1dCByb3V0aW5nIG1heSBub3QgYmUgdXNlZCB0aHVzIGBnZXRTaW5nbGVTcGFFeHRyYVByb3ZpZGVycygpYFxuICAgIC8vIGZ1bmN0aW9uIHdhcyBub3QgY2FsbGVkLlxuICAgIHNpbmdsZVNwYVBsYXRmb3JtTG9jYXRpb24/LnNldE5nWm9uZShuZ1pvbmUpO1xuICAgIGJvb3RzdHJhcHBlZE9wdHMuYm9vdHN0cmFwcGVkTmdab25lID0gbmdab25lO1xuICAgIGJvb3RzdHJhcHBlZE9wdHMuYm9vdHN0cmFwcGVkTmdab25lWydfaW5uZXInXS5fcHJvcGVydGllc1tcbiAgICAgIGJvb3RzdHJhcHBlZE9wdHMuem9uZUlkZW50aWZpZXJcbiAgICBdID0gdHJ1ZTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2luZ2xlLXNwYTpyb3V0aW5nLWV2ZW50JywgYm9vdHN0cmFwcGVkT3B0cy5yb3V0aW5nRXZlbnRMaXN0ZW5lciEpO1xuICB9XG5cbiAgYm9vdHN0cmFwcGVkT3B0cy5ib290c3RyYXBwZWRNb2R1bGUgPSBtb2R1bGU7XG4gIHJldHVybiBtb2R1bGU7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmFzeW5jIGZ1bmN0aW9uIHVubW91bnQob3B0czogQm9vdHN0cmFwcGVkU2luZ2xlU3BhQW5ndWxhck9wdHMsIHByb3BzOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKG9wdHMuUm91dGVyKSB7XG4gICAgLy8gV29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTkwNzlcbiAgICBjb25zdCByb3V0ZXIgPSBvcHRzLmJvb3RzdHJhcHBlZE1vZHVsZS5pbmplY3Rvci5nZXQob3B0cy5Sb3V0ZXIpO1xuICAgIHJvdXRlci5kaXNwb3NlKCk7XG4gIH1cblxuICBpZiAob3B0cy5yb3V0aW5nRXZlbnRMaXN0ZW5lcikge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzaW5nbGUtc3BhOnJvdXRpbmctZXZlbnQnLCBvcHRzLnJvdXRpbmdFdmVudExpc3RlbmVyKTtcbiAgfVxuXG4gIGlmIChvcHRzLkFuaW1hdGlvbkVuZ2luZSkge1xuICAgIC8qXG4gICAgVGhlIEJyb3dzZXJBbmltYXRpb25zTW9kdWxlIGRvZXMgbm90IGNsZWFuIHVwIGFmdGVyIGl0c2VsZiA6JyguIFdoZW4geW91IHVubW91bnQvZGVzdHJveSB0aGUgbWFpbiBtb2R1bGUsIHRoZVxuICAgIEJyb3dzZXJBbmltYXRpb25zTW9kdWxlIHVzZXMgYW4gQW5pbWF0aW9uUmVuZGVyZXIgdGhpbmcgdG8gcmVtb3ZlIGRvbSBlbGVtZW50cyBmcm9tIHRoZSBwYWdlLiBCdXQgdGhlIEFuaW1hdGlvblJlbmRlcmVyXG4gICAgZGVmZXJzIHRoZSBhY3R1YWwgd29yayB0byB0aGUgVHJhbnNpdGlvbkFuaW1hdGlvbkVuZ2luZSB0byBkbyB0aGlzLCBhbmQgdGhlIFRyYW5zaXRpb25BbmltYXRpb25FbmdpbmUgZG9lc24ndCBhY3R1YWxseVxuICAgIHJlbW92ZSB0aGUgZG9tIG5vZGUsIGJ1dCBqdXN0IGNhbGxzIFwibWFya0VsZW1lbnRBc1JlbW92ZWQoKVwiLlxuXG4gICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi9kYjYyY2NmOWViNDZlZTg5MzY2YWRlNTg2MzY1ZWEwMjdiYjkzZWIxL3BhY2thZ2VzL2FuaW1hdGlvbnMvYnJvd3Nlci9zcmMvcmVuZGVyL3RyYW5zaXRpb25fYW5pbWF0aW9uX2VuZ2luZS50cyNMNzE3XG5cbiAgICBXaGF0IG1hcmtBc1JlbW92ZWREb2VzIGlzIHB1dCBpdCBpbnRvIGFuIGFycmF5IGNhbGxlZCBcImNvbGxlY3RlZExlYXZlRWxlbWVudHNcIiwgd2hpY2ggaXMgYWxsIHRoZSBlbGVtZW50cyB0aGF0IHNob3VsZCBiZSByZW1vdmVkXG4gICAgYWZ0ZXIgdGhlIERPTSBoYXMgaGFkIGEgY2hhbmNlIHRvIGRvIGFueSBhbmltYXRpb25zLlxuXG4gICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi9tYXN0ZXIvcGFja2FnZXMvYW5pbWF0aW9ucy9icm93c2VyL3NyYy9yZW5kZXIvdHJhbnNpdGlvbl9hbmltYXRpb25fZW5naW5lLnRzI0w1MjVcblxuICAgIFRoZSBhY3R1YWwgZG9tIG5vZGVzIGFyZW4ndCByZW1vdmVkIHVudGlsIHRoZSBUcmFuc2l0aW9uQW5pbWF0aW9uRW5naW5lIFwiZmx1c2hlc1wiLlxuXG4gICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi9kYjYyY2NmOWViNDZlZTg5MzY2YWRlNTg2MzY1ZWEwMjdiYjkzZWIxL3BhY2thZ2VzL2FuaW1hdGlvbnMvYnJvd3Nlci9zcmMvcmVuZGVyL3RyYW5zaXRpb25fYW5pbWF0aW9uX2VuZ2luZS50cyNMODUxXG5cbiAgICBVbmZvcnR1bmF0ZWx5LCB0aG91Z2gsIHRoYXQgXCJmbHVzaFwiIHdpbGwgbmV2ZXIgaGFwcGVuLCBzaW5jZSB0aGUgZW50aXJlIG1vZHVsZSBpcyBiZWluZyBkZXN0cm95ZWQgYW5kIHRoZXJlIHdpbGwgYmUgbm8gbW9yZSBmbHVzaGVzLlxuICAgIFNvIHdoYXQgd2UgZG8gaW4gdGhpcyBjb2RlIGlzIGZvcmNlIG9uZSBtb3JlIGZsdXNoIG9mIHRoZSBhbmltYXRpb25zIGFmdGVyIHRoZSBtb2R1bGUgaXMgZGVzdHJveWVkLlxuXG4gICAgSWRlYWxseSwgd2Ugd291bGQgZG8gdGhpcyBieSBnZXR0aW5nIHRoZSBUcmFuc2l0aW9uQW5pbWF0aW9uRW5naW5lIGRpcmVjdGx5IGFuZCBmbHVzaGluZyBpdC4gVW5mb3J0dW5hdGVseSwgdGhvdWdoLCBpdCdzIHByaXZhdGUgY2xhc3NcbiAgICB0aGF0IGNhbm5vdCBiZSBpbXBvcnRlZCBhbmQgaXMgbm90IHByb3ZpZGVkIHRvIHRoZSBkZXBlbmRlbmN5IGluamVjdG9yLiBTbywgaW5zdGVhZCwgd2UgZ2V0IGl0cyB3cmFwcGVyIGNsYXNzLCBBbmltYXRpb25FbmdpbmUsIGFuZCB0aGVuXG4gICAgYWNjZXNzIGl0cyBwcml2YXRlIHZhcmlhYmxlIHJlZmVyZW5jZSB0byB0aGUgVHJhbnNpdGlvbkFuaW1hdGlvbkVuZ2luZSBzbyB0aGF0IHdlIGNhbiBjYWxsIGZsdXNoLlxuICAgICovXG4gICAgY29uc3QgYW5pbWF0aW9uRW5naW5lID0gb3B0cy5ib290c3RyYXBwZWRNb2R1bGUuaW5qZWN0b3IuZ2V0KG9wdHMuQW5pbWF0aW9uRW5naW5lKTtcbiAgICBhbmltYXRpb25FbmdpbmUuX3RyYW5zaXRpb25FbmdpbmUuZmx1c2goKTtcbiAgfVxuXG4gIG9wdHMuYm9vdHN0cmFwcGVkTW9kdWxlLmRlc3Ryb3koKTtcbiAgZGVsZXRlIG9wdHMuYm9vdHN0cmFwcGVkTW9kdWxlO1xuXG4gIC8vIFRoaXMgaXMgYW4gaXNzdWUuIElzc3VlIGhhcyBiZWVuIGNyZWF0ZWQgYW5kIEFuZ3VsYXIgdGVhbSBpcyB3b3JraW5nIG9uIHRoZSBmaXg6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzM2NDQ5XG4gIHJlbW92ZUFwcGxpY2F0aW9uRnJvbURPTUlmSXZ5RW5hYmxlZChvcHRzLCBwcm9wcyk7XG59XG4iXX0=
import { __assign, __awaiter, __generator } from "tslib";
import { getContainerEl, chooseDomElementGetter, removeApplicationFromDOMIfIvyEnabled, } from 'single-spa-angular/internals';
import { SingleSpaPlatformLocation } from './extra-providers';

@@ -38,2 +39,8 @@ var defaultOpts = {

return __generator(this, function (_a) {
// Angular provides an opportunity to develop `zone-less` application, where developers
// have to trigger change detection manually.
// See https://angular.io/guide/zone#noopzone
if (opts.NgZone === 'noop') {
return [2 /*return*/];
}
// In order for multiple Angular apps to work concurrently on a page, they each need a unique identifier.

@@ -62,6 +69,7 @@ opts.zoneIdentifier = "single-spa-angular:" + (props.name || props.appName);

function mount(opts, props) {
var _a;
return __awaiter(this, void 0, void 0, function () {
var domElementGetter, containerEl, bootstrapPromise, module, singleSpaPlatformLocation, bootstrappedOpts, ngZone;
return __generator(this, function (_a) {
switch (_a.label) {
var domElementGetter, containerEl, bootstrapPromise, module, singleSpaPlatformLocation, ngZoneEnabled, bootstrappedOpts, ngZone;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:

@@ -80,3 +88,3 @@ domElementGetter = chooseDomElementGetter(opts, props);

case 1:
module = _a.sent();
module = _b.sent();
if (!module || typeof module.destroy !== 'function') {

@@ -86,13 +94,20 @@ throw Error("single-spa-angular: the opts.bootstrapFunction returned a promise that did not resolve with a valid Angular module. Did you call platformBrowser().bootstrapModuleFactory() correctly?");

singleSpaPlatformLocation = module.injector.get(SingleSpaPlatformLocation, null);
ngZoneEnabled = opts.NgZone !== 'noop';
// The user has to provide `BrowserPlatformLocation` only if his application uses routing.
// So if he provided `Router` but didn't provide `BrowserPlatformLocation` then we have to inform him.
if (opts.Router && singleSpaPlatformLocation === null) {
// Also `getSingleSpaExtraProviders()` function should be called only if the doesn't use
// `zone-less` change detection, if `NgZone` is `noop` then we can skip it.
if (ngZoneEnabled && opts.Router && singleSpaPlatformLocation === null) {
throw new Error("\t\n single-spa-angular: could not retrieve extra providers from the platform injector. Did you call getSingleSpaExtraProviders() when creating platform?\t\n ");
}
bootstrappedOpts = opts;
ngZone = module.injector.get(opts.NgZone);
singleSpaPlatformLocation.setNgZone(ngZone);
bootstrappedOpts.bootstrappedNgZone = ngZone;
bootstrappedOpts.bootstrappedNgZone['_inner']._properties[bootstrappedOpts.zoneIdentifier] = true;
window.addEventListener('single-spa:routing-event', bootstrappedOpts.routingEventListener);
if (ngZoneEnabled) {
ngZone = module.injector.get(opts.NgZone);
// `NgZone` can be enabled but routing may not be used thus `getSingleSpaExtraProviders()`
// function was not called.
(_a = singleSpaPlatformLocation) === null || _a === void 0 ? void 0 : _a.setNgZone(ngZone);
bootstrappedOpts.bootstrappedNgZone = ngZone;
bootstrappedOpts.bootstrappedNgZone['_inner']._properties[bootstrappedOpts.zoneIdentifier] = true;
window.addEventListener('single-spa:routing-event', bootstrappedOpts.routingEventListener);
}
bootstrappedOpts.bootstrappedModule = module;

@@ -113,3 +128,5 @@ return [2 /*return*/, module];

}
window.removeEventListener('single-spa:routing-event', opts.routingEventListener);
if (opts.routingEventListener) {
window.removeEventListener('single-spa:routing-event', opts.routingEventListener);
}
if (opts.AnimationEngine) {

@@ -121,7 +138,5 @@ animationEngine = opts.bootstrappedModule.injector.get(opts.AnimationEngine);

delete opts.bootstrappedModule;
if (ivyEnabled()) {
// This is an issue. Issue has been created and Angular team is working on the fix:
// https://github.com/angular/angular/issues/36449
removeApplicationFromDOMIfIvyEnabled(opts, props);
}
// This is an issue. Issue has been created and Angular team is working on the fix:
// https://github.com/angular/angular/issues/36449
removeApplicationFromDOMIfIvyEnabled(opts, props);
return [2 /*return*/];

@@ -131,59 +146,2 @@ });

}
function ivyEnabled() {
try {
// `ɵivyEnabled` variable is exposed starting from version 8.
// We use `require` here except of a single `import { ɵivyEnabled }` because the
// developer can use Angular version that doesn't expose it (all versions <8).
// The `catch` statement will handle those cases.
// eslint-disable-next-line
var ɵivyEnabled = require('@angular/core').ɵivyEnabled;
return !!ɵivyEnabled;
}
catch (_a) {
return false;
}
}
function removeApplicationFromDOMIfIvyEnabled(opts, props) {
var domElementGetter = chooseDomElementGetter(opts, props);
var domElement = getContainerEl(domElementGetter);
// View Engine removes all nodes automatically when calling `NgModuleRef.destroy()`,
// which calls `ComponentRef.destroy()`.
// Basically this will remove `app-root` or any other selector from the container element.
while (domElement.firstChild)
domElement.removeChild(domElement.firstChild);
}
function getContainerEl(domElementGetter) {
var element = domElementGetter();
if (!element) {
throw Error('domElementGetter did not return a valid dom element');
}
return element;
}
function chooseDomElementGetter(opts, props) {
props = props && props.customProps ? props.customProps : props;
if (props.domElement) {
return function () { return props.domElement; };
}
else if (props.domElementGetter) {
return props.domElementGetter;
}
else if (opts.domElementGetter) {
return opts.domElementGetter;
}
else {
return defaultDomElementGetter(props.name);
}
}
function defaultDomElementGetter(name) {
return function getDefaultDomElement() {
var id = "single-spa-application:" + name;
var domElement = document.getElementById(id);
if (!domElement) {
domElement = document.createElement('div');
domElement.id = id;
document.body.appendChild(domElement);
}
return domElement;
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLXNwYS1hbmd1bGFyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vc2luZ2xlLXNwYS1hbmd1bGFyLyIsInNvdXJjZXMiOlsic3JjL3NpbmdsZS1zcGEtYW5ndWxhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBR0EsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFOUQsSUFBTSxXQUFXLEdBQUc7SUFDbEIsMERBQTBEO0lBQzFELE1BQU0sRUFBRSxJQUFLO0lBQ2IsaUJBQWlCLEVBQUUsSUFBSztJQUN4QixRQUFRLEVBQUUsSUFBSztJQUNmLGdCQUFnQjtJQUNoQixNQUFNLEVBQUUsU0FBUztJQUNqQixnQkFBZ0IsRUFBRSxTQUFTO0lBQzNCLGVBQWUsRUFBRSxTQUFTO0lBQzFCLGNBQWMsRUFBRSxjQUFNLE9BQUEsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFqQixDQUFpQjtDQUN4QyxDQUFDO0FBRUYsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFFBQThCO0lBQzdELElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFO1FBQ2hDLE1BQU0sS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7S0FDbkU7SUFFRCxJQUFNLElBQUkseUJBQ0wsV0FBVyxHQUNYLFFBQVEsQ0FDWixDQUFDO0lBRUYsSUFBSSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxVQUFVLEVBQUU7UUFDaEQsTUFBTSxLQUFLLENBQUMsNkRBQTZELENBQUMsQ0FBQztLQUM1RTtJQUVELElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRTtRQUNyQyxNQUFNLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO0tBQ3ZFO0lBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7UUFDaEIsTUFBTSxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQztLQUNqRTtJQUVELE9BQU87UUFDTCxTQUFTLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBd0MsQ0FBQztRQUN6RSxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO1FBQzdCLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUF3QyxDQUFDO1FBQ3JFLE1BQU0sRUFBRSxJQUFJLENBQUMsY0FBYztLQUM1QixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQWUsU0FBUyxDQUFDLElBQXNDLEVBQUUsS0FBVTs7O1lBQ3pFLHlHQUF5RztZQUN6RyxJQUFJLENBQUMsY0FBYyxHQUFHLHlCQUFzQixLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUUsQ0FBQztZQUUxRSxzR0FBc0c7WUFDdEcsdUVBQXVFO1lBQ3ZFLDhEQUE4RDtZQUM5RCwySEFBMkg7WUFDM0gsOEhBQThIO1lBQzlILElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxHQUFHO2dCQUM1QixhQUFhO2dCQUNiLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxJQUFJLENBQUM7WUFDdkUsQ0FBQyxDQUFDO1lBRUYsSUFBSSxDQUFDLG9CQUFvQixHQUFHO2dCQUMxQixJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDO29CQUMxQixpRUFBaUU7b0JBQ2pFLG1HQUFtRztvQkFDbkcsOENBQThDO2dCQUNoRCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQzs7OztDQUNIO0FBRUQsU0FBZSxLQUFLLENBQUMsSUFBMEIsRUFBRSxLQUFVOzs7Ozs7b0JBQ25ELGdCQUFnQixHQUFHLHNCQUFzQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFFN0QsSUFBSSxDQUFDLGdCQUFnQixFQUFFO3dCQUNyQixNQUFNLEtBQUssQ0FDVCx3Q0FDRSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLHNFQUNxQyxDQUNuRSxDQUFDO3FCQUNIO29CQUVLLFdBQVcsR0FBRyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztvQkFDckQsV0FBVyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUNoQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBRXZELElBQUksQ0FBQyxDQUFDLGdCQUFnQixZQUFZLE9BQU8sQ0FBQyxFQUFFO3dCQUMxQyxNQUFNLEtBQUssQ0FDVCxtR0FBaUcsT0FBTyxnQkFBZ0IsNEJBQXlCLENBQ2xKLENBQUM7cUJBQ0g7b0JBRWdDLHFCQUFNLGdCQUFnQixFQUFBOztvQkFBakQsTUFBTSxHQUFxQixTQUFzQjtvQkFFdkQsSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLE1BQU0sQ0FBQyxPQUFPLEtBQUssVUFBVSxFQUFFO3dCQUNuRCxNQUFNLEtBQUssQ0FDVCx3TEFBd0wsQ0FDekwsQ0FBQztxQkFDSDtvQkFFSyx5QkFBeUIsR0FBcUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQ3JGLHlCQUF5QixFQUN6QixJQUFJLENBQ0wsQ0FBQztvQkFFRiwwRkFBMEY7b0JBQzFGLHNHQUFzRztvQkFDdEcsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLHlCQUF5QixLQUFLLElBQUksRUFBRTt3QkFDckQsTUFBTSxJQUFJLEtBQUssQ0FBQyx3S0FFZixDQUFDLENBQUM7cUJBQ0o7b0JBRUssZ0JBQWdCLEdBQUcsSUFBd0MsQ0FBQztvQkFDNUQsTUFBTSxHQUFXLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFFeEQseUJBQTBCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUM3QyxnQkFBZ0IsQ0FBQyxrQkFBa0IsR0FBRyxNQUFNLENBQUM7b0JBQzdDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUM7b0JBQ2xHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQywwQkFBMEIsRUFBRSxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO29CQUMzRixnQkFBZ0IsQ0FBQyxrQkFBa0IsR0FBRyxNQUFNLENBQUM7b0JBRTdDLHNCQUFPLE1BQU0sRUFBQzs7OztDQUNmO0FBRUQsNkRBQTZEO0FBQzdELFNBQWUsT0FBTyxDQUFDLElBQXNDLEVBQUUsS0FBVTs7OztZQUN2RSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBRVQsTUFBTSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDakUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ2xCO1lBRUQsTUFBTSxDQUFDLG1CQUFtQixDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBRWxGLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkF5QmxCLGVBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ25GLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUMzQztZQUVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUUvQixJQUFJLFVBQVUsRUFBRSxFQUFFO2dCQUNoQixtRkFBbUY7Z0JBQ25GLGtEQUFrRDtnQkFDbEQsb0NBQW9DLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ25EOzs7O0NBQ0Y7QUFFRCxTQUFTLFVBQVU7SUFDakIsSUFBSTtRQUNGLDZEQUE2RDtRQUM3RCxnRkFBZ0Y7UUFDaEYsOEVBQThFO1FBQzlFLGlEQUFpRDtRQUNqRCwyQkFBMkI7UUFDbkIsSUFBQSxrREFBVyxDQUE4QjtRQUNqRCxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUM7S0FDdEI7SUFBQyxXQUFNO1FBQ04sT0FBTyxLQUFLLENBQUM7S0FDZDtBQUNILENBQUM7QUFFRCxTQUFTLG9DQUFvQyxDQUFDLElBQTBCLEVBQUUsS0FBVTtJQUNsRixJQUFNLGdCQUFnQixHQUFHLHNCQUFzQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM3RCxJQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNwRCxvRkFBb0Y7SUFDcEYsd0NBQXdDO0lBQ3hDLDBGQUEwRjtJQUMxRixPQUFPLFVBQVUsQ0FBQyxVQUFVO1FBQUUsVUFBVSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDOUUsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLGdCQUFrQztJQUN4RCxJQUFNLE9BQU8sR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBRW5DLElBQUksQ0FBQyxPQUFPLEVBQUU7UUFDWixNQUFNLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0tBQ3BFO0lBRUQsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQUMsSUFBMEIsRUFBRSxLQUFVO0lBQ3BFLEtBQUssR0FBRyxLQUFLLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQy9ELElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRTtRQUNwQixPQUFPLGNBQU0sT0FBQSxLQUFLLENBQUMsVUFBVSxFQUFoQixDQUFnQixDQUFDO0tBQy9CO1NBQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEVBQUU7UUFDakMsT0FBTyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7S0FDL0I7U0FBTSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtRQUNoQyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztLQUM5QjtTQUFNO1FBQ0wsT0FBTyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDNUM7QUFDSCxDQUFDO0FBRUQsU0FBUyx1QkFBdUIsQ0FBQyxJQUFZO0lBQzNDLE9BQU8sU0FBUyxvQkFBb0I7UUFDbEMsSUFBTSxFQUFFLEdBQUcsNEJBQTBCLElBQU0sQ0FBQztRQUM1QyxJQUFJLFVBQVUsR0FBdUIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVqRSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2YsVUFBVSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsVUFBVSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDbkIsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDdkM7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdab25lLCBUeXBlLCBOZ01vZHVsZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXBwUHJvcHMsIExpZmVDeWNsZXMgfSBmcm9tICdzaW5nbGUtc3BhJztcblxuaW1wb3J0IHsgU2luZ2xlU3BhUGxhdGZvcm1Mb2NhdGlvbiB9IGZyb20gJy4vZXh0cmEtcHJvdmlkZXJzJztcblxuY29uc3QgZGVmYXVsdE9wdHMgPSB7XG4gIC8vIFJlcXVpcmVkIG9wdHMgdGhhdCB3aWxsIGJlIHNldCBieSB0aGUgbGlicmFyeSBjb25zdW1lci5cbiAgTmdab25lOiBudWxsISxcbiAgYm9vdHN0cmFwRnVuY3Rpb246IG51bGwhLFxuICB0ZW1wbGF0ZTogbnVsbCEsXG4gIC8vIG9wdGlvbmFsIG9wdHNcbiAgUm91dGVyOiB1bmRlZmluZWQsXG4gIGRvbUVsZW1lbnRHZXR0ZXI6IHVuZGVmaW5lZCwgLy8gb25seSBvcHRpb25hbCBpZiB5b3UgcHJvdmlkZSBhIGRvbUVsZW1lbnRHZXR0ZXIgYXMgYSBjdXN0b20gcHJvcFxuICBBbmltYXRpb25FbmdpbmU6IHVuZGVmaW5lZCxcbiAgdXBkYXRlRnVuY3Rpb246ICgpID0+IFByb21pc2UucmVzb2x2ZSgpLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNpbmdsZVNwYUFuZ3VsYXIodXNlck9wdHM6IFNpbmdsZVNwYUFuZ3VsYXJPcHRzKTogTGlmZUN5Y2xlcyB7XG4gIGlmICh0eXBlb2YgdXNlck9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgRXJyb3IoJ3NpbmdsZS1zcGEtYW5ndWxhciByZXF1aXJlcyBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0Jyk7XG4gIH1cblxuICBjb25zdCBvcHRzOiBTaW5nbGVTcGFBbmd1bGFyT3B0cyA9IHtcbiAgICAuLi5kZWZhdWx0T3B0cyxcbiAgICAuLi51c2VyT3B0cyxcbiAgfTtcblxuICBpZiAodHlwZW9mIG9wdHMuYm9vdHN0cmFwRnVuY3Rpb24gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBFcnJvcignc2luZ2xlLXNwYS1hbmd1bGFyIG11c3QgYmUgcGFzc2VkIGFuIG9wdHMuYm9vdHN0cmFwRnVuY3Rpb24nKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb3B0cy50ZW1wbGF0ZSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBFcnJvcignc2luZ2xlLXNwYS1hbmd1bGFyIG11c3QgYmUgcGFzc2VkIG9wdHMudGVtcGxhdGUgc3RyaW5nJyk7XG4gIH1cblxuICBpZiAoIW9wdHMuTmdab25lKSB7XG4gICAgdGhyb3cgRXJyb3IoYHNpbmdsZS1zcGEtYW5ndWxhciBtdXN0IGJlIHBhc3NlZCB0aGUgTmdab25lIG9wdGApO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBib290c3RyYXA6IGJvb3RzdHJhcC5iaW5kKG51bGwsIG9wdHMgYXMgQm9vdHN0cmFwcGVkU2luZ2xlU3BhQW5ndWxhck9wdHMpLFxuICAgIG1vdW50OiBtb3VudC5iaW5kKG51bGwsIG9wdHMpLFxuICAgIHVubW91bnQ6IHVubW91bnQuYmluZChudWxsLCBvcHRzIGFzIEJvb3RzdHJhcHBlZFNpbmdsZVNwYUFuZ3VsYXJPcHRzKSxcbiAgICB1cGRhdGU6IG9wdHMudXBkYXRlRnVuY3Rpb24sXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJvb3RzdHJhcChvcHRzOiBCb290c3RyYXBwZWRTaW5nbGVTcGFBbmd1bGFyT3B0cywgcHJvcHM6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAvLyBJbiBvcmRlciBmb3IgbXVsdGlwbGUgQW5ndWxhciBhcHBzIHRvIHdvcmsgY29uY3VycmVudGx5IG9uIGEgcGFnZSwgdGhleSBlYWNoIG5lZWQgYSB1bmlxdWUgaWRlbnRpZmllci5cbiAgb3B0cy56b25lSWRlbnRpZmllciA9IGBzaW5nbGUtc3BhLWFuZ3VsYXI6JHtwcm9wcy5uYW1lIHx8IHByb3BzLmFwcE5hbWV9YDtcblxuICAvLyBUaGlzIGlzIGEgaGFjaywgc2luY2UgTmdab25lIGRvZXNuJ3QgYWxsb3cgeW91IHRvIGNvbmZpZ3VyZSB0aGUgcHJvcGVydHkgdGhhdCBpZGVudGlmaWVzIHlvdXIgem9uZS5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9QbGFjZU1lLVNBUy9zaW5nbGUtc3BhLWFuZ3VsYXItY2xpL2lzc3Vlcy8zMyxcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmdsZS1zcGEvc2luZ2xlLXNwYS1hbmd1bGFyL2lzc3Vlcy80NyxcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iL2ExNGRjMmQ3YTQ4MjFhMTlmMjBhOTU0NzA1M2E1NzM0Nzk4ZjU0MWUvcGFja2FnZXMvY29yZS9zcmMvem9uZS9uZ196b25lLnRzI0wxNDQsXG4gIC8vIGFuZCBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2Jsb2IvYTE0ZGMyZDdhNDgyMWExOWYyMGE5NTQ3MDUzYTU3MzQ3OThmNTQxZS9wYWNrYWdlcy9jb3JlL3NyYy96b25lL25nX3pvbmUudHMjTDI1N1xuICBvcHRzLk5nWm9uZS5pc0luQW5ndWxhclpvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiB3aW5kb3cuWm9uZS5jdXJyZW50Ll9wcm9wZXJ0aWVzW29wdHMuem9uZUlkZW50aWZpZXJdID09PSB0cnVlO1xuICB9O1xuXG4gIG9wdHMucm91dGluZ0V2ZW50TGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgb3B0cy5ib290c3RyYXBwZWROZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vc2luZ2xlLXNwYS9zaW5nbGUtc3BhLWFuZ3VsYXIvaXNzdWVzLzg2XG4gICAgICAvLyBab25lIGlzIHVuYXdhcmUgb2YgdGhlIHNpbmdsZS1zcGEgbmF2aWdhdGlvbiBjaGFuZ2UgYW5kIHNvIEFuZ3VsYXIgY2hhbmdlIGRldGVjdGlvbiBkb2Vzbid0IHdvcmtcbiAgICAgIC8vIHVubGVzcyB3ZSB0ZWxsIFpvbmUgdGhhdCBzb21ldGhpbmcgaGFwcGVuZWRcbiAgICB9KTtcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbW91bnQob3B0czogU2luZ2xlU3BhQW5ndWxhck9wdHMsIHByb3BzOiBhbnkpOiBQcm9taXNlPE5nTW9kdWxlUmVmPGFueT4+IHtcbiAgY29uc3QgZG9tRWxlbWVudEdldHRlciA9IGNob29zZURvbUVsZW1lbnRHZXR0ZXIob3B0cywgcHJvcHMpO1xuXG4gIGlmICghZG9tRWxlbWVudEdldHRlcikge1xuICAgIHRocm93IEVycm9yKFxuICAgICAgYGNhbm5vdCBtb3VudCBhbmd1bGFyIGFwcGxpY2F0aW9uICcke1xuICAgICAgICBwcm9wcy5uYW1lIHx8IHByb3BzLmFwcE5hbWVcbiAgICAgIH0nIHdpdGhvdXQgYSBkb21FbGVtZW50R2V0dGVyIHByb3ZpZGVkIGVpdGhlciBhcyBhbiBvcHQgb3IgYSBwcm9wYCxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgY29udGFpbmVyRWwgPSBnZXRDb250YWluZXJFbChkb21FbGVtZW50R2V0dGVyKTtcbiAgY29udGFpbmVyRWwuaW5uZXJIVE1MID0gb3B0cy50ZW1wbGF0ZTtcbiAgY29uc3QgYm9vdHN0cmFwUHJvbWlzZSA9IG9wdHMuYm9vdHN0cmFwRnVuY3Rpb24ocHJvcHMpO1xuXG4gIGlmICghKGJvb3RzdHJhcFByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuICAgIHRocm93IEVycm9yKFxuICAgICAgYHNpbmdsZS1zcGEtYW5ndWxhcjogdGhlIG9wdHMuYm9vdHN0cmFwRnVuY3Rpb24gbXVzdCByZXR1cm4gYSBwcm9taXNlLCBidXQgaW5zdGVhZCByZXR1cm5lZCBhICcke3R5cGVvZiBib290c3RyYXBQcm9taXNlfScgdGhhdCBpcyBub3QgYSBQcm9taXNlYCxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgbW9kdWxlOiBOZ01vZHVsZVJlZjxhbnk+ID0gYXdhaXQgYm9vdHN0cmFwUHJvbWlzZTtcblxuICBpZiAoIW1vZHVsZSB8fCB0eXBlb2YgbW9kdWxlLmRlc3Ryb3kgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIGBzaW5nbGUtc3BhLWFuZ3VsYXI6IHRoZSBvcHRzLmJvb3RzdHJhcEZ1bmN0aW9uIHJldHVybmVkIGEgcHJvbWlzZSB0aGF0IGRpZCBub3QgcmVzb2x2ZSB3aXRoIGEgdmFsaWQgQW5ndWxhciBtb2R1bGUuIERpZCB5b3UgY2FsbCBwbGF0Zm9ybUJyb3dzZXIoKS5ib290c3RyYXBNb2R1bGVGYWN0b3J5KCkgY29ycmVjdGx5P2AsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHNpbmdsZVNwYVBsYXRmb3JtTG9jYXRpb246IFNpbmdsZVNwYVBsYXRmb3JtTG9jYXRpb24gfCBudWxsID0gbW9kdWxlLmluamVjdG9yLmdldChcbiAgICBTaW5nbGVTcGFQbGF0Zm9ybUxvY2F0aW9uLFxuICAgIG51bGwsXG4gICk7XG5cbiAgLy8gVGhlIHVzZXIgaGFzIHRvIHByb3ZpZGUgYEJyb3dzZXJQbGF0Zm9ybUxvY2F0aW9uYCBvbmx5IGlmIGhpcyBhcHBsaWNhdGlvbiB1c2VzIHJvdXRpbmcuXG4gIC8vIFNvIGlmIGhlIHByb3ZpZGVkIGBSb3V0ZXJgIGJ1dCBkaWRuJ3QgcHJvdmlkZSBgQnJvd3NlclBsYXRmb3JtTG9jYXRpb25gIHRoZW4gd2UgaGF2ZSB0byBpbmZvcm0gaGltLlxuICBpZiAob3B0cy5Sb3V0ZXIgJiYgc2luZ2xlU3BhUGxhdGZvcm1Mb2NhdGlvbiA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgXHRcbiAgICAgIHNpbmdsZS1zcGEtYW5ndWxhcjogY291bGQgbm90IHJldHJpZXZlIGV4dHJhIHByb3ZpZGVycyBmcm9tIHRoZSBwbGF0Zm9ybSBpbmplY3Rvci4gRGlkIHlvdSBjYWxsIGdldFNpbmdsZVNwYUV4dHJhUHJvdmlkZXJzKCkgd2hlbiBjcmVhdGluZyBwbGF0Zm9ybT9cdFxuICAgIGApO1xuICB9XG5cbiAgY29uc3QgYm9vdHN0cmFwcGVkT3B0cyA9IG9wdHMgYXMgQm9vdHN0cmFwcGVkU2luZ2xlU3BhQW5ndWxhck9wdHM7XG4gIGNvbnN0IG5nWm9uZTogTmdab25lID0gbW9kdWxlLmluamVjdG9yLmdldChvcHRzLk5nWm9uZSk7XG5cbiAgc2luZ2xlU3BhUGxhdGZvcm1Mb2NhdGlvbiEuc2V0Tmdab25lKG5nWm9uZSk7XG4gIGJvb3RzdHJhcHBlZE9wdHMuYm9vdHN0cmFwcGVkTmdab25lID0gbmdab25lO1xuICBib290c3RyYXBwZWRPcHRzLmJvb3RzdHJhcHBlZE5nWm9uZVsnX2lubmVyJ10uX3Byb3BlcnRpZXNbYm9vdHN0cmFwcGVkT3B0cy56b25lSWRlbnRpZmllcl0gPSB0cnVlO1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2luZ2xlLXNwYTpyb3V0aW5nLWV2ZW50JywgYm9vdHN0cmFwcGVkT3B0cy5yb3V0aW5nRXZlbnRMaXN0ZW5lcik7XG4gIGJvb3RzdHJhcHBlZE9wdHMuYm9vdHN0cmFwcGVkTW9kdWxlID0gbW9kdWxlO1xuXG4gIHJldHVybiBtb2R1bGU7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmFzeW5jIGZ1bmN0aW9uIHVubW91bnQob3B0czogQm9vdHN0cmFwcGVkU2luZ2xlU3BhQW5ndWxhck9wdHMsIHByb3BzOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKG9wdHMuUm91dGVyKSB7XG4gICAgLy8gV29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTkwNzlcbiAgICBjb25zdCByb3V0ZXIgPSBvcHRzLmJvb3RzdHJhcHBlZE1vZHVsZS5pbmplY3Rvci5nZXQob3B0cy5Sb3V0ZXIpO1xuICAgIHJvdXRlci5kaXNwb3NlKCk7XG4gIH1cblxuICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2luZ2xlLXNwYTpyb3V0aW5nLWV2ZW50Jywgb3B0cy5yb3V0aW5nRXZlbnRMaXN0ZW5lcik7XG5cbiAgaWYgKG9wdHMuQW5pbWF0aW9uRW5naW5lKSB7XG4gICAgLypcbiAgICBUaGUgQnJvd3NlckFuaW1hdGlvbnNNb2R1bGUgZG9lcyBub3QgY2xlYW4gdXAgYWZ0ZXIgaXRzZWxmIDonKC4gV2hlbiB5b3UgdW5tb3VudC9kZXN0cm95IHRoZSBtYWluIG1vZHVsZSwgdGhlXG4gICAgQnJvd3NlckFuaW1hdGlvbnNNb2R1bGUgdXNlcyBhbiBBbmltYXRpb25SZW5kZXJlciB0aGluZyB0byByZW1vdmUgZG9tIGVsZW1lbnRzIGZyb20gdGhlIHBhZ2UuIEJ1dCB0aGUgQW5pbWF0aW9uUmVuZGVyZXJcbiAgICBkZWZlcnMgdGhlIGFjdHVhbCB3b3JrIHRvIHRoZSBUcmFuc2l0aW9uQW5pbWF0aW9uRW5naW5lIHRvIGRvIHRoaXMsIGFuZCB0aGUgVHJhbnNpdGlvbkFuaW1hdGlvbkVuZ2luZSBkb2Vzbid0IGFjdHVhbGx5XG4gICAgcmVtb3ZlIHRoZSBkb20gbm9kZSwgYnV0IGp1c3QgY2FsbHMgXCJtYXJrRWxlbWVudEFzUmVtb3ZlZCgpXCIuXG5cbiAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iL2RiNjJjY2Y5ZWI0NmVlODkzNjZhZGU1ODYzNjVlYTAyN2JiOTNlYjEvcGFja2FnZXMvYW5pbWF0aW9ucy9icm93c2VyL3NyYy9yZW5kZXIvdHJhbnNpdGlvbl9hbmltYXRpb25fZW5naW5lLnRzI0w3MTdcblxuICAgIFdoYXQgbWFya0FzUmVtb3ZlZERvZXMgaXMgcHV0IGl0IGludG8gYW4gYXJyYXkgY2FsbGVkIFwiY29sbGVjdGVkTGVhdmVFbGVtZW50c1wiLCB3aGljaCBpcyBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgc2hvdWxkIGJlIHJlbW92ZWRcbiAgICBhZnRlciB0aGUgRE9NIGhhcyBoYWQgYSBjaGFuY2UgdG8gZG8gYW55IGFuaW1hdGlvbnMuXG5cbiAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iL21hc3Rlci9wYWNrYWdlcy9hbmltYXRpb25zL2Jyb3dzZXIvc3JjL3JlbmRlci90cmFuc2l0aW9uX2FuaW1hdGlvbl9lbmdpbmUudHMjTDUyNVxuXG4gICAgVGhlIGFjdHVhbCBkb20gbm9kZXMgYXJlbid0IHJlbW92ZWQgdW50aWwgdGhlIFRyYW5zaXRpb25BbmltYXRpb25FbmdpbmUgXCJmbHVzaGVzXCIuXG5cbiAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iL2RiNjJjY2Y5ZWI0NmVlODkzNjZhZGU1ODYzNjVlYTAyN2JiOTNlYjEvcGFja2FnZXMvYW5pbWF0aW9ucy9icm93c2VyL3NyYy9yZW5kZXIvdHJhbnNpdGlvbl9hbmltYXRpb25fZW5naW5lLnRzI0w4NTFcblxuICAgIFVuZm9ydHVuYXRlbHksIHRob3VnaCwgdGhhdCBcImZsdXNoXCIgd2lsbCBuZXZlciBoYXBwZW4sIHNpbmNlIHRoZSBlbnRpcmUgbW9kdWxlIGlzIGJlaW5nIGRlc3Ryb3llZCBhbmQgdGhlcmUgd2lsbCBiZSBubyBtb3JlIGZsdXNoZXMuXG4gICAgU28gd2hhdCB3ZSBkbyBpbiB0aGlzIGNvZGUgaXMgZm9yY2Ugb25lIG1vcmUgZmx1c2ggb2YgdGhlIGFuaW1hdGlvbnMgYWZ0ZXIgdGhlIG1vZHVsZSBpcyBkZXN0cm95ZWQuXG5cbiAgICBJZGVhbGx5LCB3ZSB3b3VsZCBkbyB0aGlzIGJ5IGdldHRpbmcgdGhlIFRyYW5zaXRpb25BbmltYXRpb25FbmdpbmUgZGlyZWN0bHkgYW5kIGZsdXNoaW5nIGl0LiBVbmZvcnR1bmF0ZWx5LCB0aG91Z2gsIGl0J3MgcHJpdmF0ZSBjbGFzc1xuICAgIHRoYXQgY2Fubm90IGJlIGltcG9ydGVkIGFuZCBpcyBub3QgcHJvdmlkZWQgdG8gdGhlIGRlcGVuZGVuY3kgaW5qZWN0b3IuIFNvLCBpbnN0ZWFkLCB3ZSBnZXQgaXRzIHdyYXBwZXIgY2xhc3MsIEFuaW1hdGlvbkVuZ2luZSwgYW5kIHRoZW5cbiAgICBhY2Nlc3MgaXRzIHByaXZhdGUgdmFyaWFibGUgcmVmZXJlbmNlIHRvIHRoZSBUcmFuc2l0aW9uQW5pbWF0aW9uRW5naW5lIHNvIHRoYXQgd2UgY2FuIGNhbGwgZmx1c2guXG4gICAgKi9cbiAgICBjb25zdCBhbmltYXRpb25FbmdpbmUgPSBvcHRzLmJvb3RzdHJhcHBlZE1vZHVsZS5pbmplY3Rvci5nZXQob3B0cy5BbmltYXRpb25FbmdpbmUpO1xuICAgIGFuaW1hdGlvbkVuZ2luZS5fdHJhbnNpdGlvbkVuZ2luZS5mbHVzaCgpO1xuICB9XG5cbiAgb3B0cy5ib290c3RyYXBwZWRNb2R1bGUuZGVzdHJveSgpO1xuICBkZWxldGUgb3B0cy5ib290c3RyYXBwZWRNb2R1bGU7XG5cbiAgaWYgKGl2eUVuYWJsZWQoKSkge1xuICAgIC8vIFRoaXMgaXMgYW4gaXNzdWUuIElzc3VlIGhhcyBiZWVuIGNyZWF0ZWQgYW5kIEFuZ3VsYXIgdGVhbSBpcyB3b3JraW5nIG9uIHRoZSBmaXg6XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMzY0NDlcbiAgICByZW1vdmVBcHBsaWNhdGlvbkZyb21ET01JZkl2eUVuYWJsZWQob3B0cywgcHJvcHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGl2eUVuYWJsZWQoKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgLy8gYMm1aXZ5RW5hYmxlZGAgdmFyaWFibGUgaXMgZXhwb3NlZCBzdGFydGluZyBmcm9tIHZlcnNpb24gOC5cbiAgICAvLyBXZSB1c2UgYHJlcXVpcmVgIGhlcmUgZXhjZXB0IG9mIGEgc2luZ2xlIGBpbXBvcnQgeyDJtWl2eUVuYWJsZWQgfWAgYmVjYXVzZSB0aGVcbiAgICAvLyBkZXZlbG9wZXIgY2FuIHVzZSBBbmd1bGFyIHZlcnNpb24gdGhhdCBkb2Vzbid0IGV4cG9zZSBpdCAoYWxsIHZlcnNpb25zIDw4KS5cbiAgICAvLyBUaGUgYGNhdGNoYCBzdGF0ZW1lbnQgd2lsbCBoYW5kbGUgdGhvc2UgY2FzZXMuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgY29uc3QgeyDJtWl2eUVuYWJsZWQgfSA9IHJlcXVpcmUoJ0Bhbmd1bGFyL2NvcmUnKTtcbiAgICByZXR1cm4gISHJtWl2eUVuYWJsZWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVBcHBsaWNhdGlvbkZyb21ET01JZkl2eUVuYWJsZWQob3B0czogU2luZ2xlU3BhQW5ndWxhck9wdHMsIHByb3BzOiBhbnkpOiB2b2lkIHtcbiAgY29uc3QgZG9tRWxlbWVudEdldHRlciA9IGNob29zZURvbUVsZW1lbnRHZXR0ZXIob3B0cywgcHJvcHMpO1xuICBjb25zdCBkb21FbGVtZW50ID0gZ2V0Q29udGFpbmVyRWwoZG9tRWxlbWVudEdldHRlcik7XG4gIC8vIFZpZXcgRW5naW5lIHJlbW92ZXMgYWxsIG5vZGVzIGF1dG9tYXRpY2FsbHkgd2hlbiBjYWxsaW5nIGBOZ01vZHVsZVJlZi5kZXN0cm95KClgLFxuICAvLyB3aGljaCBjYWxscyBgQ29tcG9uZW50UmVmLmRlc3Ryb3koKWAuXG4gIC8vIEJhc2ljYWxseSB0aGlzIHdpbGwgcmVtb3ZlIGBhcHAtcm9vdGAgb3IgYW55IG90aGVyIHNlbGVjdG9yIGZyb20gdGhlIGNvbnRhaW5lciBlbGVtZW50LlxuICB3aGlsZSAoZG9tRWxlbWVudC5maXJzdENoaWxkKSBkb21FbGVtZW50LnJlbW92ZUNoaWxkKGRvbUVsZW1lbnQuZmlyc3RDaGlsZCk7XG59XG5cbmZ1bmN0aW9uIGdldENvbnRhaW5lckVsKGRvbUVsZW1lbnRHZXR0ZXI6IERvbUVsZW1lbnRHZXR0ZXIpOiBuZXZlciB8IEhUTUxFbGVtZW50IHtcbiAgY29uc3QgZWxlbWVudCA9IGRvbUVsZW1lbnRHZXR0ZXIoKTtcblxuICBpZiAoIWVsZW1lbnQpIHtcbiAgICB0aHJvdyBFcnJvcignZG9tRWxlbWVudEdldHRlciBkaWQgbm90IHJldHVybiBhIHZhbGlkIGRvbSBlbGVtZW50Jyk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cblxuZnVuY3Rpb24gY2hvb3NlRG9tRWxlbWVudEdldHRlcihvcHRzOiBTaW5nbGVTcGFBbmd1bGFyT3B0cywgcHJvcHM6IGFueSk6IERvbUVsZW1lbnRHZXR0ZXIge1xuICBwcm9wcyA9IHByb3BzICYmIHByb3BzLmN1c3RvbVByb3BzID8gcHJvcHMuY3VzdG9tUHJvcHMgOiBwcm9wcztcbiAgaWYgKHByb3BzLmRvbUVsZW1lbnQpIHtcbiAgICByZXR1cm4gKCkgPT4gcHJvcHMuZG9tRWxlbWVudDtcbiAgfSBlbHNlIGlmIChwcm9wcy5kb21FbGVtZW50R2V0dGVyKSB7XG4gICAgcmV0dXJuIHByb3BzLmRvbUVsZW1lbnRHZXR0ZXI7XG4gIH0gZWxzZSBpZiAob3B0cy5kb21FbGVtZW50R2V0dGVyKSB7XG4gICAgcmV0dXJuIG9wdHMuZG9tRWxlbWVudEdldHRlcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGVmYXVsdERvbUVsZW1lbnRHZXR0ZXIocHJvcHMubmFtZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmYXVsdERvbUVsZW1lbnRHZXR0ZXIobmFtZTogc3RyaW5nKTogRG9tRWxlbWVudEdldHRlciB7XG4gIHJldHVybiBmdW5jdGlvbiBnZXREZWZhdWx0RG9tRWxlbWVudCgpIHtcbiAgICBjb25zdCBpZCA9IGBzaW5nbGUtc3BhLWFwcGxpY2F0aW9uOiR7bmFtZX1gO1xuICAgIGxldCBkb21FbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG5cbiAgICBpZiAoIWRvbUVsZW1lbnQpIHtcbiAgICAgIGRvbUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGRvbUVsZW1lbnQuaWQgPSBpZDtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9tRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRvbUVsZW1lbnQ7XG4gIH07XG59XG5cbnR5cGUgRG9tRWxlbWVudEdldHRlciA9ICgpID0+IEhUTUxFbGVtZW50O1xuXG5pbnRlcmZhY2UgU2luZ2xlU3BhQW5ndWxhck9wdHMge1xuICBOZ1pvbmU6IHR5cGVvZiBOZ1pvbmU7XG4gIGJvb3RzdHJhcEZ1bmN0aW9uKHByb3BzOiBBcHBQcm9wcyk6IFByb21pc2U8TmdNb2R1bGVSZWY8YW55Pj47XG4gIHVwZGF0ZUZ1bmN0aW9uPyhwcm9wczogQXBwUHJvcHMpOiBQcm9taXNlPGFueT47XG4gIHRlbXBsYXRlOiBzdHJpbmc7XG4gIFJvdXRlcj86IFR5cGU8YW55PjtcbiAgZG9tRWxlbWVudEdldHRlcj8oKTogSFRNTEVsZW1lbnQ7XG4gIEFuaW1hdGlvbkVuZ2luZT86IFR5cGU8YW55Pjtcbn1cblxuaW50ZXJmYWNlIEJvb3RzdHJhcHBlZFNpbmdsZVNwYUFuZ3VsYXJPcHRzIGV4dGVuZHMgU2luZ2xlU3BhQW5ndWxhck9wdHMge1xuICBib290c3RyYXBwZWROZ1pvbmU6IE5nWm9uZTtcbiAgYm9vdHN0cmFwcGVkTW9kdWxlOiBOZ01vZHVsZVJlZjxhbnk+O1xuICByb3V0aW5nRXZlbnRMaXN0ZW5lcjogKCkgPT4gdm9pZDtcbiAgem9uZUlkZW50aWZpZXI6IHN0cmluZztcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLXNwYS1hbmd1bGFyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vc2luZ2xlLXNwYS1hbmd1bGFyLyIsInNvdXJjZXMiOlsic3JjL3NpbmdsZS1zcGEtYW5ndWxhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxFQUNMLGNBQWMsRUFDZCxzQkFBc0IsRUFDdEIsb0NBQW9DLEdBR3JDLE1BQU0sOEJBQThCLENBQUM7QUFFdEMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFOUQsSUFBTSxXQUFXLEdBQUc7SUFDbEIsMERBQTBEO0lBQzFELE1BQU0sRUFBRSxJQUFLO0lBQ2IsaUJBQWlCLEVBQUUsSUFBSztJQUN4QixRQUFRLEVBQUUsSUFBSztJQUNmLGdCQUFnQjtJQUNoQixNQUFNLEVBQUUsU0FBUztJQUNqQixnQkFBZ0IsRUFBRSxTQUFTO0lBQzNCLGVBQWUsRUFBRSxTQUFTO0lBQzFCLGNBQWMsRUFBRSxjQUFNLE9BQUEsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFqQixDQUFpQjtDQUN4QyxDQUFDO0FBRUYsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFFBQThCO0lBQzdELElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFO1FBQ2hDLE1BQU0sS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7S0FDbkU7SUFFRCxJQUFNLElBQUkseUJBQ0wsV0FBVyxHQUNYLFFBQVEsQ0FDWixDQUFDO0lBRUYsSUFBSSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxVQUFVLEVBQUU7UUFDaEQsTUFBTSxLQUFLLENBQUMsNkRBQTZELENBQUMsQ0FBQztLQUM1RTtJQUVELElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRTtRQUNyQyxNQUFNLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO0tBQ3ZFO0lBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7UUFDaEIsTUFBTSxLQUFLLENBQUMs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LENBQUMsS0FBSyxFQUFFLENBQUM7YUFDM0M7WUFFRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFFL0IsbUZBQW1GO1lBQ25GLGtEQUFrRDtZQUNsRCxvQ0FBb0MsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7Ozs7Q0FDbkQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGlmZUN5Y2xlcyB9IGZyb20gJ3NpbmdsZS1zcGEnO1xuaW1wb3J0IHtcbiAgZ2V0Q29udGFpbmVyRWwsXG4gIGNob29zZURvbUVsZW1lbnRHZXR0ZXIsXG4gIHJlbW92ZUFwcGxpY2F0aW9uRnJvbURPTUlmSXZ5RW5hYmxlZCxcbiAgU2luZ2xlU3BhQW5ndWxhck9wdHMsXG4gIEJvb3RzdHJhcHBlZFNpbmdsZVNwYUFuZ3VsYXJPcHRzLFxufSBmcm9tICdzaW5nbGUtc3BhLWFuZ3VsYXIvaW50ZXJuYWxzJztcblxuaW1wb3J0IHsgU2luZ2xlU3BhUGxhdGZvcm1Mb2NhdGlvbiB9IGZyb20gJy4vZXh0cmEtcHJvdmlkZXJzJztcblxuY29uc3QgZGVmYXVsdE9wdHMgPSB7XG4gIC8vIFJlcXVpcmVkIG9wdHMgdGhhdCB3aWxsIGJlIHNldCBieSB0aGUgbGlicmFyeSBjb25zdW1lci5cbiAgTmdab25lOiBudWxsISxcbiAgYm9vdHN0cmFwRnVuY3Rpb246IG51bGwhLFxuICB0ZW1wbGF0ZTogbnVsbCEsXG4gIC8vIG9wdGlvbmFsIG9wdHNcbiAgUm91dGVyOiB1bmRlZmluZWQsXG4gIGRvbUVsZW1lbnRHZXR0ZXI6IHVuZGVmaW5lZCwgLy8gb25seSBvcHRpb25hbCBpZiB5b3UgcHJvdmlkZSBhIGRvbUVsZW1lbnRHZXR0ZXIgYXMgYSBjdXN0b20gcHJvcFxuICBBbmltYXRpb25FbmdpbmU6IHVuZGVmaW5lZCxcbiAgdXBkYXRlRnVuY3Rpb246ICgpID0+IFByb21pc2UucmVzb2x2ZSgpLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNpbmdsZVNwYUFuZ3VsYXIodXNlck9wdHM6IFNpbmdsZVNwYUFuZ3VsYXJPcHRzKTogTGlmZUN5Y2xlcyB7XG4gIGlmICh0eXBlb2YgdXNlck9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgRXJyb3IoJ3NpbmdsZS1zcGEtYW5ndWxhciByZXF1aXJlcyBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0Jyk7XG4gIH1cblxuICBjb25zdCBvcHRzOiBTaW5nbGVTcGFBbmd1bGFyT3B0cyA9IHtcbiAgICAuLi5kZWZhdWx0T3B0cyxcbiAgICAuLi51c2VyT3B0cyxcbiAgfTtcblxuICBpZiAodHlwZW9mIG9wdHMuYm9vdHN0cmFwRnVuY3Rpb24gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBFcnJvcignc2luZ2xlLXNwYS1hbmd1bGFyIG11c3QgYmUgcGFzc2VkIGFuIG9wdHMuYm9vdHN0cmFwRnVuY3Rpb24nKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb3B0cy50ZW1wbGF0ZSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBFcnJvcignc2luZ2xlLXNwYS1hbmd1bGFyIG11c3QgYmUgcGFzc2VkIG9wdHMudGVtcGxhdGUgc3RyaW5nJyk7XG4gIH1cblxuICBpZiAoIW9wdHMuTmdab25lKSB7XG4gICAgdGhyb3cgRXJyb3IoYHNpbmdsZS1zcGEtYW5ndWxhciBtdXN0IGJlIHBhc3NlZCB0aGUgTmdab25lIG9wdGApO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBib290c3RyYXA6IGJvb3RzdHJhcC5iaW5kKG51bGwsIG9wdHMgYXMgQm9vdHN0cmFwcGVkU2luZ2xlU3BhQW5ndWxhck9wdHMpLFxuICAgIG1vdW50OiBtb3VudC5iaW5kKG51bGwsIG9wdHMpLFxuICAgIHVubW91bnQ6IHVubW91bnQuYmluZChudWxsLCBvcHRzIGFzIEJvb3RzdHJhcHBlZFNpbmdsZVNwYUFuZ3VsYXJPcHRzKSxcbiAgICB1cGRhdGU6IG9wdHMudXBkYXRlRnVuY3Rpb24sXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJvb3RzdHJhcChvcHRzOiBCb290c3RyYXBwZWRTaW5nbGVTcGFBbmd1bGFyT3B0cywgcHJvcHM6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAvLyBBbmd1bGFyIHByb3ZpZGVzIGFuIG9wcG9ydHVuaXR5IHRvIGRldmVsb3AgYHpvbmUtbGVzc2AgYXBwbGljYXRpb24sIHdoZXJlIGRldmVsb3BlcnNcbiAgLy8gaGF2ZSB0byB0cmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gbWFudWFsbHkuXG4gIC8vIFNlZSBodHRwczovL2FuZ3VsYXIuaW8vZ3VpZGUvem9uZSNub29wem9uZVxuICBpZiAob3B0cy5OZ1pvbmUgPT09ICdub29wJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEluIG9yZGVyIGZvciBtdWx0aXBsZSBBbmd1bGFyIGFwcHMgdG8gd29yayBjb25jdXJyZW50bHkgb24gYSBwYWdlLCB0aGV5IGVhY2ggbmVlZCBhIHVuaXF1ZSBpZGVudGlmaWVyLlxuICBvcHRzLnpvbmVJZGVudGlmaWVyID0gYHNpbmdsZS1zcGEtYW5ndWxhcjoke3Byb3BzLm5hbWUgfHwgcHJvcHMuYXBwTmFtZX1gO1xuXG4gIC8vIFRoaXMgaXMgYSBoYWNrLCBzaW5jZSBOZ1pvbmUgZG9lc24ndCBhbGxvdyB5b3UgdG8gY29uZmlndXJlIHRoZSBwcm9wZXJ0eSB0aGF0IGlkZW50aWZpZXMgeW91ciB6b25lLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL1BsYWNlTWUtU0FTL3NpbmdsZS1zcGEtYW5ndWxhci1jbGkvaXNzdWVzLzMzLFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vc2luZ2xlLXNwYS9zaW5nbGUtc3BhLWFuZ3VsYXIvaXNzdWVzLzQ3LFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2Jsb2IvYTE0ZGMyZDdhNDgyMWExOWYyMGE5NTQ3MDUzYTU3MzQ3OThmNTQxZS9wYWNrYWdlcy9jb3JlL3NyYy96b25lL25nX3pvbmUudHMjTDE0NCxcbiAgLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi9hMTRkYzJkN2E0ODIxYTE5ZjIwYTk1NDcwNTNhNTczNDc5OGY1NDFlL3BhY2thZ2VzL2NvcmUvc3JjL3pvbmUvbmdfem9uZS50cyNMMjU3XG4gIG9wdHMuTmdab25lLmlzSW5Bbmd1bGFyWm9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIHdpbmRvdy5ab25lLmN1cnJlbnQuX3Byb3BlcnRpZXNbb3B0cy56b25lSWRlbnRpZmllcl0gPT09IHRydWU7XG4gIH07XG5cbiAgb3B0cy5yb3V0aW5nRXZlbnRMaXN0ZW5lciA9ICgpID0+IHtcbiAgICBvcHRzLmJvb3RzdHJhcHBlZE5nWm9uZSEucnVuKCgpID0+IHtcbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vc2luZ2xlLXNwYS9zaW5nbGUtc3BhLWFuZ3VsYXIvaXNzdWVzLzg2XG4gICAgICAvLyBab25lIGlzIHVuYXdhcmUgb2YgdGhlIHNpbmdsZS1zcGEgbmF2aWdhdGlvbiBjaGFuZ2UgYW5kIHNvIEFuZ3VsYXIgY2hhbmdlIGRldGVjdGlvbiBkb2Vzbid0IHdvcmtcbiAgICAgIC8vIHVubGVzcyB3ZSB0ZWxsIFpvbmUgdGhhdCBzb21ldGhpbmcgaGFwcGVuZWRcbiAgICB9KTtcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbW91bnQob3B0czogU2luZ2xlU3BhQW5ndWxhck9wdHMsIHByb3BzOiBhbnkpOiBQcm9taXNlPE5nTW9kdWxlUmVmPGFueT4+IHtcbiAgY29uc3QgZG9tRWxlbWVudEdldHRlciA9IGNob29zZURvbUVsZW1lbnRHZXR0ZXIob3B0cywgcHJvcHMpO1xuXG4gIGlmICghZG9tRWxlbWVudEdldHRlcikge1xuICAgIHRocm93IEVycm9yKFxuICAgICAgYGNhbm5vdCBtb3VudCBhbmd1bGFyIGFwcGxpY2F0aW9uICcke1xuICAgICAgICBwcm9wcy5uYW1lIHx8IHByb3BzLmFwcE5hbWVcbiAgICAgIH0nIHdpdGhvdXQgYSBkb21FbGVtZW50R2V0dGVyIHByb3ZpZGVkIGVpdGhlciBhcyBhbiBvcHQgb3IgYSBwcm9wYCxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgY29udGFpbmVyRWwgPSBnZXRDb250YWluZXJFbChkb21FbGVtZW50R2V0dGVyKTtcbiAgY29udGFpbmVyRWwuaW5uZXJIVE1MID0gb3B0cy50ZW1wbGF0ZTtcbiAgY29uc3QgYm9vdHN0cmFwUHJvbWlzZSA9IG9wdHMuYm9vdHN0cmFwRnVuY3Rpb24ocHJvcHMpO1xuXG4gIGlmICghKGJvb3RzdHJhcFByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuICAgIHRocm93IEVycm9yKFxuICAgICAgYHNpbmdsZS1zcGEtYW5ndWxhcjogdGhlIG9wdHMuYm9vdHN0cmFwRnVuY3Rpb24gbXVzdCByZXR1cm4gYSBwcm9taXNlLCBidXQgaW5zdGVhZCByZXR1cm5lZCBhICcke3R5cGVvZiBib290c3RyYXBQcm9taXNlfScgdGhhdCBpcyBub3QgYSBQcm9taXNlYCxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgbW9kdWxlOiBOZ01vZHVsZVJlZjxhbnk+ID0gYXdhaXQgYm9vdHN0cmFwUHJvbWlzZTtcblxuICBpZiAoIW1vZHVsZSB8fCB0eXBlb2YgbW9kdWxlLmRlc3Ryb3kgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIGBzaW5nbGUtc3BhLWFuZ3VsYXI6IHRoZSBvcHRzLmJvb3RzdHJhcEZ1bmN0aW9uIHJldHVybmVkIGEgcHJvbWlzZSB0aGF0IGRpZCBub3QgcmVzb2x2ZSB3aXRoIGEgdmFsaWQgQW5ndWxhciBtb2R1bGUuIERpZCB5b3UgY2FsbCBwbGF0Zm9ybUJyb3dzZXIoKS5ib290c3RyYXBNb2R1bGVGYWN0b3J5KCkgY29ycmVjdGx5P2AsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHNpbmdsZVNwYVBsYXRmb3JtTG9jYXRpb246IFNpbmdsZVNwYVBsYXRmb3JtTG9jYXRpb24gfCBudWxsID0gbW9kdWxlLmluamVjdG9yLmdldChcbiAgICBTaW5nbGVTcGFQbGF0Zm9ybUxvY2F0aW9uLFxuICAgIG51bGwsXG4gICk7XG5cbiAgY29uc3Qgbmdab25lRW5hYmxlZCA9IG9wdHMuTmdab25lICE9PSAnbm9vcCc7XG5cbiAgLy8gVGhlIHVzZXIgaGFzIHRvIHByb3ZpZGUgYEJyb3dzZXJQbGF0Zm9ybUxvY2F0aW9uYCBvbmx5IGlmIGhpcyBhcHBsaWNhdGlvbiB1c2VzIHJvdXRpbmcuXG4gIC8vIFNvIGlmIGhlIHByb3ZpZGVkIGBSb3V0ZXJgIGJ1dCBkaWRuJ3QgcHJvdmlkZSBgQnJvd3NlclBsYXRmb3JtTG9jYXRpb25gIHRoZW4gd2UgaGF2ZSB0byBpbmZvcm0gaGltLlxuICAvLyBBbHNvIGBnZXRTaW5nbGVTcGFFeHRyYVByb3ZpZGVycygpYCBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgaWYgdGhlIGRvZXNuJ3QgdXNlXG4gIC8vIGB6b25lLWxlc3NgIGNoYW5nZSBkZXRlY3Rpb24sIGlmIGBOZ1pvbmVgIGlzIGBub29wYCB0aGVuIHdlIGNhbiBza2lwIGl0LlxuICBpZiAobmdab25lRW5hYmxlZCAmJiBvcHRzLlJvdXRlciAmJiBzaW5nbGVTcGFQbGF0Zm9ybUxvY2F0aW9uID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBcdFxuICAgICAgc2luZ2xlLXNwYS1hbmd1bGFyOiBjb3VsZCBub3QgcmV0cmlldmUgZXh0cmEgcHJvdmlkZXJzIGZyb20gdGhlIHBsYXRmb3JtIGluamVjdG9yLiBEaWQgeW91IGNhbGwgZ2V0U2luZ2xlU3BhRXh0cmFQcm92aWRlcnMoKSB3aGVuIGNyZWF0aW5nIHBsYXRmb3JtP1x0XG4gICAgYCk7XG4gIH1cblxuICBjb25zdCBib290c3RyYXBwZWRPcHRzID0gb3B0cyBhcyBCb290c3RyYXBwZWRTaW5nbGVTcGFBbmd1bGFyT3B0cztcblxuICBpZiAobmdab25lRW5hYmxlZCkge1xuICAgIGNvbnN0IG5nWm9uZTogaW1wb3J0KCdAYW5ndWxhci9jb3JlJykuTmdab25lID0gbW9kdWxlLmluamVjdG9yLmdldChvcHRzLk5nWm9uZSk7XG4gICAgLy8gYE5nWm9uZWAgY2FuIGJlIGVuYWJsZWQgYnV0IHJvdXRpbmcgbWF5IG5vdCBiZSB1c2VkIHRodXMgYGdldFNpbmdsZVNwYUV4dHJhUHJvdmlkZXJzKClgXG4gICAgLy8gZnVuY3Rpb24gd2FzIG5vdCBjYWxsZWQuXG4gICAgc2luZ2xlU3BhUGxhdGZvcm1Mb2NhdGlvbj8uc2V0Tmdab25lKG5nWm9uZSk7XG4gICAgYm9vdHN0cmFwcGVkT3B0cy5ib290c3RyYXBwZWROZ1pvbmUgPSBuZ1pvbmU7XG4gICAgYm9vdHN0cmFwcGVkT3B0cy5ib290c3RyYXBwZWROZ1pvbmVbJ19pbm5lciddLl9wcm9wZXJ0aWVzW1xuICAgICAgYm9vdHN0cmFwcGVkT3B0cy56b25lSWRlbnRpZmllclxuICAgIF0gPSB0cnVlO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzaW5nbGUtc3BhOnJvdXRpbmctZXZlbnQnLCBib290c3RyYXBwZWRPcHRzLnJvdXRpbmdFdmVudExpc3RlbmVyISk7XG4gIH1cblxuICBib290c3RyYXBwZWRPcHRzLmJvb3RzdHJhcHBlZE1vZHVsZSA9IG1vZHVsZTtcbiAgcmV0dXJuIG1vZHVsZTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuYXN5bmMgZnVuY3Rpb24gdW5tb3VudChvcHRzOiBCb290c3RyYXBwZWRTaW5nbGVTcGFBbmd1bGFyT3B0cywgcHJvcHM6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAob3B0cy5Sb3V0ZXIpIHtcbiAgICAvLyBXb3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xOTA3OVxuICAgIGNvbnN0IHJvdXRlciA9IG9wdHMuYm9vdHN0cmFwcGVkTW9kdWxlLmluamVjdG9yLmdldChvcHRzLlJvdXRlcik7XG4gICAgcm91dGVyLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIGlmIChvcHRzLnJvdXRpbmdFdmVudExpc3RlbmVyKSB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3NpbmdsZS1zcGE6cm91dGluZy1ldmVudCcsIG9wdHMucm91dGluZ0V2ZW50TGlzdGVuZXIpO1xuICB9XG5cbiAgaWYgKG9wdHMuQW5pbWF0aW9uRW5naW5lKSB7XG4gICAgLypcbiAgICBUaGUgQnJvd3NlckFuaW1hdGlvbnNNb2R1bGUgZG9lcyBub3QgY2xlYW4gdXAgYWZ0ZXIgaXRzZWxmIDonKC4gV2hlbiB5b3UgdW5tb3VudC9kZXN0cm95IHRoZSBtYWluIG1vZHVsZSwgdGhlXG4gICAgQnJvd3NlckFuaW1hdGlvbnNNb2R1bGUgdXNlcyBhbiBBbmltYXRpb25SZW5kZXJlciB0aGluZyB0byByZW1vdmUgZG9tIGVsZW1lbnRzIGZyb20gdGhlIHBhZ2UuIEJ1dCB0aGUgQW5pbWF0aW9uUmVuZGVyZXJcbiAgICBkZWZlcnMgdGhlIGFjdHVhbCB3b3JrIHRvIHRoZSBUcmFuc2l0aW9uQW5pbWF0aW9uRW5naW5lIHRvIGRvIHRoaXMsIGFuZCB0aGUgVHJhbnNpdGlvbkFuaW1hdGlvbkVuZ2luZSBkb2Vzbid0IGFjdHVhbGx5XG4gICAgcmVtb3ZlIHRoZSBkb20gbm9kZSwgYnV0IGp1c3QgY2FsbHMgXCJtYXJrRWxlbWVudEFzUmVtb3ZlZCgpXCIuXG5cbiAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iL2RiNjJjY2Y5ZWI0NmVlODkzNjZhZGU1ODYzNjVlYTAyN2JiOTNlYjEvcGFja2FnZXMvYW5pbWF0aW9ucy9icm93c2VyL3NyYy9yZW5kZXIvdHJhbnNpdGlvbl9hbmltYXRpb25fZW5naW5lLnRzI0w3MTdcblxuICAgIFdoYXQgbWFya0FzUmVtb3ZlZERvZXMgaXMgcHV0IGl0IGludG8gYW4gYXJyYXkgY2FsbGVkIFwiY29sbGVjdGVkTGVhdmVFbGVtZW50c1wiLCB3aGljaCBpcyBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgc2hvdWxkIGJlIHJlbW92ZWRcbiAgICBhZnRlciB0aGUgRE9NIGhhcyBoYWQgYSBjaGFuY2UgdG8gZG8gYW55IGFuaW1hdGlvbnMuXG5cbiAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iL21hc3Rlci9wYWNrYWdlcy9hbmltYXRpb25zL2Jyb3dzZXIvc3JjL3JlbmRlci90cmFuc2l0aW9uX2FuaW1hdGlvbl9lbmdpbmUudHMjTDUyNVxuXG4gICAgVGhlIGFjdHVhbCBkb20gbm9kZXMgYXJlbid0IHJlbW92ZWQgdW50aWwgdGhlIFRyYW5zaXRpb25BbmltYXRpb25FbmdpbmUgXCJmbHVzaGVzXCIuXG5cbiAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iL2RiNjJjY2Y5ZWI0NmVlODkzNjZhZGU1ODYzNjVlYTAyN2JiOTNlYjEvcGFja2FnZXMvYW5pbWF0aW9ucy9icm93c2VyL3NyYy9yZW5kZXIvdHJhbnNpdGlvbl9hbmltYXRpb25fZW5naW5lLnRzI0w4NTFcblxuICAgIFVuZm9ydHVuYXRlbHksIHRob3VnaCwgdGhhdCBcImZsdXNoXCIgd2lsbCBuZXZlciBoYXBwZW4sIHNpbmNlIHRoZSBlbnRpcmUgbW9kdWxlIGlzIGJlaW5nIGRlc3Ryb3llZCBhbmQgdGhlcmUgd2lsbCBiZSBubyBtb3JlIGZsdXNoZXMuXG4gICAgU28gd2hhdCB3ZSBkbyBpbiB0aGlzIGNvZGUgaXMgZm9yY2Ugb25lIG1vcmUgZmx1c2ggb2YgdGhlIGFuaW1hdGlvbnMgYWZ0ZXIgdGhlIG1vZHVsZSBpcyBkZXN0cm95ZWQuXG5cbiAgICBJZGVhbGx5LCB3ZSB3b3VsZCBkbyB0aGlzIGJ5IGdldHRpbmcgdGhlIFRyYW5zaXRpb25BbmltYXRpb25FbmdpbmUgZGlyZWN0bHkgYW5kIGZsdXNoaW5nIGl0LiBVbmZvcnR1bmF0ZWx5LCB0aG91Z2gsIGl0J3MgcHJpdmF0ZSBjbGFzc1xuICAgIHRoYXQgY2Fubm90IGJlIGltcG9ydGVkIGFuZCBpcyBub3QgcHJvdmlkZWQgdG8gdGhlIGRlcGVuZGVuY3kgaW5qZWN0b3IuIFNvLCBpbnN0ZWFkLCB3ZSBnZXQgaXRzIHdyYXBwZXIgY2xhc3MsIEFuaW1hdGlvbkVuZ2luZSwgYW5kIHRoZW5cbiAgICBhY2Nlc3MgaXRzIHByaXZhdGUgdmFyaWFibGUgcmVmZXJlbmNlIHRvIHRoZSBUcmFuc2l0aW9uQW5pbWF0aW9uRW5naW5lIHNvIHRoYXQgd2UgY2FuIGNhbGwgZmx1c2guXG4gICAgKi9cbiAgICBjb25zdCBhbmltYXRpb25FbmdpbmUgPSBvcHRzLmJvb3RzdHJhcHBlZE1vZHVsZS5pbmplY3Rvci5nZXQob3B0cy5BbmltYXRpb25FbmdpbmUpO1xuICAgIGFuaW1hdGlvbkVuZ2luZS5fdHJhbnNpdGlvbkVuZ2luZS5mbHVzaCgpO1xuICB9XG5cbiAgb3B0cy5ib290c3RyYXBwZWRNb2R1bGUuZGVzdHJveSgpO1xuICBkZWxldGUgb3B0cy5ib290c3RyYXBwZWRNb2R1bGU7XG5cbiAgLy8gVGhpcyBpcyBhbiBpc3N1ZS4gSXNzdWUgaGFzIGJlZW4gY3JlYXRlZCBhbmQgQW5ndWxhciB0ZWFtIGlzIHdvcmtpbmcgb24gdGhlIGZpeDpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMzY0NDlcbiAgcmVtb3ZlQXBwbGljYXRpb25Gcm9tRE9NSWZJdnlFbmFibGVkKG9wdHMsIHByb3BzKTtcbn1cbiJdfQ==
import { __decorate, __awaiter } from 'tslib';
import { chooseDomElementGetter, getContainerEl, removeApplicationFromDOMIfIvyEnabled } from 'single-spa-angular/internals';
import { Injectable, Inject, ElementRef, Input, Component, NgModule } from '@angular/core';

@@ -77,2 +78,8 @@ import { ɵBrowserPlatformLocation, DOCUMENT, PlatformLocation } from '@angular/common';

return __awaiter(this, void 0, void 0, function* () {
// Angular provides an opportunity to develop `zone-less` application, where developers
// have to trigger change detection manually.
// See https://angular.io/guide/zone#noopzone
if (opts.NgZone === 'noop') {
return;
}
// In order for multiple Angular apps to work concurrently on a page, they each need a unique identifier.

@@ -99,2 +106,3 @@ opts.zoneIdentifier = `single-spa-angular:${props.name || props.appName}`;

function mount(opts, props) {
var _a;
return __awaiter(this, void 0, void 0, function* () {

@@ -116,5 +124,8 @@ const domElementGetter = chooseDomElementGetter(opts, props);

const singleSpaPlatformLocation = module.injector.get(SingleSpaPlatformLocation, null);
const ngZoneEnabled = opts.NgZone !== 'noop';
// The user has to provide `BrowserPlatformLocation` only if his application uses routing.
// So if he provided `Router` but didn't provide `BrowserPlatformLocation` then we have to inform him.
if (opts.Router && singleSpaPlatformLocation === null) {
// Also `getSingleSpaExtraProviders()` function should be called only if the doesn't use
// `zone-less` change detection, if `NgZone` is `noop` then we can skip it.
if (ngZoneEnabled && opts.Router && singleSpaPlatformLocation === null) {
throw new Error(`

@@ -125,7 +136,11 @@ single-spa-angular: could not retrieve extra providers from the platform injector. Did you call getSingleSpaExtraProviders() when creating platform?

const bootstrappedOpts = opts;
const ngZone = module.injector.get(opts.NgZone);
singleSpaPlatformLocation.setNgZone(ngZone);
bootstrappedOpts.bootstrappedNgZone = ngZone;
bootstrappedOpts.bootstrappedNgZone['_inner']._properties[bootstrappedOpts.zoneIdentifier] = true;
window.addEventListener('single-spa:routing-event', bootstrappedOpts.routingEventListener);
if (ngZoneEnabled) {
const ngZone = module.injector.get(opts.NgZone);
// `NgZone` can be enabled but routing may not be used thus `getSingleSpaExtraProviders()`
// function was not called.
(_a = singleSpaPlatformLocation) === null || _a === void 0 ? void 0 : _a.setNgZone(ngZone);
bootstrappedOpts.bootstrappedNgZone = ngZone;
bootstrappedOpts.bootstrappedNgZone['_inner']._properties[bootstrappedOpts.zoneIdentifier] = true;
window.addEventListener('single-spa:routing-event', bootstrappedOpts.routingEventListener);
}
bootstrappedOpts.bootstrappedModule = module;

@@ -143,3 +158,5 @@ return module;

}
window.removeEventListener('single-spa:routing-event', opts.routingEventListener);
if (opts.routingEventListener) {
window.removeEventListener('single-spa:routing-event', opts.routingEventListener);
}
if (opts.AnimationEngine) {

@@ -175,66 +192,7 @@ /*

delete opts.bootstrappedModule;
if (ivyEnabled()) {
// This is an issue. Issue has been created and Angular team is working on the fix:
// https://github.com/angular/angular/issues/36449
removeApplicationFromDOMIfIvyEnabled(opts, props);
}
// This is an issue. Issue has been created and Angular team is working on the fix:
// https://github.com/angular/angular/issues/36449
removeApplicationFromDOMIfIvyEnabled(opts, props);
});
}
function ivyEnabled() {
try {
// `ɵivyEnabled` variable is exposed starting from version 8.
// We use `require` here except of a single `import { ɵivyEnabled }` because the
// developer can use Angular version that doesn't expose it (all versions <8).
// The `catch` statement will handle those cases.
// eslint-disable-next-line
const { ɵivyEnabled } = require('@angular/core');
return !!ɵivyEnabled;
}
catch (_a) {
return false;
}
}
function removeApplicationFromDOMIfIvyEnabled(opts, props) {
const domElementGetter = chooseDomElementGetter(opts, props);
const domElement = getContainerEl(domElementGetter);
// View Engine removes all nodes automatically when calling `NgModuleRef.destroy()`,
// which calls `ComponentRef.destroy()`.
// Basically this will remove `app-root` or any other selector from the container element.
while (domElement.firstChild)
domElement.removeChild(domElement.firstChild);
}
function getContainerEl(domElementGetter) {
const element = domElementGetter();
if (!element) {
throw Error('domElementGetter did not return a valid dom element');
}
return element;
}
function chooseDomElementGetter(opts, props) {
props = props && props.customProps ? props.customProps : props;
if (props.domElement) {
return () => props.domElement;
}
else if (props.domElementGetter) {
return props.domElementGetter;
}
else if (opts.domElementGetter) {
return opts.domElementGetter;
}
else {
return defaultDomElementGetter(props.name);
}
}
function defaultDomElementGetter(name) {
return function getDefaultDomElement() {
const id = `single-spa-application:${name}`;
let domElement = document.getElementById(id);
if (!domElement) {
domElement = document.createElement('div');
domElement.id = id;
document.body.appendChild(domElement);
}
return domElement;
};
}

@@ -241,0 +199,0 @@ let ParcelComponent = class ParcelComponent {

import { __extends, __decorate, __assign, __awaiter, __generator, __spread } from 'tslib';
import { chooseDomElementGetter, getContainerEl, removeApplicationFromDOMIfIvyEnabled } from 'single-spa-angular/internals';
import { Injectable, Inject, ElementRef, Input, Component, NgModule } from '@angular/core';

@@ -84,2 +85,8 @@ import { ɵBrowserPlatformLocation, DOCUMENT, PlatformLocation } from '@angular/common';

return __generator(this, function (_a) {
// Angular provides an opportunity to develop `zone-less` application, where developers
// have to trigger change detection manually.
// See https://angular.io/guide/zone#noopzone
if (opts.NgZone === 'noop') {
return [2 /*return*/];
}
// In order for multiple Angular apps to work concurrently on a page, they each need a unique identifier.

@@ -108,6 +115,7 @@ opts.zoneIdentifier = "single-spa-angular:" + (props.name || props.appName);

function mount(opts, props) {
var _a;
return __awaiter(this, void 0, void 0, function () {
var domElementGetter, containerEl, bootstrapPromise, module, singleSpaPlatformLocation, bootstrappedOpts, ngZone;
return __generator(this, function (_a) {
switch (_a.label) {
var domElementGetter, containerEl, bootstrapPromise, module, singleSpaPlatformLocation, ngZoneEnabled, bootstrappedOpts, ngZone;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:

@@ -126,3 +134,3 @@ domElementGetter = chooseDomElementGetter(opts, props);

case 1:
module = _a.sent();
module = _b.sent();
if (!module || typeof module.destroy !== 'function') {

@@ -132,13 +140,20 @@ throw Error("single-spa-angular: the opts.bootstrapFunction returned a promise that did not resolve with a valid Angular module. Did you call platformBrowser().bootstrapModuleFactory() correctly?");

singleSpaPlatformLocation = module.injector.get(SingleSpaPlatformLocation, null);
ngZoneEnabled = opts.NgZone !== 'noop';
// The user has to provide `BrowserPlatformLocation` only if his application uses routing.
// So if he provided `Router` but didn't provide `BrowserPlatformLocation` then we have to inform him.
if (opts.Router && singleSpaPlatformLocation === null) {
// Also `getSingleSpaExtraProviders()` function should be called only if the doesn't use
// `zone-less` change detection, if `NgZone` is `noop` then we can skip it.
if (ngZoneEnabled && opts.Router && singleSpaPlatformLocation === null) {
throw new Error("\t\n single-spa-angular: could not retrieve extra providers from the platform injector. Did you call getSingleSpaExtraProviders() when creating platform?\t\n ");
}
bootstrappedOpts = opts;
ngZone = module.injector.get(opts.NgZone);
singleSpaPlatformLocation.setNgZone(ngZone);
bootstrappedOpts.bootstrappedNgZone = ngZone;
bootstrappedOpts.bootstrappedNgZone['_inner']._properties[bootstrappedOpts.zoneIdentifier] = true;
window.addEventListener('single-spa:routing-event', bootstrappedOpts.routingEventListener);
if (ngZoneEnabled) {
ngZone = module.injector.get(opts.NgZone);
// `NgZone` can be enabled but routing may not be used thus `getSingleSpaExtraProviders()`
// function was not called.
(_a = singleSpaPlatformLocation) === null || _a === void 0 ? void 0 : _a.setNgZone(ngZone);
bootstrappedOpts.bootstrappedNgZone = ngZone;
bootstrappedOpts.bootstrappedNgZone['_inner']._properties[bootstrappedOpts.zoneIdentifier] = true;
window.addEventListener('single-spa:routing-event', bootstrappedOpts.routingEventListener);
}
bootstrappedOpts.bootstrappedModule = module;

@@ -159,3 +174,5 @@ return [2 /*return*/, module];

}
window.removeEventListener('single-spa:routing-event', opts.routingEventListener);
if (opts.routingEventListener) {
window.removeEventListener('single-spa:routing-event', opts.routingEventListener);
}
if (opts.AnimationEngine) {

@@ -167,7 +184,5 @@ animationEngine = opts.bootstrappedModule.injector.get(opts.AnimationEngine);

delete opts.bootstrappedModule;
if (ivyEnabled()) {
// This is an issue. Issue has been created and Angular team is working on the fix:
// https://github.com/angular/angular/issues/36449
removeApplicationFromDOMIfIvyEnabled(opts, props);
}
// This is an issue. Issue has been created and Angular team is working on the fix:
// https://github.com/angular/angular/issues/36449
removeApplicationFromDOMIfIvyEnabled(opts, props);
return [2 /*return*/];

@@ -177,59 +192,2 @@ });

}
function ivyEnabled() {
try {
// `ɵivyEnabled` variable is exposed starting from version 8.
// We use `require` here except of a single `import { ɵivyEnabled }` because the
// developer can use Angular version that doesn't expose it (all versions <8).
// The `catch` statement will handle those cases.
// eslint-disable-next-line
var ɵivyEnabled = require('@angular/core').ɵivyEnabled;
return !!ɵivyEnabled;
}
catch (_a) {
return false;
}
}
function removeApplicationFromDOMIfIvyEnabled(opts, props) {
var domElementGetter = chooseDomElementGetter(opts, props);
var domElement = getContainerEl(domElementGetter);
// View Engine removes all nodes automatically when calling `NgModuleRef.destroy()`,
// which calls `ComponentRef.destroy()`.
// Basically this will remove `app-root` or any other selector from the container element.
while (domElement.firstChild)
domElement.removeChild(domElement.firstChild);
}
function getContainerEl(domElementGetter) {
var element = domElementGetter();
if (!element) {
throw Error('domElementGetter did not return a valid dom element');
}
return element;
}
function chooseDomElementGetter(opts, props) {
props = props && props.customProps ? props.customProps : props;
if (props.domElement) {
return function () { return props.domElement; };
}
else if (props.domElementGetter) {
return props.domElementGetter;
}
else if (opts.domElementGetter) {
return opts.domElementGetter;
}
else {
return defaultDomElementGetter(props.name);
}
}
function defaultDomElementGetter(name) {
return function getDefaultDomElement() {
var id = "single-spa-application:" + name;
var domElement = document.getElementById(id);
if (!domElement) {
domElement = document.createElement('div');
domElement.id = id;
document.body.appendChild(domElement);
}
return domElement;
};
}

@@ -236,0 +194,0 @@ var ParcelComponent = /** @class */ (function () {

{
"$schema": "../node_modules/ng-packagr/ng-package.schema.json",
"name": "single-spa-angular",
"version": "4.0.1",
"version": "4.1.0",
"description": "Helpers for building single-spa applications which use Angular 2",

@@ -6,0 +6,0 @@ "schematics": "./schematics/schematics.json",

@@ -1,13 +0,3 @@

import { NgZone, Type, NgModuleRef } from '@angular/core';
import { AppProps, LifeCycles } from 'single-spa';
import { LifeCycles } from 'single-spa';
import { SingleSpaAngularOpts } from 'single-spa-angular/internals';
export declare function singleSpaAngular(userOpts: SingleSpaAngularOpts): LifeCycles;
interface SingleSpaAngularOpts {
NgZone: typeof NgZone;
bootstrapFunction(props: AppProps): Promise<NgModuleRef<any>>;
updateFunction?(props: AppProps): Promise<any>;
template: string;
Router?: Type<any>;
domElementGetter?(): HTMLElement;
AnimationEngine?: Type<any>;
}
export {};

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc