@coolon/angular-ui-powerups 0.0.37 → 0.0.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/bundles/coolon-angular-ui-powerups.umd.js +1427 -808
  2. package/bundles/coolon-angular-ui-powerups.umd.js.map +1 -1
  3. package/bundles/coolon-angular-ui-powerups.umd.min.js +1 -1
  4. package/bundles/coolon-angular-ui-powerups.umd.min.js.map +1 -1
  5. package/coolon-angular-ui-powerups.d.ts +16 -14
  6. package/coolon-angular-ui-powerups.metadata.json +1 -1
  7. package/esm2015/coolon-angular-ui-powerups.js +16 -14
  8. package/esm2015/index.js +2 -2
  9. package/esm2015/lib/angular-ui-powerups.module.js +6 -8
  10. package/esm2015/lib/interaction/components/activity-container/activity-container.component.js +1 -2
  11. package/esm2015/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.js +1 -2
  12. package/esm2015/lib/place/components/abstract-place-navigation.component.js +75 -0
  13. package/esm2015/lib/place/components/list-place-nav/list-place-nav.component.js +47 -0
  14. package/esm2015/lib/place/components/place-outlet/route-animations.js +12 -5
  15. package/esm2015/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.js +5 -39
  16. package/esm2015/lib/place/guards/leave-place.guard.js +11 -2
  17. package/esm2015/lib/place/guards/place-route.guard.js +29 -37
  18. package/esm2015/lib/place/index.js +11 -9
  19. package/esm2015/lib/place/nav-item.js +23 -0
  20. package/esm2015/lib/place/place-component-like.js +17 -0
  21. package/esm2015/lib/place/place-component.js +118 -14
  22. package/esm2015/lib/place/place-updates-service.js +16 -0
  23. package/esm2015/lib/place/place.decorator.js +1 -1
  24. package/esm2015/lib/place/place.module.js +6 -3
  25. package/esm2015/lib/place/place.service.js +30 -6
  26. package/esm2015/lib/place/route/default-parameter-sanitiser.js +78 -0
  27. package/esm2015/lib/place/route/parameter-decorators.js +15 -7
  28. package/esm2015/lib/place/route/parameter-definition.class.js +2 -2
  29. package/esm2015/lib/place/route/parameter-sanitiser.js +17 -2
  30. package/esm2015/lib/place/route/parameter-snapshot.js +382 -0
  31. package/esm2015/lib/place/route/parameter-type.js +3 -2
  32. package/esm2015/lib/place/route/route-parameter-sanitiser.js +73 -38
  33. package/esm2015/lib/place/visit.js +22 -0
  34. package/esm2015/public_api.js +2 -2
  35. package/esm5/coolon-angular-ui-powerups.js +16 -14
  36. package/esm5/index.js +2 -2
  37. package/esm5/lib/angular-ui-powerups.module.js +6 -8
  38. package/esm5/lib/interaction/components/activity-container/activity-container.component.js +1 -2
  39. package/esm5/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.js +1 -2
  40. package/esm5/lib/place/components/abstract-place-navigation.component.js +86 -0
  41. package/esm5/lib/place/components/list-place-nav/list-place-nav.component.js +61 -0
  42. package/esm5/lib/place/components/place-outlet/route-animations.js +12 -5
  43. package/esm5/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.js +6 -43
  44. package/esm5/lib/place/guards/leave-place.guard.js +11 -2
  45. package/esm5/lib/place/guards/place-route.guard.js +28 -37
  46. package/esm5/lib/place/index.js +11 -9
  47. package/esm5/lib/place/nav-item.js +23 -0
  48. package/esm5/lib/place/place-component-like.js +17 -0
  49. package/esm5/lib/place/place-component.js +132 -15
  50. package/esm5/lib/place/place-updates-service.js +16 -0
  51. package/esm5/lib/place/place.decorator.js +1 -1
  52. package/esm5/lib/place/place.module.js +6 -3
  53. package/esm5/lib/place/place.service.js +35 -6
  54. package/esm5/lib/place/route/default-parameter-sanitiser.js +85 -0
  55. package/esm5/lib/place/route/parameter-decorators.js +15 -7
  56. package/esm5/lib/place/route/parameter-definition.class.js +2 -2
  57. package/esm5/lib/place/route/parameter-sanitiser.js +17 -2
  58. package/esm5/lib/place/route/parameter-snapshot.js +474 -0
  59. package/esm5/lib/place/route/parameter-type.js +3 -2
  60. package/esm5/lib/place/route/route-parameter-sanitiser.js +100 -45
  61. package/esm5/lib/place/visit.js +22 -0
  62. package/esm5/public_api.js +2 -2
  63. package/fesm2015/coolon-angular-ui-powerups.js +1145 -650
  64. package/fesm2015/coolon-angular-ui-powerups.js.map +1 -1
  65. package/fesm5/coolon-angular-ui-powerups.js +1390 -778
  66. package/fesm5/coolon-angular-ui-powerups.js.map +1 -1
  67. package/lib/place/components/abstract-place-navigation.component.d.ts +13 -0
  68. package/lib/place/components/list-place-nav/list-place-nav.component.d.ts +8 -0
  69. package/lib/place/components/place-outlet/route-animations.d.ts +1 -0
  70. package/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.d.ts +2 -9
  71. package/lib/place/guards/place-route.guard.d.ts +4 -4
  72. package/lib/place/index.d.ts +8 -6
  73. package/lib/place/nav-item.d.ts +5 -0
  74. package/lib/place/{i-place-component.d.ts → place-component-like.d.ts} +1 -1
  75. package/lib/place/place-component.d.ts +19 -8
  76. package/lib/place/place-updates-service.d.ts +10 -0
  77. package/lib/place/place.service.d.ts +11 -8
  78. package/lib/place/route/default-parameter-sanitiser.d.ts +13 -0
  79. package/lib/place/route/parameter-decorators.d.ts +6 -2
  80. package/lib/place/route/parameter-definition.class.d.ts +3 -3
  81. package/lib/place/route/parameter-sanitiser.d.ts +8 -1
  82. package/lib/place/route/parameter-snapshot.d.ts +46 -0
  83. package/lib/place/route/route-parameter-sanitiser.d.ts +13 -9
  84. package/lib/place/visit.d.ts +6 -0
  85. package/package.json +1 -1
  86. package/schematics/place-routes/index.js +8 -95
  87. package/schematics/place-routes/index.js.map +1 -1
  88. package/schematics/place-routes/place-builder.d.ts +19 -0
  89. package/schematics/place-routes/place-builder.js +109 -0
  90. package/schematics/place-routes/place-builder.js.map +1 -0
  91. package/schematics/place-routes/{scanner.d.ts → place-class-scanner.d.ts} +10 -6
  92. package/schematics/place-routes/{scanner.js → place-class-scanner.js} +43 -18
  93. package/schematics/place-routes/place-class-scanner.js.map +1 -0
  94. package/schematics/place-routes/place-def.d.ts +19 -4
  95. package/schematics/place-routes/place-def.js +54 -4
  96. package/schematics/place-routes/place-def.js.map +1 -1
  97. package/schematics/place-routes/templates/{place-routes.ts.template → places.ts.template} +14 -11
  98. package/esm2015/lib/place/i-place-component.js +0 -17
  99. package/esm2015/lib/place/i-place-service.js +0 -16
  100. package/esm2015/lib/place/route/resolved-parameter.js +0 -16
  101. package/esm2015/lib/place/route/resolved-route-parameter-snapshot.js +0 -106
  102. package/esm2015/lib/place/route/route-parameter-bindings.js +0 -150
  103. package/esm2015/lib/place/route/visit-snapshot.js +0 -7
  104. package/esm5/lib/place/i-place-component.js +0 -17
  105. package/esm5/lib/place/i-place-service.js +0 -16
  106. package/esm5/lib/place/route/resolved-parameter.js +0 -16
  107. package/esm5/lib/place/route/resolved-route-parameter-snapshot.js +0 -129
  108. package/esm5/lib/place/route/route-parameter-bindings.js +0 -167
  109. package/esm5/lib/place/route/visit-snapshot.js +0 -11
  110. package/lib/place/i-place-service.d.ts +0 -10
  111. package/lib/place/route/resolved-parameter.d.ts +0 -5
  112. package/lib/place/route/resolved-route-parameter-snapshot.d.ts +0 -12
  113. package/lib/place/route/route-parameter-bindings.d.ts +0 -17
  114. package/lib/place/route/visit-snapshot.d.ts +0 -2
  115. package/schematics/place-routes/scanner.js.map +0 -1
  116. package/schematics/place-routes/templates/place-router.ts.template +0 -33
