@daffodil/external-router 0.78.0 → 0.80.0

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 (133) hide show
  1. package/README.md +116 -7
  2. package/config.d.ts +1 -10
  3. package/driver/in-memory/config.d.ts +1 -7
  4. package/driver/in-memory/in-memory.module.d.ts +2 -0
  5. package/driver/in-memory/provider.d.ts +6 -0
  6. package/driver/in-memory/public_api.d.ts +1 -0
  7. package/driver/interfaces/external-router-driver.interface.d.ts +2 -6
  8. package/driver/magento/2.4.3/magento.service.d.ts +2 -1
  9. package/driver/magento/2.4.3/provider.d.ts +5 -0
  10. package/driver/magento/2.4.3/public_api.d.ts +1 -0
  11. package/driver/magento/2.4.3/transforms/schema/category/category.d.ts +2 -0
  12. package/driver/magento/2.4.3/transforms/schema/clientify-url-path.d.ts +1 -0
  13. package/driver/magento/2.4.3/transforms/schema/product/base.d.ts +2 -0
  14. package/driver/magento/2.4.3/transforms/schema/product/bundle.d.ts +2 -0
  15. package/driver/magento/2.4.3/transforms/schema/product/configurable.d.ts +2 -0
  16. package/driver/magento/2.4.3/transforms/schema/product/product.d.ts +5 -0
  17. package/driver/magento/2.4.3/transforms/schema/product/simple.d.ts +2 -0
  18. package/driver/magento/2.4.3/transforms/schema/rescale-rating.d.ts +5 -0
  19. package/driver/magento/2.4.3/transforms/schema/transform-schema.d.ts +2 -0
  20. package/driver/magento/2.4.3/transforms/transform-client-urls.d.ts +2 -0
  21. package/driver/magento/model/category-route-product.d.ts +77 -0
  22. package/driver/magento/model/category-route.d.ts +41 -0
  23. package/driver/magento/model/product-route.d.ts +85 -0
  24. package/driver/magento/model/public_api.d.ts +2 -0
  25. package/driver/magento/model/routable.d.ts +14 -0
  26. package/driver/magento/model/route.d.ts +4 -34
  27. package/driver/public_api.d.ts +1 -1
  28. package/driver/testing/config.d.ts +3 -9
  29. package/driver/testing/provider.d.ts +6 -0
  30. package/driver/testing/public_api.d.ts +1 -0
  31. package/esm2022/config.mjs +8 -7
  32. package/esm2022/driver/in-memory/config.mjs +8 -6
  33. package/esm2022/driver/in-memory/in-memory.module.mjs +8 -15
  34. package/esm2022/driver/in-memory/provider.mjs +12 -0
  35. package/esm2022/driver/in-memory/public_api.mjs +2 -1
  36. package/esm2022/driver/interfaces/external-router-driver.interface.mjs +8 -3
  37. package/esm2022/driver/magento/2.4.1/magento.module.mjs +5 -12
  38. package/esm2022/driver/magento/2.4.2/magento.module.mjs +5 -12
  39. package/esm2022/driver/magento/2.4.3/graphql/queries/resolve.mjs +66 -2
  40. package/esm2022/driver/magento/2.4.3/magento.module.mjs +5 -12
  41. package/esm2022/driver/magento/2.4.3/magento.service.mjs +12 -6
  42. package/esm2022/driver/magento/2.4.3/provider.mjs +13 -0
  43. package/esm2022/driver/magento/2.4.3/public_api.mjs +2 -1
  44. package/esm2022/driver/magento/2.4.3/transforms/resolution-to-resolvable-url.mjs +7 -3
  45. package/esm2022/driver/magento/2.4.3/transforms/schema/category/category.mjs +15 -0
  46. package/esm2022/driver/magento/2.4.3/transforms/schema/clientify-url-path.mjs +2 -0
  47. package/esm2022/driver/magento/2.4.3/transforms/schema/product/base.mjs +16 -0
  48. package/esm2022/driver/magento/2.4.3/transforms/schema/product/bundle.mjs +11 -0
  49. package/esm2022/driver/magento/2.4.3/transforms/schema/product/configurable.mjs +11 -0
  50. package/esm2022/driver/magento/2.4.3/transforms/schema/product/product.mjs +20 -0
  51. package/esm2022/driver/magento/2.4.3/transforms/schema/product/simple.mjs +25 -0
  52. package/esm2022/driver/magento/2.4.3/transforms/schema/rescale-rating.mjs +6 -0
  53. package/esm2022/driver/magento/2.4.3/transforms/schema/transform-schema.mjs +13 -0
  54. package/esm2022/driver/magento/2.4.3/transforms/transform-client-urls.mjs +28 -0
  55. package/esm2022/driver/magento/model/category-route-product.mjs +2 -0
  56. package/esm2022/driver/magento/model/category-route.mjs +2 -0
  57. package/esm2022/driver/magento/model/product-route.mjs +2 -0
  58. package/esm2022/driver/magento/model/public_api.mjs +1 -1
  59. package/esm2022/driver/magento/model/routable.mjs +2 -0
  60. package/esm2022/driver/magento/model/route.mjs +1 -1
  61. package/esm2022/driver/public_api.mjs +2 -2
  62. package/esm2022/driver/testing/config.mjs +8 -6
  63. package/esm2022/driver/testing/provider.mjs +12 -0
  64. package/esm2022/driver/testing/public_api.mjs +2 -1
  65. package/esm2022/driver/testing/testing.module.mjs +5 -11
  66. package/esm2022/driver/testing/testing.service.mjs +13 -11
  67. package/esm2022/model/public_api.mjs +1 -1
  68. package/esm2022/model/route-data.mjs +1 -1
  69. package/esm2022/model/route-with-seo-data.mjs +1 -1
  70. package/esm2022/provide-external-router.mjs +6 -0
  71. package/esm2022/public_api.mjs +2 -10
  72. package/esm2022/routing/guard/external-matcher-type.guard.mjs +43 -0
  73. package/esm2022/routing/helper/convert-to-path.mjs +7 -0
  74. package/esm2022/routing/public_api.mjs +2 -2
  75. package/fesm2022/daffodil-external-router-driver-in-memory.mjs +22 -18
  76. package/fesm2022/daffodil-external-router-driver-in-memory.mjs.map +1 -1
  77. package/fesm2022/daffodil-external-router-driver-magento-2.4.1.mjs +4 -11
  78. package/fesm2022/daffodil-external-router-driver-magento-2.4.1.mjs.map +1 -1
  79. package/fesm2022/daffodil-external-router-driver-magento-2.4.2.mjs +4 -11
  80. package/fesm2022/daffodil-external-router-driver-magento-2.4.2.mjs.map +1 -1
  81. package/fesm2022/daffodil-external-router-driver-magento-2.4.3.mjs +228 -21
  82. package/fesm2022/daffodil-external-router-driver-magento-2.4.3.mjs.map +1 -1
  83. package/fesm2022/daffodil-external-router-driver-testing.mjs +31 -25
  84. package/fesm2022/daffodil-external-router-driver-testing.mjs.map +1 -1
  85. package/fesm2022/daffodil-external-router-driver.mjs +8 -3
  86. package/fesm2022/daffodil-external-router-driver.mjs.map +1 -1
  87. package/fesm2022/daffodil-external-router-routing.mjs +40 -66
  88. package/fesm2022/daffodil-external-router-routing.mjs.map +1 -1
  89. package/fesm2022/daffodil-external-router.mjs +10 -282
  90. package/fesm2022/daffodil-external-router.mjs.map +1 -1
  91. package/model/public_api.d.ts +2 -5
  92. package/model/route-data.d.ts +13 -0
  93. package/model/route-with-seo-data.d.ts +3 -4
  94. package/package.json +1 -1
  95. package/provide-external-router.d.ts +3 -0
  96. package/public_api.d.ts +1 -9
  97. package/routing/guard/external-matcher-type.guard.d.ts +10 -0
  98. package/routing/helper/convert-to-path.d.ts +7 -0
  99. package/routing/public_api.d.ts +1 -1
  100. package/errors/no-wildcard.d.ts +0 -9
  101. package/errors/unknown-type.d.ts +0 -9
  102. package/esm2022/errors/no-wildcard.mjs +0 -12
  103. package/esm2022/errors/unknown-type.mjs +0 -12
  104. package/esm2022/external-router.module.mjs +0 -31
  105. package/esm2022/model/insertion-strategy.type.mjs +0 -2
  106. package/esm2022/model/route-info.mjs +0 -2
  107. package/esm2022/model/route-with-data-path.mjs +0 -2
  108. package/esm2022/model/route-with-type.mjs +0 -2
  109. package/esm2022/model/route-without-path.mjs +0 -2
  110. package/esm2022/model/type-route-pair.mjs +0 -2
  111. package/esm2022/router/router.service.mjs +0 -43
  112. package/esm2022/router/strategies/insert-data-path.mjs +0 -84
  113. package/esm2022/router/strategies/insert-route-before-wildcard.mjs +0 -17
  114. package/esm2022/router/url-matcher/data-path-matcher.mjs +0 -31
  115. package/esm2022/routing/guard/existence.guard.mjs +0 -77
  116. package/esm2022/token/type-resolvable-routes.token.mjs +0 -29
  117. package/esm2022/transform/resolved-route-to-route.mjs +0 -24
  118. package/esm2022/util/extract-daff-path-data.mjs +0 -9
  119. package/external-router.module.d.ts +0 -15
  120. package/model/insertion-strategy.type.d.ts +0 -8
  121. package/model/route-info.d.ts +0 -9
  122. package/model/route-with-data-path.d.ts +0 -14
  123. package/model/route-with-type.d.ts +0 -12
  124. package/model/route-without-path.d.ts +0 -7
  125. package/model/type-route-pair.d.ts +0 -26
  126. package/router/router.service.d.ts +0 -15
  127. package/router/strategies/insert-data-path.d.ts +0 -40
  128. package/router/strategies/insert-route-before-wildcard.d.ts +0 -6
  129. package/router/url-matcher/data-path-matcher.d.ts +0 -20
  130. package/routing/guard/existence.guard.d.ts +0 -22
  131. package/token/type-resolvable-routes.token.d.ts +0 -14
  132. package/transform/resolved-route-to-route.d.ts +0 -7
  133. package/util/extract-daff-path-data.d.ts +0 -6
