@coolon/angular-ui-powerups 12.4.0 → 12.4.2

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 (142) hide show
  1. package/bundles/coolon-angular-ui-powerups-cypress.umd.js +14 -34
  2. package/bundles/coolon-angular-ui-powerups-cypress.umd.js.map +1 -1
  3. package/bundles/coolon-angular-ui-powerups.umd.js +111 -110
  4. package/bundles/coolon-angular-ui-powerups.umd.js.map +1 -1
  5. package/coolon-angular-ui-powerups.metadata.json +1 -1
  6. package/cypress/coolon-angular-ui-powerups-cypress.metadata.json +1 -1
  7. package/esm2015/cypress/component-builder.js +3 -3
  8. package/esm2015/cypress/component-builder.js.map +1 -1
  9. package/esm2015/cypress/component-builder.metadata.json +1 -1
  10. package/esm2015/cypress/components/aup-abstract-table.js +3 -3
  11. package/esm2015/cypress/components/aup-abstract-table.js.map +1 -1
  12. package/esm2015/cypress/components/aup-abstract-table.metadata.json +1 -1
  13. package/esm2015/cypress/components/aup-command.js +2 -2
  14. package/esm2015/cypress/components/aup-command.js.map +1 -1
  15. package/esm2015/cypress/components/aup-command.metadata.json +1 -1
  16. package/esm2015/cypress/components/aup-tree-table.js +1 -1
  17. package/esm2015/cypress/components/aup-tree-table.js.map +1 -1
  18. package/esm2015/cypress/components/aup-tree-table.metadata.json +1 -1
  19. package/esm2015/cypress/page-element.js +3 -3
  20. package/esm2015/cypress/page-element.js.map +1 -1
  21. package/esm2015/cypress/page-element.metadata.json +1 -1
  22. package/esm2015/cypress/page.js +3 -3
  23. package/esm2015/cypress/page.js.map +1 -1
  24. package/esm2015/cypress/page.metadata.json +1 -1
  25. package/esm2015/lib/components/busy-overlay/busy-overlay.component.js +1 -1
  26. package/esm2015/lib/components/busy-overlay/busy-overlay.component.metadata.json +1 -1
  27. package/esm2015/lib/components/cards/card-container/card-container.component.js +4 -4
  28. package/esm2015/lib/components/cards/card-container/card-container.component.js.map +1 -1
  29. package/esm2015/lib/components/cards/card-container/card-container.component.metadata.json +1 -1
  30. package/esm2015/lib/components/commands/command/command.component.js +2 -2
  31. package/esm2015/lib/components/commands/command/command.component.js.map +1 -1
  32. package/esm2015/lib/components/commands/command/command.component.metadata.json +1 -1
  33. package/esm2015/lib/components/commands/command-face.js +8 -8
  34. package/esm2015/lib/components/commands/command-face.js.map +1 -1
  35. package/esm2015/lib/components/forms/autocomplete-input/autocomplete-input.component.js +3 -3
  36. package/esm2015/lib/components/forms/autocomplete-input/autocomplete-input.component.js.map +1 -1
  37. package/esm2015/lib/components/forms/autocomplete-input/autocomplete-input.component.metadata.json +1 -1
  38. package/esm2015/lib/components/tables/abstract-table-model.js +3 -3
  39. package/esm2015/lib/components/tables/abstract-table-model.js.map +1 -1
  40. package/esm2015/lib/components/tables/abstract-table-model.metadata.json +1 -1
  41. package/esm2015/lib/components/tables/column-list-model.js +2 -2
  42. package/esm2015/lib/components/tables/column-list-model.js.map +1 -1
  43. package/esm2015/lib/components/tables/column-list-model.metadata.json +1 -1
  44. package/esm2015/lib/components/tables/table/column-model.js +12 -12
  45. package/esm2015/lib/components/tables/table/column-model.js.map +1 -1
  46. package/esm2015/lib/components/tables/table/column-model.metadata.json +1 -1
  47. package/esm2015/lib/components/tables/table/default-cell-renderer/default-cell-renderer.component.js.map +1 -1
  48. package/esm2015/lib/components/tables/tree-table/decorated-tree-node.js +3 -3
  49. package/esm2015/lib/components/tables/tree-table/decorated-tree-node.js.map +1 -1
  50. package/esm2015/lib/components/tables/tree-table/tree-label-column-model.js +2 -2
  51. package/esm2015/lib/components/tables/tree-table/tree-label-column-model.js.map +1 -1
  52. package/esm2015/lib/components/tables/tree-table/tree-label-column-model.metadata.json +1 -1
  53. package/esm2015/lib/components/tables/tree-table/tree-table-model.js +2 -2
  54. package/esm2015/lib/components/tables/tree-table/tree-table-model.js.map +1 -1
  55. package/esm2015/lib/components/tables/tree-table/tree-table-model.metadata.json +1 -1
  56. package/esm2015/lib/components/text/markdown/markdown.component.js +3 -3
  57. package/esm2015/lib/components/text/markdown/markdown.component.js.map +1 -1
  58. package/esm2015/lib/components/text/markdown/markdown.component.metadata.json +1 -1
  59. package/esm2015/lib/directives/highlight.pipe.js +2 -2
  60. package/esm2015/lib/directives/highlight.pipe.js.map +1 -1
  61. package/esm2015/lib/directives/highlight.pipe.metadata.json +1 -1
  62. package/esm2015/lib/interaction/abstract-interaction-context.js.map +1 -1
  63. package/esm2015/lib/interaction/alert.js +3 -3
  64. package/esm2015/lib/interaction/alert.js.map +1 -1
  65. package/esm2015/lib/interaction/components/abstract-dialog.component.js +2 -2
  66. package/esm2015/lib/interaction/components/abstract-dialog.component.js.map +1 -1
  67. package/esm2015/lib/interaction/components/activity-body/activity-body.component.js.map +1 -1
  68. package/esm2015/lib/interaction/components/activity-container/activity-container.component.js +3 -3
  69. package/esm2015/lib/interaction/components/activity-container/activity-container.component.js.map +1 -1
  70. package/esm2015/lib/interaction/components/activity-container/activity-container.component.metadata.json +1 -1
  71. package/esm2015/lib/interaction/components/activity-title/activity-title.component.js +2 -2
  72. package/esm2015/lib/interaction/components/activity-title/activity-title.component.js.map +1 -1
  73. package/esm2015/lib/interaction/components/activity-title/activity-title.component.metadata.json +1 -1
  74. package/esm2015/lib/interaction/components/editors/inline-string-editor/inline-string-editor.component.js +2 -2
  75. package/esm2015/lib/interaction/components/editors/inline-string-editor/inline-string-editor.component.js.map +1 -1
  76. package/esm2015/lib/interaction/components/editors/inline-string-editor/inline-string-editor.component.metadata.json +1 -1
  77. package/esm2015/lib/interaction/components/inplace-interaction-context/in-place-interaction-context.component.js +1 -1
  78. package/esm2015/lib/interaction/components/inplace-interaction-context/in-place-interaction-context.component.js.map +1 -1
  79. package/esm2015/lib/interaction/components/inplace-interaction-context/in-place-interaction-context.component.metadata.json +1 -1
  80. package/esm2015/lib/interaction/components/input-activities/input-activity.js +2 -2
  81. package/esm2015/lib/interaction/components/input-activities/input-activity.js.map +1 -1
  82. package/esm2015/lib/interaction/components/input-activities/input-activity.metadata.json +1 -1
  83. package/esm2015/lib/interaction/directives/interaction-context-trigger-for.directive.js +2 -2
  84. package/esm2015/lib/interaction/directives/interaction-context-trigger-for.directive.js.map +1 -1
  85. package/esm2015/lib/interaction/directives/interaction-context-trigger-for.directive.metadata.json +1 -1
  86. package/esm2015/lib/place/components/abstract-place-navigation.component.js +1 -1
  87. package/esm2015/lib/place/components/abstract-place-navigation.component.js.map +1 -1
  88. package/esm2015/lib/place/components/abstract-place-navigation.component.metadata.json +1 -1
  89. package/esm2015/lib/place/components/place-outlet/place-outlet.component.js +8 -5
  90. package/esm2015/lib/place/components/place-outlet/place-outlet.component.js.map +1 -1
  91. package/esm2015/lib/place/components/place-outlet/place-outlet.component.metadata.json +1 -1
  92. package/esm2015/lib/place/guards/consolidated-param-map.js +3 -3
  93. package/esm2015/lib/place/guards/consolidated-param-map.js.map +1 -1
  94. package/esm2015/lib/place/guards/consolidated-param-map.metadata.json +1 -1
  95. package/esm2015/lib/place/navigation/place-component-deactivation-handler.js +2 -2
  96. package/esm2015/lib/place/navigation/place-component-deactivation-handler.js.map +1 -1
  97. package/esm2015/lib/place/navigation/place-component-deactivation-handler.metadata.json +1 -1
  98. package/esm2015/lib/place/navigation/session/interactions/synchronise-interaction-context-ids-with-route.js +2 -2
  99. package/esm2015/lib/place/navigation/session/interactions/synchronise-interaction-context-ids-with-route.js.map +1 -1
  100. package/esm2015/lib/place/navigation/session/interactions/synchronise-interaction-context-ids-with-route.metadata.json +1 -1
  101. package/esm2015/lib/place/place-component.js +3 -3
  102. package/esm2015/lib/place/place-component.js.map +1 -1
  103. package/esm2015/lib/place/place-component.metadata.json +1 -1
  104. package/esm2015/lib/place/place-definition.js +5 -5
  105. package/esm2015/lib/place/place-definition.js.map +1 -1
  106. package/esm2015/lib/place/place-definition.metadata.json +1 -1
  107. package/esm2015/lib/place/place-history.js +8 -8
  108. package/esm2015/lib/place/place-history.js.map +1 -1
  109. package/esm2015/lib/place/place-history.metadata.json +1 -1
  110. package/esm2015/lib/place/place.decorator.js +2 -2
  111. package/esm2015/lib/place/place.decorator.js.map +1 -1
  112. package/esm2015/lib/place/place.decorator.metadata.json +1 -1
  113. package/esm2015/lib/place/route/formatter.js +3 -3
  114. package/esm2015/lib/place/route/formatter.js.map +1 -1
  115. package/esm2015/lib/place/route/parameter-definition.js +8 -8
  116. package/esm2015/lib/place/route/parameter-definition.js.map +1 -1
  117. package/esm2015/lib/place/route/parameter-definition.metadata.json +1 -1
  118. package/esm2015/lib/place/url-snapshot.js +3 -3
  119. package/esm2015/lib/place/url-snapshot.js.map +1 -1
  120. package/esm2015/lib/place/url-snapshot.metadata.json +1 -1
  121. package/esm2015/lib/place/visit.js +5 -5
  122. package/esm2015/lib/place/visit.js.map +1 -1
  123. package/esm2015/lib/place/visit.metadata.json +1 -1
  124. package/fesm2015/coolon-angular-ui-powerups-cypress.js +10 -10
  125. package/fesm2015/coolon-angular-ui-powerups-cypress.js.map +1 -1
  126. package/fesm2015/coolon-angular-ui-powerups.js +84 -82
  127. package/fesm2015/coolon-angular-ui-powerups.js.map +1 -1
  128. package/package.json +10 -9
  129. package/schematics/place-routes/place-class-scanner.js +5 -5
  130. package/schematics/place-routes/place-class-scanner.js.map +1 -1
  131. package/schematics/place-routes/place-def.js +5 -5
  132. package/schematics/place-routes/place-def.js.map +1 -1
  133. package/schematics/utils/import-def.js +4 -4
  134. package/schematics/utils/import-def.js.map +1 -1
  135. package/schematics/utils/method-scanner.js +6 -6
  136. package/schematics/utils/method-scanner.js.map +1 -1
  137. package/schematics/utils/path-helper.js +4 -4
  138. package/schematics/utils/path-helper.js.map +1 -1
  139. package/schematics/utils/source-file-scanner.js +5 -5
  140. package/schematics/utils/source-file-scanner.js.map +1 -1
  141. package/schematics/utils/source-file-utilities.js +2 -2
  142. package/schematics/utils/source-file-utilities.js.map +1 -1
