single-spa-angular
Advanced tools
Comparing version 4.9.2 to 5.0.0
@@ -31,2 +31,4 @@ (function (global, factory) { | ||
function __extends(d, b) { | ||
if (typeof b !== "function" && b !== null) | ||
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); | ||
extendStatics(d, b); | ||
@@ -217,2 +219,3 @@ function __() { this.constructor = d; } | ||
} | ||
/** @deprecated */ | ||
function __spread() { | ||
@@ -223,2 +226,3 @@ for (var ar = [], i = 0; i < arguments.length; i++) | ||
} | ||
/** @deprecated */ | ||
function __spreadArrays() { | ||
@@ -232,3 +236,7 @@ for (var s = 0, i = 0, il = arguments.length; i < il; i++) | ||
} | ||
; | ||
function __spreadArray(to, from) { | ||
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) | ||
to[j] = from[i]; | ||
return to; | ||
} | ||
function __await(v) { | ||
@@ -298,14 +306,17 @@ return this instanceof __await ? (this.v = v, this) : new __await(v); | ||
} | ||
function __classPrivateFieldGet(receiver, privateMap) { | ||
if (!privateMap.has(receiver)) { | ||
throw new TypeError("attempted to get private field on non-instance"); | ||
} | ||
return privateMap.get(receiver); | ||
function __classPrivateFieldGet(receiver, state, kind, f) { | ||
if (kind === "a" && !f) | ||
throw new TypeError("Private accessor was defined without a getter"); | ||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) | ||
throw new TypeError("Cannot read private member from an object whose class did not declare it"); | ||
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); | ||
} | ||
function __classPrivateFieldSet(receiver, privateMap, value) { | ||
if (!privateMap.has(receiver)) { | ||
throw new TypeError("attempted to set private field on non-instance"); | ||
} | ||
privateMap.set(receiver, value); | ||
return value; | ||
function __classPrivateFieldSet(receiver, state, value, kind, f) { | ||
if (kind === "m") | ||
throw new TypeError("Private method is not writable"); | ||
if (kind === "a" && !f) | ||
throw new TypeError("Private accessor was defined without a setter"); | ||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) | ||
throw new TypeError("Cannot write private member to an object whose class did not declare it"); | ||
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; | ||
} | ||
@@ -312,0 +323,0 @@ |
@@ -7,13 +7,2 @@ (function (global, factory) { | ||
function removeApplicationFromDOMIfIvyEnabled(options, props) { | ||
if (ivyEnabled()) { | ||
var domElementGetter = chooseDomElementGetter(options, props); | ||
var domElement = getContainerElement(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 getContainerElementAndSetTemplate(options, props) { | ||
@@ -63,16 +52,2 @@ var domElementGetter = chooseDomElementGetter(options, 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 | ||
var ɵivyEnabled = require('@angular/core').ɵivyEnabled; | ||
return !!ɵivyEnabled; | ||
} | ||
catch (_a) { | ||
return false; | ||
} | ||
} | ||
@@ -84,3 +59,2 @@ /** | ||
exports.getContainerElementAndSetTemplate = getContainerElementAndSetTemplate; | ||
exports.removeApplicationFromDOMIfIvyEnabled = removeApplicationFromDOMIfIvyEnabled; | ||
@@ -87,0 +61,0 @@ Object.defineProperty(exports, '__esModule', { value: true }); |
@@ -104,2 +104,3 @@ (function (global, factory) { | ||
]; | ||
/** @nocollapse */ | ||
ParcelComponent.ctorParameters = function () { return [ | ||
@@ -106,0 +107,0 @@ { type: core.ElementRef } |
@@ -31,2 +31,4 @@ (function (global, factory) { | ||
function __extends(d, b) { | ||
if (typeof b !== "function" && b !== null) | ||
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); | ||
extendStatics(d, b); | ||
@@ -217,2 +219,3 @@ function __() { this.constructor = d; } | ||
} | ||
/** @deprecated */ | ||
function __spread() { | ||
@@ -223,2 +226,3 @@ for (var ar = [], i = 0; i < arguments.length; i++) | ||
} | ||
/** @deprecated */ | ||
function __spreadArrays() { | ||
@@ -232,3 +236,7 @@ for (var s = 0, i = 0, il = arguments.length; i < il; i++) | ||
} | ||
; | ||
function __spreadArray(to, from) { | ||
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) | ||
to[j] = from[i]; | ||
return to; | ||
} | ||
function __await(v) { | ||
@@ -298,14 +306,17 @@ return this instanceof __await ? (this.v = v, this) : new __await(v); | ||
} | ||
function __classPrivateFieldGet(receiver, privateMap) { | ||
if (!privateMap.has(receiver)) { | ||
throw new TypeError("attempted to get private field on non-instance"); | ||
} | ||
return privateMap.get(receiver); | ||
function __classPrivateFieldGet(receiver, state, kind, f) { | ||
if (kind === "a" && !f) | ||
throw new TypeError("Private accessor was defined without a getter"); | ||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) | ||
throw new TypeError("Cannot read private member from an object whose class did not declare it"); | ||
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); | ||
} | ||
function __classPrivateFieldSet(receiver, privateMap, value) { | ||
if (!privateMap.has(receiver)) { | ||
throw new TypeError("attempted to set private field on non-instance"); | ||
} | ||
privateMap.set(receiver, value); | ||
return value; | ||
function __classPrivateFieldSet(receiver, state, value, kind, f) { | ||
if (kind === "m") | ||
throw new TypeError("Private method is not writable"); | ||
if (kind === "a" && !f) | ||
throw new TypeError("Private accessor was defined without a setter"); | ||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) | ||
throw new TypeError("Cannot write private member to an object whose class did not declare it"); | ||
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; | ||
} | ||
@@ -316,55 +327,9 @@ | ||
function SingleSpaPlatformLocation() { | ||
var _this = _super.apply(this, __spread(arguments)) || this; | ||
var _this = _super.apply(this, __spreadArray([], __read(arguments))) || this; | ||
// This is a simple marker that helps us to ignore PopStateEvents | ||
// that was not dispatched by the browser. | ||
_this.skipNextPopState = false; | ||
// The key here is an actual forked `Zone` of some specific application. | ||
// We will be able to find the specific zone when application gets destroyed | ||
// by application `name`. | ||
// The reason of that the `onPopState` method is invoked during `bootstrapModule` | ||
// and we can't know what application has invoked it. Why should we know the application | ||
// that has invoked `onPopState`? When application gets destroyed in a `sharing dependencies mode` | ||
// (when there is a single platform per all applications) we want to remove application | ||
// specific `popstate` listeners. E.g. if there are 2 applications: | ||
// * shop application adds `popstate` listener | ||
// * navbar application adds `popstate` listener | ||
// When shop application gets destroyed we want to remove only its `popstate` listener. | ||
_this.zoneToOnPopStateListenersMap = new Map(); | ||
// This is used only to make `Zone.wrap` happy, since it requires 2 arguments | ||
// and the second argument is a unique string which `zone.js` uses for debugging purposes. | ||
// We might want to use the application name, but we're not able to get it when `onPopState` | ||
// method is called during module bootstrapping. | ||
_this.source = 0; | ||
_this.source = 'Window.addEventListener:popstate'; | ||
return _this; | ||
} | ||
SingleSpaPlatformLocation.prototype.destroyApplication = function (zoneIdentifier) { | ||
var e_1, _a; | ||
// TLDR: Angular adds `popstate` event listener and then doesn't remove it when application gets destroyed. | ||
// Basically, Angular has a potentional memory leak. The `ɵBrowserPlatformLocation` | ||
// has `onPopState` method which adds `popstate` event listener and forgets, see here: | ||
// https://github.com/angular/angular/blob/14be55c9facf3e47b8c97df4502dc3f0f897da03/packages/common/src/location/platform_location.ts#L126 | ||
var zone = __spread(this.zoneToOnPopStateListenersMap.keys()).find( | ||
// `getZoneWith` will return a zone which defines a `key` and in our case | ||
// we define a custom key in `single-spa-angular.ts` | ||
// via this line of code: | ||
// `_properties[zoneIdentifier] = true;` | ||
function (zone) { return zone.getZoneWith(zoneIdentifier) !== null; }); | ||
var onPopStateListeners = this.zoneToOnPopStateListenersMap.get(zone); | ||
if (Array.isArray(onPopStateListeners)) { | ||
try { | ||
for (var onPopStateListeners_1 = __values(onPopStateListeners), onPopStateListeners_1_1 = onPopStateListeners_1.next(); !onPopStateListeners_1_1.done; onPopStateListeners_1_1 = onPopStateListeners_1.next()) { | ||
var onPopStateListener = onPopStateListeners_1_1.value; | ||
window.removeEventListener('popstate', onPopStateListener); | ||
} | ||
} | ||
catch (e_1_1) { e_1 = { error: e_1_1 }; } | ||
finally { | ||
try { | ||
if (onPopStateListeners_1_1 && !onPopStateListeners_1_1.done && (_a = onPopStateListeners_1.return)) _a.call(onPopStateListeners_1); | ||
} | ||
finally { if (e_1) throw e_1.error; } | ||
} | ||
} | ||
this.zoneToOnPopStateListenersMap.delete(zone); | ||
}; | ||
SingleSpaPlatformLocation.prototype.pushState = function (state, title, url) { | ||
@@ -389,3 +354,3 @@ this.skipNextPopState = true; | ||
// See https://github.com/single-spa/single-spa-angular/issues/94 for more details | ||
fn = zone.wrap(fn, "" + this.source++); | ||
fn = zone.wrap(fn, this.source); | ||
var onPopStateListener = function (event) { | ||
@@ -404,14 +369,4 @@ // The `LocationChangeEvent` doesn't have the `singleSpa` property, since it's added | ||
}; | ||
this.storeOnPopStateListener(zone, onPopStateListener); | ||
_super.prototype.onPopState.call(this, onPopStateListener); | ||
return _super.prototype.onPopState.call(this, onPopStateListener); | ||
}; | ||
SingleSpaPlatformLocation.prototype.storeOnPopStateListener = function (zone, onPopStateListener) { | ||
// All listeners should be stored inside an array because the `onPopState` can be called | ||
// multiple times thus we wanna reference all listeners to remove them further. | ||
var onPopStateListeners = this.zoneToOnPopStateListenersMap.get(zone) || []; | ||
onPopStateListeners.push(onPopStateListener); | ||
if (!this.zoneToOnPopStateListenersMap.has(zone)) { | ||
this.zoneToOnPopStateListenersMap.set(zone, onPopStateListeners); | ||
} | ||
}; | ||
return SingleSpaPlatformLocation; | ||
@@ -431,3 +386,2 @@ }(common.ɵBrowserPlatformLocation)); | ||
provide: SingleSpaPlatformLocation, | ||
useClass: SingleSpaPlatformLocation, | ||
deps: [[new core.Inject(common.DOCUMENT)]], | ||
@@ -450,3 +404,2 @@ }, | ||
domElementGetter: undefined, | ||
AnimationEngine: undefined, | ||
updateFunction: function () { return Promise.resolve(); }, | ||
@@ -514,3 +467,3 @@ bootstrappedModule: null, | ||
return __awaiter(this, void 0, void 0, function () { | ||
var bootstrapPromise, module, singleSpaPlatformLocation, ngZoneEnabled, bootstrappedOptions, ngZone, zoneIdentifier_1; | ||
var bootstrapPromise, module, singleSpaPlatformLocation, ngZoneEnabled, bootstrappedOptions, ngZone, zoneIdentifier; | ||
return __generator(this, function (_a) { | ||
@@ -542,3 +495,3 @@ switch (_a.label) { | ||
ngZone = module.injector.get(options.NgZone); | ||
zoneIdentifier_1 = bootstrappedOptions.zoneIdentifier; | ||
zoneIdentifier = bootstrappedOptions.zoneIdentifier; | ||
// `NgZone` can be enabled but routing may not be used thus `getSingleSpaExtraProviders()` | ||
@@ -548,10 +501,5 @@ // function was not called. | ||
skipLocationChangeOnNonImperativeRoutingTriggers(module, options); | ||
// Cleanup resources, especially remove event listeners thus they will not be added | ||
// twice when application gets bootstrapped the second time. | ||
module.onDestroy(function () { | ||
singleSpaPlatformLocation.destroyApplication(zoneIdentifier_1); | ||
}); | ||
} | ||
bootstrappedOptions.bootstrappedNgZone = ngZone; | ||
bootstrappedOptions.bootstrappedNgZone['_inner']._properties[zoneIdentifier_1] = true; | ||
bootstrappedOptions.bootstrappedNgZone['_inner']._properties[zoneIdentifier] = true; | ||
window.addEventListener('single-spa:routing-event', bootstrappedOptions.routingEventListener); | ||
@@ -565,24 +513,9 @@ } | ||
} | ||
// eslint-disable-next-line @typescript-eslint/no-unused-vars | ||
function unmount(options, props) { | ||
return __awaiter(this, void 0, void 0, function () { | ||
var router, animationEngine; | ||
return __generator(this, function (_a) { | ||
if (options.Router) { | ||
router = options.bootstrappedModule.injector.get(options.Router); | ||
router.dispose(); | ||
} | ||
if (options.routingEventListener) { | ||
window.removeEventListener('single-spa:routing-event', options.routingEventListener); | ||
} | ||
if (options.AnimationEngine) { | ||
animationEngine = options.bootstrappedModule.injector.get(options.AnimationEngine); | ||
animationEngine._transitionEngine.flush(); | ||
} | ||
options.bootstrappedModule.destroy(); | ||
options.bootstrappedModule = null; | ||
// TODO: this is not an issue anymore and should be removed in the future. | ||
internals.removeApplicationFromDOMIfIvyEnabled(options, props); | ||
return [2 /*return*/]; | ||
}); | ||
function unmount(options) { | ||
return Promise.resolve().then(function () { | ||
if (options.routingEventListener) { | ||
window.removeEventListener('single-spa:routing-event', options.routingEventListener); | ||
} | ||
options.bootstrappedModule.destroy(); | ||
options.bootstrappedModule = null; | ||
}); | ||
@@ -589,0 +522,0 @@ } |
@@ -11,2 +11,2 @@ { | ||
"name": "single-spa-angular/elements" | ||
} | ||
} |
@@ -46,2 +46,2 @@ import { __awaiter } from "tslib"; | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vbGlicy9zaW5nbGUtc3BhLWFuZ3VsYXIvZWxlbWVudHMvc3JjLyIsInNvdXJjZXMiOlsiaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLE9BQU8sRUFFTCxpQ0FBaUMsR0FDbEMsTUFBTSw4QkFBOEIsQ0FBQztBQUl0QyxNQUFNLGNBQWMsR0FBZ0Q7SUFDbEUsT0FBTyxFQUFFLElBQUk7SUFDYixRQUFRLEVBQUUsSUFBSztJQUNmLFdBQVcsRUFBRSxJQUFJO0lBQ2pCLGlCQUFpQixFQUFFLElBQUs7SUFDeEIsZ0JBQWdCLEVBQUUsU0FBUztDQUM1QixDQUFDO0FBRUYsU0FBZSxTQUFTLENBQUMsT0FBb0QsRUFBRSxLQUFVOztRQUN2RixJQUFJLE9BQU8sQ0FBQyxXQUFXLEtBQUssSUFBSSxFQUFFO1lBQ2hDLE9BQU87U0FDUjtRQUVELG9FQUFvRTtRQUNwRSxnRUFBZ0U7UUFDaEUsMEJBQTBCO1FBQzFCLE9BQU8sQ0FBQyxXQUFXLEdBQUcsTUFBTSxPQUFPLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0QsQ0FBQztDQUFBO0FBRUQsU0FBZSxLQUFLLENBQUMsT0FBb0QsRUFBRSxLQUFVOztRQUNuRixNQUFNLGdCQUFnQixHQUFHLGlDQUFpQyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzRSw0RUFBNEU7UUFDNUUscUVBQXFFO1FBQ3JFLHFCQUFxQjtRQUNyQixPQUFPLENBQUMsT0FBTyxHQUFHLGdCQUFnQixDQUFDLGlCQUE4QixDQUFDO0lBQ3BFLENBQUM7Q0FBQTtBQUVELFNBQVMsT0FBTyxDQUFDLE9BQW9EO0lBQ25FLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDakMsbUVBQW1FO1FBQ25FLG1FQUFtRTtRQUNuRSxPQUFPLENBQUMsT0FBUSxDQUFDLGFBQWMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQVEsQ0FBQyxDQUFDO1FBQzlELE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxXQUF3QztJQUMvRSxNQUFNLE9BQU8sbUNBQ1IsY0FBYyxHQUNkLFdBQVcsQ0FDZixDQUFDO0lBRUYsT0FBTztRQUNMLFNBQVMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7UUFDeEMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQztRQUNoQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDO0tBQ3JDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTGlmZUN5Y2xlcyB9IGZyb20gJ3NpbmdsZS1zcGEnO1xuaW1wb3J0IHsgTmdFbGVtZW50IH0gZnJvbSAnQGFuZ3VsYXIvZWxlbWVudHMnO1xuaW1wb3J0IHtcbiAgQmFzZVNpbmdsZVNwYUFuZ3VsYXJPcHRpb25zLFxuICBnZXRDb250YWluZXJFbGVtZW50QW5kU2V0VGVtcGxhdGUsXG59IGZyb20gJ3NpbmdsZS1zcGEtYW5ndWxhci9pbnRlcm5hbHMnO1xuXG5pbXBvcnQgeyBCb290c3RyYXBwZWRTaW5nbGVTcGFBbmd1bGFyRWxlbWVudHNPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBCb290c3RyYXBwZWRTaW5nbGVTcGFBbmd1bGFyRWxlbWVudHNPcHRpb25zID0ge1xuICBlbGVtZW50OiBudWxsLFxuICB0ZW1wbGF0ZTogbnVsbCEsXG4gIG5nTW9kdWxlUmVmOiBudWxsLFxuICBib290c3RyYXBGdW5jdGlvbjogbnVsbCEsXG4gIGRvbUVsZW1lbnRHZXR0ZXI6IHVuZGVmaW5lZCxcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGJvb3RzdHJhcChvcHRpb25zOiBCb290c3RyYXBwZWRTaW5nbGVTcGFBbmd1bGFyRWxlbWVudHNPcHRpb25zLCBwcm9wczogYW55KSB7XG4gIGlmIChvcHRpb25zLm5nTW9kdWxlUmVmICE9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gV2UgY2FsbCBgYm9vdHN0cmFwRnVuY3Rpb24oKWAgaW5zaWRlIHRoZSBib290c3RyYXAgbGlmZWN5Y2xlIGhvb2tcbiAgLy8gYmVjYXVzZSBBbmd1bGFyIG1vZHVsZXMgdGhhdCBleHBvc2UgY3VzdG9tIGVsZW1lbnRzIHNob3VsZCBiZVxuICAvLyBib290c3RyYXBwZWQgb25seSBvbmNlLlxuICBvcHRpb25zLm5nTW9kdWxlUmVmID0gYXdhaXQgb3B0aW9ucy5ib290c3RyYXBGdW5jdGlvbihwcm9wcyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1vdW50KG9wdGlvbnM6IEJvb3RzdHJhcHBlZFNpbmdsZVNwYUFuZ3VsYXJFbGVtZW50c09wdGlvbnMsIHByb3BzOiBhbnkpIHtcbiAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IGdldENvbnRhaW5lckVsZW1lbnRBbmRTZXRUZW1wbGF0ZShvcHRpb25zLCBwcm9wcyk7XG4gIC8vIGBvcHRpb25zLnRlbXBsYXRlYCB3aGljaCBjYW4gYmUgYDxhcHAtZWxlbWVudCAvPmAgaXMgbm90IGEgdmFsaWQgc2VsZWN0b3JcbiAgLy8gZm9yIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYCwgdGh1cyB3ZSByZXRyaWV2ZSB0aGlzIGN1c3RvbSBlbGVtZW50XG4gIC8vIHZpYSB0aGlzIHByb3BlcnR5LlxuICBvcHRpb25zLmVsZW1lbnQgPSBjb250YWluZXJFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkIGFzIE5nRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gdW5tb3VudChvcHRpb25zOiBCb290c3RyYXBwZWRTaW5nbGVTcGFBbmd1bGFyRWxlbWVudHNPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAvLyBSZW1vdmluZyBjdXN0b20gZWxlbWVudCBmcm9tIERPTSBpcyBlbm91Z2ggc2luY2UgaXQgd2lsbCB0cmlnZ2VyXG4gICAgLy8gYGRpc2Nvbm5lY3RlZENhbGxiYWNrKClgIGFuZCBBbmd1bGFyIHdpbGwgZGlzcG9zZSBhbGwgcmVzb3VyY2VzLlxuICAgIG9wdGlvbnMuZWxlbWVudCEucGFyZW50RWxlbWVudCEucmVtb3ZlQ2hpbGQob3B0aW9ucy5lbGVtZW50ISk7XG4gICAgb3B0aW9ucy5lbGVtZW50ID0gbnVsbDtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaW5nbGVTcGFBbmd1bGFyRWxlbWVudHModXNlck9wdGlvbnM6IEJhc2VTaW5nbGVTcGFBbmd1bGFyT3B0aW9ucyk6IExpZmVDeWNsZXMge1xuICBjb25zdCBvcHRpb25zOiBCb290c3RyYXBwZWRTaW5nbGVTcGFBbmd1bGFyRWxlbWVudHNPcHRpb25zID0ge1xuICAgIC4uLmRlZmF1bHRPcHRpb25zLFxuICAgIC4uLnVzZXJPcHRpb25zLFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYm9vdHN0cmFwOiBib290c3RyYXAuYmluZChudWxsLCBvcHRpb25zKSxcbiAgICBtb3VudDogbW91bnQuYmluZChudWxsLCBvcHRpb25zKSxcbiAgICB1bm1vdW50OiB1bm1vdW50LmJpbmQobnVsbCwgb3B0aW9ucyksXG4gIH07XG59XG4iXX0= | ||
//# sourceMappingURL=index.js.map |
@@ -5,2 +5,2 @@ /** | ||
export * from './index'; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLXNwYS1hbmd1bGFyLWVsZW1lbnRzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL2xpYnMvc2luZ2xlLXNwYS1hbmd1bGFyL2VsZW1lbnRzL3NyYy8iLCJzb3VyY2VzIjpbInNpbmdsZS1zcGEtYW5ndWxhci1lbGVtZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ== | ||
//# sourceMappingURL=single-spa-angular-elements.js.map |
export {}; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vbGlicy9zaW5nbGUtc3BhLWFuZ3VsYXIvZWxlbWVudHMvc3JjLyIsInNvdXJjZXMiOlsidHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ0VsZW1lbnQgfSBmcm9tICdAYW5ndWxhci9lbGVtZW50cyc7XG5pbXBvcnQgeyBCYXNlU2luZ2xlU3BhQW5ndWxhck9wdGlvbnMgfSBmcm9tICdzaW5nbGUtc3BhLWFuZ3VsYXIvaW50ZXJuYWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBCb290c3RyYXBwZWRTaW5nbGVTcGFBbmd1bGFyRWxlbWVudHNPcHRpb25zIGV4dGVuZHMgQmFzZVNpbmdsZVNwYUFuZ3VsYXJPcHRpb25zIHtcbiAgbmdNb2R1bGVSZWY6IE5nTW9kdWxlUmVmPGFueT4gfCBudWxsO1xuICAvLyBUaGlzIHdpbGwgYmUgYW4gYWN0dWFsIGN1c3RvbSBlbGVtZW50LlxuICBlbGVtZW50OiBOZ0VsZW1lbnQgfCBudWxsO1xufVxuIl19 | ||
//# sourceMappingURL=types.js.map |
@@ -5,2 +5,2 @@ /** | ||
export * from './src/public_api'; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vbGlicy9zaW5nbGUtc3BhLWFuZ3VsYXIvIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILGNBQWMsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBwdWJsaWMgYXBpIGZvciBjb25zdW1lcnMgb2Ygc2luZ2xlLXNwYS1hbmd1bGFyXG4gKi9cbmV4cG9ydCAqIGZyb20gJy4vc3JjL3B1YmxpY19hcGknO1xuIl19 | ||
//# sourceMappingURL=index.js.map |
@@ -1,12 +0,1 @@ | ||
export function removeApplicationFromDOMIfIvyEnabled(options, props) { | ||
if (ivyEnabled()) { | ||
const domElementGetter = chooseDomElementGetter(options, props); | ||
const domElement = getContainerElement(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); | ||
} | ||
} | ||
export function getContainerElementAndSetTemplate(options, props) { | ||
@@ -56,16 +45,2 @@ const domElementGetter = chooseDomElementGetter(options, 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; | ||
} | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL2xpYnMvc2luZ2xlLXNwYS1hbmd1bGFyL2ludGVybmFscy9zcmMvIiwic291cmNlcyI6WyJkb20udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLG9DQUFvQyxDQUNsRCxPQUFVLEVBQ1YsS0FBVTtJQUVWLElBQUksVUFBVSxFQUFFLEVBQUU7UUFDaEIsTUFBTSxnQkFBZ0IsR0FBRyxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEUsTUFBTSxVQUFVLEdBQUcsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN6RCxvRkFBb0Y7UUFDcEYsd0NBQXdDO1FBQ3hDLDBGQUEwRjtRQUMxRixPQUFPLFVBQVUsQ0FBQyxVQUFVO1lBQUUsVUFBVSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDN0U7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLGlDQUFpQyxDQUMvQyxPQUFVLEVBQ1YsS0FBVTtJQUVWLE1BQU0sZ0JBQWdCLEdBQUcsc0JBQXNCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRWhFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtRQUNyQixNQUFNLEtBQUssQ0FDVCxxQ0FDRSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUN0QixrRUFBa0UsQ0FDbkUsQ0FBQztLQUNIO0lBRUQsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQy9ELGdCQUFnQixDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO0lBQzlDLE9BQU8sZ0JBQWdCLENBQUM7QUFDMUIsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsZ0JBQWtDO0lBQzdELE1BQU0sT0FBTyxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFFbkMsSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUNaLE1BQU0sS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7S0FDcEU7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsU0FBUyxzQkFBc0IsQ0FDN0IsSUFBTyxFQUNQLEtBQVU7O0lBRVYsS0FBSyxTQUFHLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxXQUFXLG1DQUFJLEtBQUssQ0FBQztJQUVwQyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7UUFDcEIsT0FBTyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO0tBQy9CO1NBQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEVBQUU7UUFDakMsT0FBTyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7S0FDL0I7U0FBTSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtRQUNoQyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztLQUM5QjtTQUFNO1FBQ0wsT0FBTyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDNUM7QUFDSCxDQUFDO0FBRUQsU0FBUyx1QkFBdUIsQ0FBQyxJQUFZO0lBQzNDLE9BQU8sU0FBUyxvQkFBb0I7UUFDbEMsTUFBTSxFQUFFLEdBQUcsMEJBQTBCLElBQUksRUFBRSxDQUFDO1FBQzVDLElBQUksVUFBVSxHQUF1QixRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWpFLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixVQUFVLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxVQUFVLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNuQixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUN2QztRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFVBQVU7SUFDakIsSUFBSTtRQUNGLDZEQUE2RDtRQUM3RCxnRkFBZ0Y7UUFDaEYsOEVBQThFO1FBQzlFLGlEQUFpRDtRQUNqRCwyQkFBMkI7UUFDM0IsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNqRCxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUM7S0FDdEI7SUFBQyxXQUFNO1FBQ04sT0FBTyxLQUFLLENBQUM7S0FDZDtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEb21FbGVtZW50R2V0dGVyLCBCYXNlU2luZ2xlU3BhQW5ndWxhck9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUFwcGxpY2F0aW9uRnJvbURPTUlmSXZ5RW5hYmxlZDxUIGV4dGVuZHMgQmFzZVNpbmdsZVNwYUFuZ3VsYXJPcHRpb25zPihcbiAgb3B0aW9uczogVCxcbiAgcHJvcHM6IGFueSxcbik6IHZvaWQge1xuICBpZiAoaXZ5RW5hYmxlZCgpKSB7XG4gICAgY29uc3QgZG9tRWxlbWVudEdldHRlciA9IGNob29zZURvbUVsZW1lbnRHZXR0ZXIob3B0aW9ucywgcHJvcHMpO1xuICAgIGNvbnN0IGRvbUVsZW1lbnQgPSBnZXRDb250YWluZXJFbGVtZW50KGRvbUVsZW1lbnRHZXR0ZXIpO1xuICAgIC8vIFZpZXcgRW5naW5lIHJlbW92ZXMgYWxsIG5vZGVzIGF1dG9tYXRpY2FsbHkgd2hlbiBjYWxsaW5nIGBOZ01vZHVsZVJlZi5kZXN0cm95KClgLFxuICAgIC8vIHdoaWNoIGNhbGxzIGBDb21wb25lbnRSZWYuZGVzdHJveSgpYC5cbiAgICAvLyBCYXNpY2FsbHkgdGhpcyB3aWxsIHJlbW92ZSBgYXBwLXJvb3RgIG9yIGFueSBvdGhlciBzZWxlY3RvciBmcm9tIHRoZSBjb250YWluZXIgZWxlbWVudC5cbiAgICB3aGlsZSAoZG9tRWxlbWVudC5maXJzdENoaWxkKSBkb21FbGVtZW50LnJlbW92ZUNoaWxkKGRvbUVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRhaW5lckVsZW1lbnRBbmRTZXRUZW1wbGF0ZTxUIGV4dGVuZHMgQmFzZVNpbmdsZVNwYUFuZ3VsYXJPcHRpb25zPihcbiAgb3B0aW9uczogVCxcbiAgcHJvcHM6IGFueSxcbik6IEhUTUxFbGVtZW50IHtcbiAgY29uc3QgZG9tRWxlbWVudEdldHRlciA9IGNob29zZURvbUVsZW1lbnRHZXR0ZXIob3B0aW9ucywgcHJvcHMpO1xuXG4gIGlmICghZG9tRWxlbWVudEdldHRlcikge1xuICAgIHRocm93IEVycm9yKFxuICAgICAgYENhbm5vdCBtb3VudCBhbmd1bGFyIGFwcGxpY2F0aW9uICcke1xuICAgICAgICBwcm9wcy5uYW1lIHx8IHByb3BzLmFwcE5hbWVcbiAgICAgIH0nIHdpdGhvdXQgYSBkb21FbGVtZW50R2V0dGVyIHByb3ZpZGVkIGVpdGhlciBhcyBhbiBvcHQgb3IgYSBwcm9wYCxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IGdldENvbnRhaW5lckVsZW1lbnQoZG9tRWxlbWVudEdldHRlcik7XG4gIGNvbnRhaW5lckVsZW1lbnQuaW5uZXJIVE1MID0gb3B0aW9ucy50ZW1wbGF0ZTtcbiAgcmV0dXJuIGNvbnRhaW5lckVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGdldENvbnRhaW5lckVsZW1lbnQoZG9tRWxlbWVudEdldHRlcjogRG9tRWxlbWVudEdldHRlcik6IG5ldmVyIHwgSFRNTEVsZW1lbnQge1xuICBjb25zdCBlbGVtZW50ID0gZG9tRWxlbWVudEdldHRlcigpO1xuXG4gIGlmICghZWxlbWVudCkge1xuICAgIHRocm93IEVycm9yKCdkb21FbGVtZW50R2V0dGVyIGRpZCBub3QgcmV0dXJuIGEgdmFsaWQgZG9tIGVsZW1lbnQnKTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxuXG5mdW5jdGlvbiBjaG9vc2VEb21FbGVtZW50R2V0dGVyPFQgZXh0ZW5kcyBCYXNlU2luZ2xlU3BhQW5ndWxhck9wdGlvbnM+KFxuICBvcHRzOiBULFxuICBwcm9wczogYW55LFxuKTogRG9tRWxlbWVudEdldHRlciB7XG4gIHByb3BzID0gcHJvcHM/LmN1c3RvbVByb3BzID8/IHByb3BzO1xuXG4gIGlmIChwcm9wcy5kb21FbGVtZW50KSB7XG4gICAgcmV0dXJuICgpID0+IHByb3BzLmRvbUVsZW1lbnQ7XG4gIH0gZWxzZSBpZiAocHJvcHMuZG9tRWxlbWVudEdldHRlcikge1xuICAgIHJldHVybiBwcm9wcy5kb21FbGVtZW50R2V0dGVyO1xuICB9IGVsc2UgaWYgKG9wdHMuZG9tRWxlbWVudEdldHRlcikge1xuICAgIHJldHVybiBvcHRzLmRvbUVsZW1lbnRHZXR0ZXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRlZmF1bHREb21FbGVtZW50R2V0dGVyKHByb3BzLm5hbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHREb21FbGVtZW50R2V0dGVyKG5hbWU6IHN0cmluZyk6IERvbUVsZW1lbnRHZXR0ZXIge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0RGVmYXVsdERvbUVsZW1lbnQoKSB7XG4gICAgY29uc3QgaWQgPSBgc2luZ2xlLXNwYS1hcHBsaWNhdGlvbjoke25hbWV9YDtcbiAgICBsZXQgZG9tRWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXG4gICAgaWYgKCFkb21FbGVtZW50KSB7XG4gICAgICBkb21FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBkb21FbGVtZW50LmlkID0gaWQ7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvbUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBkb21FbGVtZW50O1xuICB9O1xufVxuXG5mdW5jdGlvbiBpdnlFbmFibGVkKCk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIC8vIGDJtWl2eUVuYWJsZWRgIHZhcmlhYmxlIGlzIGV4cG9zZWQgc3RhcnRpbmcgZnJvbSB2ZXJzaW9uIDguXG4gICAgLy8gV2UgdXNlIGByZXF1aXJlYCBoZXJlIGV4Y2VwdCBvZiBhIHNpbmdsZSBgaW1wb3J0IHsgybVpdnlFbmFibGVkIH1gIGJlY2F1c2UgdGhlXG4gICAgLy8gZGV2ZWxvcGVyIGNhbiB1c2UgQW5ndWxhciB2ZXJzaW9uIHRoYXQgZG9lc24ndCBleHBvc2UgaXQgKGFsbCB2ZXJzaW9ucyA8OCkuXG4gICAgLy8gVGhlIGBjYXRjaGAgc3RhdGVtZW50IHdpbGwgaGFuZGxlIHRob3NlIGNhc2VzLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIGNvbnN0IHsgybVpdnlFbmFibGVkIH0gPSByZXF1aXJlKCdAYW5ndWxhci9jb3JlJyk7XG4gICAgcmV0dXJuICEhybVpdnlFbmFibGVkO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ== | ||
//# sourceMappingURL=dom.js.map |
export * from './types'; | ||
export { getContainerElementAndSetTemplate, removeApplicationFromDOMIfIvyEnabled } from './dom'; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vbGlicy9zaW5nbGUtc3BhLWFuZ3VsYXIvaW50ZXJuYWxzL3NyYy8iLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLE9BQU8sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0IHsgZ2V0Q29udGFpbmVyRWxlbWVudEFuZFNldFRlbXBsYXRlLCByZW1vdmVBcHBsaWNhdGlvbkZyb21ET01JZkl2eUVuYWJsZWQgfSBmcm9tICcuL2RvbSc7XG4iXX0= | ||
export { getContainerElementAndSetTemplate } from './dom'; | ||
//# sourceMappingURL=index.js.map |
@@ -5,2 +5,2 @@ /** | ||
export * from './index'; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLXNwYS1hbmd1bGFyLWludGVybmFscy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9saWJzL3NpbmdsZS1zcGEtYW5ndWxhci9pbnRlcm5hbHMvc3JjLyIsInNvdXJjZXMiOlsic2luZ2xlLXNwYS1hbmd1bGFyLWludGVybmFscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ== | ||
//# sourceMappingURL=single-spa-angular-internals.js.map |
export {}; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vbGlicy9zaW5nbGUtc3BhLWFuZ3VsYXIvaW50ZXJuYWxzL3NyYy8iLCJzb3VyY2VzIjpbInR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHBQcm9wcyB9IGZyb20gJ3NpbmdsZS1zcGEnO1xuaW1wb3J0IHsgTmdNb2R1bGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IHR5cGUgRG9tRWxlbWVudEdldHRlciA9ICgpID0+IEhUTUxFbGVtZW50O1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VTaW5nbGVTcGFBbmd1bGFyT3B0aW9ucyB7XG4gIHRlbXBsYXRlOiBzdHJpbmc7XG4gIGRvbUVsZW1lbnRHZXR0ZXI/KCk6IEhUTUxFbGVtZW50O1xuICBib290c3RyYXBGdW5jdGlvbihwcm9wczogQXBwUHJvcHMpOiBQcm9taXNlPE5nTW9kdWxlUmVmPGFueT4+O1xufVxuIl19 | ||
//# sourceMappingURL=types.js.map |
export { ParcelModule } from './parcel.module'; | ||
export { ParcelComponent } from './parcel.component'; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vbGlicy9zaW5nbGUtc3BhLWFuZ3VsYXIvcGFyY2VsL3NyYy8iLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBQYXJjZWxNb2R1bGUgfSBmcm9tICcuL3BhcmNlbC5tb2R1bGUnO1xuZXhwb3J0IHsgUGFyY2VsQ29tcG9uZW50IH0gZnJvbSAnLi9wYXJjZWwuY29tcG9uZW50JztcbiJdfQ== | ||
//# sourceMappingURL=index.js.map |
@@ -94,2 +94,3 @@ import { Component, ElementRef, Input, ChangeDetectionStrategy, } from '@angular/core'; | ||
]; | ||
/** @nocollapse */ | ||
ParcelComponent.ctorParameters = () => [ | ||
@@ -107,2 +108,2 @@ { type: ElementRef } | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyY2VsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9saWJzL3NpbmdsZS1zcGEtYW5ndWxhci9wYXJjZWwvc3JjLyIsInNvdXJjZXMiOlsicGFyY2VsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBSUwsdUJBQXVCLEdBQ3hCLE1BQU0sZUFBZSxDQUFDO0FBY3ZCLE1BQU0sT0FBTyxlQUFlO0lBZTFCLFlBQW9CLElBQTZCO1FBQTdCLFNBQUksR0FBSixJQUFJLENBQXlCO1FBZHhDLFdBQU0sR0FBd0IsSUFBSSxDQUFDO1FBQ25DLGdCQUFXLEdBQW1DLElBQUksQ0FBQztRQUNuRCxrQkFBYSxHQUF3QixJQUFJLENBQUM7UUFDMUMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUN6QixhQUFRLEdBQWdCLElBQUksQ0FBQztRQUM3QixnQkFBVyxHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXRELGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsWUFBTyxHQUF1QixJQUFJLENBQUM7UUFDbkMsV0FBTSxHQUFrQixJQUFJLENBQUM7UUFDN0IsU0FBSSxHQUF5QixJQUFJLENBQUM7SUFFVSxDQUFDO0lBRXJELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSx3QkFBZ0IsR0FBRyxFQUFFO1lBQ3BDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7Z0JBQzlDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQzdDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxZQUFZLHNCQUFlLEdBQUcsRUFBRTtZQUNuQyxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxFQUFFO2dCQUM3QixNQUFNLElBQUksS0FBSyxDQUNiLDZOQUE2TixDQUM5TixDQUFDO2FBQ0g7WUFFRCxJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRXJELElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUN6QztpQkFBTTtnQkFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ25EO1lBRUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFPLGtDQUN0QyxJQUFJLENBQUMsV0FBVyxLQUNuQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sSUFDeEIsQ0FBQztZQUVILElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxJQUFJLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDbkQ7WUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSwwQkFBaUIsR0FBRyxFQUFFO1lBQ3JDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxTQUFTLEVBQUU7Z0JBQ2pFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUM5QjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRTtZQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3BEO1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUVPLFlBQVksQ0FBQyxNQUFjLEVBQUUsSUFBK0I7UUFDbEUsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLE1BQU0sNEJBQW1CLEVBQUU7WUFDOUMsd0VBQXdFO1lBQ3hFLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUN6QyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1QsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLE1BQU0sNEJBQW1CLEVBQUU7Z0JBQy9DLHdEQUF3RDtnQkFDeEQsT0FBTzthQUNSO1lBRUQsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNoQixDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsQ0FBQyxLQUFZLEVBQUUsRUFBRTtZQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUVyQixJQUFJLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxPQUFPLEVBQUU7Z0JBQ2xCLEtBQUssQ0FBQyxPQUFPLEdBQUcsV0FBVyxNQUFNLDZCQUE2QixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDL0U7WUFFRCxJQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVcsS0FBSyxVQUFVLEVBQUU7Z0JBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDekI7aUJBQU07Z0JBQ0wsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxNQUFNLEtBQUssQ0FBQztnQkFDZCxDQUFDLENBQUMsQ0FBQzthQUNKO1lBRUQseUVBQXlFO1lBQ3pFLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzs7WUE1R0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxRQUFRO2dCQUNsQixRQUFRLEVBQUUsRUFBRTtnQkFDWixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTthQUNoRDs7O1lBbkJDLFVBQVU7OztxQkFxQlQsS0FBSzswQkFDTCxLQUFLOzRCQUNMLEtBQUs7dUJBQ0wsS0FBSzswQkFDTCxLQUFLO3VCQUNMLEtBQUs7MEJBQ0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBhcmNlbCwgUGFyY2VsQ29uZmlnLCBBcHBQcm9wcyB9IGZyb20gJ3NpbmdsZS1zcGEnO1xuXG5jb25zdCBlbnVtIEFjdGlvbiB7XG4gIE1vdW50ID0gJ21vdW50JyxcbiAgVXBkYXRlID0gJ3VwZGF0ZScsXG4gIFVubW91bnQgPSAndW5tb3VudCcsXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BhcmNlbCcsXG4gIHRlbXBsYXRlOiAnJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFBhcmNlbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBjb25maWc6IFBhcmNlbENvbmZpZyB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBtb3VudFBhcmNlbDogQXBwUHJvcHNbJ21vdW50UGFyY2VsJ10gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgb25QYXJjZWxNb3VudDogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIHdyYXBXaXRoID0gJ2Rpdic7XG4gIEBJbnB1dCgpIGN1c3RvbVByb3BzOiBvYmplY3QgPSB7fTtcbiAgQElucHV0KCkgYXBwZW5kVG86IE5vZGUgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgaGFuZGxlRXJyb3IgPSAoZXJyb3I6IEVycm9yKSA9PiBjb25zb2xlLmVycm9yKGVycm9yKTtcblxuICBwcml2YXRlIGhhc0Vycm9yID0gZmFsc2U7XG4gIHByaXZhdGUgdW5tb3VudGVkPzogYm9vbGVhbjtcbiAgcHJpdmF0ZSB3cmFwcGVyOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHBhcmNlbDogUGFyY2VsIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdGFzazogUHJvbWlzZTx2b2lkPiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaG9zdDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHt9XG5cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5zY2hlZHVsZVRhc2soQWN0aW9uLlVwZGF0ZSwgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMucGFyY2VsICE9PSBudWxsICYmIHRoaXMucGFyY2VsLnVwZGF0ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJjZWwudXBkYXRlKHRoaXMuY3VzdG9tUHJvcHMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zY2hlZHVsZVRhc2soQWN0aW9uLk1vdW50LCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5tb3VudFBhcmNlbCA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ3NpbmdsZS1zcGEtYW5ndWxhcjogdGhlIFttb3VudFBhcmNlbF0gYmluZGluZyBpcyByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSA8cGFyY2VsPiBjb21wb25lbnQuIFlvdSBjYW4gZWl0aGVyICgxKSBpbXBvcnQgbW91bnRSb290UGFyY2VsIGZyb20gc2luZ2xlLXNwYSBvciAoMikgdXNlIHRoZSBtb3VudFBhcmNlbCBwcm9wIHByb3ZpZGVkIHRvIHNpbmdsZS1zcGEgYXBwbGljYXRpb25zLicsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMud3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy53cmFwV2l0aCk7XG5cbiAgICAgIGlmICh0aGlzLmFwcGVuZFRvICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kVG8uYXBwZW5kQ2hpbGQodGhpcy53cmFwcGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMud3JhcHBlcik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucGFyY2VsID0gdGhpcy5tb3VudFBhcmNlbCh0aGlzLmNvbmZpZyEsIHtcbiAgICAgICAgLi4udGhpcy5jdXN0b21Qcm9wcyxcbiAgICAgICAgZG9tRWxlbWVudDogdGhpcy53cmFwcGVyLFxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLm9uUGFyY2VsTW91bnQgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5wYXJjZWwubW91bnRQcm9taXNlLnRoZW4odGhpcy5vblBhcmNlbE1vdW50KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy51bm1vdW50ZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0aGlzLnBhcmNlbC5tb3VudFByb21pc2U7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnNjaGVkdWxlVGFzayhBY3Rpb24uVW5tb3VudCwgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMucGFyY2VsICE9PSBudWxsICYmIHRoaXMucGFyY2VsLmdldFN0YXR1cygpID09PSAnTU9VTlRFRCcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyY2VsLnVubW91bnQoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh0aGlzLndyYXBwZXIgIT09IG51bGwpIHtcbiAgICAgIHRoaXMud3JhcHBlci5wYXJlbnROb2RlIS5yZW1vdmVDaGlsZCh0aGlzLndyYXBwZXIpO1xuICAgIH1cblxuICAgIHRoaXMudW5tb3VudGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc2NoZWR1bGVUYXNrKGFjdGlvbjogQWN0aW9uLCB0YXNrOiAoKSA9PiB2b2lkIHwgUHJvbWlzZTxhbnk+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGFzRXJyb3IgJiYgYWN0aW9uICE9PSBBY3Rpb24uVW5tb3VudCkge1xuICAgICAgLy8gSW4gYW4gZXJyb3Igc3RhdGUsIHdlIGRvbid0IGRvIGFueXRoaW5nIGFueW1vcmUgZXhjZXB0IGZvciB1bm1vdW50aW5nXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50YXNrID0gKHRoaXMudGFzayB8fCBQcm9taXNlLnJlc29sdmUoKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMudW5tb3VudGVkICYmIGFjdGlvbiAhPT0gQWN0aW9uLlVubW91bnQpIHtcbiAgICAgICAgICAvLyBOZXZlciBkbyBhbnl0aGluZyBvbmNlIHRoZSBhbmd1bGFyIGNvbXBvbmVudCB1bm1vdW50c1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0YXNrKCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy50YXNrID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIHRoaXMuaGFzRXJyb3IgPSB0cnVlO1xuXG4gICAgICAgIGlmIChlcnJvcj8ubWVzc2FnZSkge1xuICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPSBgRHVyaW5nICcke2FjdGlvbn0nLCBwYXJjZWwgdGhyZXcgYW4gZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhhbmRsZUVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vIG1vcmUgdGhpbmdzIHRvIGRvIHNob3VsZCBiZSBkb25lIC0tIHRoZSBwYXJjZWwgaXMgaW4gYW4gZXJyb3Igc3RhdGVcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9KTtcbiAgfVxufVxuIl19 | ||
//# sourceMappingURL=parcel.component.js.map |
@@ -11,2 +11,2 @@ import { NgModule } from '@angular/core'; | ||
]; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyY2VsLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9saWJzL3NpbmdsZS1zcGEtYW5ndWxhci9wYXJjZWwvc3JjLyIsInNvdXJjZXMiOlsicGFyY2VsLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQU1yRCxNQUFNLE9BQU8sWUFBWTs7O1lBSnhCLFFBQVEsU0FBQztnQkFDUixZQUFZLEVBQUUsQ0FBQyxlQUFlLENBQUM7Z0JBQy9CLE9BQU8sRUFBRSxDQUFDLGVBQWUsQ0FBQzthQUMzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFBhcmNlbENvbXBvbmVudCB9IGZyb20gJy4vcGFyY2VsLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1BhcmNlbENvbXBvbmVudF0sXG4gIGV4cG9ydHM6IFtQYXJjZWxDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBQYXJjZWxNb2R1bGUge31cbiJdfQ== | ||
//# sourceMappingURL=parcel.module.js.map |
@@ -5,2 +5,2 @@ /** | ||
export * from './index'; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLXNwYS1hbmd1bGFyLXBhcmNlbC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9saWJzL3NpbmdsZS1zcGEtYW5ndWxhci9wYXJjZWwvc3JjLyIsInNvdXJjZXMiOlsic2luZ2xlLXNwYS1hbmd1bGFyLXBhcmNlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ== | ||
//# sourceMappingURL=single-spa-angular-parcel.js.map |
@@ -6,2 +6,2 @@ /** | ||
export { SingleSpaPlatformLocation as ɵa } from './src/extra-providers'; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLXNwYS1hbmd1bGFyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uL2xpYnMvc2luZ2xlLXNwYS1hbmd1bGFyLyIsInNvdXJjZXMiOlsic2luZ2xlLXNwYS1hbmd1bGFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUM7QUFFeEIsT0FBTyxFQUFDLHlCQUF5QixJQUFJLEVBQUUsRUFBQyxNQUFNLHVCQUF1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcblxuZXhwb3J0IHtTaW5nbGVTcGFQbGF0Zm9ybUxvY2F0aW9uIGFzIMm1YX0gZnJvbSAnLi9zcmMvZXh0cmEtcHJvdmlkZXJzJzsiXX0= | ||
//# sourceMappingURL=single-spa-angular.js.map |
@@ -9,39 +9,4 @@ import { Injectable, Inject } from '@angular/core'; | ||
this.skipNextPopState = false; | ||
// The key here is an actual forked `Zone` of some specific application. | ||
// We will be able to find the specific zone when application gets destroyed | ||
// by application `name`. | ||
// The reason of that the `onPopState` method is invoked during `bootstrapModule` | ||
// and we can't know what application has invoked it. Why should we know the application | ||
// that has invoked `onPopState`? When application gets destroyed in a `sharing dependencies mode` | ||
// (when there is a single platform per all applications) we want to remove application | ||
// specific `popstate` listeners. E.g. if there are 2 applications: | ||
// * shop application adds `popstate` listener | ||
// * navbar application adds `popstate` listener | ||
// When shop application gets destroyed we want to remove only its `popstate` listener. | ||
this.zoneToOnPopStateListenersMap = new Map(); | ||
// This is used only to make `Zone.wrap` happy, since it requires 2 arguments | ||
// and the second argument is a unique string which `zone.js` uses for debugging purposes. | ||
// We might want to use the application name, but we're not able to get it when `onPopState` | ||
// method is called during module bootstrapping. | ||
this.source = 0; | ||
this.source = 'Window.addEventListener:popstate'; | ||
} | ||
destroyApplication(zoneIdentifier) { | ||
// TLDR: Angular adds `popstate` event listener and then doesn't remove it when application gets destroyed. | ||
// Basically, Angular has a potentional memory leak. The `ɵBrowserPlatformLocation` | ||
// has `onPopState` method which adds `popstate` event listener and forgets, see here: | ||
// https://github.com/angular/angular/blob/14be55c9facf3e47b8c97df4502dc3f0f897da03/packages/common/src/location/platform_location.ts#L126 | ||
const zone = [...this.zoneToOnPopStateListenersMap.keys()].find( | ||
// `getZoneWith` will return a zone which defines a `key` and in our case | ||
// we define a custom key in `single-spa-angular.ts` | ||
// via this line of code: | ||
// `_properties[zoneIdentifier] = true;` | ||
zone => zone.getZoneWith(zoneIdentifier) !== null); | ||
const onPopStateListeners = this.zoneToOnPopStateListenersMap.get(zone); | ||
if (Array.isArray(onPopStateListeners)) { | ||
for (const onPopStateListener of onPopStateListeners) { | ||
window.removeEventListener('popstate', onPopStateListener); | ||
} | ||
} | ||
this.zoneToOnPopStateListenersMap.delete(zone); | ||
} | ||
pushState(state, title, url) { | ||
@@ -65,3 +30,3 @@ this.skipNextPopState = true; | ||
// See https://github.com/single-spa/single-spa-angular/issues/94 for more details | ||
fn = zone.wrap(fn, `${this.source++}`); | ||
fn = zone.wrap(fn, this.source); | ||
const onPopStateListener = (event) => { | ||
@@ -80,14 +45,4 @@ // The `LocationChangeEvent` doesn't have the `singleSpa` property, since it's added | ||
}; | ||
this.storeOnPopStateListener(zone, onPopStateListener); | ||
super.onPopState(onPopStateListener); | ||
return super.onPopState(onPopStateListener); | ||
} | ||
storeOnPopStateListener(zone, onPopStateListener) { | ||
// All listeners should be stored inside an array because the `onPopState` can be called | ||
// multiple times thus we wanna reference all listeners to remove them further. | ||
const onPopStateListeners = this.zoneToOnPopStateListenersMap.get(zone) || []; | ||
onPopStateListeners.push(onPopStateListener); | ||
if (!this.zoneToOnPopStateListenersMap.has(zone)) { | ||
this.zoneToOnPopStateListenersMap.set(zone, onPopStateListeners); | ||
} | ||
} | ||
} | ||
@@ -106,3 +61,2 @@ SingleSpaPlatformLocation.decorators = [ | ||
provide: SingleSpaPlatformLocation, | ||
useClass: SingleSpaPlatformLocation, | ||
deps: [[new Inject(DOCUMENT)]], | ||
@@ -116,2 +70,2 @@ }, | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0cmEtcHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uL2xpYnMvc2luZ2xlLXNwYS1hbmd1bGFyLyIsInNvdXJjZXMiOlsic3JjL2V4dHJhLXByb3ZpZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFrQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixnQkFBZ0IsRUFFaEIsUUFBUSxHQUNULE1BQU0saUJBQWlCLENBQUM7QUFPekIsTUFBTSxPQUFPLHlCQUEwQixTQUFRLHdCQUF3QjtJQUR2RTs7UUFFRSxpRUFBaUU7UUFDakUsMENBQTBDO1FBQ2xDLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUVqQyx3RUFBd0U7UUFDeEUsNEVBQTRFO1FBQzVFLHlCQUF5QjtRQUN6QixpRkFBaUY7UUFDakYsd0ZBQXdGO1FBQ3hGLGtHQUFrRztRQUNsRyx1RkFBdUY7UUFDdkYsbUVBQW1FO1FBQ25FLDhDQUE4QztRQUM5QyxnREFBZ0Q7UUFDaEQsdUZBQXVGO1FBQy9FLGlDQUE0QixHQUFHLElBQUksR0FBRyxFQUE2QixDQUFDO1FBRTVFLDZFQUE2RTtRQUM3RSwwRkFBMEY7UUFDMUYsNEZBQTRGO1FBQzVGLGdEQUFnRDtRQUN4QyxXQUFNLEdBQUcsQ0FBQyxDQUFDO0lBaUZyQixDQUFDO0lBL0VDLGtCQUFrQixDQUFDLGNBQXNCO1FBQ3ZDLDJHQUEyRztRQUMzRyxtRkFBbUY7UUFDbkYsc0ZBQXNGO1FBQ3RGLDBJQUEwSTtRQUMxSSxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTtRQUM3RCx5RUFBeUU7UUFDekUsb0RBQW9EO1FBQ3BELHlCQUF5QjtRQUN6Qix3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxL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QUUseUJBQXlCO1NBQ3ZDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBTdGF0aWNQcm92aWRlciwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICDJtUJyb3dzZXJQbGF0Zm9ybUxvY2F0aW9uLFxuICBQbGF0Zm9ybUxvY2F0aW9uLFxuICBMb2NhdGlvbkNoYW5nZUV2ZW50LFxuICBET0NVTUVOVCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxudHlwZSBPblBvcFN0YXRlTGlzdGVuZXIgPSAoZXZlbnQ6IExvY2F0aW9uQ2hhbmdlRXZlbnQpID0+IHZvaWQ7XG5cbmRlY2xhcmUgY29uc3QgWm9uZTogYW55O1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2luZ2xlU3BhUGxhdGZvcm1Mb2NhdGlvbiBleHRlbmRzIMm1QnJvd3NlclBsYXRmb3JtTG9jYXRpb24ge1xuICAvLyBUaGlzIGlzIGEgc2ltcGxlIG1hcmtlciB0aGF0IGhlbHBzIHVzIHRvIGlnbm9yZSBQb3BTdGF0ZUV2ZW50c1xuICAvLyB0aGF0IHdhcyBub3QgZGlzcGF0Y2hlZCBieSB0aGUgYnJvd3Nlci5cbiAgcHJpdmF0ZSBza2lwTmV4dFBvcFN0YXRlID0gZmFsc2U7XG5cbiAgLy8gVGhlIGtleSBoZXJlIGlzIGFuIGFjdHVhbCBmb3JrZWQgYFpvbmVgIG9mIHNvbWUgc3BlY2lmaWMgYXBwbGljYXRpb24uXG4gIC8vIFdlIHdpbGwgYmUgYWJsZSB0byBmaW5kIHRoZSBzcGVjaWZpYyB6b25lIHdoZW4gYXBwbGljYXRpb24gZ2V0cyBkZXN0cm95ZWRcbiAgLy8gYnkgYXBwbGljYXRpb24gYG5hbWVgLlxuICAvLyBUaGUgcmVhc29uIG9mIHRoYXQgdGhlIGBvblBvcFN0YXRlYCBtZXRob2QgaXMgaW52b2tlZCBkdXJpbmcgYGJvb3RzdHJhcE1vZHVsZWBcbiAgLy8gYW5kIHdlIGNhbid0IGtub3cgd2hhdCBhcHBsaWNhdGlvbiBoYXMgaW52b2tlZCBpdC4gV2h5IHNob3VsZCB3ZSBrbm93IHRoZSBhcHBsaWNhdGlvblxuICAvLyB0aGF0IGhhcyBpbnZva2VkIGBvblBvcFN0YXRlYD8gV2hlbiBhcHBsaWNhdGlvbiBnZXRzIGRlc3Ryb3llZCBpbiBhIGBzaGFyaW5nIGRlcGVuZGVuY2llcyBtb2RlYFxuICAvLyAod2hlbiB0aGVyZSBpcyBhIHNpbmdsZSBwbGF0Zm9ybSBwZXIgYWxsIGFwcGxpY2F0aW9ucykgd2Ugd2FudCB0byByZW1vdmUgYXBwbGljYXRpb25cbiAgLy8gc3BlY2lmaWMgYHBvcHN0YXRlYCBsaXN0ZW5lcnMuIEUuZy4gaWYgdGhlcmUgYXJlIDIgYXBwbGljYXRpb25zOlxuICAvLyAqIHNob3AgYXBwbGljYXRpb24gYWRkcyBgcG9wc3RhdGVgIGxpc3RlbmVyXG4gIC8vICogbmF2YmFyIGFwcGxpY2F0aW9uIGFkZHMgYHBvcHN0YXRlYCBsaXN0ZW5lclxuICAvLyBXaGVuIHNob3AgYXBwbGljYXRpb24gZ2V0cyBkZXN0cm95ZWQgd2Ugd2FudCB0byByZW1vdmUgb25seSBpdHMgYHBvcHN0YXRlYCBsaXN0ZW5lci5cbiAgcHJpdmF0ZSB6b25lVG9PblBvcFN0YXRlTGlzdGVuZXJzTWFwID0gbmV3IE1hcDxhbnksIE9uUG9wU3RhdGVMaXN0ZW5lcltdPigpO1xuXG4gIC8vIFRoaXMgaXMgdXNlZCBvbmx5IHRvIG1ha2UgYFpvbmUud3JhcGAgaGFwcHksIHNpbmNlIGl0IHJlcXVpcmVzIDIgYXJndW1lbnRzXG4gIC8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGEgdW5pcXVlIHN0cmluZyB3aGljaCBgem9uZS5qc2AgdXNlcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLlxuICAvLyBXZSBtaWdodCB3YW50IHRvIHVzZSB0aGUgYXBwbGljYXRpb24gbmFtZSwgYnV0IHdlJ3JlIG5vdCBhYmxlIHRvIGdldCBpdCB3aGVuIGBvblBvcFN0YXRlYFxuICAvLyBtZXRob2QgaXMgY2FsbGVkIGR1cmluZyBtb2R1bGUgYm9vdHN0cmFwcGluZy5cbiAgcHJpdmF0ZSBzb3VyY2UgPSAwO1xuXG4gIGRlc3Ryb3lBcHBsaWNhdGlvbih6b25lSWRlbnRpZmllcjogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gVExEUjogQW5ndWxhciBhZGRzIGBwb3BzdGF0ZWAgZXZlbnQgbGlzdGVuZXIgYW5kIHRoZW4gZG9lc24ndCByZW1vdmUgaXQgd2hlbiBhcHBsaWNhdGlvbiBnZXRzIGRlc3Ryb3llZC5cbiAgICAvLyBCYXNpY2FsbHksIEFuZ3VsYXIgaGFzIGEgcG90ZW50aW9uYWwgbWVtb3J5IGxlYWsuIFRoZSBgybVCcm93c2VyUGxhdGZvcm1Mb2NhdGlvbmBcbiAgICAvLyBoYXMgYG9uUG9wU3RhdGVgIG1ldGhvZCB3aGljaCBhZGRzIGBwb3BzdGF0ZWAgZXZlbnQgbGlzdGVuZXIgYW5kIGZvcmdldHMsIHNlZSBoZXJlOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi8xNGJlNTVjOWZhY2YzZTQ3YjhjOTdkZjQ1MDJkYzNmMGY4OTdkYTAzL3BhY2thZ2VzL2NvbW1vbi9zcmMvbG9jYXRpb24vcGxhdGZvcm1fbG9jYXRpb24udHMjTDEyNlxuICAgIGNvbnN0IHpvbmUgPSBbLi4udGhpcy56b25lVG9PblBvcFN0YXRlTGlzdGVuZXJzTWFwLmtleXMoKV0uZmluZChcbiAgICAgIC8vIGBnZXRab25lV2l0aGAgd2lsbCByZXR1cm4gYSB6b25lIHdoaWNoIGRlZmluZXMgYSBga2V5YCBhbmQgaW4gb3VyIGNhc2VcbiAgICAgIC8vIHdlIGRlZmluZSBhIGN1c3RvbSBrZXkgaW4gYHNpbmdsZS1zcGEtYW5ndWxhci50c2BcbiAgICAgIC8vIHZpYSB0aGlzIGxpbmUgb2YgY29kZTpcbiAgICAgIC8vIGBfcHJvcGVydGllc1t6b25lSWRlbnRpZmllcl0gPSB0cnVlO2BcbiAgICAgIHpvbmUgPT4gem9uZS5nZXRab25lV2l0aCh6b25lSWRlbnRpZmllcikgIT09IG51bGwsXG4gICAgKTtcblxuICAgIGNvbnN0IG9uUG9wU3RhdGVMaXN0ZW5lcnM6XG4gICAgICB8IE9uUG9wU3RhdGVMaXN0ZW5lcltdXG4gICAgICB8IHVuZGVmaW5lZCA9IHRoaXMuem9uZVRvT25Qb3BTdGF0ZUxpc3RlbmVyc01hcC5nZXQoem9uZSk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvblBvcFN0YXRlTGlzdGVuZXJzKSkge1xuICAgICAgZm9yIChjb25zdCBvblBvcFN0YXRlTGlzdGVuZXIgb2Ygb25Qb3BTdGF0ZUxpc3RlbmVycykge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCBvblBvcFN0YXRlTGlzdGVuZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuem9uZVRvT25Qb3BTdGF0ZUxpc3RlbmVyc01hcC5kZWxldGUoem9uZSk7XG4gIH1cblxuICBwdXNoU3RhdGUoc3RhdGU6IGFueSwgdGl0bGU6IHN0cmluZywgdXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNraXBOZXh0UG9wU3RhdGUgPSB0cnVlO1xuICAgIHN1cGVyLnB1c2hTdGF0ZShzdGF0ZSwgdGl0bGUsIHVybCk7XG4gIH1cblxuICByZXBsYWNlU3RhdGUoc3RhdGU6IGFueSwgdGl0bGU6IHN0cmluZywgdXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNraXBOZXh0UG9wU3RhdGUgPSB0cnVlO1xuICAgIHN1cGVyLnJlcGxhY2VTdGF0ZShzdGF0ZSwgdGl0bGUsIHVybCk7XG4gIH1cblxuICBvblBvcFN0YXRlKGZuOiBPblBvcFN0YXRlTGlzdGVuZXIpOiB2b2lkIHtcbiAgICAvLyBgWm9uZS5jdXJyZW50YCB3aWxsIHJlZmVyZW5jZSB0aGUgem9uZSB0aGF0IHNlcnZlcyBhcyBhbiBleGVjdXRpb24gY29udGV4dFxuICAgIC8vIHRvIHNvbWUgc3BlY2lmaWMgYXBwbGljYXRpb24sIGVzcGVjaWFsbHkgd2hlbiBgb25Qb3BTdGF0ZWAgaXMgY2FsbGVkLlxuICAgIGNvbnN0IHpvbmUgPSBab25lLmN1cnJlbnQ7XG5cbiAgICAvLyBXcmFwIGFueSBldmVudCBsaXN0ZW5lciBpbnRvIHpvbmUgdGhhdCBpcyBzcGVjaWZpYyB0byBzb21lIGFwcGxpY2F0aW9uLlxuICAgIC8vIFRoZSBtYWluIGlzc3VlIGlzIGBiYWNrL2ZvcndhcmRgIGJ1dHRvbnMgb2YgYnJvd3NlcnMsIGJlY2F1c2UgdGhleSBpbnZva2VcbiAgICAvLyBgaGlzdG9yeS5iYWNrfGZvcndhcmRgIHdoaWNoIGRpc3BhdGNoIGBwb3BzdGF0ZWAgZXZlbnQuIFNpbmNlIGBzaW5nbGUtc3BhYFxuICAgIC8vIG92ZXJyaWRlcyBgaGlzdG9yeS5yZXBsYWNlU3RhdGVgIEFuZ3VsYXIncyB6b25lIGNhbm5vdCBpbnRlcmNlcHQgdGhpcyBldmVudC5cbiAgICAvLyBPbmx5IHRoZSByb290IHpvbmUgaXMgYWJsZSB0byBpbnRlcmNlcHQgYWxsIGV2ZW50cy5cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3NpbmdsZS1zcGEvc2luZ2xlLXNwYS1hbmd1bGFyL2lzc3Vlcy85NCBmb3IgbW9yZSBkZXRhaWxzXG4gICAgZm4gPSB6b25lLndyYXAoZm4sIGAke3RoaXMuc291cmNlKyt9YCk7XG5cbiAgICBjb25zdCBvblBvcFN0YXRlTGlzdGVuZXIgPSAoZXZlbnQ6IExvY2F0aW9uQ2hhbmdlRXZlbnQpID0+IHtcbiAgICAgIC8vIFRoZSBgTG9jYXRpb25DaGFuZ2VFdmVudGAgZG9lc24ndCBoYXZlIHRoZSBgc2luZ2xlU3BhYCBwcm9wZXJ0eSwgc2luY2UgaXQncyBhZGRlZFxuICAgICAgLy8gYnkgYHNpbmdsZS1zcGFgIHN0YXJ0aW5nIGZyb20gYDUuNGAgdmVyc2lvbi4gV2UgbmVlZCB0aGlzIGNoZWNrIGJlY2F1c2Ugd2Ugd2FudFxuICAgICAgLy8gdG8gc2tpcCBcInVubmF0dXJhbFwiIFBvcFN0YXRlRXZlbnRzLCB0aGUgb25lIGNhdXNlZCBieSBgc2luZ2xlLXNwYWAuXG4gICAgICBjb25zdCBwb3BTdGF0ZUV2ZW50V2FzRGlzcGF0Y2hlZEJ5U2luZ2xlU3BhID0gISEoKGV2ZW50IGFzIHVua25vd24pIGFzIHsgc2luZ2xlU3BhOiBib29sZWFuIH0pXG4gICAgICAgIC5zaW5nbGVTcGE7XG5cbiAgICAgIGlmICh0aGlzLnNraXBOZXh0UG9wU3RhdGUgJiYgcG9wU3RhdGVFdmVudFdhc0Rpc3BhdGNoZWRCeVNpbmdsZVNwYSkge1xuICAgICAgICB0aGlzLnNraXBOZXh0UG9wU3RhdGUgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZuKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5zdG9yZU9uUG9wU3RhdGVMaXN0ZW5lcih6b25lLCBvblBvcFN0YXRlTGlzdGVuZXIpO1xuICAgIHN1cGVyLm9uUG9wU3RhdGUob25Qb3BTdGF0ZUxpc3RlbmVyKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcmVPblBvcFN0YXRlTGlzdGVuZXIoem9uZTogYW55LCBvblBvcFN0YXRlTGlzdGVuZXI6IE9uUG9wU3RhdGVMaXN0ZW5lcik6IHZvaWQge1xuICAgIC8vIEFsbCBsaXN0ZW5lcnMgc2hvdWxkIGJlIHN0b3JlZCBpbnNpZGUgYW4gYXJyYXkgYmVjYXVzZSB0aGUgYG9uUG9wU3RhdGVgIGNhbiBiZSBjYWxsZWRcbiAgICAvLyBtdWx0aXBsZSB0aW1lcyB0aHVzIHdlIHdhbm5hIHJlZmVyZW5jZSBhbGwgbGlzdGVuZXJzIHRvIHJlbW92ZSB0aGVtIGZ1cnRoZXIuXG4gICAgY29uc3Qgb25Qb3BTdGF0ZUxpc3RlbmVyczogT25Qb3BTdGF0ZUxpc3RlbmVyW10gPVxuICAgICAgdGhpcy56b25lVG9PblBvcFN0YXRlTGlzdGVuZXJzTWFwLmdldCh6b25lKSB8fCBbXTtcblxuICAgIG9uUG9wU3RhdGVMaXN0ZW5lcnMucHVzaChvblBvcFN0YXRlTGlzdGVuZXIpO1xuXG4gICAgaWYgKCF0aGlzLnpvbmVUb09uUG9wU3RhdGVMaXN0ZW5lcnNNYXAuaGFzKHpvbmUpKSB7XG4gICAgICB0aGlzLnpvbmVUb09uUG9wU3RhdGVMaXN0ZW5lcnNNYXAuc2V0KHpvbmUsIG9uUG9wU3RhdGVMaXN0ZW5lcnMpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoZSBgUGxhdGZvcm1Mb2NhdGlvbmAgY2xhc3MgaXMgYW4gXCJpbmplY3RlZVwiIG9mIHRoZSBgUGF0aExvY2F0aW9uU3RyYXRlZ3lgLFxuICogd2hpY2ggY3JlYXRlcyBgU3ViamVjdGAgaW50ZXJuYWxseSBmb3IgbGlzdGVuaW5nIG9uIGBwb3BzdGF0ZWAgZXZlbnRzLiBXZSB3YW50XG4gKiB0byBwcm92aWRlIHRoaXMgY2xhc3MgaW4gdGhlIG1vc3QgdG9wIGluamVjdG9yIHRoYXQncyB1c2VkIGR1cmluZyBib290c3RyYXBwaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2luZ2xlU3BhRXh0cmFQcm92aWRlcnMoKTogU3RhdGljUHJvdmlkZXJbXSB7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogU2luZ2xlU3BhUGxhdGZvcm1Mb2NhdGlvbixcbiAgICAgIHVzZUNsYXNzOiBTaW5nbGVTcGFQbGF0Zm9ybUxvY2F0aW9uLFxuICAgICAgZGVwczogW1tuZXcgSW5qZWN0KERPQ1VNRU5UKV1dLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogUGxhdGZvcm1Mb2NhdGlvbixcbiAgICAgIHVzZUV4aXN0aW5nOiBTaW5nbGVTcGFQbGF0Zm9ybUxvY2F0aW9uLFxuICAgIH0sXG4gIF07XG59XG4iXX0= | ||
//# sourceMappingURL=extra-providers.js.map |
export { singleSpaAngular } from './single-spa-angular'; | ||
export { getSingleSpaExtraProviders } from './extra-providers'; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi9saWJzL3NpbmdsZS1zcGEtYW5ndWxhci8iLCJzb3VyY2VzIjpbInNyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgc2luZ2xlU3BhQW5ndWxhciB9IGZyb20gJy4vc2luZ2xlLXNwYS1hbmd1bGFyJztcbmV4cG9ydCB7IGdldFNpbmdsZVNwYUV4dHJhUHJvdmlkZXJzIH0gZnJvbSAnLi9leHRyYS1wcm92aWRlcnMnO1xuIl19 | ||
//# sourceMappingURL=public_api.js.map |
import { __awaiter } from "tslib"; | ||
import { getContainerElementAndSetTemplate, removeApplicationFromDOMIfIvyEnabled, } from 'single-spa-angular/internals'; | ||
import { getContainerElementAndSetTemplate } from 'single-spa-angular/internals'; | ||
import { SingleSpaPlatformLocation } from './extra-providers'; | ||
@@ -12,3 +12,2 @@ const defaultOptions = { | ||
domElementGetter: undefined, | ||
AnimationEngine: undefined, | ||
updateFunction: () => Promise.resolve(), | ||
@@ -101,7 +100,2 @@ bootstrappedModule: null, | ||
skipLocationChangeOnNonImperativeRoutingTriggers(module, options); | ||
// Cleanup resources, especially remove event listeners thus they will not be added | ||
// twice when application gets bootstrapped the second time. | ||
module.onDestroy(() => { | ||
singleSpaPlatformLocation.destroyApplication(zoneIdentifier); | ||
}); | ||
} | ||
@@ -116,45 +110,9 @@ bootstrappedOptions.bootstrappedNgZone = ngZone; | ||
} | ||
// eslint-disable-next-line @typescript-eslint/no-unused-vars | ||
function unmount(options, props) { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
if (options.Router) { | ||
// Workaround for https://github.com/angular/angular/issues/19079 | ||
const router = options.bootstrappedModule.injector.get(options.Router); | ||
router.dispose(); | ||
} | ||
function unmount(options) { | ||
return Promise.resolve().then(() => { | ||
if (options.routingEventListener) { | ||
window.removeEventListener('single-spa:routing-event', options.routingEventListener); | ||
} | ||
if (options.AnimationEngine) { | ||
/* | ||
The BrowserAnimationsModule does not clean up after itself :'(. When you unmount/destroy the main module, the | ||
BrowserAnimationsModule uses an AnimationRenderer thing to remove dom elements from the page. But the AnimationRenderer | ||
defers the actual work to the TransitionAnimationEngine to do this, and the TransitionAnimationEngine doesn't actually | ||
remove the dom node, but just calls "markElementAsRemoved()". | ||
See https://github.com/angular/angular/blob/db62ccf9eb46ee89366ade586365ea027bb93eb1/packages/animations/browser/src/render/transition_animation_engine.ts#L717 | ||
What markAsRemovedDoes is put it into an array called "collectedLeaveElements", which is all the elements that should be removed | ||
after the DOM has had a chance to do any animations. | ||
See https://github.com/angular/angular/blob/master/packages/animations/browser/src/render/transition_animation_engine.ts#L525 | ||
The actual dom nodes aren't removed until the TransitionAnimationEngine "flushes". | ||
See https://github.com/angular/angular/blob/db62ccf9eb46ee89366ade586365ea027bb93eb1/packages/animations/browser/src/render/transition_animation_engine.ts#L851 | ||
Unfortunately, though, that "flush" will never happen, since the entire module is being destroyed and there will be no more flushes. | ||
So what we do in this code is force one more flush of the animations after the module is destroyed. | ||
Ideally, we would do this by getting the TransitionAnimationEngine directly and flushing it. Unfortunately, though, it's private class | ||
that cannot be imported and is not provided to the dependency injector. So, instead, we get its wrapper class, AnimationEngine, and then | ||
access its private variable reference to the TransitionAnimationEngine so that we can call flush. | ||
*/ | ||
const animationEngine = options.bootstrappedModule.injector.get(options.AnimationEngine); | ||
animationEngine._transitionEngine.flush(); | ||
} | ||
options.bootstrappedModule.destroy(); | ||
options.bootstrappedModule = null; | ||
// TODO: this is not an issue anymore and should be removed in the future. | ||
removeApplicationFromDOMIfIvyEnabled(options, props); | ||
}); | ||
@@ -189,2 +147,2 @@ } | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLXNwYS1hbmd1bGFyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uL2xpYnMvc2luZ2xlLXNwYS1hbmd1bGFyLyIsInNvdXJjZXMiOlsic3JjL3NpbmdsZS1zcGEtYW5ndWxhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBR0EsT0FBTyxFQUNMLGlDQUFpQyxFQUNqQyxvQ0FBb0MsR0FDckMsTUFBTSw4QkFBOEIsQ0FBQztBQUV0QyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUc5RCxNQUFNLGNBQWMsR0FBRztJQUNyQiw2REFBNkQ7SUFDN0QsTUFBTSxFQUFFLElBQUs7SUFDYixpQkFBaUIsRUFBRSxJQUFLO0lBQ3hCLFFBQVEsRUFBRSxJQUFLO0lBQ2YsbUJBQW1CO0lBQ25CLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLGdCQUFnQixFQUFFLFNBQVM7SUFDM0IsZUFBZSxFQUFFLFNBQVM7SUFDMUIsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7SUFDdkMsa0JBQWtCLEVBQUUsSUFBSTtDQUN6QixDQUFDO0FBRUYsTUFBTSxVQUFVLGdCQUFnQixDQUFJLFdBQXVDO0lBQ3pFLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxFQUFFO1FBQ25DLE1BQU0sS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7S0FDbkU7SUFFRCxNQUFNLE9BQU8sbUNBQ1IsY0FBYyxHQUNkLFdBQVcsQ0FDZixDQUFDO0lBRUYsSUFBSSxPQUFPLE9BQU8sQ0FBQyxpQkFBaUIsS0FBSyxVQUFVLEVBQUU7UUFDbkQsTUFBTSxLQUFLLENBQUMsZ0VBQWdFLENBQUMsQ0FBQztLQUMvRTtJQUVELElBQUksT0FBTyxPQUFPLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRTtRQUN4QyxNQUFNLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO0tBQzFFO0lBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7UUFDbkIs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QUFHLElBQUksQ0FBQztnQkFDbkQsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7YUFDN0M7U0FDRjtJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDcEIsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlUmVmLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTGlmZUN5Y2xlcyB9IGZyb20gJ3NpbmdsZS1zcGEnO1xuaW1wb3J0IHtcbiAgZ2V0Q29udGFpbmVyRWxlbWVudEFuZFNldFRlbXBsYXRlLFxuICByZW1vdmVBcHBsaWNhdGlvbkZyb21ET01JZkl2eUVuYWJsZWQsXG59IGZyb20gJ3NpbmdsZS1zcGEtYW5ndWxhci9pbnRlcm5hbHMnO1xuXG5pbXBvcnQgeyBTaW5nbGVTcGFQbGF0Zm9ybUxvY2F0aW9uIH0gZnJvbSAnLi9leHRyYS1wcm92aWRlcnMnO1xuaW1wb3J0IHsgU2luZ2xlU3BhQW5ndWxhck9wdGlvbnMsIEJvb3RzdHJhcHBlZFNpbmdsZVNwYUFuZ3VsYXJPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAvLyBSZXF1aXJlZCBvcHRpb25zIHRoYXQgd2lsbCBiZSBzZXQgYnkgdGhlIGxpYnJhcnkgY29uc3VtZXIuXG4gIE5nWm9uZTogbnVsbCEsXG4gIGJvb3RzdHJhcEZ1bmN0aW9uOiBudWxsISxcbiAgdGVtcGxhdGU6IG51bGwhLFxuICAvLyBPcHRpb25hbCBvcHRpb25zXG4gIFJvdXRlcjogdW5kZWZpbmVkLFxuICBkb21FbGVtZW50R2V0dGVyOiB1bmRlZmluZWQsIC8vIG9ubHkgb3B0aW9uYWwgaWYgeW91IHByb3ZpZGUgYSBkb21FbGVtZW50R2V0dGVyIGFzIGEgY3VzdG9tIHByb3BcbiAgQW5pbWF0aW9uRW5naW5lOiB1bmRlZmluZWQsXG4gIHVwZGF0ZUZ1bmN0aW9uOiAoKSA9PiBQcm9taXNlLnJlc29sdmUoKSxcbiAgYm9vdHN0cmFwcGVkTW9kdWxlOiBudWxsLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNpbmdsZVNwYUFuZ3VsYXI8VD4odXNlck9wdGlvbnM6IFNpbmdsZVNwYUFuZ3VsYXJPcHRpb25zPFQ+KTogTGlmZUN5Y2xlczxUPiB7XG4gIGlmICh0eXBlb2YgdXNlck9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgRXJyb3IoJ3NpbmdsZS1zcGEtYW5ndWxhciByZXF1aXJlcyBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0Jyk7XG4gIH1cblxuICBjb25zdCBvcHRpb25zOiBTaW5nbGVTcGFBbmd1bGFyT3B0aW9ucyA9IHtcbiAgICAuLi5kZWZhdWx0T3B0aW9ucyxcbiAgICAuLi51c2VyT3B0aW9ucyxcbiAgfTtcblxuICBpZiAodHlwZW9mIG9wdGlvbnMuYm9vdHN0cmFwRnVuY3Rpb24gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBFcnJvcignc2luZ2xlLXNwYS1hbmd1bGFyIG11c3QgYmUgcGFzc2VkIGFuIG9wdGlvbnMuYm9vdHN0cmFwRnVuY3Rpb24nKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy50ZW1wbGF0ZSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBFcnJvcignc2luZ2xlLXNwYS1hbmd1bGFyIG11c3QgYmUgcGFzc2VkIG9wdGlvbnMudGVtcGxhdGUgc3RyaW5nJyk7XG4gIH1cblxuICBpZiAoIW9wdGlvbnMuTmdab25lKSB7XG4gICAgdGhyb3cgRXJyb3IoYHNpbmdsZS1zcGEtYW5ndWxhciBtdXN0IGJlIHBhc3NlZCB0aGUgTmdab25lIG9wdGlvbmApO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuUm91dGVyICYmICFvcHRpb25zLk5hdmlnYXRpb25TdGFydCkge1xuICAgIC8vIFdlIGNhbGwgYGNvbnNvbGUud2FybmAgZXhjZXB0IG9mIHRocm93aW5nIGBuZXcgRXJyb3IoKWAgc2luY2UgdGhpcyB3aWxsIG5vdFxuICAgIC8vIGJlIGEgYnJlYWtpbmcgY2hhbmdlLlxuICAgIGNvbnNvbGUud2Fybihgc2luZ2xlLXNwYS1hbmd1bGFyIG11c3QgYmUgcGFzc2VkIHRoZSBOYXZpZ2F0aW9uU3RhcnQgb3B0aW9uYCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGJvb3RzdHJhcDogYm9vdHN0cmFwLmJpbmQobnVsbCwgb3B0aW9ucyBhcyBCb290c3RyYXBwZWRTaW5nbGVTcGFBbmd1bGFyT3B0aW9ucyksXG4gICAgbW91bnQ6IG1vdW50LmJpbmQobnVsbCwgb3B0aW9ucyksXG4gICAgdW5tb3VudDogdW5tb3VudC5iaW5kKG51bGwsIG9wdGlvbnMgYXMgQm9vdHN0cmFwcGVkU2luZ2xlU3BhQW5ndWxhck9wdGlvbnMpLFxuICAgIHVwZGF0ZTogb3B0aW9ucy51cGRhdGVGdW5jdGlvbixcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYm9vdHN0cmFwKG9wdGlvbnM6IEJvb3RzdHJhcHBlZFNpbmdsZVNwYUFuZ3VsYXJPcHRpb25zLCBwcm9wczogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIEFuZ3VsYXIgcHJvdmlkZXMgYW4gb3Bwb3J0dW5pdHkgdG8gZGV2ZWxvcCBgem9uZS1sZXNzYCBhcHBsaWNhdGlvbiwgd2hlcmUgZGV2ZWxvcGVyc1xuICAvLyBoYXZlIHRvIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiBtYW51YWxseS5cbiAgLy8gU2VlIGh0dHBzOi8vYW5ndWxhci5pby9ndWlkZS96b25lI25vb3B6b25lXG4gIGlmIChvcHRpb25zLk5nWm9uZSA9PT0gJ25vb3AnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gSW4gb3JkZXIgZm9yIG11bHRpcGxlIEFuZ3VsYXIgYXBwcyB0byB3b3JrIGNvbmN1cnJlbnRseSBvbiBhIHBhZ2UsIHRoZXkgZWFjaCBuZWVkIGEgdW5pcXVlIGlkZW50aWZpZXIuXG4gIG9wdGlvbnMuem9uZUlkZW50aWZpZXIgPSBgc2luZ2xlLXNwYS1hbmd1bGFyOiR7cHJvcHMubmFtZSB8fCBwcm9wcy5hcHBOYW1lfWA7XG5cbiAgLy8gVGhpcyBpcyBhIGhhY2ssIHNpbmNlIE5nWm9uZSBkb2Vzbid0IGFsbG93IHlvdSB0byBjb25maWd1cmUgdGhlIHByb3BlcnR5IHRoYXQgaWRlbnRpZmllcyB5b3VyIHpvbmUuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vUGxhY2VNZS1TQVMvc2luZ2xlLXNwYS1hbmd1bGFyLWNsaS9pc3N1ZXMvMzMsXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5nbGUtc3BhL3NpbmdsZS1zcGEtYW5ndWxhci9pc3N1ZXMvNDcsXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi9hMTRkYzJkN2E0ODIxYTE5ZjIwYTk1NDcwNTNhNTczNDc5OGY1NDFlL3BhY2thZ2VzL2NvcmUvc3JjL3pvbmUvbmdfem9uZS50cyNMMTQ0LFxuICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iL2ExNGRjMmQ3YTQ4MjFhMTlmMjBhOTU0NzA1M2E1NzM0Nzk4ZjU0MWUvcGFja2FnZXMvY29yZS9zcmMvem9uZS9uZ196b25lLnRzI0wyNTdcbiAgb3B0aW9ucy5OZ1pvbmUuaXNJbkFuZ3VsYXJab25lID0gKCkgPT4ge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gd2luZG93LlpvbmUuY3VycmVudC5fcHJvcGVydGllc1tvcHRpb25zLnpvbmVJZGVudGlmaWVyXSA9PT0gdHJ1ZTtcbiAgfTtcblxuICBvcHRpb25zLnJvdXRpbmdFdmVudExpc3RlbmVyID0gKCkgPT4ge1xuICAgIG9wdGlvbnMuYm9vdHN0cmFwcGVkTmdab25lIS5ydW4oKCkgPT4ge1xuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5nbGUtc3BhL3NpbmdsZS1zcGEtYW5ndWxhci9pc3N1ZXMvODZcbiAgICAgIC8vIFpvbmUgaXMgdW5hd2FyZSBvZiB0aGUgc2luZ2xlLXNwYSBuYXZpZ2F0aW9uIGNoYW5nZSBhbmQgc28gQW5ndWxhciBjaGFuZ2UgZGV0ZWN0aW9uIGRvZXNuJ3Qgd29ya1xuICAgICAgLy8gdW5sZXNzIHdlIHRlbGwgWm9uZSB0aGF0IHNvbWV0aGluZyBoYXBwZW5lZFxuICAgIH0pO1xuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBtb3VudChvcHRpb25zOiBTaW5nbGVTcGFBbmd1bGFyT3B0aW9ucywgcHJvcHM6IGFueSk6IFByb21pc2U8TmdNb2R1bGVSZWY8YW55Pj4ge1xuICBnZXRDb250YWluZXJFbGVtZW50QW5kU2V0VGVtcGxhdGUob3B0aW9ucywgcHJvcHMpO1xuXG4gIGNvbnN0IGJvb3RzdHJhcFByb21pc2UgPSBvcHRpb25zLmJvb3RzdHJhcEZ1bmN0aW9uKHByb3BzKTtcblxuICBpZiAoIShib290c3RyYXBQcm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZSkpIHtcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIGBzaW5nbGUtc3BhLWFuZ3VsYXI6IHRoZSBvcHRpb25zLmJvb3RzdHJhcEZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgcHJvbWlzZSwgYnV0IGluc3RlYWQgcmV0dXJuZWQgYSAnJHt0eXBlb2YgYm9vdHN0cmFwUHJvbWlzZX0nIHRoYXQgaXMgbm90IGEgUHJvbWlzZWAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IG1vZHVsZTogTmdNb2R1bGVSZWY8YW55PiA9IGF3YWl0IGJvb3RzdHJhcFByb21pc2U7XG5cbiAgaWYgKCFtb2R1bGUgfHwgdHlwZW9mIG1vZHVsZS5kZXN0cm95ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICBgc2luZ2xlLXNwYS1hbmd1bGFyOiB0aGUgb3B0aW9ucy5ib290c3RyYXBGdW5jdGlvbiByZXR1cm5lZCBhIHByb21pc2UgdGhhdCBkaWQgbm90IHJlc29sdmUgd2l0aCBhIHZhbGlkIEFuZ3VsYXIgbW9kdWxlLiBEaWQgeW91IGNhbGwgcGxhdGZvcm1Ccm93c2VyRHluYW1pYygpLmJvb3RzdHJhcE1vZHVsZSgpIGNvcnJlY3RseT9gLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBzaW5nbGVTcGFQbGF0Zm9ybUxvY2F0aW9uOiBTaW5nbGVTcGFQbGF0Zm9ybUxvY2F0aW9uIHwgbnVsbCA9IG1vZHVsZS5pbmplY3Rvci5nZXQoXG4gICAgU2luZ2xlU3BhUGxhdGZvcm1Mb2NhdGlvbixcbiAgICBudWxsLFxuICApO1xuXG4gIGNvbnN0IG5nWm9uZUVuYWJsZWQgPSBvcHRpb25zLk5nWm9uZSAhPT0gJ25vb3AnO1xuXG4gIC8vIFRoZSB1c2VyIGhhcyB0byBwcm92aWRlIGBCcm93c2VyUGxhdGZvcm1Mb2NhdGlvbmAgb25seSBpZiBoaXMgYXBwbGljYXRpb24gdXNlcyByb3V0aW5nLlxuICAvLyBTbyBpZiBoZSBwcm92aWRlZCBgUm91dGVyYCBidXQgZGlkbid0IHByb3ZpZGUgYEJyb3dzZXJQbGF0Zm9ybUxvY2F0aW9uYCB0aGVuIHdlIGhhdmUgdG8gaW5mb3JtIGhpbS5cbiAgLy8gQWxzbyBgZ2V0U2luZ2xlU3BhRXh0cmFQcm92aWRlcnMoKWAgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGlmIHRoZSB1c2VyIGRvZXNuJ3QgdXNlXG4gIC8vIGB6b25lLWxlc3NgIGNoYW5nZSBkZXRlY3Rpb24sIGlmIGBOZ1pvbmVgIGlzIGBub29wYCB0aGVuIHdlIGNhbiBza2lwIGl0LlxuICBpZiAobmdab25lRW5hYmxlZCAmJiBvcHRpb25zLlJvdXRlciAmJiBzaW5nbGVTcGFQbGF0Zm9ybUxvY2F0aW9uID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBcbiAgICAgIHNpbmdsZS1zcGEtYW5ndWxhcjogY291bGQgbm90IHJldHJpZXZlIGV4dHJhIHByb3ZpZGVycyBmcm9tIHRoZSBwbGF0Zm9ybSBpbmplY3Rvci4gRGlkIHlvdSBjYWxsIHBsYXRmb3JtQnJvd3NlckR5bmFtaWMoZ2V0U2luZ2xlU3BhRXh0cmFQcm92aWRlcnMoKSkuYm9vdHN0cmFwTW9kdWxlKCk/XG4gICAgYCk7XG4gIH1cblxuICBjb25zdCBib290c3RyYXBwZWRPcHRpb25zID0gb3B0aW9ucyBhcyBCb290c3RyYXBwZWRTaW5nbGVTcGFBbmd1bGFyT3B0aW9ucztcblxuICBpZiAobmdab25lRW5hYmxlZCkge1xuICAgIGNvbnN0IG5nWm9uZTogTmdab25lID0gbW9kdWxlLmluamVjdG9yLmdldChvcHRpb25zLk5nWm9uZSk7XG4gICAgY29uc3Qgem9uZUlkZW50aWZpZXI6IHN0cmluZyA9IGJvb3RzdHJhcHBlZE9wdGlvbnMuem9uZUlkZW50aWZpZXIhO1xuXG4gICAgLy8gYE5nWm9uZWAgY2FuIGJlIGVuYWJsZWQgYnV0IHJvdXRpbmcgbWF5IG5vdCBiZSB1c2VkIHRodXMgYGdldFNpbmdsZVNwYUV4dHJhUHJvdmlkZXJzKClgXG4gICAgLy8gZnVuY3Rpb24gd2FzIG5vdCBjYWxsZWQuXG4gICAgaWYgKHNpbmdsZVNwYVBsYXRmb3JtTG9jYXRpb24gIT09IG51bGwpIHtcbiAgICAgIHNraXBMb2NhdGlvbkNoYW5nZU9uTm9uSW1wZXJhdGl2ZVJvdXRpbmdUcmlnZ2Vycyhtb2R1bGUsIG9wdGlvbnMpO1xuXG4gICAgICAvLyBDbGVhbnVwIHJlc291cmNlcywgZXNwZWNpYWxseSByZW1vdmUgZXZlbnQgbGlzdGVuZXJzIHRodXMgdGhleSB3aWxsIG5vdCBiZSBhZGRlZFxuICAgICAgLy8gdHdpY2Ugd2hlbiBhcHBsaWNhdGlvbiBnZXRzIGJvb3RzdHJhcHBlZCB0aGUgc2Vjb25kIHRpbWUuXG4gICAgICBtb2R1bGUub25EZXN0cm95KCgpID0+IHtcbiAgICAgICAgc2luZ2xlU3BhUGxhdGZvcm1Mb2NhdGlvbi5kZXN0cm95QXBwbGljYXRpb24oem9uZUlkZW50aWZpZXIpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYm9vdHN0cmFwcGVkT3B0aW9ucy5ib290c3RyYXBwZWROZ1pvbmUgPSBuZ1pvbmU7XG4gICAgYm9vdHN0cmFwcGVkT3B0aW9ucy5ib290c3RyYXBwZWROZ1pvbmVbJ19pbm5lciddLl9wcm9wZXJ0aWVzW3pvbmVJZGVudGlmaWVyXSA9IHRydWU7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3NpbmdsZS1zcGE6cm91dGluZy1ldmVudCcsIGJvb3RzdHJhcHBlZE9wdGlvbnMucm91dGluZ0V2ZW50TGlzdGVuZXIhKTtcbiAgfVxuXG4gIGJvb3RzdHJhcHBlZE9wdGlvbnMuYm9vdHN0cmFwcGVkTW9kdWxlID0gbW9kdWxlO1xuICByZXR1cm4gbW9kdWxlO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5hc3luYyBmdW5jdGlvbiB1bm1vdW50KG9wdGlvbnM6IEJvb3RzdHJhcHBlZFNpbmdsZVNwYUFuZ3VsYXJPcHRpb25zLCBwcm9wczogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChvcHRpb25zLlJvdXRlcikge1xuICAgIC8vIFdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzE5MDc5XG4gICAgY29uc3Qgcm91dGVyID0gb3B0aW9ucy5ib290c3RyYXBwZWRNb2R1bGUhLmluamVjdG9yLmdldChvcHRpb25zLlJvdXRlcik7XG4gICAgcm91dGVyLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnJvdXRpbmdFdmVudExpc3RlbmVyKSB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3NpbmdsZS1zcGE6cm91dGluZy1ldmVudCcsIG9wdGlvbnMucm91dGluZ0V2ZW50TGlzdGVuZXIpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuQW5pbWF0aW9uRW5naW5lKSB7XG4gICAgLypcbiAgICBUaGUgQnJvd3NlckFuaW1hdGlvbnNNb2R1bGUgZG9lcyBub3QgY2xlYW4gdXAgYWZ0ZXIgaXRzZWxmIDonKC4gV2hlbiB5b3UgdW5tb3VudC9kZXN0cm95IHRoZSBtYWluIG1vZHVsZSwgdGhlXG4gICAgQnJvd3NlckFuaW1hdGlvbnNNb2R1bGUgdXNlcyBhbiBBbmltYXRpb25SZW5kZXJlciB0aGluZyB0byByZW1vdmUgZG9tIGVsZW1lbnRzIGZyb20gdGhlIHBhZ2UuIEJ1dCB0aGUgQW5pbWF0aW9uUmVuZGVyZXJcbiAgICBkZWZlcnMgdGhlIGFjdHVhbCB3b3JrIHRvIHRoZSBUcmFuc2l0aW9uQW5pbWF0aW9uRW5naW5lIHRvIGRvIHRoaXMsIGFuZCB0aGUgVHJhbnNpdGlvbkFuaW1hdGlvbkVuZ2luZSBkb2Vzbid0IGFjdHVhbGx5XG4gICAgcmVtb3ZlIHRoZSBkb20gbm9kZSwgYnV0IGp1c3QgY2FsbHMgXCJtYXJrRWxlbWVudEFzUmVtb3ZlZCgpXCIuXG5cbiAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iL2RiNjJjY2Y5ZWI0NmVlODkzNjZhZGU1ODYzNjVlYTAyN2JiOTNlYjEvcGFja2FnZXMvYW5pbWF0aW9ucy9icm93c2VyL3NyYy9yZW5kZXIvdHJhbnNpdGlvbl9hbmltYXRpb25fZW5naW5lLnRzI0w3MTdcblxuICAgIFdoYXQgbWFya0FzUmVtb3ZlZERvZXMgaXMgcHV0IGl0IGludG8gYW4gYXJyYXkgY2FsbGVkIFwiY29sbGVjdGVkTGVhdmVFbGVtZW50c1wiLCB3aGljaCBpcyBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgc2hvdWxkIGJlIHJlbW92ZWRcbiAgICBhZnRlciB0aGUgRE9NIGhhcyBoYWQgYSBjaGFuY2UgdG8gZG8gYW55IGFuaW1hdGlvbnMuXG5cbiAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iL21hc3Rlci9wYWNrYWdlcy9hbmltYXRpb25zL2Jyb3dzZXIvc3JjL3JlbmRlci90cmFuc2l0aW9uX2FuaW1hdGlvbl9lbmdpbmUudHMjTDUyNVxuXG4gICAgVGhlIGFjdHVhbCBkb20gbm9kZXMgYXJlbid0IHJlbW92ZWQgdW50aWwgdGhlIFRyYW5zaXRpb25BbmltYXRpb25FbmdpbmUgXCJmbHVzaGVzXCIuXG5cbiAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iL2RiNjJjY2Y5ZWI0NmVlODkzNjZhZGU1ODYzNjVlYTAyN2JiOTNlYjEvcGFja2FnZXMvYW5pbWF0aW9ucy9icm93c2VyL3NyYy9yZW5kZXIvdHJhbnNpdGlvbl9hbmltYXRpb25fZW5naW5lLnRzI0w4NTFcblxuICAgIFVuZm9ydHVuYXRlbHksIHRob3VnaCwgdGhhdCBcImZsdXNoXCIgd2lsbCBuZXZlciBoYXBwZW4sIHNpbmNlIHRoZSBlbnRpcmUgbW9kdWxlIGlzIGJlaW5nIGRlc3Ryb3llZCBhbmQgdGhlcmUgd2lsbCBiZSBubyBtb3JlIGZsdXNoZXMuXG4gICAgU28gd2hhdCB3ZSBkbyBpbiB0aGlzIGNvZGUgaXMgZm9yY2Ugb25lIG1vcmUgZmx1c2ggb2YgdGhlIGFuaW1hdGlvbnMgYWZ0ZXIgdGhlIG1vZHVsZSBpcyBkZXN0cm95ZWQuXG5cbiAgICBJZGVhbGx5LCB3ZSB3b3VsZCBkbyB0aGlzIGJ5IGdldHRpbmcgdGhlIFRyYW5zaXRpb25BbmltYXRpb25FbmdpbmUgZGlyZWN0bHkgYW5kIGZsdXNoaW5nIGl0LiBVbmZvcnR1bmF0ZWx5LCB0aG91Z2gsIGl0J3MgcHJpdmF0ZSBjbGFzc1xuICAgIHRoYXQgY2Fubm90IGJlIGltcG9ydGVkIGFuZCBpcyBub3QgcHJvdmlkZWQgdG8gdGhlIGRlcGVuZGVuY3kgaW5qZWN0b3IuIFNvLCBpbnN0ZWFkLCB3ZSBnZXQgaXRzIHdyYXBwZXIgY2xhc3MsIEFuaW1hdGlvbkVuZ2luZSwgYW5kIHRoZW5cbiAgICBhY2Nlc3MgaXRzIHByaXZhdGUgdmFyaWFibGUgcmVmZXJlbmNlIHRvIHRoZSBUcmFuc2l0aW9uQW5pbWF0aW9uRW5naW5lIHNvIHRoYXQgd2UgY2FuIGNhbGwgZmx1c2guXG4gICAgKi9cbiAgICBjb25zdCBhbmltYXRpb25FbmdpbmUgPSBvcHRpb25zLmJvb3RzdHJhcHBlZE1vZHVsZSEuaW5qZWN0b3IuZ2V0KG9wdGlvbnMuQW5pbWF0aW9uRW5naW5lKTtcbiAgICBhbmltYXRpb25FbmdpbmUuX3RyYW5zaXRpb25FbmdpbmUuZmx1c2goKTtcbiAgfVxuXG4gIG9wdGlvbnMuYm9vdHN0cmFwcGVkTW9kdWxlIS5kZXN0cm95KCk7XG4gIG9wdGlvbnMuYm9vdHN0cmFwcGVkTW9kdWxlID0gbnVsbDtcblxuICAvLyBUT0RPOiB0aGlzIGlzIG5vdCBhbiBpc3N1ZSBhbnltb3JlIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLlxuICByZW1vdmVBcHBsaWNhdGlvbkZyb21ET01JZkl2eUVuYWJsZWQob3B0aW9ucywgcHJvcHMpO1xufVxuXG5mdW5jdGlvbiBza2lwTG9jYXRpb25DaGFuZ2VPbk5vbkltcGVyYXRpdmVSb3V0aW5nVHJpZ2dlcnMoXG4gIG1vZHVsZTogTmdNb2R1bGVSZWY8YW55PixcbiAgb3B0aW9uczogU2luZ2xlU3BhQW5ndWxhck9wdGlvbnMsXG4pOiB2b2lkIHtcbiAgaWYgKCFvcHRpb25zLk5hdmlnYXRpb25TdGFydCkge1xuICAgIC8vIEFzIGRpc2N1c3NlZCB3ZSBkb24ndCBkbyBhbnl0aGluZyByaWdodCBub3cgaWYgdGhlIGRldmVsb3BlciBkb2Vzbid0IHByb3ZpZGVcbiAgICAvLyBgb3B0aW9ucy5OYXZpZ2F0aW9uU3RhcnRgIHNpbmNlIHRoaXMgbWlnaHQgYmUgYSBicmVha2luZyBjaGFuZ2UuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgcm91dGVyID0gbW9kdWxlLmluamVjdG9yLmdldChvcHRpb25zLlJvdXRlcik7XG4gIGNvbnN0IHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gcm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcbiAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBvcHRpb25zLk5hdmlnYXRpb25TdGFydCEpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnROYXZpZ2F0aW9uID0gcm91dGVyLmdldEN1cnJlbnROYXZpZ2F0aW9uKCk7XG4gICAgICAvLyBUaGlzIGxpc3RlbmVyIHdpbGwgYmUgc2V0IHVwIGZvciBlYWNoIEFuZ3VsYXIgYXBwbGljYXRpb25cbiAgICAgIC8vIHRoYXQgaGFzIHJvdXRpbmcgY2FwYWJpbGl0aWVzLlxuICAgICAgLy8gV2Ugc2V0IGBza2lwTG9jYXRpb25DaGFuZ2VgIGZvciBlYWNoIG5vbi1pbXBlcmF0aXZlIG5hdmlnYXRpb24sXG4gICAgICAvLyBBbmd1bGFyIHJvdXRlciBjaGVja3MgdW5kZXIgdGhlIGhvb2QgaWYgaXQgaGFzIHRvIGNoYW5nZVxuICAgICAgLy8gdGhlIGJyb3dzZXIgVVJMIG9yIG5vdC5cbiAgICAgIC8vIElmIGBza2lwTG9jYXRpb25DaGFuZ2VgIGlzIHRydXRoeSB0aGVuIEFuZ3VsYXIgcm91dGVyIHdpbGwgbm90IGNhbGxcbiAgICAgIC8vIGBzZXRCcm93c2VyVXJsKClgIHdoaWNoIGNhbGxzIGBoaXN0b3J5LnJlcGxhY2VTdGF0ZSgpYCBhbmQgZGlzcGF0Y2hlcyBgcG9wc3RhdGVgIGV2ZW50LlxuICAgICAgaWYgKGN1cnJlbnROYXZpZ2F0aW9uLnRyaWdnZXIgIT09ICdpbXBlcmF0aXZlJykge1xuICAgICAgICBjdXJyZW50TmF2aWdhdGlvbi5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgY3VycmVudE5hdmlnYXRpb24uZXh0cmFzLnJlcGxhY2VVcmwgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIG1vZHVsZS5vbkRlc3Ryb3koKCkgPT4ge1xuICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9KTtcbn1cbiJdfQ== | ||
//# sourceMappingURL=single-spa-angular.js.map |
export {}; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vbGlicy9zaW5nbGUtc3BhLWFuZ3VsYXIvIiwic291cmNlcyI6WyJzcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlUmVmLCBUeXBlLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFwcFByb3BzIH0gZnJvbSAnc2luZ2xlLXNwYSc7XG5pbXBvcnQgeyBCYXNlU2luZ2xlU3BhQW5ndWxhck9wdGlvbnMgfSBmcm9tICdzaW5nbGUtc3BhLWFuZ3VsYXIvaW50ZXJuYWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBTaW5nbGVTcGFBbmd1bGFyT3B0aW9uczxUID0ge30+IGV4dGVuZHMgQmFzZVNpbmdsZVNwYUFuZ3VsYXJPcHRpb25zIHtcbiAgLy8gVGhpcyBtaWdodCBiZSBgbm9vcGAgaWYgdGhlIHJvb3QgbW9kdWxlIGlzIGJvb3RzdHJhcHBlZFxuICAvLyB3aXRoIGB7IG5nWm9uZTogJ25vb3AnIH1gIG9wdGlvbnMuXG4gIE5nWm9uZTogdHlwZW9mIE5nWm9uZSB8ICdub29wJztcbiAgdXBkYXRlRnVuY3Rpb24/KHByb3BzOiBBcHBQcm9wcyk6IFByb21pc2U8YW55PjtcbiAgLy8gYFJvdXRlcmAgYW5kIGBOYXZpZ2F0aW9uU3RhcnRgIHNob3VsZCBiZSBhbHdheXMgcHJvdmlkZWQgdG9nZXRoZXIuXG4gIFJvdXRlcj86IFR5cGU8YW55PjtcbiAgTmF2aWdhdGlvblN0YXJ0PzogVHlwZTxhbnk+O1xuICBBbmltYXRpb25FbmdpbmU/OiBUeXBlPGFueT47XG4gIGJvb3RzdHJhcEZ1bmN0aW9uKHByb3BzOiBBcHBQcm9wcyAmIFQpOiBQcm9taXNlPE5nTW9kdWxlUmVmPGFueT4+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJvb3RzdHJhcHBlZFNpbmdsZVNwYUFuZ3VsYXJPcHRpb25zIGV4dGVuZHMgU2luZ2xlU3BhQW5ndWxhck9wdGlvbnMge1xuICBib290c3RyYXBwZWRNb2R1bGU6IE5nTW9kdWxlUmVmPGFueT4gfCBudWxsO1xuICAvLyBBbGwgYmVsb3cgcHJvcGVydGllcyBjYW4gYmUgb3B0aW9uYWwgaW4gY2FzZSBvZlxuICAvLyBgU2luZ2xlU3BhQW5ndWxhck9wdHMuTmdab25lYCBpcyBhIGBub29wYCBzdHJpbmcgYW5kIG5vdCBhbiBgTmdab25lYCBjbGFzcy5cbiAgYm9vdHN0cmFwcGVkTmdab25lPzogTmdab25lO1xuICByb3V0aW5nRXZlbnRMaXN0ZW5lcj86ICgpID0+IHZvaWQ7XG4gIHpvbmVJZGVudGlmaWVyPzogc3RyaW5nO1xufVxuIl19 | ||
//# sourceMappingURL=types.js.map |
@@ -1,12 +0,1 @@ | ||
function removeApplicationFromDOMIfIvyEnabled(options, props) { | ||
if (ivyEnabled()) { | ||
const domElementGetter = chooseDomElementGetter(options, props); | ||
const domElement = getContainerElement(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 getContainerElementAndSetTemplate(options, props) { | ||
@@ -56,16 +45,2 @@ const domElementGetter = chooseDomElementGetter(options, 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; | ||
} | ||
} | ||
@@ -76,3 +51,3 @@ /** | ||
export { getContainerElementAndSetTemplate, removeApplicationFromDOMIfIvyEnabled }; | ||
export { getContainerElementAndSetTemplate }; | ||
//# sourceMappingURL=single-spa-angular-internals.js.map |
@@ -95,2 +95,3 @@ import { Component, ChangeDetectionStrategy, ElementRef, Input, NgModule } from '@angular/core'; | ||
]; | ||
/** @nocollapse */ | ||
ParcelComponent.ctorParameters = () => [ | ||
@@ -97,0 +98,0 @@ { type: ElementRef } |
import { __awaiter } from 'tslib'; | ||
import { getContainerElementAndSetTemplate, removeApplicationFromDOMIfIvyEnabled } from 'single-spa-angular/internals'; | ||
import { getContainerElementAndSetTemplate } from 'single-spa-angular/internals'; | ||
import { Injectable, Inject } from '@angular/core'; | ||
@@ -12,39 +12,4 @@ import { ɵBrowserPlatformLocation, DOCUMENT, PlatformLocation } from '@angular/common'; | ||
this.skipNextPopState = false; | ||
// The key here is an actual forked `Zone` of some specific application. | ||
// We will be able to find the specific zone when application gets destroyed | ||
// by application `name`. | ||
// The reason of that the `onPopState` method is invoked during `bootstrapModule` | ||
// and we can't know what application has invoked it. Why should we know the application | ||
// that has invoked `onPopState`? When application gets destroyed in a `sharing dependencies mode` | ||
// (when there is a single platform per all applications) we want to remove application | ||
// specific `popstate` listeners. E.g. if there are 2 applications: | ||
// * shop application adds `popstate` listener | ||
// * navbar application adds `popstate` listener | ||
// When shop application gets destroyed we want to remove only its `popstate` listener. | ||
this.zoneToOnPopStateListenersMap = new Map(); | ||
// This is used only to make `Zone.wrap` happy, since it requires 2 arguments | ||
// and the second argument is a unique string which `zone.js` uses for debugging purposes. | ||
// We might want to use the application name, but we're not able to get it when `onPopState` | ||
// method is called during module bootstrapping. | ||
this.source = 0; | ||
this.source = 'Window.addEventListener:popstate'; | ||
} | ||
destroyApplication(zoneIdentifier) { | ||
// TLDR: Angular adds `popstate` event listener and then doesn't remove it when application gets destroyed. | ||
// Basically, Angular has a potentional memory leak. The `ɵBrowserPlatformLocation` | ||
// has `onPopState` method which adds `popstate` event listener and forgets, see here: | ||
// https://github.com/angular/angular/blob/14be55c9facf3e47b8c97df4502dc3f0f897da03/packages/common/src/location/platform_location.ts#L126 | ||
const zone = [...this.zoneToOnPopStateListenersMap.keys()].find( | ||
// `getZoneWith` will return a zone which defines a `key` and in our case | ||
// we define a custom key in `single-spa-angular.ts` | ||
// via this line of code: | ||
// `_properties[zoneIdentifier] = true;` | ||
zone => zone.getZoneWith(zoneIdentifier) !== null); | ||
const onPopStateListeners = this.zoneToOnPopStateListenersMap.get(zone); | ||
if (Array.isArray(onPopStateListeners)) { | ||
for (const onPopStateListener of onPopStateListeners) { | ||
window.removeEventListener('popstate', onPopStateListener); | ||
} | ||
} | ||
this.zoneToOnPopStateListenersMap.delete(zone); | ||
} | ||
pushState(state, title, url) { | ||
@@ -68,3 +33,3 @@ this.skipNextPopState = true; | ||
// See https://github.com/single-spa/single-spa-angular/issues/94 for more details | ||
fn = zone.wrap(fn, `${this.source++}`); | ||
fn = zone.wrap(fn, this.source); | ||
const onPopStateListener = (event) => { | ||
@@ -83,14 +48,4 @@ // The `LocationChangeEvent` doesn't have the `singleSpa` property, since it's added | ||
}; | ||
this.storeOnPopStateListener(zone, onPopStateListener); | ||
super.onPopState(onPopStateListener); | ||
return super.onPopState(onPopStateListener); | ||
} | ||
storeOnPopStateListener(zone, onPopStateListener) { | ||
// All listeners should be stored inside an array because the `onPopState` can be called | ||
// multiple times thus we wanna reference all listeners to remove them further. | ||
const onPopStateListeners = this.zoneToOnPopStateListenersMap.get(zone) || []; | ||
onPopStateListeners.push(onPopStateListener); | ||
if (!this.zoneToOnPopStateListenersMap.has(zone)) { | ||
this.zoneToOnPopStateListenersMap.set(zone, onPopStateListeners); | ||
} | ||
} | ||
} | ||
@@ -109,3 +64,2 @@ SingleSpaPlatformLocation.decorators = [ | ||
provide: SingleSpaPlatformLocation, | ||
useClass: SingleSpaPlatformLocation, | ||
deps: [[new Inject(DOCUMENT)]], | ||
@@ -128,3 +82,2 @@ }, | ||
domElementGetter: undefined, | ||
AnimationEngine: undefined, | ||
updateFunction: () => Promise.resolve(), | ||
@@ -217,7 +170,2 @@ bootstrappedModule: null, | ||
skipLocationChangeOnNonImperativeRoutingTriggers(module, options); | ||
// Cleanup resources, especially remove event listeners thus they will not be added | ||
// twice when application gets bootstrapped the second time. | ||
module.onDestroy(() => { | ||
singleSpaPlatformLocation.destroyApplication(zoneIdentifier); | ||
}); | ||
} | ||
@@ -232,45 +180,9 @@ bootstrappedOptions.bootstrappedNgZone = ngZone; | ||
} | ||
// eslint-disable-next-line @typescript-eslint/no-unused-vars | ||
function unmount(options, props) { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
if (options.Router) { | ||
// Workaround for https://github.com/angular/angular/issues/19079 | ||
const router = options.bootstrappedModule.injector.get(options.Router); | ||
router.dispose(); | ||
} | ||
function unmount(options) { | ||
return Promise.resolve().then(() => { | ||
if (options.routingEventListener) { | ||
window.removeEventListener('single-spa:routing-event', options.routingEventListener); | ||
} | ||
if (options.AnimationEngine) { | ||
/* | ||
The BrowserAnimationsModule does not clean up after itself :'(. When you unmount/destroy the main module, the | ||
BrowserAnimationsModule uses an AnimationRenderer thing to remove dom elements from the page. But the AnimationRenderer | ||
defers the actual work to the TransitionAnimationEngine to do this, and the TransitionAnimationEngine doesn't actually | ||
remove the dom node, but just calls "markElementAsRemoved()". | ||
See https://github.com/angular/angular/blob/db62ccf9eb46ee89366ade586365ea027bb93eb1/packages/animations/browser/src/render/transition_animation_engine.ts#L717 | ||
What markAsRemovedDoes is put it into an array called "collectedLeaveElements", which is all the elements that should be removed | ||
after the DOM has had a chance to do any animations. | ||
See https://github.com/angular/angular/blob/master/packages/animations/browser/src/render/transition_animation_engine.ts#L525 | ||
The actual dom nodes aren't removed until the TransitionAnimationEngine "flushes". | ||
See https://github.com/angular/angular/blob/db62ccf9eb46ee89366ade586365ea027bb93eb1/packages/animations/browser/src/render/transition_animation_engine.ts#L851 | ||
Unfortunately, though, that "flush" will never happen, since the entire module is being destroyed and there will be no more flushes. | ||
So what we do in this code is force one more flush of the animations after the module is destroyed. | ||
Ideally, we would do this by getting the TransitionAnimationEngine directly and flushing it. Unfortunately, though, it's private class | ||
that cannot be imported and is not provided to the dependency injector. So, instead, we get its wrapper class, AnimationEngine, and then | ||
access its private variable reference to the TransitionAnimationEngine so that we can call flush. | ||
*/ | ||
const animationEngine = options.bootstrappedModule.injector.get(options.AnimationEngine); | ||
animationEngine._transitionEngine.flush(); | ||
} | ||
options.bootstrappedModule.destroy(); | ||
options.bootstrappedModule = null; | ||
// TODO: this is not an issue anymore and should be removed in the future. | ||
removeApplicationFromDOMIfIvyEnabled(options, props); | ||
}); | ||
@@ -277,0 +189,0 @@ } |
import { BaseSingleSpaAngularOptions } from './types'; | ||
export declare function removeApplicationFromDOMIfIvyEnabled<T extends BaseSingleSpaAngularOptions>(options: T, props: any): void; | ||
export declare function getContainerElementAndSetTemplate<T extends BaseSingleSpaAngularOptions>(options: T, props: any): HTMLElement; |
export * from './types'; | ||
export { getContainerElementAndSetTemplate, removeApplicationFromDOMIfIvyEnabled } from './dom'; | ||
export { getContainerElementAndSetTemplate } from './dom'; |
@@ -11,2 +11,2 @@ { | ||
"name": "single-spa-angular/internals" | ||
} | ||
} |
@@ -1,1 +0,1 @@ | ||
{"__symbolic":"module","version":4,"metadata":{"DomElementGetter":{"__symbolic":"interface"},"BaseSingleSpaAngularOptions":{"__symbolic":"interface"},"getContainerElementAndSetTemplate":{"__symbolic":"function"},"removeApplicationFromDOMIfIvyEnabled":{"__symbolic":"function"}},"origins":{"DomElementGetter":"./types","BaseSingleSpaAngularOptions":"./types","getContainerElementAndSetTemplate":"./dom","removeApplicationFromDOMIfIvyEnabled":"./dom"},"importAs":"single-spa-angular/internals"} | ||
{"__symbolic":"module","version":4,"metadata":{"DomElementGetter":{"__symbolic":"interface"},"BaseSingleSpaAngularOptions":{"__symbolic":"interface"},"getContainerElementAndSetTemplate":{"__symbolic":"function"}},"origins":{"DomElementGetter":"./types","BaseSingleSpaAngularOptions":"./types","getContainerElementAndSetTemplate":"./dom"},"importAs":"single-spa-angular/internals"} |
@@ -1,6 +0,5 @@ | ||
import { BrowserBuilderOptions } from '@angular-devkit/build-angular'; | ||
export interface DefaultExtraOptions { | ||
removeMiniCssExtract: boolean; | ||
} | ||
interface Options extends Partial<BrowserBuilderOptions> { | ||
interface Options { | ||
customWebpackConfig?: { | ||
@@ -10,4 +9,9 @@ libraryName?: string; | ||
}; | ||
main?: string; | ||
sourceMap?: boolean | { | ||
scripts?: boolean; | ||
vendor?: boolean; | ||
}; | ||
} | ||
declare const _default: (config: any, options?: Options | undefined, extraOptions?: DefaultExtraOptions | undefined) => any; | ||
export default _default; |
@@ -6,2 +6,3 @@ "use strict"; | ||
const find_up_1 = require("@angular/cli/utilities/find-up"); | ||
const remove_mini_css_extract_1 = require("./webpack-5/remove-mini-css-extract"); | ||
const defaultExtraOptions = { | ||
@@ -18,3 +19,4 @@ removeMiniCssExtract: true, | ||
libraryTarget: (_b = (_a = options === null || options === void 0 ? void 0 : options.customWebpackConfig) === null || _a === void 0 ? void 0 : _a.libraryTarget) !== null && _b !== void 0 ? _b : 'umd', | ||
jsonpFunction: 'webpackJsonp' + libraryName, | ||
// `output.jsonpFunction` has been renamed to `output.chunkLoadingGlobal` in Webpack 5. | ||
chunkLoadingGlobal: 'webpackJsonp' + libraryName, | ||
devtoolNamespace: libraryName, | ||
@@ -76,12 +78,4 @@ }, | ||
function removeMiniCssExtract(config) { | ||
remove_mini_css_extract_1.removeMiniCssExtractRules(config); | ||
removePluginByName(config.plugins, 'MiniCssExtractPlugin'); | ||
config.module.rules.forEach((rule) => { | ||
if (rule.use) { | ||
const cssMiniExtractIndex = rule.use.findIndex((use) => (typeof use === 'string' && use.includes('mini-css-extract-plugin')) || | ||
(typeof use === 'object' && use.loader && use.loader.includes('mini-css-extract-plugin'))); | ||
if (cssMiniExtractIndex >= 0) { | ||
rule.use[cssMiniExtractIndex] = { loader: 'style-loader' }; | ||
} | ||
} | ||
}); | ||
} | ||
@@ -88,0 +82,0 @@ function getLibraryName(options) { |
{ | ||
"$schema": "../node_modules/ng-packagr/ng-package.schema.json", | ||
"name": "single-spa-angular", | ||
"version": "4.9.2", | ||
"version": "5.0.0", | ||
"description": "Helpers for building single-spa applications which use Angular 2", | ||
@@ -27,3 +27,3 @@ "schematics": "./schematics/schematics.json", | ||
"peerDependencies": { | ||
"@angular/core": ">=9", | ||
"@angular/core": ">=12", | ||
"json5": "*", | ||
@@ -40,4 +40,4 @@ "single-spa": ">=4.0.0" | ||
"dependencies": { | ||
"tslib": "^2.0.0" | ||
"tslib": "^2.1.0" | ||
} | ||
} | ||
} |
@@ -11,2 +11,2 @@ { | ||
"name": "single-spa-angular/parcel" | ||
} | ||
} |
@@ -9,3 +9,3 @@ import { ElementRef, OnChanges, OnDestroy, OnInit } from '@angular/core'; | ||
wrapWith: string; | ||
customProps: object; | ||
customProps: Record<string, unknown>; | ||
appendTo: Node | null; | ||
@@ -12,0 +12,0 @@ handleError: (error: Error) => void; |
@@ -1,7 +0,3 @@ | ||
import { Rule, SchematicContext, Tree } from '@angular-devkit/schematics'; | ||
import { Rule } from '@angular-devkit/schematics'; | ||
import { Schema as NgAddOptions } from './schema'; | ||
export default function (options: NgAddOptions): Rule; | ||
export declare function addDependencies(): Rule; | ||
export declare function createMainEntry(options: NgAddOptions): Rule; | ||
export declare function updateConfiguration(options: NgAddOptions): (host: Tree, context: SchematicContext) => import("@angular-devkit/schematics/src/tree/interface").Tree; | ||
export declare function addNPMScripts(options: NgAddOptions): Rule; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.addNPMScripts = exports.updateConfiguration = exports.createMainEntry = exports.addDependencies = void 0; | ||
const tslib_1 = require("tslib"); | ||
const core_1 = require("@angular-devkit/core"); | ||
const schematics_1 = require("@angular-devkit/schematics"); | ||
const dependencies_1 = require("@schematics/angular/utility/dependencies"); | ||
const core_1 = require("@angular-devkit/core"); | ||
// The JSON5 format supports comments and all Angular projects, | ||
// starting from version 10, contain comments in `tsconfig` files. | ||
const json5_1 = require("json5"); | ||
const add_scripts_1 = require("./add-scripts"); | ||
const dependencies_2 = require("./dependencies"); | ||
const workspace_1 = require("./workspace"); | ||
const add_dependencies_1 = require("./rules/add-dependencies"); | ||
const create_main_entry_1 = require("./rules/create-main-entry"); | ||
const update_configuration_1 = require("./rules/update-configuration"); | ||
const add_npm_scripts_1 = require("./rules/add-npm-scripts"); | ||
const show_warning_if_routing_is_enabled_1 = require("./rules/show-warning-if-routing-is-enabled"); | ||
function default_1(options) { | ||
return schematics_1.chain([ | ||
addDependencies(), | ||
createMainEntry(options), | ||
updateConfiguration(options), | ||
addNPMScripts(options), | ||
]); | ||
return (tree) => tslib_1.__awaiter(this, void 0, void 0, function* () { | ||
const { workspace, project, host } = yield getWorkspace(tree, options.project); | ||
return schematics_1.chain([ | ||
add_dependencies_1.addDependencies(), | ||
create_main_entry_1.createMainEntry(project, options), | ||
update_configuration_1.updateConfiguration(workspace, project, host, options), | ||
add_npm_scripts_1.addNPMScripts(workspace, project, host, options), | ||
show_warning_if_routing_is_enabled_1.showWarningIfRoutingIsEnabled(options), | ||
]); | ||
}); | ||
} | ||
exports.default = default_1; | ||
function addDependencies() { | ||
const dependencies = [ | ||
dependencies_2.getSingleSpaDependency(), | ||
dependencies_2.getSingleSpaAngularDependency(), | ||
dependencies_2.getAngularBuildersCustomWebpackDependency(), | ||
]; | ||
return (tree, context) => tslib_1.__awaiter(this, void 0, void 0, function* () { | ||
var e_1, _a; | ||
try { | ||
for (var dependencies_3 = tslib_1.__asyncValues(dependencies), dependencies_3_1; dependencies_3_1 = yield dependencies_3.next(), !dependencies_3_1.done;) { | ||
const dependency = dependencies_3_1.value; | ||
dependencies_1.addPackageJsonDependency(tree, dependency); | ||
context.logger.info(`Added '${dependency.name}' as a dependency`); | ||
} | ||
function getWorkspace(tree, projectName) { | ||
return tslib_1.__awaiter(this, void 0, void 0, function* () { | ||
const host = createVirtualHost(tree); | ||
const { workspace } = yield core_1.workspaces.readWorkspace('/', host); | ||
projectName = projectName || workspace.extensions.defaultProject; | ||
const project = workspace.projects.get(projectName); | ||
if (!project) { | ||
throw new schematics_1.SchematicsException(`Invalid project name: ${projectName}`); | ||
} | ||
catch (e_1_1) { e_1 = { error: e_1_1 }; } | ||
finally { | ||
try { | ||
if (dependencies_3_1 && !dependencies_3_1.done && (_a = dependencies_3.return)) yield _a.call(dependencies_3); | ||
} | ||
finally { if (e_1) throw e_1.error; } | ||
} | ||
return { workspace, project, host }; | ||
}); | ||
} | ||
exports.addDependencies = addDependencies; | ||
function createMainEntry(options) { | ||
return (host, context) => { | ||
const project = getClientProject(host, options); | ||
const path = core_1.normalize(project.workspace.root); | ||
const templateSource = schematics_1.apply(schematics_1.url('./_files'), [ | ||
schematics_1.applyTemplates({ | ||
prefix: project.workspace.prefix, | ||
routing: options.routing, | ||
usingBrowserAnimationsModule: options.usingBrowserAnimationsModule, | ||
}), | ||
schematics_1.move(path), | ||
]); | ||
const rule = schematics_1.mergeWith(templateSource, schematics_1.MergeStrategy.Overwrite); | ||
context.logger.info(`Generated 'main.single-spa.ts`); | ||
context.logger.info(`Generated 'single-spa-props.ts`); | ||
context.logger.info(`Generated asset-url.ts`); | ||
context.logger.info(`Generated extra-webpack.config.js`); | ||
return rule(host, context); | ||
function createVirtualHost(tree) { | ||
return { | ||
readFile(path) { | ||
return tslib_1.__awaiter(this, void 0, void 0, function* () { | ||
const data = tree.read(path); | ||
if (!data) { | ||
throw new schematics_1.SchematicsException('File not found.'); | ||
} | ||
return core_1.virtualFs.fileBufferToString(data); | ||
}); | ||
}, | ||
writeFile(path, data) { | ||
return tslib_1.__awaiter(this, void 0, void 0, function* () { | ||
return tree.overwrite(path, data); | ||
}); | ||
}, | ||
isDirectory(path) { | ||
return tslib_1.__awaiter(this, void 0, void 0, function* () { | ||
return !tree.exists(path) && tree.getDir(path).subfiles.length > 0; | ||
}); | ||
}, | ||
isFile(path) { | ||
return tslib_1.__awaiter(this, void 0, void 0, function* () { | ||
return tree.exists(path); | ||
}); | ||
}, | ||
}; | ||
} | ||
exports.createMainEntry = createMainEntry; | ||
function updateConfiguration(options) { | ||
return (host, context) => { | ||
const workspace = workspace_1.getWorkspace(host); | ||
const project = getClientProject(host, options); | ||
const clientProject = workspace.projects[project.name]; | ||
if (!clientProject.architect) { | ||
throw new Error('Client project architect not found.'); | ||
} | ||
const workspacePath = workspace_1.getWorkspacePath(host); | ||
updateProjectNewAngular(context, clientProject, project.name); | ||
updateTSConfig(host, clientProject); | ||
host.overwrite(workspacePath, JSON.stringify(workspace, null, 2)); | ||
context.logger.info(`Updated angular.json configuration`); | ||
// @ts-ignore | ||
context.logger.info(clientProject.architect.build.builder); | ||
return host; | ||
}; | ||
} | ||
exports.updateConfiguration = updateConfiguration; | ||
function updateProjectNewAngular(context, clientProject, projectName) { | ||
context.logger.info('Using @angular-devkit/custom-webpack builder.'); | ||
const buildTarget = clientProject.architect.build; | ||
const browserBuilder = '@angular-builders/custom-webpack:browser'; | ||
buildTarget.builder = browserBuilder; | ||
buildTarget.options.main = core_1.join(core_1.normalize(clientProject.root), core_1.normalize('src/main.single-spa.ts')); | ||
buildTarget.options.customWebpackConfig = { | ||
path: core_1.join(core_1.normalize(clientProject.root), 'extra-webpack.config.js'), | ||
libraryName: projectName, | ||
libraryTarget: 'umd', | ||
}; | ||
updateConfigurationsAndDisableOutputHashing(clientProject); | ||
const devServerBuilder = '@angular-builders/custom-webpack:dev-server'; | ||
clientProject.architect.serve.builder = devServerBuilder; | ||
} | ||
function updateTSConfig(host, clientProject) { | ||
const tsConfigPath = clientProject.architect.build.options.tsConfig; | ||
const buffer = host.read(tsConfigPath); | ||
if (buffer === null) { | ||
return; | ||
} | ||
const tsConfig = json5_1.parse(buffer.toString()); | ||
if (!Array.isArray(tsConfig.files)) { | ||
return; | ||
} | ||
// The "files" property will only contain path to `main.single-spa.ts` file, | ||
// because we remove `polyfills` from Webpack `entry` property. | ||
tsConfig.files = [core_1.normalize('src/main.single-spa.ts')]; | ||
host.overwrite(tsConfigPath, JSON.stringify(tsConfig, null, 2)); | ||
} | ||
function addNPMScripts(options) { | ||
return (host) => { | ||
const pkgPath = '/package.json'; | ||
const buffer = host.read(pkgPath); | ||
if (buffer === null) { | ||
throw new schematics_1.SchematicsException('Could not find package.json'); | ||
} | ||
add_scripts_1.addScripts(host, pkgPath, JSON.parse(buffer.toString()), options.project); | ||
}; | ||
} | ||
exports.addNPMScripts = addNPMScripts; | ||
function getClientProject(host, options) { | ||
const workspace = workspace_1.getWorkspace(host); | ||
let project = options.project; | ||
if (!options.project) { | ||
project = Object.keys(workspace.projects)[0]; | ||
} | ||
const clientProject = workspace.projects[project]; | ||
if (!clientProject) { | ||
throw new schematics_1.SchematicsException(`Client app ${options.project} not found.`); | ||
} | ||
return { name: project, workspace: clientProject }; | ||
} | ||
function updateConfigurationsAndDisableOutputHashing(clientProject) { | ||
const configurations = clientProject.architect.build.configurations; | ||
// If the user doesn't have any `configurations` then just skip this step. | ||
if (typeof configurations !== 'object') { | ||
return; | ||
} | ||
for (const configuration of Object.values(configurations)) { | ||
configuration.outputHashing = 'none'; | ||
} | ||
} | ||
//# sourceMappingURL=index.js.map |
export interface Schema { | ||
project?: string; | ||
routing?: boolean; | ||
usingBrowserAnimationsModule?: boolean; | ||
// This actually will still infer to `number` type, this is done to specify | ||
// that `4200` is used by default. | ||
port?: 4200 | number; | ||
} |
{ | ||
"$schema": "http://json-schema.org/schema", | ||
"id": "single-spa-ng-add", | ||
"$id": "single-spa-ng-add", | ||
"title": "single-spa ng-add schematic", | ||
@@ -20,7 +20,7 @@ "type": "object", | ||
}, | ||
"usingBrowserAnimationsModule": { | ||
"type": "boolean", | ||
"description": "A value of true means the angular application uses BrowserAnimationsModule", | ||
"default": false, | ||
"x-prompt": "Does your application use BrowserAnimationsModule?" | ||
"port": { | ||
"type": "number", | ||
"description": "Port to listen on", | ||
"default": 4200, | ||
"x-prompt": "What port should your project run on?" | ||
} | ||
@@ -27,0 +27,0 @@ }, |
@@ -1,1 +0,1 @@ | ||
{"__symbolic":"module","version":4,"metadata":{"ɵa":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"@angular/common","name":"ɵBrowserPlatformLocation","line":13,"character":47},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":12,"character":1}}],"members":{"destroyApplication":[{"__symbolic":"method"}],"pushState":[{"__symbolic":"method"}],"replaceState":[{"__symbolic":"method"}],"onPopState":[{"__symbolic":"method"}],"storeOnPopStateListener":[{"__symbolic":"method"}]}},"singleSpaAngular":{"__symbolic":"function"},"getSingleSpaExtraProviders":{"__symbolic":"function","parameters":[],"value":[{"provide":{"__symbolic":"reference","name":"ɵa"},"useClass":{"__symbolic":"reference","name":"ɵa"},"deps":[[{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":128,"character":18},"arguments":[{"__symbolic":"reference","module":"@angular/common","name":"DOCUMENT","line":128,"character":25}]}]]},{"provide":{"__symbolic":"reference","module":"@angular/common","name":"PlatformLocation","line":131,"character":15},"useExisting":{"__symbolic":"reference","name":"ɵa"}}]}},"origins":{"ɵa":"./src/extra-providers","singleSpaAngular":"./src/single-spa-angular","getSingleSpaExtraProviders":"./src/extra-providers"},"importAs":"single-spa-angular"} | ||
{"__symbolic":"module","version":4,"metadata":{"ɵa":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"@angular/common","name":"ɵBrowserPlatformLocation","line":12,"character":47},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":11,"character":1}}],"members":{"pushState":[{"__symbolic":"method"}],"replaceState":[{"__symbolic":"method"}],"onPopState":[{"__symbolic":"method"}]}},"singleSpaAngular":{"__symbolic":"function"},"getSingleSpaExtraProviders":{"__symbolic":"function","parameters":[],"value":[{"provide":{"__symbolic":"reference","name":"ɵa"},"deps":[[{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":69,"character":18},"arguments":[{"__symbolic":"reference","module":"@angular/common","name":"DOCUMENT","line":69,"character":25}]}]]},{"provide":{"__symbolic":"reference","module":"@angular/common","name":"PlatformLocation","line":72,"character":15},"useExisting":{"__symbolic":"reference","name":"ɵa"}}]}},"origins":{"ɵa":"./src/extra-providers","singleSpaAngular":"./src/single-spa-angular","getSingleSpaExtraProviders":"./src/extra-providers"},"importAs":"single-spa-angular"} |
import { StaticProvider } from '@angular/core'; | ||
import { ɵBrowserPlatformLocation, LocationChangeEvent } from '@angular/common'; | ||
declare type OnPopStateListener = (event: LocationChangeEvent) => void; | ||
import { ɵBrowserPlatformLocation, LocationChangeListener } from '@angular/common'; | ||
export declare class SingleSpaPlatformLocation extends ɵBrowserPlatformLocation { | ||
private skipNextPopState; | ||
private zoneToOnPopStateListenersMap; | ||
private source; | ||
destroyApplication(zoneIdentifier: string): void; | ||
private readonly source; | ||
pushState(state: any, title: string, url: string): void; | ||
replaceState(state: any, title: string, url: string): void; | ||
onPopState(fn: OnPopStateListener): void; | ||
private storeOnPopStateListener; | ||
onPopState(fn: LocationChangeListener): VoidFunction; | ||
} | ||
@@ -20,2 +16,1 @@ /** | ||
export declare function getSingleSpaExtraProviders(): StaticProvider[]; | ||
export {}; |
import { NgModuleRef, Type, NgZone } from '@angular/core'; | ||
import { AppProps } from 'single-spa'; | ||
import { BaseSingleSpaAngularOptions } from 'single-spa-angular/internals'; | ||
export interface SingleSpaAngularOptions<T = {}> extends BaseSingleSpaAngularOptions { | ||
export interface SingleSpaAngularOptions<T = Record<string, unknown>> extends BaseSingleSpaAngularOptions { | ||
NgZone: typeof NgZone | 'noop'; | ||
@@ -9,3 +9,2 @@ updateFunction?(props: AppProps): Promise<any>; | ||
NavigationStart?: Type<any>; | ||
AnimationEngine?: Type<any>; | ||
bootstrapFunction(props: AppProps & T): Promise<NgModuleRef<any>>; | ||
@@ -12,0 +11,0 @@ } |
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
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
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
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 1 instance in 1 package
132
0
309281
2831
Updatedtslib@^2.1.0