@angular/router 19.0.0-next.1 → 19.0.0-next.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.
- package/fesm2022/router.mjs +86 -96
- package/fesm2022/router.mjs.map +1 -1
- package/fesm2022/testing.mjs +11 -11
- package/fesm2022/upgrade.mjs +1 -1
- package/index.d.ts +1 -1
- package/package.json +4 -10
- package/testing/index.d.ts +1 -1
- package/upgrade/index.d.ts +1 -1
- package/esm2022/index.mjs +0 -13
- package/esm2022/public_api.mjs +0 -15
- package/esm2022/router.mjs +0 -5
- package/esm2022/src/apply_redirects.mjs +0 -124
- package/esm2022/src/components/empty_outlet.mjs +0 -49
- package/esm2022/src/create_router_state.mjs +0 -52
- package/esm2022/src/create_url_tree.mjs +0 -420
- package/esm2022/src/directives/router_link.mjs +0 -361
- package/esm2022/src/directives/router_link_active.mjs +0 -237
- package/esm2022/src/directives/router_outlet.mjs +0 -388
- package/esm2022/src/errors.mjs +0 -2
- package/esm2022/src/events.mjs +0 -588
- package/esm2022/src/index.mjs +0 -31
- package/esm2022/src/models.mjs +0 -45
- package/esm2022/src/models_deprecated.mjs +0 -9
- package/esm2022/src/navigation_canceling_error.mjs +0 -33
- package/esm2022/src/navigation_transition.mjs +0 -437
- package/esm2022/src/operators/activate_routes.mjs +0 -190
- package/esm2022/src/operators/check_guards.mjs +0 -157
- package/esm2022/src/operators/prioritized_guard_value.mjs +0 -40
- package/esm2022/src/operators/recognize.mjs +0 -15
- package/esm2022/src/operators/resolve_data.mjs +0 -92
- package/esm2022/src/operators/switch_tap.mjs +0 -25
- package/esm2022/src/page_title_strategy.mjs +0 -89
- package/esm2022/src/private_export.mjs +0 -12
- package/esm2022/src/provide_router.mjs +0 -549
- package/esm2022/src/recognize.mjs +0 -321
- package/esm2022/src/route_reuse_strategy.mjs +0 -79
- package/esm2022/src/router.mjs +0 -571
- package/esm2022/src/router_config.mjs +0 -18
- package/esm2022/src/router_config_loader.mjs +0 -137
- package/esm2022/src/router_module.mjs +0 -226
- package/esm2022/src/router_outlet_context.mjs +0 -90
- package/esm2022/src/router_preloader.mjs +0 -162
- package/esm2022/src/router_scroller.mjs +0 -111
- package/esm2022/src/router_state.mjs +0 -419
- package/esm2022/src/shared.mjs +0 -97
- package/esm2022/src/statemanager/state_manager.mjs +0 -200
- package/esm2022/src/url_handling_strategy.mjs +0 -45
- package/esm2022/src/url_tree.mjs +0 -643
- package/esm2022/src/utils/collection.mjs +0 -75
- package/esm2022/src/utils/config.mjs +0 -191
- package/esm2022/src/utils/config_matching.mjs +0 -150
- package/esm2022/src/utils/functional_guards.mjs +0 -69
- package/esm2022/src/utils/navigations.mjs +0 -44
- package/esm2022/src/utils/preactivation.mjs +0 -154
- package/esm2022/src/utils/tree.mjs +0 -94
- package/esm2022/src/utils/type_guards.mjs +0 -46
- package/esm2022/src/utils/view_transition.mjs +0 -61
- package/esm2022/src/version.mjs +0 -18
- package/esm2022/testing/index.mjs +0 -13
- package/esm2022/testing/public_api.mjs +0 -15
- package/esm2022/testing/src/router_testing_harness.mjs +0 -127
- package/esm2022/testing/src/router_testing_module.mjs +0 -75
- package/esm2022/testing/src/testing.mjs +0 -15
- package/esm2022/testing/testing.mjs +0 -5
- package/esm2022/upgrade/index.mjs +0 -13
- package/esm2022/upgrade/public_api.mjs +0 -15
- package/esm2022/upgrade/src/upgrade.mjs +0 -128
- package/esm2022/upgrade/upgrade.mjs +0 -5
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import { ɵisInjectable as isInjectable } from '@angular/core';
|
|
9
|
-
import { equalParamsAndUrlSegments, } from '../router_state';
|
|
10
|
-
import { equalPath } from '../url_tree';
|
|
11
|
-
import { shallowEqual } from '../utils/collection';
|
|
12
|
-
import { nodeChildrenAsMap } from '../utils/tree';
|
|
13
|
-
export class CanActivate {
|
|
14
|
-
constructor(path) {
|
|
15
|
-
this.path = path;
|
|
16
|
-
this.route = this.path[this.path.length - 1];
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
export class CanDeactivate {
|
|
20
|
-
constructor(component, route) {
|
|
21
|
-
this.component = component;
|
|
22
|
-
this.route = route;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
export function getAllRouteGuards(future, curr, parentContexts) {
|
|
26
|
-
const futureRoot = future._root;
|
|
27
|
-
const currRoot = curr ? curr._root : null;
|
|
28
|
-
return getChildRouteGuards(futureRoot, currRoot, parentContexts, [futureRoot.value]);
|
|
29
|
-
}
|
|
30
|
-
export function getCanActivateChild(p) {
|
|
31
|
-
const canActivateChild = p.routeConfig ? p.routeConfig.canActivateChild : null;
|
|
32
|
-
if (!canActivateChild || canActivateChild.length === 0)
|
|
33
|
-
return null;
|
|
34
|
-
return { node: p, guards: canActivateChild };
|
|
35
|
-
}
|
|
36
|
-
export function getTokenOrFunctionIdentity(tokenOrFunction, injector) {
|
|
37
|
-
const NOT_FOUND = Symbol();
|
|
38
|
-
const result = injector.get(tokenOrFunction, NOT_FOUND);
|
|
39
|
-
if (result === NOT_FOUND) {
|
|
40
|
-
if (typeof tokenOrFunction === 'function' && !isInjectable(tokenOrFunction)) {
|
|
41
|
-
// We think the token is just a function so return it as-is
|
|
42
|
-
return tokenOrFunction;
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
// This will throw the not found error
|
|
46
|
-
return injector.get(tokenOrFunction);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
return result;
|
|
50
|
-
}
|
|
51
|
-
function getChildRouteGuards(futureNode, currNode, contexts, futurePath, checks = {
|
|
52
|
-
canDeactivateChecks: [],
|
|
53
|
-
canActivateChecks: [],
|
|
54
|
-
}) {
|
|
55
|
-
const prevChildren = nodeChildrenAsMap(currNode);
|
|
56
|
-
// Process the children of the future route
|
|
57
|
-
futureNode.children.forEach((c) => {
|
|
58
|
-
getRouteGuards(c, prevChildren[c.value.outlet], contexts, futurePath.concat([c.value]), checks);
|
|
59
|
-
delete prevChildren[c.value.outlet];
|
|
60
|
-
});
|
|
61
|
-
// Process any children left from the current route (not active for the future route)
|
|
62
|
-
Object.entries(prevChildren).forEach(([k, v]) => deactivateRouteAndItsChildren(v, contexts.getContext(k), checks));
|
|
63
|
-
return checks;
|
|
64
|
-
}
|
|
65
|
-
function getRouteGuards(futureNode, currNode, parentContexts, futurePath, checks = {
|
|
66
|
-
canDeactivateChecks: [],
|
|
67
|
-
canActivateChecks: [],
|
|
68
|
-
}) {
|
|
69
|
-
const future = futureNode.value;
|
|
70
|
-
const curr = currNode ? currNode.value : null;
|
|
71
|
-
const context = parentContexts ? parentContexts.getContext(futureNode.value.outlet) : null;
|
|
72
|
-
// reusing the node
|
|
73
|
-
if (curr && future.routeConfig === curr.routeConfig) {
|
|
74
|
-
const shouldRun = shouldRunGuardsAndResolvers(curr, future, future.routeConfig.runGuardsAndResolvers);
|
|
75
|
-
if (shouldRun) {
|
|
76
|
-
checks.canActivateChecks.push(new CanActivate(futurePath));
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
// we need to set the data
|
|
80
|
-
future.data = curr.data;
|
|
81
|
-
future._resolvedData = curr._resolvedData;
|
|
82
|
-
}
|
|
83
|
-
// If we have a component, we need to go through an outlet.
|
|
84
|
-
if (future.component) {
|
|
85
|
-
getChildRouteGuards(futureNode, currNode, context ? context.children : null, futurePath, checks);
|
|
86
|
-
// if we have a componentless route, we recurse but keep the same outlet map.
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
getChildRouteGuards(futureNode, currNode, parentContexts, futurePath, checks);
|
|
90
|
-
}
|
|
91
|
-
if (shouldRun && context && context.outlet && context.outlet.isActivated) {
|
|
92
|
-
checks.canDeactivateChecks.push(new CanDeactivate(context.outlet.component, curr));
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
if (curr) {
|
|
97
|
-
deactivateRouteAndItsChildren(currNode, context, checks);
|
|
98
|
-
}
|
|
99
|
-
checks.canActivateChecks.push(new CanActivate(futurePath));
|
|
100
|
-
// If we have a component, we need to go through an outlet.
|
|
101
|
-
if (future.component) {
|
|
102
|
-
getChildRouteGuards(futureNode, null, context ? context.children : null, futurePath, checks);
|
|
103
|
-
// if we have a componentless route, we recurse but keep the same outlet map.
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
getChildRouteGuards(futureNode, null, parentContexts, futurePath, checks);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
return checks;
|
|
110
|
-
}
|
|
111
|
-
function shouldRunGuardsAndResolvers(curr, future, mode) {
|
|
112
|
-
if (typeof mode === 'function') {
|
|
113
|
-
return mode(curr, future);
|
|
114
|
-
}
|
|
115
|
-
switch (mode) {
|
|
116
|
-
case 'pathParamsChange':
|
|
117
|
-
return !equalPath(curr.url, future.url);
|
|
118
|
-
case 'pathParamsOrQueryParamsChange':
|
|
119
|
-
return (!equalPath(curr.url, future.url) || !shallowEqual(curr.queryParams, future.queryParams));
|
|
120
|
-
case 'always':
|
|
121
|
-
return true;
|
|
122
|
-
case 'paramsOrQueryParamsChange':
|
|
123
|
-
return (!equalParamsAndUrlSegments(curr, future) ||
|
|
124
|
-
!shallowEqual(curr.queryParams, future.queryParams));
|
|
125
|
-
case 'paramsChange':
|
|
126
|
-
default:
|
|
127
|
-
return !equalParamsAndUrlSegments(curr, future);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
function deactivateRouteAndItsChildren(route, context, checks) {
|
|
131
|
-
const children = nodeChildrenAsMap(route);
|
|
132
|
-
const r = route.value;
|
|
133
|
-
Object.entries(children).forEach(([childName, node]) => {
|
|
134
|
-
if (!r.component) {
|
|
135
|
-
deactivateRouteAndItsChildren(node, context, checks);
|
|
136
|
-
}
|
|
137
|
-
else if (context) {
|
|
138
|
-
deactivateRouteAndItsChildren(node, context.children.getContext(childName), checks);
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
deactivateRouteAndItsChildren(node, null, checks);
|
|
142
|
-
}
|
|
143
|
-
});
|
|
144
|
-
if (!r.component) {
|
|
145
|
-
checks.canDeactivateChecks.push(new CanDeactivate(null, r));
|
|
146
|
-
}
|
|
147
|
-
else if (context && context.outlet && context.outlet.isActivated) {
|
|
148
|
-
checks.canDeactivateChecks.push(new CanDeactivate(context.outlet.component, r));
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
checks.canDeactivateChecks.push(new CanDeactivate(null, r));
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlYWN0aXZhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci9zcmMvdXRpbHMvcHJlYWN0aXZhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQTBCLGFBQWEsSUFBSSxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFJckYsT0FBTyxFQUVMLHlCQUF5QixHQUUxQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxpQkFBaUIsRUFBVyxNQUFNLGVBQWUsQ0FBQztBQUUxRCxNQUFNLE9BQU8sV0FBVztJQUV0QixZQUFtQixJQUE4QjtRQUE5QixTQUFJLEdBQUosSUFBSSxDQUEwQjtRQUMvQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0MsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGFBQWE7SUFDeEIsWUFDUyxTQUF3QixFQUN4QixLQUE2QjtRQUQ3QixjQUFTLEdBQVQsU0FBUyxDQUFlO1FBQ3hCLFVBQUssR0FBTCxLQUFLLENBQXdCO0lBQ25DLENBQUM7Q0FDTDtBQU9ELE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsTUFBMkIsRUFDM0IsSUFBeUIsRUFDekIsY0FBc0M7SUFFdEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNoQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUUxQyxPQUFPLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxR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QUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixNQUFNLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7U0FBTSxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkUsTUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0luamVjdG9yLCBQcm92aWRlclRva2VuLCDJtWlzSW5qZWN0YWJsZSBhcyBpc0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1J1bkd1YXJkc0FuZFJlc29sdmVyc30gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7Q2hpbGRyZW5PdXRsZXRDb250ZXh0cywgT3V0bGV0Q29udGV4dH0gZnJvbSAnLi4vcm91dGVyX291dGxldF9jb250ZXh0JztcbmltcG9ydCB7XG4gIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gIGVxdWFsUGFyYW1zQW5kVXJsU2VnbWVudHMsXG4gIFJvdXRlclN0YXRlU25hcHNob3QsXG59IGZyb20gJy4uL3JvdXRlcl9zdGF0ZSc7XG5pbXBvcnQge2VxdWFsUGF0aH0gZnJvbSAnLi4vdXJsX3RyZWUnO1xuaW1wb3J0IHtzaGFsbG93RXF1YWx9IGZyb20gJy4uL3V0aWxzL2NvbGxlY3Rpb24nO1xuaW1wb3J0IHtub2RlQ2hpbGRyZW5Bc01hcCwgVHJlZU5vZGV9IGZyb20gJy4uL3V0aWxzL3RyZWUnO1xuXG5leHBvcnQgY2xhc3MgQ2FuQWN0aXZhdGUge1xuICByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdDtcbiAgY29uc3RydWN0b3IocHVibGljIHBhdGg6IEFjdGl2YXRlZFJvdXRlU25hcHNob3RbXSkge1xuICAgIHRoaXMucm91dGUgPSB0aGlzLnBhdGhbdGhpcy5wYXRoLmxlbmd0aCAtIDFdO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDYW5EZWFjdGl2YXRlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNvbXBvbmVudDogT2JqZWN0IHwgbnVsbCxcbiAgICBwdWJsaWMgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gICkge31cbn1cblxuZXhwb3J0IGRlY2xhcmUgdHlwZSBDaGVja3MgPSB7XG4gIGNhbkRlYWN0aXZhdGVDaGVja3M6IENhbkRlYWN0aXZhdGVbXTtcbiAgY2FuQWN0aXZhdGVDaGVja3M6IENhbkFjdGl2YXRlW107XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsUm91dGVHdWFyZHMoXG4gIGZ1dHVyZTogUm91dGVyU3RhdGVTbmFwc2hvdCxcbiAgY3VycjogUm91dGVyU3RhdGVTbmFwc2hvdCxcbiAgcGFyZW50Q29udGV4dHM6IENoaWxkcmVuT3V0bGV0Q29udGV4dHMsXG4pIHtcbiAgY29uc3QgZnV0dXJlUm9vdCA9IGZ1dHVyZS5fcm9vdDtcbiAgY29uc3QgY3VyclJvb3QgPSBjdXJyID8gY3Vyci5fcm9vdCA6IG51bGw7XG5cbiAgcmV0dXJuIGdldENoaWxkUm91dGVHdWFyZHMoZnV0dXJlUm9vdCwgY3VyclJvb3QsIHBhcmVudENvbnRleHRzLCBbZnV0dXJlUm9vdC52YWx1ZV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FuQWN0aXZhdGVDaGlsZChcbiAgcDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbik6IHtub2RlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90OyBndWFyZHM6IGFueVtdfSB8IG51bGwge1xuICBjb25zdCBjYW5BY3RpdmF0ZUNoaWxkID0gcC5yb3V0ZUNvbmZpZyA/IHAucm91dGVDb25maWcuY2FuQWN0aXZhdGVDaGlsZCA6IG51bGw7XG4gIGlmICghY2FuQWN0aXZhdGVDaGlsZCB8fCBjYW5BY3RpdmF0ZUNoaWxkLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gIHJldHVybiB7bm9kZTogcCwgZ3VhcmRzOiBjYW5BY3RpdmF0ZUNoaWxkfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRva2VuT3JGdW5jdGlvbklkZW50aXR5PFQ+KFxuICB0b2tlbk9yRnVuY3Rpb246IEZ1bmN0aW9uIHwgUHJvdmlkZXJUb2tlbjxUPixcbiAgaW5qZWN0b3I6IEluamVjdG9yLFxuKTogRnVuY3Rpb24gfCBUIHtcbiAgY29uc3QgTk9UX0ZPVU5EID0gU3ltYm9sKCk7XG4gIGNvbnN0IHJlc3VsdCA9IGluamVjdG9yLmdldDxUIHwgU3ltYm9sPih0b2tlbk9yRnVuY3Rpb24sIE5PVF9GT1VORCk7XG4gIGlmIChyZXN1bHQgPT09IE5PVF9GT1VORCkge1xuICAgIGlmICh0eXBlb2YgdG9rZW5PckZ1bmN0aW9uID09PSAnZnVuY3Rpb24nICYmICFpc0luamVjdGFibGUodG9rZW5PckZ1bmN0aW9uKSkge1xuICAgICAgLy8gV2UgdGhpbmsgdGhlIHRva2VuIGlzIGp1c3QgYSBmdW5jdGlvbiBzbyByZXR1cm4gaXQgYXMtaXNcbiAgICAgIHJldHVybiB0b2tlbk9yRnVuY3Rpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyB0aGUgbm90IGZvdW5kIGVycm9yXG4gICAgICByZXR1cm4gaW5qZWN0b3IuZ2V0PFQ+KHRva2VuT3JGdW5jdGlvbik7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQgYXMgVDtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hpbGRSb3V0ZUd1YXJkcyhcbiAgZnV0dXJlTm9kZTogVHJlZU5vZGU8QWN0aXZhdGVkUm91dGVTbmFwc2hvdD4sXG4gIGN1cnJOb2RlOiBUcmVlTm9kZTxBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90PiB8IG51bGwsXG4gIGNvbnRleHRzOiBDaGlsZHJlbk91dGxldENvbnRleHRzIHwgbnVsbCxcbiAgZnV0dXJlUGF0aDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdFtdLFxuICBjaGVja3M6IENoZWNrcyA9IHtcbiAgICBjYW5EZWFjdGl2YXRlQ2hlY2tzOiBbXSxcbiAgICBjYW5BY3RpdmF0ZUNoZWNrczogW10sXG4gIH0sXG4pOiBDaGVja3Mge1xuICBjb25zdCBwcmV2Q2hpbGRyZW4gPSBub2RlQ2hpbGRyZW5Bc01hcChjdXJyTm9kZSk7XG5cbiAgLy8gUHJvY2VzcyB0aGUgY2hpbGRyZW4gb2YgdGhlIGZ1dHVyZSByb3V0ZVxuICBmdXR1cmVOb2RlLmNoaWxkcmVuLmZvckVhY2goKGMpID0+IHtcbiAgICBnZXRSb3V0ZUd1YXJkcyhjLCBwcmV2Q2hpbGRyZW5bYy52YWx1ZS5vdXRsZXRdLCBjb250ZXh0cywgZnV0dXJlUGF0aC5jb25jYXQoW2MudmFsdWVdKSwgY2hlY2tzKTtcbiAgICBkZWxldGUgcHJldkNoaWxkcmVuW2MudmFsdWUub3V0bGV0XTtcbiAgfSk7XG5cbiAgLy8gUHJvY2VzcyBhbnkgY2hpbGRyZW4gbGVmdCBmcm9tIHRoZSBjdXJyZW50IHJvdXRlIChub3QgYWN0aXZlIGZvciB0aGUgZnV0dXJlIHJvdXRlKVxuICBPYmplY3QuZW50cmllcyhwcmV2Q2hpbGRyZW4pLmZvckVhY2goKFtrLCB2XTogW3N0cmluZywgVHJlZU5vZGU8QWN0aXZhdGVkUm91dGVTbmFwc2hvdD5dKSA9PlxuICAgIGRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKHYsIGNvbnRleHRzIS5nZXRDb250ZXh0KGspLCBjaGVja3MpLFxuICApO1xuXG4gIHJldHVybiBjaGVja3M7XG59XG5cbmZ1bmN0aW9uIGdldFJvdXRlR3VhcmRzKFxuICBmdXR1cmVOb2RlOiBUcmVlTm9kZTxBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90PixcbiAgY3Vyck5vZGU6IFRyZWVOb2RlPEFjdGl2YXRlZFJvdXRlU25hcHNob3Q+LFxuICBwYXJlbnRDb250ZXh0czogQ2hpbGRyZW5PdXRsZXRDb250ZXh0cyB8IG51bGwsXG4gIGZ1dHVyZVBhdGg6IEFjdGl2YXRlZFJvdXRlU25hcHNob3RbXSxcbiAgY2hlY2tzOiBDaGVja3MgPSB7XG4gICAgY2FuRGVhY3RpdmF0ZUNoZWNrczogW10sXG4gICAgY2FuQWN0aXZhdGVDaGVja3M6IFtdLFxuICB9LFxuKTogQ2hlY2tzIHtcbiAgY29uc3QgZnV0dXJlID0gZnV0dXJlTm9kZS52YWx1ZTtcbiAgY29uc3QgY3VyciA9IGN1cnJOb2RlID8gY3Vyck5vZGUudmFsdWUgOiBudWxsO1xuICBjb25zdCBjb250ZXh0ID0gcGFyZW50Q29udGV4dHMgPyBwYXJlbnRDb250ZXh0cy5nZXRDb250ZXh0KGZ1dHVyZU5vZGUudmFsdWUub3V0bGV0KSA6IG51bGw7XG5cbiAgLy8gcmV1c2luZyB0aGUgbm9kZVxuICBpZiAoY3VyciAmJiBmdXR1cmUucm91dGVDb25maWcgPT09IGN1cnIucm91dGVDb25maWcpIHtcbiAgICBjb25zdCBzaG91bGRSdW4gPSBzaG91bGRSdW5HdWFyZHNBbmRSZXNvbHZlcnMoXG4gICAgICBjdXJyLFxuICAgICAgZnV0dXJlLFxuICAgICAgZnV0dXJlLnJvdXRlQ29uZmlnIS5ydW5HdWFyZHNBbmRSZXNvbHZlcnMsXG4gICAgKTtcbiAgICBpZiAoc2hvdWxkUnVuKSB7XG4gICAgICBjaGVja3MuY2FuQWN0aXZhdGVDaGVja3MucHVzaChuZXcgQ2FuQWN0aXZhdGUoZnV0dXJlUGF0aCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB3ZSBuZWVkIHRvIHNldCB0aGUgZGF0YVxuICAgICAgZnV0dXJlLmRhdGEgPSBjdXJyLmRhdGE7XG4gICAgICBmdXR1cmUuX3Jlc29sdmVkRGF0YSA9IGN1cnIuX3Jlc29sdmVkRGF0YTtcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBoYXZlIGEgY29tcG9uZW50LCB3ZSBuZWVkIHRvIGdvIHRocm91Z2ggYW4gb3V0bGV0LlxuICAgIGlmIChmdXR1cmUuY29tcG9uZW50KSB7XG4gICAgICBnZXRDaGlsZFJvdXRlR3VhcmRzKFxuICAgICAgICBmdXR1cmVOb2RlLFxuICAgICAgICBjdXJyTm9kZSxcbiAgICAgICAgY29udGV4dCA/IGNvbnRleHQuY2hpbGRyZW4gOiBudWxsLFxuICAgICAgICBmdXR1cmVQYXRoLFxuICAgICAgICBjaGVja3MsXG4gICAgICApO1xuXG4gICAgICAvLyBpZiB3ZSBoYXZlIGEgY29tcG9uZW50bGVzcyByb3V0ZSwgd2UgcmVjdXJzZSBidXQga2VlcCB0aGUgc2FtZSBvdXRsZXQgbWFwLlxuICAgIH0gZWxzZSB7XG4gICAgICBnZXRDaGlsZFJvdXRlR3VhcmRzKGZ1dHVyZU5vZGUsIGN1cnJOb2RlLCBwYXJlbnRDb250ZXh0cywgZnV0dXJlUGF0aCwgY2hlY2tzKTtcbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkUnVuICYmIGNvbnRleHQgJiYgY29udGV4dC5vdXRsZXQgJiYgY29udGV4dC5vdXRsZXQuaXNBY3RpdmF0ZWQpIHtcbiAgICAgIGNoZWNrcy5jYW5EZWFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IENhbkRlYWN0aXZhdGUoY29udGV4dC5vdXRsZXQuY29tcG9uZW50LCBjdXJyKSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChjdXJyKSB7XG4gICAgICBkZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihjdXJyTm9kZSwgY29udGV4dCwgY2hlY2tzKTtcbiAgICB9XG5cbiAgICBjaGVja3MuY2FuQWN0aXZhdGVDaGVja3MucHVzaChuZXcgQ2FuQWN0aXZhdGUoZnV0dXJlUGF0aCkpO1xuICAgIC8vIElmIHdlIGhhdmUgYSBjb21wb25lbnQsIHdlIG5lZWQgdG8gZ28gdGhyb3VnaCBhbiBvdXRsZXQuXG4gICAgaWYgKGZ1dHVyZS5jb21wb25lbnQpIHtcbiAgICAgIGdldENoaWxkUm91dGVHdWFyZHMoZnV0dXJlTm9kZSwgbnVsbCwgY29udGV4dCA/IGNvbnRleHQuY2hpbGRyZW4gOiBudWxsLCBmdXR1cmVQYXRoLCBjaGVja3MpO1xuXG4gICAgICAvLyBpZiB3ZSBoYXZlIGEgY29tcG9uZW50bGVzcyByb3V0ZSwgd2UgcmVjdXJzZSBidXQga2VlcCB0aGUgc2FtZSBvdXRsZXQgbWFwLlxuICAgIH0gZWxzZSB7XG4gICAgICBnZXRDaGlsZFJvdXRlR3VhcmRzKGZ1dHVyZU5vZGUsIG51bGwsIHBhcmVudENvbnRleHRzLCBmdXR1cmVQYXRoLCBjaGVja3MpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjaGVja3M7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFJ1bkd1YXJkc0FuZFJlc29sdmVycyhcbiAgY3VycjogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgZnV0dXJlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICBtb2RlOiBSdW5HdWFyZHNBbmRSZXNvbHZlcnMgfCB1bmRlZmluZWQsXG4pOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiBtb2RlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1vZGUoY3VyciwgZnV0dXJlKTtcbiAgfVxuICBzd2l0Y2ggKG1vZGUpIHtcbiAgICBjYXNlICdwYXRoUGFyYW1zQ2hhbmdlJzpcbiAgICAgIHJldHVybiAhZXF1YWxQYXRoKGN1cnIudXJsLCBmdXR1cmUudXJsKTtcblxuICAgIGNhc2UgJ3BhdGhQYXJhbXNPclF1ZXJ5UGFyYW1zQ2hhbmdlJzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgICFlcXVhbFBhdGgoY3Vyci51cmwsIGZ1dHVyZS51cmwpIHx8ICFzaGFsbG93RXF1YWwoY3Vyci5xdWVyeVBhcmFtcywgZnV0dXJlLnF1ZXJ5UGFyYW1zKVxuICAgICAgKTtcblxuICAgIGNhc2UgJ2Fsd2F5cyc6XG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGNhc2UgJ3BhcmFtc09yUXVlcnlQYXJhbXNDaGFuZ2UnOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgIWVxdWFsUGFyYW1zQW5kVXJsU2VnbWVudHMoY3VyciwgZnV0dXJlKSB8fFxuICAgICAgICAhc2hhbGxvd0VxdWFsKGN1cnIucXVlcnlQYXJhbXMsIGZ1dHVyZS5xdWVyeVBhcmFtcylcbiAgICAgICk7XG5cbiAgICBjYXNlICdwYXJhbXNDaGFuZ2UnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gIWVxdWFsUGFyYW1zQW5kVXJsU2VnbWVudHMoY3VyciwgZnV0dXJlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihcbiAgcm91dGU6IFRyZWVOb2RlPEFjdGl2YXRlZFJvdXRlU25hcHNob3Q+LFxuICBjb250ZXh0OiBPdXRsZXRDb250ZXh0IHwgbnVsbCxcbiAgY2hlY2tzOiBDaGVja3MsXG4pOiB2b2lkIHtcbiAgY29uc3QgY2hpbGRyZW4gPSBub2RlQ2hpbGRyZW5Bc01hcChyb3V0ZSk7XG4gIGNvbnN0IHIgPSByb3V0ZS52YWx1ZTtcblxuICBPYmplY3QuZW50cmllcyhjaGlsZHJlbikuZm9yRWFjaCgoW2NoaWxkTmFtZSwgbm9kZV0pID0+IHtcbiAgICBpZiAoIXIuY29tcG9uZW50KSB7XG4gICAgICBkZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihub2RlLCBjb250ZXh0LCBjaGVja3MpO1xuICAgIH0gZWxzZSBpZiAoY29udGV4dCkge1xuICAgICAgZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4obm9kZSwgY29udGV4dC5jaGlsZHJlbi5nZXRDb250ZXh0KGNoaWxkTmFtZSksIGNoZWNrcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKG5vZGUsIG51bGwsIGNoZWNrcyk7XG4gICAgfVxuICB9KTtcblxuICBpZiAoIXIuY29tcG9uZW50KSB7XG4gICAgY2hlY2tzLmNhbkRlYWN0aXZhdGVDaGVja3MucHVzaChuZXcgQ2FuRGVhY3RpdmF0ZShudWxsLCByKSk7XG4gIH0gZWxzZSBpZiAoY29udGV4dCAmJiBjb250ZXh0Lm91dGxldCAmJiBjb250ZXh0Lm91dGxldC5pc0FjdGl2YXRlZCkge1xuICAgIGNoZWNrcy5jYW5EZWFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IENhbkRlYWN0aXZhdGUoY29udGV4dC5vdXRsZXQuY29tcG9uZW50LCByKSk7XG4gIH0gZWxzZSB7XG4gICAgY2hlY2tzLmNhbkRlYWN0aXZhdGVDaGVja3MucHVzaChuZXcgQ2FuRGVhY3RpdmF0ZShudWxsLCByKSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
export class Tree {
|
|
9
|
-
constructor(root) {
|
|
10
|
-
this._root = root;
|
|
11
|
-
}
|
|
12
|
-
get root() {
|
|
13
|
-
return this._root.value;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* @internal
|
|
17
|
-
*/
|
|
18
|
-
parent(t) {
|
|
19
|
-
const p = this.pathFromRoot(t);
|
|
20
|
-
return p.length > 1 ? p[p.length - 2] : null;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* @internal
|
|
24
|
-
*/
|
|
25
|
-
children(t) {
|
|
26
|
-
const n = findNode(t, this._root);
|
|
27
|
-
return n ? n.children.map((t) => t.value) : [];
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* @internal
|
|
31
|
-
*/
|
|
32
|
-
firstChild(t) {
|
|
33
|
-
const n = findNode(t, this._root);
|
|
34
|
-
return n && n.children.length > 0 ? n.children[0].value : null;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* @internal
|
|
38
|
-
*/
|
|
39
|
-
siblings(t) {
|
|
40
|
-
const p = findPath(t, this._root);
|
|
41
|
-
if (p.length < 2)
|
|
42
|
-
return [];
|
|
43
|
-
const c = p[p.length - 2].children.map((c) => c.value);
|
|
44
|
-
return c.filter((cc) => cc !== t);
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* @internal
|
|
48
|
-
*/
|
|
49
|
-
pathFromRoot(t) {
|
|
50
|
-
return findPath(t, this._root).map((s) => s.value);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
// DFS for the node matching the value
|
|
54
|
-
function findNode(value, node) {
|
|
55
|
-
if (value === node.value)
|
|
56
|
-
return node;
|
|
57
|
-
for (const child of node.children) {
|
|
58
|
-
const node = findNode(value, child);
|
|
59
|
-
if (node)
|
|
60
|
-
return node;
|
|
61
|
-
}
|
|
62
|
-
return null;
|
|
63
|
-
}
|
|
64
|
-
// Return the path to the node with the given value using DFS
|
|
65
|
-
function findPath(value, node) {
|
|
66
|
-
if (value === node.value)
|
|
67
|
-
return [node];
|
|
68
|
-
for (const child of node.children) {
|
|
69
|
-
const path = findPath(value, child);
|
|
70
|
-
if (path.length) {
|
|
71
|
-
path.unshift(node);
|
|
72
|
-
return path;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
return [];
|
|
76
|
-
}
|
|
77
|
-
export class TreeNode {
|
|
78
|
-
constructor(value, children) {
|
|
79
|
-
this.value = value;
|
|
80
|
-
this.children = children;
|
|
81
|
-
}
|
|
82
|
-
toString() {
|
|
83
|
-
return `TreeNode(${this.value})`;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
// Return the list of T indexed by outlet name
|
|
87
|
-
export function nodeChildrenAsMap(node) {
|
|
88
|
-
const map = {};
|
|
89
|
-
if (node) {
|
|
90
|
-
node.children.forEach((child) => (map[child.value.outlet] = child));
|
|
91
|
-
}
|
|
92
|
-
return map;
|
|
93
|
-
}
|
|
94
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci9zcmMvdXRpbHMvdHJlZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxNQUFNLE9BQU8sSUFBSTtJQUlmLFlBQVksSUFBaUI7UUFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLENBQUk7UUFDVCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDL0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUSxDQUFDLENBQUk7UUFDWCxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVUsQ0FBQyxDQUFJO1FBQ2IsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcs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b29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5leHBvcnQgY2xhc3MgVHJlZTxUPiB7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX3Jvb3Q6IFRyZWVOb2RlPFQ+O1xuXG4gIGNvbnN0cnVjdG9yKHJvb3Q6IFRyZWVOb2RlPFQ+KSB7XG4gICAgdGhpcy5fcm9vdCA9IHJvb3Q7XG4gIH1cblxuICBnZXQgcm9vdCgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fcm9vdC52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHBhcmVudCh0OiBUKTogVCB8IG51bGwge1xuICAgIGNvbnN0IHAgPSB0aGlzLnBhdGhGcm9tUm9vdCh0KTtcbiAgICByZXR1cm4gcC5sZW5ndGggPiAxID8gcFtwLmxlbmd0aCAtIDJdIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGNoaWxkcmVuKHQ6IFQpOiBUW10ge1xuICAgIGNvbnN0IG4gPSBmaW5kTm9kZSh0LCB0aGlzLl9yb290KTtcbiAgICByZXR1cm4gbiA/IG4uY2hpbGRyZW4ubWFwKCh0KSA9PiB0LnZhbHVlKSA6IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZmlyc3RDaGlsZCh0OiBUKTogVCB8IG51bGwge1xuICAgIGNvbnN0IG4gPSBmaW5kTm9kZSh0LCB0aGlzLl9yb290KTtcbiAgICByZXR1cm4gbiAmJiBuLmNoaWxkcmVuLmxlbmd0aCA+IDAgPyBuLmNoaWxkcmVuWzBdLnZhbHVlIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHNpYmxpbmdzKHQ6IFQpOiBUW10ge1xuICAgIGNvbnN0IHAgPSBmaW5kUGF0aCh0LCB0aGlzLl9yb290KTtcbiAgICBpZiAocC5sZW5ndGggPCAyKSByZXR1cm4gW107XG5cbiAgICBjb25zdCBjID0gcFtwLmxlbmd0aCAtIDJdLmNoaWxkcmVuLm1hcCgoYykgPT4gYy52YWx1ZSk7XG4gICAgcmV0dXJuIGMuZmlsdGVyKChjYykgPT4gY2MgIT09IHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcGF0aEZyb21Sb290KHQ6IFQpOiBUW10ge1xuICAgIHJldHVybiBmaW5kUGF0aCh0LCB0aGlzLl9yb290KS5tYXAoKHMpID0+IHMudmFsdWUpO1xuICB9XG59XG5cbi8vIERGUyBmb3IgdGhlIG5vZGUgbWF0Y2hpbmcgdGhlIHZhbHVlXG5mdW5jdGlvbiBmaW5kTm9kZTxUPih2YWx1ZTogVCwgbm9kZTogVHJlZU5vZGU8VD4pOiBUcmVlTm9kZTxUPiB8IG51bGwge1xuICBpZiAodmFsdWUgPT09IG5vZGUudmFsdWUpIHJldHVybiBub2RlO1xuXG4gIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbikge1xuICAgIGNvbnN0IG5vZGUgPSBmaW5kTm9kZSh2YWx1ZSwgY2hpbGQpO1xuICAgIGlmIChub2RlKSByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBSZXR1cm4gdGhlIHBhdGggdG8gdGhlIG5vZGUgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgdXNpbmcgREZTXG5mdW5jdGlvbiBmaW5kUGF0aDxUPih2YWx1ZTogVCwgbm9kZTogVHJlZU5vZGU8VD4pOiBUcmVlTm9kZTxUPltdIHtcbiAgaWYgKHZhbHVlID09PSBub2RlLnZhbHVlKSByZXR1cm4gW25vZGVdO1xuXG4gIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbikge1xuICAgIGNvbnN0IHBhdGggPSBmaW5kUGF0aCh2YWx1ZSwgY2hpbGQpO1xuICAgIGlmIChwYXRoLmxlbmd0aCkge1xuICAgICAgcGF0aC51bnNoaWZ0KG5vZGUpO1xuICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFtdO1xufVxuXG5leHBvcnQgY2xhc3MgVHJlZU5vZGU8VD4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgdmFsdWU6IFQsXG4gICAgcHVibGljIGNoaWxkcmVuOiBUcmVlTm9kZTxUPltdLFxuICApIHt9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFRyZWVOb2RlKCR7dGhpcy52YWx1ZX0pYDtcbiAgfVxufVxuXG4vLyBSZXR1cm4gdGhlIGxpc3Qgb2YgVCBpbmRleGVkIGJ5IG91dGxldCBuYW1lXG5leHBvcnQgZnVuY3Rpb24gbm9kZUNoaWxkcmVuQXNNYXA8VCBleHRlbmRzIHtvdXRsZXQ6IHN0cmluZ30+KG5vZGU6IFRyZWVOb2RlPFQ+IHwgbnVsbCkge1xuICBjb25zdCBtYXA6IHtbb3V0bGV0OiBzdHJpbmddOiBUcmVlTm9kZTxUPn0gPSB7fTtcblxuICBpZiAobm9kZSkge1xuICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IChtYXBbY2hpbGQudmFsdWUub3V0bGV0XSA9IGNoaWxkKSk7XG4gIH1cblxuICByZXR1cm4gbWFwO1xufVxuIl19
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import { EmptyError } from 'rxjs';
|
|
9
|
-
/**
|
|
10
|
-
* Simple function check, but generic so type inference will flow. Example:
|
|
11
|
-
*
|
|
12
|
-
* function product(a: number, b: number) {
|
|
13
|
-
* return a * b;
|
|
14
|
-
* }
|
|
15
|
-
*
|
|
16
|
-
* if (isFunction<product>(fn)) {
|
|
17
|
-
* return fn(1, 2);
|
|
18
|
-
* } else {
|
|
19
|
-
* throw "Must provide the `product` function";
|
|
20
|
-
* }
|
|
21
|
-
*/
|
|
22
|
-
export function isFunction(v) {
|
|
23
|
-
return typeof v === 'function';
|
|
24
|
-
}
|
|
25
|
-
export function isBoolean(v) {
|
|
26
|
-
return typeof v === 'boolean';
|
|
27
|
-
}
|
|
28
|
-
export function isCanLoad(guard) {
|
|
29
|
-
return guard && isFunction(guard.canLoad);
|
|
30
|
-
}
|
|
31
|
-
export function isCanActivate(guard) {
|
|
32
|
-
return guard && isFunction(guard.canActivate);
|
|
33
|
-
}
|
|
34
|
-
export function isCanActivateChild(guard) {
|
|
35
|
-
return guard && isFunction(guard.canActivateChild);
|
|
36
|
-
}
|
|
37
|
-
export function isCanDeactivate(guard) {
|
|
38
|
-
return guard && isFunction(guard.canDeactivate);
|
|
39
|
-
}
|
|
40
|
-
export function isCanMatch(guard) {
|
|
41
|
-
return guard && isFunction(guard.canMatch);
|
|
42
|
-
}
|
|
43
|
-
export function isEmptyError(e) {
|
|
44
|
-
return e instanceof EmptyError || e?.name === 'EmptyError';
|
|
45
|
-
}
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZV9ndWFyZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yb3V0ZXIvc3JjL3V0aWxzL3R5cGVfZ3VhcmRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFVaEM7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBSSxDQUFNO0lBQ2xDLE9BQU8sT0FBTyxDQUFDLEtBQUssVUFBVSxDQUFDO0FBQ2pDLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLENBQU07SUFDOUIsT0FBTyxPQUFPLENBQUMsS0FBSyxTQUFTLENBQUM7QUFDaEMsQ0FBQztBQUVELE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBVTtJQUNsQyxPQUFPLEtBQUssSUFBSSxVQUFVLENBQVksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLEtBQVU7SUFDdEMsT0FBTyxLQUFLLElBQUksVUFBVSxDQUFnQixLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUFVO0lBQzNDLE9BQU8sS0FBSyxJQUFJLFVBQVUsQ0FBcUIsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDekUsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlLENBQUksS0FBVTtJQUMzQyxPQUFPLEtBQUssSUFBSSxVQUFVLENBQXFCLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBQ0QsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFVO0lBQ25DLE9BQU8sS0FBSyxJQUFJLFVBQVUsQ0FBYSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDekQsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsQ0FBUTtJQUNuQyxPQUFPLENBQUMsWUFBWSxVQUFVLElBQUksQ0FBQyxFQUFFLElBQUksS0FBSyxZQUFZLENBQUM7QUFDN0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0VtcHR5RXJyb3J9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge0NhbkFjdGl2YXRlQ2hpbGRGbiwgQ2FuQWN0aXZhdGVGbiwgQ2FuRGVhY3RpdmF0ZUZuLCBDYW5Mb2FkRm4sIENhbk1hdGNoRm59IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuICBOQVZJR0FUSU9OX0NBTkNFTElOR19FUlJPUixcbiAgTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yLFxuICBSZWRpcmVjdGluZ05hdmlnYXRpb25DYW5jZWxpbmdFcnJvcixcbn0gZnJvbSAnLi4vbmF2aWdhdGlvbl9jYW5jZWxpbmdfZXJyb3InO1xuaW1wb3J0IHtpc1VybFRyZWV9IGZyb20gJy4uL3VybF90cmVlJztcblxuLyoqXG4gKiBTaW1wbGUgZnVuY3Rpb24gY2hlY2ssIGJ1dCBnZW5lcmljIHNvIHR5cGUgaW5mZXJlbmNlIHdpbGwgZmxvdy4gRXhhbXBsZTpcbiAqXG4gKiBmdW5jdGlvbiBwcm9kdWN0KGE6IG51bWJlciwgYjogbnVtYmVyKSB7XG4gKiAgIHJldHVybiBhICogYjtcbiAqIH1cbiAqXG4gKiBpZiAoaXNGdW5jdGlvbjxwcm9kdWN0PihmbikpIHtcbiAqICAgcmV0dXJuIGZuKDEsIDIpO1xuICogfSBlbHNlIHtcbiAqICAgdGhyb3cgXCJNdXN0IHByb3ZpZGUgdGhlIGBwcm9kdWN0YCBmdW5jdGlvblwiO1xuICogfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbjxUPih2OiBhbnkpOiB2IGlzIFQge1xuICByZXR1cm4gdHlwZW9mIHYgPT09ICdmdW5jdGlvbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Jvb2xlYW4odjogYW55KTogdiBpcyBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSAnYm9vbGVhbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NhbkxvYWQoZ3VhcmQ6IGFueSk6IGd1YXJkIGlzIHtjYW5Mb2FkOiBDYW5Mb2FkRm59IHtcbiAgcmV0dXJuIGd1YXJkICYmIGlzRnVuY3Rpb248Q2FuTG9hZEZuPihndWFyZC5jYW5Mb2FkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FuQWN0aXZhdGUoZ3VhcmQ6IGFueSk6IGd1YXJkIGlzIHtjYW5BY3RpdmF0ZTogQ2FuQWN0aXZhdGVGbn0ge1xuICByZXR1cm4gZ3VhcmQgJiYgaXNGdW5jdGlvbjxDYW5BY3RpdmF0ZUZuPihndWFyZC5jYW5BY3RpdmF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NhbkFjdGl2YXRlQ2hpbGQoZ3VhcmQ6IGFueSk6IGd1YXJkIGlzIHtjYW5BY3RpdmF0ZUNoaWxkOiBDYW5BY3RpdmF0ZUNoaWxkRm59IHtcbiAgcmV0dXJuIGd1YXJkICYmIGlzRnVuY3Rpb248Q2FuQWN0aXZhdGVDaGlsZEZuPihndWFyZC5jYW5BY3RpdmF0ZUNoaWxkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FuRGVhY3RpdmF0ZTxUPihndWFyZDogYW55KTogZ3VhcmQgaXMge2NhbkRlYWN0aXZhdGU6IENhbkRlYWN0aXZhdGVGbjxUPn0ge1xuICByZXR1cm4gZ3VhcmQgJiYgaXNGdW5jdGlvbjxDYW5EZWFjdGl2YXRlRm48VD4+KGd1YXJkLmNhbkRlYWN0aXZhdGUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FuTWF0Y2goZ3VhcmQ6IGFueSk6IGd1YXJkIGlzIHtjYW5NYXRjaDogQ2FuTWF0Y2hGbn0ge1xuICByZXR1cm4gZ3VhcmQgJiYgaXNGdW5jdGlvbjxDYW5NYXRjaEZuPihndWFyZC5jYW5NYXRjaCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5RXJyb3IoZTogRXJyb3IpOiBlIGlzIEVtcHR5RXJyb3Ige1xuICByZXR1cm4gZSBpbnN0YW5jZW9mIEVtcHR5RXJyb3IgfHwgZT8ubmFtZSA9PT0gJ0VtcHR5RXJyb3InO1xufVxuIl19
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
/// <reference types="dom-view-transitions" />
|
|
9
|
-
import { DOCUMENT } from '@angular/common';
|
|
10
|
-
import { afterNextRender, InjectionToken, NgZone, runInInjectionContext, } from '@angular/core';
|
|
11
|
-
export const CREATE_VIEW_TRANSITION = new InjectionToken(ngDevMode ? 'view transition helper' : '');
|
|
12
|
-
export const VIEW_TRANSITION_OPTIONS = new InjectionToken(ngDevMode ? 'view transition options' : '');
|
|
13
|
-
/**
|
|
14
|
-
* A helper function for using browser view transitions. This function skips the call to
|
|
15
|
-
* `startViewTransition` if the browser does not support it.
|
|
16
|
-
*
|
|
17
|
-
* @returns A Promise that resolves when the view transition callback begins.
|
|
18
|
-
*/
|
|
19
|
-
export function createViewTransition(injector, from, to) {
|
|
20
|
-
const transitionOptions = injector.get(VIEW_TRANSITION_OPTIONS);
|
|
21
|
-
const document = injector.get(DOCUMENT);
|
|
22
|
-
// Create promises outside the Angular zone to avoid causing extra change detections
|
|
23
|
-
return injector.get(NgZone).runOutsideAngular(() => {
|
|
24
|
-
if (!document.startViewTransition || transitionOptions.skipNextTransition) {
|
|
25
|
-
transitionOptions.skipNextTransition = false;
|
|
26
|
-
// The timing of `startViewTransition` is closer to a macrotask. It won't be called
|
|
27
|
-
// until the current event loop exits so we use a promise resolved in a timeout instead
|
|
28
|
-
// of Promise.resolve().
|
|
29
|
-
return new Promise((resolve) => setTimeout(resolve));
|
|
30
|
-
}
|
|
31
|
-
let resolveViewTransitionStarted;
|
|
32
|
-
const viewTransitionStarted = new Promise((resolve) => {
|
|
33
|
-
resolveViewTransitionStarted = resolve;
|
|
34
|
-
});
|
|
35
|
-
const transition = document.startViewTransition(() => {
|
|
36
|
-
resolveViewTransitionStarted();
|
|
37
|
-
// We don't actually update dom within the transition callback. The resolving of the above
|
|
38
|
-
// promise unblocks the Router navigation, which synchronously activates and deactivates
|
|
39
|
-
// routes (the DOM update). This view transition waits for the next change detection to
|
|
40
|
-
// complete (below), which includes the update phase of the routed components.
|
|
41
|
-
return createRenderPromise(injector);
|
|
42
|
-
});
|
|
43
|
-
const { onViewTransitionCreated } = transitionOptions;
|
|
44
|
-
if (onViewTransitionCreated) {
|
|
45
|
-
runInInjectionContext(injector, () => onViewTransitionCreated({ transition, from, to }));
|
|
46
|
-
}
|
|
47
|
-
return viewTransitionStarted;
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Creates a promise that resolves after next render.
|
|
52
|
-
*/
|
|
53
|
-
function createRenderPromise(injector) {
|
|
54
|
-
return new Promise((resolve) => {
|
|
55
|
-
// Wait for the microtask queue to empty after the next render happens (by waiting a macrotask).
|
|
56
|
-
// This ensures any follow-up renders in the microtask queue are completed before the
|
|
57
|
-
// view transition starts animating.
|
|
58
|
-
afterNextRender({ read: () => setTimeout(resolve) }, { injector });
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld190cmFuc2l0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcm91dGVyL3NyYy91dGlscy92aWV3X3RyYW5zaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsOENBQThDO0FBRTlDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQ0wsZUFBZSxFQUNmLGNBQWMsRUFFZCxNQUFNLEVBQ04scUJBQXFCLEdBQ3RCLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLElBQUksY0FBYyxDQUN0RCxTQUFTLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQzFDLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLGNBQWMsQ0FFdkQsU0FBUyxDQUFDLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFtRTlDOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxRQUFrQixFQUNsQixJQUE0QixFQUM1QixFQUEwQjtJQUUxQixNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUNoRSxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLG9GQUFvRjtJQUNwRixPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1FBQ2pELElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLElBQUksaUJBQWlCLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMxRSxpQkFBaUIsQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7WUFDN0MsbUZBQW1GO1lBQ25GLHVGQUF1RjtZQUN2Rix3QkFBd0I7WUFDeEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVELElBQUksNEJBQXdDLENBQUM7UUFDN0MsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzFELDRCQUE0QixHQUFHLE9BQU8sQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUU7WUFDbkQsNEJBQTRCLEVBQUUsQ0FBQztZQUMvQiwwRkFBMEY7WUFDMUYsd0ZBQXdGO1lBQ3hGLHVGQUF1RjtZQUN2Riw4RUFBOEU7WUFDOUUsT0FBTyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sRUFBQyx1QkFBdUIsRUFBQyxHQUFHLGlCQUFpQixDQUFDO1FBQ3BELElBQUksdUJBQXVCLEVBQUUsQ0FBQztZQUM1QixxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsdUJBQXVCLENBQUMsRUFBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBQyxDQUFDLENBQUMsQ0FBQztRQUN6RixDQUFDO1FBQ0QsT0FBTyxxQkFBcUIsQ0FBQztJQUMvQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsbUJBQW1CLENBQUMsUUFBa0I7SUFDN0MsT0FBTyxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQ25DLGdHQUFnRztRQUNoRyxxRkFBcUY7UUFDckYsb0NBQW9DO1FBQ3BDLGVBQWUsQ0FBQyxFQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUMsRUFBRSxFQUFDLFFBQVEsRUFBQyxDQUFDLENBQUM7SUFDakUsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiZG9tLXZpZXctdHJhbnNpdGlvbnNcIiAvPlxuXG5pbXBvcnQge0RPQ1VNRU5UfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgYWZ0ZXJOZXh0UmVuZGVyLFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5qZWN0b3IsXG4gIE5nWm9uZSxcbiAgcnVuSW5JbmplY3Rpb25Db250ZXh0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90fSBmcm9tICcuLi9yb3V0ZXJfc3RhdGUnO1xuXG5leHBvcnQgY29uc3QgQ1JFQVRFX1ZJRVdfVFJBTlNJVElPTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjx0eXBlb2YgY3JlYXRlVmlld1RyYW5zaXRpb24+KFxuICBuZ0Rldk1vZGUgPyAndmlldyB0cmFuc2l0aW9uIGhlbHBlcicgOiAnJyxcbik7XG5leHBvcnQgY29uc3QgVklFV19UUkFOU0lUSU9OX09QVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48XG4gIFZpZXdUcmFuc2l0aW9uc0ZlYXR1cmVPcHRpb25zICYge3NraXBOZXh0VHJhbnNpdGlvbjogYm9vbGVhbn1cbj4obmdEZXZNb2RlID8gJ3ZpZXcgdHJhbnNpdGlvbiBvcHRpb25zJyA6ICcnKTtcblxuLyoqXG4gKiBPcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgVmlldyBUcmFuc2l0aW9ucyBpbnRlZ3JhdGlvbiBpbiB0aGUgUm91dGVyLlxuICpcbiAqIEBleHBlcmltZW50YWxcbiAqIEBwdWJsaWNBcGlcbiAqIEBzZWUgd2l0aFZpZXdUcmFuc2l0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFZpZXdUcmFuc2l0aW9uc0ZlYXR1cmVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNraXBzIHRoZSB2ZXJ5IGZpcnN0IGNhbGwgdG8gYHN0YXJ0Vmlld1RyYW5zaXRpb25gLiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGRpc2FibGluZyB0aGVcbiAgICogYW5pbWF0aW9uIGR1cmluZyB0aGUgYXBwbGljYXRpb24ncyBpbml0aWFsIGxvYWRpbmcgcGhhc2UuXG4gICAqL1xuICBza2lwSW5pdGlhbFRyYW5zaXRpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRvIHJ1biBhZnRlciB0aGUgYFZpZXdUcmFuc2l0aW9uYCBpcyBjcmVhdGVkLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHJ1biBpbiBhbiBpbmplY3Rpb24gY29udGV4dCBhbmQgY2FuIHVzZSBgaW5qZWN0YC5cbiAgICovXG4gIG9uVmlld1RyYW5zaXRpb25DcmVhdGVkPzogKHRyYW5zaXRpb25JbmZvOiBWaWV3VHJhbnNpdGlvbkluZm8pID0+IHZvaWQ7XG59XG5cbi8qKlxuICogVGhlIGluZm9ybWF0aW9uIHBhc3NlZCB0byB0aGUgYG9uVmlld1RyYW5zaXRpb25DcmVhdGVkYCBmdW5jdGlvbiBwcm92aWRlZCBpbiB0aGVcbiAqIGB3aXRoVmlld1RyYW5zaXRpb25zYCBmZWF0dXJlIG9wdGlvbnMuXG4gKlxuICogQHB1YmxpY0FwaVxuICogQGV4cGVyaW1lbnRhbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZpZXdUcmFuc2l0aW9uSW5mbyB7XG4gIC8vIFRPRE8oYXRzY290dCk6IFRoaXMgdHlwZSBjYW4vc2hvdWxkIGJlIHRoZSBidWlsdC1pbiBgVmlld1RyYW5zaXRpb25gIHR5cGVcbiAgLy8gZnJvbSBAdHlwZXMvZG9tLXZpZXctdHJhbnNpdGlvbnMgYnV0IGV4cG9ydGluZyB0aGF0IHR5cGUgZnJvbSB0aGUgcHVibGljIEFQSSBpcyBjdXJyZW50bHkgbm90XG4gIC8vIHN1cHBvcnRlZCBieSB0b29saW5nLlxuICAvKipcbiAgICogVGhlIGBWaWV3VHJhbnNpdGlvbmAgcmV0dXJuZWQgYnkgdGhlIGNhbGwgdG8gYHN0YXJ0Vmlld1RyYW5zaXRpb25gLlxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9WaWV3VHJhbnNpdGlvblxuICAgKi9cbiAgdHJhbnNpdGlvbjoge1xuICAgIC8qKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1ZpZXdUcmFuc2l0aW9uL2ZpbmlzaGVkXG4gICAgICovXG4gICAgZmluaXNoZWQ6IFByb21pc2U8dm9pZD47XG4gICAgLyoqXG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVmlld1RyYW5zaXRpb24vcmVhZHlcbiAgICAgKi9cbiAgICByZWFkeTogUHJvbWlzZTx2b2lkPjtcbiAgICAvKipcbiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9WaWV3VHJhbnNpdGlvbi91cGRhdGVDYWxsYmFja0RvbmVcbiAgICAgKi9cbiAgICB1cGRhdGVDYWxsYmFja0RvbmU6IFByb21pc2U8dm9pZD47XG4gICAgLyoqXG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVmlld1RyYW5zaXRpb24vc2tpcFRyYW5zaXRpb25cbiAgICAgKi9cbiAgICBza2lwVHJhbnNpdGlvbigpOiB2b2lkO1xuICB9O1xuICAvKipcbiAgICogVGhlIGBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90YCB0aGF0IHRoZSBuYXZpZ2F0aW9uIGlzIHRyYW5zaXRpb25pbmcgZnJvbS5cbiAgICovXG4gIGZyb206IEFjdGl2YXRlZFJvdXRlU25hcHNob3Q7XG4gIC8qKlxuICAgKiBUaGUgYEFjdGl2YXRlZFJvdXRlU25hcHNob3RgIHRoYXQgdGhlIG5hdmlnYXRpb24gaXMgdHJhbnNpdGlvbmluZyB0by5cbiAgICovXG4gIHRvOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90O1xufVxuXG4vKipcbiAqIEEgaGVscGVyIGZ1bmN0aW9uIGZvciB1c2luZyBicm93c2VyIHZpZXcgdHJhbnNpdGlvbnMuIFRoaXMgZnVuY3Rpb24gc2tpcHMgdGhlIGNhbGwgdG9cbiAqIGBzdGFydFZpZXdUcmFuc2l0aW9uYCBpZiB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IGl0LlxuICpcbiAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHZpZXcgdHJhbnNpdGlvbiBjYWxsYmFjayBiZWdpbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVWaWV3VHJhbnNpdGlvbihcbiAgaW5qZWN0b3I6IEluamVjdG9yLFxuICBmcm9tOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICB0bzogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB0cmFuc2l0aW9uT3B0aW9ucyA9IGluamVjdG9yLmdldChWSUVXX1RSQU5TSVRJT05fT1BUSU9OUyk7XG4gIGNvbnN0IGRvY3VtZW50ID0gaW5qZWN0b3IuZ2V0KERPQ1VNRU5UKTtcbiAgLy8gQ3JlYXRlIHByb21pc2VzIG91dHNpZGUgdGhlIEFuZ3VsYXIgem9uZSB0byBhdm9pZCBjYXVzaW5nIGV4dHJhIGNoYW5nZSBkZXRlY3Rpb25zXG4gIHJldHVybiBpbmplY3Rvci5nZXQoTmdab25lKS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgaWYgKCFkb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uIHx8IHRyYW5zaXRpb25PcHRpb25zLnNraXBOZXh0VHJhbnNpdGlvbikge1xuICAgICAgdHJhbnNpdGlvbk9wdGlvbnMuc2tpcE5leHRUcmFuc2l0aW9uID0gZmFsc2U7XG4gICAgICAvLyBUaGUgdGltaW5nIG9mIGBzdGFydFZpZXdUcmFuc2l0aW9uYCBpcyBjbG9zZXIgdG8gYSBtYWNyb3Rhc2suIEl0IHdvbid0IGJlIGNhbGxlZFxuICAgICAgLy8gdW50aWwgdGhlIGN1cnJlbnQgZXZlbnQgbG9vcCBleGl0cyBzbyB3ZSB1c2UgYSBwcm9taXNlIHJlc29sdmVkIGluIGEgdGltZW91dCBpbnN0ZWFkXG4gICAgICAvLyBvZiBQcm9taXNlLnJlc29sdmUoKS5cbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlKSk7XG4gICAgfVxuXG4gICAgbGV0IHJlc29sdmVWaWV3VHJhbnNpdGlvblN0YXJ0ZWQ6ICgpID0+IHZvaWQ7XG4gICAgY29uc3Qgdmlld1RyYW5zaXRpb25TdGFydGVkID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgIHJlc29sdmVWaWV3VHJhbnNpdGlvblN0YXJ0ZWQgPSByZXNvbHZlO1xuICAgIH0pO1xuICAgIGNvbnN0IHRyYW5zaXRpb24gPSBkb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uKCgpID0+IHtcbiAgICAgIHJlc29sdmVWaWV3VHJhbnNpdGlvblN0YXJ0ZWQoKTtcbiAgICAgIC8vIFdlIGRvbid0IGFjdHVhbGx5IHVwZGF0ZSBkb20gd2l0aGluIHRoZSB0cmFuc2l0aW9uIGNhbGxiYWNrLiBUaGUgcmVzb2x2aW5nIG9mIHRoZSBhYm92ZVxuICAgICAgLy8gcHJvbWlzZSB1bmJsb2NrcyB0aGUgUm91dGVyIG5hdmlnYXRpb24sIHdoaWNoIHN5bmNocm9ub3VzbHkgYWN0aXZhdGVzIGFuZCBkZWFjdGl2YXRlc1xuICAgICAgLy8gcm91dGVzICh0aGUgRE9NIHVwZGF0ZSkuIFRoaXMgdmlldyB0cmFuc2l0aW9uIHdhaXRzIGZvciB0aGUgbmV4dCBjaGFuZ2UgZGV0ZWN0aW9uIHRvXG4gICAgICAvLyBjb21wbGV0ZSAoYmVsb3cpLCB3aGljaCBpbmNsdWRlcyB0aGUgdXBkYXRlIHBoYXNlIG9mIHRoZSByb3V0ZWQgY29tcG9uZW50cy5cbiAgICAgIHJldHVybiBjcmVhdGVSZW5kZXJQcm9taXNlKGluamVjdG9yKTtcbiAgICB9KTtcbiAgICBjb25zdCB7b25WaWV3VHJhbnNpdGlvbkNyZWF0ZWR9ID0gdHJhbnNpdGlvbk9wdGlvbnM7XG4gICAgaWYgKG9uVmlld1RyYW5zaXRpb25DcmVhdGVkKSB7XG4gICAgICBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IG9uVmlld1RyYW5zaXRpb25DcmVhdGVkKHt0cmFuc2l0aW9uLCBmcm9tLCB0b30pKTtcbiAgICB9XG4gICAgcmV0dXJuIHZpZXdUcmFuc2l0aW9uU3RhcnRlZDtcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciBuZXh0IHJlbmRlci5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUmVuZGVyUHJvbWlzZShpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgLy8gV2FpdCBmb3IgdGhlIG1pY3JvdGFzayBxdWV1ZSB0byBlbXB0eSBhZnRlciB0aGUgbmV4dCByZW5kZXIgaGFwcGVucyAoYnkgd2FpdGluZyBhIG1hY3JvdGFzaykuXG4gICAgLy8gVGhpcyBlbnN1cmVzIGFueSBmb2xsb3ctdXAgcmVuZGVycyBpbiB0aGUgbWljcm90YXNrIHF1ZXVlIGFyZSBjb21wbGV0ZWQgYmVmb3JlIHRoZVxuICAgIC8vIHZpZXcgdHJhbnNpdGlvbiBzdGFydHMgYW5pbWF0aW5nLlxuICAgIGFmdGVyTmV4dFJlbmRlcih7cmVhZDogKCkgPT4gc2V0VGltZW91dChyZXNvbHZlKX0sIHtpbmplY3Rvcn0pO1xuICB9KTtcbn1cbiJdfQ==
|
package/esm2022/src/version.mjs
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
/**
|
|
9
|
-
* @module
|
|
10
|
-
* @description
|
|
11
|
-
* Entry point for all public APIs of the router package.
|
|
12
|
-
*/
|
|
13
|
-
import { Version } from '@angular/core';
|
|
14
|
-
/**
|
|
15
|
-
* @publicApi
|
|
16
|
-
*/
|
|
17
|
-
export const VERSION = new Version('19.0.0-next.1');
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci9zcmMvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSDs7OztHQUlHO0FBRUgsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV0Qzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8qKlxuICogQG1vZHVsZVxuICogQGRlc2NyaXB0aW9uXG4gKiBFbnRyeSBwb2ludCBmb3IgYWxsIHB1YmxpYyBBUElzIG9mIHRoZSByb3V0ZXIgcGFja2FnZS5cbiAqL1xuXG5pbXBvcnQge1ZlcnNpb259IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEBwdWJsaWNBcGlcbiAqL1xuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBuZXcgVmVyc2lvbignMC4wLjAtUExBQ0VIT0xERVInKTtcbiJdfQ==
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
// This file is not used to build this module. It is only used during editing
|
|
9
|
-
// by the TypeScript language service and during build for verification. `ngc`
|
|
10
|
-
// replaces this file with production index.ts when it rewrites private symbol
|
|
11
|
-
// names.
|
|
12
|
-
export * from './public_api';
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yb3V0ZXIvdGVzdGluZy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCw2RUFBNkU7QUFDN0UsOEVBQThFO0FBQzlFLDhFQUE4RTtBQUM5RSxTQUFTO0FBRVQsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLy8gVGhpcyBmaWxlIGlzIG5vdCB1c2VkIHRvIGJ1aWxkIHRoaXMgbW9kdWxlLiBJdCBpcyBvbmx5IHVzZWQgZHVyaW5nIGVkaXRpbmdcbi8vIGJ5IHRoZSBUeXBlU2NyaXB0IGxhbmd1YWdlIHNlcnZpY2UgYW5kIGR1cmluZyBidWlsZCBmb3IgdmVyaWZpY2F0aW9uLiBgbmdjYFxuLy8gcmVwbGFjZXMgdGhpcyBmaWxlIHdpdGggcHJvZHVjdGlvbiBpbmRleC50cyB3aGVuIGl0IHJld3JpdGVzIHByaXZhdGUgc3ltYm9sXG4vLyBuYW1lcy5cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWNfYXBpJztcbiJdfQ==
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
/**
|
|
9
|
-
* @module
|
|
10
|
-
* @description
|
|
11
|
-
* Entry point for all public APIs of this package.
|
|
12
|
-
*/
|
|
13
|
-
export * from './src/testing';
|
|
14
|
-
// This file only reexports content of the `src` folder. Keep it that way.
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci90ZXN0aW5nL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUg7Ozs7R0FJRztBQUNILGNBQWMsZUFBZSxDQUFDO0FBRTlCLDBFQUEwRSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vKipcbiAqIEBtb2R1bGVcbiAqIEBkZXNjcmlwdGlvblxuICogRW50cnkgcG9pbnQgZm9yIGFsbCBwdWJsaWMgQVBJcyBvZiB0aGlzIHBhY2thZ2UuXG4gKi9cbmV4cG9ydCAqIGZyb20gJy4vc3JjL3Rlc3RpbmcnO1xuXG4vLyBUaGlzIGZpbGUgb25seSByZWV4cG9ydHMgY29udGVudCBvZiB0aGUgYHNyY2AgZm9sZGVyLiBLZWVwIGl0IHRoYXQgd2F5LlxuIl19
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import { Component, Injectable, ViewChild, signal, } from '@angular/core';
|
|
9
|
-
import { TestBed } from '@angular/core/testing';
|
|
10
|
-
import { Router, RouterOutlet, ɵafterNextNavigation as afterNextNavigation } from '@angular/router';
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
export class RootFixtureService {
|
|
13
|
-
createHarness() {
|
|
14
|
-
if (this.harness) {
|
|
15
|
-
throw new Error('Only one harness should be created per test.');
|
|
16
|
-
}
|
|
17
|
-
this.harness = new RouterTestingHarness(this.getRootFixture());
|
|
18
|
-
return this.harness;
|
|
19
|
-
}
|
|
20
|
-
getRootFixture() {
|
|
21
|
-
if (this.fixture !== undefined) {
|
|
22
|
-
return this.fixture;
|
|
23
|
-
}
|
|
24
|
-
this.fixture = TestBed.createComponent(RootCmp);
|
|
25
|
-
this.fixture.detectChanges();
|
|
26
|
-
return this.fixture;
|
|
27
|
-
}
|
|
28
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.1", ngImport: i0, type: RootFixtureService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
29
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.0-next.1", ngImport: i0, type: RootFixtureService, providedIn: 'root' }); }
|
|
30
|
-
}
|
|
31
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.1", ngImport: i0, type: RootFixtureService, decorators: [{
|
|
32
|
-
type: Injectable,
|
|
33
|
-
args: [{ providedIn: 'root' }]
|
|
34
|
-
}] });
|
|
35
|
-
export class RootCmp {
|
|
36
|
-
constructor() {
|
|
37
|
-
this.routerOutletData = signal(undefined);
|
|
38
|
-
}
|
|
39
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.1", ngImport: i0, type: RootCmp, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
40
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.0-next.1", type: RootCmp, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "outlet", first: true, predicate: RouterOutlet, descendants: true }], ngImport: i0, template: '<router-outlet [routerOutletData]="routerOutletData()"></router-outlet>', isInline: true, dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] }); }
|
|
41
|
-
}
|
|
42
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.1", ngImport: i0, type: RootCmp, decorators: [{
|
|
43
|
-
type: Component,
|
|
44
|
-
args: [{
|
|
45
|
-
standalone: true,
|
|
46
|
-
template: '<router-outlet [routerOutletData]="routerOutletData()"></router-outlet>',
|
|
47
|
-
imports: [RouterOutlet],
|
|
48
|
-
}]
|
|
49
|
-
}], propDecorators: { outlet: [{
|
|
50
|
-
type: ViewChild,
|
|
51
|
-
args: [RouterOutlet]
|
|
52
|
-
}] } });
|
|
53
|
-
/**
|
|
54
|
-
* A testing harness for the `Router` to reduce the boilerplate needed to test routes and routed
|
|
55
|
-
* components.
|
|
56
|
-
*
|
|
57
|
-
* @publicApi
|
|
58
|
-
*/
|
|
59
|
-
export class RouterTestingHarness {
|
|
60
|
-
/**
|
|
61
|
-
* Creates a `RouterTestingHarness` instance.
|
|
62
|
-
*
|
|
63
|
-
* The `RouterTestingHarness` also creates its own root component with a `RouterOutlet` for the
|
|
64
|
-
* purposes of rendering route components.
|
|
65
|
-
*
|
|
66
|
-
* Throws an error if an instance has already been created.
|
|
67
|
-
* Use of this harness also requires `destroyAfterEach: true` in the `ModuleTeardownOptions`
|
|
68
|
-
*
|
|
69
|
-
* @param initialUrl The target of navigation to trigger before returning the harness.
|
|
70
|
-
*/
|
|
71
|
-
static async create(initialUrl) {
|
|
72
|
-
const harness = TestBed.inject(RootFixtureService).createHarness();
|
|
73
|
-
if (initialUrl !== undefined) {
|
|
74
|
-
await harness.navigateByUrl(initialUrl);
|
|
75
|
-
}
|
|
76
|
-
return harness;
|
|
77
|
-
}
|
|
78
|
-
/** @internal */
|
|
79
|
-
constructor(fixture) {
|
|
80
|
-
this.fixture = fixture;
|
|
81
|
-
}
|
|
82
|
-
/** Instructs the root fixture to run change detection. */
|
|
83
|
-
detectChanges() {
|
|
84
|
-
this.fixture.detectChanges();
|
|
85
|
-
}
|
|
86
|
-
/** The `DebugElement` of the `RouterOutlet` component. `null` if the outlet is not activated. */
|
|
87
|
-
get routeDebugElement() {
|
|
88
|
-
const outlet = this.fixture.componentInstance.outlet;
|
|
89
|
-
if (!outlet || !outlet.isActivated) {
|
|
90
|
-
return null;
|
|
91
|
-
}
|
|
92
|
-
return this.fixture.debugElement.query((v) => v.componentInstance === outlet.component);
|
|
93
|
-
}
|
|
94
|
-
/** The native element of the `RouterOutlet` component. `null` if the outlet is not activated. */
|
|
95
|
-
get routeNativeElement() {
|
|
96
|
-
return this.routeDebugElement?.nativeElement ?? null;
|
|
97
|
-
}
|
|
98
|
-
async navigateByUrl(url, requiredRoutedComponentType) {
|
|
99
|
-
const router = TestBed.inject(Router);
|
|
100
|
-
let resolveFn;
|
|
101
|
-
const redirectTrackingPromise = new Promise((resolve) => {
|
|
102
|
-
resolveFn = resolve;
|
|
103
|
-
});
|
|
104
|
-
afterNextNavigation(TestBed.inject(Router), resolveFn);
|
|
105
|
-
await router.navigateByUrl(url);
|
|
106
|
-
await redirectTrackingPromise;
|
|
107
|
-
this.fixture.detectChanges();
|
|
108
|
-
const outlet = this.fixture.componentInstance.outlet;
|
|
109
|
-
// The outlet might not be activated if the user is testing a navigation for a guard that
|
|
110
|
-
// rejects
|
|
111
|
-
if (outlet && outlet.isActivated && outlet.activatedRoute.component) {
|
|
112
|
-
const activatedComponent = outlet.component;
|
|
113
|
-
if (requiredRoutedComponentType !== undefined &&
|
|
114
|
-
!(activatedComponent instanceof requiredRoutedComponentType)) {
|
|
115
|
-
throw new Error(`Unexpected routed component type. Expected ${requiredRoutedComponentType.name} but got ${activatedComponent.constructor.name}`);
|
|
116
|
-
}
|
|
117
|
-
return activatedComponent;
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
if (requiredRoutedComponentType !== undefined) {
|
|
121
|
-
throw new Error(`Unexpected routed component type. Expected ${requiredRoutedComponentType.name} but the navigation did not activate any component.`);
|
|
122
|
-
}
|
|
123
|
-
return null;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyX3Rlc3RpbmdfaGFybmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci90ZXN0aW5nL3NyYy9yb3V0ZXJfdGVzdGluZ19oYXJuZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFDTCxTQUFTLEVBRVQsVUFBVSxFQUVWLFNBQVMsRUFFVCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFtQixPQUFPLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxvQkFBb0IsSUFBSSxtQkFBbUIsRUFBQyxNQUFNLGlCQUFpQixDQUFDOztBQUdsRyxNQUFNLE9BQU8sa0JBQWtCO0lBSTdCLGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7UUFDbEUsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUMvRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQy9CLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUN0QixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7eUhBbkJVLGtCQUFrQjs2SEFBbEIsa0JBQWtCLGNBRE4sTUFBTTs7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QztZQUM1QyxJQUNFLDJCQUEyQixLQUFLLFNBQVM7Z0JBQ3pDLENBQUMsQ0FBQyxrQkFBa0IsWUFBWSwyQkFBMkIsQ0FBQyxFQUM1RCxDQUFDO2dCQUNELE1BQU0sSUFBSSxLQUFLLENBQ2IsOENBQThDLDJCQUEyQixDQUFDLElBQUksWUFBWSxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQ2hJLENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTyxrQkFBdUIsQ0FBQztRQUNqQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksMkJBQTJCLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzlDLE1BQU0sSUFBSSxLQUFLLENBQ2IsOENBQThDLDJCQUEyQixDQUFDLElBQUkscURBQXFELENBQ3BJLENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRGVidWdFbGVtZW50LFxuICBJbmplY3RhYmxlLFxuICBUeXBlLFxuICBWaWV3Q2hpbGQsXG4gIFdyaXRhYmxlU2lnbmFsLFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb21wb25lbnRGaXh0dXJlLCBUZXN0QmVkfSBmcm9tICdAYW5ndWxhci9jb3JlL3Rlc3RpbmcnO1xuaW1wb3J0IHtSb3V0ZXIsIFJvdXRlck91dGxldCwgybVhZnRlck5leHROYXZpZ2F0aW9uIGFzIGFmdGVyTmV4dE5hdmlnYXRpb259IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIFJvb3RGaXh0dXJlU2VydmljZSB7XG4gIHByaXZhdGUgZml4dHVyZT86IENvbXBvbmVudEZpeHR1cmU8Um9vdENtcD47XG4gIHByaXZhdGUgaGFybmVzcz86IFJvdXRlclRlc3RpbmdIYXJuZXNzO1xuXG4gIGNyZWF0ZUhhcm5lc3MoKTogUm91dGVyVGVzdGluZ0hhcm5lc3Mge1xuICAgIGlmICh0aGlzLmhhcm5lc3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25seSBvbmUgaGFybmVzcyBzaG91bGQgYmUgY3JlYXRlZCBwZXIgdGVzdC4nKTtcbiAgICB9XG4gICAgdGhpcy5oYXJuZXNzID0gbmV3IFJvdXRlclRlc3RpbmdIYXJuZXNzKHRoaXMuZ2V0Um9vdEZpeHR1cmUoKSk7XG4gICAgcmV0dXJuIHRoaXMuaGFybmVzcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Um9vdEZpeHR1cmUoKTogQ29tcG9uZW50Rml4dHVyZTxSb290Q21wPiB7XG4gICAgaWYgKHRoaXMuZml4dHVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5maXh0dXJlO1xuICAgIH1cbiAgICB0aGlzLmZpeHR1cmUgPSBUZXN0QmVkLmNyZWF0ZUNvbXBvbmVudChSb290Q21wKTtcbiAgICB0aGlzLmZpeHR1cmUuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHJldHVybiB0aGlzLmZpeHR1cmU7XG4gIH1cbn1cblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlOiAnPHJvdXRlci1vdXRsZXQgW3JvdXRlck91dGxldERhdGFdPVwicm91dGVyT3V0bGV0RGF0YSgpXCI+PC9yb3V0ZXItb3V0bGV0PicsXG4gIGltcG9ydHM6IFtSb3V0ZXJPdXRsZXRdLFxufSlcbmV4cG9ydCBjbGFzcyBSb290Q21wIHtcbiAgQFZpZXdDaGlsZChSb3V0ZXJPdXRsZXQpIG91dGxldD86IFJvdXRlck91dGxldDtcbiAgcmVhZG9ubHkgcm91dGVyT3V0bGV0RGF0YSA9IHNpZ25hbDx1bmtub3duPih1bmRlZmluZWQpO1xufVxuXG4vKipcbiAqIEEgdGVzdGluZyBoYXJuZXNzIGZvciB0aGUgYFJvdXRlcmAgdG8gcmVkdWNlIHRoZSBib2lsZXJwbGF0ZSBuZWVkZWQgdG8gdGVzdCByb3V0ZXMgYW5kIHJvdXRlZFxuICogY29tcG9uZW50cy5cbiAqXG4gKiBAcHVibGljQXBpXG4gKi9cbmV4cG9ydCBjbGFzcyBSb3V0ZXJUZXN0aW5nSGFybmVzcyB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgYFJvdXRlclRlc3RpbmdIYXJuZXNzYCBpbnN0YW5jZS5cbiAgICpcbiAgICogVGhlIGBSb3V0ZXJUZXN0aW5nSGFybmVzc2AgYWxzbyBjcmVhdGVzIGl0cyBvd24gcm9vdCBjb21wb25lbnQgd2l0aCBhIGBSb3V0ZXJPdXRsZXRgIGZvciB0aGVcbiAgICogcHVycG9zZXMgb2YgcmVuZGVyaW5nIHJvdXRlIGNvbXBvbmVudHMuXG4gICAqXG4gICAqIFRocm93cyBhbiBlcnJvciBpZiBhbiBpbnN0YW5jZSBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQuXG4gICAqIFVzZSBvZiB0aGlzIGhhcm5lc3MgYWxzbyByZXF1aXJlcyBgZGVzdHJveUFmdGVyRWFjaDogdHJ1ZWAgaW4gdGhlIGBNb2R1bGVUZWFyZG93bk9wdGlvbnNgXG4gICAqXG4gICAqIEBwYXJhbSBpbml0aWFsVXJsIFRoZSB0YXJnZXQgb2YgbmF2aWdhdGlvbiB0byB0cmlnZ2VyIGJlZm9yZSByZXR1cm5pbmcgdGhlIGhhcm5lc3MuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgY3JlYXRlKGluaXRpYWxVcmw/OiBzdHJpbmcpOiBQcm9taXNlPFJvdXRlclRlc3RpbmdIYXJuZXNzPiB7XG4gICAgY29uc3QgaGFybmVzcyA9IFRlc3RCZWQuaW5qZWN0KFJvb3RGaXh0dXJlU2VydmljZSkuY3JlYXRlSGFybmVzcygpO1xuICAgIGlmIChpbml0aWFsVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGF3YWl0IGhhcm5lc3MubmF2aWdhdGVCeVVybChpbml0aWFsVXJsKTtcbiAgICB9XG4gICAgcmV0dXJuIGhhcm5lc3M7XG4gIH1cblxuICAvKipcbiAgICogRml4dHVyZSBvZiB0aGUgcm9vdCBjb21wb25lbnQgb2YgdGhlIFJvdXRlclRlc3RpbmdIYXJuZXNzXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZml4dHVyZTogQ29tcG9uZW50Rml4dHVyZTx7cm91dGVyT3V0bGV0RGF0YTogV3JpdGFibGVTaWduYWw8dW5rbm93bj59PjtcblxuICAvKiogQGludGVybmFsICovXG4gIGNvbnN0cnVjdG9yKGZpeHR1cmU6IENvbXBvbmVudEZpeHR1cmU8e3JvdXRlck91dGxldERhdGE6IFdyaXRhYmxlU2lnbmFsPHVua25vd24+fT4pIHtcbiAgICB0aGlzLmZpeHR1cmUgPSBmaXh0dXJlO1xuICB9XG5cbiAgLyoqIEluc3RydWN0cyB0aGUgcm9vdCBmaXh0dXJlIHRvIHJ1biBjaGFuZ2UgZGV0ZWN0aW9uLiAqL1xuICBkZXRlY3RDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuZml4dHVyZS5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgLyoqIFRoZSBgRGVidWdFbGVtZW50YCBvZiB0aGUgYFJvdXRlck91dGxldGAgY29tcG9uZW50LiBgbnVsbGAgaWYgdGhlIG91dGxldCBpcyBub3QgYWN0aXZhdGVkLiAqL1xuICBnZXQgcm91dGVEZWJ1Z0VsZW1lbnQoKTogRGVidWdFbGVtZW50IHwgbnVsbCB7XG4gICAgY29uc3Qgb3V0bGV0ID0gKHRoaXMuZml4dHVyZS5jb21wb25lbnRJbnN0YW5jZSBhcyBSb290Q21wKS5vdXRsZXQ7XG4gICAgaWYgKCFvdXRsZXQgfHwgIW91dGxldC5pc0FjdGl2YXRlZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpeHR1cmUuZGVidWdFbGVtZW50LnF1ZXJ5KCh2KSA9PiB2LmNvbXBvbmVudEluc3RhbmNlID09PSBvdXRsZXQuY29tcG9uZW50KTtcbiAgfVxuICAvKiogVGhlIG5hdGl2ZSBlbGVtZW50IG9mIHRoZSBgUm91dGVyT3V0bGV0YCBjb21wb25lbnQuIGBudWxsYCBpZiB0aGUgb3V0bGV0IGlzIG5vdCBhY3RpdmF0ZWQuICovXG4gIGdldCByb3V0ZU5hdGl2ZUVsZW1lbnQoKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZURlYnVnRWxlbWVudD8ubmF0aXZlRWxlbWVudCA/PyBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgYFJvdXRlcmAgbmF2aWdhdGlvbiBhbmQgd2FpdHMgZm9yIGl0IHRvIGNvbXBsZXRlLlxuICAgKlxuICAgKiBUaGUgcm9vdCBjb21wb25lbnQgd2l0aCBhIGBSb3V0ZXJPdXRsZXRgIGNyZWF0ZWQgZm9yIHRoZSBoYXJuZXNzIGlzIHVzZWQgdG8gcmVuZGVyIGBSb3V0ZWBcbiAgICogY29tcG9uZW50cy4gVGhlIHJvb3QgY29tcG9uZW50IGlzIHJldXNlZCB3aXRoaW4gdGhlIHNhbWUgdGVzdCBpbiBzdWJzZXF1ZW50IGNhbGxzIHRvXG4gICAqIGBuYXZpZ2F0ZUZvclRlc3RgLlxuICAgKlxuICAgKiBXaGVuIHRlc3RpbmcgYFJvdXRlc2Agd2l0aCBhIGd1YXJkcyB0aGF0IHJlamVjdCB0aGUgbmF2aWdhdGlvbiwgdGhlIGBSb3V0ZXJPdXRsZXRgIG1pZ2h0IG5vdCBiZVxuICAgKiBhY3RpdmF0ZWQgYW5kIHRoZSBgYWN0aXZhdGVkQ29tcG9uZW50YCBtYXkgYmUgYG51bGxgLlxuICAgKlxuICAgKiB7QGV4YW1wbGUgcm91dGVyL3Rlc3RpbmcvdGVzdC9yb3V0ZXJfdGVzdGluZ19oYXJuZXNzX2V4YW1wbGVzLnNwZWMudHMgcmVnaW9uPSdHdWFyZCd9XG4gICAqXG4gICAqIEBwYXJhbSB1cmwgVGhlIHRhcmdldCBvZiB0aGUgbmF2aWdhdGlvbi4gUGFzc2VkIHRvIGBSb3V0ZXIubmF2aWdhdGVCeVVybGAuXG4gICAqIEByZXR1cm5zIFRoZSBhY3RpdmF0ZWQgY29tcG9uZW50IGluc3RhbmNlIG9mIHRoZSBgUm91dGVyT3V0bGV0YCBhZnRlciBuYXZpZ2F0aW9uIGNvbXBsZXRlc1xuICAgKiAgICAgKGBudWxsYCBpZiB0aGUgb3V0bGV0IGRvZXMgbm90IGdldCBhY3RpdmF0ZWQpLlxuICAgKi9cbiAgYXN5bmMgbmF2aWdhdGVCeVVybCh1cmw6IHN0cmluZyk6IFByb21pc2U8bnVsbCB8IHt9PjtcbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgcm91dGVyIG5hdmlnYXRpb24gYW5kIHdhaXRzIGZvciBpdCB0byBjb21wbGV0ZS5cbiAgICpcbiAgICogVGhlIHJvb3QgY29tcG9uZW50IHdpdGggYSBgUm91dGVyT3V0bGV0YCBjcmVhdGVkIGZvciB0aGUgaGFybmVzcyBpcyB1c2VkIHRvIHJlbmRlciBgUm91dGVgXG4gICAqIGNvbXBvbmVudHMuXG4gICAqXG4gICAqIHtAZXhhbXBsZSByb3V0ZXIvdGVzdGluZy90ZXN0L3JvdXRlcl90ZXN0aW5nX2hhcm5lc3NfZXhhbXBsZXMuc3BlYy50cyByZWdpb249J1JvdXRlZENvbXBvbmVudCd9XG4gICAqXG4gICAqIFRoZSByb290IGNvbXBvbmVudCBpcyByZXVzZWQgd2l0aGluIHRoZSBzYW1lIHRlc3QgaW4gc3Vic2VxdWVudCBjYWxscyB0byBgbmF2aWdhdGVCeVVybGAuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gYWxzbyBtYWtlcyBpdCBlYXNpZXIgdG8gdGVzdCBjb21wb25lbnRzIHRoYXQgZGVwZW5kIG9uIGBBY3RpdmF0ZWRSb3V0ZWAgZGF0YS5cbiAgICpcbiAgICoge0BleGFtcGxlIHJvdXRlci90ZXN0aW5nL3Rlc3Qvcm91dGVyX3Rlc3RpbmdfaGFybmVzc19leGFtcGxlcy5zcGVjLnRzIHJlZ2lvbj0nQWN0aXZhdGVkUm91dGUnfVxuICAgKlxuICAgKiBAcGFyYW0gdXJsIFRoZSB0YXJnZXQgb2YgdGhlIG5hdmlnYXRpb24uIFBhc3NlZCB0byBgUm91dGVyLm5hdmlnYXRlQnlVcmxgLlxuICAgKiBAcGFyYW0gcmVxdWlyZWRSb3V0ZWRDb21wb25lbnRUeXBlIEFmdGVyIG5hdmlnYXRpb24gY29tcGxldGVzLCB0aGUgcmVxdWlyZWQgdHlwZSBmb3IgdGhlXG4gICAqICAgICBhY3RpdmF0ZWQgY29tcG9uZW50IG9mIHRoZSBgUm91dGVyT3V0bGV0YC4gSWYgdGhlIG91dGxldCBpcyBub3QgYWN0aXZhdGVkIG9yIGEgZGlmZmVyZW50XG4gICAqICAgICBjb21wb25lbnQgaXMgYWN0aXZhdGVkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gICAqIEByZXR1cm5zIFRoZSBhY3RpdmF0ZWQgY29tcG9uZW50IGluc3RhbmNlIG9mIHRoZSBgUm91dGVyT3V0bGV0YCBhZnRlciBuYXZpZ2F0aW9uIGNvbXBsZXRlcy5cbiAgICovXG4gIGFzeW5jIG5hdmlnYXRlQnlVcmw8VD4odXJsOiBzdHJpbmcsIHJlcXVpcmVkUm91dGVkQ29tcG9uZW50VHlwZTogVHlwZTxUPik6IFByb21pc2U8VD47XG4gIGFzeW5jIG5hdmlnYXRlQnlVcmw8VD4odXJsOiBzdHJpbmcsIHJlcXVpcmVkUm91dGVkQ29tcG9uZW50VHlwZT86IFR5cGU8VD4pOiBQcm9taXNlPFQgfCBudWxsPiB7XG4gICAgY29uc3Qgcm91dGVyID0gVGVzdEJlZC5pbmplY3QoUm91dGVyKTtcbiAgICBsZXQgcmVzb2x2ZUZuITogKCkgPT4gdm9pZDtcbiAgICBjb25zdCByZWRpcmVjdFRyYWNraW5nUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICByZXNvbHZlRm4gPSByZXNvbHZlO1xuICAgIH0pO1xuICAgIGFmdGVyTmV4dE5hdmlnYXRpb24oVGVzdEJlZC5pbmplY3QoUm91dGVyKSwgcmVzb2x2ZUZuKTtcbiAgICBhd2FpdCByb3V0ZXIubmF2aWdhdGVCeVVybCh1cmwpO1xuICAgIGF3YWl0IHJlZGlyZWN0VHJhY2tpbmdQcm9taXNlO1xuICAgIHRoaXMuZml4dHVyZS5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgY29uc3Qgb3V0bGV0ID0gKHRoaXMuZml4dHVyZS5jb21wb25lbnRJbnN0YW5jZSBhcyBSb290Q21wKS5vdXRsZXQ7XG4gICAgLy8gVGhlIG91dGxldCBtaWdodCBub3QgYmUgYWN0aXZhdGVkIGlmIHRoZSB1c2VyIGlzIHRlc3RpbmcgYSBuYXZpZ2F0aW9uIGZvciBhIGd1YXJkIHRoYXRcbiAgICAvLyByZWplY3RzXG4gICAgaWYgKG91dGxldCAmJiBvdXRsZXQuaXNBY3RpdmF0ZWQgJiYgb3V0bGV0LmFjdGl2YXRlZFJvdXRlLmNvbXBvbmVudCkge1xuICAgICAgY29uc3QgYWN0aXZhdGVkQ29tcG9uZW50ID0gb3V0bGV0LmNvbXBvbmVudDtcbiAgICAgIGlmIChcbiAgICAgICAgcmVxdWlyZWRSb3V0ZWRDb21wb25lbnRUeXBlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgIShhY3RpdmF0ZWRDb21wb25lbnQgaW5zdGFuY2VvZiByZXF1aXJlZFJvdXRlZENvbXBvbmVudFR5cGUpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBVbmV4cGVjdGVkIHJvdXRlZCBjb21wb25lbnQgdHlwZS4gRXhwZWN0ZWQgJHtyZXF1aXJlZFJvdXRlZENvbXBvbmVudFR5cGUubmFtZX0gYnV0IGdvdCAke2FjdGl2YXRlZENvbXBvbmVudC5jb25zdHJ1Y3Rvci5uYW1lfWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWN0aXZhdGVkQ29tcG9uZW50IGFzIFQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChyZXF1aXJlZFJvdXRlZENvbXBvbmVudFR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFVuZXhwZWN0ZWQgcm91dGVkIGNvbXBvbmVudCB0eXBlLiBFeHBlY3RlZCAke3JlcXVpcmVkUm91dGVkQ29tcG9uZW50VHlwZS5uYW1lfSBidXQgdGhlIG5hdmlnYXRpb24gZGlkIG5vdCBhY3RpdmF0ZSBhbnkgY29tcG9uZW50LmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|