UNPKG

120 kBSource Map (JSON)View Raw
1{"version":3,"file":"ng-core.umd.js","sources":["../../../../packages/ng-core/src/simple-framer.ts","../../../../packages/ng-core/src/framing.ts","../../../../packages/ng-core/src/framing-ng-module.ts","../../../../packages/ng-core/src/framer.helper.ts","../../../../packages/ng-core/src/framing-components/framing-components.module.ts","../../../../packages/ng-core/src/framing-components/root.component.ts","../../../../packages/ng-core/src/framing-components/empty-parent.component.ts","../../../../packages/ng-core/src/framing-container-outlet/container-outlet.resolver.ts","../../../../packages/ng-core/src/framing-container-outlet/container-outlet.module.ts","../../../../packages/ng-core/src/framing-container-outlet/container-outlet.directive.ts","../../../../packages/ng-core/src/framing-container-outlet/container-outlet.service.ts","../../../../packages/ng-core/src/framing-component-outlet/component-outlet.module.ts","../../../../packages/ng-core/src/framing-component-outlet/component-outlet.directive.ts","../../../../packages/ng-core/src/features/framing-dev-tools/framing-dev-tools.feature.ts","../../../../packages/ng-core/src/framer.ts","../../../../packages/ng-core/src/frame.ts","../../../../packages/ng-core/src/features/framing-dev-tools/framing-dev-tools.component.ts","../../../../packages/ng-core/src/features/framing-dev-tools/framing-dev-tools.controller.ts","../../../../packages/ng-core/src/action.ts","../../../../packages/ng-core/src/devtools.ts","../../../../packages/ng-core/src/controller.ts","../../../../packages/ng-core/src/component.ts"],"sourcesContent":["import { Framer } from './framer';\n\n/**\n * A framer with no route, model, view, controller or frame.\n * To be used for leveraging the frame() function only.\n */\nexport abstract class SimpleFramer extends Framer<void, void> {\n public get framerName(): string { return 'Simple'; }\n public get createFrame(): boolean { return false; }\n public get routeRule(): ('require' | 'auto' | 'none') { return 'none'; }\n}\n","import { NgModule } from '@angular/core';\nimport { FramingNgModule } from './framing-ng-module';\n\ntype FramingNgModuleBuilder = (framing: FramingNgModule) => FramingNgModule;\n\n/* tslint:disable:variable-name */\nexport const Framing = (ngModuleBuilder: FramingNgModuleBuilder): NgModule => {\n/* tslint:enable:variable-name */\n\n let framing = ngModuleBuilder(new FramingNgModule());\n if (!framing) {\n console.error('Framing must return a FramingNgModule');\n return {};\n }\n return framing.build();\n};\n","import * as _ from 'lodash';\n\nimport { CommonModule } from '@angular/common';\nimport { Injector, ModuleWithProviders, NgModule, Provider, Type } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { Route, RouterModule } from '@angular/router';\n\nimport { FramingContainerOutletContent } from './framing-container-outlet/container-outlet-content';\nimport { FramingContainerOutletResolver } from './framing-container-outlet/container-outlet.resolver';\n\nimport { Framer } from './framer';\nimport { FramingRootComponentConfig } from './framing-root-component-config';\nimport { FramingRouteConfig } from './framing-route-config';\n\nimport { FramingEmptyParentComponent } from './framing-components/empty-parent.component';\nimport { FramingComponentsModule } from './framing-components/framing-components.module';\nimport { FramingRootComponent } from './framing-components/root.component';\n\n/**\n *\n */\nexport class FramingNgModule {\n\n private static _nextId: number = 1;\n\n // ========================================\n // private properties\n // ========================================\n\n private _ngModule: NgModule = {\n imports: [],\n declarations: [],\n exports: [],\n providers: [],\n bootstrap: [],\n entryComponents: [],\n };\n\n private _root: boolean = false;\n\n private _rootComponent: Type<any>;\n\n private _rootComponentConfig: FramingRootComponentConfig;\n\n private _routes: Route[] = [];\n\n private _routeConfig: FramingRouteConfig;\n\n static get defaultPathMatch(): string { return 'prefix'; }\n\n // ========================================\n // public methods\n // ========================================\n\n public ngModule(ngModule?: NgModule): FramingNgModule {\n if (ngModule) {\n _.defaults(this._ngModule, ngModule);\n _.each(_.filter(_.keys(ngModule), (key: string) => { return _.isArray((ngModule as any)[key]); }), (key) => {\n (this._ngModule as any)[key] = _.uniqWith((this._ngModule as any)[key].concat(_.reject((ngModule as any)[key], _.isNil)), _.isEqual);\n });\n }\n\n return this;\n }\n\n public bootstrap(bootstrap: any[]): FramingNgModule {\n const flattened = [].concat.apply([], bootstrap);\n this._ngModule.bootstrap = _.uniqWith(this._ngModule.bootstrap.concat(_.reject(flattened, _.isNil)), _.isEqual);\n\n return this;\n }\n\n /**\n * Add a child route. Adds to '' route by default\n */\n public child(child: Route): FramingNgModule;\n public child(child: Route, parent: Route): FramingNgModule;\n public child(child: Route, parent: Route[]): FramingNgModule;\n public child(child: Route, parent?: Route | Route[]): FramingNgModule {\n let parentRoute = this.getOrAddRouteOverload(parent);\n\n if (!parentRoute.children) { parentRoute.children = []; }\n\n if (!parentRoute.component) {\n parentRoute.component = FramingEmptyParentComponent;\n }\n\n this.getOrAddRoute(child, parentRoute.children);\n\n return this;\n }\n\n /**\n * Adds to imports\n * Adds to route\n */\n public children(children: Route[]): FramingNgModule;\n public children(children: Route[], parent: Route): FramingNgModule;\n public children(children: Route[], parent: Route[]): FramingNgModule;\n public children(children: Route[], parent?: Route | Route[]): FramingNgModule {\n _.each(children, (child) => {\n this.child(child, parent);\n });\n\n return this;\n }\n\n /**\n * Adds as component on route\n */\n public component(component: Type<any>): FramingNgModule;\n public component(component: Type<any>, route: Route): FramingNgModule;\n public component(component: Type<any>, route: Route[]): FramingNgModule;\n public component(component: Type<any>, route?: Route | Route[]): FramingNgModule {\n if (component) {\n let routeConfig = this.getOrAddRouteOverload(route);\n routeConfig.component = component;\n }\n\n return this;\n }\n\n /**\n * Adds as component on route\n * Adds component to declarations\n */\n public componentAndDeclare(component: Type<any>): FramingNgModule;\n public componentAndDeclare(component: Type<any>, route: Route): FramingNgModule;\n public componentAndDeclare(component: Type<any>, route: Route[]): FramingNgModule;\n public componentAndDeclare(component: Type<any>, route?: Route | Route[]): FramingNgModule {\n return this.componentAndDeclaration(component, route);\n }\n\n /**\n * Adds as component on route\n * Adds component to declarations\n */\n public componentAndDeclaration(component: Type<any>): FramingNgModule;\n public componentAndDeclaration(component: Type<any>, route: Route): FramingNgModule;\n public componentAndDeclaration(component: Type<any>, route: Route[]): FramingNgModule;\n public componentAndDeclaration(component: Type<any>, route?: Route | Route[]): FramingNgModule {\n this.component(component, route);\n if (component) {\n this.declare(component);\n }\n\n return this;\n }\n\n /**\n * Adds containers to route data\n * Adds container components to exports and declarations\n */\n public container(container: string, components: Type<any> | Type<any>[]): FramingNgModule;\n public container(container: string, components: Type<any> | Type<any>[], route: Route): FramingNgModule;\n public container(container: string, components: Type<any> | Type<any>[], route: Route[]): FramingNgModule;\n public container(container: string, components: Type<any> | Type<any>[], route?: Route | Route[]): FramingNgModule {\n let containers: { [key: string]: Type<any> | Type<any>[]} = {};\n containers[container] = components;\n this.containers(containers, route);\n\n return this;\n }\n\n /**\n * Adds containers to route data\n * Adds container components to exports and declarations\n */\n public containers(containers: { [key: string]: Type<any> | Type<any>[] }): FramingNgModule;\n public containers(containers: { [key: string]: Type<any> | Type<any>[] }, route: Route): FramingNgModule;\n public containers(containers: { [key: string]: Type<any> | Type<any>[] }, route: Route[]): FramingNgModule;\n public containers(containers: { [key: string]: Type<any> | Type<any>[] }, route?: Route | Route[]): FramingNgModule {\n for (let key in containers) {\n if (containers.hasOwnProperty(key)) {\n if (_.isNil(containers[key])) {\n delete containers[key];\n }\n }\n }\n\n const routeConfig = this.getOrAddRoute(route);\n if (!routeConfig.resolve) {\n routeConfig.resolve = {};\n }\n if (!routeConfig.resolve.containers) {\n routeConfig.resolve.containers = [];\n }\n\n for (let key in containers) {\n if (containers.hasOwnProperty(key)) {\n const components: Type<any> | Type<any>[] = containers[key];\n if (_.isArray(components)) {\n for (const component of components) {\n routeConfig.resolve.containers.push({ container: key, component });\n }\n } else {\n routeConfig.resolve.containers.push({ container: key, component: components });\n }\n }\n }\n\n return this;\n }\n\n /**\n * Method for appending data to route\n */\n public datum(key: string, datum: any): FramingNgModule;\n public datum(key: string, datum: any, route: Route): FramingNgModule;\n public datum(key: string, datum: any, route: Route[]): FramingNgModule;\n public datum(key: string, datum: any, route?: Route | Route[]): FramingNgModule {\n let data: { [key: string]: Type<any> } = {};\n data[key] = datum;\n this.data(data, route);\n\n return this;\n }\n\n /**\n * Methods for appending data to route\n */\n public data(data: { [key: string]: any }): FramingNgModule;\n public data(data: { [key: string]: any }, route: Route): FramingNgModule;\n public data(data: { [key: string]: any }, route: Route[]): FramingNgModule;\n public data(data: { [key: string]: any }, route?: Route | Route[]): FramingNgModule {\n let routeConfig = this.getOrAddRouteOverload(route);\n\n if (!routeConfig.data) {\n routeConfig.data = {};\n }\n _.merge(routeConfig.data, data);\n\n return this;\n }\n\n /**\n * Method for appending data resolve to route\n */\n public resolve(key: string, resolve: string | Type<any>): FramingNgModule;\n public resolve(key: string, resolve: string | Type<any>, route: Route): FramingNgModule;\n public resolve(key: string, resolve: string | Type<any>, route: Route[]): FramingNgModule;\n public resolve(key: string, resolve: string | Type<any>, route?: Route | Route[]): FramingNgModule {\n let resolves: { [key: string]: string | Type<any> } = {};\n resolves[key] = resolve;\n this.resolves(resolves, route);\n\n return this;\n }\n\n /**\n * Method for appending data resolve to route\n */\n public resolves(resolves: { [key: string]: string | Type<any> }): FramingNgModule;\n public resolves(resolves: { [key: string]: string | Type<any> }, route: Route): FramingNgModule;\n public resolves(resolves: { [key: string]: string | Type<any> }, route: Route[]): FramingNgModule;\n public resolves(resolves: { [key: string]: string | Type<any> }, route?: Route | Route[]): FramingNgModule {\n let routeConfig = this.getOrAddRouteOverload(route);\n\n if (!routeConfig.resolve) {\n routeConfig.resolve = {};\n }\n _.merge(routeConfig.resolve, resolves);\n\n return this;\n }\n\n public declare(declaration: Type<any> | Type<any>[]): FramingNgModule {\n return this.declaration(declaration);\n }\n\n public declaration(declaration: Type<any> | Type<any>[]): FramingNgModule {\n return this.declarations(_.isArray(declaration) ? declaration : [ declaration ]);\n }\n\n public declarations(declarations: Type<any>[]): FramingNgModule {\n const flattened = [].concat.apply([], declarations);\n this._ngModule.declarations = _.uniqWith(this._ngModule.declarations.concat(_.reject(flattened, _.isNil)), _.isEqual);\n\n return this;\n }\n\n public declareAndExport(declaration: Type<any> | Type<any>[]): FramingNgModule {\n return this.declarationAndExport(declaration);\n }\n\n public declarationAndExport(declaration: Type<any> | Type<any>[]): FramingNgModule {\n return this.declarationsAndExports(_.isArray(declaration) ? declaration : [ declaration ]);\n }\n\n public declarationsAndExports(declarations: Type<any>[]): FramingNgModule {\n this.declarations(declarations);\n this.exports(declarations);\n\n return this;\n }\n\n public declareAndEntryComponent(declaration: Type<any> | Type<any>[]): FramingNgModule {\n return this.declarationAndEntryComponent(declaration);\n }\n\n public declarationAndEntryComponent(declaration: Type<any> | Type<any>[]): FramingNgModule {\n return this.declarationsAndEntryComponents(_.isArray(declaration) ? declaration : [ declaration ]);\n }\n\n public declarationsAndEntryComponents(declarations: Type<any>[]): FramingNgModule {\n this.declarations(declarations);\n this.entryComponents(declarations);\n\n return this;\n }\n\n public entryComponent(entryComponent: Type<any> | Type<any>[]): FramingNgModule {\n return this.entryComponents(_.isArray(entryComponent) ? entryComponent : [ entryComponent ]);\n }\n\n public entryComponents(entryComponents: Type<any>[]): FramingNgModule {\n const flattened = [].concat.apply([], entryComponents);\n this._ngModule.entryComponents = _.uniqWith(this._ngModule.entryComponents.concat(_.reject(flattened, _.isNil)), _.isEqual);\n\n return this;\n }\n\n public export(e: Type<any> | Type<any>[]): FramingNgModule {\n return this.exports(_.isArray(e) ? e : [ e ]);\n }\n\n public exports(exports: Type<any>[]): FramingNgModule {\n const flattened = [].concat.apply([], exports);\n this._ngModule.exports = _.uniqWith(this._ngModule.exports.concat(_.reject(flattened, _.isNil)), _.isEqual);\n\n return this;\n }\n\n public import(i: Type<any> | Type<any>[] | ModuleWithProviders | ModuleWithProviders): FramingNgModule {\n return this.imports(_.isArray(i) ? i : [ i ]);\n }\n\n public imports(imports: (Type<any> | ModuleWithProviders)[]): FramingNgModule {\n const flattened = [].concat.apply([], imports);\n this._ngModule.imports = _.uniqWith(this._ngModule.imports.concat(_.reject(flattened, _.isNil)), _.isEqual);\n\n return this;\n }\n\n public importAndExport(m: Type<any> | Type<any>[]): FramingNgModule {\n return this.importsAndExports(_.isArray(m) ? m : [ m ]);\n }\n\n public importsAndExports(modules: Type<any>[]): FramingNgModule {\n this.imports(modules);\n this.exports(modules);\n\n return this;\n }\n\n public provide(provider: Provider | Provider[] | Type<any> | Type<any>[]): FramingNgModule {\n return this.provider(provider);\n }\n\n public provider(provider: Provider | Provider[] | Type<any> | Type<any>[]): FramingNgModule {\n return this.providers(_.isArray(provider) ? provider : [ provider ]);\n }\n\n public providers(providers: Provider[] | Type<any>[]): FramingNgModule {\n const flattened = [].concat.apply([], providers);\n this._ngModule.providers = _.uniqWith(this._ngModule.providers.concat(_.reject(flattened, _.isNil)), _.isEqual);\n\n return this;\n }\n\n /**\n * Adds component to bootstrap\n * Defaults route to path '', pathMatch: 'full'\n */\n public root(rootComponent?: Type<any>, config?: FramingRootComponentConfig): FramingNgModule {\n this._root = true;\n this._rootComponentConfig = config || {};\n _.defaults(this._rootComponentConfig, { hybrid: false });\n this._rootComponent = rootComponent || FramingRootComponent;\n\n return this;\n }\n\n /**\n * Creates Routes array with single route\n * Adds RouterModule.forRoot(routes) or RouterModule.forChild(routes) to imports\n * Adds all resolve services as providers\n */\n public route(route?: Route, config?: FramingRouteConfig): FramingNgModule {\n this.getOrAddRoute(route);\n\n if (this._routeConfig) {\n if (config) {\n _.merge(this._routeConfig, config);\n }\n } else {\n this._routeConfig = config || {};\n _.defaults(this._routeConfig, { forRoot: false });\n }\n\n return this;\n }\n\n public routes(routes: Route[], config?: FramingRouteConfig): FramingNgModule {\n _.each(routes, (route) => {\n this.route(route, config);\n });\n\n return this;\n }\n\n public frameRoute(route: Route, ...framers: Framer<any, any>[]): FramingNgModule;\n public frameRoute(route: Route[], ...framers: Framer<any, any>[]): FramingNgModule;\n public frameRoute(route: Route | Route[], ...framers: Framer<any, any>[]): FramingNgModule {\n this.buildFramers(framers, this.getOrAddRouteOverload(route));\n\n return this;\n }\n\n /**\n * Returns the route if it exists.\n */\n public getRoute(route: Route = {}, array?: Route[]): Route {\n /* tslint:disable:no-param-reassign */\n if (!array) { array = this._routes; }\n /* tslint:enable:no-param-reassign */\n\n _.defaults(route, { path: '', pathMatch: FramingNgModule.defaultPathMatch });\n\n return _.find(array, (m) => { return m.path === route.path && m.pathMatch === route.pathMatch; });\n }\n\n /**\n * Returns the route. Creates it if it does not exist.\n */\n public getOrAddRoute(route: Route = {}, array?: Route[]): Route {\n /* tslint:disable:no-param-reassign */\n if (!array) { array = this._routes; }\n /* tslint:enable:no-param-reassign */\n\n _.defaults(route, { path: '', pathMatch: FramingNgModule.defaultPathMatch });\n\n let r = _.find(array, (m) => { return m.path === route.path && m.pathMatch === route.pathMatch; });\n\n if (r) {\n _.merge(r, route);\n return r;\n } else {\n array.push(route);\n\n return route;\n }\n }\n\n /**\n * Run framers.\n */\n public frame(...framers: Framer<any, any>[]): FramingNgModule {\n this.buildFramers(framers);\n\n return this;\n }\n\n public use(...framers: Framer<any, any>[]): FramingNgModule {\n return this.frame(...framers);\n }\n\n /**\n * Builds @NgModule() config in the following order:\n * - Route framers\n * - Root\n * - Route\n */\n public build(): NgModule {\n this.buildRouteFramers(this._routes);\n this.buildRoot();\n this.buildContainers(this._routes);\n this.buildRoute();\n this.inspectModule();\n\n return this._ngModule;\n }\n\n // ========================================\n // private methods\n // ========================================\n\n private inspectModule(): void {\n this._routes.forEach((r) => this.inspectRoute(r));\n }\n\n private inspectRoute(route: Route): void {\n if (route.component === undefined && route.redirectTo === undefined && _.isEmpty(route.children) && route.loadChildren === undefined) {\n console.error(\n `Looks like you have a badly configured route in a framed module.\n One of the following must be provided: component, redirectTo, children or loadChildren`,\n { route, self: this });\n }\n\n if (route.children) {\n route.children.forEach((c) => this.inspectRoute(c));\n }\n }\n\n private buildRoot(): void {\n let m: NgModule = this._ngModule;\n\n if (this._root) {\n m.imports = _.uniqWith(m.imports.concat([\n BrowserModule.withServerTransition({\n appId: 'app',\n }),\n FormsModule,\n ]), _.isEqual);\n\n m.bootstrap = _.uniqWith(m.bootstrap.concat([ this._rootComponent ]), _.isEqual);\n } else {\n m.imports = _.uniqWith(m.imports.concat([\n CommonModule,\n ]), _.isEqual);\n }\n\n m.imports = _.uniqWith(m.imports.concat([ FramingComponentsModule ]), _.isEqual);\n }\n\n private buildFramers(framers: Framer<any, any>[], route?: Route): void {\n for (let framer of framers) {\n this.buildFramer(framer, route);\n }\n }\n\n private buildFramer(framer: Framer<any, any>, route: Route): void {\n if (!framer.framed) {\n framer.runFraming(this, route || this.getRoute());\n }\n }\n\n /**\n * Builds framers that were manually added to route data.\n */\n private buildRouteFramers(routes: Route[]): void {\n for (let route of routes) {\n if (route.data) {\n for (let key in route.data) {\n if (route.data.hasOwnProperty(key)) { // tslint: forin\n let prop = route.data[key];\n if (prop && prop._frame !== undefined) {\n // this is a framer attached to route data\n this.buildFramer(prop as Framer<any, any>, route);\n }\n }\n }\n }\n if (route.children) {\n this.buildRouteFramers(route.children);\n }\n }\n }\n\n private buildContainers(routes: Route[]): void {\n for (let route of routes) {\n if (route.resolve && route.resolve.containers) {\n const containers: FramingContainerOutletContent[] = route.resolve.containers;\n for (const container of containers) {\n const containerId = FramingNgModule._nextId++;\n container.id = '' + containerId;\n }\n const resolveId = FramingNgModule._nextId++;\n this.provide({\n provide: 'containerResolver' + resolveId,\n useFactory: (i: Injector) => new FramingContainerOutletResolver(containers, i),\n deps: [ Injector ],\n });\n route.resolve.containers = 'containerResolver' + resolveId;\n }\n if (route.children) {\n this.buildContainers(route.children);\n }\n }\n }\n\n private buildRoute(): void {\n if (this._routes.length > 0) {\n // re-order routes so that full routes are first\n let fullRoutes: Route[] = [];\n let prefixRoutes: Route[] = [];\n this._routes.forEach((route) => {\n if (route.pathMatch && route.pathMatch === 'full') {\n fullRoutes.push(route);\n } else if (!route.pathMatch || route.pathMatch === 'prefix') {\n prefixRoutes.push(route);\n } else {\n console.warn('Unknown pathMatch on route', route);\n }\n this._routes = [];\n this._routes = this._routes.concat(fullRoutes);\n this._routes = this._routes.concat(prefixRoutes);\n });\n\n const routing: ModuleWithProviders = this._root || (this._routeConfig && this._routeConfig.forRoot) ?\n RouterModule.forRoot(this._routes, this._routeConfig ? this._routeConfig.extraRootRouterOptions : undefined) :\n RouterModule.forChild(this._routes);\n\n this.imports([ routing ]);\n\n if (this._routeConfig && this._routeConfig.forRoot && !this._root) {\n this.exports([ RouterModule ]); // export RouterModule from AppRoutingModule\n }\n }\n }\n\n private getOrAddRouteOverload(route: Route | Route[]): Route {\n if (_.isArray(route)) {\n if (route.length) {\n let result: Route;\n\n /* tslint:disable:prefer-for-of */\n result = this.getOrAddRoute(route[0]);\n for (let i = 1; i < route.length; i++) {\n if (!result.children) { result.children = []; }\n result = this.getOrAddRoute(route[i], result.children);\n }\n /* tslint:enable:prefer-for-of */\n\n return result;\n } else {\n return this.getOrAddRoute();\n }\n } else {\n return this.getOrAddRoute(route);\n }\n }\n}\n","import * as _ from 'lodash';\n\nexport abstract class FramerHelper {\n\n private static _nextId: number = 1;\n\n /**\n * A unique framer id for this this.\n */\n public framerHelperId: number;\n\n /**\n * A unique identifier string for this framer helper instance.\n */\n public get framerHelperIdent(): string {\n return _.camelCase(`framerHelper-${(this as any).__proto__.constructor.name}-${this.framerHelperId}`);\n }\n\n // ========================================\n // constructor\n // ========================================\n\n public constructor() {\n this.framerHelperId = FramerHelper._nextId++;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { FramingEmptyParentComponent } from './empty-parent.component';\nimport { FramingRootComponent } from './root.component';\n\n@NgModule({\n imports: [\n RouterModule,\n ],\n declarations: [\n FramingEmptyParentComponent,\n FramingRootComponent,\n ],\n exports: [\n FramingEmptyParentComponent,\n FramingRootComponent,\n ],\n})\nexport class FramingComponentsModule {}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-root',\n template: '<router-outlet></router-outlet>',\n})\nexport class FramingRootComponent {}\n","import { Component } from '@angular/core';\n\n/**\n * @experimental\n */\n@Component({\n selector: 'empty-parent-component',\n template: '<router-outlet></router-outlet>',\n})\nexport class FramingEmptyParentComponent {}\n","import { Injectable, Injector } from '@angular/core';\nimport { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';\n\nimport { FramingContainerOutletContent } from './container-outlet-content';\n\n@Injectable()\nexport class FramingContainerOutletResolver implements Resolve<FramingContainerOutletContent[]> {\n\n constructor(\n private containers: FramingContainerOutletContent[],\n private injector: Injector,\n ) {}\n\n /**\n * Resolve hook.\n */\n public resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): FramingContainerOutletContent[] {\n // set the injector in each container\n for (let container of this.containers) {\n container.injector = this.injector;\n }\n return this.containers;\n }\n}\n","import { ANALYZE_FOR_ENTRY_COMPONENTS, ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { FramingContainerOutletDirective } from './container-outlet.directive';\nimport { FramingContainerOutletService } from './container-outlet.service';\n\n@NgModule({\n declarations: [ FramingContainerOutletDirective ],\n exports: [ FramingContainerOutletDirective ],\n})\nexport class FramingContainerOutletModule {\n static withEntryComponents(...components: any[]): ModuleWithProviders {\n return {\n ngModule: FramingContainerOutletModule,\n providers: [\n { provide: ANALYZE_FOR_ENTRY_COMPONENTS, useValue: components, multi: true },\n ],\n };\n }\n\n static forRoot(): ModuleWithProviders {\n return {\n ngModule: FramingContainerOutletModule,\n providers: [ FramingContainerOutletService ],\n };\n }\n}\n","import {\n ComponentFactoryResolver,\n ComponentRef,\n Directive,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewContainerRef,\n} from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\n\nimport { AnonymousSubscription } from 'rxjs/Subscription';\n\nimport { FramingContainerOutlet } from './container-outlet';\nimport { FramingContainerOutletContent } from './container-outlet-content';\nimport { FramingContainerOutletService } from './container-outlet.service';\n\nimport * as _ from 'lodash';\n\nclass ActivatedContent {\n content: FramingContainerOutletContent;\n ref: ComponentRef<any>;\n}\n\n@Directive({\n selector: '[framingContainerOutlet]',\n})\nexport class FramingContainerOutletDirective implements OnInit, OnDestroy, FramingContainerOutlet {\n @Input() framingContainerOutlet: string;\n @Input() optionalContainer: boolean;\n @Input() useViewInjector: boolean;\n @Input() content: any[][];\n\n @Output() onComponents: EventEmitter<ComponentRef<any>[]> = new EventEmitter<ComponentRef<any>[]>();\n\n private _activated: ActivatedContent[] = [];\n\n private _subscriptions: AnonymousSubscription[] = [];\n\n constructor(\n private _view: ViewContainerRef,\n private _containerService: FramingContainerOutletService,\n private _router: Router,\n ) {}\n\n containerName(): string { return this.framingContainerOutlet; }\n\n isActivated(): boolean { return this._activated.length > 0; }\n\n ngOnInit(): void {\n if (!this.framingContainerOutlet) {\n console.warn('FramingContainerOutlet without a container name');\n } else {\n if (this.framingContainerOutlet[0] === '\\'') {\n console.warn(`FramingContainerOutlet name \"${this.framingContainerOutlet}\" starts with a qoute`);\n }\n this._subscriptions.push(this._containerService.contents$.subscribe((contents: FramingContainerOutletContent[]) => this.onContent(contents)));\n }\n\n this._subscriptions.push(this._router.events.subscribe((event) => {\n if (event instanceof NavigationEnd) {\n if (!this.optionalContainer && !this.isActivated()) {\n console.warn(`No content for required FramingContainerOutlet '${this.framingContainerOutlet}' found`);\n }\n }\n }));\n }\n\n ngOnDestroy(): void {\n this._activated.forEach((a) => this.deactivate(a));\n this._subscriptions.forEach((s) => s.unsubscribe());\n }\n\n private onContent(allContents: FramingContainerOutletContent[]): void {\n const contents: FramingContainerOutletContent[] = allContents.filter((c) => _.isEqual(c.container, this.framingContainerOutlet));\n\n // remove all content that is no longer active\n this._activated.forEach((a) => {\n if (contents.findIndex((content) => content === a.content) === -1) {\n this.deactivate(a);\n }\n });\n this._activated = this._activated.filter((a) => !!a.ref);\n\n // now setup the new activated components\n let i = 0;\n for (let content of contents) {\n if (this._activated.length > i) {\n if (this._activated[i].content !== content) {\n // look for this content\n const activatedIndex = this._activated.findIndex((a) => a.content === content);\n if (activatedIndex === -1) {\n // activate this content at i\n this._activated.splice(i, 0, { content, ref: this.activate(content) });\n } else if (activatedIndex > i) {\n // move content from activatedIndex to i\n const _activated = this._activated.splice(activatedIndex, 1);\n this._activated.splice(i, 0, ..._activated);\n const view = this._view.detach(activatedIndex);\n this._view.insert(view, i);\n } else {\n console.error('Logic error in FramingContainerOutlet!');\n }\n }\n } else {\n // activate this content\n const ref = this.activate(content);\n if (ref) {\n this._activated.push({ content, ref });\n }\n }\n i++;\n }\n\n this.onComponents.emit(this._activated.map((a) => a.ref));\n }\n\n private activate(content: FramingContainerOutletContent, i?: number): ComponentRef<any> {\n try {\n const injector = (!this.useViewInjector && content.injector) ? content.injector : this._view.parentInjector;\n const factory = injector.get(ComponentFactoryResolver).resolveComponentFactory(content.component);\n let ref = this._view.createComponent(factory, i, injector, this.content);\n try {\n ref.changeDetectorRef.detectChanges();\n } catch (e) {\n console.error(`detectChanges failed on activated component in FramingContainerOutlet '${this.framingContainerOutlet}'`, { e, component: content.component });\n }\n return ref;\n } catch (e) {\n console.error(`Failed to activate component in FramingContainerOutlet '${this.framingContainerOutlet}'`, { e, component: content.component });\n return undefined;\n }\n }\n\n private deactivate(activated: ActivatedContent): void {\n activated.ref.destroy();\n activated.ref = null;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, NavigationEnd, Router } from '@angular/router';\nimport { Observable, ReplaySubject } from 'rxjs/Rx';\nimport { AnonymousSubscription } from 'rxjs/Subscription';\n\nimport { FramingContainerOutletContent } from './container-outlet-content';\n\nimport * as _ from 'lodash';\n\n@Injectable()\nexport class FramingContainerOutletService {\n\n public get contents$(): Observable<FramingContainerOutletContent[]> { return this.contentsSubject.asObservable(); }\n\n private contentsSubject: ReplaySubject<FramingContainerOutletContent[]> = new ReplaySubject<FramingContainerOutletContent[]>();\n private contents: FramingContainerOutletContent[] = [];\n private routeContents: FramingContainerOutletContent[] = [];\n\n private subscriptions: AnonymousSubscription[] = [];\n\n constructor(\n private router: Router,\n ) {\n this.subscriptions.push(this.router.events.subscribe((event) => {\n if (event instanceof NavigationEnd) {\n this.onNavigationEnd();\n }\n }));\n }\n\n public hasContent(container: string): boolean {\n return !!this.contents.filter((c) => _.isEqual(c.container, container)).length;\n }\n\n public activate(content: FramingContainerOutletContent): () => void {\n this.contents.push(content);\n this.contentsSubject.next(_.clone(this.contents));\n return () => { this.deactivate(content); };\n }\n\n private deactivate(content: FramingContainerOutletContent): void {\n this.contents = this.contents.filter((e) => e !== content);\n this.contentsSubject.next(_.clone(this.contents));\n }\n\n private onNavigationEnd(): void {\n let newRouteContents: FramingContainerOutletContent[] = [];\n this.resolveRouteContents(this.router.routerState.snapshot.root, newRouteContents);\n\n newRouteContents = _.uniqWith(newRouteContents, _.isEqual);\n\n const newContents = _.differenceWith(newRouteContents, this.routeContents, _.isEqual);\n const removedContents = _.differenceWith(this.routeContents, newRouteContents, _.isEqual);\n\n newContents.forEach((c) => this.activate(c));\n removedContents.forEach((c) => this.deactivate(c));\n\n this.routeContents = newRouteContents;\n }\n\n private resolveRouteContents(snapshot: ActivatedRouteSnapshot, routeContents: FramingContainerOutletContent[]): void {\n if (snapshot.data && (snapshot.data as any).containers) {\n const containers: FramingContainerOutletContent[] = (snapshot.data as any).containers;\n for (const container of containers) {\n routeContents.push(container);\n }\n }\n for (let child of snapshot.children) {\n this.resolveRouteContents(child, routeContents);\n }\n }\n}\n","import { ANALYZE_FOR_ENTRY_COMPONENTS, ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { FramingComponentOutletDirective } from './component-outlet.directive';\n\n@NgModule({\n declarations: [ FramingComponentOutletDirective ],\n exports: [ FramingComponentOutletDirective ],\n})\nexport class FramingComponentOutletModule {\n static withEntryComponents(...components: any[]): ModuleWithProviders {\n return {\n ngModule: FramingComponentOutletModule,\n providers: [\n { provide: ANALYZE_FOR_ENTRY_COMPONENTS, useValue: components, multi: true },\n ],\n };\n }\n}\n","import {\n ComponentFactoryResolver,\n ComponentRef,\n Directive,\n EventEmitter,\n Injector,\n Input,\n NgModuleFactory,\n NgModuleRef,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n Type,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { FramingComponentOutlet } from './component-outlet';\n\n@Directive({\n selector: '[framingComponentOutlet]',\n})\nexport class FramingComponentOutletDirective implements OnChanges, OnDestroy, FramingComponentOutlet {\n @Input() framingComponentOutlet: Type<any>;\n @Input() injector: Injector;\n @Input() content: any[][];\n @Input() ngModuleFactory: NgModuleFactory<any>;\n\n @Output() onComponent: EventEmitter<ComponentRef<any>> = new EventEmitter<ComponentRef<any>>();\n\n private _componentRef: ComponentRef<any>;\n private _moduleRef: NgModuleRef<any>;\n\n constructor(\n private _view: ViewContainerRef,\n ) {}\n\n isActivated(): boolean { return !!this._componentRef; }\n\n ngOnChanges(changes: SimpleChanges): void {\n let activate = false;\n if ((changes as any).ngModuleFactory) {\n if (this._moduleRef) { this._moduleRef.destroy(); }\n if (this.ngModuleFactory) {\n const injector = this.injector || this._view.parentInjector;\n this._moduleRef = this.ngModuleFactory.create(injector);\n } else {\n this._moduleRef = undefined;\n }\n activate = true;\n }\n\n if ((changes as any).framingComponentOutlet.currentValue !== (changes as any).framingComponentOutlet.previousValue) {\n activate = true;\n }\n\n if (activate) {\n this.activate(this.framingComponentOutlet);\n }\n }\n\n ngOnDestroy(): void {\n this.deactivate();\n if (this._moduleRef) { this._moduleRef.destroy(); }\n }\n\n private activate(component: Type<any>): void {\n this.deactivate();\n\n if (!component) {\n return;\n }\n\n try {\n const injector = this.injector || this._view.parentInjector;\n const factory = injector.get(ComponentFactoryResolver).resolveComponentFactory(component);\n this._componentRef = this._view.createComponent(factory, this._view.length, injector, this.content);\n this.onComponent.emit(this._componentRef);\n try {\n this._componentRef.changeDetectorRef.detectChanges();\n } catch (e) {\n console.error(`detectChanges failed on activated component in FramingComponentOutlet`, { e, component });\n return;\n }\n } catch (e) {\n console.error(`Failed to activate component in FramingComponentOutlet`, { e, component });\n return;\n }\n }\n\n private deactivate(): void {\n if (this._componentRef) {\n this._view.remove(this._view.indexOf(this._componentRef.hostView));\n this._componentRef.destroy();\n }\n this._view.clear();\n this._componentRef = undefined;\n }\n}\n","import { Type } from '@angular/core';\n\nimport { FramingDevToolsController as C } from './framing-dev-tools.controller';\nimport { FramingDevToolsModel as M } from './framing-dev-tools.model';\nimport { FramingDevToolsView as V } from './framing-dev-tools.view';\nimport { Framer } from '../../framer';\nimport { FramingNgModule } from '../../framing-ng-module';\n\nexport class FramingDevToolsFeature extends Framer<M, V> {\n public get defaultModel(): M {\n return {};\n }\n\n public get defaultView(): V {\n return {};\n }\n\n public frame(framing: FramingNgModule): void {}\n\n public framerOnResolveRoute(): void {\n let framingDevToolsController: C;\n framingDevToolsController = this.injector.get(C);\n }\n\n // ========================================\n // internal framing methods (don't touch!)\n // ========================================\n\n public get framerName(): string { return 'FramingDevTools'; }\n\n public get defaultController(): Type<C> { return C; }\n}\n","import { Injector, Type } from '@angular/core';\nimport { ActivatedRoute, ActivatedRouteSnapshot, NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Route, Router, RouterStateSnapshot, UrlSegment } from '@angular/router';\n\nimport { Controller } from './controller';\nimport { Frame } from './frame';\nimport { FramingNgModule } from './framing-ng-module';\n\nimport * as _ from 'lodash';\nimport { FramingTools } from './devtools';\n\n/**\n * @description This is a description\n */\nexport abstract class Framer<Model, View> {\n private static _nextId: number = 1;\n private framingDevTools: FramingTools = FramingTools.Instance;\n\n // ========================================\n // public properties\n // ========================================\n\n /**\n * The name of this framer.\n */\n public abstract get framerName(): string;\n\n /**\n * Model accessor.\n */\n public get theModel(): Model { return this._model; }\n\n /**\n * View accessor.\n */\n public get theView(): View { return this._view; }\n\n /**\n * Controller accessor.\n */\n public get theController(): Type<Controller<Model, View>> { return this._controller; }\n\n /**\n * When true, framing will create a frame for this framer.\n */\n public get createFrame(): boolean { return true; }\n\n /**\n * When true, framing will use multi on all providers so multiple framers of the same type can be setup on the same module.\n */\n public get multiFramer(): boolean { return false; }\n\n /**\n * When true, framing will setup the controller as a provider by its type.\n */\n public get provideControllerByType(): boolean { return true; }\n\n /**\n * When true, framing will add the model to the route data.\n */\n public get addModelToRouteData(): boolean { return false; }\n\n /**\n * When true, framing will add the view to the route data.\n */\n public get addViewToRouteData(): boolean { return false; }\n\n /**\n * When true, framing will add the frame to the route data.\n */\n public get addFrameToRouteData(): boolean { return false; }\n\n /**\n * The default model.\n */\n public get defaultModel(): Model { return undefined; }\n\n /**\n * The default view.\n */\n public get defaultView(): View { return undefined; }\n\n /**\n * The default controller.\n */\n public get defaultController(): Type<Controller<Model, View>> { return undefined; }\n\n /**\n * 'require': framing will attach the default route, creating it if it doesn't yet exist, if not route is attached to this framer (default behavior)\n * 'auto': framing will attach the default route if available if not route is attached to this framer\n * 'none': framing will not attach a route to this framer\n */\n public get routeRule(): ('require' | 'auto' | 'none') { return 'require'; }\n\n /**\n * A unique framer id for this framer.\n */\n public get framerId(): number { return this._framerId; }\n\n /**\n * A unique identifier string for this framer instance.\n */\n public get framerIdent(): string { return `${this.framerName}Framer-${this._framerId}`; }\n\n /**\n * True if framing() has been called.\n */\n public get framed(): boolean { return this._framed; }\n\n /**\n * The injector (available on and after framerOnResolveRoute or framerOnControllerInit, whichever comes first)\n */\n public get injector(): Injector { return this._injector; }\n\n /**\n * The framer's route, if attached to a route, otherwise undefined\n * Valid ONLY during the runFraming() and framing() functions\n */\n public get route(): Route { return this._route; }\n\n // ========================================\n // private properties\n // ========================================\n\n /**\n * A unique framer id for this framer.\n */\n private _framerId: number;\n\n /**\n * True if framing() has been called.\n */\n private _framed: boolean = false;\n\n /**\n * The model.\n */\n private _model: Model;\n\n /**\n * The view.\n */\n private _view: View;\n\n /**\n * The controller.\n */\n private _controller: Type<Controller<Model, View>>;\n\n /**\n * The frame.\n */\n private _frame: Frame;\n\n /**\n * The framer's injector.\n */\n private _injector: Injector;\n\n /**\n * The framer's route, if attached to a route, otherwise undefined\n * Valid ONLY during the runFraming() and framing() functions\n */\n private _route: Route;\n\n /**\n * Reference to the framer's FramingNgModule.\n * Valid ONLY during the framing() function\n */\n private _framing: FramingNgModule;\n\n // ========================================\n // public static methods\n // ========================================\n\n /**\n * Helper function to build the URL of an ActivatedRouteSnapshot\n */\n public static buildUrlLink(route: ActivatedRouteSnapshot): string {\n if (!route) { return '/'; }\n let urls: UrlSegment[] = [];\n /* tslint:disable:no-param-reassign */\n for (; route.parent; route = route.parent) {\n /* tslint:enable:no-param-reassign */\n urls = urls.concat(route.url.reverse());\n }\n urls = urls.reverse();\n return '/' + urls.join('/');\n }\n\n // ========================================\n // public methods\n // ========================================\n\n /**\n * Model chaining function.\n */\n public model(model?: Model): Framer<Model, View> {\n _.merge(this._model, model);\n return this;\n }\n\n /**\n * View chaining function.\n */\n public view(view?: View): Framer<Model, View> {\n _.merge(this._view, view);\n return this;\n }\n\n /**\n * Controller chaining function.\n */\n public controller(controller?: Type<Controller<Model, View>>): Framer<Model, View> {\n if (controller) { this._controller = controller; }\n return this;\n }\n\n /**\n * The frame function.\n */\n public abstract frame(framing: FramingNgModule): void;\n\n /**\n * Framer on resolve route function called when framer's route is resolved.\n * Injector is set before during this call.\n * Not called if framer is not attached to a route.\n * To be overwritten if needed.\n */\n public framerOnResolveRoute(): void {}\n\n /**\n * Framer on controller init function is called when the controller is first injected.\n * To be overwritten if needed.\n */\n public framerOnControllerInit(controller: Controller<Model, View>): void {}\n\n /**\n * Calls derived framing()\n */\n public runFraming(framing: FramingNgModule, routeParam?: Route): void {\n if (this._framed) {\n console.warn(`runFraming() called multiple times on framer '${this.framerIdent}'`);\n return;\n }\n\n this._framed = true; // mark this framer to framed\n\n if (this.routeRule === 'auto') {\n // set the framer's attached route (if any)\n this._route = routeParam;\n } else if (this.routeRule === 'require') {\n // set the framer's attached route to the supplied route or create one if it doesn not exist\n if (routeParam) {\n this._route = routeParam;\n } else {\n /* tslint:disable:no-param-reassign */\n this._route = routeParam = framing.getOrAddRoute();\n /* tslint:enable:no-param-reassign */\n }\n }\n\n this._framing = framing; // set _framing to framing ONLY for the duration of the controller() function\n try {\n this.frame(framing);\n } catch (e) {\n console.error(`Exception when framing ${this.framerIdent} :`, e);\n this._model = undefined;\n this._view = undefined;\n this._controller = undefined;\n }\n this._framing = undefined;\n\n if (this.routeRule === 'auto') { // check this again incase the framer created a route\n this._route = routeParam;\n }\n\n const self = this;\n\n if (this._controller) {\n // FUTURE\n // this.provideTypeByName(framing, this.framerName + 'Controller', this._controller);\n\n if (this.provideControllerByType) {\n let controllerInstance: Controller<Model, View>;\n\n framing\n .provide({\n provide: this.framerIdent + '-ControllerInternal',\n useClass: this._controller,\n })\n .provide({\n provide: this.framerIdent + '-Controller',\n useFactory: (injector: Injector) => {\n if (controllerInstance) {\n this.framingDevTools.addController(this.framerName, controllerInstance);\n return controllerInstance;\n }\n self._injector = injector;\n controllerInstance = injector.get(this.framerIdent + '-ControllerInternal');\n controllerInstance.initController(this._model, this._view, this._frame, this.framerName, injector);\n this.framerOnControllerInit(controllerInstance);\n this.framingDevTools.addController(this.framerName, controllerInstance);\n return controllerInstance;\n },\n deps: [ Injector ],\n })\n .provide({\n provide: this._controller,\n useExisting: this.framerIdent + '-Controller',\n multi: this.multiFramer && this._controller === this.defaultController,\n });\n\n /* tslint:disable:no-console */\n console.info(`Providing controller for framer ${this.framerIdent} by type`);\n /* tslint:enable:no-console */\n\n if (this.defaultController && this._controller !== this.defaultController) {\n framing.provide({\n provide: this.defaultController,\n useExisting: this.framerIdent + '-Controller',\n multi: this.multiFramer,\n });\n /* tslint:disable:no-console */\n console.info(`Providing controller overload for framer ${this.framerIdent} by default controller type`);\n /* tslint:enable:no-console */\n }\n }\n }\n\n // FUTURE: frame, model & view provided by name\n // this.provideValueByName(framing, this.framerName + 'Frame', this._frame);\n // this.provideValueByName(framing, this.framerName + 'Model', this._model);\n // this.provideValueByName(framing, this.framerName + 'View', this._view);\n\n // FUTURE: model & view provided by type\n // this.provideInstanceByType(framing, this._model);\n // this.provideInstanceByType(framing, this._view);\n\n if (this.route) {\n if (this.addFrameToRouteData) {\n this.addRouteData(framing, this.framerName + 'Frame', this._frame);\n }\n if (this.addModelToRouteData) {\n this.addRouteData(framing, this.framerName + 'Model', this._model);\n }\n if (this.addViewToRouteData) {\n this.addRouteData(framing, this.framerName + 'View', this._view);\n }\n\n if (this._frame) {\n class FrameResolver {\n constructor(\n private router: Router,\n private route: ActivatedRoute,\n injector: Injector,\n ) {\n self._injector = injector;\n }\n\n resolve(routeSnapshot: ActivatedRouteSnapshot, routeStateSnapshot: RouterStateSnapshot): any {\n self._frame.resolveStartSubject.next();\n\n const routeUrl = Framer.buildUrlLink(routeSnapshot);\n const sub = this.router.events.subscribe((event) => {\n if (event instanceof NavigationStart) {\n console.error('Unexpected NavigationStart');\n } else if (event instanceof NavigationEnd) {\n /* tslint:disable:no-console */\n console.info(`Route url for framer ${self.framerIdent} changed to ${routeUrl}`);\n /* tslint:enable:no-console */\n self._frame.routeSnapshot = self.findActivateRouteSnapshot(this.route);\n self._frame.routeUrl = routeUrl;\n self._frame.routeUrlSubject.next(routeUrl);\n self.framerOnResolveRoute();\n self._frame.resolveEndSubject.next();\n } else if (event instanceof NavigationError) {\n self._frame.resolveCancelSubject.next();\n } else if (event instanceof NavigationCancel) {\n self._frame.resolveCancelSubject.next();\n }\n sub.unsubscribe();\n });\n return self._frame;\n }\n }\n\n framing\n .resolve(this.framerIdent, FrameResolver, this.route)\n .provide({\n provide: FrameResolver,\n useFactory: (r: Router, a: ActivatedRoute, i: Injector) => new FrameResolver(r, a, i),\n deps: [ Router, ActivatedRoute, Injector ] });\n }\n }\n\n this._route = undefined; // clear the route so we're not holding any references to its properties\n }\n\n // ========================================\n // constructor\n // ========================================\n\n /**\n * Contructor.\n */\n public constructor(model?: Model, view?: View, controller?: Type<Controller<Model, View>>) {\n this.construct(model, view, controller);\n }\n\n /**\n * Protected construct function for derived construction help.\n */\n protected construct(model?: Model, view?: View, controller?: Type<Controller<Model, View>>): void {\n this._framerId = Framer._nextId++;\n if (this.createFrame) {\n this._frame = new Frame();\n }\n const defaultModel = this.defaultModel;\n this._model = defaultModel ? _.merge(defaultModel, model) : model;\n const defaultView = this.defaultView;\n this._view = defaultView ? _.merge(defaultView, view) : view;\n this._controller = controller || this.defaultController;\n }\n\n /**\n * Protected construct function for derived construction help.\n */\n private findActivateRouteSnapshot(route: ActivatedRoute): ActivatedRouteSnapshot {\n if (!route) {\n console.error('Failed to find activated route snapshot');\n return undefined;\n }\n if (route.snapshot && route.snapshot.data && route.snapshot.data.hasOwnProperty(this.framerIdent)) {\n return route.snapshot;\n }\n return this.findActivateRouteSnapshot(route.firstChild);\n }\n\n /**\n * FUTURE\n */\n // private provideTypeByName(framing: FramingNgModule, name: string, type: any): void {\n // if (type) {\n // framing.provide({ provide: name, useClass: type });\n // /* tslint:disable:no-console */\n // console.info(`Providing ${name} for framer ${this.framerIdent} by name`);\n // /* tslint:enable:no-console */\n // }\n // }\n\n /**\n * FUTURE\n */\n // private provideInstanceByType(framing: FramingNgModule, instance: any): void {\n // if (instance &&\n // (instance as any).__proto__ &&\n // (instance as any).__proto__.constructor &&\n // (instance as any).__proto__.constructor.name !== 'Object') {\n // framing.provide({ provide: (instance as any).__proto__.constructor, useValue: instance });\n // /* tslint:disable:no-console */\n // console.info(`Providing ${(instance as any).__proto__.constructor.name} for framer ${this.framerIdent} by type`);\n // /* tslint:enable:no-console */\n // }\n // }\n\n /**\n * FUTURE\n */\n // private provideValueByName(framing: FramingNgModule, name: string, value: any): void {\n // if (value) {\n // framing.provide({ provide: name, useValue: value });\n // /* tslint:disable:no-console */\n // console.info(`Providing ${name} for framer ${this.framerIdent} by name`);\n // /* tslint:enable:no-console */\n // }\n // }\n\n private addRouteData(framing: FramingNgModule, name: string, value: any): void {\n if (value) {\n const routeConfig = framing.getOrAddRoute(this.route);\n if (routeConfig.data && routeConfig.data[name]) {\n console.warn(`Failed to add ${name} route data for framer ${this.framerIdent}. Data item already exists.`);\n } else {\n framing.datum(name, value, this.route);\n /* tslint:disable:no-console */\n console.info(`Adding ${name} route data for framer ${this.framerIdent}`);\n /* tslint:enable:no-console */\n }\n }\n }\n}\n","import { ActivatedRouteSnapshot } from '@angular/router';\nimport { Observable, ReplaySubject, Subject } from 'rxjs';\n\nexport class Frame {\n\n // ========================================\n // public properties\n // ========================================\n\n /**\n * The route url of the route that this controller is attached to, if any.\n * This value MAY change if the route url changes of the controllerrs route.\n */\n public routeUrl: string;\n\n /**\n * The current activated route snapshot for this frame.\n */\n public routeSnapshot: ActivatedRouteSnapshot;\n\n /**\n * An observable of the route url of the route that this controllerr is attached to, if any.\n */\n public get routeUrl$(): Observable<string> { return this.routeUrlSubject; }\n\n /**\n * Emitted when the frame resolve method starts if this controller is attached to a route.\n */\n public get resolveStart$(): Observable<void> { return this.resolveStartSubject; }\n\n /**\n * Emitted when the frame resolve method ends if this controller is attached to a route.\n */\n public get resolveEnd$(): Observable<void> { return this.resolveEndSubject; }\n\n /**\n * Emitted when the frame resolve method is cancelled if this controller is attached to a route.\n */\n public get resolveCancel$(): Observable<void> { return this.resolveCancelSubject; }\n\n /**\n * Subjects\n */\n public routeUrlSubject: ReplaySubject<string> = new ReplaySubject<string>();\n public resolveStartSubject: Subject<void> = new Subject<void>();\n public resolveEndSubject: Subject<void> = new Subject<void>();\n public resolveCancelSubject: Subject<void> = new Subject<void>();\n}\n","import { Component as AngularComponent, Injector } from '@angular/core';\nimport { Component } from '../../component';\n\nimport { FramingDevToolsController as C } from './framing-dev-tools.controller';\nimport { FramingDevToolsModel as M } from './framing-dev-tools.model';\nimport { FramingDevToolsView as V } from './framing-dev-tools.view';\n\n@AngularComponent({})\nexport class FramingDevToolsComponent extends Component<M, V, C> {\n constructor(controller: C, injector: Injector) {\n super(controller, injector);\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { FramingDevToolsModel as M } from './framing-dev-tools.model';\nimport { FramingDevToolsView as V } from './framing-dev-tools.view';\nimport { Router, NavigationEnd } from '@angular/router';\nimport { Controller } from '../../controller';\nimport { Action } from '../../action';\n\n@Injectable()\nexport class FramingDevToolsController extends Controller<M, V> {\n\n private replayNavigation: boolean = false;\n\n constructor(\n private router: Router,\n ) {\n super();\n }\n\n public onControllerInit(): void {\n this.router.events.subscribe((event: any) => {\n this.handleRouterEvents(event);\n });\n\n this.markForCheck$.subscribe((data) => {\n if (this.model.snapshotUrl && this.model.snapshotUrl !== this.router.routerState.snapshot.url) {\n this.replayNavigation = true;\n this.router.navigate([ this.model.snapshotUrl ]);\n }\n }, (err) => console.error(err) );\n\n }\n\n @Action() private trackRouterState(): void {\n this.model.snapshotUrl = this.router.routerState.snapshot.url;\n }\n\n private handleRouterEvents(event: Event): void {\n if (event instanceof NavigationEnd) {\n if (!this.replayNavigation) {\n this.trackRouterState();\n }\n this.replayNavigation = false;\n }\n }\n}\n","import { FramingTools } from './devtools';\n\nlet framingTools: FramingTools = FramingTools.Instance;\nlet stateRoot: any = {};\nlet onLoad: boolean = true;\n// let controllers: any[] = [];\nconst devTools: any = _createReduxDevtoolsExtension();\nlet isListening: boolean = false;\n\n/* tslint:disable */\nexport function Action(description: string = null, log: boolean = true): Function {\n return function (target: Function, propertyKey: string, descriptor: PropertyDescriptor): PropertyDescriptor {\n if (descriptor === undefined) {\n descriptor = Object.getOwnPropertyDescriptor(target, propertyKey);\n }\n\n let originalMethod = descriptor.value;\n\n descriptor.value = function (): void {\n let args = [];\n let controller: any = this;\n // let controllerIndex: number;\n\n // if (controllers.indexOf(controller) <= -1) {\n // controllers.push(controller);\n // controllerIndex = controllers.length - 1;\n // } else {\n // controllerIndex = controllers.indexOf(controller);\n // }\n\n for (let _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n try {\n listenForChanges();\n } catch(e) {\n console.log('Listen to Devtools failed: ');\n console.log(e);\n }\n\n // Send the initial state if this is the first time connecting to the dev tools\n if (onLoad && log && devTools) {\n onLoad = !onLoad;\n stateRoot[controller._framerName] = controller.model;\n let state = {\n framerName: controller._framerName,\n value: stateRoot,\n }\n try {\n devTools.send((description || propertyKey), state);\n } catch(e) {\n console.log('Send to Devtools failed: ');\n console.log(e);\n }\n }\n\n originalMethod.apply(controller, args);\n\n // Need to log after the method has been ran and state is updated\n if (log && devTools) {\n\n stateRoot[controller._framerName] = controller.model;\n\n let state = {\n framerName: controller._framerName,\n // controllerIndex: controllerIndex,\n value: stateRoot,\n }\n\n try {\n devTools.send((description || propertyKey), state);\n } catch(e) {\n console.log('Send to Devtools failed: ');\n console.log(e);\n }\n }\n\n controller.markForCheck();\n };\n\n return descriptor;\n };\n}\n\n/**\n * Listen for message events being broadcast from the redux devTools\n * Changes state on the correct controller to match the state changes broadcast\n */\nfunction listenForChanges(): void {\n if (isListening || !devTools) return;\n isListening = true;\n\n let connection = devTools.connect();\n connection.subscribe(\n (message: any) => {\n if (!!message.state) {\n let messageState: any = JSON.parse(message.state);\n let messageController: any = framingTools.getControllerByKey(messageState.framerName);\n if (messageController) {\n for (let prop in messageController.model) {\n messageController.model[prop] = messageState.value[messageState.framerName][prop];\n }\n messageController.markForCheck();\n }\n }\n }\n )\n}\n\n/**\n * Returns correct instance of redux dev tools installed\n *\n * @export\n * @returns\n */\nexport function _createReduxDevtoolsExtension() {\n const legacyExtensionKey = 'devToolsExtension';\n const extensionKey = '__REDUX_DEVTOOLS_EXTENSION__';\n\n if (typeof window === 'object' && typeof (window as any)[legacyExtensionKey] !== 'undefined') {\n return (window as any)[legacyExtensionKey];\n }\n else if (typeof window === 'object' && typeof (window as any)[extensionKey] !== 'undefined') {\n return (window as any)[extensionKey];\n }\n else {\n return null;\n }\n}\n","/**\n * Dev tool class used for framing integration with Redux DevTools\n *\n * @class FramingTools\n */\nexport class FramingTools {\n private static _instance: FramingTools;\n public instantiatedControllers: any = {};\n\n public constructor() {}\n\n public static get Instance(): FramingTools {\n return this._instance || (this._instance = new this());\n }\n\n public addController(framerName: string, controller: any): void {\n this.instantiatedControllers[framerName] = controller;\n }\n\n public getAllControllers(): any {\n return this.instantiatedControllers;\n }\n\n public getControllerByKey(key: any): any {\n return this.instantiatedControllers[key] ? this.instantiatedControllers[key] : null;\n }\n}\n","import * as _ from 'lodash';\n\nimport { Injectable, Injector } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs/BehaviorSubject';\nimport { Observable } from 'rxjs/Observable';\n\nimport { Frame } from './frame';\n// import { Subject } from 'rxjs/Subject';\n\n@Injectable()\nexport abstract class Controller<M, V> {\n\n // ========================================\n // private properties\n // ========================================\n\n private _modelSubject: BehaviorSubject<M>;\n\n private _model$: Observable<M>;\n\n private _model: M;\n\n private _viewSubject: BehaviorSubject<V>;\n\n private _view$: Observable<V>;\n\n private _view: V;\n\n private _markForCheckSubject: BehaviorSubject<boolean>;\n\n private _markForCheck$: Observable<boolean>;\n\n\n private _frame: Frame;\n\n private _framerName: string;\n\n private _injector: Injector;\n\n private _refCount: number = 0;\n\n // ========================================\n // public methods\n // ========================================\n\n /**\n * Model observable accessor.\n */\n public get model$(): Observable<M> { return this._model$; }\n\n /**\n * Model accessor.\n */\n public get model(): M { return this._model; }\n\n /**\n * View observable accessor.\n */\n public get view$(): Observable<V> { return this._view$; }\n\n /**\n * View accessor.\n */\n public get view(): V { return this._view; }\n\n /**\n * Mark for check observable accessor.\n */\n public get markForCheck$(): Observable<boolean> { return this._markForCheck$; }\n\n /**\n * Frame accessor.\n */\n public get frame(): Frame { return this._frame; }\n\n /**\n * Model accessor.\n */\n public get injector(): Injector { return this._injector; }\n\n /**\n * Called after controller is initialized with model, view & frame from framing.\n */\n public onControllerInit(): void {}\n\n /**\n * Called when the controller's route starts resolving.\n */\n public onResolveStart(): void {}\n\n /**\n * Called when the controller's route end resolving.\n */\n public onResolveEnd(): void {}\n\n /**\n * Called when the controller's route resolve is cancelled.\n */\n public onResolveCancel(): void {}\n\n /**\n * Called by framing after construction to link the model, view & frame for this controller.\n */\n public initController(model: M, view: V, frame: Frame, framerName: string, injector: Injector): void {\n this._modelSubject = new BehaviorSubject<M>(model);\n this._viewSubject = new BehaviorSubject<V>(view);\n this._model$ = this._modelSubject.asObservable();\n this._view$ = this._viewSubject.asObservable();\n this._model = model;\n this._view = view;\n this._markForCheckSubject = new BehaviorSubject<boolean>(true);\n this._markForCheck$ = this._markForCheckSubject.asObservable();\n this._frame = frame;\n this._injector = injector;\n this._framerName = framerName;\n\n if (this._frame) {\n this._frame.resolveStart$.subscribe(() => { this.onResolveStart(); });\n this._frame.resolveEnd$.subscribe(() => { this.onResolveEnd(); });\n this._frame.resolveCancel$.subscribe(() => { this.onResolveCancel(); });\n }\n\n this.onControllerInit();\n\n console.log('initController');\n console.log(this);\n }\n\n public updateModel(model: M, replace: boolean = false): void {\n if (replace) {\n this._model = _.clone(model);\n } else {\n this._model = _.assign({}, this._model, model);\n }\n\n this._modelSubject.next(this._model);\n }\n\n public updateView(view: V, replace: boolean = false): void {\n if (replace) {\n this._view = _.clone(view);\n } else {\n this._view = _.assign({}, this._view, view);\n }\n\n this._viewSubject.next(this._view);\n }\n\n public markForCheck(): void {\n this._markForCheckSubject.next(true);\n }\n\n public attach(): void {\n this._refCount++;\n\n if (this._refCount === 1) {\n setTimeout(() => {\n this.onAttached();\n });\n }\n }\n\n public detach(): void {\n this._refCount--;\n\n if (this._refCount === 0) {\n setTimeout(() => {\n this.onDetached();\n });\n }\n }\n\n public onAttached(): void { }\n\n public onDetached(): void { }\n}\n","import { ChangeDetectorRef, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { AnonymousSubscription } from 'rxjs/Subscription';\n\nimport { Controller } from './controller';\n\nexport class Component<M, V, C extends Controller<M, V>> implements OnDestroy, OnInit {\n public model: M;\n\n public view: V;\n\n public controller: C;\n\n private changeDetectorRef: ChangeDetectorRef;\n\n private subscriptions: AnonymousSubscription[];\n\n public constructor(\n controller: C,\n injector: Injector,\n ) {\n this.controller = controller;\n this.changeDetectorRef = injector.get(ChangeDetectorRef);\n\n this.subscriptions = [];\n this.subscriptions.push(\n controller.model$.subscribe((model) => this.updateModel(model)),\n controller.view$.subscribe((view) => this.updateView(view)),\n controller.markForCheck$.subscribe(() => this.changeDetectorRef.markForCheck()),\n );\n\n this.controller.attach();\n }\n\n public ngOnInit(): void {\n\n }\n\n public ngOnDestroy(): void {\n this.controller.detach();\n\n this.subscriptions.forEach((s) => s.unsubscribe());\n this.subscriptions = null;\n\n this.changeDetectorRef = null;\n this.controller = null;\n\n this.model = null;\n this.view = null;\n }\n\n private updateModel(model: M): void {\n this.model = model;\n this.changeDetectorRef.markForCheck();\n }\n\n private updateView(view: V): void {\n this.view = view;\n this.changeDetectorRef.markForCheck();\n }\n}\n"],"names":["isArray","RouterModule","Injector","FramingContainerOutletResolver","uniqWith","FramingComponentsModule","isEqual","CommonModule","FormsModule","BrowserModule","isEmpty","merge","find","defaults","_.merge","each","_.each","_.defaults","reject","isNil","_.isArray","_.isNil","FramingEmptyParentComponent","filter","keys","camelCase","FramingRootComponent","NgModule","__metadata","__decorate","FramingContainerOutletModule","FramingContainerOutletService","ANALYZE_FOR_ENTRY_COMPONENTS","Directive","FramingContainerOutletDirective","EventEmitter","Output","ComponentFactoryResolver","NavigationEnd","differenceWith","clone","_.isEqual","_.clone","ReplaySubject$1","ReplaySubject","FramingComponentOutletModule","FramingComponentOutletDirective","NgModuleFactory","Type","FramingDevToolsController","Router","ActivatedRoute","NavigationCancel","NavigationError","NavigationStart","Subject","Component","FramingDevToolsComponent","AngularComponent","Controller","assign","BehaviorSubject","ChangeDetectorRef"],"mappings":"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"}
\No newline at end of file