@@ -1,11 +1,4 @@
1
- import { OnInit } from '@angular/core';
2
- import { Constructable, ListModel, ListModelChain } from '@coolon/pectin';
3
- import { DisposableComponent } from '../../../components/disposable-component';
4
- import { PlaceComponent } from '../../place-component';
5
- export declare class TabbedPlaceNavigationComponent extends DisposableComponent implements OnInit {
6
- places: Constructable<PlaceComponent>[];
7
- placesModel: ListModel<Constructable<PlaceComponent>>;
8
- readonly orderedPlaces: ListModelChain<PlaceComponent.Definition>;
1
+ import { AbstractPlaceNavigationComponent } from '../abstract-place-navigation.component';
2
+ export declare class TabbedPlaceNavigationComponent extends AbstractPlaceNavigationComponent {
9
3
  constructor();
10
- ngOnInit(): void;
11
4
  }
@@ -1,9 +1,9 @@
1
- import { Injector } from '@angular/core';
2
1
  import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree } from '@angular/router';
3
2
  import { Observable } from 'rxjs';
3
+ import { PlaceService } from '../place.service';
4
4
  export declare class PlaceRouteGuard implements CanActivate {
5
- private router;
6
- private injector;
7
- constructor(router: Router, injector: Injector);
5
+ private readonly placeService;
6
+ private readonly router;
7
+ constructor(placeService: PlaceService, router: Router);
8
8
  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree;
9
9
  }