@@ -1,8 +1,8 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
2
  import { assert } from '@coolon/pectin';
3
3
  import { Opts } from '@coolon/typescript-utilities';
4
- import { Memoize } from '@typescript-plus/fast-memoize-decorator/dist/src';
5
- import _ from 'lodash';
4
+ import { Memoize } from '@typescript-plus/fast-memoize-decorator';
5
+ import { isEmpty, isNil } from 'lodash-es';
6
6
  import { ParameterDefinition } from './route/parameter-definition';
7
7
  export class PlaceDefinition {
8
8
  constructor(component, path, authenticate, role, data, routeParameters, children) {
@@ -37,12 +37,12 @@ export class PlaceDefinition {
37
37
  }
38
38
  getPlaceData(key, defaultValue) {
39
39
  return this.data ?
40
- _.isNil(this.data[key]) ? defaultValue : this.data[key] :
40
+ isNil(this.data[key]) ? defaultValue : this.data[key] :
41
41
  defaultValue;
42
42
  }
43
43
  searchPlaceData(keys, defaultValue) {
44
44
  if (this.data) {
45
- const found = keys.find(key => !_.isNil(this.data[key]));
45
+ const found = keys.find(key => !isNil(this.data[key]));
46
46
  return found ? this.data[found] : defaultValue;
47
47
  }
48
48
  else {
@@ -110,7 +110,7 @@ export class PlaceDefinition {
110
110
  // because our id routes redirect if the id isn't present we always have a id
111
111
  // parameter in our params. This will bugger our remember and defaultvalue sanitisation
112
112
  // as it'll see that the id is present (event thought its a blank string).
113
- if (!_.isEmpty(value)) {
113
+ if (!isEmpty(value)) {
114
114
  result[def.name] = def.urlFormat.parse(value);
115
115
  }
116
116
  }
@@ -1 +1 @@
1
- {"version":3,"file":"place-definition.js","sourceRoot":"","sources":["../../../../../../libs/angular-ui-powerups/src/lib/place/place-definition.ts"],"names":[],"mappings":"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","sourcesContent":["import { ParamMap } from '@angular/router';\nimport { assert, Constructable, Trace } from '@coolon/pectin';\nimport { Opts } from '@coolon/typescript-utilities';\nimport { Memoize } from '@typescript-plus/fast-memoize-decorator/dist/src';\nimport _ from 'lodash';\nimport { PlaceComponent } from './place-component';\nimport { ParameterDefinition } from './route/parameter-definition';\nimport { Visit } from './visit';\n\nexport class PlaceDefinition {\n\n constructor(readonly component: Constructable<PlaceComponent>,\n readonly path: string,\n readonly authenticate: boolean,\n readonly role: any,\n readonly data: { [key: string]: any },\n readonly routeParameters: ParameterDefinition<any>[],\n readonly children: PlaceDefinition[]) {\n }\n\n hasRouteId() {\n return !!this.getRouteIdParameterDef();\n }\n\n @Memoize()\n getRouteIdParameterDef(): ParameterDefinition<any> {\n return this.routeParameters.find(p => p.isRouteId);\n }\n\n @Memoize()\n getRouteParameterDefs(includeRouteId = false): ParameterDefinition<any>[] {\n return this.getVisitParameterDefs({ includeRouteId, includeRouteParameters: true });\n }\n\n @Memoize()\n getVisitParameterDefs(include?: PlaceDefinition.ParameterOptions): ParameterDefinition<any>[] {\n const opts = Opts.get(include);\n // includes\n const includeRouteId = !include || opts.getOptional('includeRouteId', false);\n const includeRouteParameters = !include || opts.getOptional('includeRouteParameters', false);\n const includeNonRouteParameters = !include || opts.getOptional('includeNonRouteParameters', false);\n return this.routeParameters.filter(p => {\n return (includeRouteId && p.isRouteId)\n || (includeRouteParameters && p.isRouteParameter && !p.isRouteId) // route id is included in the line above\n || (includeNonRouteParameters && !p.isRouteParameter);\n });\n }\n\n getPlaceData<T>(key: string, defaultValue?: T): T {\n return this.data ?\n _.isNil(this.data[key]) ? defaultValue : this.data[key] :\n defaultValue;\n }\n\n searchPlaceData<T>(keys: string[], defaultValue?: T): T {\n if (this.data) {\n const found = keys.find(key => !_.isNil(this.data[key]));\n return found ? this.data[found] : defaultValue;\n } else {\n return defaultValue;\n }\n }\n\n getRouteIdFrom(visit: Visit) {\n const routeIdParameterDef = this.getRouteIdParameterDef();\n return routeIdParameterDef ? visit.getParameterValue(routeIdParameterDef) : null;\n }\n\n getFormattedRouteId(visit: Visit): any {\n // Note: RouteIds are always present in the url and are just empty strings when not defined. This is\n // mandated by the fact that redirects from <path> to <path>/:id always include the id parameter as\n // an empty string.\n return visit.hasRouteId() ? this.getRouteIdParameterDef().urlFormat.format(visit.getRouteId()) : \"\";\n }\n\n // @Trace()\n getFormattedRouteParameters(visit: Visit, includeRouteId = false): { [p: string]: string } {\n const result: { [p: string]: string } = {};\n this.getVisitParameterDefs({\n includeRouteId, includeRouteParameters: true\n }).forEach(def => {\n const value = visit.getParameterValue(def);\n if (!def.isEmptyValue(value)) {\n if (def.isArray) {\n assert.isArray(value);\n result[def.name] = value.map(v => def.urlFormat.format(v));\n } else {\n assert.isFalsey(Array.isArray(value));\n result[def.name] = def.urlFormat.format(value);\n }\n }\n });\n return result;\n }\n\n getNonRouteParameters(visit: Visit): { [p: string]: string } {\n const result: { [p: string]: string } = {};\n this.getVisitParameterDefs({ includeNonRouteParameters: true }).forEach(def => {\n const value = visit.getParameterValue(def);\n if (!def.isEmptyValue(value)) {\n result[def.name] = value;\n }\n });\n return result;\n }\n\n // @Trace()\n parseRouteParams(params: ParamMap): { [p: string]: any } {\n const result: { [p: string]: any } = {};\n this.getVisitParameterDefs({\n includeRouteId: true,\n includeRouteParameters: true,\n includeNonRouteParameters: false\n }).forEach(def => {\n // params will return null for non existent names\n if (params.has(def.name)) {\n if (def.isArray) {\n // const values = params.getAll(def.name); // TODO: EEEK getAll is returning [\"1,2,3,4\"] when we gave it [\"1\",\"2\",\"3\",\"4\"].\n const values = params.get(def.name).split(',').map(s => s.trim());\n result[def.name] = values.map(v => def.urlFormat.parse(v));\n } else {\n const value = params.get(def.name);\n if (def.isRouteId) { // TODO: Move this to parameter def so it's a strategy pattern\n // because our id routes redirect if the id isn't present we always have a id\n // parameter in our params. This will bugger our remember and defaultvalue sanitisation\n // as it'll see that the id is present (event thought its a blank string).\n if (!_.isEmpty(value)) {\n result[def.name] = def.urlFormat.parse(value);\n }\n } else {\n result[def.name] = def.urlFormat.parse(value);\n }\n }\n }\n });\n return result;\n }\n\n}\n\nexport namespace PlaceDefinition {\n export interface ParameterOptions {\n includeRouteId?: boolean;\n includeRouteParameters?: boolean;\n includeNonRouteParameters?: boolean;\n }\n}\n"]}
1
+ {"version":3,"file":"place-definition.js","sourceRoot":"","sources":["../../../../../../libs/angular-ui-powerups/src/lib/place/place-definition.ts"],"names":[],"mappings":"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","sourcesContent":["import { ParamMap } from '@angular/router';\nimport { assert, Constructable, Trace } from '@coolon/pectin';\nimport { Opts } from '@coolon/typescript-utilities';\nimport { Memoize } from '@typescript-plus/fast-memoize-decorator';\n\nimport { isEmpty, isNil } from 'lodash-es';\nimport { PlaceComponent } from './place-component';\nimport { ParameterDefinition } from './route/parameter-definition';\nimport { Visit } from './visit';\n\nexport class PlaceDefinition {\n\n constructor(readonly component: Constructable<PlaceComponent>,\n readonly path: string,\n readonly authenticate: boolean,\n readonly role: any,\n readonly data: { [key: string]: any },\n readonly routeParameters: ParameterDefinition<any>[],\n readonly children: PlaceDefinition[]) {\n }\n\n hasRouteId() {\n return !!this.getRouteIdParameterDef();\n }\n\n @Memoize()\n getRouteIdParameterDef(): ParameterDefinition<any> {\n return this.routeParameters.find(p => p.isRouteId);\n }\n\n @Memoize()\n getRouteParameterDefs(includeRouteId = false): ParameterDefinition<any>[] {\n return this.getVisitParameterDefs({ includeRouteId, includeRouteParameters: true });\n }\n\n @Memoize()\n getVisitParameterDefs(include?: PlaceDefinition.ParameterOptions): ParameterDefinition<any>[] {\n const opts = Opts.get(include);\n // includes\n const includeRouteId = !include || opts.getOptional('includeRouteId', false);\n const includeRouteParameters = !include || opts.getOptional('includeRouteParameters', false);\n const includeNonRouteParameters = !include || opts.getOptional('includeNonRouteParameters', false);\n return this.routeParameters.filter(p => {\n return (includeRouteId && p.isRouteId)\n || (includeRouteParameters && p.isRouteParameter && !p.isRouteId) // route id is included in the line above\n || (includeNonRouteParameters && !p.isRouteParameter);\n });\n }\n\n getPlaceData<T>(key: string, defaultValue?: T): T {\n return this.data ?\n isNil(this.data[key]) ? defaultValue : this.data[key] :\n defaultValue;\n }\n\n searchPlaceData<T>(keys: string[], defaultValue?: T): T {\n if (this.data) {\n const found = keys.find(key => !isNil(this.data[key]));\n return found ? this.data[found] : defaultValue;\n } else {\n return defaultValue;\n }\n }\n\n getRouteIdFrom(visit: Visit) {\n const routeIdParameterDef = this.getRouteIdParameterDef();\n return routeIdParameterDef ? visit.getParameterValue(routeIdParameterDef) : null;\n }\n\n getFormattedRouteId(visit: Visit): any {\n // Note: RouteIds are always present in the url and are just empty strings when not defined. This is\n // mandated by the fact that redirects from <path> to <path>/:id always include the id parameter as\n // an empty string.\n return visit.hasRouteId() ? this.getRouteIdParameterDef().urlFormat.format(visit.getRouteId()) : \"\";\n }\n\n // @Trace()\n getFormattedRouteParameters(visit: Visit, includeRouteId = false): { [p: string]: string } {\n const result: { [p: string]: string } = {};\n this.getVisitParameterDefs({\n includeRouteId, includeRouteParameters: true\n }).forEach(def => {\n const value = visit.getParameterValue(def);\n if (!def.isEmptyValue(value)) {\n if (def.isArray) {\n assert.isArray(value);\n result[def.name] = value.map(v => def.urlFormat.format(v));\n } else {\n assert.isFalsey(Array.isArray(value));\n result[def.name] = def.urlFormat.format(value);\n }\n }\n });\n return result;\n }\n\n getNonRouteParameters(visit: Visit): { [p: string]: string } {\n const result: { [p: string]: string } = {};\n this.getVisitParameterDefs({ includeNonRouteParameters: true }).forEach(def => {\n const value = visit.getParameterValue(def);\n if (!def.isEmptyValue(value)) {\n result[def.name] = value;\n }\n });\n return result;\n }\n\n // @Trace()\n parseRouteParams(params: ParamMap): { [p: string]: any } {\n const result: { [p: string]: any } = {};\n this.getVisitParameterDefs({\n includeRouteId: true,\n includeRouteParameters: true,\n includeNonRouteParameters: false\n }).forEach(def => {\n // params will return null for non existent names\n if (params.has(def.name)) {\n if (def.isArray) {\n // const values = params.getAll(def.name); // TODO: EEEK getAll is returning [\"1,2,3,4\"] when we gave it [\"1\",\"2\",\"3\",\"4\"].\n const values = params.get(def.name).split(',').map(s => s.trim());\n result[def.name] = values.map(v => def.urlFormat.parse(v));\n } else {\n const value = params.get(def.name);\n if (def.isRouteId) { // TODO: Move this to parameter def so it's a strategy pattern\n // because our id routes redirect if the id isn't present we always have a id\n // parameter in our params. This will bugger our remember and defaultvalue sanitisation\n // as it'll see that the id is present (event thought its a blank string).\n if (!isEmpty(value)) {\n result[def.name] = def.urlFormat.parse(value);\n }\n } else {\n result[def.name] = def.urlFormat.parse(value);\n }\n }\n }\n });\n return result;\n }\n\n}\n\nexport namespace PlaceDefinition {\n export interface ParameterOptions {\n includeRouteId?: boolean;\n includeRouteParameters?: boolean;\n includeNonRouteParameters?: boolean;\n }\n}\n"]}
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"PlaceDefinition":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@coolon/pectin","name":"Constructable","line":11,"character":34,"arguments":[{"__symbolic":"reference","module":"./place-component","name":"PlaceComponent","line":11,"character":48}]},{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","name":"boolean"},{"__symbolic":"reference","name":"any"},{"__symbolic":"error","message":"Expression form not supported","line":15,"character":29},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","module":"./route/parameter-definition","name":"ParameterDefinition","line":16,"character":40,"arguments":[{"__symbolic":"reference","name":"any"}]}]},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"PlaceDefinition"}]}]}],"hasRouteId":[{"__symbolic":"method"}],"getRouteIdParameterDef":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@typescript-plus/fast-memoize-decorator/dist/src","name":"Memoize","line":24,"character":3}}]}],"getRouteParameterDefs":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@typescript-plus/fast-memoize-decorator/dist/src","name":"Memoize","line":29,"character":3}}]}],"getVisitParameterDefs":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@typescript-plus/fast-memoize-decorator/dist/src","name":"Memoize","line":34,"character":3}}]}],"getPlaceData":[{"__symbolic":"method"}],"searchPlaceData":[{"__symbolic":"method"}],"getRouteIdFrom":[{"__symbolic":"method"}],"getFormattedRouteId":[{"__symbolic":"method"}],"getFormattedRouteParameters":[{"__symbolic":"method"}],"getNonRouteParameters":[{"__symbolic":"method"}],"parseRouteParams":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"PlaceDefinition":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@coolon/pectin","name":"Constructable","line":12,"character":34,"arguments":[{"__symbolic":"reference","module":"./place-component","name":"PlaceComponent","line":12,"character":48}]},{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","name":"boolean"},{"__symbolic":"reference","name":"any"},{"__symbolic":"error","message":"Expression form not supported","line":16,"character":29},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","module":"./route/parameter-definition","name":"ParameterDefinition","line":17,"character":40,"arguments":[{"__symbolic":"reference","name":"any"}]}]},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"PlaceDefinition"}]}]}],"hasRouteId":[{"__symbolic":"method"}],"getRouteIdParameterDef":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@typescript-plus/fast-memoize-decorator","name":"Memoize","line":25,"character":3}}]}],"getRouteParameterDefs":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@typescript-plus/fast-memoize-decorator","name":"Memoize","line":30,"character":3}}]}],"getVisitParameterDefs":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@typescript-plus/fast-memoize-decorator","name":"Memoize","line":35,"character":3}}]}],"getPlaceData":[{"__symbolic":"method"}],"searchPlaceData":[{"__symbolic":"method"}],"getRouteIdFrom":[{"__symbolic":"method"}],"getFormattedRouteId":[{"__symbolic":"method"}],"getFormattedRouteParameters":[{"__symbolic":"method"}],"getNonRouteParameters":[{"__symbolic":"method"}],"parseRouteParams":[{"__symbolic":"method"}]}}}}]
@@ -1,6 +1,6 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { assert } from '@coolon/pectin';
3
- import _ from 'lodash';
3
+ import { first } from 'lodash-es';
4
4
  import * as i0 from "@angular/core";