@@ -1 +1 @@
1
- {"version":3,"file":"daffodil-external-router.mjs","sources":["../../../libs/external-router/src/config.ts","../../../libs/external-router/src/token/type-resolvable-routes.token.ts","../../../libs/external-router/src/external-router.module.ts","../../../libs/external-router/src/errors/no-wildcard.ts","../../../libs/external-router/src/router/strategies/insert-route-before-wildcard.ts","../../../libs/external-router/src/errors/unknown-type.ts","../../../libs/external-router/src/transform/resolved-route-to-route.ts","../../../libs/external-router/src/router/router.service.ts","../../../libs/external-router/src/router/strategies/insert-data-path.ts","../../../libs/external-router/src/router/url-matcher/data-path-matcher.ts","../../../libs/external-router/src/util/extract-daff-path-data.ts","../../../libs/external-router/src/public_api.ts","../../../libs/external-router/src/daffodil-external-router.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const daffExternalRouterConfigurationDefault: DaffExternalRouterConfiguration = {\n failedResolutionPath: '/',\n notFoundResolutionPath: '/',\n};\n\n/**\n * The token holding the runtime configuration for the behavior of the\n * `@daffodil/external-router` package.\n */\nexport const DAFF_EXTERNAL_ROUTER_CONFIG = new InjectionToken<\n DaffExternalRouterConfiguration\n>('DAFF_EXTERNAL_ROUTER_CONFIG', {\n providedIn: 'root',\n factory: () => daffExternalRouterConfigurationDefault,\n});\n\n/**\n * The configuration object for the external router package.\n */\nexport interface DaffExternalRouterConfiguration {\n /**\n * The path to redirect to when external route resolution fails.\n */\n failedResolutionPath: string;\n\n /**\n * The path to redirect to when the requested URL is not found.\n */\n notFoundResolutionPath: string;\n}\n","import {\n InjectionToken,\n Provider,\n} from '@angular/core';\n\nimport { DaffExternalRouterInsertionStrategy } from '../model/insertion-strategy.type';\nimport { DaffExternalRouteType } from '../model/route-type';\nimport { DaffRouteWithoutPath } from '../model/route-without-path';\nimport { DaffTypeRoutePair } from '../model/type-route-pair';\n\n/**\n * A multi-token that allows you to register route \"types\" that correspond to routes.\n */\nexport const DAFF_EXTERNAL_ROUTER_ROUTES_RESOLVABLE_BY_TYPE = new InjectionToken<\n DaffTypeRoutePair[]\n>('DAFF_EXTERNAL_ROUTER_RESOLVABLE_TYPE_ROUTES', {\n providedIn: 'root',\n factory: () => [],\n});\n\n/**\n * A provider used to connect a type to a route to enable dynamic route resolution at runtime.\n */\nexport function daffProvideRouteResolvableByType(typeRoutePair: DaffTypeRoutePair): Provider {\n return {\n provide: DAFF_EXTERNAL_ROUTER_ROUTES_RESOLVABLE_BY_TYPE,\n multi: true,\n useValue: typeRoutePair,\n };\n}\n\n/**\n * A multi-provider used to connect an array of types to their respective routes.\n */\nexport function daffProvideRoutesResolvableByType(routes: DaffTypeRoutePair[]): Provider[] {\n return routes.map((route: DaffTypeRoutePair) => ({\n provide: DAFF_EXTERNAL_ROUTER_ROUTES_RESOLVABLE_BY_TYPE,\n multi: true,\n useValue: route,\n }));\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ModuleWithProviders,\n NgModule,\n} from '@angular/core';\n\nimport {\n DaffExternalRouterConfiguration,\n DAFF_EXTERNAL_ROUTER_CONFIG,\n daffExternalRouterConfigurationDefault,\n} from './config';\nimport { DaffTypeRoutePair } from './model/type-route-pair';\nimport { daffProvideRoutesResolvableByType } from './token/type-resolvable-routes.token';\n\n/**\n * The external `DaffExternalRouterModule` allows you to configure the\n * `@daffodil/external-router` package's behavior.\n */\n@NgModule({\n declarations: [],\n imports: [CommonModule],\n})\nexport class DaffExternalRouterModule {\n static forRoot(\n config: Partial<DaffExternalRouterConfiguration>,\n routes: DaffTypeRoutePair[] = [],\n ): ModuleWithProviders<DaffExternalRouterModule> {\n return {\n ngModule: DaffExternalRouterModule,\n providers: [\n { provide: DAFF_EXTERNAL_ROUTER_CONFIG, useValue: { ...daffExternalRouterConfigurationDefault, ...config }},\n ...daffProvideRoutesResolvableByType(routes),\n ],\n };\n }\n}\n","import {\n DaffError,\n DaffInheritableError,\n} from '@daffodil/core';\n\n/**\n * An error thrown when there was no wildcard route found in configuration\n * of the Angular Router.\n */\nexport class DaffExternalRouterNoWildcardError extends DaffInheritableError\n implements DaffError {\n public readonly code: string = 'NO_WILDCARD_ROUTE';\n\n constructor(message?: string) {\n super(message);\n }\n}\n","import {\n Route,\n Routes,\n} from '@angular/router';\n\nimport { DaffExternalRouterNoWildcardError } from '../../errors/no-wildcard';\nimport { DaffExternalRouterInsertionStrategy } from '../../model/insertion-strategy.type';\n\n/**\n * Inserts a Route into Routes right before the wildcard route.\n * If no wildcard is found, it fails fast with a `DaffExternalRouterNoWildcardError`.\n */\nexport const daffInsertRouteBeforeWildCardStrategy: DaffExternalRouterInsertionStrategy = (\n route: Route,\n routes: Routes,\n): Routes => {\n const index = routes.findIndex((r: Route) => r.path === '**');\n if (index === -1) {\n throw new DaffExternalRouterNoWildcardError(\n 'No wildcard (**) route was found during route resolution.',\n );\n }\n return [\n ...routes.slice(0, index),\n route,\n ...routes.slice(index),\n ];\n};\n","import {\n DaffError,\n DaffInheritableError,\n} from '@daffodil/core';\n\n/**\n * An error thrown when there is a failure matching a configured route to a\n * route type.\n */\nexport class DaffExternalRouterUnknownRouteTypeError extends DaffInheritableError\n implements DaffError {\n public readonly code: string = 'UNKNOWN_ROUTE_TYPE';\n\n constructor(message?: string) {\n super(message);\n }\n}\n","import { DaffExternalRouterUnknownRouteTypeError } from '../errors/unknown-type';\nimport { DaffExternallyResolvableUrl } from '../model/resolvable-route';\nimport { DaffRouteInfo } from '../model/route-info';\nimport { DaffTypeRoutePair } from '../model/type-route-pair';\n\n/**\n * Transforms a DaffExternallyResolvableUrl into an Angular Route.\n */\nexport const daffTransformResolvedRouteToRoute = (\n resolvedRoute: DaffExternallyResolvableUrl,\n availableTypes: DaffTypeRoutePair[],\n): DaffRouteInfo => {\n const routeType = availableTypes\n .filter(t => t.type === resolvedRoute.type)\n .shift();\n if (!routeType) {\n throw new DaffExternalRouterUnknownRouteTypeError(\n `Unable to resolve the route '${resolvedRoute.url}'. Its type is '${resolvedRoute.type}' but a matching route wasn't found.`,\n );\n }\n\n return {\n route: {\n path: resolvedRoute.url,\n daffExternalRouteType: resolvedRoute.type,\n ...routeType.route,\n data: {\n ...resolvedRoute.data,\n },\n },\n insertionStrategy: routeType.insertionStrategy,\n };\n};\n","import {\n Inject,\n Injectable,\n} from '@angular/core';\nimport {\n Router,\n Route,\n} from '@angular/router';\n\n\nimport { daffInsertRouteBeforeWildCardStrategy } from './strategies/insert-route-before-wildcard';\nimport { DaffExternalRouterNoWildcardError } from '../errors/no-wildcard';\nimport { DaffExternallyResolvableUrl } from '../model/resolvable-route';\nimport { DaffTypeRoutePair } from '../model/type-route-pair';\nimport { DAFF_EXTERNAL_ROUTER_ROUTES_RESOLVABLE_BY_TYPE } from '../token/type-resolvable-routes.token';\nimport { daffTransformResolvedRouteToRoute } from '../transform/resolved-route-to-route';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DaffExternalRouter {\n constructor(\n private router: Router,\n @Inject(DAFF_EXTERNAL_ROUTER_ROUTES_RESOLVABLE_BY_TYPE)\n private runtimeRoutes: DaffTypeRoutePair[],\n ) { }\n\n /**\n * Adds a route to the existing router configuration.\n */\n add(resolvedRoute: DaffExternallyResolvableUrl) {\n //Get the route.\n const {\n route,\n insertionStrategy,\n } = daffTransformResolvedRouteToRoute(\n resolvedRoute,\n this.runtimeRoutes,\n );\n\n try {\n //Add it to configuration.\n this.router.config = (insertionStrategy || daffInsertRouteBeforeWildCardStrategy)(route, this.router.config);\n } catch (e) {\n if (e instanceof DaffExternalRouterNoWildcardError) {\n throw new DaffExternalRouterNoWildcardError(\n `${e.message} This usually means you have misconfigured your routes.`,\n );\n }\n\n throw e;\n }\n }\n}\n","import {\n Route,\n Routes,\n} from '@angular/router';\n\nimport { DaffExternalRouterInsertionStrategy } from '../../model/insertion-strategy.type';\nimport { DaffExternalRouteType } from '../../model/route-type';\nimport { DaffRouteWithDataPath } from '../../model/route-with-data-path';\nimport { DaffRouteWithSeoData } from '../../model/route-with-seo-data';\nimport { DaffRouteWithType } from '../../model/route-with-type';\n\ntype RouteOperator = (route: Route) => Route;\ntype ExternalRouteOperator = (route: DaffRouteWithDataPath, externalRoute: Route) => Route;\ntype InsertionOperatorFactory = (externalRoute: Route) => RouteOperator;\n\n/**\n * Tests whether or not a route matches a specific Daffodil Route type.\n *\n * See {@link DaffRouteWithDataPath}\n */\nconst routeMatchesRouteType = (route: Route, type: DaffExternalRouteType): boolean => route?.data?.daffExternalRouteType === type;\n\n/**\n * Adds a path to the `daffPaths` of the given route.\n *\n * See {@link DaffRouteWithDataPath}\n */\nconst addRouteToDaffPaths: ExternalRouteOperator =\n (route: DaffRouteWithDataPath, externalRoute: Route) => {\n route.data.daffPaths = {\n ...route.data.daffPaths,\n [externalRoute.path]: externalRoute.data,\n };\n return route;\n };\n\nconst operateOnRoute: InsertionOperatorFactory =\n (externalRoute: Route) => (route: DaffRouteWithDataPath) => addRouteToDaffPaths(route, externalRoute);\n\n/**\n * Traverse the router config tree, halting after the first match.\n * This traversal is implemented in a pre-order manner. As such, for large\n * configuration trees, it will be most efficient to place externally routed\n * components at the top of router configuration.\n */\nconst traverseRouteTree = (routes: Routes = [], matcher: (route: Route) => boolean, operate: RouteOperator): Routes => {\n if(routes.length === 0) {\n return routes;\n }\n\n const stack: Routes = [];\n const treeRoot = { children: routes };\n stack.push(treeRoot);\n\n while(stack.length) {\n const route = stack.pop();\n if(matcher(route)) {\n operate(route);\n break;\n }\n if(route.children){\n stack.push(...route.children.reverse());\n }\n }\n return routes;\n};\n\n/**\n * A route insertion strategy that can be used to append external routes onto\n * existing Angular routes. This can be useful when you need to route to\n * an existing lazy-loaded module from multiple externally defined urls.\n *\n * This should be used in combination with the {@link daffDataPathUrlMatcher} to match lazy-loaded modules with\n * associated external urls.\n *\n * For example, you can provide the insertion strategy in the {@link DaffExternalRouterModule} as below.\n *\n * ```ts\n * DaffExternalRouterModule.forRoot({}, [\n * {\n * type: 'CATEGORY',\n * insertionStrategy: daffInsertDataPathStrategy,\n * route: {}\n * }\n * ],\n * ```\n *\n * Then, you can match it with an associated route defined in your Routing\n * configuration with the {@link daffDataPathUrlMatcher}.\n *\n * ```ts\n * export const routes: Routes = [\n * {\n * matcher: daffDataPathUrlMatcher,\n * data: {\n * daffExternalRouteType: \"CATEGORY\",\n * },\n * loadChildren: () => import('./category/category.module').then((m) => m.MyCategoryModule),\n * }\n * ]\n * ```\n *\n * See {@link DaffRouteWithDataPath}\n *\n */\nexport const daffInsertDataPathStrategy: DaffExternalRouterInsertionStrategy = (externalRoute: DaffRouteWithType & DaffRouteWithSeoData, routes: Routes) => traverseRouteTree(\n routes,\n (route) => routeMatchesRouteType(route, externalRoute.daffExternalRouteType),\n operateOnRoute(externalRoute),\n);\n","import {\n UrlMatcher,\n UrlSegment,\n UrlSegmentGroup,\n} from '@angular/router';\n\nimport { daffUriTruncateLeadingSlash } from '@daffodil/core/routing';\n\nimport { DaffRouteWithDataPath } from '../../model/public_api';\n\n/**\n * A UrlMatcher that does an exact match against a path stored in the special\n * configuration fields that External Router stores on a Route's data.\n *\n * ```ts\n * export const routes: Routes = [\n * {\n * matcher: daffDataPathUrlMatcher,\n * data: {\n * daffExternalRouteType: \"CATEGORY\",\n * },\n * loadChildren: () => import('./category/category.module').then((m) => m.ShopCategoryModule),\n * }\n * ]\n * ```\n * {@link daffInsertDataPathStrategy }\n * {@link DaffRouteWithDataPath }\n */\nexport const daffDataPathUrlMatcher: UrlMatcher = (segments: UrlSegment[], group: UrlSegmentGroup, route: DaffRouteWithDataPath) => {\n const path = daffUriTruncateLeadingSlash(segments.reduce((acc: string, segment) => acc + '/' + segment.path, ''));\n const paths = route?.data?.daffPaths;\n\n // If we don't have any paths, we can safely fail a match.\n if(!paths) {\n return null;\n }\n\n // Otherwise, look up the path in the dictionary, failing if a match isn't found,\n // but matching the entire segment if a match is found.\n return path in paths ? { consumed: segments } : null;\n};\n\n","import {\n ActivatedRouteSnapshot,\n Data,\n} from '@angular/router';\n\n/**\n * Extracts a key from DaffPath data based upon the currently activated\n * RouteSnapshot.\n */\nexport const daffExtractDaffPathData = <T extends Data = Data, K extends keyof T = keyof T>(snapshot: ActivatedRouteSnapshot, key: K): T[K] => {\n const pathFromRoot = snapshot.pathFromRoot.flatMap((route) => route.url).map((seg) => seg.path).join('/');\n return snapshot.data?.daffPaths?.[pathFromRoot]?.[key] ?? null;\n};\n","/*\n * Public API Surface of @daffodil/external-router\n */\n\nexport { DaffExternalRouterModule } from './external-router.module';\n\nexport {\n DAFF_EXTERNAL_ROUTER_CONFIG,\n DaffExternalRouterConfiguration,\n} from './config';\n\nexport { daffProvideRouteResolvableByType } from './token/type-resolvable-routes.token';\n\nexport * from './model/public_api';\n\nexport { DaffExternalRouter } from './router/router.service';\nexport { daffInsertRouteBeforeWildCardStrategy } from './router/strategies/insert-route-before-wildcard';\n\nexport { daffInsertDataPathStrategy } from './router/strategies/insert-data-path';\nexport { daffDataPathUrlMatcher } from './router/url-matcher/data-path-matcher';\n\nexport { DaffExternalRouterNoWildcardError } from './errors/no-wildcard';\nexport { DaffExternalRouterUnknownRouteTypeError } from './errors/unknown-type';\n\nexport { daffExtractDaffPathData } from './util/extract-daff-path-data';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"daffodil-external-router.mjs","sources":["../../../libs/external-router/src/config.ts","../../../libs/external-router/src/provide-external-router.ts","../../../libs/external-router/src/public_api.ts","../../../libs/external-router/src/daffodil-external-router.ts"],"sourcesContent":["import { createConfigInjectionToken } from '@daffodil/core';\n\nexport const daffExternalRouterConfigurationDefault: DaffExternalRouterConfiguration = {\n failedResolutionPath: '/',\n};\n\nexport const {\n /**\n * The token holding the runtime configuration for the behavior of the\n * `@daffodil/external-router` package.\n */\n token: DAFF_EXTERNAL_ROUTER_CONFIG,\n /**\n * Provider function for {@link DAFF_EXTERNAL_ROUTER_CONFIG}.\n */\n provider: provideDaffExternalRouterConfig,\n} = createConfigInjectionToken<DaffExternalRouterConfiguration>(daffExternalRouterConfigurationDefault, 'DAFF_EXTERNAL_ROUTER_CONFIG');\n\n/**\n * The configuration object for the external router package.\n */\nexport interface DaffExternalRouterConfiguration {\n /**\n * The path to redirect to when external route resolution fails.\n */\n failedResolutionPath: string;\n}\n","import {\n EnvironmentProviders,\n makeEnvironmentProviders,\n} from '@angular/core';\n\nimport {\n DaffExternalRouterConfiguration,\n provideDaffExternalRouterConfig,\n} from './config';\n\nexport const provideExternalRouter = (config: Partial<DaffExternalRouterConfiguration> = {}): EnvironmentProviders => makeEnvironmentProviders([\n provideDaffExternalRouterConfig(config),\n]);\n","/*\n * Public API Surface of @daffodil/external-router\n */\n\nexport {\n DAFF_EXTERNAL_ROUTER_CONFIG,\n DaffExternalRouterConfiguration,\n} from './config';\n\nexport * from './model/public_api';\n\nexport { provideExternalRouter } from './provide-external-router';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;AAEO,MAAM,sCAAsC,GAAoC;AACrF,IAAA,oBAAoB,EAAE,GAAG;CAC1B,CAAC;AAEW,MAAA;AACX;;;AAGG;AACH,KAAK,EAAE,2BAA2B;AAClC;;AAEG;AACH,QAAQ,EAAE,+BAA+B,GAC1C,GAAG,0BAA0B,CAAkC,sCAAsC,EAAE,6BAA6B;;ACNxH,MAAA,qBAAqB,GAAG,CAAC,MAAmD,GAAA,EAAE,KAA2B,wBAAwB,CAAC;IAC7I,+BAA+B,CAAC,MAAM,CAAC;AACxC,CAAA;;ACZD;;AAEG;;ACFH;;AAEG;;;;"}
@@ -1,7 +1,4 @@
1
- export { DaffExternalRouterInsertionStrategy } from './insertion-strategy.type';
2
1
  export { DaffExternallyResolvableUrl } from './resolvable-route';
3
- export { DaffRouteInfo } from './route-info';
2
+ export { DaffRouteData } from './route-data';
4
3
  export { DaffExternalRouteType } from './route-type';
5
- export { DaffRouteWithoutPath } from './route-without-path';
6
- export { DaffTypeRoutePair } from './type-route-pair';
7
- export { DaffRouteWithDataPath } from './route-with-data-path';
4
+ export { DaffRouteWithSeoData } from './route-with-seo-data';
@@ -2,7 +2,20 @@
2
2
  * Data associated with a route.
3
3
  */
4
4
  export interface DaffRouteData {
5
+ /**
6
+ * The canonical url of the route.
7
+ */
5
8
  canonical_url?: string;
9
+ /**
10
+ * The meta description of the route.
11
+ */
6
12
  meta_description?: string;
13
+ /**
14
+ * The title of the route.
15
+ */
7
16
  title?: string;
17
+ /**
18
+ * An associated schema for the route. See {@link Schema} for full capabilities.
19
+ */
20
+ schema?: Record<string, unknown>;
8
21
  }
@@ -3,10 +3,9 @@ import { DaffRouteData } from './route-data';
3
3
  /**
4
4
  * A type that describes the special data that Daffodil will store for SEO purposes on
5
5
  * an external resolved route.
6
- *
7
- * {@link daffDataPathUrlMatcher}
8
- * {@link daffInsertDataPathStrategy}
9
6
  */
10
7
  export type DaffRouteWithSeoData = Route & {
11
- data: DaffRouteData;
8
+ data: Record<string, any> & {
9
+ daffSeoData: DaffRouteData;
10
+ };
12
11
  };
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@daffodil/external-router","nx":{"targets":{"build":{"outputs":["{workspaceRoot}/dist/external-router"]}}},"version":"0.78.0","description":"A platform-agnostic package that connects the @angular/router with an external routing service (e.g. an API), allowing for runtime route resolution.","repository":{"type":"git","url":"https://github.com/graycoreio/daffodil"},"author":"Graycore LLC","license":"MIT","bugs":{"url":"https://github.com/graycoreio/daffodil/issues"},"homepage":"https://github.com/graycoreio/daffodil","peerDependencies":{"@angular/common":"^18.2.2","@angular/core":"^18.2.2","@angular/router":"^18.2.2","@daffodil/core":"0.78.0","rxjs":"7.8.1"},"optionalDependencies":{"apollo-angular":"^7.1.2","@daffodil/driver":"0.78.0"},"module":"fesm2022/daffodil-external-router.mjs","typings":"index.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./index.d.ts","esm2022":"./esm2022/daffodil-external-router.mjs","esm":"./esm2022/daffodil-external-router.mjs","default":"./fesm2022/daffodil-external-router.mjs"},"./driver":{"types":"./driver/index.d.ts","esm2022":"./esm2022/driver/daffodil-external-router-driver.mjs","esm":"./esm2022/driver/daffodil-external-router-driver.mjs","default":"./fesm2022/daffodil-external-router-driver.mjs"},"./routing":{"types":"./routing/index.d.ts","esm2022":"./esm2022/routing/daffodil-external-router-routing.mjs","esm":"./esm2022/routing/daffodil-external-router-routing.mjs","default":"./fesm2022/daffodil-external-router-routing.mjs"},"./driver/in-memory":{"types":"./driver/in-memory/index.d.ts","esm2022":"./esm2022/driver/in-memory/daffodil-external-router-driver-in-memory.mjs","esm":"./esm2022/driver/in-memory/daffodil-external-router-driver-in-memory.mjs","default":"./fesm2022/daffodil-external-router-driver-in-memory.mjs"},"./driver/magento":{"types":"./driver/magento/index.d.ts","esm2022":"./esm2022/driver/magento/daffodil-external-router-driver-magento.mjs","esm":"./esm2022/driver/magento/daffodil-external-router-driver-magento.mjs","default":"./fesm2022/daffodil-external-router-driver-magento.mjs"},"./driver/testing":{"types":"./driver/testing/index.d.ts","esm2022":"./esm2022/driver/testing/daffodil-external-router-driver-testing.mjs","esm":"./esm2022/driver/testing/daffodil-external-router-driver-testing.mjs","default":"./fesm2022/daffodil-external-router-driver-testing.mjs"},"./driver/magento/2.4.1":{"types":"./driver/magento/2.4.1/index.d.ts","esm2022":"./esm2022/driver/magento/2.4.1/daffodil-external-router-driver-magento-2.4.1.mjs","esm":"./esm2022/driver/magento/2.4.1/daffodil-external-router-driver-magento-2.4.1.mjs","default":"./fesm2022/daffodil-external-router-driver-magento-2.4.1.mjs"},"./driver/magento/2.4.2":{"types":"./driver/magento/2.4.2/index.d.ts","esm2022":"./esm2022/driver/magento/2.4.2/daffodil-external-router-driver-magento-2.4.2.mjs","esm":"./esm2022/driver/magento/2.4.2/daffodil-external-router-driver-magento-2.4.2.mjs","default":"./fesm2022/daffodil-external-router-driver-magento-2.4.2.mjs"},"./driver/magento/2.4.3":{"types":"./driver/magento/2.4.3/index.d.ts","esm2022":"./esm2022/driver/magento/2.4.3/daffodil-external-router-driver-magento-2.4.3.mjs","esm":"./esm2022/driver/magento/2.4.3/daffodil-external-router-driver-magento-2.4.3.mjs","default":"./fesm2022/daffodil-external-router-driver-magento-2.4.3.mjs"}},"sideEffects":false,"dependencies":{"tslib":"^2.3.0"}}
1
+ {"name":"@daffodil/external-router","nx":{"targets":{"build":{"outputs":["{workspaceRoot}/dist/external-router"]}}},"version":"0.80.0","description":"A platform-agnostic package that connects the @angular/router with an external routing service (e.g. an API), allowing for runtime route resolution.","repository":{"type":"git","url":"https://github.com/graycoreio/daffodil"},"author":"Graycore LLC","license":"MIT","bugs":{"url":"https://github.com/graycoreio/daffodil/issues"},"homepage":"https://github.com/graycoreio/daffodil","peerDependencies":{"@angular/common":"^18.2.2","@angular/core":"^18.2.2","@angular/router":"^18.2.2","@daffodil/core":"0.80.0","rxjs":"7.8.1"},"optionalDependencies":{"apollo-angular":"^7.1.2","@daffodil/driver":"0.80.0"},"module":"fesm2022/daffodil-external-router.mjs","typings":"index.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./index.d.ts","esm2022":"./esm2022/daffodil-external-router.mjs","esm":"./esm2022/daffodil-external-router.mjs","default":"./fesm2022/daffodil-external-router.mjs"},"./driver":{"types":"./driver/index.d.ts","esm2022":"./esm2022/driver/daffodil-external-router-driver.mjs","esm":"./esm2022/driver/daffodil-external-router-driver.mjs","default":"./fesm2022/daffodil-external-router-driver.mjs"},"./routing":{"types":"./routing/index.d.ts","esm2022":"./esm2022/routing/daffodil-external-router-routing.mjs","esm":"./esm2022/routing/daffodil-external-router-routing.mjs","default":"./fesm2022/daffodil-external-router-routing.mjs"},"./driver/in-memory":{"types":"./driver/in-memory/index.d.ts","esm2022":"./esm2022/driver/in-memory/daffodil-external-router-driver-in-memory.mjs","esm":"./esm2022/driver/in-memory/daffodil-external-router-driver-in-memory.mjs","default":"./fesm2022/daffodil-external-router-driver-in-memory.mjs"},"./driver/magento":{"types":"./driver/magento/index.d.ts","esm2022":"./esm2022/driver/magento/daffodil-external-router-driver-magento.mjs","esm":"./esm2022/driver/magento/daffodil-external-router-driver-magento.mjs","default":"./fesm2022/daffodil-external-router-driver-magento.mjs"},"./driver/testing":{"types":"./driver/testing/index.d.ts","esm2022":"./esm2022/driver/testing/daffodil-external-router-driver-testing.mjs","esm":"./esm2022/driver/testing/daffodil-external-router-driver-testing.mjs","default":"./fesm2022/daffodil-external-router-driver-testing.mjs"},"./driver/magento/2.4.1":{"types":"./driver/magento/2.4.1/index.d.ts","esm2022":"./esm2022/driver/magento/2.4.1/daffodil-external-router-driver-magento-2.4.1.mjs","esm":"./esm2022/driver/magento/2.4.1/daffodil-external-router-driver-magento-2.4.1.mjs","default":"./fesm2022/daffodil-external-router-driver-magento-2.4.1.mjs"},"./driver/magento/2.4.2":{"types":"./driver/magento/2.4.2/index.d.ts","esm2022":"./esm2022/driver/magento/2.4.2/daffodil-external-router-driver-magento-2.4.2.mjs","esm":"./esm2022/driver/magento/2.4.2/daffodil-external-router-driver-magento-2.4.2.mjs","default":"./fesm2022/daffodil-external-router-driver-magento-2.4.2.mjs"},"./driver/magento/2.4.3":{"types":"./driver/magento/2.4.3/index.d.ts","esm2022":"./esm2022/driver/magento/2.4.3/daffodil-external-router-driver-magento-2.4.3.mjs","esm":"./esm2022/driver/magento/2.4.3/daffodil-external-router-driver-magento-2.4.3.mjs","default":"./fesm2022/daffodil-external-router-driver-magento-2.4.3.mjs"}},"sideEffects":false,"dependencies":{"tslib":"^2.3.0"}}
@@ -0,0 +1,3 @@
1
+ import { EnvironmentProviders } from '@angular/core';
2
+ import { DaffExternalRouterConfiguration } from './config';
3
+ export declare const provideExternalRouter: (config?: Partial<DaffExternalRouterConfiguration>) => EnvironmentProviders;
package/public_api.d.ts CHANGED
@@ -1,11 +1,3 @@
1
- export { DaffExternalRouterModule } from './external-router.module';
2
1
  export { DAFF_EXTERNAL_ROUTER_CONFIG, DaffExternalRouterConfiguration, } from './config';