@@ -1,26 +1,28 @@
1
1
  /**
2
2
  * @file Automatically generated by barrelsby.
3
3
  */
4
- export * from "./i-place-component";
5
- export * from "./i-place-service";
4
+ export * from "./nav-item";
5
+ export * from "./place-component-like";
6
6
  export * from "./place-component";
7
+ export * from "./place-updates-service";
7
8
  export * from "./place.decorator";
8
9
  export * from "./place.module";
9
10
  export * from "./place.service";
11
+ export * from "./visit";
12
+ export * from "./components/abstract-place-navigation.component";
10
13
  export * from "./components/busy-overlay/busy-overlay.component";
11
14
  export * from "./components/empty-state/empty-state.component";
15
+ export * from "./components/list-place-nav/list-place-nav.component";
12
16
  export * from "./components/place-outlet/place-outlet.component";
13
17
  export * from "./components/place-outlet/route-animations";
14
18
  export * from "./components/tabbed-place-navigation/tabbed-place-navigation.component";
15
19
  export * from "./guards/leave-place.guard";
16
20
  export * from "./guards/place-route.guard";
21
+ export * from "./route/default-parameter-sanitiser";
17
22
  export * from "./route/json-types";
18
23
  export * from "./route/parameter-decorators";
19
24
  export * from "./route/parameter-definition.class";
20
25
  export * from "./route/parameter-sanitiser";
26
+ export * from "./route/parameter-snapshot";
21
27
  export * from "./route/parameter-type";
22
- export * from "./route/resolved-parameter";
23
- export * from "./route/resolved-route-parameter-snapshot";
24
- export * from "./route/route-parameter-bindings";
25
28
  export * from "./route/route-parameter-sanitiser";
26
- export * from "./route/visit-snapshot";
@@ -0,0 +1,5 @@
1
+ export interface NavItem {
2
+ title(): string;
3
+ icon?(): string;
4
+ tooltip?(): string;
5
+ }
@@ -1,5 +1,5 @@
1
1
  import { ActivatedRoute } from '@angular/router';