5
5
  export class PlaceHistory {
6
6
  constructor() {
@@ -25,7 +25,7 @@ export class PlaceHistory {
25
25
  return !!((_a = this._previousVisits) === null || _a === void 0 ? void 0 : _a.getVisitFor(placeDef));
26
26
  }
27
27
  getMostRecentVisitFor(placeDef) {
28
- return _.first(this.getHistory(placeDef));
28
+ return first(this.getHistory(placeDef));
29
29
  }
30
30
  getHistory(placeDef) {
31
31
  let history = this._archive.get(placeDef);
@@ -41,7 +41,7 @@ export class PlaceHistory {
41
41
  archive(visits) {
42
42
  visits.forEach(state => {
43
43
  const history = this.getHistory(state.placeDefinition);
44
- const previousState = _.first(history);
44
+ const previousState = first(history);
45
45
  if (!previousState || state.hasChangedFrom(previousState)) {
46
46
  history.unshift(state); // LIFO
47
47
  this.setHistory(state.placeDefinition, history.slice(0, this.placeHistoryDepth));
@@ -92,7 +92,7 @@ PlaceHistory.ctorParameters = () => [];
92
92
  // return Object.keys(parameters).reduce((acc, key) => {
93
93
  // const matchValue = parameters[key];
94
94
  // const visitValue = state.get(key);
95
- // const matched = matchValue === '*' ? !_.isNil(visitValue) : visitValue == matchValue;
95
+ // const matched = matchValue === '*' ? !isNil(visitValue) : visitValue == matchValue;
96
96
  // // Logger.get(this).info(`matched=${matched}`, parameters, visitValue);
97
97
  // return acc && matched;
98
98
  // }, true);
@@ -101,18 +101,18 @@ PlaceHistory.ctorParameters = () => [];
101
101
  // }
102
102
  //
103
103
  // last(): Visit.State {
104
- // return _.findLast(this._history, visit => this._matches(visit))
104
+ // return findLast(this._history, visit => this._matches(visit))
105
105
  // }
106
106
  //
107
107
  // // @trace
108
108
  // allThatMatch(): Visit.State[] {
109
- // return _.filter(this._history, visit => this._matches(visit)).slice(-this._limit);
109
+ // return filter(this._history, visit => this._matches(visit)).slice(-this._limit);
110
110
  // }
111
111
  //
112
112
  // // @trace
113
113
  // mostRecentValueOf<T=any>(param: string, defaultValue: T = null): T {
114
- // const lastStateWithParam = _.findLast(this.allThatMatch(), state => !_.isNil(state.get(param)));
115
- // return _.isNil(lastStateWithParam) ? defaultValue : lastStateWithParam.get(param);
114
+ // const lastStateWithParam = findLast(this.allThatMatch(), state => !isNil(state.get(param)));
115
+ // return isNil(lastStateWithParam) ? defaultValue : lastStateWithParam.get(param);
116
116
  // }
117
117
  //
118
118
  // limit(limit: number): this {
@@ -1 +1 @@
1
- {"version":3,"file":"place-history.js","sourceRoot":"","sources":["../../../../../../libs/angular-ui-powerups/src/lib/place/place-history.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from '@angular/core';\nimport { assert, Trace } from '@coolon/pectin';\nimport _ from 'lodash';\nimport { PlaceDefinition } from './place-definition';\nimport { Visit } from './visit';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PlaceHistory {\n\n private _activeVisits: PlaceHistory.VisitRecord;\n private _previousVisits: PlaceHistory.VisitRecord;\n\n private _archive = new Map<PlaceDefinition, Visit[]>();\n private readonly placeHistoryDepth: number = 4;\n\n constructor() {\n }\n\n notifyNavigationStarted() {\n if (this._activeVisits) {\n this.archive(this._activeVisits.visits);\n this._previousVisits = this._activeVisits;\n }\n }\n\n notifyNavigationFinished(visits: Visit[]) {\n this._activeVisits = new PlaceHistory.VisitRecord(visits);\n }\n\n updateVisit(visit: Visit) {\n assert.isTruthy(this._activeVisits);\n this._activeVisits.update(visit);\n }\n\n lastVisitIncluded(placeDef: PlaceDefinition): boolean {\n return !!this._previousVisits?.getVisitFor(placeDef);\n }\n\n getMostRecentVisitFor(placeDef: PlaceDefinition) {\n return _.first(this.getHistory(placeDef));\n }\n\n getHistory(placeDef: PlaceDefinition): Visit[] {\n let history = this._archive.get(placeDef);\n if (!history) {\n history = [];\n this.setHistory(placeDef, history);\n }\n return history;\n }\n\n private setHistory(placeDef: PlaceDefinition, history: Visit[]) {\n this._archive.set(placeDef, history);\n }\n\n protected archive(visits: Visit[]) {\n visits.forEach(state => {\n const history = this.getHistory(state.placeDefinition);\n const previousState = _.first(history);\n if (!previousState || state.hasChangedFrom(previousState)) {\n history.unshift(state); // LIFO\n this.setHistory(state.placeDefinition, history.slice(0, this.placeHistoryDepth));\n }\n });\n }\n\n\n}\n\nexport namespace PlaceHistory {\n\n export class VisitRecord {\n constructor(public visits: Visit[]) {\n }\n\n update(visit: Visit) {\n this.visits = this.visits.filter(v => v.placeDefinition !== visit.placeDefinition).concat(visit);\n }\n\n getVisitFor(placeDef: PlaceDefinition): Visit | undefined {\n return this.visits.find(v => v.placeDefinition === placeDef);\n }\n }\n\n // export class Query {\n // private _history: Visit.State[];\n // private _places: Place[];\n // private _predicate: (visit: any) => boolean;\n // private _limit: number;\n //\n // constructor(history, limit = history.length) {\n // this._history = history;\n // this._places = [];\n // this._predicate = (visit => true);\n // this._limit = limit;\n // }\n //\n // to(...places:Place[]):this {\n // this._places = places;\n // return this;\n // }\n //\n // with(parameters: { [parameter: string]: any }): this {\n // this.matching(state => {\n // return Object.keys(parameters).reduce((acc, key) => {\n // const matchValue = parameters[key];\n // const visitValue = state.get(key);\n // const matched = matchValue === '*' ? !_.isNil(visitValue) : visitValue == matchValue;\n // // Logger.get(this).info(`matched=${matched}`, parameters, visitValue);\n // return acc && matched;\n // }, true);\n // });\n // return this;\n // }\n //\n // last(): Visit.State {\n // return _.findLast(this._history, visit => this._matches(visit))\n // }\n //\n // // @trace\n // allThatMatch(): Visit.State[] {\n // return _.filter(this._history, visit => this._matches(visit)).slice(-this._limit);\n // }\n //\n // // @trace\n // mostRecentValueOf<T=any>(param: string, defaultValue: T = null): T {\n // const lastStateWithParam = _.findLast(this.allThatMatch(), state => !_.isNil(state.get(param)));\n // return _.isNil(lastStateWithParam) ? defaultValue : lastStateWithParam.get(param);\n // }\n //\n // limit(limit: number): this {\n // this._limit = limit;\n // return this;\n // }\n //\n // matching(predicate: (visit: Visit.State) => boolean): this {\n // this._predicate = predicate;\n // return this;\n // }\n //\n // _matches(visit: Visit.State) {\n // return this._isPlaceMatch(visit) && this._predicate(visit);\n // }\n //\n // _isPlaceMatch(visit: Visit.State) {\n // return this._places.length < 1 || this._places.includes(visit.place)\n // }\n //\n // }\n\n}\n"]}
1
+ {"version":3,"file":"place-history.js","sourceRoot":"","sources":["../../../../../../libs/angular-ui-powerups/src/lib/place/place-history.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from '@angular/core';\nimport { assert, Trace } from '@coolon/pectin';\n\nimport { first } from 'lodash-es';\nimport { PlaceDefinition } from './place-definition';\nimport { Visit } from './visit';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PlaceHistory {\n\n private _activeVisits: PlaceHistory.VisitRecord;\n private _previousVisits: PlaceHistory.VisitRecord;\n\n private _archive = new Map<PlaceDefinition, Visit[]>();\n private readonly placeHistoryDepth: number = 4;\n\n constructor() {\n }\n\n notifyNavigationStarted() {\n if (this._activeVisits) {\n this.archive(this._activeVisits.visits);\n this._previousVisits = this._activeVisits;\n }\n }\n\n notifyNavigationFinished(visits: Visit[]) {\n this._activeVisits = new PlaceHistory.VisitRecord(visits);\n }\n\n updateVisit(visit: Visit) {\n assert.isTruthy(this._activeVisits);\n this._activeVisits.update(visit);\n }\n\n lastVisitIncluded(placeDef: PlaceDefinition): boolean {\n return !!this._previousVisits?.getVisitFor(placeDef);\n }\n\n getMostRecentVisitFor(placeDef: PlaceDefinition) {\n return first(this.getHistory(placeDef));\n }\n\n getHistory(placeDef: PlaceDefinition): Visit[] {\n let history = this._archive.get(placeDef);\n if (!history) {\n history = [];\n this.setHistory(placeDef, history);\n }\n return history;\n }\n\n private setHistory(placeDef: PlaceDefinition, history: Visit[]) {\n this._archive.set(placeDef, history);\n }\n\n protected archive(visits: Visit[]) {\n visits.forEach(state => {\n const history = this.getHistory(state.placeDefinition);\n const previousState = first(history);\n if (!previousState || state.hasChangedFrom(previousState)) {\n history.unshift(state); // LIFO\n this.setHistory(state.placeDefinition, history.slice(0, this.placeHistoryDepth));\n }\n });\n }\n\n\n}\n\nexport namespace PlaceHistory {\n\n export class VisitRecord {\n constructor(public visits: Visit[]) {\n }\n\n update(visit: Visit) {\n this.visits = this.visits.filter(v => v.placeDefinition !== visit.placeDefinition).concat(visit);\n }\n\n getVisitFor(placeDef: PlaceDefinition): Visit | undefined {\n return this.visits.find(v => v.placeDefinition === placeDef);\n }\n }\n\n // export class Query {\n // private _history: Visit.State[];\n // private _places: Place[];\n // private _predicate: (visit: any) => boolean;\n // private _limit: number;\n //\n // constructor(history, limit = history.length) {\n // this._history = history;\n // this._places = [];\n // this._predicate = (visit => true);\n // this._limit = limit;\n // }\n //\n // to(...places:Place[]):this {\n // this._places = places;\n // return this;\n // }\n //\n // with(parameters: { [parameter: string]: any }): this {\n // this.matching(state => {\n // return Object.keys(parameters).reduce((acc, key) => {\n // const matchValue = parameters[key];\n // const visitValue = state.get(key);\n // const matched = matchValue === '*' ? !isNil(visitValue) : visitValue == matchValue;\n // // Logger.get(this).info(`matched=${matched}`, parameters, visitValue);\n // return acc && matched;\n // }, true);\n // });\n // return this;\n // }\n //\n // last(): Visit.State {\n // return findLast(this._history, visit => this._matches(visit))\n // }\n //\n // // @trace\n // allThatMatch(): Visit.State[] {\n // return filter(this._history, visit => this._matches(visit)).slice(-this._limit);\n // }\n //\n // // @trace\n // mostRecentValueOf<T=any>(param: string, defaultValue: T = null): T {\n // const lastStateWithParam = findLast(this.allThatMatch(), state => !isNil(state.get(param)));\n // return isNil(lastStateWithParam) ? defaultValue : lastStateWithParam.get(param);\n // }\n //\n // limit(limit: number): this {\n // this._limit = limit;\n // return this;\n // }\n //\n // matching(predicate: (visit: Visit.State) => boolean): this {\n // this._predicate = predicate;\n // return this;\n // }\n //\n // _matches(visit: Visit.State) {\n // return this._isPlaceMatch(visit) && this._predicate(visit);\n // }\n //\n // _isPlaceMatch(visit: Visit.State) {\n // return this._places.length < 1 || this._places.includes(visit.place)\n // }\n //\n // }\n\n}\n"]}
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"PlaceHistory":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":6,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"notifyNavigationStarted":[{"__symbolic":"method"}],"notifyNavigationFinished":[{"__symbolic":"method"}],"updateVisit":[{"__symbolic":"method"}],"lastVisitIncluded":[{"__symbolic":"method"}],"getMostRecentVisitFor":[{"__symbolic":"method"}],"getHistory":[{"__symbolic":"method"}],"setHistory":[{"__symbolic":"method"}],"archive":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"PlaceHistory":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":7,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"notifyNavigationStarted":[{"__symbolic":"method"}],"notifyNavigationFinished":[{"__symbolic":"method"}],"updateVisit":[{"__symbolic":"method"}],"lastVisitIncluded":[{"__symbolic":"method"}],"getMostRecentVisitFor":[{"__symbolic":"method"}],"getHistory":[{"__symbolic":"method"}],"setHistory":[{"__symbolic":"method"}],"archive":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}}}}]
@@ -1,12 +1,12 @@
1
1
  import { lang } from '@coolon/pectin';
2
- import * as _ from 'lodash';
2
+ import { isNil } from 'lodash-es';
3
3
  import { PlaceComponent } from './place-component';
4
4
  import { PlaceDefinition } from './place-definition';
5
5
  export function Place(options) {
6
6
  return (target) => {
7
7
  var _a;
8
8
  if (PlaceComponent.isPlaceComponentConstructor(target)) {
9
- PlaceComponent.injectDefinition(target, new PlaceDefinition(target, options.path, _.isNil(options.authenticate) ? true : options.authenticate, (_a = options.role) !== null && _a !== void 0 ? _a : options.roles, options.data, PlaceComponent.getRouteParameters(target), (options.children || []).map(c => PlaceComponent.getDefinition(c))));
9
+ PlaceComponent.injectDefinition(target, new PlaceDefinition(target, options.path, isNil(options.authenticate) ? true : options.authenticate, (_a = options.role) !== null && _a !== void 0 ? _a : options.roles, options.data, PlaceComponent.getRouteParameters(target), (options.children || []).map(c => PlaceComponent.getDefinition(c))));
10
10
  if (options.roles) {
11
11
  console.warn(`${target.name} @Place({roles: string[]}) is deprecated. Use @Place({role:any}) instead`);
12
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"place.decorator.js","sourceRoot":"","sources":["../../../../../../libs/angular-ui-powerups/src/lib/place/place.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,IAAI,EAAU,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,UAAU,KAAK,CAAC,OAAsB;IAC1C,OAAO,CAAC,MAAgB,EAAE,EAAE;;QAC1B,IAAI,cAAc,CAAC,2BAA2B,CAAC,MAAM,CAAC,EAAE;YACtD,cAAc,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,eAAe,CACzD,MAAM,EACN,OAAO,CAAC,IAAI,EACZ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EAC3D,MAAA,OAAO,CAAC,IAAI,mCAAI,OAAO,CAAC,KAAK,EAC7B,OAAO,CAAC,IAAI,EACZ,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC,EACzC,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CACnE,CAAC,CAAC;YAEH,IAAI,OAAO,CAAC,KAAK,EAAE;gBACjB,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,2EAA2E,CAAC,CAAA;aACxG;SAEF;aAAM;YACL,IAAI,CAAC,YAAY,CAAC,GAAG,MAAM,yDAAyD,CAAC,CAAC;SACvF;IACH,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { Constructable, lang, Logger } from '@coolon/pectin';\nimport * as _ from 'lodash';\nimport { PlaceComponent } from './place-component';\nimport { PlaceDefinition } from './place-definition';\n\nexport function Place(options: Place.Options) {\n return (target: Function) => {\n if (PlaceComponent.isPlaceComponentConstructor(target)) {\n PlaceComponent.injectDefinition(target, new PlaceDefinition(\n target,\n options.path,\n _.isNil(options.authenticate) ? true : options.authenticate,\n options.role ?? options.roles,\n options.data,\n PlaceComponent.getRouteParameters(target),\n (options.children || []).map(c => PlaceComponent.getDefinition(c))\n ));\n\n if (options.roles) {\n console.warn(`${target.name} @Place({roles: string[]}) is deprecated. Use @Place({role:any}) instead`)\n }\n\n } else {\n lang.illegalState(`${target} must extend PlaceComponent to use the @Place decorator`);\n }\n };\n}\n\nexport namespace Place {\n\n export interface Options {\n path: string;\n data?: { [key: string]: any }; // defaults to true\n authenticate?: boolean; // defaults to true\n role?: any; // defaults to empty array\n\n /**\n * @deprecated use #role instead\n */\n roles?: string[]; // defaults to empty array\n\n children?: Constructable<PlaceComponent>[];\n defaultChild?: Constructable<PlaceComponent>;\n }\n\n}\n\n"]}
1
+ {"version":3,"file":"place.decorator.js","sourceRoot":"","sources":["../../../../../../libs/angular-ui-powerups/src/lib/place/place.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,IAAI,EAAU,MAAM,gBAAgB,CAAC;AAE7D,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,UAAU,KAAK,CAAC,OAAsB;IAC1C,OAAO,CAAC,MAAgB,EAAE,EAAE;;QAC1B,IAAI,cAAc,CAAC,2BAA2B,CAAC,MAAM,CAAC,EAAE;YACtD,cAAc,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,eAAe,CACzD,MAAM,EACN,OAAO,CAAC,IAAI,EACZ,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EACzD,MAAA,OAAO,CAAC,IAAI,mCAAI,OAAO,CAAC,KAAK,EAC7B,OAAO,CAAC,IAAI,EACZ,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC,EACzC,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CACnE,CAAC,CAAC;YAEH,IAAI,OAAO,CAAC,KAAK,EAAE;gBACjB,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,2EAA2E,CAAC,CAAA;aACxG;SAEF;aAAM;YACL,IAAI,CAAC,YAAY,CAAC,GAAG,MAAM,yDAAyD,CAAC,CAAC;SACvF;IACH,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { Constructable, lang, Logger } from '@coolon/pectin';\n\nimport { isNil } from 'lodash-es';\nimport { PlaceComponent } from './place-component';\nimport { PlaceDefinition } from './place-definition';\n\nexport function Place(options: Place.Options) {\n return (target: Function) => {\n if (PlaceComponent.isPlaceComponentConstructor(target)) {\n PlaceComponent.injectDefinition(target, new PlaceDefinition(\n target,\n options.path,\n isNil(options.authenticate) ? true : options.authenticate,\n options.role ?? options.roles,\n options.data,\n PlaceComponent.getRouteParameters(target),\n (options.children || []).map(c => PlaceComponent.getDefinition(c))\n ));\n\n if (options.roles) {\n console.warn(`${target.name} @Place({roles: string[]}) is deprecated. Use @Place({role:any}) instead`)\n }\n\n } else {\n lang.illegalState(`${target} must extend PlaceComponent to use the @Place decorator`);\n }\n };\n}\n\nexport namespace Place {\n\n export interface Options {\n path: string;\n data?: { [key: string]: any }; // defaults to true\n authenticate?: boolean; // defaults to true\n role?: any; // defaults to empty array\n\n /**\n * @deprecated use #role instead\n */\n roles?: string[]; // defaults to empty array\n\n children?: Constructable<PlaceComponent>[];\n defaultChild?: Constructable<PlaceComponent>;\n }\n\n}\n\n"]}
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"Place":{"__symbolic":"function","parameters":["options"],"value":{"__symbolic":"error","message":"Lambda not supported","line":6,"character":9}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"Place":{"__symbolic":"function","parameters":["options"],"value":{"__symbolic":"error","message":"Lambda not supported","line":7,"character":9}}}}]
@@ -1,4 +1,4 @@
1
- import _ from 'lodash';
1
+ import { isNumber, isNaN as _isNaN } from 'lodash-es';
2
2
  export var Formatter;
3
3
  (function (Formatter) {
4
4
  class StringType {
@@ -11,11 +11,11 @@ export var Formatter;
11
11
  }
12
12
  class NumberType {
13
13
  format(value) {
14
- return _.isNumber(value) && !_.isNaN(value) ? `${value}` : null;
14
+ return isNumber(value) && !isNaN(value) ? `${value}` : null;
15
15
  }
16
16
  parse(value) {
17
17
  const parsed = Number.parseFloat(value);
18
- return _.isNaN(parsed) ? null : parsed;
18
+ return _isNaN(parsed) ? null : parsed;
19
19
  }
20
20
  }
21
21
  class BooleanType {
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../../../../../../libs/angular-ui-powerups/src/lib/place/route/formatter.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,QAAQ,CAAC;AAQvB,MAAM,KAAW,SAAS,CAoCzB;AApCD,WAAiB,SAAS;IAExB,MAAM,UAAU;QACd,MAAM,CAAC,KAAa;YAClB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,KAAK,CAAC,KAAa;YACjB,OAAO,KAAK,CAAC;QACf,CAAC;KACF;IAED,MAAM,UAAU;QACd,MAAM,CAAC,KAAa;YAClB,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAClE,CAAC;QAED,KAAK,CAAC,KAAa;YACjB,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACxC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;QACzC,CAAC;KACF;IAED,MAAM,WAAW;QACf,MAAM,CAAC,KAAc;YACnB,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAClC,CAAC;QAED,KAAK,CAAC,KAAa;YACjB,OAAO,KAAK,KAAK,MAAM,CAAC;QAC1B,CAAC;KACF;IAEY,gBAAM,GAAG,IAAI,UAAU,EAAE,CAAC;IAC1B,gBAAM,GAAG,IAAI,UAAU,EAAE,CAAC;IAC1B,iBAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AAC3C,CAAC,EApCgB,SAAS,KAAT,SAAS,QAoCzB","sourcesContent":["import _ from 'lodash';\n\nexport interface Formatter<T> {\n format(value: T): string;\n\n parse(value: string): T;\n}\n\nexport namespace Formatter {\n\n class StringType implements Formatter<string> {\n format(value: string): string {\n return value;\n }\n\n parse(value: string): string {\n return value;\n }\n }\n\n class NumberType implements Formatter<number> {\n format(value: number): string {\n return _.isNumber(value) && !_.isNaN(value) ? `${value}` : null;\n }\n\n parse(value: string): number {\n const parsed = Number.parseFloat(value);\n return _.isNaN(parsed) ? null : parsed;\n }\n }\n\n class BooleanType implements Formatter<boolean> {\n format(value: boolean): string {\n return value ? 'true' : 'false';\n }\n\n parse(value: string): boolean {\n return value === 'true';\n }\n }\n\n export const STRING = new StringType();\n export const NUMBER = new NumberType();\n export const BOOLEAN = new BooleanType();\n}\n"]}
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../../../../../../libs/angular-ui-powerups/src/lib/place/route/formatter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAG,KAAK,IAAI,MAAM,EAAC,MAAM,WAAW,CAAC;AAQtD,MAAM,KAAW,SAAS,CAoCzB;AApCD,WAAiB,SAAS;IAExB,MAAM,UAAU;QACd,MAAM,CAAC,KAAa;YAClB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,KAAK,CAAC,KAAa;YACjB,OAAO,KAAK,CAAC;QACf,CAAC;KACF;IAED,MAAM,UAAU;QACd,MAAM,CAAC,KAAa;YAClB,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9D,CAAC;QAED,KAAK,CAAC,KAAa;YACjB,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACxC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;QACxC,CAAC;KACF;IAED,MAAM,WAAW;QACf,MAAM,CAAC,KAAc;YACnB,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAClC,CAAC;QAED,KAAK,CAAC,KAAa;YACjB,OAAO,KAAK,KAAK,MAAM,CAAC;QAC1B,CAAC;KACF;IAEY,gBAAM,GAAG,IAAI,UAAU,EAAE,CAAC;IAC1B,gBAAM,GAAG,IAAI,UAAU,EAAE,CAAC;IAC1B,iBAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AAC3C,CAAC,EApCgB,SAAS,KAAT,SAAS,QAoCzB","sourcesContent":["\nimport { isNumber , isNaN as _isNaN} from 'lodash-es';\n\nexport interface Formatter<T> {\n format(value: T): string;\n\n parse(value: string): T;\n}\n\nexport namespace Formatter {\n\n class StringType implements Formatter<string> {\n format(value: string): string {\n return value;\n }\n\n parse(value: string): string {\n return value;\n }\n }\n\n class NumberType implements Formatter<number> {\n format(value: number): string {\n return isNumber(value) && !isNaN(value) ? `${value}` : null;\n }\n\n parse(value: string): number {\n const parsed = Number.parseFloat(value);\n return _isNaN(parsed) ? null : parsed;\n }\n }\n\n class BooleanType implements Formatter<boolean> {\n format(value: boolean): string {\n return value ? 'true' : 'false';\n }\n\n parse(value: string): boolean {\n return value === 'true';\n }\n }\n\n export const STRING = new StringType();\n export const NUMBER = new NumberType();\n export const BOOLEAN = new BooleanType();\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import { __awaiter } from "tslib";
2
2
  import { MutableListModel, MutableValueModel } from '@coolon/pectin';
3
3
  import { lang, Opts } from '@coolon/typescript-utilities';
4
- import _ from 'lodash';
4
+ import { isEqual, isFunction, isNil, isObject } from 'lodash-es';
5
5
  const PARAMETER_DEFINITION_KEY = Symbol('parameterDefinition');
6
6
  export class ParameterDefinition {
7
7
  constructor(propertyName, options, urlFormat) {
@@ -56,11 +56,11 @@ export class ParameterDefinition {
56
56
  }
57
57
  prepareCustomSanitiser(injector) {
58
58
  const customSanitiser = this.options.getOptional('sanitiser', null);
59
- if (_.isFunction(customSanitiser)) {
59
+ if (isFunction(customSanitiser)) {
60
60
  return injector.get(customSanitiser);
61
61
  }
62
- if (_.isObject(customSanitiser)) {
63
- return _.isFunction(customSanitiser['sanitise']) ?
62
+ if (isObject(customSanitiser)) {
63
+ return isFunction(customSanitiser['sanitise']) ?
64
64
  customSanitiser :
65
65
  lang.illegalState(`expected @VisitParameter({sanitiser: ...}) for ${this.propertyName} to be a constructor or instance of ParameterSanitiser, got: ` + customSanitiser);
66
66
  }
@@ -79,7 +79,7 @@ export class ParameterDefinition {
79
79
  this.backingModelFactory = () => new MutableValueModel();
80
80
  }
81
81
  isEmptyValue(value) {
82
- return _.isNil(value);
82
+ return isNil(value);
83
83
  }
84
84
  hasChanged(a, b) {
85
85
  return a !== b;
@@ -94,7 +94,7 @@ export class ParameterDefinition {
94
94
  this.backingModelFactory = () => new MutableValueModel();
95
95
  }
96
96
  isEmptyValue(value) {
97
- return _.isNil(value);
97
+ return isNil(value);
98
98
  }
99
99
  hasChanged(a, b) {
100
100
  return a !== b;
@@ -109,10 +109,10 @@ export class ParameterDefinition {
109
109
  this.backingModelFactory = () => new MutableListModel();
110
110
  }
111
111
  isEmptyValue(value) {
112
- return _.isNil(value) || value.length < 1;
112
+ return isNil(value) || value.length < 1;
113
113
  }
114
114
  hasChanged(a, b) {
115
- return !_.isEqual(a, b);
115
+ return !isEqual(a, b);
116
116
  }
117
117
  }
118
118
  ParameterDefinition.ArrayParameter = ArrayParameter;
@@ -1 +1 @@
1
- {"version":3,"file":"parameter-definition.js","sourceRoot":"","sources":["../../../../../../../libs/angular-ui-powerups/src/lib/place/route/parameter-definition.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injector } from '@angular/core';\nimport { Constructable, HasValue, ListModel, MutableListModel, MutableValueModel, ValueModel } from '@coolon/pectin';\nimport { lang, Opts } from '@coolon/typescript-utilities';\nimport _ from 'lodash';\nimport { PlaceHistory } from '../place-history';\nimport { Visit } from '../visit';\nimport { Formatter } from './formatter';\nimport { ParameterSanitiser } from './parameter-sanitiser';\n\nconst PARAMETER_DEFINITION_KEY = Symbol('parameterDefinition');\n\n\nexport abstract class ParameterDefinition<T, E = T> {\n\n abstract readonly isRouteId: boolean;\n abstract readonly isArray: boolean;\n\n readonly remember: boolean;\n readonly defaultValue: T;\n private options: Opts<ParameterDefinition.Options<T>>;\n protected abstract backingModelFactory: () => HasValue<T>;\n\n constructor(readonly propertyName: string, options: ParameterDefinition.Options<T>, readonly urlFormat?: Formatter<E>) {\n this.options = Opts.get(options);\n this.remember = this.options.getOptional('remember', false);\n this.defaultValue = this.options.getOptional('defaultValue', null);\n }\n\n get name() {\n return this.options.getOptional('as', this.propertyName);\n }\n\n // @Trace()\n get isRouteParameter(): boolean {\n return !!this.urlFormat;\n }\n\n abstract isEmptyValue(value: T): boolean;\n\n abstract hasChanged(a: any, b: any): boolean;\n\n createBackingModel(): HasValue<T> {\n const model = this.backingModelFactory();\n model[PARAMETER_DEFINITION_KEY] = this;\n return model;\n }\n\n protected getOptionValue<K extends keyof ParameterDefinition.Options<T>>(key: K): ParameterDefinition.Options<T>[K] {\n return this.options.getOptional(key, null);\n }\n\n // @Trace()\n async sanitise(value: T, visit: Visit, placeHistory: PlaceHistory, injector: Injector, isPopState: boolean): Promise<T> {\n // console.log(`sanitise(${this.propertyName})`)\n value = await this.sanitiseMissing(visit, placeHistory, value);\n value = await this.runCustomSanitiser(value, visit, placeHistory, injector, isPopState);\n return value;\n }\n\n private async runCustomSanitiser(value: T, visit: Visit, placeHistory: PlaceHistory, injector: Injector, isPopState: boolean): Promise<T> {\n const customSanitiser = this.prepareCustomSanitiser(injector);\n return customSanitiser ? customSanitiser.sanitise(value, visit, injector) : value;\n }\n\n private sanitiseMissing(visit: Visit, placeHistory: PlaceHistory, value: T) {\n if (this.isMissingFrom(visit)) {\n const returningFromSomewhereElse = !placeHistory.lastVisitIncluded(visit.placeDefinition);\n if (returningFromSomewhereElse) {\n const lastKnownVisit = placeHistory.getMostRecentVisitFor(visit.placeDefinition);\n if (this.remember && lastKnownVisit) {\n value = lastKnownVisit.getParameterValue(this);\n }\n value = this.isEmptyValue(value) ? this.defaultValue : value;\n }\n }\n return value;\n }\n\n private prepareCustomSanitiser(injector: Injector): ParameterSanitiser<any> {\n const customSanitiser = this.options.getOptional('sanitiser', null);\n if (_.isFunction(customSanitiser)) {\n return injector.get(customSanitiser);\n }\n if (_.isObject(customSanitiser)) {\n return _.isFunction(customSanitiser['sanitise']) ?\n customSanitiser as ParameterSanitiser<any> :\n lang.illegalState(`expected @VisitParameter({sanitiser: ...}) for ${this.propertyName} to be a constructor or instance of ParameterSanitiser, got: ` + customSanitiser);\n }\n return undefined;\n }\n\n private isMissingFrom(visit: Visit) {\n return !visit.hasParameter(this);\n }\n}\n\nexport namespace ParameterDefinition {\n\n export interface Options<T> {\n as?: string;\n optional?: boolean;\n remember?: boolean;\n defaultValue?: T;\n sanitiser?: Constructable<ParameterSanitiser<T>> | ParameterSanitiser<T>;\n }\n\n export class RouteId<T> extends ParameterDefinition<T> {\n readonly isRouteId = true;\n readonly isArray = false;\n protected backingModelFactory = () => new MutableValueModel<T>();\n\n isEmptyValue(value: T): boolean {\n return _.isNil(value);\n }\n\n hasChanged(a: any, b: any): boolean {\n return a !== b;\n }\n\n }\n\n export class ValueParameter<T> extends ParameterDefinition<T> {\n readonly isRouteId = false;\n readonly isArray = false;\n protected backingModelFactory = () => new MutableValueModel<T>();\n\n isEmptyValue(value: T): boolean {\n return _.isNil(value);\n }\n\n hasChanged(a: any, b: any): boolean {\n return a !== b;\n }\n }\n\n export class ArrayParameter<T> extends ParameterDefinition<T[], T> {\n readonly isRouteId = false;\n readonly isArray = true;\n protected backingModelFactory = () => new MutableListModel<T>();\n\n constructor(parameterName: string, options: Options<T[]>, urlFormat: Formatter<T>) {\n super(parameterName, options, urlFormat);\n }\n\n isEmptyValue(value: T[]): boolean {\n return _.isNil(value) || value.length < 1;\n }\n\n hasChanged(a: T[], b: T[]): boolean {\n return !_.isEqual(a, b);\n }\n\n }\n\n export function get<T>(model: ValueModel<T>): ParameterDefinition.ValueParameter<T>\n export function get<T>(model: ListModel<T>): ParameterDefinition.ArrayParameter<T>\n export function get<T>(model: ValueModel<T> | ListModel<T>): ParameterDefinition.ValueParameter<T> | ParameterDefinition.ArrayParameter<T> {\n const parameterDefinition = model[PARAMETER_DEFINITION_KEY];\n if (!parameterDefinition) {\n lang.illegalArgument('model hasn\\'t been annotated with @VisitParameter, @VisitParameterList or @RouteId');\n }\n return parameterDefinition;\n }\n\n\n}\n"]}
1
+ {"version":3,"file":"parameter-definition.js","sourceRoot":"","sources":["../../../../../../../libs/angular-ui-powerups/src/lib/place/route/parameter-definition.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injector } from '@angular/core';\nimport { Constructable, HasValue, ListModel, MutableListModel, MutableValueModel, ValueModel } from '@coolon/pectin';\nimport { lang, Opts } from '@coolon/typescript-utilities';\n\nimport { isEqual, isFunction, isNil, isObject } from 'lodash-es';\nimport { PlaceHistory } from '../place-history';\nimport { Visit } from '../visit';\nimport { Formatter } from './formatter';\nimport { ParameterSanitiser } from './parameter-sanitiser';\n\nconst PARAMETER_DEFINITION_KEY = Symbol('parameterDefinition');\n\n\nexport abstract class ParameterDefinition<T, E = T> {\n\n abstract readonly isRouteId: boolean;\n abstract readonly isArray: boolean;\n\n readonly remember: boolean;\n readonly defaultValue: T;\n private options: Opts<ParameterDefinition.Options<T>>;\n protected abstract backingModelFactory: () => HasValue<T>;\n\n constructor(readonly propertyName: string, options: ParameterDefinition.Options<T>, readonly urlFormat?: Formatter<E>) {\n this.options = Opts.get(options);\n this.remember = this.options.getOptional('remember', false);\n this.defaultValue = this.options.getOptional('defaultValue', null);\n }\n\n get name() {\n return this.options.getOptional('as', this.propertyName);\n }\n\n // @Trace()\n get isRouteParameter(): boolean {\n return !!this.urlFormat;\n }\n\n abstract isEmptyValue(value: T): boolean;\n\n abstract hasChanged(a: any, b: any): boolean;\n\n createBackingModel(): HasValue<T> {\n const model = this.backingModelFactory();\n model[PARAMETER_DEFINITION_KEY] = this;\n return model;\n }\n\n protected getOptionValue<K extends keyof ParameterDefinition.Options<T>>(key: K): ParameterDefinition.Options<T>[K] {\n return this.options.getOptional(key, null);\n }\n\n // @Trace()\n async sanitise(value: T, visit: Visit, placeHistory: PlaceHistory, injector: Injector, isPopState: boolean): Promise<T> {\n // console.log(`sanitise(${this.propertyName})`)\n value = await this.sanitiseMissing(visit, placeHistory, value);\n value = await this.runCustomSanitiser(value, visit, placeHistory, injector, isPopState);\n return value;\n }\n\n private async runCustomSanitiser(value: T, visit: Visit, placeHistory: PlaceHistory, injector: Injector, isPopState: boolean): Promise<T> {\n const customSanitiser = this.prepareCustomSanitiser(injector);\n return customSanitiser ? customSanitiser.sanitise(value, visit, injector) : value;\n }\n\n private sanitiseMissing(visit: Visit, placeHistory: PlaceHistory, value: T) {\n if (this.isMissingFrom(visit)) {\n const returningFromSomewhereElse = !placeHistory.lastVisitIncluded(visit.placeDefinition);\n if (returningFromSomewhereElse) {\n const lastKnownVisit = placeHistory.getMostRecentVisitFor(visit.placeDefinition);\n if (this.remember && lastKnownVisit) {\n value = lastKnownVisit.getParameterValue(this);\n }\n value = this.isEmptyValue(value) ? this.defaultValue : value;\n }\n }\n return value;\n }\n\n private prepareCustomSanitiser(injector: Injector): ParameterSanitiser<any> {\n const customSanitiser = this.options.getOptional('sanitiser', null);\n if (isFunction(customSanitiser)) {\n return injector.get(customSanitiser);\n }\n if (isObject(customSanitiser)) {\n return isFunction(customSanitiser['sanitise']) ?\n customSanitiser as ParameterSanitiser<any> :\n lang.illegalState(`expected @VisitParameter({sanitiser: ...}) for ${this.propertyName} to be a constructor or instance of ParameterSanitiser, got: ` + customSanitiser);\n }\n return undefined;\n }\n\n private isMissingFrom(visit: Visit) {\n return !visit.hasParameter(this);\n }\n}\n\nexport namespace ParameterDefinition {\n\n export interface Options<T> {\n as?: string;\n optional?: boolean;\n remember?: boolean;\n defaultValue?: T;\n sanitiser?: Constructable<ParameterSanitiser<T>> | ParameterSanitiser<T>;\n }\n\n export class RouteId<T> extends ParameterDefinition<T> {\n readonly isRouteId = true;\n readonly isArray = false;\n protected backingModelFactory = () => new MutableValueModel<T>();\n\n isEmptyValue(value: T): boolean {\n return isNil(value);\n }\n\n hasChanged(a: any, b: any): boolean {\n return a !== b;\n }\n\n }\n\n export class ValueParameter<T> extends ParameterDefinition<T> {\n readonly isRouteId = false;\n readonly isArray = false;\n protected backingModelFactory = () => new MutableValueModel<T>();\n\n isEmptyValue(value: T): boolean {\n return isNil(value);\n }\n\n hasChanged(a: any, b: any): boolean {\n return a !== b;\n }\n }\n\n export class ArrayParameter<T> extends ParameterDefinition<T[], T> {\n readonly isRouteId = false;\n readonly isArray = true;\n protected backingModelFactory = () => new MutableListModel<T>();\n\n constructor(parameterName: string, options: Options<T[]>, urlFormat: Formatter<T>) {\n super(parameterName, options, urlFormat);\n }\n\n isEmptyValue(value: T[]): boolean {\n return isNil(value) || value.length < 1;\n }\n\n hasChanged(a: T[], b: T[]): boolean {\n return !isEqual(a, b);\n }\n\n }\n\n export function get<T>(model: ValueModel<T>): ParameterDefinition.ValueParameter<T>\n export function get<T>(model: ListModel<T>): ParameterDefinition.ArrayParameter<T>\n export function get<T>(model: ValueModel<T> | ListModel<T>): ParameterDefinition.ValueParameter<T> | ParameterDefinition.ArrayParameter<T> {\n const parameterDefinition = model[PARAMETER_DEFINITION_KEY];\n if (!parameterDefinition) {\n lang.illegalArgument('model hasn\\'t been annotated with @VisitParameter, @VisitParameterList or @RouteId');\n }\n return parameterDefinition;\n }\n\n\n}\n"]}
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"ParameterDefinition":{"__symbolic":"class","arity":2,"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ParameterDefinition"},"member":"Options","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":22,"character":82,"context":{"typeName":"T"}}]},{"__symbolic":"reference","module":"./formatter","name":"Formatter","line":22,"character":107,"arguments":[{"__symbolic":"error","message":"Could not resolve type","line":22,"character":117,"context":{"typeName":"E"}}]}]}],"isEmptyValue":[{"__symbolic":"method"}],"hasChanged":[{"__symbolic":"method"}],"createBackingModel":[{"__symbolic":"method"}],"getOptionValue":[{"__symbolic":"method"}],"sanitise":[{"__symbolic":"method"}],"runCustomSanitiser":[{"__symbolic":"method"}],"sanitiseMissing":[{"__symbolic":"method"}],"prepareCustomSanitiser":[{"__symbolic":"method"}],"isMissingFrom":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"ParameterDefinition":{"__symbolic":"class","arity":2,"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ParameterDefinition"},"member":"Options","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":23,"character":82,"context":{"typeName":"T"}}]},{"__symbolic":"reference","module":"./formatter","name":"Formatter","line":23,"character":107,"arguments":[{"__symbolic":"error","message":"Could not resolve type","line":23,"character":117,"context":{"typeName":"E"}}]}]}],"isEmptyValue":[{"__symbolic":"method"}],"hasChanged":[{"__symbolic":"method"}],"createBackingModel":[{"__symbolic":"method"}],"getOptionValue":[{"__symbolic":"method"}],"sanitise":[{"__symbolic":"method"}],"runCustomSanitiser":[{"__symbolic":"method"}],"sanitiseMissing":[{"__symbolic":"method"}],"prepareCustomSanitiser":[{"__symbolic":"method"}],"isMissingFrom":[{"__symbolic":"method"}]}}}}]
@@ -1,7 +1,7 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
2
  import { UrlSegment } from '@angular/router';
