UNPKG

118 kBSource Map (JSON)View Raw
1{"version":3,"file":"ng-core.es5.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":["_.merge","_.defaults","_.each","_.isArray","_.isNil","__metadata","__decorate","_.isEqual","_.clone","ReplaySubject","AngularComponent"],"mappings":"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"}
\No newline at end of file