3
- export { daffProvideRouteResolvableByType } from './token/type-resolvable-routes.token';
4
2
  export * from './model/public_api';
5
- export { DaffExternalRouter } from './router/router.service';
6
- export { daffInsertRouteBeforeWildCardStrategy } from './router/strategies/insert-route-before-wildcard';
7
- export { daffInsertDataPathStrategy } from './router/strategies/insert-data-path';
8
- export { daffDataPathUrlMatcher } from './router/url-matcher/data-path-matcher';
9
- export { DaffExternalRouterNoWildcardError } from './errors/no-wildcard';
10
- export { DaffExternalRouterUnknownRouteTypeError } from './errors/unknown-type';
11
- export { daffExtractDaffPathData } from './util/extract-daff-path-data';
3
+ export { provideExternalRouter } from './provide-external-router';
@@ -0,0 +1,10 @@
1
+ import { UrlSegment, UrlTree } from '@angular/router';
2
+ import { Observable } from 'rxjs';
3
+ import { DaffRouteWithSeoData } from '@daffodil/external-router';
4
+ /**
5
+ * A `canMatch` guard function that will resolve a route externally, allowing Angular to match it.
6
+ *
7
+ * Depending on the resolution result, the route's data will contain `daffSeoData` with supplemental search engine data
8
+ * about the route. The data on the route is cumulative. If other data properties are set, they will be merged alongside daffSeoData.
9
+ */
10
+ export declare const daffExternalMatcherTypeGuard: (type: string) => (route: DaffRouteWithSeoData, segments: Array<UrlSegment>) => Observable<boolean | UrlTree>;
@@ -0,0 +1,7 @@
1
+ import { UrlSegment } from '@angular/router';
2
+ /**
3
+ * Converts a UrlSegment into its complete Url.
4
+ *
5
+ * @docs-private
6
+ */
7
+ export declare const daffConvertToPath: (segments: UrlSegment[]) => string;
@@ -1 +1 @@
1
- export { DaffExternalRouterExistenceGuard } from './guard/existence.guard';
1
+ export { daffExternalMatcherTypeGuard } from './guard/external-matcher-type.guard';
@@ -1,9 +0,0 @@
1
- import { DaffError, DaffInheritableError } from '@daffodil/core';
2
- /**
3
- * An error thrown when there was no wildcard route found in configuration
4
- * of the Angular Router.
5
- */
6
- export declare class DaffExternalRouterNoWildcardError extends DaffInheritableError implements DaffError {
7
- readonly code: string;
8
- constructor(message?: string);
9
- }
@@ -1,9 +0,0 @@
1
- import { DaffError, DaffInheritableError } from '@daffodil/core';
2
- /**
3
- * An error thrown when there is a failure matching a configured route to a
4
- * route type.
5
- */
6
- export declare class DaffExternalRouterUnknownRouteTypeError extends DaffInheritableError implements DaffError {
7
- readonly code: string;
8
- constructor(message?: string);
9
- }
@@ -1,12 +0,0 @@
1
- import { DaffInheritableError, } from '@daffodil/core';
2
- /**
3
- * An error thrown when there was no wildcard route found in configuration
4
- * of the Angular Router.
5
- */
6
- export class DaffExternalRouterNoWildcardError extends DaffInheritableError {
7
- constructor(message) {
8
- super(message);
9
- this.code = 'NO_WILDCARD_ROUTE';
10
- }
11
- }
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8td2lsZGNhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2V4dGVybmFsLXJvdXRlci9zcmMvZXJyb3JzL25vLXdpbGRjYXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxvQkFBb0IsR0FDckIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4Qjs7O0dBR0c7QUFDSCxNQUFNLE9BQU8saUNBQWtDLFNBQVEsb0JBQW9CO0lBSXpFLFlBQVksT0FBZ0I7UUFDMUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBSEQsU0FBSSxHQUFXLG1CQUFtQixDQUFDO0lBSW5ELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERhZmZFcnJvcixcbiAgRGFmZkluaGVyaXRhYmxlRXJyb3IsXG59IGZyb20gJ0BkYWZmb2RpbC9jb3JlJztcblxuLyoqXG4gKiBBbiBlcnJvciB0aHJvd24gd2hlbiB0aGVyZSB3YXMgbm8gd2lsZGNhcmQgcm91dGUgZm91bmQgaW4gY29uZmlndXJhdGlvblxuICogb2YgdGhlIEFuZ3VsYXIgUm91dGVyLlxuICovXG5leHBvcnQgY2xhc3MgRGFmZkV4dGVybmFsUm91dGVyTm9XaWxkY2FyZEVycm9yIGV4dGVuZHMgRGFmZkluaGVyaXRhYmxlRXJyb3JcbiAgaW1wbGVtZW50cyBEYWZmRXJyb3Ige1xuICBwdWJsaWMgcmVhZG9ubHkgY29kZTogc3RyaW5nID0gJ05PX1dJTERDQVJEX1JPVVRFJztcblxuICBjb25zdHJ1Y3RvcihtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,12 +0,0 @@
1
- import { DaffInheritableError, } from '@daffodil/core';
2
- /**
3
- * An error thrown when there is a failure matching a configured route to a
4
- * route type.
5
- */
6
- export class DaffExternalRouterUnknownRouteTypeError extends DaffInheritableError {
7
- constructor(message) {
8
- super(message);
9
- this.code = 'UNKNOWN_ROUTE_TYPE';
10
- }
11
- }
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5rbm93bi10eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy9leHRlcm5hbC1yb3V0ZXIvc3JjL2Vycm9ycy91bmtub3duLXR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLG9CQUFvQixHQUNyQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCOzs7R0FHRztBQUNILE1BQU0sT0FBTyx1Q0FBd0MsU0FBUSxvQkFBb0I7SUFJL0UsWUFBWSxPQUFnQjtRQUMxQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFIRCxTQUFJLEdBQVcsb0JBQW9CLENBQUM7SUFJcEQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGFmZkVycm9yLFxuICBEYWZmSW5oZXJpdGFibGVFcnJvcixcbn0gZnJvbSAnQGRhZmZvZGlsL2NvcmUnO1xuXG4vKipcbiAqIEFuIGVycm9yIHRocm93biB3aGVuIHRoZXJlIGlzIGEgZmFpbHVyZSBtYXRjaGluZyBhIGNvbmZpZ3VyZWQgcm91dGUgdG8gYVxuICogcm91dGUgdHlwZS5cbiAqL1xuZXhwb3J0IGNsYXNzIERhZmZFeHRlcm5hbFJvdXRlclVua25vd25Sb3V0ZVR5cGVFcnJvciBleHRlbmRzIERhZmZJbmhlcml0YWJsZUVycm9yXG4gIGltcGxlbWVudHMgRGFmZkVycm9yIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvZGU6IHN0cmluZyA9ICdVTktOT1dOX1JPVVRFX1RZUEUnO1xuXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgfVxufVxuIl19
@@ -1,31 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { NgModule, } from '@angular/core';
3
- import { DAFF_EXTERNAL_ROUTER_CONFIG, daffExternalRouterConfigurationDefault, } from './config';
4
- import { daffProvideRoutesResolvableByType } from './token/type-resolvable-routes.token';
5
- import * as i0 from "@angular/core";
6
- /**
7
- * The external `DaffExternalRouterModule` allows you to configure the
8
- * `@daffodil/external-router` package's behavior.
9
- */
10
- export class DaffExternalRouterModule {
11
- static forRoot(config, routes = []) {
12
- return {
13
- ngModule: DaffExternalRouterModule,
14
- providers: [
15
- { provide: DAFF_EXTERNAL_ROUTER_CONFIG, useValue: { ...daffExternalRouterConfigurationDefault, ...config } },
16
- ...daffProvideRoutesResolvableByType(routes),
17
- ],
18
- };
19
- }
20
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: DaffExternalRouterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
21
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.2", ngImport: i0, type: DaffExternalRouterModule, imports: [CommonModule] }); }
22
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: DaffExternalRouterModule, imports: [CommonModule] }); }
23
- }
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: DaffExternalRouterModule, decorators: [{
25
- type: NgModule,
26
- args: [{
27
- declarations: [],
28
- imports: [CommonModule],
29
- }]
30
- }] });
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZXJuYWwtcm91dGVyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYnMvZXh0ZXJuYWwtcm91dGVyL3NyYy9leHRlcm5hbC1yb3V0ZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBRUwsUUFBUSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFFTCwyQkFBMkIsRUFDM0Isc0NBQXNDLEdBQ3ZDLE1BQU0sVUFBVSxDQUFDO0FBRWxCLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOztBQUV6Rjs7O0dBR0c7QUFLSCxNQUFNLE9BQU8sd0JBQXdCO0lBQ25DLE1BQU0sQ0FBQyxPQUFPLENBQ1osTUFBZ0QsRUFDaEQsU0FBOEIsRUFBRTtRQUVoQyxPQUFPO1lBQ0wsUUFBUSxFQUFFLHdCQUF3QjtZQUNsQyxTQUFTLEVBQUU7Z0JBQ1QsRUFBRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxzQ0FBc0MsRUFBRSxHQUFHLE1BQU0sRUFBRSxFQUFDO2dCQUMzRyxHQUFHLGlDQUFpQyxDQUFDLE1BQU0sQ0FBQzthQUM3QztTQUNGLENBQUM7SUFDSixDQUFDO2lJQVpVLHdCQUF3QjtrSUFBeEIsd0JBQXdCLFlBRnpCLFlBQVk7a0lBRVgsd0JBQXdCLFlBRnpCLFlBQVk7OzJGQUVYLHdCQUF3QjtrQkFKcEMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsRUFBRTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBNb2R1bGVXaXRoUHJvdmlkZXJzLFxuICBOZ01vZHVsZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIERhZmZFeHRlcm5hbFJvdXRlckNvbmZpZ3VyYXRpb24sXG4gIERBRkZfRVhURVJOQUxfUk9VVEVSX0NPTkZJRyxcbiAgZGFmZkV4dGVybmFsUm91dGVyQ29uZmlndXJhdGlvbkRlZmF1bHQsXG59IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IERhZmZUeXBlUm91dGVQYWlyIH0gZnJvbSAnLi9tb2RlbC90eXBlLXJvdXRlLXBhaXInO1xuaW1wb3J0IHsgZGFmZlByb3ZpZGVSb3V0ZXNSZXNvbHZhYmxlQnlUeXBlIH0gZnJvbSAnLi90b2tlbi90eXBlLXJlc29sdmFibGUtcm91dGVzLnRva2VuJztcblxuLyoqXG4gKiBUaGUgZXh0ZXJuYWwgYERhZmZFeHRlcm5hbFJvdXRlck1vZHVsZWAgYWxsb3dzIHlvdSB0byBjb25maWd1cmUgdGhlXG4gKiBgQGRhZmZvZGlsL2V4dGVybmFsLXJvdXRlcmAgcGFja2FnZSdzIGJlaGF2aW9yLlxuICovXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtdLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgRGFmZkV4dGVybmFsUm91dGVyTW9kdWxlIHtcbiAgc3RhdGljIGZvclJvb3QoXG4gICAgY29uZmlnOiBQYXJ0aWFsPERhZmZFeHRlcm5hbFJvdXRlckNvbmZpZ3VyYXRpb24+LFxuICAgIHJvdXRlczogRGFmZlR5cGVSb3V0ZVBhaXJbXSA9IFtdLFxuICApOiBNb2R1bGVXaXRoUHJvdmlkZXJzPERhZmZFeHRlcm5hbFJvdXRlck1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogRGFmZkV4dGVybmFsUm91dGVyTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogREFGRl9FWFRFUk5BTF9ST1VURVJfQ09ORklHLCB1c2VWYWx1ZTogeyAuLi5kYWZmRXh0ZXJuYWxSb3V0ZXJDb25maWd1cmF0aW9uRGVmYXVsdCwgLi4uY29uZmlnIH19LFxuICAgICAgICAuLi5kYWZmUHJvdmlkZVJvdXRlc1Jlc29sdmFibGVCeVR5cGUocm91dGVzKSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zZXJ0aW9uLXN0cmF0ZWd5LnR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2V4dGVybmFsLXJvdXRlci9zcmMvbW9kZWwvaW5zZXJ0aW9uLXN0cmF0ZWd5LnR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFJvdXRlLFxuICBSb3V0ZXMsXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbi8qKlxuICogQSBmdW5jdGlvbiB1c2VkIHRvIGluc2VydCBhIHJvdXRlIGludG8gYSByb3V0aW5nIGNvbmZpZy5cbiAqIFRoZSBlbnRpcmUgcm91dGluZyBjb25maWd1cmF0aW9uIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIHJldHVybiB2YWx1ZVxuICogc28gYSB0eXBpY2FsIHVzYWdlIHNob3VsZCBub3QgbW9kaWZ5IHRoZSBjb25maWcgYmV5b25kIHNpbXBseSBhZGRpbmcgdGhlIHJvdXRlXG4gKiB0byB0aGUgZGVzaXJlZCBsb2NhdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgRGFmZkV4dGVybmFsUm91dGVySW5zZXJ0aW9uU3RyYXRlZ3kgPSAocm91dGU6IFJvdXRlLCByb3V0ZXM6IFJvdXRlcykgPT4gUm91dGVzO1xuIl19
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtaW5mby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvZXh0ZXJuYWwtcm91dGVyL3NyYy9tb2RlbC9yb3V0ZS1pbmZvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYWZmRXh0ZXJuYWxSb3V0ZXJJbnNlcnRpb25TdHJhdGVneSB9IGZyb20gJy4vaW5zZXJ0aW9uLXN0cmF0ZWd5LnR5cGUnO1xuaW1wb3J0IHsgRGFmZlJvdXRlV2l0aFR5cGUgfSBmcm9tICcuL3JvdXRlLXdpdGgtdHlwZSc7XG5cbi8qKlxuICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGluZm8gbmVlZGVkIHRvIGluc2VydCBhIHJvdXRlIGludG8gYSBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhZmZSb3V0ZUluZm8ge1xuICByb3V0ZTogRGFmZlJvdXRlV2l0aFR5cGU7XG4gIGluc2VydGlvblN0cmF0ZWd5PzogRGFmZkV4dGVybmFsUm91dGVySW5zZXJ0aW9uU3RyYXRlZ3k7XG59XG4iXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtd2l0aC1kYXRhLXBhdGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2V4dGVybmFsLXJvdXRlci9zcmMvbW9kZWwvcm91dGUtd2l0aC1kYXRhLXBhdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERhdGEsXG4gIFJvdXRlLFxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBEYWZmUm91dGVEYXRhIH0gZnJvbSAnLi9yb3V0ZS1kYXRhJztcblxuLyoqXG4gKiBBIHR5cGUgdGhhdCBkZXNjcmliZXMgdGhlIHNwZWNpYWwgZGF0YSB0aGF0IERhZmZvZGlsIHdpbGwgbG9vayBmb3Igd2hlbiBhdHRlbXB0aW5nXG4gKiB0byBtYXRjaCBhIHJvdXRlIGJhc2VkIHVwb24gcGF0aCBkYXRhIHN0b3JlZCBpbiB0aGUgYGRhdGFgIGtleSBvZiBhIHJvdXRlLlxuICpcbiAqIHtAbGluayBkYWZmRGF0YVBhdGhVcmxNYXRjaGVyfVxuICoge0BsaW5rIGRhZmZJbnNlcnREYXRhUGF0aFN0cmF0ZWd5fVxuICovXG5leHBvcnQgdHlwZSBEYWZmUm91dGVXaXRoRGF0YVBhdGggPSBSb3V0ZSAmIHtcbiAgZGF0YT86IHtcbiAgICBkYWZmUGF0aHM/OiBSZWNvcmQ8c3RyaW5nLCBEYWZmUm91dGVEYXRhIHwgRGF0YT47XG4gIH07XG59O1xuIl19
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtd2l0aC10eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy9leHRlcm5hbC1yb3V0ZXIvc3JjL21vZGVsL3JvdXRlLXdpdGgtdHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBEYWZmRXh0ZXJuYWxSb3V0ZVR5cGUgfSBmcm9tICcuL3JvdXRlLXR5cGUnO1xuXG4vKipcbiAqIEEgdHlwZSB0aGF0IGRlc2NyaWJlcyB0aGUgc3BlY2lhbCBkYXRhIHRoYXQgRGFmZm9kaWwgd2lsbCBsb29rIGZvciB3aGVuIGF0dGVtcHRpbmdcbiAqIHRvIG1hdGNoIGEgcm91dGUgYmFzZWQgdXBvbiBwYXRoIGRhdGEgc3RvcmVkIGluIHRoZSBgZGF0YWAga2V5IG9mIGEgcm91dGUuXG4gKlxuICoge0BsaW5rIGRhZmZEYXRhUGF0aFVybE1hdGNoZXJ9XG4gKiB7QGxpbmsgZGFmZkluc2VydERhdGFQYXRoU3RyYXRlZ3l9XG4gKi9cbmV4cG9ydCB0eXBlIERhZmZSb3V0ZVdpdGhUeXBlID0gUm91dGUgJiB7XG4gIGRhZmZFeHRlcm5hbFJvdXRlVHlwZTogRGFmZkV4dGVybmFsUm91dGVUeXBlO1xufTtcbiJdfQ==
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtd2l0aG91dC1wYXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy9leHRlcm5hbC1yb3V0ZXIvc3JjL21vZGVsL3JvdXRlLXdpdGhvdXQtcGF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG4vKipcbiAqIEEgRGFmZlJvdXRlV2l0aG91dFBhdGggaXMgYSBzcGVjaWFsIGtpbmQgb2Ygcm91dGUgZGVmaW5pdGlvbiB3aXRob3V0IGEgcGF0aC5cbiAqIFRoaXMgaXMgdXNlZnVsIHdoZW4gZGVmaW5pbmcgcm91dGVzIHRoYXQgYXJlbid0IHByb3ZpZGVkIGEgcGF0aCBpbml0aWFsbHksXG4gKiBidXQgd2lsbCBiZSBwcm92aWRlZCB3aXRoIG9uZSBhdCBhIGxhdGVyIHRpbWUsIGUuZy4gYXQgcnVudGltZS5cbiAqL1xuZXhwb3J0IHR5cGUgRGFmZlJvdXRlV2l0aG91dFBhdGggPSBPbWl0PFJvdXRlLCAncGF0aCc+O1xuIl19
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1yb3V0ZS1wYWlyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy9leHRlcm5hbC1yb3V0ZXIvc3JjL21vZGVsL3R5cGUtcm91dGUtcGFpci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGFmZkV4dGVybmFsUm91dGVySW5zZXJ0aW9uU3RyYXRlZ3kgfSBmcm9tICcuL2luc2VydGlvbi1zdHJhdGVneS50eXBlJztcbmltcG9ydCB7IERhZmZFeHRlcm5hbFJvdXRlVHlwZSB9IGZyb20gJy4vcm91dGUtdHlwZSc7XG5pbXBvcnQgeyBEYWZmUm91dGVXaXRob3V0UGF0aCB9IGZyb20gJy4vcm91dGUtd2l0aG91dC1wYXRoJztcblxuLyoqXG4gKiBBIG1vZGVsIHVzZWQgdG8gZGVzY3JpYmUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGEge0BsaW5rIERhZmZFeHRlcm5hbFJvdXRlclR5cGV9XG4gKiBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgcm91dGUuXG4gKlxuICogVGhlIERhZmZUeXBlUm91dGVQYWlyIGlzIHRoZSBwcmUtcHJvdmlkZWQgXCJnbHVlXCIgdGhhdCBhIGRldmVsb3BlciB3aWxsIHByb3ZpZGVcbiAqIGFoZWFkLW9mLXRpbWUgc28gdGhhdCB0aGF0IHRoZSBFeHRlcm5hbCBSb3V0ZXIga25vd3Mgd2hhdCB0aGUgbGlzdCBvZiBhdmFpbGFibGVcbiAqIFwidHlwZXNcIiBhcmUgKGFsb25nIHdpdGggdGhhdCB0eXBlJ3MgY29ycmVzcG9uZGluZyByb3V0ZSkuXG4gKlxuICogQW4gaW5zZXJ0aW9uIHN0cmF0ZWd5IGNhbiBiZSBzcGVjaWZpZWQgaWYgdGhlIHJvdXRlIG5lZWRzIHRvIGJlIGluc2VydGVkIHNvbWV3aGVyZVxuICogb3RoZXIgdGhhbiB0aGUgcm9vdCBvZiB0aGUgcm91dGUgY29uZmlnLlxuICogT21pdHRpbmcgdGhlIGluc2VydGlvbiBzdHJhdGVneSB3aWxsIGRlZmF1bHQgdG8gaW5zZXJ0aW5nIHRoZSByb3V0ZSB0byB0aGUgcm9vdCBsZXZlbCxcbiAqIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgd2lsZGNhcmQgcm91dGUuXG4gKlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhZmZUeXBlUm91dGVQYWlyIHtcbiAgdHlwZTogRGFmZkV4dGVybmFsUm91dGVUeXBlO1xuICByb3V0ZTogRGFmZlJvdXRlV2l0aG91dFBhdGg7XG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBmdW5jdGlvbiB0byBwcm92aWRlIHJvdXRlIGluc2VydGlvbiBiZWhhdmlvci5cbiAgICovXG4gIGluc2VydGlvblN0cmF0ZWd5PzogRGFmZkV4dGVybmFsUm91dGVySW5zZXJ0aW9uU3RyYXRlZ3k7XG59XG4iXX0=
@@ -1,43 +0,0 @@
1
- import { Inject, Injectable, } from '@angular/core';
2
- import { Router, } from '@angular/router';
3
- import { daffInsertRouteBeforeWildCardStrategy } from './strategies/insert-route-before-wildcard';
4
- import { DaffExternalRouterNoWildcardError } from '../errors/no-wildcard';
5
- import { DAFF_EXTERNAL_ROUTER_ROUTES_RESOLVABLE_BY_TYPE } from '../token/type-resolvable-routes.token';
6
- import { daffTransformResolvedRouteToRoute } from '../transform/resolved-route-to-route';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/router";
9
- export class DaffExternalRouter {
10
- constructor(router, runtimeRoutes) {
11
- this.router = router;
12
- this.runtimeRoutes = runtimeRoutes;
13
- }
14
- /**
15
- * Adds a route to the existing router configuration.
16
- */
17
- add(resolvedRoute) {
18
- //Get the route.
19
- const { route, insertionStrategy, } = daffTransformResolvedRouteToRoute(resolvedRoute, this.runtimeRoutes);
20
- try {
21
- //Add it to configuration.
22
- this.router.config = (insertionStrategy || daffInsertRouteBeforeWildCardStrategy)(route, this.router.config);
23
- }
24
- catch (e) {
25
- if (e instanceof DaffExternalRouterNoWildcardError) {
26
- throw new DaffExternalRouterNoWildcardError(`${e.message} This usually means you have misconfigured your routes.`);
27
- }
28
- throw e;
29
- }
30
- }
31
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: DaffExternalRouter, deps: [{ token: i1.Router }, { token: DAFF_EXTERNAL_ROUTER_ROUTES_RESOLVABLE_BY_TYPE }], target: i0.ɵɵFactoryTarget.Injectable }); }
32
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: DaffExternalRouter, providedIn: 'root' }); }
33
- }
34
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: DaffExternalRouter, decorators: [{
35
- type: Injectable,
36
- args: [{
37
- providedIn: 'root',
38
- }]
39
- }], ctorParameters: () => [{ type: i1.Router }, { type: undefined, decorators: [{
40
- type: Inject,
41
- args: [DAFF_EXTERNAL_ROUTER_ROUTES_RESOLVABLE_BY_TYPE]
42
- }] }] });
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2V4dGVybmFsLXJvdXRlci9zcmMvcm91dGVyL3JvdXRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxNQUFNLEVBQ04sVUFBVSxHQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxNQUFNLEdBRVAsTUFBTSxpQkFBaUIsQ0FBQztBQUd6QixPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNsRyxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUcxRSxPQUFPLEVBQUUsOENBQThDLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN2RyxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7O0FBS3pGLE1BQU0sT0FBTyxrQkFBa0I7SUFDN0IsWUFDVSxNQUFjLEVBRWQsYUFBa0M7UUFGbEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUVkLGtCQUFhLEdBQWIsYUFBYSxDQUFxQjtJQUN4QyxDQUFDO0lBRUw7O09BRUc7SUFDSCxHQUFHLENBQUMsYUFBMEM7UUFDNUMsZ0JBQWdCO1FBQ2hCLE1BQU0sRUFDSixLQUFLLEVBQ0wsaUJBQWlCLEdBQ2xCLEdBQUcsaUNBQWlDLENBQ25DLGFBQWEsRUFDYixJQUFJLENBQUMsYUFBYSxDQUNuQixDQUFDO1FBRUYsSUFBSSxDQUFDO1lBQ0gsMEJBQTBCO1lBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsaUJBQWlCLElBQUkscUNBQXFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvRyxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxZQUFZLGlDQUFpQyxFQUFFLENBQUM7Z0JBQ25ELE1BQU0sSUFBSSxpQ0FBaUMsQ0FDekMsR0FBRyxDQUFDLENBQUMsT0FBTyx5REFBeUQsQ0FDdEUsQ0FBQztZQUNKLENBQUM7WUFFRCxNQUFNLENBQUMsQ0FBQztRQUNWLENBQUM7SUFDSCxDQUFDO2lJQWhDVSxrQkFBa0Isd0NBR25CLDhDQUE4QztxSUFIN0Msa0JBQWtCLGNBRmpCLE1BQU07OzJGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQUlJLE1BQU07MkJBQUMsOENBQThDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSW5qZWN0LFxuICBJbmplY3RhYmxlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIFJvdXRlcixcbiAgUm91dGUsXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cblxuaW1wb3J0IHsgZGFmZkluc2VydFJvdXRlQmVmb3JlV2lsZENhcmRTdHJhdGVneSB9IGZyb20gJy4vc3RyYXRlZ2llcy9pbnNlcnQtcm91dGUtYmVmb3JlLXdpbGRjYXJkJztcbmltcG9ydCB7IERhZmZFeHRlcm5hbFJvdXRlck5vV2lsZGNhcmRFcnJvciB9IGZyb20gJy4uL2Vycm9ycy9uby13aWxkY2FyZCc7XG5pbXBvcnQgeyBEYWZmRXh0ZXJuYWxseVJlc29sdmFibGVVcmwgfSBmcm9tICcuLi9tb2RlbC9yZXNvbHZhYmxlLXJvdXRlJztcbmltcG9ydCB7IERhZmZUeXBlUm91dGVQYWlyIH0gZnJvbSAnLi4vbW9kZWwvdHlwZS1yb3V0ZS1wYWlyJztcbmltcG9ydCB7IERBRkZfRVhURVJOQUxfUk9VVEVSX1JPVVRFU19SRVNPTFZBQkxFX0JZX1RZUEUgfSBmcm9tICcuLi90b2tlbi90eXBlLXJlc29sdmFibGUtcm91dGVzLnRva2VuJztcbmltcG9ydCB7IGRhZmZUcmFuc2Zvcm1SZXNvbHZlZFJvdXRlVG9Sb3V0ZSB9IGZyb20gJy4uL3RyYW5zZm9ybS9yZXNvbHZlZC1yb3V0ZS10by1yb3V0ZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBEYWZmRXh0ZXJuYWxSb3V0ZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIEBJbmplY3QoREFGRl9FWFRFUk5BTF9ST1VURVJfUk9VVEVTX1JFU09MVkFCTEVfQllfVFlQRSlcbiAgICBwcml2YXRlIHJ1bnRpbWVSb3V0ZXM6IERhZmZUeXBlUm91dGVQYWlyW10sXG4gICkgeyB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSByb3V0ZSB0byB0aGUgZXhpc3Rpbmcgcm91dGVyIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBhZGQocmVzb2x2ZWRSb3V0ZTogRGFmZkV4dGVybmFsbHlSZXNvbHZhYmxlVXJsKSB7XG4gICAgLy9HZXQgdGhlIHJvdXRlLlxuICAgIGNvbnN0IHtcbiAgICAgIHJvdXRlLFxuICAgICAgaW5zZXJ0aW9uU3RyYXRlZ3ksXG4gICAgfSA9IGRhZmZUcmFuc2Zvcm1SZXNvbHZlZFJvdXRlVG9Sb3V0ZShcbiAgICAgIHJlc29sdmVkUm91dGUsXG4gICAgICB0aGlzLnJ1bnRpbWVSb3V0ZXMsXG4gICAgKTtcblxuICAgIHRyeSB7XG4gICAgICAvL0FkZCBpdCB0byBjb25maWd1cmF0aW9uLlxuICAgICAgdGhpcy5yb3V0ZXIuY29uZmlnID0gKGluc2VydGlvblN0cmF0ZWd5IHx8IGRhZmZJbnNlcnRSb3V0ZUJlZm9yZVdpbGRDYXJkU3RyYXRlZ3kpKHJvdXRlLCB0aGlzLnJvdXRlci5jb25maWcpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgRGFmZkV4dGVybmFsUm91dGVyTm9XaWxkY2FyZEVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBEYWZmRXh0ZXJuYWxSb3V0ZXJOb1dpbGRjYXJkRXJyb3IoXG4gICAgICAgICAgYCR7ZS5tZXNzYWdlfSBUaGlzIHVzdWFsbHkgbWVhbnMgeW91IGhhdmUgbWlzY29uZmlndXJlZCB5b3VyIHJvdXRlcy5gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -1,84 +0,0 @@
1
- /**
2
- * Tests whether or not a route matches a specific Daffodil Route type.
3
- *
4
- * See {@link DaffRouteWithDataPath}
5
- */
6
- const routeMatchesRouteType = (route, type) => route?.data?.daffExternalRouteType === type;
7
- /**
8
- * Adds a path to the `daffPaths` of the given route.
9
- *
10
- * See {@link DaffRouteWithDataPath}
11
- */
12
- const addRouteToDaffPaths = (route, externalRoute) => {
13
- route.data.daffPaths = {
14
- ...route.data.daffPaths,
15
- [externalRoute.path]: externalRoute.data,
16
- };
17
- return route;
18
- };
19
- const operateOnRoute = (externalRoute) => (route) => addRouteToDaffPaths(route, externalRoute);
20
- /**
21
- * Traverse the router config tree, halting after the first match.
22
- * This traversal is implemented in a pre-order manner. As such, for large
23
- * configuration trees, it will be most efficient to place externally routed
24
- * components at the top of router configuration.
25
- */
26
- const traverseRouteTree = (routes = [], matcher, operate) => {
27
- if (routes.length === 0) {
28
- return routes;
29
- }
30
- const stack = [];
31
- const treeRoot = { children: routes };
32
- stack.push(treeRoot);
33
- while (stack.length) {
34
- const route = stack.pop();
35
- if (matcher(route)) {
36
- operate(route);
37
- break;
38
- }
39
- if (route.children) {
40
- stack.push(...route.children.reverse());
41
- }
42
- }
43
- return routes;
44
- };
45
- /**
46
- * A route insertion strategy that can be used to append external routes onto
47
- * existing Angular routes. This can be useful when you need to route to
48
- * an existing lazy-loaded module from multiple externally defined urls.
49
- *
50
- * This should be used in combination with the {@link daffDataPathUrlMatcher} to match lazy-loaded modules with
51
- * associated external urls.
52
- *
53
- * For example, you can provide the insertion strategy in the {@link DaffExternalRouterModule} as below.
54
- *
55
- * ```ts
56
- * DaffExternalRouterModule.forRoot({}, [
57
- * {
58
- * type: 'CATEGORY',
59
- * insertionStrategy: daffInsertDataPathStrategy,
60
- * route: {}
61
- * }
62
- * ],
63
- * ```
64
- *
65
- * Then, you can match it with an associated route defined in your Routing
66
- * configuration with the {@link daffDataPathUrlMatcher}.
67
- *
68
- * ```ts
69
- * export const routes: Routes = [
70
- * {
71
- * matcher: daffDataPathUrlMatcher,
72
- * data: {
73
- * daffExternalRouteType: "CATEGORY",
74
- * },
75
- * loadChildren: () => import('./category/category.module').then((m) => m.MyCategoryModule),
76
- * }
77
- * ]
78
- * ```
79
- *
80
- * See {@link DaffRouteWithDataPath}
81
- *
82
- */
83
- export const daffInsertDataPathStrategy = (externalRoute, routes) => traverseRouteTree(routes, (route) => routeMatchesRouteType(route, externalRoute.daffExternalRouteType), operateOnRoute(externalRoute));
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zZXJ0LWRhdGEtcGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvZXh0ZXJuYWwtcm91dGVyL3NyYy9yb3V0ZXIvc3RyYXRlZ2llcy9pbnNlcnQtZGF0YS1wYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWVBOzs7O0dBSUc7QUFDSCxNQUFNLHFCQUFxQixHQUFHLENBQUMsS0FBWSxFQUFFLElBQTJCLEVBQVcsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUscUJBQXFCLEtBQUssSUFBSSxDQUFDO0FBRWxJOzs7O0dBSUc7QUFDSCxNQUFNLG1CQUFtQixHQUN2QixDQUFDLEtBQTRCLEVBQUUsYUFBb0IsRUFBRSxFQUFFO0lBQ3JELEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHO1FBQ3JCLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTO1FBQ3ZCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLGFBQWEsQ0FBQyxJQUFJO0tBQ3pDLENBQUM7SUFDRixPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQztBQUVKLE1BQU0sY0FBYyxHQUNsQixDQUFDLGFBQW9CLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBNEIsRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBRXhHOzs7OztHQUtHO0FBQ0gsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFNBQWlCLEVBQUUsRUFBRSxPQUFrQyxFQUFFLE9BQXNCLEVBQVUsRUFBRTtJQUNwSCxJQUFHLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdkIsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFXLEVBQUUsQ0FBQztJQUN6QixNQUFNLFFBQVEsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUN0QyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXJCLE9BQU0sS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25CLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2xCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNmLE1BQU07UUFDUixDQUFDO1FBQ0QsSUFBRyxLQUFLLENBQUMsUUFBUSxFQUFDLENBQUM7WUFDakIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUMxQyxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUNHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQXdDLENBQUMsYUFBdUQsRUFBRSxNQUFjLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUMzSyxNQUFNLEVBQ04sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMscUJBQXFCLENBQUMsRUFDNUUsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUM5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgUm91dGUsXG4gIFJvdXRlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgRGFmZkV4dGVybmFsUm91dGVySW5zZXJ0aW9uU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9tb2RlbC9pbnNlcnRpb24tc3RyYXRlZ3kudHlwZSc7XG5pbXBvcnQgeyBEYWZmRXh0ZXJuYWxSb3V0ZVR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbC9yb3V0ZS10eXBlJztcbmltcG9ydCB7IERhZmZSb3V0ZVdpdGhEYXRhUGF0aCB9IGZyb20gJy4uLy4uL21vZGVsL3JvdXRlLXdpdGgtZGF0YS1wYXRoJztcbmltcG9ydCB7IERhZmZSb3V0ZVdpdGhTZW9EYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWwvcm91dGUtd2l0aC1zZW8tZGF0YSc7XG5pbXBvcnQgeyBEYWZmUm91dGVXaXRoVHlwZSB9IGZyb20gJy4uLy4uL21vZGVsL3JvdXRlLXdpdGgtdHlwZSc7XG5cbnR5cGUgUm91dGVPcGVyYXRvciA9IChyb3V0ZTogUm91dGUpID0+IFJvdXRlO1xudHlwZSBFeHRlcm5hbFJvdXRlT3BlcmF0b3IgPSAocm91dGU6IERhZmZSb3V0ZVdpdGhEYXRhUGF0aCwgZXh0ZXJuYWxSb3V0ZTogUm91dGUpID0+IFJvdXRlO1xudHlwZSBJbnNlcnRpb25PcGVyYXRvckZhY3RvcnkgPSAoZXh0ZXJuYWxSb3V0ZTogUm91dGUpID0+IFJvdXRlT3BlcmF0b3I7XG5cbi8qKlxuICogVGVzdHMgd2hldGhlciBvciBub3QgYSByb3V0ZSBtYXRjaGVzIGEgc3BlY2lmaWMgRGFmZm9kaWwgUm91dGUgdHlwZS5cbiAqXG4gKiBTZWUge0BsaW5rIERhZmZSb3V0ZVdpdGhEYXRhUGF0aH1cbiAqL1xuY29uc3Qgcm91dGVNYXRjaGVzUm91dGVUeXBlID0gKHJvdXRlOiBSb3V0ZSwgdHlwZTogRGFmZkV4dGVybmFsUm91dGVUeXBlKTogYm9vbGVhbiA9PiByb3V0ZT8uZGF0YT8uZGFmZkV4dGVybmFsUm91dGVUeXBlID09PSB0eXBlO1xuXG4vKipcbiAqIEFkZHMgYSBwYXRoIHRvIHRoZSBgZGFmZlBhdGhzYCBvZiB0aGUgZ2l2ZW4gcm91dGUuXG4gKlxuICogU2VlIHtAbGluayBEYWZmUm91dGVXaXRoRGF0YVBhdGh9XG4gKi9cbmNvbnN0IGFkZFJvdXRlVG9EYWZmUGF0aHM6IEV4dGVybmFsUm91dGVPcGVyYXRvciA9XG4gIChyb3V0ZTogRGFmZlJvdXRlV2l0aERhdGFQYXRoLCBleHRlcm5hbFJvdXRlOiBSb3V0ZSkgPT4ge1xuICAgIHJvdXRlLmRhdGEuZGFmZlBhdGhzID0ge1xuICAgICAgLi4ucm91dGUuZGF0YS5kYWZmUGF0aHMsXG4gICAgICBbZXh0ZXJuYWxSb3V0ZS5wYXRoXTogZXh0ZXJuYWxSb3V0ZS5kYXRhLFxuICAgIH07XG4gICAgcmV0dXJuIHJvdXRlO1xuICB9O1xuXG5jb25zdCBvcGVyYXRlT25Sb3V0ZTogSW5zZXJ0aW9uT3BlcmF0b3JGYWN0b3J5ID1cbiAgKGV4dGVybmFsUm91dGU6IFJvdXRlKSA9PiAocm91dGU6IERhZmZSb3V0ZVdpdGhEYXRhUGF0aCkgPT4gYWRkUm91dGVUb0RhZmZQYXRocyhyb3V0ZSwgZXh0ZXJuYWxSb3V0ZSk7XG5cbi8qKlxuICogVHJhdmVyc2UgdGhlIHJvdXRlciBjb25maWcgdHJlZSwgaGFsdGluZyBhZnRlciB0aGUgZmlyc3QgbWF0Y2guXG4gKiBUaGlzIHRyYXZlcnNhbCBpcyBpbXBsZW1lbnRlZCBpbiBhIHByZS1vcmRlciBtYW5uZXIuIEFzIHN1Y2gsIGZvciBsYXJnZVxuICogY29uZmlndXJhdGlvbiB0cmVlcywgaXQgd2lsbCBiZSBtb3N0IGVmZmljaWVudCB0byBwbGFjZSBleHRlcm5hbGx5IHJvdXRlZFxuICogY29tcG9uZW50cyBhdCB0aGUgdG9wIG9mIHJvdXRlciBjb25maWd1cmF0aW9uLlxuICovXG5jb25zdCB0cmF2ZXJzZVJvdXRlVHJlZSA9IChyb3V0ZXM6IFJvdXRlcyA9IFtdLCBtYXRjaGVyOiAocm91dGU6IFJvdXRlKSA9PiBib29sZWFuLCBvcGVyYXRlOiBSb3V0ZU9wZXJhdG9yKTogUm91dGVzID0+IHtcbiAgaWYocm91dGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiByb3V0ZXM7XG4gIH1cblxuICBjb25zdCBzdGFjazogUm91dGVzID0gW107XG4gIGNvbnN0IHRyZWVSb290ID0geyBjaGlsZHJlbjogcm91dGVzIH07XG4gIHN0YWNrLnB1c2godHJlZVJvb3QpO1xuXG4gIHdoaWxlKHN0YWNrLmxlbmd0aCkge1xuICAgIGNvbnN0IHJvdXRlID0gc3RhY2sucG9wKCk7XG4gICAgaWYobWF0Y2hlcihyb3V0ZSkpIHtcbiAgICAgIG9wZXJhdGUocm91dGUpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmKHJvdXRlLmNoaWxkcmVuKXtcbiAgICAgIHN0YWNrLnB1c2goLi4ucm91dGUuY2hpbGRyZW4ucmV2ZXJzZSgpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJvdXRlcztcbn07XG5cbi8qKlxuICogQSByb3V0ZSBpbnNlcnRpb24gc3RyYXRlZ3kgdGhhdCBjYW4gYmUgdXNlZCB0byBhcHBlbmQgZXh0ZXJuYWwgcm91dGVzIG9udG9cbiAqIGV4aXN0aW5nIEFuZ3VsYXIgcm91dGVzLiBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiB5b3UgbmVlZCB0byByb3V0ZSB0b1xuICogYW4gZXhpc3RpbmcgbGF6eS1sb2FkZWQgbW9kdWxlIGZyb20gbXVsdGlwbGUgZXh0ZXJuYWxseSBkZWZpbmVkIHVybHMuXG4gKlxuICogVGhpcyBzaG91bGQgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSB7QGxpbmsgZGFmZkRhdGFQYXRoVXJsTWF0Y2hlcn0gdG8gbWF0Y2ggbGF6eS1sb2FkZWQgbW9kdWxlcyB3aXRoXG4gKiBhc3NvY2lhdGVkIGV4dGVybmFsIHVybHMuXG4gKlxuICogRm9yIGV4YW1wbGUsIHlvdSBjYW4gcHJvdmlkZSB0aGUgaW5zZXJ0aW9uIHN0cmF0ZWd5IGluIHRoZSB7QGxpbmsgRGFmZkV4dGVybmFsUm91dGVyTW9kdWxlfSBhcyBiZWxvdy5cbiAqXG4gKiBgYGB0c1xuICogRGFmZkV4dGVybmFsUm91dGVyTW9kdWxlLmZvclJvb3Qoe30sIFtcbiAqICB7XG4gKiAgICB0eXBlOiAnQ0FURUdPUlknLFxuICogICAgaW5zZXJ0aW9uU3RyYXRlZ3k6IGRhZmZJbnNlcnREYXRhUGF0aFN0cmF0ZWd5LFxuICogICAgcm91dGU6IHt9XG4gKiAgfVxuICogXSxcbiAqIGBgYFxuICpcbiAqIFRoZW4sIHlvdSBjYW4gbWF0Y2ggaXQgd2l0aCBhbiBhc3NvY2lhdGVkIHJvdXRlIGRlZmluZWQgaW4geW91ciBSb3V0aW5nXG4gKiBjb25maWd1cmF0aW9uIHdpdGggdGhlIHtAbGluayBkYWZmRGF0YVBhdGhVcmxNYXRjaGVyfS5cbiAqXG4gKiBgYGB0c1xuICogIGV4cG9ydCBjb25zdCByb3V0ZXM6IFJvdXRlcyA9IFtcbiAqICAgIHtcbiAqICAgICAgbWF0Y2hlcjogZGFmZkRhdGFQYXRoVXJsTWF0Y2hlcixcbiAqICAgICAgZGF0YToge1xuICogICAgICAgIGRhZmZFeHRlcm5hbFJvdXRlVHlwZTogXCJDQVRFR09SWVwiLFxuICogICAgICB9LFxuICogICAgICBsb2FkQ2hpbGRyZW46ICgpID0+IGltcG9ydCgnLi9jYXRlZ29yeS9jYXRlZ29yeS5tb2R1bGUnKS50aGVuKChtKSA9PiBtLk15Q2F0ZWdvcnlNb2R1bGUpLFxuICogICAgfVxuICogXVxuICogYGBgXG4gKlxuICogU2VlIHtAbGluayBEYWZmUm91dGVXaXRoRGF0YVBhdGh9XG4gKlxuICovXG5leHBvcnQgY29uc3QgZGFmZkluc2VydERhdGFQYXRoU3RyYXRlZ3k6IERhZmZFeHRlcm5hbFJvdXRlckluc2VydGlvblN0cmF0ZWd5ID0gKGV4dGVybmFsUm91dGU6IERhZmZSb3V0ZVdpdGhUeXBlICYgRGFmZlJvdXRlV2l0aFNlb0RhdGEsIHJvdXRlczogUm91dGVzKSA9PiB0cmF2ZXJzZVJvdXRlVHJlZShcbiAgcm91dGVzLFxuICAocm91dGUpID0+IHJvdXRlTWF0Y2hlc1JvdXRlVHlwZShyb3V0ZSwgZXh0ZXJuYWxSb3V0ZS5kYWZmRXh0ZXJuYWxSb3V0ZVR5cGUpLFxuICBvcGVyYXRlT25Sb3V0ZShleHRlcm5hbFJvdXRlKSxcbik7XG4iXX0=
@@ -1,17 +0,0 @@
1
- import { DaffExternalRouterNoWildcardError } from '../../errors/no-wildcard';
2
- /**
3
- * Inserts a Route into Routes right before the wildcard route.
4
- * If no wildcard is found, it fails fast with a `DaffExternalRouterNoWildcardError`.
5
- */
6
- export const daffInsertRouteBeforeWildCardStrategy = (route, routes) => {
7
- const index = routes.findIndex((r) => r.path === '**');
8
- if (index === -1) {
9
- throw new DaffExternalRouterNoWildcardError('No wildcard (**) route was found during route resolution.');
10
- }
11
- return [
12
- ...routes.slice(0, index),
13
- route,
14
- ...routes.slice(index),
15
- ];
16
- };
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zZXJ0LXJvdXRlLWJlZm9yZS13aWxkY2FyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvZXh0ZXJuYWwtcm91dGVyL3NyYy9yb3V0ZXIvc3RyYXRlZ2llcy9pbnNlcnQtcm91dGUtYmVmb3JlLXdpbGRjYXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRzdFOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFDQUFxQyxHQUF3QyxDQUN4RixLQUFZLEVBQ1osTUFBYyxFQUNOLEVBQUU7SUFDVixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQzlELElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDakIsTUFBTSxJQUFJLGlDQUFpQyxDQUN6QywyREFBMkQsQ0FDNUQsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPO1FBQ0wsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7UUFDekIsS0FBSztRQUNMLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7S0FDdkIsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFJvdXRlLFxuICBSb3V0ZXMsXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IERhZmZFeHRlcm5hbFJvdXRlck5vV2lsZGNhcmRFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9ycy9uby13aWxkY2FyZCc7XG5pbXBvcnQgeyBEYWZmRXh0ZXJuYWxSb3V0ZXJJbnNlcnRpb25TdHJhdGVneSB9IGZyb20gJy4uLy4uL21vZGVsL2luc2VydGlvbi1zdHJhdGVneS50eXBlJztcblxuLyoqXG4gKiBJbnNlcnRzIGEgUm91dGUgaW50byBSb3V0ZXMgcmlnaHQgYmVmb3JlIHRoZSB3aWxkY2FyZCByb3V0ZS5cbiAqIElmIG5vIHdpbGRjYXJkIGlzIGZvdW5kLCBpdCBmYWlscyBmYXN0IHdpdGggYSBgRGFmZkV4dGVybmFsUm91dGVyTm9XaWxkY2FyZEVycm9yYC5cbiAqL1xuZXhwb3J0IGNvbnN0IGRhZmZJbnNlcnRSb3V0ZUJlZm9yZVdpbGRDYXJkU3RyYXRlZ3k6IERhZmZFeHRlcm5hbFJvdXRlckluc2VydGlvblN0cmF0ZWd5ID0gKFxuICByb3V0ZTogUm91dGUsXG4gIHJvdXRlczogUm91dGVzLFxuKTogUm91dGVzID0+IHtcbiAgY29uc3QgaW5kZXggPSByb3V0ZXMuZmluZEluZGV4KChyOiBSb3V0ZSkgPT4gci5wYXRoID09PSAnKionKTtcbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHRocm93IG5ldyBEYWZmRXh0ZXJuYWxSb3V0ZXJOb1dpbGRjYXJkRXJyb3IoXG4gICAgICAnTm8gd2lsZGNhcmQgKCoqKSByb3V0ZSB3YXMgZm91bmQgZHVyaW5nIHJvdXRlIHJlc29sdXRpb24uJyxcbiAgICApO1xuICB9XG4gIHJldHVybiBbXG4gICAgLi4ucm91dGVzLnNsaWNlKDAsIGluZGV4KSxcbiAgICByb3V0ZSxcbiAgICAuLi5yb3V0ZXMuc2xpY2UoaW5kZXgpLFxuICBdO1xufTtcbiJdfQ==
@@ -1,31 +0,0 @@
1
- import { daffUriTruncateLeadingSlash } from '@daffodil/core/routing';
2
- /**
3
- * A UrlMatcher that does an exact match against a path stored in the special
4
- * configuration fields that External Router stores on a Route's data.
5
- *
6
- * ```ts
7
- * export const routes: Routes = [
8
- * {
9
- * matcher: daffDataPathUrlMatcher,
10
- * data: {
11
- * daffExternalRouteType: "CATEGORY",
12
- * },
13
- * loadChildren: () => import('./category/category.module').then((m) => m.ShopCategoryModule),
14
- * }
15
- * ]
16
- * ```
17
- * {@link daffInsertDataPathStrategy }
18
- * {@link DaffRouteWithDataPath }
19
- */
20
- export const daffDataPathUrlMatcher = (segments, group, route) => {
21
- const path = daffUriTruncateLeadingSlash(segments.reduce((acc, segment) => acc + '/' + segment.path, ''));
22
- const paths = route?.data?.daffPaths;
23
- // If we don't have any paths, we can safely fail a match.
24
- if (!paths) {
25
- return null;
26
- }
27
- // Otherwise, look up the path in the dictionary, failing if a match isn't found,
28
- // but matching the entire segment if a match is found.
29
- return path in paths ? { consumed: segments } : null;
30
- };
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1wYXRoLW1hdGNoZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2V4dGVybmFsLXJvdXRlci9zcmMvcm91dGVyL3VybC1tYXRjaGVyL2RhdGEtcGF0aC1tYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSXJFOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFlLENBQUMsUUFBc0IsRUFBRSxLQUFzQixFQUFFLEtBQTRCLEVBQUUsRUFBRTtJQUNqSSxNQUFNLElBQUksR0FBRywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBVyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEgsTUFBTSxLQUFLLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUM7SUFFckMsMERBQTBEO0lBQzFELElBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNWLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGlGQUFpRjtJQUNqRix1REFBdUQ7SUFDdkQsT0FBTyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3hELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFVybE1hdGNoZXIsXG4gIFVybFNlZ21lbnQsXG4gIFVybFNlZ21lbnRHcm91cCxcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgZGFmZlVyaVRydW5jYXRlTGVhZGluZ1NsYXNoIH0gZnJvbSAnQGRhZmZvZGlsL2NvcmUvcm91dGluZyc7XG5cbmltcG9ydCB7IERhZmZSb3V0ZVdpdGhEYXRhUGF0aCB9IGZyb20gJy4uLy4uL21vZGVsL3B1YmxpY19hcGknO1xuXG4vKipcbiAqIEEgVXJsTWF0Y2hlciB0aGF0IGRvZXMgYW4gZXhhY3QgbWF0Y2ggYWdhaW5zdCBhIHBhdGggc3RvcmVkIGluIHRoZSBzcGVjaWFsXG4gKiBjb25maWd1cmF0aW9uIGZpZWxkcyB0aGF0IEV4dGVybmFsIFJvdXRlciBzdG9yZXMgb24gYSBSb3V0ZSdzIGRhdGEuXG4gKlxuICogYGBgdHNcbiAqICBleHBvcnQgY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXG4gKiAgICB7XG4gKiAgICAgIG1hdGNoZXI6IGRhZmZEYXRhUGF0aFVybE1hdGNoZXIsXG4gKiAgICAgIGRhdGE6IHtcbiAqICAgICAgICBkYWZmRXh0ZXJuYWxSb3V0ZVR5cGU6IFwiQ0FURUdPUllcIixcbiAqICAgICAgfSxcbiAqICAgICAgbG9hZENoaWxkcmVuOiAoKSA9PiBpbXBvcnQoJy4vY2F0ZWdvcnkvY2F0ZWdvcnkubW9kdWxlJykudGhlbigobSkgPT4gbS5TaG9wQ2F0ZWdvcnlNb2R1bGUpLFxuICogICAgfVxuICogXVxuICogYGBgXG4gKiB7QGxpbmsgZGFmZkluc2VydERhdGFQYXRoU3RyYXRlZ3kgfVxuICoge0BsaW5rIERhZmZSb3V0ZVdpdGhEYXRhUGF0aCB9XG4gKi9cbmV4cG9ydCBjb25zdCBkYWZmRGF0YVBhdGhVcmxNYXRjaGVyOiBVcmxNYXRjaGVyID0gKHNlZ21lbnRzOiBVcmxTZWdtZW50W10sIGdyb3VwOiBVcmxTZWdtZW50R3JvdXAsIHJvdXRlOiBEYWZmUm91dGVXaXRoRGF0YVBhdGgpID0+IHtcbiAgY29uc3QgcGF0aCA9IGRhZmZVcmlUcnVuY2F0ZUxlYWRpbmdTbGFzaChzZWdtZW50cy5yZWR1Y2UoKGFjYzogc3RyaW5nLCBzZWdtZW50KSA9PiBhY2MgKyAnLycgKyBzZWdtZW50LnBhdGgsICcnKSk7XG4gIGNvbnN0IHBhdGhzID0gcm91dGU/LmRhdGE/LmRhZmZQYXRocztcblxuICAvLyBJZiB3ZSBkb24ndCBoYXZlIGFueSBwYXRocywgd2UgY2FuIHNhZmVseSBmYWlsIGEgbWF0Y2guXG4gIGlmKCFwYXRocykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gT3RoZXJ3aXNlLCBsb29rIHVwIHRoZSBwYXRoIGluIHRoZSBkaWN0aW9uYXJ5LCBmYWlsaW5nIGlmIGEgbWF0Y2ggaXNuJ3QgZm91bmQsXG4gIC8vIGJ1dCBtYXRjaGluZyB0aGUgZW50aXJlIHNlZ21lbnQgaWYgYSBtYXRjaCBpcyBmb3VuZC5cbiAgcmV0dXJuIHBhdGggaW4gcGF0aHMgPyAgeyBjb25zdW1lZDogc2VnbWVudHMgfSA6IG51bGw7XG59O1xuXG4iXX0=
@@ -1,77 +0,0 @@
1
- import { Injectable, Inject, } from '@angular/core';
2
- import { Router, } from '@angular/router';
3
- import { of, } from 'rxjs';
4
- import { catchError, map, switchMap, } from 'rxjs/operators';
5
- import { DaffRoutingUriNormalizer } from '@daffodil/core/routing';
6
- import { DaffExternalRouter, DAFF_EXTERNAL_ROUTER_CONFIG, } from '@daffodil/external-router';
7
- import { DaffExternalRouterDriver, } from '@daffodil/external-router/driver';
8
- import { DaffExternalRouterNotFoundError } from '../errors/not-found-error';
9
- import { DaffExternalRouterPermanentRedirectError } from '../errors/permanent-redirect';
10
- import { DaffExternalRouterTemporaryRedirectError } from '../errors/temporary-redirect';
11
- import { processErrors } from '../processors/process-errors';
12
- import { processRedirects } from '../processors/process-redirect';
13
- import * as i0 from "@angular/core";
14
- import * as i1 from "@daffodil/external-router";
15
- import * as i2 from "@angular/router";
16
- import * as i3 from "@daffodil/core/routing";
17
- /**
18
- * The DaffExternalRouterExistenceGuard is responsible for guarding the wildcard route
19
- * of an Angular App and either navigating to a resolved route upon successful resolution
20
- * or navigating to the configured route upon a failed resolution.
21
- */
22
- export class DaffExternalRouterExistenceGuard {
23
- constructor(driver, externalRouter, router, config, urlNormalizer) {
24
- this.driver = driver;
25
- this.externalRouter = externalRouter;
26
- this.router = router;
27
- this.config = config;
28
- this.urlNormalizer = urlNormalizer;
29
- }
30
- canActivate(next, state) {
31
- return this.driver.resolve(this.urlNormalizer.normalize(state.url)).pipe(map((resolvedRoute) => processErrors(resolvedRoute)), switchMap(resolvedRoute => {
32
- this.externalRouter.add(resolvedRoute);
33
- return of(resolvedRoute);
34
- }), map((resolvedRoute) => processRedirects(resolvedRoute)),
35
- // Note that we have to use state.url as we want to ensure that we keep any fragments or query strings.
36
- // When we succeed, redirect to the new route, as config has changed since we init'd.
37
- map(() => this.router.parseUrl(state.url)),
38
- // When we fail, we need to process errors as dictated by the error type.
39
- // Handle redirects
40
- catchError(error => {
41
- if (!(error instanceof DaffExternalRouterPermanentRedirectError) &&
42
- !(error instanceof DaffExternalRouterTemporaryRedirectError)) {
43
- throw error;
44
- }
45
- return of(this.router.parseUrl(error.redirectUrl));
46
- }),
47
- // Handle "404"
48
- catchError((error) => {
49
- if (!(error instanceof DaffExternalRouterNotFoundError)) {
50
- throw error;
51
- }
52
- return of(this.router.parseUrl(this.config.notFoundResolutionPath));
53
- }),
54
- //Otherwise something went horribly wrong and we need to bail out.
55
- catchError((error) => {
56
- //TODO(damienwebdev): Add a logging system.
57
- //This log is intentional until we have a better logging system in place.
58
- console.log(error);
59
- return of(this.router.parseUrl(this.config.failedResolutionPath));
60
- }));
61
- }
62
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: DaffExternalRouterExistenceGuard, deps: [{ token: DaffExternalRouterDriver }, { token: i1.DaffExternalRouter }, { token: i2.Router }, { token: DAFF_EXTERNAL_ROUTER_CONFIG }, { token: i3.DaffRoutingUriNormalizer }], target: i0.ɵɵFactoryTarget.Injectable }); }
63
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: DaffExternalRouterExistenceGuard, providedIn: 'root' }); }
64
- }
65
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: DaffExternalRouterExistenceGuard, decorators: [{
66
- type: Injectable,
67
- args: [{
68
- providedIn: 'root',
69
- }]
70
- }], ctorParameters: () => [{ type: undefined, decorators: [{
71
- type: Inject,
72
- args: [DaffExternalRouterDriver]
73
- }] }, { type: i1.DaffExternalRouter }, { type: i2.Router }, { type: undefined, decorators: [{
74
- type: Inject,
75
- args: [DAFF_EXTERNAL_ROUTER_CONFIG]
76
- }] }, { type: i3.DaffRoutingUriNormalizer }] });
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhpc3RlbmNlLmd1YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9leHRlcm5hbC1yb3V0ZXIvcm91dGluZy9zcmMvZ3VhcmQvZXhpc3RlbmNlLmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxVQUFVLEVBQ1YsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFFTCxNQUFNLEdBR1AsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBRUwsRUFBRSxHQUNILE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUNMLFVBQVUsRUFDVixHQUFHLEVBQ0gsU0FBUyxHQUNWLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEUsT0FBTyxFQUNMLGtCQUFrQixFQUVsQiwyQkFBMkIsR0FFNUIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBRUwsd0JBQXdCLEdBQ3pCLE1BQU0sa0NBQWtDLENBQUM7QUFFMUMsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUUsT0FBTyxFQUFFLHdDQUF3QyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEYsT0FBTyxFQUFFLHdDQUF3QyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7OztBQUVsRTs7OztHQUlHO0FBSUgsTUFBTSxPQUFPLGdDQUFnQztJQUMzQyxZQUVVLE1BQXlDLEVBQ3pDLGNBQWtDLEVBQ2xDLE1BQWMsRUFFZCxNQUF1QyxFQUN2QyxhQUF1QztRQUx2QyxXQUFNLEdBQU4sTUFBTSxDQUFtQztRQUN6QyxtQkFBYyxHQUFkLGNBQWMsQ0FBb0I7UUFDbEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUVkLFdBQU0sR0FBTixNQUFNLENBQWlDO1FBQ3ZDLGtCQUFhLEdBQWIsYUFBYSxDQUEwQjtJQUM3QyxDQUFDO0lBRUwsV0FBVyxDQUNULElBQTRCLEVBQzVCLEtBQTBCO1FBRTFCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUN0RSxHQUFHLENBQUMsQ0FBQyxhQUEwQyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsRUFDakYsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU8sRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxDQUFDLGFBQTBDLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BGLHVHQUF1RztRQUN2RyxxRkFBcUY7UUFDckYsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyx5RUFBeUU7UUFDekUsbUJBQW1CO1FBQ25CLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQixJQUNFLENBQUMsQ0FBQyxLQUFLLFlBQVksd0NBQXdDLENBQUM7Z0JBQzVELENBQUMsQ0FBQyxLQUFLLFlBQVksd0NBQXdDLENBQUMsRUFBRSxDQUFDO2dCQUMvRCxNQUFNLEtBQUssQ0FBQztZQUNkLENBQUM7WUFFRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQUM7UUFDRixlQUFlO1FBQ2YsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLCtCQUErQixDQUFDLEVBQUUsQ0FBQztnQkFDeEQsTUFBTSxLQUFLLENBQUM7WUFDZCxDQUFDO1lBRUQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7UUFDdEUsQ0FBQyxDQUFDO1FBRUYsa0VBQWtFO1FBQ2xFLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLDJDQUEyQztZQUMzQyx5RUFBeUU7WUFDekUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztRQUNwRSxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztpSUFyRFUsZ0NBQWdDLGtCQUVqQyx3QkFBd0IscUVBSXhCLDJCQUEyQjtxSUFOMUIsZ0NBQWdDLGNBRi9CLE1BQU07OzJGQUVQLGdDQUFnQztrQkFINUMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQUdJLE1BQU07MkJBQUMsd0JBQXdCOzswQkFJL0IsTUFBTTsyQkFBQywyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1BsYXRmb3JtU2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEluamVjdGFibGUsXG4gIEluamVjdCxcbiAgUExBVEZPUk1fSUQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgUm91dGVyLFxuICBSb3V0ZXJTdGF0ZVNuYXBzaG90LFxuICBVcmxUcmVlLFxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgY2F0Y2hFcnJvcixcbiAgbWFwLFxuICBzd2l0Y2hNYXAsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgRGFmZlJvdXRpbmdVcmlOb3JtYWxpemVyIH0gZnJvbSAnQGRhZmZvZGlsL2NvcmUvcm91dGluZyc7XG5pbXBvcnQge1xuICBEYWZmRXh0ZXJuYWxSb3V0ZXIsXG4gIERhZmZFeHRlcm5hbFJvdXRlckNvbmZpZ3VyYXRpb24sXG4gIERBRkZfRVhURVJOQUxfUk9VVEVSX0NPTkZJRyxcbiAgRGFmZkV4dGVybmFsbHlSZXNvbHZhYmxlVXJsLFxufSBmcm9tICdAZGFmZm9kaWwvZXh0ZXJuYWwtcm91dGVyJztcbmltcG9ydCB7XG4gIERhZmZFeHRlcm5hbFJvdXRlckRyaXZlckludGVyZmFjZSxcbiAgRGFmZkV4dGVybmFsUm91dGVyRHJpdmVyLFxufSBmcm9tICdAZGFmZm9kaWwvZXh0ZXJuYWwtcm91dGVyL2RyaXZlcic7XG5cbmltcG9ydCB7IERhZmZFeHRlcm5hbFJvdXRlck5vdEZvdW5kRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMvbm90LWZvdW5kLWVycm9yJztcbmltcG9ydCB7IERhZmZFeHRlcm5hbFJvdXRlclBlcm1hbmVudFJlZGlyZWN0RXJyb3IgfSBmcm9tICcuLi9lcnJvcnMvcGVybWFuZW50LXJlZGlyZWN0JztcbmltcG9ydCB7IERhZmZFeHRlcm5hbFJvdXRlclRlbXBvcmFyeVJlZGlyZWN0RXJyb3IgfSBmcm9tICcuLi9lcnJvcnMvdGVtcG9yYXJ5LXJlZGlyZWN0JztcbmltcG9ydCB7IHByb2Nlc3NFcnJvcnMgfSBmcm9tICcuLi9wcm9jZXNzb3JzL3Byb2Nlc3MtZXJyb3JzJztcbmltcG9ydCB7IHByb2Nlc3NSZWRpcmVjdHMgfSBmcm9tICcuLi9wcm9jZXNzb3JzL3Byb2Nlc3MtcmVkaXJlY3QnO1xuXG4vKipcbiAqIFRoZSBEYWZmRXh0ZXJuYWxSb3V0ZXJFeGlzdGVuY2VHdWFyZCBpcyByZXNwb25zaWJsZSBmb3IgZ3VhcmRpbmcgdGhlIHdpbGRjYXJkIHJvdXRlXG4gKiBvZiBhbiBBbmd1bGFyIEFwcCBhbmQgZWl0aGVyIG5hdmlnYXRpbmcgdG8gYSByZXNvbHZlZCByb3V0ZSB1cG9uIHN1Y2Nlc3NmdWwgcmVzb2x1dGlvblxuICogb3IgbmF2aWdhdGluZyB0byB0aGUgY29uZmlndXJlZCByb3V0ZSB1cG9uIGEgZmFpbGVkIHJlc29sdXRpb24uXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBEYWZmRXh0ZXJuYWxSb3V0ZXJFeGlzdGVuY2VHdWFyZCAge1xuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KERhZmZFeHRlcm5hbFJvdXRlckRyaXZlcilcbiAgICBwcml2YXRlIGRyaXZlcjogRGFmZkV4dGVybmFsUm91dGVyRHJpdmVySW50ZXJmYWNlLFxuICAgIHByaXZhdGUgZXh0ZXJuYWxSb3V0ZXI6IERhZmZFeHRlcm5hbFJvdXRlcixcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIEBJbmplY3QoREFGRl9FWFRFUk5BTF9ST1VURVJfQ09ORklHKVxuICAgIHByaXZhdGUgY29uZmlnOiBEYWZmRXh0ZXJuYWxSb3V0ZXJDb25maWd1cmF0aW9uLFxuICAgIHByaXZhdGUgdXJsTm9ybWFsaXplcjogRGFmZlJvdXRpbmdVcmlOb3JtYWxpemVyLFxuICApIHsgfVxuXG4gIGNhbkFjdGl2YXRlKFxuICAgIG5leHQ6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gICAgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QsXG4gICk6IE9ic2VydmFibGU8VXJsVHJlZSB8IGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5kcml2ZXIucmVzb2x2ZSh0aGlzLnVybE5vcm1hbGl6ZXIubm9ybWFsaXplKHN0YXRlLnVybCkpLnBpcGUoXG4gICAgICBtYXAoKHJlc29sdmVkUm91dGU6IERhZmZFeHRlcm5hbGx5UmVzb2x2YWJsZVVybCkgPT4gcHJvY2Vzc0Vycm9ycyhyZXNvbHZlZFJvdXRlKSksXG4gICAgICBzd2l0Y2hNYXAocmVzb2x2ZWRSb3V0ZSA9PiB7XG4gICAgICAgIHRoaXMuZXh0ZXJuYWxSb3V0ZXIuYWRkKHJlc29sdmVkUm91dGUpO1xuICAgICAgICByZXR1cm4gb2YocmVzb2x2ZWRSb3V0ZSk7XG4gICAgICB9KSxcbiAgICAgIG1hcCgocmVzb2x2ZWRSb3V0ZTogRGFmZkV4dGVybmFsbHlSZXNvbHZhYmxlVXJsKSA9PiBwcm9jZXNzUmVkaXJlY3RzKHJlc29sdmVkUm91dGUpKSxcbiAgICAgIC8vIE5vdGUgdGhhdCB3ZSBoYXZlIHRvIHVzZSBzdGF0ZS51cmwgYXMgd2Ugd2FudCB0byBlbnN1cmUgdGhhdCB3ZSBrZWVwIGFueSBmcmFnbWVudHMgb3IgcXVlcnkgc3RyaW5ncy5cbiAgICAgIC8vIFdoZW4gd2Ugc3VjY2VlZCwgcmVkaXJlY3QgdG8gdGhlIG5ldyByb3V0ZSwgYXMgY29uZmlnIGhhcyBjaGFuZ2VkIHNpbmNlIHdlIGluaXQnZC5cbiAgICAgIG1hcCgoKSA9PiB0aGlzLnJvdXRlci5wYXJzZVVybChzdGF0ZS51cmwpKSxcbiAgICAgIC8vIFdoZW4gd2UgZmFpbCwgd2UgbmVlZCB0byBwcm9jZXNzIGVycm9ycyBhcyBkaWN0YXRlZCBieSB0aGUgZXJyb3IgdHlwZS5cbiAgICAgIC8vIEhhbmRsZSByZWRpcmVjdHNcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIShlcnJvciBpbnN0YW5jZW9mIERhZmZFeHRlcm5hbFJvdXRlclBlcm1hbmVudFJlZGlyZWN0RXJyb3IpICYmXG4gICAgICAgICAgIShlcnJvciBpbnN0YW5jZW9mIERhZmZFeHRlcm5hbFJvdXRlclRlbXBvcmFyeVJlZGlyZWN0RXJyb3IpKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2YodGhpcy5yb3V0ZXIucGFyc2VVcmwoZXJyb3IucmVkaXJlY3RVcmwpKTtcbiAgICAgIH0pLFxuICAgICAgLy8gSGFuZGxlIFwiNDA0XCJcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIGlmICghKGVycm9yIGluc3RhbmNlb2YgRGFmZkV4dGVybmFsUm91dGVyTm90Rm91bmRFcnJvcikpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvZih0aGlzLnJvdXRlci5wYXJzZVVybCh0aGlzLmNvbmZpZy5ub3RGb3VuZFJlc29sdXRpb25QYXRoKSk7XG4gICAgICB9KSxcblxuICAgICAgLy9PdGhlcndpc2Ugc29tZXRoaW5nIHdlbnQgaG9ycmlibHkgd3JvbmcgYW5kIHdlIG5lZWQgdG8gYmFpbCBvdXQuXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAvL1RPRE8oZGFtaWVud2ViZGV2KTogQWRkIGEgbG9nZ2luZyBzeXN0ZW0uXG4gICAgICAgIC8vVGhpcyBsb2cgaXMgaW50ZW50aW9uYWwgdW50aWwgd2UgaGF2ZSBhIGJldHRlciBsb2dnaW5nIHN5c3RlbSBpbiBwbGFjZS5cbiAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgICByZXR1cm4gb2YodGhpcy5yb3V0ZXIucGFyc2VVcmwodGhpcy5jb25maWcuZmFpbGVkUmVzb2x1dGlvblBhdGgpKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==