3
- import { Memoize } from '@typescript-plus/fast-memoize-decorator/dist/src';
4
- import _ from 'lodash';
3
+ import { Memoize } from '@typescript-plus/fast-memoize-decorator';
4
+ import { isEqual } from 'lodash-es';
5
5
  import { ConsolidatedParameterMap } from './guards/consolidated-param-map';
6
6
  import { Visit } from './visit';
7
7
  function extractPrimarySegments(urlTree) {
@@ -66,7 +66,7 @@ export class UrlSnapshot {
66
66
  return this.getInteractionIds().length > 0;
67
67
  }
68
68
  hasInteractionIds(ids) {
69
- return _.isEqual(this.getInteractionIds(), ids);
69
+ return isEqual(this.getInteractionIds(), ids);
70
70
  }
71
71
  // @Trace()
72
72
  updateInteractionIds(ids) {
@@ -1 +1 @@
1
- {"version":3,"file":"url-snapshot.js","sourceRoot":"","sources":["../../../../../../libs/angular-ui-powerups/src/lib/place/url-snapshot.ts"],"names":[],"mappings":"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","sourcesContent":["import { UrlSegment, UrlSerializer, UrlTree } from '@angular/router';\nimport { Trace } from '@coolon/pectin';\nimport { Memoize } from '@typescript-plus/fast-memoize-decorator/dist/src';\nimport _ from 'lodash';\nimport { ConsolidatedParameterMap } from './guards/consolidated-param-map';\nimport { PlaceDefinition } from './place-definition';\nimport { Visit } from './visit';\n\nfunction extractPrimarySegments(urlTree: UrlTree): UrlSegment[] {\n return urlTree.root.children.primary.segments;\n}\n\nexport class UrlSnapshot {\n\n readonly urlTree: UrlTree;\n\n // TODO: Update this accept a url Parser so it can be immutable and generate new trees on mutation using toString() are parseUrl.\n constructor(readonly urlSerializer: UrlSerializer, readonly url: string) {\n this.urlTree = urlSerializer.parse(url);\n }\n\n // @Trace()\n public updateVisitSegments(visit: Visit): UrlSnapshot {\n const newUrlTree = this.urlSerializer.parse(this.url);\n // Ugly, but it works for now.\n const segments = [...extractPrimarySegments(newUrlTree)];\n const visitSegments = this.getSegmentsFor(visit);\n const replaceAt = segments.findIndex(segment => segment.path === visitSegments[0].path);\n // do not use the return value, it's the items that were removed!\n segments.splice(replaceAt, visitSegments.length, ...visitSegments);\n newUrlTree.root.children.primary.segments = segments;\n return new UrlSnapshot(this.urlSerializer, newUrlTree.toString());\n }\n\n @Memoize()\n private getPrimarySegments(): UrlSegment[] {\n return extractPrimarySegments(this.urlTree);\n }\n\n /**\n * Converts the visit into segments. Please not that these segments are not e\n * @param visit\n */\n protected getSegmentsFor(visit: Visit): UrlSegment[] {\n return visit.placeDefinition.hasRouteId() ?\n [\n // NOTE:\n // It's important to attach the params to the root path and not the id. If we attach them\n // to an empty id then the angular router won't match the pattern.\n new UrlSegment(visit.placeDefinition.path, visit.placeDefinition.getFormattedRouteParameters(visit)),\n new UrlSegment(visit.placeDefinition.getFormattedRouteId(visit), {})]\n :\n [\n new UrlSegment(visit.placeDefinition.path, visit.placeDefinition.getFormattedRouteParameters(visit))\n ];\n }\n\n includesPathOf(placeDef: PlaceDefinition) {\n return this.getPrimarySegments().find(s => s.path === placeDef.path);\n }\n\n createVisitFor(placeDef: PlaceDefinition) {\n return new Visit(placeDef, new ConsolidatedParameterMap(this.getPrimarySegments()));\n }\n\n getInteractionIds() {\n const queryParam = this.urlTree.queryParams[UrlSnapshot.INTERACTION_QUERY_PARAM];\n if (queryParam) {\n return UrlSnapshot.parseInteractionIds(queryParam);\n } else {\n return [];\n }\n }\n\n hasInteractions() {\n return this.getInteractionIds().length > 0;\n }\n\n hasInteractionIds(ids: string[]): boolean {\n return _.isEqual(this.getInteractionIds(), ids);\n }\n\n // @Trace()\n updateInteractionIds(ids: string[]): UrlSnapshot {\n if (ids.length === 0) {\n return this.removeInteractionIds();\n } else {\n const urlTree = this.urlSerializer.parse(this.url);\n urlTree.queryParams[UrlSnapshot.INTERACTION_QUERY_PARAM] = UrlSnapshot.createPathIdFor(ids);\n return new UrlSnapshot(this.urlSerializer, urlTree.toString());\n }\n }\n\n // @Trace()\n removeInteractionIds(): UrlSnapshot {\n const urlTree = this.urlSerializer.parse(this.url);\n if (urlTree.queryParams && urlTree.queryParams[UrlSnapshot.INTERACTION_QUERY_PARAM]) {\n urlTree.queryParams = {};//[UrlSnapshot.INTERACTION_ROUTER_OUTLET]\n }\n return new UrlSnapshot(this.urlSerializer, urlTree.toString());\n }\n\n toString(): string {\n return `UrlSnapshot(${this.url})`;\n }\n\n // withOptions(options: NavigationExtras) {\n // return new UrlSnapshot(this.urlSerializer, this.url, options);\n // }\n //\n // @Trace()\n // getNavigationExtras(): NavigationExtras {\n // return this.options;\n // }\n\n}\n\nexport namespace UrlSnapshot {\n\n export const INTERACTION_QUERY_PARAM = 'aup-interactions';\n export const INTERACTION_ID_SEPARATOR = '--';\n\n export function parseInteractionIds(path: string) {\n return path.split(INTERACTION_ID_SEPARATOR);\n }\n\n export function createPathIdFor(interactionIds: string[]) {\n return interactionIds.join(INTERACTION_ID_SEPARATOR);\n }\n\n export interface NavigationOptions {\n replaceUrl?: boolean;\n }\n}\n"]}
1
+ {"version":3,"file":"url-snapshot.js","sourceRoot":"","sources":["../../../../../../libs/angular-ui-powerups/src/lib/place/url-snapshot.ts"],"names":[],"mappings":"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","sourcesContent":["import { UrlSegment, UrlSerializer, UrlTree } from '@angular/router';\nimport { Trace } from '@coolon/pectin';\nimport { Memoize } from '@typescript-plus/fast-memoize-decorator';\n\nimport { isEqual } from 'lodash-es';\nimport { ConsolidatedParameterMap } from './guards/consolidated-param-map';\nimport { PlaceDefinition } from './place-definition';\nimport { Visit } from './visit';\n\nfunction extractPrimarySegments(urlTree: UrlTree): UrlSegment[] {\n return urlTree.root.children.primary.segments;\n}\n\nexport class UrlSnapshot {\n\n readonly urlTree: UrlTree;\n\n // TODO: Update this accept a url Parser so it can be immutable and generate new trees on mutation using toString() are parseUrl.\n constructor(readonly urlSerializer: UrlSerializer, readonly url: string) {\n this.urlTree = urlSerializer.parse(url);\n }\n\n // @Trace()\n public updateVisitSegments(visit: Visit): UrlSnapshot {\n const newUrlTree = this.urlSerializer.parse(this.url);\n // Ugly, but it works for now.\n const segments = [...extractPrimarySegments(newUrlTree)];\n const visitSegments = this.getSegmentsFor(visit);\n const replaceAt = segments.findIndex(segment => segment.path === visitSegments[0].path);\n // do not use the return value, it's the items that were removed!\n segments.splice(replaceAt, visitSegments.length, ...visitSegments);\n newUrlTree.root.children.primary.segments = segments;\n return new UrlSnapshot(this.urlSerializer, newUrlTree.toString());\n }\n\n @Memoize()\n private getPrimarySegments(): UrlSegment[] {\n return extractPrimarySegments(this.urlTree);\n }\n\n /**\n * Converts the visit into segments. Please not that these segments are not e\n * @param visit\n */\n protected getSegmentsFor(visit: Visit): UrlSegment[] {\n return visit.placeDefinition.hasRouteId() ?\n [\n // NOTE:\n // It's important to attach the params to the root path and not the id. If we attach them\n // to an empty id then the angular router won't match the pattern.\n new UrlSegment(visit.placeDefinition.path, visit.placeDefinition.getFormattedRouteParameters(visit)),\n new UrlSegment(visit.placeDefinition.getFormattedRouteId(visit), {})]\n :\n [\n new UrlSegment(visit.placeDefinition.path, visit.placeDefinition.getFormattedRouteParameters(visit))\n ];\n }\n\n includesPathOf(placeDef: PlaceDefinition) {\n return this.getPrimarySegments().find(s => s.path === placeDef.path);\n }\n\n createVisitFor(placeDef: PlaceDefinition) {\n return new Visit(placeDef, new ConsolidatedParameterMap(this.getPrimarySegments()));\n }\n\n getInteractionIds() {\n const queryParam = this.urlTree.queryParams[UrlSnapshot.INTERACTION_QUERY_PARAM];\n if (queryParam) {\n return UrlSnapshot.parseInteractionIds(queryParam);\n } else {\n return [];\n }\n }\n\n hasInteractions() {\n return this.getInteractionIds().length > 0;\n }\n\n hasInteractionIds(ids: string[]): boolean {\n return isEqual(this.getInteractionIds(), ids);\n }\n\n // @Trace()\n updateInteractionIds(ids: string[]): UrlSnapshot {\n if (ids.length === 0) {\n return this.removeInteractionIds();\n } else {\n const urlTree = this.urlSerializer.parse(this.url);\n urlTree.queryParams[UrlSnapshot.INTERACTION_QUERY_PARAM] = UrlSnapshot.createPathIdFor(ids);\n return new UrlSnapshot(this.urlSerializer, urlTree.toString());\n }\n }\n\n // @Trace()\n removeInteractionIds(): UrlSnapshot {\n const urlTree = this.urlSerializer.parse(this.url);\n if (urlTree.queryParams && urlTree.queryParams[UrlSnapshot.INTERACTION_QUERY_PARAM]) {\n urlTree.queryParams = {};//[UrlSnapshot.INTERACTION_ROUTER_OUTLET]\n }\n return new UrlSnapshot(this.urlSerializer, urlTree.toString());\n }\n\n toString(): string {\n return `UrlSnapshot(${this.url})`;\n }\n\n // withOptions(options: NavigationExtras) {\n // return new UrlSnapshot(this.urlSerializer, this.url, options);\n // }\n //\n // @Trace()\n // getNavigationExtras(): NavigationExtras {\n // return this.options;\n // }\n\n}\n\nexport namespace UrlSnapshot {\n\n export const INTERACTION_QUERY_PARAM = 'aup-interactions';\n export const INTERACTION_ID_SEPARATOR = '--';\n\n export function parseInteractionIds(path: string) {\n return path.split(INTERACTION_ID_SEPARATOR);\n }\n\n export function createPathIdFor(interactionIds: string[]) {\n return interactionIds.join(INTERACTION_ID_SEPARATOR);\n }\n\n export interface NavigationOptions {\n replaceUrl?: boolean;\n }\n}\n"]}
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"UrlSnapshot":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/router","name":"UrlSerializer","line":17,"character":38},{"__symbolic":"reference","name":"string"}]}],"updateVisitSegments":[{"__symbolic":"method"}],"getPrimarySegments":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@typescript-plus/fast-memoize-decorator/dist/src","name":"Memoize","line":34,"character":3}}]}],"getSegmentsFor":[{"__symbolic":"method"}],"includesPathOf":[{"__symbolic":"method"}],"createVisitFor":[{"__symbolic":"method"}],"getInteractionIds":[{"__symbolic":"method"}],"hasInteractions":[{"__symbolic":"method"}],"hasInteractionIds":[{"__symbolic":"method"}],"updateInteractionIds":[{"__symbolic":"method"}],"removeInteractionIds":[{"__symbolic":"method"}],"toString":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"UrlSnapshot":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/router","name":"UrlSerializer","line":18,"character":38},{"__symbolic":"reference","name":"string"}]}],"updateVisitSegments":[{"__symbolic":"method"}],"getPrimarySegments":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@typescript-plus/fast-memoize-decorator","name":"Memoize","line":35,"character":3}}]}],"getSegmentsFor":[{"__symbolic":"method"}],"includesPathOf":[{"__symbolic":"method"}],"createVisitFor":[{"__symbolic":"method"}],"getInteractionIds":[{"__symbolic":"method"}],"hasInteractions":[{"__symbolic":"method"}],"hasInteractionIds":[{"__symbolic":"method"}],"updateInteractionIds":[{"__symbolic":"method"}],"removeInteractionIds":[{"__symbolic":"method"}],"toString":[{"__symbolic":"method"}]}}}}]
@@ -1,4 +1,4 @@
1
- import * as _ from 'lodash';
1
+ import { isEqual, isNil, isString } from 'lodash-es';
2
2
  export class Visit {
3
3
  constructor(placeDefinition, visitParameters = {}) {
4
4
  this.placeDefinition = placeDefinition;
@@ -10,7 +10,7 @@ export class Visit {
10
10
  }
11
11
  // @Trace()
12
12
  hasRouteId() {
13
- return !_.isNil(this.getRouteId());
13
+ return !isNil(this.getRouteId());
14
14
  }
15
15
  /**
16
16
  * Returns the value of the place parameter with the specified name. The parameter
@@ -19,7 +19,7 @@ export class Visit {
19
19
  * @param parameter the visit parameter definition
20
20
  */
21
21
  getParameterValue(parameter) {
22
- return _.isString(parameter) ? this.visitParameters[parameter] : this.visitParameters[parameter.name];
22
+ return isString(parameter) ? this.visitParameters[parameter] : this.visitParameters[parameter.name];
23
23
  }
24
24
  // @Trace()
25
25
  hasParameter(parameterDef) {
@@ -55,11 +55,11 @@ export class Visit {
55
55
  const currentParams = this.placeDefinition.getFormattedRouteParameters(this, true);
56
56
  const otherParams = this.placeDefinition.getFormattedRouteParameters(other, true);
57
57
  // console.log({currentParams, otherParams});
58
- const sameRouteParameters = _.isEqual(currentParams, otherParams);
58
+ const sameRouteParameters = isEqual(currentParams, otherParams);
59
59
  return !samePlace || !sameRouteParameters;
60
60
  }
61
61
  hasChangedFrom(other) {
62
- const sameNonRouteParameters = _.isEqual(this.placeDefinition.getNonRouteParameters(this), this.placeDefinition.getNonRouteParameters(other));
62
+ const sameNonRouteParameters = isEqual(this.placeDefinition.getNonRouteParameters(this), this.placeDefinition.getNonRouteParameters(other));
63
63
  return !sameNonRouteParameters || this.hasRoutingChangedFrom(other);
64
64
  }
65
65
  toDebugString() {
@@ -1 +1 @@
1
- {"version":3,"file":"visit.js","sourceRoot":"","sources":["../../../../../../libs/angular-ui-powerups/src/lib/place/visit.ts"],"names":[],"mappings":"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","sourcesContent":["import { Trace } from '@coolon/pectin';\nimport * as _ from 'lodash';\nimport { PlaceDefinition } from './place-definition';\nimport { ParameterDefinition } from './route/parameter-definition';\n\ninterface Params {\n [p: string]: any;\n}\n\n\nexport class Visit {\n\n constructor(readonly placeDefinition: PlaceDefinition, private readonly visitParameters: Params = {}) {\n }\n\n // @Trace()\n getRouteId(): any {\n return this.placeDefinition.getRouteIdFrom(this);\n }\n\n // @Trace()\n hasRouteId(): boolean {\n return !_.isNil(this.getRouteId());\n }\n\n /**\n * Returns the value of the place parameter with the specified name. The parameter\n * name is taken from the `as` option, e.g. {as: 'aCustomName'} otherwise it is the\n * same as the the ValueModel property name.\n * @param parameter the visit parameter definition\n */\n getParameterValue<T, S>(parameter: ParameterDefinition<T, S> | string): T {\n return _.isString(parameter) ? this.visitParameters[parameter] : this.visitParameters[parameter.name];\n }\n\n // @Trace()\n hasParameter(parameterDef: ParameterDefinition<any>): boolean {\n return Object.keys(this.visitParameters).includes(parameterDef.name);\n }\n\n replace<T>(parameter: ParameterDefinition<T, any>, value: T): Visit {\n return new Visit(this.placeDefinition, { ...this.visitParameters, [parameter.name]: value });\n }\n\n mergeRouteParameters<S>(routeParams: { [p: string]: any }): Visit {\n // todo: whitelist parameters.\n const routeParameterKeys = Object.keys(routeParams);\n const params = {};\n this.placeDefinition.getVisitParameterDefs().forEach(def => {\n if (def.isRouteId || def.isRouteParameter) {\n if (routeParameterKeys.includes(def.name)) {\n params[def.name] = routeParams[def.name];\n }\n } else {\n // copy non route params as is, but only if they already exist otherwise we'll inject nil values and break the\n // defaults and remember sanitisation process.\n const value = this.getParameterValue(def);\n if (this.hasParameter(def)) {\n params[def.name] = value;\n }\n }\n });\n return new Visit(this.placeDefinition, params);\n }\n\n // @Trace()\n hasRoutingChangedFrom(other: Visit): boolean {\n const samePlace = other.placeDefinition === this.placeDefinition;\n const currentParams = this.placeDefinition.getFormattedRouteParameters(this, true);\n const otherParams = this.placeDefinition.getFormattedRouteParameters(other, true);\n // console.log({currentParams, otherParams});\n const sameRouteParameters = _.isEqual(currentParams, otherParams);\n return !samePlace || !sameRouteParameters;\n }\n\n hasChangedFrom(other: Visit) {\n const sameNonRouteParameters = _.isEqual(\n this.placeDefinition.getNonRouteParameters(this),\n this.placeDefinition.getNonRouteParameters(other)\n );\n return !sameNonRouteParameters || this.hasRoutingChangedFrom(other);\n }\n\n toDebugString() {\n return Object.keys(this.visitParameters).map(k => `${k}=${this.visitParameters[k]}`).join(',');\n }\n\n}\n"]}
1
+ {"version":3,"file":"visit.js","sourceRoot":"","sources":["../../../../../../libs/angular-ui-powerups/src/lib/place/visit.ts"],"names":[],"mappings":"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","sourcesContent":["import { Trace } from '@coolon/pectin';\n\nimport { isEqual, isNil, isString } from 'lodash-es';\nimport { PlaceDefinition } from './place-definition';\nimport { ParameterDefinition } from './route/parameter-definition';\n\ninterface Params {\n [p: string]: any;\n}\n\n\nexport class Visit {\n\n constructor(readonly placeDefinition: PlaceDefinition, private readonly visitParameters: Params = {}) {\n }\n\n // @Trace()\n getRouteId(): any {\n return this.placeDefinition.getRouteIdFrom(this);\n }\n\n // @Trace()\n hasRouteId(): boolean {\n return !isNil(this.getRouteId());\n }\n\n /**\n * Returns the value of the place parameter with the specified name. The parameter\n * name is taken from the `as` option, e.g. {as: 'aCustomName'} otherwise it is the\n * same as the the ValueModel property name.\n * @param parameter the visit parameter definition\n */\n getParameterValue<T, S>(parameter: ParameterDefinition<T, S> | string): T {\n return isString(parameter) ? this.visitParameters[parameter] : this.visitParameters[parameter.name];\n }\n\n // @Trace()\n hasParameter(parameterDef: ParameterDefinition<any>): boolean {\n return Object.keys(this.visitParameters).includes(parameterDef.name);\n }\n\n replace<T>(parameter: ParameterDefinition<T, any>, value: T): Visit {\n return new Visit(this.placeDefinition, { ...this.visitParameters, [parameter.name]: value });\n }\n\n mergeRouteParameters<S>(routeParams: { [p: string]: any }): Visit {\n // todo: whitelist parameters.\n const routeParameterKeys = Object.keys(routeParams);\n const params = {};\n this.placeDefinition.getVisitParameterDefs().forEach(def => {\n if (def.isRouteId || def.isRouteParameter) {\n if (routeParameterKeys.includes(def.name)) {\n params[def.name] = routeParams[def.name];\n }\n } else {\n // copy non route params as is, but only if they already exist otherwise we'll inject nil values and break the\n // defaults and remember sanitisation process.\n const value = this.getParameterValue(def);\n if (this.hasParameter(def)) {\n params[def.name] = value;\n }\n }\n });\n return new Visit(this.placeDefinition, params);\n }\n\n // @Trace()\n hasRoutingChangedFrom(other: Visit): boolean {\n const samePlace = other.placeDefinition === this.placeDefinition;\n const currentParams = this.placeDefinition.getFormattedRouteParameters(this, true);\n const otherParams = this.placeDefinition.getFormattedRouteParameters(other, true);\n // console.log({currentParams, otherParams});\n const sameRouteParameters = isEqual(currentParams, otherParams);\n return !samePlace || !sameRouteParameters;\n }\n\n hasChangedFrom(other: Visit) {\n const sameNonRouteParameters = isEqual(\n this.placeDefinition.getNonRouteParameters(this),\n this.placeDefinition.getNonRouteParameters(other)\n );\n return !sameNonRouteParameters || this.hasRoutingChangedFrom(other);\n }\n\n toDebugString() {\n return Object.keys(this.visitParameters).map(k => `${k}=${this.visitParameters[k]}`).join(',');\n }\n\n}\n"]}
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"Visit":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"./place-definition","name":"PlaceDefinition","line":12,"character":40},{"__symbolic":"reference","name":"any"}]}],"getRouteId":[{"__symbolic":"method"}],"hasRouteId":[{"__symbolic":"method"}],"getParameterValue":[{"__symbolic":"method"}],"hasParameter":[{"__symbolic":"method"}],"replace":[{"__symbolic":"method"}],"mergeRouteParameters":[{"__symbolic":"method"}],"hasRoutingChangedFrom":[{"__symbolic":"method"}],"hasChangedFrom":[{"__symbolic":"method"}],"toDebugString":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"Visit":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"./place-definition","name":"PlaceDefinition","line":13,"character":40},{"__symbolic":"reference","name":"any"}]}],"getRouteId":[{"__symbolic":"method"}],"hasRouteId":[{"__symbolic":"method"}],"getParameterValue":[{"__symbolic":"method"}],"hasParameter":[{"__symbolic":"method"}],"replace":[{"__symbolic":"method"}],"mergeRouteParameters":[{"__symbolic":"method"}],"hasRoutingChangedFrom":[{"__symbolic":"method"}],"hasChangedFrom":[{"__symbolic":"method"}],"toDebugString":[{"__symbolic":"method"}]}}}}]