UNPKG

114 kBSource Map (JSON)View Raw
1{"version":3,"file":"ng-core.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","_.uniqWith","_.isEqual","_.isEmpty","_.merge","_.find","_.defaults","_.each","_.reject","_.isNil","_.filter","_.keys","_.camelCase","__decorate","__metadata","_.differenceWith","_.clone","ReplaySubject","C","AngularComponent","Component","_.assign"],"mappings":"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"}
\No newline at end of file