2
- export interface IPlaceComponent {
2
+ export interface PlaceComponentLike {
3
3
  readonly activatedRoute: ActivatedRoute;
4
4
  onPlaceReady(): any;
5
5
  }
@@ -1,15 +1,20 @@
1
1
  import { ActivatedRoute } from '@angular/router';
2
- import { Constructable } from '@coolon/pectin';
2
+ import { Constructable, MutableValueModel, ValueModel } from '@coolon/pectin';
3
3
  import 'reflect-metadata';
4
4
  import { DisposableComponent } from '../components/disposable-component';
5
- import { IPlaceComponent } from './i-place-component';
6
- import { IPlaceService } from './i-place-service';
5
+ import { PlaceComponentLike } from './place-component-like';
6
+ import { PlaceUpdatesService } from './place-updates-service';
7
+ import { ParameterDefinition } from './route/parameter-definition.class';
7
8
  export declare const DEFINITION_META_DATA_KEY = "PLACE_DEFINITION_OPTIONS";
8
- export declare class PlaceComponent extends DisposableComponent implements IPlaceComponent {
9
+ export declare const ROUTE_PARAMETER_LIST_KEY: unique symbol;
10
+ export declare class PlaceComponent extends DisposableComponent implements PlaceComponentLike {
9
11
  readonly activatedRoute: ActivatedRoute;
10
- private routeBindingMediator;
11
- constructor(activatedRoute: ActivatedRoute, placeService: IPlaceService);
12
- readonly placeConfig: PlaceComponent.Definition;
12
+ readonly _incomingRouteChange: MutableValueModel<boolean>;
13
+ private readonly resolvedParameters;
14
+ constructor(activatedRoute: ActivatedRoute, placeService: PlaceUpdatesService);
15
+ readonly incomingRouteChange: ValueModel<boolean>;
16
+ private installBinding;
17
+ readonly placeDefinition: PlaceComponent.Definition;
13
18
  canDeactivate(): boolean | Promise<boolean>;
14
19
  onPlaceReady(): void;
15
20
  }
@@ -22,8 +27,10 @@ export declare namespace PlaceComponent {
22
27
  readonly data: {
23
28
  [key: string]: any;
24
29
  };
30
+ readonly children: Constructable<PlaceComponent>[];
25
31
  constructor(component: Constructable<PlaceComponent>, options: PlaceComponent.Options);
26
- isDescriptorForType(construcable: Constructable<PlaceComponent>): boolean;
32
+ getRouteParameters(): ParameterDefinition<any>[];
33
+ isDescriptorForType(constructable: Constructable<PlaceComponent>): boolean;
27
34
  isDescriptorFor(placeComponent: PlaceComponent): boolean;
28
35
  getData<T>(key: string, defaultValue?: T): T;
29
36
  searchData<T>(keys: string[], defaultValue?: T): T;
@@ -35,6 +42,10 @@ export declare namespace PlaceComponent {
35
42
  [key: string]: any;
36
43
  };
37
44
  authenticate?: boolean;
45
+ children?: Constructable<PlaceComponent>[];
46
+ }
47
+ interface ChildOptions extends Options {
48
+ parent: Constructable<PlaceComponent>;
38
49
  }
39
50
  function getDefinition(klass: Constructable<PlaceComponent>): Definition;
40
51
  function injectDefinition(klass: Constructable<PlaceComponent>, options: Options): void;
@@ -0,0 +1,10 @@
1
+ import { ActivatedRoute } from '@angular/router';
2
+ import { ParameterSnapshot } from './route/parameter-snapshot';
3
+ export interface PlaceUpdatesService {
4
+ notifyRouteParametersChanged(params: {
5
+ activatedRoute: ActivatedRoute;
6
+ next: ParameterSnapshot;
7
+ previous: ParameterSnapshot;
8
+ updateRoute: boolean;
9
+ }): any;
10
+ }
@@ -1,19 +1,22 @@
1
- import { Router } from '@angular/router';
1
+ import { Injector } from '@angular/core';
2
+ import { ActivatedRoute, Router } from '@angular/router';
2
3
  import { GarbageCollector } from '@coolon/pectin';
3
- import { IPlaceService } from './i-place-service';
4
+ import { PlaceUpdatesService } from './place-updates-service';
4
5
  import { PlaceComponent } from './place-component';
5
- import { ResolvedRouteParameterSnapshot } from './route/resolved-route-parameter-snapshot';
6
- export declare class PlaceService extends GarbageCollector implements IPlaceService {
6
+ import { ParameterSnapshot } from './route/parameter-snapshot';
7
+ export declare class PlaceService extends GarbageCollector implements PlaceUpdatesService {
7
8
  protected router: Router;
9
+ protected injector: Injector;
8
10
  private _activePlaces;
9
- constructor(router: Router);
11
+ constructor(router: Router, injector: Injector);
10
12
  readonly activePlaces: import("@coolon/pectin").ListModel<PlaceComponent>;
11
13
  onActivate(place: PlaceComponent): void;
12
14
  onDeactivate(place: PlaceComponent): void;
13
15
  notifyRouteParametersChanged(params: {
14
- placeComponent: PlaceComponent;
15
- next: ResolvedRouteParameterSnapshot;
16
- previous: ResolvedRouteParameterSnapshot;
16
+ activatedRoute: ActivatedRoute;
17
+ next: ParameterSnapshot;
18
+ previous: ParameterSnapshot;
17
19
  updateRoute: boolean;
18
20
  }): void;
21
+ sanitise(snapshot: ParameterSnapshot): Promise<ParameterSnapshot>;
19
22
  }
@@ -0,0 +1,13 @@
1
+ import { PlaceService } from '../place.service';
2
+ import { Visit } from '../visit';
3
+ import { ParameterDefinition } from './parameter-definition.class';
4
+ import { ParameterSanitiser } from './parameter-sanitiser';
5
+ export declare class DefaultParameterSanitiser<T, S> implements ParameterSanitiser<S> {
6
+ private def;
7
+ private readonly placeService;
8
+ private remember;
9
+ private defaultValue;
10
+ constructor(def: ParameterDefinition<T, S>, placeService: PlaceService, options: ParameterSanitiser.Options<S>);
11
+ sanitise(value: S, visit: Visit): Promise<S> | S;
12
+ private isBlank;
13
+ }
@@ -4,12 +4,16 @@ import { ParameterType } from './parameter-type';
4
4
  export interface ParameterOptions<T> {
5
5
  as?: string;
6
6
  optional?: boolean;
7
- sanitiser?: Constructable<ParameterSanitiser<T>>;
7
+ remember?: boolean;
8
+ defaultValue?: T;
9
+ sanitiser?: Constructable<ParameterSanitiser<T>> | ParameterSanitiser.Options<T>;
8
10
  }
9
11
  export interface ListParameterOptions<T> {
10
12
  as?: string;
11
13
  optional?: boolean;
12
- listSanitiser?: Constructable<ParameterSanitiser<T[]>>;
14
+ remember?: boolean;
15
+ defaultValue?: T[];
16
+ sanitiser?: Constructable<ParameterSanitiser<T[]>> | ParameterSanitiser.Options<T[]>;
13
17
  }
14
18
  export declare function RouteId<T extends string | number>(type: ParameterType<T>, options?: ParameterOptions<T>): PropertyDecorator;
15
19
  export declare function RouteParameter<T>(type: ParameterType<T>, options?: ParameterOptions<T>): PropertyDecorator;
@@ -1,11 +1,11 @@
1
1
  import { Constructable } from '@coolon/pectin';
2
2
  import { ParameterSanitiser } from './parameter-sanitiser';
3
3
  import { ParameterType } from './parameter-type';
4
- export interface ParameterDefinition<E, S = E> {
4
+ export interface ParameterDefinition<T, S = T> {
5
5
  readonly name: string;
6
6
  readonly propertyName: string;
7
- readonly type: ParameterType<E>;
8
- readonly sanitiser: Constructable<ParameterSanitiser<S>>;
7
+ readonly type: ParameterType<T>;
8
+ readonly sanitiser: Constructable<ParameterSanitiser<S>> | ParameterSanitiser.Options<S>;
9
9
  readonly isRouteId: boolean;
10
10
  readonly isArray: boolean;
11
11
  }
@@ -1,3 +1,10 @@
1
+ import { Visit } from '../visit';
1
2
  export interface ParameterSanitiser<T> {
2
- sanitise(value: T): T | Promise<T>;
3
+ sanitise(value: T, visit?: Visit): T | Promise<T>;
4
+ }
5
+ export declare namespace ParameterSanitiser {
6
+ interface Options<T> {
7
+ remember?: boolean;
8
+ defaultValue?: T;
9
+ }
3
10
  }
@@ -0,0 +1,46 @@
1
+ import { ParamMap, UrlSegment } from '@angular/router';
2
+ import { PlaceComponent } from '../place-component';
3
+ import { Visit } from '../visit';
4
+ import { ParameterDefinition } from './parameter-definition.class';
5
+ export declare class ParameterSnapshot implements Visit {
6
+ readonly placeDefinition: PlaceComponent.Definition;
7
+ private readonly resolved;
8
+ constructor(placeDefinition: PlaceComponent.Definition, resolved: ParameterSnapshot.ResolvedParameter<any, any>[]);
9
+ hasChanged(other: ParameterSnapshot): boolean;
10
+ asUrlSegment(other: ParameterSnapshot): any[];
11
+ getResolvedParameter<T, S>(parameterDef: ParameterDefinition<T, S>): ParameterSnapshot.ResolvedParameter<T, S>;
12
+ getResolvedParameterValue<T, S>(parameterDef: ParameterDefinition<T, S>): S;
13
+ getRouteId(): any;
14
+ getRouteParameter(name: string): any;
15
+ private getResolvedRouteId;
16
+ hasRouteId(): boolean;
17
+ getFormattedRouteId(): string;
18
+ getFormattedParameters(): {};
19
+ replace<T, S>(parameter: ParameterDefinition<T, S>, value: S): ParameterSnapshot;
20
+ updateUrl(url: UrlSegment[]): UrlSegment[];
21
+ }
22
+ export declare namespace ParameterSnapshot {
23
+ function create(placeDef: PlaceComponent.Definition, paramMap: ParamMap): ParameterSnapshot;
24
+ abstract class ResolvedParameter<T, S = T> {
25
+ readonly parameterDef: ParameterDefinition<T, S>;
26
+ readonly value: S;
27
+ constructor(parameterDef: ParameterDefinition<T, S>, value: S);
28
+ abstract injectRouteParam(dest: {}): void;
29
+ abstract isSame(otherValue: S): boolean;
30
+ isRouteId(): boolean;
31
+ abstract formattedValue(): string | string[];
32
+ abstract replace(value: S): ResolvedParameter<T, S>;
33
+ }
34
+ class ResolvedValueParameter<T> extends ResolvedParameter<T, T> {
35
+ isSame(otherValue: T): boolean;
36
+ injectRouteParam(dest: {}): void;
37
+ replace(value: T): ParameterSnapshot.ResolvedParameter<T, T>;
38
+ formattedValue(): string;
39
+ }
40
+ class ResolvedArrayParameter<T> extends ResolvedParameter<T, T[]> {
41
+ isSame(otherValue: T[]): boolean;
42
+ injectRouteParam(dest: {}): void;
43
+ replace(value: T[]): ParameterSnapshot.ResolvedParameter<T, T[]>;
44
+ formattedValue(): string[];
45
+ }
46
+ }
@@ -1,32 +1,36 @@
1
1
  import { Injector } from '@angular/core';
2
- import { ActivatedRouteSnapshot, Router } from '@angular/router';
2
+ import { ActivatedRouteSnapshot } from '@angular/router';
3
+ import { PlaceService } from '../place.service';
3
4
  import { ParameterDefinition } from './parameter-definition.class';
4
5
  import { ParameterSanitiser } from './parameter-sanitiser';
5
- export declare abstract class Sanitiser<T, S> {
6
- readonly parameterDef: ParameterDefinition<T>;
6
+ export declare class Sanitiser<T, S> {
7
+ readonly parameterDef: ParameterDefinition<T, S>;
7
8
  readonly snapshot: ActivatedRouteSnapshot;
8
9
  readonly sanitiser: ParameterSanitiser<S>;
9
10
  private initialValue;
10
11
  private _sanitisedValue;
11
- constructor(parameterDef: ParameterDefinition<T>, snapshot: ActivatedRouteSnapshot, sanitiser: ParameterSanitiser<S>);
12
+ constructor(parameterDef: ParameterDefinition<T, S>, snapshot: ActivatedRouteSnapshot, sanitiser: ParameterSanitiser<S>);
12
13
  isRouteId(): boolean;
13
14
  readonly valueChanged: boolean;
14
15
  readonly sanitisedValue: S;
15
- protected abstract readFrom(snapshot: ActivatedRouteSnapshot): S;
16
- protected abstract hasChanged(initialValue: S, sanitisedValue: S): boolean;
17
- abstract injectRouteParam(dest: {}): any;
16
+ protected readFrom(snapshot: ActivatedRouteSnapshot): S;
17
+ protected hasChanged(initialValue: S, sanitisedValue: S): boolean;
18
+ injectRouteParam(dest: {}): void;
18
19
  sanitize(): Promise<boolean>;
19
20
  }
20
21
  export declare class RouteParameterSanitiser {
21
22
  readonly parameterDefs: ParameterDefinition<any>[];
22
23
  readonly snapshot: ActivatedRouteSnapshot;
24
+ readonly placeService: PlaceService;
23
25
  readonly injector: Injector;
24
26
  private readonly routeIdSanitiser;
25
27
  private readonly parameterSanitisers;
26
- constructor(parameterDefs: ParameterDefinition<any>[], snapshot: ActivatedRouteSnapshot, injector: Injector);
28
+ constructor(parameterDefs: ParameterDefinition<any>[], snapshot: ActivatedRouteSnapshot, placeService: PlaceService, injector: Injector);
27
29
  sanitise(): Promise<boolean>;
28
- redirect(router: Router): Promise<boolean>;
29
30
  private getSanitiser;
31
+ routeIdHasChanged(): boolean;
32
+ getRedirectParams(): any[];
33
+ private isSanitiserContructor;
30
34
  }
31
35
  export declare namespace Sanitiser {
32
36
  class Value<T> extends Sanitiser<T, T> {
@@ -0,0 +1,6 @@
1
+ import { PlaceComponent } from './place-component';
2
+ export interface Visit {
3
+ readonly placeDefinition: PlaceComponent.Definition;
4
+ getRouteId(): any;
5
+ getRouteParameter(name: string): any;
6
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coolon/angular-ui-powerups",
3
- "version": "0.0.37",
3
+ "version": "0.0.38",
4
4
  "schematics": "./schematics/collection.json",
5
5
  "dependencies": {
6
6
  "ts-morph": "^3.1.3",
@@ -1,12 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const core_1 = require("@angular-devkit/core");
4
- const schematics_1 = require("@angular-devkit/schematics");
5
3
  const pectin_1 = require("@coolon/pectin");
6
- const JSON5 = require("json5");
7
- const ts_morph_1 = require("ts-morph");
8
- const place_def_1 = require("./place-def");
9
- const PLACE_ANNOTATION = /@Place\({([^}\))]*)}\)/m;
4
+ const place_builder_1 = require("./place-builder");
10
5
  function generateRoutes(options) {
11
6
  return (tree, context) => {
12
7
  pectin_1.Logger.logTo({
@@ -25,96 +20,14 @@ function generateRoutes(options) {
25
20
  if (!options.project) {
26
21
  options.project = workspace.defaultProject;
27
22
  }
28
- const projectName = options.project;
29
- const project = workspace.projects[projectName];
30
- const config = loadConfig(project, tree, context);
31
- const placeDefs = extractPlaces(project, options, tree, context);
32
- const projectType = project.projectType === 'application' ? 'app' : 'lib';
33
- const files = schematics_1.apply(schematics_1.url('./templates'), [
34
- schematics_1.applyTemplates(Object.assign({}, options, { placeDefs,
35
- config }, core_1.strings)),
36
- schematics_1.move(`${project.sourceRoot}/${projectType}`),
37
- // @see https://github.com/angular/angular-cli/issues/11337#issuecomment-448259549
38
- schematics_1.forEach((fileEntry) => {
39
- if (tree.exists(fileEntry.path)) {
40
- tree.overwrite(fileEntry.path, fileEntry.content);
41
- }
42
- return fileEntry;
43
- })
44
- ]);
45
- return schematics_1.mergeWith(files);
46
- };
47
- }
48
- exports.generateRoutes = generateRoutes;
49
- // function applyWithOverwrite(source: Source, rules: Rule[]): Rule {
50
- // return (tree: Tree, _context: SchematicContext) => {
51
- // const rule = mergeWith(
52
- // apply(source, [
53
- // ...rules,
54
- // forEach((fileEntry) => {
55
- // if (tree.exists(fileEntry.path)) {
56
- // tree.overwrite(fileEntry.path, fileEntry.content);
57
- // return null;
58
- // }
59
- // return fileEntry;
60
- // })
61
- // ])
62
- // );
63
- //
64
- // return rule(tree, _context);
65
- // };
66
- // }
67
- function createProject(project, context) {
68
- const tsConfigPath = project.architect.build.options.tsConfig;
69
- context.logger.info(`loading tsConfig from -> ${tsConfigPath}`);
70
- try {
71
- return new ts_morph_1.Project({
72
- tsConfigFilePath: `./${tsConfigPath}`
73
- });
74
- }
75
- catch (error) {
76
- context.logger.fatal(`Failed to load typescript project form: ${project.root} You probably need to specify the --project option?`);
77
- }
78
- }
79
- function loadConfig(project, tree, context) {
80
- context.logger.info(`loading places config from -> ${project.root}/places.json (or places.json5)`);
81
- const fileEntry = tree.get(`${project.root}/places.json5`) || tree.get(`${project.root}/places.json5`);
82
- if (!fileEntry) {
83
- throw new Error(`Unable to find config file at '${project.root}/places.json' or '${project.root}/places.json5'`);
84
- }
85
- const config = JSON5.parse(fileEntry.content.toString('utf-8'));
86
- return config;
87
- }
88
- function extractPlaces(project, schema, tree, context) {
89
- const projectType = project.projectType === 'application' ? 'app' : 'lib';
90
- const projectRoot = `${project.root}`;
91
- const sourceRoot = `${project.sourceRoot}/${projectType}`;
92
- const importPrefix = `./${sourceRoot}`;
93
- const tsProject = createProject(project, context);
94
- const placeDefs = [];
95
- context.logger.info(`Scanning sources in -> ${sourceRoot}`);
96
- tree.getDir(sourceRoot).visit(filePath => {
97
- if (!filePath.endsWith('.ts') || filePath.endsWith(".spec.ts")) {
98
- return;
23
+ const placeBuilder = new place_builder_1.PlaceBuilder(options, workspace, context);
24
+ try {
25
+ return placeBuilder.process(tree);
99
26
  }
100
- const content = tree.read(filePath);
101
- if (!content) {
102
- return;
27
+ catch (e) {
28
+ console.error(e);
103
29
  }
104
- const sourceText = content.toString('utf-8');
105
- // if (sourceText.match(PLACE_ANNOTATION)) {
106
- const sourceFile = tsProject.getSourceFileOrThrow(`./${filePath}`);
107
- sourceFile.getClasses().forEach((classDecl) => {
108
- place_def_1.PlaceDef.scan(classDecl, context).onMatch(result => {
109
- // context.logger.info(`filePath=${filePath}`);
110
- const moduleImportPath = `./${filePath.substr(importPrefix.length, filePath.length - importPrefix.length - '.ts'.length)}`;
111
- const definition = result.createDefinition(moduleImportPath);
112
- context.logger.info(`${moduleImportPath} -> ${classDecl.getName()}(route: /${definition.fullPath})`);
113
- placeDefs.push(definition);
114
- });
115
- });
116
- // }
117
- });
118
- return placeDefs;
30
+ };
119
31
  }
32
+ exports.generateRoutes = generateRoutes;
120
33
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/angular-ui-powerups/schematics/place-routes/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/angular-ui-powerups/schematics/place-routes/index.ts"],"names":[],"mappings":";;AAEA,2CAAwC;AACxC,mDAA+C;AAG/C,SAAgB,cAAc,CAAC,OAAe;IAE5C,OAAO,CAAC,IAAU,EAAE,OAAyB,EAAE,EAAE;QAE/C,eAAM,CAAC,KAAK,CAAC;YACX,EAAE,CAAC,GAAiB;gBAClB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACnD,IAAI,CAAC,eAAe,EAAE;YACpB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;SACnE;QAED,8BAA8B;QAC9B,MAAM,gBAAgB,GAAG,eAAe,CAAC,QAAQ,EAAE,CAAC;QAEpD,0CAA0C;QAC1C,MAAM,SAAS,GAA2C,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAEvF,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YACpB,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,cAAc,CAAC;SAC5C;QAED,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAEnE,IAAI;YACF,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SACnC;QAAC,OAAM,CAAC,EAAE;YACT,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAClB;IACH,CAAC,CAAC;AAEJ,CAAC;AAlCD,wCAkCC"}
@@ -0,0 +1,19 @@
1
+ import { experimental } from '@angular-devkit/core';
2
+ import { Rule, SchematicContext, Tree } from '@angular-devkit/schematics';
3
+ import { Project } from 'ts-morph';
4
+ import { Schema } from './schema';
5
+ export declare class PlaceBuilder {
6
+ readonly options: Schema;
7
+ readonly context: SchematicContext;
8
+ private projectName;
9
+ private projectType;
10
+ private sourceRoot;
11
+ private workspaceProject;
12
+ private typescriptProject;
13
+ constructor(options: Schema, workspace: experimental.workspace.WorkspaceSchema, context: SchematicContext);
14
+ createTypeScriptProject(): Project;
15
+ process(tree: Tree): Rule;
16
+ private renderTemplates;
17
+ private extractPlaceDefinitions;
18
+ private buildPlaceHierarchy;
19
+ }
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@angular-devkit/core");
4
+ const schematics_1 = require("@angular-devkit/schematics");
5
+ const JSON5 = require("json5");
6
+ const ts_morph_1 = require("ts-morph");
7
+ const place_def_1 = require("./place-def");
8
+ class PlaceBuilder {
9
+ constructor(options, workspace, context) {
10
+ this.options = options;
11
+ this.context = context;
12
+ this.projectName = options.project;
13
+ this.workspaceProject = workspace.projects[this.projectName];
14
+ this.projectType = this.workspaceProject.projectType === 'application' ? 'app' : 'lib';
15
+ this.sourceRoot = `${this.workspaceProject.sourceRoot}/${this.projectType}`;
16
+ this.typescriptProject = this.createTypeScriptProject();
17
+ this.context.logger.info(`sourceRoot=${this.sourceRoot}`);
18
+ this.context.logger.info(`projectName=${this.projectName}`);
19
+ this.context.logger.info(`projectType=${this.projectType}`);
20
+ }
21
+ createTypeScriptProject() {
22
+ // TODO: this barfs if you're not running it from teh project root directory
23
+ const tsConfigPath = this.workspaceProject.architect.build.options.tsConfig;
24
+ this.context.logger.info(`loading tsConfig from -> ${tsConfigPath}`);
25
+ try {
26
+ return new ts_morph_1.Project({
27
+ tsConfigFilePath: tsConfigPath
28
+ });
29
+ }
30
+ catch (error) {
31
+ this.context.logger.error(error.toString());
32
+ this.context.logger.fatal(`Failed to load typescript project from: ${tsConfigPath} You probably need to specify the --project option?`);
33
+ throw error;
34
+ }
35
+ }
36
+ process(tree) {
37
+ const placeRoots = [];
38
+ tree.getDir(this.sourceRoot).visit((filePath, entry) => {
39
+ if (filePath.endsWith('places.json') || filePath.endsWith('places.json5')) {
40
+ const dir = filePath.substr(0, filePath.lastIndexOf('/'));
41
+ placeRoots.push({ dir, config: JSON5.parse(entry.content.toString('utf-8')) });
42
+ }
43
+ });
44
+ const rules = placeRoots.map(placeRoot => {
45
+ const placeDefs = this.extractPlaceDefinitions(tree, placeRoot.dir);
46
+ return this.renderTemplates(placeRoot, placeDefs, tree);
47
+ });
48
+ return schematics_1.chain(rules);
49
+ }
50
+ renderTemplates(placeRoot, placeDefs, tree) {
51
+ // this.context.logger.info(`${this.workspaceProject.sourceRoot}/${this.projectType}`);
52
+ // this.context.logger.info(placeRoot.dir);
53
+ const files = schematics_1.apply(schematics_1.url('./templates'), [
54
+ schematics_1.applyTemplates(Object.assign({}, this.options, { config: placeRoot.config, placeDefs }, core_1.strings)),
55
+ schematics_1.move(`${placeRoot.dir}`),
56
+ // @see https://github.com/angular/angular-cli/issues/11337#issuecomment-448259549
57
+ schematics_1.forEach((fileEntry) => {
58
+ this.context.logger.info(fileEntry.path);
59
+ if (tree.exists(fileEntry.path)) {
60
+ tree.overwrite(fileEntry.path, fileEntry.content);
61
+ }
62
+ return fileEntry;
63
+ })
64
+ ]);
65
+ return schematics_1.mergeWith(files);
66
+ }
67
+ extractPlaceDefinitions(tree, placeRoot) {
68
+ const importPrefix = `./${placeRoot}`;
69
+ const placeDefs = [];
70
+ this.context.logger.info(`Scanning sources in -> ${placeRoot}`);
71
+ tree.getDir(placeRoot).visit(filePath => {
72
+ if (!filePath.endsWith('.ts') || filePath.endsWith('.spec.ts')) {
73
+ return;
74
+ }
75
+ const content = tree.read(filePath);
76
+ if (!content) {
77
+ return;
78
+ }
79
+ const sourceFile = this.typescriptProject.getSourceFileOrThrow(`./${filePath}`);
80
+ const imports = sourceFile.getImportDeclarations();
81
+ sourceFile.getClasses().forEach((classDecl) => {
82
+ place_def_1.PlaceDef.scan(sourceFile, classDecl, this.context).onMatch(result => {
83
+ const moduleImportPath = `.${filePath.substr(placeRoot.length, filePath.length - placeRoot.length - '.ts'.length)}`;
84
+ const definition = result.createDefinition(moduleImportPath);
85
+ this.context.logger.info(`${classDecl.getName()}(route: /${definition.fullPath}) -> ${moduleImportPath}`);
86
+ placeDefs.push(definition);
87
+ });
88
+ });
89
+ });
90
+ placeDefs.sort((a, b) => a.order - b.order);
91
+ const rootPlaces = this.buildPlaceHierarchy(placeDefs);
92
+ return placeDefs;
93
+ }
94
+ buildPlaceHierarchy(placeDefs) {
95
+ const parentPlaces = placeDefs.filter(d => d.childRefs.length > 0);
96
+ const childPlaces = [];
97
+ parentPlaces.forEach(p => {
98
+ p.childRefs.forEach(c => {
99
+ const childPlaceDef = c.resolve(placeDefs);
100
+ if (!childPlaceDef) {
101
+ throw new Error(`${p.componentClass} references child ${c.componentClass} which isn't a @Place`);
102
+ }
103
+ childPlaces.push(childPlaceDef);
104
+ });
105
+ });
106
+ }
107
+ }
108
+ exports.PlaceBuilder = PlaceBuilder;
109
+ //# sourceMappingURL=place-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"place-builder.js","sourceRoot":"","sources":["../../../../../libs/angular-ui-powerups/schematics/place-routes/place-builder.ts"],"names":[],"mappings":"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"}