From 5bdc6ecec822cfeda63b9f943177d8b17d41cffe Mon Sep 17 00:00:00 2001 From: vsavkin Date: Fri, 27 May 2016 11:36:17 -0700 Subject: [PATCH] chore: adds the build dir to use with 'npm install' --- modules/@angular/router/build/README.md | 1 + .../@angular/router/build/es6/src/config.d.ts | 9 + .../@angular/router/build/es6/src/config.js | 1 + .../router/build/es6/src/create_url_tree.d.ts | 4 + .../router/build/es6/src/create_url_tree.js | 185 +++++++++++++++ .../build/es6/src/directives/router_link.d.ts | 13 + .../build/es6/src/directives/router_link.js | 65 +++++ .../es6/src/directives/router_outlet.d.ts | 11 + .../build/es6/src/directives/router_outlet.js | 39 +++ .../@angular/router/build/es6/src/index.d.ts | 7 + .../@angular/router/build/es6/src/index.js | 8 + .../router/build/es6/src/recognize.d.ts | 5 + .../router/build/es6/src/recognize.js | 166 +++++++++++++ .../@angular/router/build/es6/src/router.d.ts | 40 ++++ .../@angular/router/build/es6/src/router.js | 138 +++++++++++ .../build/es6/src/router_outlet_map.d.ts | 7 + .../router/build/es6/src/router_outlet_map.js | 7 + .../router/build/es6/src/router_state.d.ts | 18 ++ .../router/build/es6/src/router_state.js | 28 +++ .../@angular/router/build/es6/src/shared.d.ts | 4 + .../@angular/router/build/es6/src/shared.js | 2 + .../router/build/es6/src/url_serializer.d.ts | 10 + .../router/build/es6/src/url_serializer.js | 212 +++++++++++++++++ .../router/build/es6/src/url_tree.d.ts | 23 ++ .../@angular/router/build/es6/src/url_tree.js | 43 ++++ .../build/es6/src/utils/collection.d.ts | 17 ++ .../router/build/es6/src/utils/collection.js | 49 ++++ .../router/build/es6/src/utils/tree.d.ts | 17 ++ .../router/build/es6/src/utils/tree.js | 71 ++++++ modules/@angular/router/build/package.json | 68 ++++++ modules/@angular/router/build/src/config.d.ts | 9 + modules/@angular/router/build/src/config.js | 2 + .../router/build/src/create_url_tree.d.ts | 4 + .../router/build/src/create_url_tree.js | 189 +++++++++++++++ .../build/src/directives/router_link.d.ts | 13 + .../build/src/directives/router_link.js | 72 ++++++ .../build/src/directives/router_outlet.d.ts | 11 + .../build/src/directives/router_outlet.js | 46 ++++ modules/@angular/router/build/src/index.d.ts | 7 + modules/@angular/router/build/src/index.js | 15 ++ .../@angular/router/build/src/recognize.d.ts | 5 + .../@angular/router/build/src/recognize.js | 171 +++++++++++++ modules/@angular/router/build/src/router.d.ts | 40 ++++ modules/@angular/router/build/src/router.js | 159 +++++++++++++ .../router/build/src/router_outlet_map.d.ts | 7 + .../router/build/src/router_outlet_map.js | 10 + .../router/build/src/router_state.d.ts | 18 ++ .../@angular/router/build/src/router_state.js | 40 ++++ modules/@angular/router/build/src/shared.d.ts | 4 + modules/@angular/router/build/src/shared.js | 3 + .../router/build/src/url_serializer.d.ts | 10 + .../router/build/src/url_serializer.js | 224 ++++++++++++++++++ .../@angular/router/build/src/url_tree.d.ts | 23 ++ modules/@angular/router/build/src/url_tree.js | 56 +++++ .../router/build/src/utils/collection.d.ts | 17 ++ .../router/build/src/utils/collection.js | 55 +++++ .../@angular/router/build/src/utils/tree.d.ts | 17 ++ .../@angular/router/build/src/utils/tree.js | 88 +++++++ modules/@angular/router/package.json | 6 +- 59 files changed, 2586 insertions(+), 3 deletions(-) create mode 100644 modules/@angular/router/build/README.md create mode 100644 modules/@angular/router/build/es6/src/config.d.ts create mode 100644 modules/@angular/router/build/es6/src/config.js create mode 100644 modules/@angular/router/build/es6/src/create_url_tree.d.ts create mode 100644 modules/@angular/router/build/es6/src/create_url_tree.js create mode 100644 modules/@angular/router/build/es6/src/directives/router_link.d.ts create mode 100644 modules/@angular/router/build/es6/src/directives/router_link.js create mode 100644 modules/@angular/router/build/es6/src/directives/router_outlet.d.ts create mode 100644 modules/@angular/router/build/es6/src/directives/router_outlet.js create mode 100644 modules/@angular/router/build/es6/src/index.d.ts create mode 100644 modules/@angular/router/build/es6/src/index.js create mode 100644 modules/@angular/router/build/es6/src/recognize.d.ts create mode 100644 modules/@angular/router/build/es6/src/recognize.js create mode 100644 modules/@angular/router/build/es6/src/router.d.ts create mode 100644 modules/@angular/router/build/es6/src/router.js create mode 100644 modules/@angular/router/build/es6/src/router_outlet_map.d.ts create mode 100644 modules/@angular/router/build/es6/src/router_outlet_map.js create mode 100644 modules/@angular/router/build/es6/src/router_state.d.ts create mode 100644 modules/@angular/router/build/es6/src/router_state.js create mode 100644 modules/@angular/router/build/es6/src/shared.d.ts create mode 100644 modules/@angular/router/build/es6/src/shared.js create mode 100644 modules/@angular/router/build/es6/src/url_serializer.d.ts create mode 100644 modules/@angular/router/build/es6/src/url_serializer.js create mode 100644 modules/@angular/router/build/es6/src/url_tree.d.ts create mode 100644 modules/@angular/router/build/es6/src/url_tree.js create mode 100644 modules/@angular/router/build/es6/src/utils/collection.d.ts create mode 100644 modules/@angular/router/build/es6/src/utils/collection.js create mode 100644 modules/@angular/router/build/es6/src/utils/tree.d.ts create mode 100644 modules/@angular/router/build/es6/src/utils/tree.js create mode 100644 modules/@angular/router/build/package.json create mode 100644 modules/@angular/router/build/src/config.d.ts create mode 100644 modules/@angular/router/build/src/config.js create mode 100644 modules/@angular/router/build/src/create_url_tree.d.ts create mode 100644 modules/@angular/router/build/src/create_url_tree.js create mode 100644 modules/@angular/router/build/src/directives/router_link.d.ts create mode 100644 modules/@angular/router/build/src/directives/router_link.js create mode 100644 modules/@angular/router/build/src/directives/router_outlet.d.ts create mode 100644 modules/@angular/router/build/src/directives/router_outlet.js create mode 100644 modules/@angular/router/build/src/index.d.ts create mode 100644 modules/@angular/router/build/src/index.js create mode 100644 modules/@angular/router/build/src/recognize.d.ts create mode 100644 modules/@angular/router/build/src/recognize.js create mode 100644 modules/@angular/router/build/src/router.d.ts create mode 100644 modules/@angular/router/build/src/router.js create mode 100644 modules/@angular/router/build/src/router_outlet_map.d.ts create mode 100644 modules/@angular/router/build/src/router_outlet_map.js create mode 100644 modules/@angular/router/build/src/router_state.d.ts create mode 100644 modules/@angular/router/build/src/router_state.js create mode 100644 modules/@angular/router/build/src/shared.d.ts create mode 100644 modules/@angular/router/build/src/shared.js create mode 100644 modules/@angular/router/build/src/url_serializer.d.ts create mode 100644 modules/@angular/router/build/src/url_serializer.js create mode 100644 modules/@angular/router/build/src/url_tree.d.ts create mode 100644 modules/@angular/router/build/src/url_tree.js create mode 100644 modules/@angular/router/build/src/utils/collection.d.ts create mode 100644 modules/@angular/router/build/src/utils/collection.js create mode 100644 modules/@angular/router/build/src/utils/tree.d.ts create mode 100644 modules/@angular/router/build/src/utils/tree.js diff --git a/modules/@angular/router/build/README.md b/modules/@angular/router/build/README.md new file mode 100644 index 0000000000..eb02ffb1d1 --- /dev/null +++ b/modules/@angular/router/build/README.md @@ -0,0 +1 @@ +# vladivostok diff --git a/modules/@angular/router/build/es6/src/config.d.ts b/modules/@angular/router/build/es6/src/config.d.ts new file mode 100644 index 0000000000..d0f5b418d6 --- /dev/null +++ b/modules/@angular/router/build/es6/src/config.d.ts @@ -0,0 +1,9 @@ +import { Type } from '@angular/core'; +export declare type RouterConfig = Route[]; +export interface Route { + index?: boolean; + path?: string; + component: Type | string; + outlet?: string; + children?: Route[]; +} diff --git a/modules/@angular/router/build/es6/src/config.js b/modules/@angular/router/build/es6/src/config.js new file mode 100644 index 0000000000..bc64eabff3 --- /dev/null +++ b/modules/@angular/router/build/es6/src/config.js @@ -0,0 +1 @@ +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgdHlwZSBSb3V0ZXJDb25maWcgPSBSb3V0ZVtdO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlIHtcbiAgaW5kZXg/OiBib29sZWFuO1xuICBwYXRoPzogc3RyaW5nO1xuICBjb21wb25lbnQ6IFR5cGUgfCBzdHJpbmc7XG4gIG91dGxldD86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBSb3V0ZVtdO1xufSJdfQ== \ No newline at end of file diff --git a/modules/@angular/router/build/es6/src/create_url_tree.d.ts b/modules/@angular/router/build/es6/src/create_url_tree.d.ts new file mode 100644 index 0000000000..999cea0d39 --- /dev/null +++ b/modules/@angular/router/build/es6/src/create_url_tree.d.ts @@ -0,0 +1,4 @@ +import { UrlTree } from './url_tree'; +import { ActivatedRoute } from './router_state'; +import { Params } from './shared'; +export declare function createUrlTree(route: ActivatedRoute, urlTree: UrlTree, commands: any[], queryParameters: Params | undefined, fragment: string | undefined): UrlTree; diff --git a/modules/@angular/router/build/es6/src/create_url_tree.js b/modules/@angular/router/build/es6/src/create_url_tree.js new file mode 100644 index 0000000000..e08b1586c8 --- /dev/null +++ b/modules/@angular/router/build/es6/src/create_url_tree.js @@ -0,0 +1,185 @@ +import { UrlTree, UrlSegment } from './url_tree'; +import { TreeNode, rootNode } from './utils/tree'; +import { forEach, shallowEqual } from './utils/collection'; +import { PRIMARY_OUTLET } from './shared'; +export function createUrlTree(route, urlTree, commands, queryParameters, fragment) { + if (commands.length === 0) { + return tree(rootNode(urlTree), urlTree, queryParameters, fragment); + } + const normalizedCommands = normalizeCommands(commands); + if (navigateToRoot(normalizedCommands)) { + return tree(new TreeNode(urlTree.root, []), urlTree, queryParameters, fragment); + } + const startingNode = findStartingNode(normalizedCommands, urlTree, route); + const updated = normalizedCommands.commands.length > 0 ? + updateMany(startingNode.children.slice(0), normalizedCommands.commands) : + []; + const newRoot = constructNewTree(rootNode(urlTree), startingNode, updated); + return tree(newRoot, urlTree, queryParameters, fragment); +} +function tree(root, urlTree, queryParameters, fragment) { + const q = queryParameters ? stringify(queryParameters) : urlTree.queryParameters; + const f = fragment ? fragment : urlTree.fragment; + return new UrlTree(root, q, f); +} +function navigateToRoot(normalizedChange) { + return normalizedChange.isAbsolute && normalizedChange.commands.length === 1 && + normalizedChange.commands[0] == "/"; +} +class NormalizedNavigationCommands { + constructor(isAbsolute, numberOfDoubleDots, commands) { + this.isAbsolute = isAbsolute; + this.numberOfDoubleDots = numberOfDoubleDots; + this.commands = commands; + } +} +function normalizeCommands(commands) { + if ((typeof commands[0] === "string") && commands.length === 1 && commands[0] == "/") { + return new NormalizedNavigationCommands(true, 0, commands); + } + let numberOfDoubleDots = 0; + let isAbsolute = false; + const res = []; + for (let i = 0; i < commands.length; ++i) { + const c = commands[i]; + if (!(typeof c === "string")) { + res.push(c); + continue; + } + const parts = c.split('/'); + for (let j = 0; j < parts.length; ++j) { + let cc = parts[j]; + if (i == 0) { + if (j == 0 && cc == ".") { + } + else if (j == 0 && cc == "") { + isAbsolute = true; + } + else if (cc == "..") { + numberOfDoubleDots++; + } + else if (cc != '') { + res.push(cc); + } + } + else { + if (cc != '') { + res.push(cc); + } + } + } + } + return new NormalizedNavigationCommands(isAbsolute, numberOfDoubleDots, res); +} +function findStartingNode(normalizedChange, urlTree, route) { + if (normalizedChange.isAbsolute) { + return rootNode(urlTree); + } + else { + const urlSegment = findUrlSegment(route, urlTree, normalizedChange.numberOfDoubleDots); + return findMatchingNode(urlSegment, rootNode(urlTree)); + } +} +function findUrlSegment(route, urlTree, numberOfDoubleDots) { + const segments = route.urlSegments.value; + const urlSegment = segments[segments.length - 1]; + const path = urlTree.pathFromRoot(urlSegment); + if (path.length <= numberOfDoubleDots) { + throw new Error("Invalid number of '../'"); + } + return path[path.length - 1 - numberOfDoubleDots]; +} +function findMatchingNode(segment, node) { + if (node.value === segment) + return node; + for (let c of node.children) { + const r = findMatchingNode(segment, c); + if (r) + return r; + } + throw new Error(`Cannot find url segment '${segment}'`); +} +function constructNewTree(node, original, updated) { + if (node === original) { + return new TreeNode(node.value, updated); + } + else { + return new TreeNode(node.value, node.children.map(c => constructNewTree(c, original, updated))); + } +} +function updateMany(nodes, commands) { + const outlet = getOutlet(commands); + const nodesInRightOutlet = nodes.filter(c => c.value.outlet === outlet); + if (nodesInRightOutlet.length > 0) { + const nodeRightOutlet = nodesInRightOutlet[0]; + nodes[nodes.indexOf(nodeRightOutlet)] = update(nodeRightOutlet, commands); + } + else { + nodes.push(update(null, commands)); + } + return nodes; +} +function getPath(commands) { + if (!(typeof commands[0] === "string")) + return commands[0]; + const parts = commands[0].toString().split(":"); + return parts.length > 1 ? parts[1] : commands[0]; +} +function getOutlet(commands) { + if (!(typeof commands[0] === "string")) + return PRIMARY_OUTLET; + const parts = commands[0].toString().split(":"); + return parts.length > 1 ? parts[0] : PRIMARY_OUTLET; +} +function update(node, commands) { + const rest = commands.slice(1); + const next = rest.length === 0 ? null : rest[0]; + const outlet = getOutlet(commands); + const path = getPath(commands); + if (!node && !(typeof next === 'object')) { + const urlSegment = new UrlSegment(path, {}, outlet); + const children = rest.length === 0 ? [] : [update(null, rest)]; + return new TreeNode(urlSegment, children); + } + else if (!node && typeof next === 'object') { + const urlSegment = new UrlSegment(path, stringify(next), outlet); + return recurse(urlSegment, node, rest.slice(1)); + } + else if (node && outlet !== node.value.outlet) { + return node; + } + else if (node && typeof path === 'object') { + const newSegment = new UrlSegment(node.value.path, stringify(path), node.value.outlet); + return recurse(newSegment, node, rest); + } + else if (node && typeof next === 'object' && compare(path, stringify(next), node.value)) { + return recurse(node.value, node, rest.slice(1)); + } + else if (node && typeof next === 'object') { + const urlSegment = new UrlSegment(path, stringify(next), outlet); + return recurse(urlSegment, node, rest.slice(1)); + } + else if (node && compare(path, {}, node.value)) { + return recurse(node.value, node, rest); + } + else { + const urlSegment = new UrlSegment(path, {}, outlet); + return recurse(urlSegment, node, rest); + } +} +function stringify(params) { + const res = {}; + forEach(params, (v, k) => res[k] = v.toString()); + return res; +} +function compare(path, params, segment) { + return path == segment.path && shallowEqual(params, segment.parameters); +} +function recurse(urlSegment, node, rest) { + if (rest.length === 0) { + return new TreeNode(urlSegment, []); + } + const children = node ? node.children.slice(0) : []; + return new TreeNode(urlSegment, updateMany(children, rest)); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlX3VybF90cmVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NyZWF0ZV91cmxfdHJlZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQW9CLE1BQU0sWUFBWTtPQUMzRCxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjO09BQzFDLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQjtPQUVuRCxFQUFVLGNBQWMsRUFBRSxNQUFNLFVBQVU7QUFFakQsOEJBQThCLEtBQXFCLEVBQUUsT0FBZ0IsRUFBRSxRQUFlLEVBQ3hELGVBQW1DLEVBQUUsUUFBNEI7SUFDN0YsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELE1BQU0sa0JBQWtCLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkQsRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQWEsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFFRCxNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUUsTUFBTSxPQUFPLEdBQUcsa0JBQWtCLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQ2xELFVBQVUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUss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LENBQUMsR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELGlCQUFpQixJQUFZLEVBQUUsTUFBNEIsRUFBRSxPQUFtQjtJQUM5RSxNQUFNLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDMUUsQ0FBQztBQUVELGlCQUFpQixVQUFzQixFQUFFLElBQWlDLEVBQ3hELElBQVc7SUFDM0IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBYSxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNELE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDcEQsTUFBTSxDQUFDLElBQUksUUFBUSxDQUFhLFVBQVUsRUFBRSxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVybFRyZWUsIFVybFNlZ21lbnQsIGVxdWFsVXJsU2VnbWVudHMgfSBmcm9tICcuL3VybF90cmVlJztcbmltcG9ydCB7IFRyZWVOb2RlLCByb290Tm9kZSB9IGZyb20gJy4vdXRpbHMvdHJlZSc7XG5pbXBvcnQgeyBmb3JFYWNoLCBzaGFsbG93RXF1YWwgfSBmcm9tICcuL3V0aWxzL2NvbGxlY3Rpb24nO1xuaW1wb3J0IHsgUm91dGVyU3RhdGUsIEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnLi9yb3V0ZXJfc3RhdGUnO1xuaW1wb3J0IHsgUGFyYW1zLCBQUklNQVJZX09VVExFVCB9IGZyb20gJy4vc2hhcmVkJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVybFRyZWUocm91dGU6IEFjdGl2YXRlZFJvdXRlLCB1cmxUcmVlOiBVcmxUcmVlLCBjb21tYW5kczogYW55W10sIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzOiBQYXJhbXMgfCB1bmRlZmluZWQsIGZyYWdtZW50OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBVcmxUcmVlIHtcbiAgaWYgKGNvbW1hbmRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cmVlKHJvb3ROb2RlKHVybFRyZWUpLCB1cmxUcmVlLCBxdWVyeVBhcmFtZXRlcnMsIGZyYWdtZW50KTtcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWRDb21tYW5kcyA9IG5vcm1hbGl6ZUNvbW1hbmRzKGNvbW1hbmRzKTtcbiAgaWYgKG5hdmlnYXRlVG9Sb290KG5vcm1hbGl6ZWRDb21tYW5kcykpIHtcbiAgICByZXR1cm4gdHJlZShuZXcgVHJlZU5vZGU8VXJsU2VnbWVudD4odXJsVHJlZS5yb290LCBbXSksIHVybFRyZWUsIHF1ZXJ5UGFyYW1ldGVycywgZnJhZ21lbnQpO1xuICB9XG5cbiAgY29uc3Qgc3RhcnRpbmdOb2RlID0gZmluZFN0YXJ0aW5nTm9kZShub3JtYWxpemVkQ29tbWFuZHMsIHVybFRyZWUsIHJvdXRlKTtcbiAgY29uc3QgdXBkYXRlZCA9IG5vcm1hbGl6ZWRDb21tYW5kcy5jb21tYW5kcy5sZW5ndGggPiAwID9cbiAgICAgIHVwZGF0ZU1hbnkoc3RhcnRpbmdOb2RlLmNoaWxkcmVuLnNsaWNlKDApLCBub3JtYWxpemVkQ29tbWFuZHMuY29tbWFuZHMpIDpcbiAgICAgIFtdO1xuICBjb25zdCBuZXdSb290ID0gY29uc3RydWN0TmV3VHJlZShyb290Tm9kZSh1cmxUcmVlKSwgc3RhcnRpbmdOb2RlLCB1cGRhdGVkKTtcblxuICByZXR1cm4gdHJlZShuZXdSb290LCB1cmxUcmVlLCBxdWVyeVBhcmFtZXRlcnMsIGZyYWdtZW50KTtcbn1cblxuZnVuY3Rpb24gdHJlZShyb290OiBUcmVlTm9kZTxVcmxTZWdtZW50PiwgdXJsVHJlZTogVXJsVHJlZSwgcXVlcnlQYXJhbWV0ZXJzOiBQYXJhbXMgfCB1bmRlZmluZWQsIGZyYWdtZW50OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBVcmxUcmVlIHtcbiAgY29uc3QgcSA9IHF1ZXJ5UGFyYW1ldGVycyA/IHN0cmluZ2lmeShxdWVyeVBhcmFtZXRlcnMpIDogdXJsVHJlZS5xdWVyeVBhcmFtZXRlcnM7XG4gIGNvbnN0IGYgPSBmcmFnbWVudCA/IGZyYWdtZW50IDogdXJsVHJlZS5mcmFnbWVudDtcbiAgcmV0dXJuIG5ldyBVcmxUcmVlKHJvb3QsIHEsIGYpO1xufVxuXG5mdW5jdGlvbiBuYXZpZ2F0ZVRvUm9vdChub3JtYWxpemVkQ2hhbmdlOiBOb3JtYWxpemVkTmF2aWdhdGlvbkNvbW1hbmRzKTogYm9vbGVhbiB7XG4gIHJldHVybiBub3JtYWxpemVkQ2hhbmdlLmlzQWJzb2x1dGUgJiYgbm9ybWFsaXplZENoYW5nZS5jb21tYW5kcy5sZW5ndGggPT09IDEgJiZcbiAgICBub3JtYWxpemVkQ2hhbmdlLmNvbW1hbmRzWzBdID09IFwiL1wiO1xufVxuXG5jbGFzcyBOb3JtYWxpemVkTmF2aWdhdGlvbkNvbW1hbmRzIHtcbiAgY29uc3RydWN0b3IocHVibGljIGlzQWJzb2x1dGU6IGJvb2xlYW4sIHB1YmxpYyBudW1iZXJPZkRvdWJsZURvdHM6IG51bWJlcixcbiAgICAgICAgICAgICAgcHVibGljIGNvbW1hbmRzOiBhbnlbXSkge31cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQ29tbWFuZHMoY29tbWFuZHM6IGFueVtdKTogTm9ybWFsaXplZE5hdmlnYXRpb25Db21tYW5kcyB7XG4gIGlmICgodHlwZW9mIGNvbW1hbmRzWzBdID09PSBcInN0cmluZ1wiKSAmJiBjb21tYW5kcy5sZW5ndGggPT09IDEgJiYgY29tbWFuZHNbMF0gPT0gXCIvXCIpIHtcbiAgICByZXR1cm4gbmV3IE5vcm1hbGl6ZWROYXZpZ2F0aW9uQ29tbWFuZHModHJ1ZSwgMCwgY29tbWFuZHMpO1xuICB9XG5cbiAgbGV0IG51bWJlck9mRG91YmxlRG90cyA9IDA7XG4gIGxldCBpc0Fic29sdXRlID0gZmFsc2U7XG4gIGNvbnN0IHJlcyA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29tbWFuZHMubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjID0gY29tbWFuZHNbaV07XG5cbiAgICBpZiAoISh0eXBlb2YgYyA9PT0gXCJzdHJpbmdcIikpIHtcbiAgICAgIHJlcy5wdXNoKGMpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgcGFydHMgPSBjLnNwbGl0KCcvJyk7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBwYXJ0cy5sZW5ndGg7ICsraikge1xuICAgICAgbGV0IGNjID0gcGFydHNbal07XG5cbiAgICAgIC8vIGZpcnN0IGV4cCBpcyB0cmVhdGVkIGluIGEgc3BlY2lhbCB3YXlcbiAgICAgIGlmIChpID09IDApIHtcbiAgICAgICAgaWYgKGogPT0gMCAmJiBjYyA9PSBcIi5cIikgeyAgLy8gICcuL2EnXG4gICAgICAgICAgLy8gc2tpcCBpdFxuICAgICAgICB9IGVsc2UgaWYgKGogPT0gMCAmJiBjYyA9PSBcIlwiKSB7ICAvLyAgJy9hJ1xuICAgICAgICAgIGlzQWJzb2x1dGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGNjID09IFwiLi5cIikgeyAgLy8gICcuLi9hJ1xuICAgICAgICAgIG51bWJlck9mRG91YmxlRG90cysrO1xuICAgICAgICB9IGVsc2UgaWYgKGNjICE9ICcnKSB7XG4gICAgICAgICAgcmVzLnB1c2goY2MpO1xuICAgICAgICB9XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChjYyAhPSAnJykge1xuICAgICAgICAgIHJlcy5wdXNoKGNjKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgTm9ybWFsaXplZE5hdmlnYXRpb25Db21tYW5kcyhpc0Fic29sdXRlLCBudW1iZXJPZkRvdWJsZURvdHMsIHJlcyk7XG59XG5cbmZ1bmN0aW9uIGZpbmRTdGFydGluZ05vZGUobm9ybWFsaXplZENoYW5nZTogTm9ybWFsaXplZE5hdmlnYXRpb25Db21tYW5kcywgdXJsVHJlZTogVXJsVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSk6IFRyZWVOb2RlPFVybFNlZ21lbnQ+IHtcbiAgaWYgKG5vcm1hbGl6ZWRDaGFuZ2UuaXNBYnNvbHV0ZSkge1xuICAgIHJldHVybiByb290Tm9kZSh1cmxUcmVlKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB1cmxTZWdtZW50ID1cbiAgICAgIGZpbmRVcmxTZWdtZW50KHJvdXRlLCB1cmxUcmVlLCBub3JtYWxpemVkQ2hhbmdlLm51bWJlck9mRG91YmxlRG90cyk7XG4gICAgcmV0dXJuIGZpbmRNYXRjaGluZ05vZGUodXJsU2VnbWVudCwgcm9vdE5vZGUodXJsVHJlZSkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRVcmxTZWdtZW50KHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSwgdXJsVHJlZTogVXJsVHJlZSwgbnVtYmVyT2ZEb3VibGVEb3RzOiBudW1iZXIpOiBVcmxTZWdtZW50IHtcbiAgY29uc3Qgc2VnbWVudHMgPSAoPGFueT5yb3V0ZS51cmxTZWdtZW50cykudmFsdWU7XG4gIGNvbnN0IHVybFNlZ21lbnQgPSBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXTtcbiAgY29uc3QgcGF0aCA9IHVybFRyZWUucGF0aEZyb21Sb290KHVybFNlZ21lbnQpO1xuICBpZiAocGF0aC5sZW5ndGggPD0gbnVtYmVyT2ZEb3VibGVEb3RzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBudW1iZXIgb2YgJy4uLydcIik7XG4gIH1cbiAgcmV0dXJuIHBhdGhbcGF0aC5sZW5ndGggLSAxIC0gbnVtYmVyT2ZEb3VibGVEb3RzXTtcbn1cblxuZnVuY3Rpb24gZmluZE1hdGNoaW5nTm9kZShzZWdtZW50OiBVcmxTZWdtZW50LCBub2RlOiBUcmVlTm9kZTxVcmxTZWdtZW50Pik6IFRyZWVOb2RlPFVybFNlZ21lbnQ+IHtcbiAgaWYgKG5vZGUudmFsdWUgPT09IHNlZ21lbnQpIHJldHVybiBub2RlO1xuICBmb3IgKGxldCBjIG9mIG5vZGUuY2hpbGRyZW4pIHtcbiAgICBjb25zdCByID0gZmluZE1hdGNoaW5nTm9kZShzZWdtZW50LCBjKTtcbiAgICBpZiAocikgcmV0dXJuIHI7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCB1cmwgc2VnbWVudCAnJHtzZWdtZW50fSdgKTtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0TmV3VHJlZShub2RlOiBUcmVlTm9kZTxVcmxTZWdtZW50Piwgb3JpZ2luYWw6IFRyZWVOb2RlPFVybFNlZ21lbnQ+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkOiBUcmVlTm9kZTxVcmxTZWdtZW50PltdKTogVHJlZU5vZGU8VXJsU2VnbWVudD4ge1xuICBpZiAobm9kZSA9PT0gb3JpZ2luYWwpIHtcbiAgICByZXR1cm4gbmV3IFRyZWVOb2RlPFVybFNlZ21lbnQ+KG5vZGUudmFsdWUsIHVwZGF0ZWQpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgVHJlZU5vZGU8VXJsU2VnbWVudD4oXG4gICAgICBub2RlLnZhbHVlLCBub2RlLmNoaWxkcmVuLm1hcChjID0+IGNvbnN0cnVjdE5ld1RyZWUoYywgb3JpZ2luYWwsIHVwZGF0ZWQpKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlTWFueShub2RlczogVHJlZU5vZGU8VXJsU2VnbWVudD5bXSwgY29tbWFuZHM6IGFueVtdKTogVHJlZU5vZGU8VXJsU2VnbWVudD5bXSB7XG4gIGNvbnN0IG91dGxldCA9IGdldE91dGxldChjb21tYW5kcyk7XG4gIGNvbnN0IG5vZGVzSW5SaWdodE91dGxldCA9IG5vZGVzLmZpbHRlcihjID0+IGMudmFsdWUub3V0bGV0ID09PSBvdXRsZXQpO1xuICBpZiAobm9kZXNJblJpZ2h0T3V0bGV0Lmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBub2RlUmlnaHRPdXRsZXQgPSBub2Rlc0luUmlnaHRPdXRsZXRbMF07ICAvLyB0aGVyZSBjYW4gYmUgb25seSBvbmVcbiAgICBub2Rlc1tub2Rlcy5pbmRleE9mKG5vZGVSaWdodE91dGxldCldID0gdXBkYXRlKG5vZGVSaWdodE91dGxldCwgY29tbWFuZHMpO1xuICB9IGVsc2Uge1xuICAgIG5vZGVzLnB1c2godXBkYXRlKG51bGwsIGNvbW1hbmRzKSk7XG4gIH1cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG5mdW5jdGlvbiBnZXRQYXRoKGNvbW1hbmRzOiBhbnlbXSk6IGFueSB7XG4gIGlmICghKHR5cGVvZiBjb21tYW5kc1swXSA9PT0gXCJzdHJpbmdcIikpIHJldHVybiBjb21tYW5kc1swXTtcbiAgY29uc3QgcGFydHMgPSBjb21tYW5kc1swXS50b1N0cmluZygpLnNwbGl0KFwiOlwiKTtcbiAgcmV0dXJuIHBhcnRzLmxlbmd0aCA+IDEgPyBwYXJ0c1sxXSA6IGNvbW1hbmRzWzBdO1xufVxuXG5mdW5jdGlvbiBnZXRPdXRsZXQoY29tbWFuZHM6IGFueVtdKTogc3RyaW5nIHtcbiAgaWYgKCEodHlwZW9mIGNvbW1hbmRzWzBdID09PSBcInN0cmluZ1wiKSkgcmV0dXJuIFBSSU1BUllfT1VUTEVUO1xuICBjb25zdCBwYXJ0cyA9IGNvbW1hbmRzWzBdLnRvU3RyaW5nKCkuc3BsaXQoXCI6XCIpO1xuICByZXR1cm4gcGFydHMubGVuZ3RoID4gMSA/IHBhcnRzWzBdIDogUFJJTUFSWV9PVVRMRVQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZShub2RlOiBUcmVlTm9kZTxVcmxTZWdtZW50PnxudWxsLCBjb21tYW5kczogYW55W10pOiBUcmVlTm9kZTxVcmxTZWdtZW50PiB7XG4gIGNvbnN0IHJlc3QgPSBjb21tYW5kcy5zbGljZSgxKTtcbiAgY29uc3QgbmV4dCA9IHJlc3QubGVuZ3RoID09PSAwID8gbnVsbCA6IHJlc3RbMF07XG4gIGNvbnN0IG91dGxldCA9IGdldE91dGxldChjb21tYW5kcyk7XG4gIGNvbnN0IHBhdGggPSBnZXRQYXRoKGNvbW1hbmRzKTtcblxuICAvLyByZWFjaCB0aGUgZW5kIG9mIHRoZSB0cmVlID0+IGNyZWF0ZSBuZXcgdHJlZSBub2Rlcy5cbiAgaWYgKCFub2RlICYmICEodHlwZW9mIG5leHQgPT09ICdvYmplY3QnKSkge1xuICAgIGNvbnN0IHVybFNlZ21lbnQgPSBuZXcgVXJsU2VnbWVudChwYXRoLCB7fSwgb3V0bGV0KTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHJlc3QubGVuZ3RoID09PSAwID8gW10gOiBbdXBkYXRlKG51bGwsIHJlc3QpXTtcbiAgICByZXR1cm4gbmV3IFRyZWVOb2RlPFVybFNlZ21lbnQ+KHVybFNlZ21lbnQsIGNoaWxkcmVuKTtcblxuICB9IGVsc2UgaWYgKCFub2RlICYmIHR5cGVvZiBuZXh0ID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IHVybFNlZ21lbnQgPSBuZXcgVXJsU2VnbWVudChwYXRoLCBzdHJpbmdpZnkobmV4dCksIG91dGxldCk7XG4gICAgcmV0dXJuIHJlY3Vyc2UodXJsU2VnbWVudCwgbm9kZSwgcmVzdC5zbGljZSgxKSk7XG5cbiAgICAvLyBkaWZmZXJlbnQgb3V0bGV0ID0+IHByZXNlcnZlIHRoZSBzdWJ0cmVlXG4gIH0gZWxzZSBpZiAobm9kZSAmJiBvdXRsZXQgIT09IG5vZGUudmFsdWUub3V0bGV0KSB7XG4gICAgcmV0dXJuIG5vZGU7XG5cbiAgICAvLyBwYXJhbXMgY29tbWFuZFxuICB9IGVsc2UgaWYgKG5vZGUgJiYgdHlwZW9mIHBhdGggPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgbmV3U2VnbWVudCA9IG5ldyBVcmxTZWdtZW50KG5vZGUudmFsdWUucGF0aCwgc3RyaW5naWZ5KHBhdGgpLCBub2RlLnZhbHVlLm91dGxldCk7XG4gICAgcmV0dXJuIHJlY3Vyc2UobmV3U2VnbWVudCwgbm9kZSwgcmVzdCk7XG5cbiAgICAvLyBuZXh0IG9uZSBpcyBhIHBhcmFtcyBjb21tYW5kICYmIGNhbiByZXVzZSB0aGUgbm9kZVxuICB9IGVsc2UgaWYgKG5vZGUgJiYgdHlwZW9mIG5leHQgPT09ICdvYmplY3QnICYmIGNvbXBhcmUocGF0aCwgc3RyaW5naWZ5KG5leHQpLCBub2RlLnZhbHVlKSkge1xuICAgIHJldHVybiByZWN1cnNlKG5vZGUudmFsdWUsIG5vZGUsIHJlc3Quc2xpY2UoMSkpO1xuXG4gICAgLy8gbmV4dCBvbmUgaXMgYSBwYXJhbXMgY29tbWFuZCAmJiBjYW5ub3QgcmV1c2UgdGhlIG5vZGVcbiAgfSBlbHNlIGlmIChub2RlICYmIHR5cGVvZiBuZXh0ID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IHVybFNlZ21lbnQgPSBuZXcgVXJsU2VnbWVudChwYXRoLCBzdHJpbmdpZnkobmV4dCksIG91dGxldCk7XG4gICAgcmV0dXJuIHJlY3Vyc2UodXJsU2VnbWVudCwgbm9kZSwgcmVzdC5zbGljZSgxKSk7XG5cbiAgICAvLyBuZXh0IG9uZSBpcyBub3QgYSBwYXJhbXMgY29tbWFuZCAmJiBjYW4gcmV1c2UgdGhlIG5vZGVcbiAgfSBlbHNlIGlmIChub2RlICYmIGNvbXBhcmUocGF0aCwge30sIG5vZGUudmFsdWUpKSB7XG4gICAgcmV0dXJuIHJlY3Vyc2Uobm9kZS52YWx1ZSwgbm9kZSwgcmVzdCk7XG5cbiAgICAvLyBuZXh0IG9uZSBpcyBub3QgYSBwYXJhbXMgY29tbWFuZCAmJiBjYW5ub3QgcmV1c2UgdGhlIG5vZGVcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB1cmxTZWdtZW50ID0gbmV3IFVybFNlZ21lbnQocGF0aCwge30sIG91dGxldCk7XG4gICAgcmV0dXJuIHJlY3Vyc2UodXJsU2VnbWVudCwgbm9kZSwgcmVzdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5KHBhcmFtczoge1trZXk6IHN0cmluZ106IGFueX0pOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSB7XG4gIGNvbnN0IHJlcyA9IHt9O1xuICBmb3JFYWNoKHBhcmFtcywgKHYsIGspID0+IHJlc1trXSA9IHYudG9TdHJpbmcoKSk7XG4gIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmUocGF0aDogc3RyaW5nLCBwYXJhbXM6IHtba2V5OiBzdHJpbmddOiBhbnl9LCBzZWdtZW50OiBVcmxTZWdtZW50KTogYm9vbGVhbiB7XG4gIHJldHVybiBwYXRoID09IHNlZ21lbnQucGF0aCAmJiBzaGFsbG93RXF1YWwocGFyYW1zLCBzZWdtZW50LnBhcmFtZXRlcnMpO1xufVxuXG5mdW5jdGlvbiByZWN1cnNlKHVybFNlZ21lbnQ6IFVybFNlZ21lbnQsIG5vZGU6IFRyZWVOb2RlPFVybFNlZ21lbnQ+IHwgbnVsbCxcbiAgICAgICAgICAgICAgICAgIHJlc3Q6IGFueVtdKTogVHJlZU5vZGU8VXJsU2VnbWVudD4ge1xuICBpZiAocmVzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbmV3IFRyZWVOb2RlPFVybFNlZ21lbnQ+KHVybFNlZ21lbnQsIFtdKTtcbiAgfVxuICBjb25zdCBjaGlsZHJlbiA9IG5vZGUgPyBub2RlLmNoaWxkcmVuLnNsaWNlKDApIDogW107XG4gIHJldHVybiBuZXcgVHJlZU5vZGU8VXJsU2VnbWVudD4odXJsU2VnbWVudCwgdXBkYXRlTWFueShjaGlsZHJlbiwgcmVzdCkpO1xufSJdfQ== \ No newline at end of file diff --git a/modules/@angular/router/build/es6/src/directives/router_link.d.ts b/modules/@angular/router/build/es6/src/directives/router_link.d.ts new file mode 100644 index 0000000000..5ce81cb7fc --- /dev/null +++ b/modules/@angular/router/build/es6/src/directives/router_link.d.ts @@ -0,0 +1,13 @@ +import { Router } from '../router'; +import { ActivatedRoute } from '../router_state'; +export declare class RouterLink { + private router; + private route; + target: string; + private commands; + href: string; + constructor(router: Router, route: ActivatedRoute); + routerLink: any[] | string; + onClick(): boolean; + private updateTargetUrlAndHref(); +} diff --git a/modules/@angular/router/build/es6/src/directives/router_link.js b/modules/@angular/router/build/es6/src/directives/router_link.js new file mode 100644 index 0000000000..14ec38401e --- /dev/null +++ b/modules/@angular/router/build/es6/src/directives/router_link.js @@ -0,0 +1,65 @@ +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +import { Directive, HostListener, HostBinding, Input } from '@angular/core'; +import { Router } from '../router'; +import { ActivatedRoute } from '../router_state'; +export let RouterLink = class RouterLink { + constructor(router, route) { + this.router = router; + this.route = route; + this.commands = []; + } + set routerLink(data) { + if (Array.isArray(data)) { + this.commands = data; + } + else { + this.commands = [data]; + } + this.updateTargetUrlAndHref(); + } + onClick() { + if (!(typeof this.target === "string") || this.target == '_self') { + this.router.navigate(this.commands, { relativeTo: this.route }); + return false; + } + return true; + } + updateTargetUrlAndHref() { + const tree = this.router.createUrlTree(this.commands, { relativeTo: this.route }); + if (tree) { + this.href = this.router.serializeUrl(tree); + } + } +}; +__decorate([ + Input(), + __metadata('design:type', String) +], RouterLink.prototype, "target", void 0); +__decorate([ + HostBinding(), + __metadata('design:type', String) +], RouterLink.prototype, "href", void 0); +__decorate([ + Input(), + __metadata('design:type', Object), + __metadata('design:paramtypes', [Object]) +], RouterLink.prototype, "routerLink", null); +__decorate([ + HostListener("click"), + __metadata('design:type', Function), + __metadata('design:paramtypes', []), + __metadata('design:returntype', Boolean) +], RouterLink.prototype, "onClick", null); +RouterLink = __decorate([ + Directive({ selector: '[routerLink]' }), + __metadata('design:paramtypes', [Router, ActivatedRoute]) +], RouterLink); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyX2xpbmsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGlyZWN0aXZlcy9yb3V0ZXJfbGluay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7T0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFDTixNQUFNLGVBQWU7T0FDZixFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVc7T0FDekIsRUFBQyxjQUFjLEVBQUMsTUFBTSxpQkFBaUI7QUE0QjlDO0lBT0UsWUFBb0IsTUFBYyxFQUFVLEtBQXFCO1FBQTdDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUx6RCxhQUFRLEdBQVUsRUFBRSxDQUFDO0lBS3VDLENBQUM7SUFHckUsSUFBSSxVQUFVLENBQUMsSUFBb0I7UUFDakMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLENBQUM7UUFDRCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBSUQsT0FBTztRQUVMLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUM7WUFDOUQsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDO1FBQ2hGLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDVCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQW5DQztJQUFDLEtBQUssRUFBRTs7MENBQUE7QUFJUjtJQUFDLFdBQVcsRUFBRTs7d0NBQUE7QUFJZDtJQUFDLEtBQUssRUFBRTs7OzRDQUFBO0FBV1I7SUFBQyxZQUFZLENBQUMsT0FBTyxDQUFDOzs7O3lDQUFBO0FBckJ4QjtJQUFDLFNBQVMsQ0FBQyxFQUFDLFFBQVEsRUFBRSxjQUFjLEVBQUMsQ0FBQzs7Y0FBQTtBQXFDckMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJy4uL3JvdXRlcic7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICcuLi9yb3V0ZXJfc3RhdGUnO1xuXG4vKipcbiAqIFRoZSBSb3V0ZXJMaW5rIGRpcmVjdGl2ZSBsZXRzIHlvdSBsaW5rIHRvIHNwZWNpZmljIHBhcnRzIG9mIHlvdXIgYXBwLlxuICpcbiAqIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgcm91dGUgY29uZmlndXJhdGlvbjpcblxuICogYGBgXG4gKiBbeyBwYXRoOiAnL3VzZXInLCBjb21wb25lbnQ6IFVzZXJDbXAgfV1cbiAqIGBgYFxuICpcbiAqIFdoZW4gbGlua2luZyB0byB0aGlzIGBVc2VyYCByb3V0ZSwgeW91IGNhbiB3cml0ZTpcbiAqXG4gKiBgYGBcbiAqIDxhIFtyb3V0ZXJMaW5rXT1cIlsnL3VzZXInXVwiPmxpbmsgdG8gdXNlciBjb21wb25lbnQ8L2E+XG4gKiBgYGBcbiAqXG4gKiBSb3V0ZXJMaW5rIGV4cGVjdHMgdGhlIHZhbHVlIHRvIGJlIGFuIGFycmF5IG9mIHBhdGggc2VnbWVudHMsIGZvbGxvd2VkIGJ5IHRoZSBwYXJhbXNcbiAqIGZvciB0aGF0IGxldmVsIG9mIHJvdXRpbmcuIEZvciBpbnN0YW5jZSBgWycvdGVhbScsIHt0ZWFtSWQ6IDF9LCAndXNlcicsIHt1c2VySWQ6IDJ9XWBcbiAqIG1lYW5zIHRoYXQgd2Ugd2FudCB0byBnZW5lcmF0ZSBhIGxpbmsgdG8gYC90ZWFtO3RlYW1JZD0xL3VzZXI7dXNlcklkPTJgLlxuICpcbiAqIFRoZSBmaXJzdCBzZWdtZW50IG5hbWUgY2FuIGJlIHByZXBlbmRlZCB3aXRoIGAvYCwgYC4vYCwgb3IgYC4uL2AuXG4gKiBJZiB0aGUgc2VnbWVudCBiZWdpbnMgd2l0aCBgL2AsIHRoZSByb3V0ZXIgd2lsbCBsb29rIHVwIHRoZSByb3V0ZSBmcm9tIHRoZSByb290IG9mIHRoZSBhcHAuXG4gKiBJZiB0aGUgc2VnbWVudCBiZWdpbnMgd2l0aCBgLi9gLCBvciBkb2Vzbid0IGJlZ2luIHdpdGggYSBzbGFzaCwgdGhlIHJvdXRlciB3aWxsXG4gKiBpbnN0ZWFkIGxvb2sgaW4gdGhlIGN1cnJlbnQgY29tcG9uZW50J3MgY2hpbGRyZW4gZm9yIHRoZSByb3V0ZS5cbiAqIEFuZCBpZiB0aGUgc2VnbWVudCBiZWdpbnMgd2l0aCBgLi4vYCwgdGhlIHJvdXRlciB3aWxsIGdvIHVwIG9uZSBsZXZlbC5cbiAqL1xuQERpcmVjdGl2ZSh7c2VsZWN0b3I6ICdbcm91dGVyTGlua10nfSlcbmV4cG9ydCBjbGFzcyBSb3V0ZXJMaW5rIHtcbiAgQElucHV0KCkgdGFyZ2V0OiBzdHJpbmc7XG4gIHByaXZhdGUgY29tbWFuZHM6IGFueVtdID0gW107XG5cbiAgLy8gdGhlIHVybCBkaXNwbGF5ZWQgb24gdGhlIGFuY2hvciBlbGVtZW50LlxuICBASG9zdEJpbmRpbmcoKSBocmVmOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUpIHt9XG5cbiAgQElucHV0KClcbiAgc2V0IHJvdXRlckxpbmsoZGF0YTogYW55W10gfCBzdHJpbmcpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgdGhpcy5jb21tYW5kcyA9IGRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29tbWFuZHMgPSBbZGF0YV07XG4gICAgfVxuICAgIHRoaXMudXBkYXRlVGFyZ2V0VXJsQW5kSHJlZigpO1xuICB9XG5cblxuICBASG9zdExpc3RlbmVyKFwiY2xpY2tcIilcbiAgb25DbGljaygpOiBib29sZWFuIHtcbiAgICAvLyBJZiBubyB0YXJnZXQsIG9yIGlmIHRhcmdldCBpcyBfc2VsZiwgcHJldmVudCBkZWZhdWx0IGJyb3dzZXIgYmVoYXZpb3JcbiAgICBpZiAoISh0eXBlb2YgdGhpcy50YXJnZXQgPT09IFwic3RyaW5nXCIpIHx8IHRoaXMudGFyZ2V0ID09ICdfc2VsZicpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKHRoaXMuY29tbWFuZHMsIHtyZWxhdGl2ZVRvOiB0aGlzLnJvdXRlfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVUYXJnZXRVcmxBbmRIcmVmKCk6IHZvaWQge1xuICAgIGNvbnN0IHRyZWUgPSB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKHRoaXMuY29tbWFuZHMsIHtyZWxhdGl2ZVRvOiB0aGlzLnJvdXRlfSk7XG4gICAgaWYgKHRyZWUpIHtcbiAgICAgIHRoaXMuaHJlZiA9IHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybCh0cmVlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/modules/@angular/router/build/es6/src/directives/router_outlet.d.ts b/modules/@angular/router/build/es6/src/directives/router_outlet.d.ts new file mode 100644 index 0000000000..bfddeddb4b --- /dev/null +++ b/modules/@angular/router/build/es6/src/directives/router_outlet.d.ts @@ -0,0 +1,11 @@ +import { ViewContainerRef, ComponentFactory, ResolvedReflectiveProvider } from '@angular/core'; +import { RouterOutletMap } from '../router_outlet_map'; +export declare class RouterOutlet { + private location; + private activated; + outletMap: RouterOutletMap; + constructor(parentOutletMap: RouterOutletMap, location: ViewContainerRef, name: string); + readonly isActivated: boolean; + deactivate(): void; + activate(factory: ComponentFactory, providers: ResolvedReflectiveProvider[], outletMap: RouterOutletMap): void; +} diff --git a/modules/@angular/router/build/es6/src/directives/router_outlet.js b/modules/@angular/router/build/es6/src/directives/router_outlet.js new file mode 100644 index 0000000000..e43821d1a5 --- /dev/null +++ b/modules/@angular/router/build/es6/src/directives/router_outlet.js @@ -0,0 +1,39 @@ +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +import { Directive, ViewContainerRef, Attribute, ReflectiveInjector } from '@angular/core'; +import { RouterOutletMap } from '../router_outlet_map'; +import { PRIMARY_OUTLET } from '../shared'; +export let RouterOutlet = class RouterOutlet { + constructor(parentOutletMap, location, name) { + this.location = location; + parentOutletMap.registerOutlet(name ? name : PRIMARY_OUTLET, this); + } + get isActivated() { return !!this.activated; } + deactivate() { + if (this.activated) { + this.activated.destroy(); + this.activated = null; + } + } + activate(factory, providers, outletMap) { + this.outletMap = outletMap; + let inj = ReflectiveInjector.fromResolvedProviders(providers, this.location.parentInjector); + this.activated = this.location.createComponent(factory, this.location.length, inj, []); + } +}; +RouterOutlet = __decorate([ + Directive({ selector: 'router-outlet' }), + __param(2, Attribute('name')), + __metadata('design:paramtypes', [RouterOutletMap, ViewContainerRef, String]) +], RouterOutlet); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyX291dGxldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kaXJlY3RpdmVzL3JvdXRlcl9vdXRsZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O09BQU8sRUFBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUE4RCxrQkFBa0IsRUFBQyxNQUFNLGVBQWU7T0FDN0ksRUFBQyxlQUFlLEVBQUMsTUFBTSxzQkFBc0I7T0FDN0MsRUFBQyxjQUFjLEVBQUMsTUFBTSxXQUFXO0FBR3hDO0lBSUUsWUFBWSxlQUErQixFQUFVLFFBQXlCLEVBQy9DLElBQVc7UUFEVyxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUU1RSxlQUFlLENBQUMsY0FBYyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxJQUFJLFdBQVcsS0FBYyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBRXZELFVBQVU7UUFDUixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLE9BQThCLEVBQUUsU0FBdUMsRUFDdkUsU0FBMEI7UUFDakMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxHQUFHLEdBQUcsa0JBQWtCLENBQUMscUJBQXFCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDNUYsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7QUFDSCxDQUFDO0FBekJEO0lBQUMsU0FBUyxDQUFDLEVBQUMsUUFBUSxFQUFFLGVBQWUsRUFBQyxDQUFDO2VBTXhCLFNBQVMsQ0FBQyxNQUFNLENBQUM7O2dCQU5PO0FBeUJ0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBWaWV3Q29udGFpbmVyUmVmLCBBdHRyaWJ1dGUsIENvbXBvbmVudFJlZiwgQ29tcG9uZW50RmFjdG9yeSwgUmVzb2x2ZWRSZWZsZWN0aXZlUHJvdmlkZXIsIFJlZmxlY3RpdmVJbmplY3Rvcn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JvdXRlck91dGxldE1hcH0gZnJvbSAnLi4vcm91dGVyX291dGxldF9tYXAnO1xuaW1wb3J0IHtQUklNQVJZX09VVExFVH0gZnJvbSAnLi4vc2hhcmVkJztcblxuQERpcmVjdGl2ZSh7c2VsZWN0b3I6ICdyb3V0ZXItb3V0bGV0J30pXG5leHBvcnQgY2xhc3MgUm91dGVyT3V0bGV0IHtcbiAgcHJpdmF0ZSBhY3RpdmF0ZWQ6Q29tcG9uZW50UmVmPGFueT58bnVsbDtcbiAgcHVibGljIG91dGxldE1hcDpSb3V0ZXJPdXRsZXRNYXA7XG5cbiAgY29uc3RydWN0b3IocGFyZW50T3V0bGV0TWFwOlJvdXRlck91dGxldE1hcCwgcHJpdmF0ZSBsb2NhdGlvbjpWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICAgICAgICBAQXR0cmlidXRlKCduYW1lJykgbmFtZTpzdHJpbmcpIHtcbiAgICBwYXJlbnRPdXRsZXRNYXAucmVnaXN0ZXJPdXRsZXQobmFtZSA/IG5hbWUgOiBQUklNQVJZX09VVExFVCwgdGhpcyk7XG4gIH1cblxuICBnZXQgaXNBY3RpdmF0ZWQoKTogYm9vbGVhbiB7IHJldHVybiAhIXRoaXMuYWN0aXZhdGVkOyB9XG4gIFxuICBkZWFjdGl2YXRlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFjdGl2YXRlZCkge1xuICAgICAgdGhpcy5hY3RpdmF0ZWQuZGVzdHJveSgpO1xuICAgICAgdGhpcy5hY3RpdmF0ZWQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFjdGl2YXRlKGZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8YW55PiwgcHJvdmlkZXJzOiBSZXNvbHZlZFJlZmxlY3RpdmVQcm92aWRlcltdLFxuICAgICAgICAgICBvdXRsZXRNYXA6IFJvdXRlck91dGxldE1hcCk6IHZvaWQge1xuICAgIHRoaXMub3V0bGV0TWFwID0gb3V0bGV0TWFwO1xuICAgIGxldCBpbmogPSBSZWZsZWN0aXZlSW5qZWN0b3IuZnJvbVJlc29sdmVkUHJvdmlkZXJzKHByb3ZpZGVycywgdGhpcy5sb2NhdGlvbi5wYXJlbnRJbmplY3Rvcik7XG4gICAgdGhpcy5hY3RpdmF0ZWQgPSB0aGlzLmxvY2F0aW9uLmNyZWF0ZUNvbXBvbmVudChmYWN0b3J5LCB0aGlzLmxvY2F0aW9uLmxlbmd0aCwgaW5qLCBbXSk7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/modules/@angular/router/build/es6/src/index.d.ts b/modules/@angular/router/build/es6/src/index.d.ts new file mode 100644 index 0000000000..7ec5c4879d --- /dev/null +++ b/modules/@angular/router/build/es6/src/index.d.ts @@ -0,0 +1,7 @@ +export { Router } from './router'; +export { UrlSerializer, DefaultUrlSerializer } from './url_serializer'; +export { RouterState, ActivatedRoute } from './router_state'; +export { RouterOutletMap } from './router_outlet_map'; +import { RouterOutlet } from './directives/router_outlet'; +import { RouterLink } from './directives/router_link'; +export declare const ROUTER_DIRECTIVES: (typeof RouterOutlet | typeof RouterLink)[]; diff --git a/modules/@angular/router/build/es6/src/index.js b/modules/@angular/router/build/es6/src/index.js new file mode 100644 index 0000000000..2dc4a76fa6 --- /dev/null +++ b/modules/@angular/router/build/es6/src/index.js @@ -0,0 +1,8 @@ +export { Router } from './router'; +export { UrlSerializer, DefaultUrlSerializer } from './url_serializer'; +export { RouterState, ActivatedRoute } from './router_state'; +export { RouterOutletMap } from './router_outlet_map'; +import { RouterOutlet } from './directives/router_outlet'; +import { RouterLink } from './directives/router_link'; +export const ROUTER_DIRECTIVES = [RouterOutlet, RouterLink]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxNQUFNLFFBQVEsVUFBVSxDQUFDO0FBQ2xDLFNBQVMsYUFBYSxFQUFFLG9CQUFvQixRQUFRLGtCQUFrQixDQUFDO0FBQ3ZFLFNBQVMsV0FBVyxFQUFFLGNBQWMsUUFBUSxnQkFBZ0IsQ0FBQztBQUM3RCxTQUFTLGVBQWUsUUFBUSxxQkFBcUIsQ0FBQztPQUUvQyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QjtPQUNsRCxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQjtBQUVyRCxPQUFPLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBSb3V0ZXIgfSBmcm9tICcuL3JvdXRlcic7XG5leHBvcnQgeyBVcmxTZXJpYWxpemVyLCBEZWZhdWx0VXJsU2VyaWFsaXplciB9IGZyb20gJy4vdXJsX3NlcmlhbGl6ZXInO1xuZXhwb3J0IHsgUm91dGVyU3RhdGUsIEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnLi9yb3V0ZXJfc3RhdGUnO1xuZXhwb3J0IHsgUm91dGVyT3V0bGV0TWFwIH0gZnJvbSAnLi9yb3V0ZXJfb3V0bGV0X21hcCc7XG5cbmltcG9ydCB7IFJvdXRlck91dGxldCB9IGZyb20gJy4vZGlyZWN0aXZlcy9yb3V0ZXJfb3V0bGV0JztcbmltcG9ydCB7IFJvdXRlckxpbmsgfSBmcm9tICcuL2RpcmVjdGl2ZXMvcm91dGVyX2xpbmsnO1xuXG5leHBvcnQgY29uc3QgUk9VVEVSX0RJUkVDVElWRVMgPSBbUm91dGVyT3V0bGV0LCBSb3V0ZXJMaW5rXTsiXX0= \ No newline at end of file diff --git a/modules/@angular/router/build/es6/src/recognize.d.ts b/modules/@angular/router/build/es6/src/recognize.d.ts new file mode 100644 index 0000000000..64aeb9f2f7 --- /dev/null +++ b/modules/@angular/router/build/es6/src/recognize.d.ts @@ -0,0 +1,5 @@ +import { UrlTree } from './url_tree'; +import { RouterState } from './router_state'; +import { RouterConfig } from './config'; +import { Observable } from 'rxjs/Observable'; +export declare function recognize(config: RouterConfig, url: UrlTree, existingState: RouterState): Observable; diff --git a/modules/@angular/router/build/es6/src/recognize.js b/modules/@angular/router/build/es6/src/recognize.js new file mode 100644 index 0000000000..5bfb6a2326 --- /dev/null +++ b/modules/@angular/router/build/es6/src/recognize.js @@ -0,0 +1,166 @@ +import { flatten, first, merge } from './utils/collection'; +import { TreeNode, rootNode } from './utils/tree'; +import { RouterState, ActivatedRoute } from './router_state'; +import { PRIMARY_OUTLET } from './shared'; +import { Observable } from 'rxjs/Observable'; +import { BehaviorSubject } from 'rxjs/BehaviorSubject'; +export function recognize(config, url, existingState) { + try { + const match = new MatchResult(existingState.root.component, config, [url.root], {}, rootNode(url).children, [], PRIMARY_OUTLET); + existingState.queryParams.next(url.queryParameters); + existingState.fragment.next(url.fragment); + const roots = constructActivatedRoute(match, rootNode(existingState)); + const res = new RouterState(roots[0], existingState.queryParams, existingState.fragment); + return new Observable(obs => { + obs.next(res); + obs.complete(); + }); + } + catch (e) { + return new Observable(obs => obs.error(e)); + } +} +function constructActivatedRoute(match, existingRoute) { + const activatedRoute = createOrReuseRoute(match, existingRoute); + const existingChildren = existingRoute ? existingRoute.children : []; + if (match.leftOverUrl.length > 0) { + const children = recognizeMany(match.children, match.leftOverUrl, existingChildren); + checkOutletNameUniqueness(children); + return [new TreeNode(activatedRoute, children)]; + } + else { + return [new TreeNode(activatedRoute, [])]; + } +} +function recognizeMany(config, urls, existingRoutes) { + return flatten(urls.map(url => recognizeOne(config, url, existingRoutes))); +} +function createOrReuseRoute(match, existing) { + if (existing) { + const v = existing.value; + if (v.component === match.component && v.outlet === match.outlet) { + (v.params).next(match.parameters); + (v.urlSegments).next(match.consumedUrlSegments); + return v; + } + } + return new ActivatedRoute(new BehaviorSubject(match.consumedUrlSegments), new BehaviorSubject(match.parameters), match.outlet, match.component); +} +function recognizeOne(config, url, existingRoutes) { + let m = match(config, url); + const routesWithRightOutlet = existingRoutes.filter(r => r.value.outlet == m.outlet); + const routeWithRightOutlet = routesWithRightOutlet.length > 0 ? routesWithRightOutlet[0] : null; + const primary = constructActivatedRoute(m, routeWithRightOutlet); + const secondary = recognizeMany(config, m.secondary, existingRoutes); + const res = primary.concat(secondary); + checkOutletNameUniqueness(res); + return res; +} +function checkOutletNameUniqueness(nodes) { + let names = {}; + nodes.forEach(n => { + let routeWithSameOutletName = names[n.value.outlet]; + if (routeWithSameOutletName) { + const p = routeWithSameOutletName.urlSegments.value.map(s => s.toString()).join("/"); + const c = n.value.urlSegments.value.map(s => s.toString()).join("/"); + throw new Error(`Two segments cannot have the same outlet name: '${p}' and '${c}'.`); + } + names[n.value.outlet] = n.value; + }); + return nodes; +} +function match(config, url) { + const m = matchNonIndex(config, url); + if (m) + return m; + const mIndex = matchIndex(config, url); + if (mIndex) + return mIndex; + const availableRoutes = config.map(r => { + const outlet = !r.outlet ? '' : `${r.outlet}:`; + return `'${outlet}${r.path}'`; + }).join(", "); + throw new Error(`Cannot match any routes. Current segment: '${url.value}'. Available routes: [${availableRoutes}].`); +} +function matchNonIndex(config, url) { + for (let r of config) { + let m = matchWithParts(r, url); + if (m) + return m; + } + return null; +} +function matchIndex(config, url) { + for (let r of config) { + if (r.index) { + const outlet = r.outlet ? r.outlet : PRIMARY_OUTLET; + const children = r.children ? r.children : []; + return new MatchResult(r.component, children, [], {}, [url], [], outlet); + } + } + return null; +} +function matchWithParts(route, url) { + if (!route.path) + return null; + if ((route.outlet ? route.outlet : PRIMARY_OUTLET) !== url.value.outlet) + return null; + const path = route.path.startsWith("/") ? route.path.substring(1) : route.path; + if (path === "**") { + const consumedUrl = []; + let u = url; + while (u) { + consumedUrl.push(u.value); + u = first(u.children); + } + const last = consumedUrl[consumedUrl.length - 1]; + return new MatchResult(route.component, [], consumedUrl, last.parameters, [], [], PRIMARY_OUTLET); + } + const parts = path.split("/"); + const positionalParams = {}; + const consumedUrlSegments = []; + let lastParent = null; + let lastSegment = null; + let current = url; + for (let i = 0; i < parts.length; ++i) { + if (!current) + return null; + const p = parts[i]; + const isLastSegment = i === parts.length - 1; + const isLastParent = i === parts.length - 2; + const isPosParam = p.startsWith(":"); + if (!isPosParam && p != current.value.path) + return null; + if (isLastSegment) { + lastSegment = current; + } + if (isLastParent) { + lastParent = current; + } + if (isPosParam) { + positionalParams[p.substring(1)] = current.value.path; + } + consumedUrlSegments.push(current.value); + current = first(current.children); + } + if (!lastSegment) + throw "Cannot be reached"; + const p = lastSegment.value.parameters; + const parameters = merge(p, positionalParams); + const secondarySubtrees = lastParent ? lastParent.children.slice(1) : []; + const children = route.children ? route.children : []; + const outlet = route.outlet ? route.outlet : PRIMARY_OUTLET; + return new MatchResult(route.component, children, consumedUrlSegments, parameters, lastSegment.children, secondarySubtrees, outlet); +} +class MatchResult { + constructor(component, children, consumedUrlSegments, parameters, leftOverUrl, secondary, outlet) { + this.component = component; + this.children = children; + this.consumedUrlSegments = consumedUrlSegments; + this.parameters = parameters; + this.leftOverUrl = leftOverUrl; + this.secondary = secondary; + this.outlet = outlet; + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb2duaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JlY29nbml6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiT0FDTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CO09BQ25ELEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWM7T0FDMUMsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCO09BQ3JELEVBQVUsY0FBYyxFQUFFLE1BQU0sVUFBVTtPQUcxQyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQjtPQUNyQyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQjtBQUV0RCwwQkFBMEIsTUFBb0IsRUFBRSxHQUFZLEVBQUUsYUFBMEI7SUFDdEYsSUFBSSxDQUFDO1FBQ0gsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUMxSCxhQUFhLENBQUMsV0FBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDckQsYUFBYSxDQUFDLFFBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sS0FBSyxHQUFHLHVCQUF1QixDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUN0RSxNQUFNLEdBQUcsR0FBRyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekYsTUFBTSxDQUFDLElBQUks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QUssQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDO0lBRTVELE1BQU0sQ0FBQyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFDckcsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVEO0lBQ0UsWUFBbUIsU0FBd0IsRUFDeEIsUUFBaUIsRUFDakIsbUJBQWlDLEVBQ2pDLFVBQW1DLEVBQ25DLFdBQW1DLEVBQ25DLFNBQWlDLEVBQ2pDLE1BQWM7UUFOZCxjQUFTLEdBQVQsU0FBUyxDQUFlO1FBQ3hCLGFBQVEsR0FBUixRQUFRLENBQVM7UUFDakIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFjO1FBQ2pDLGVBQVUsR0FBVixVQUFVLENBQXlCO1FBQ25DLGdCQUFXLEdBQVgsV0FBVyxDQUF3QjtRQUNuQyxjQUFTLEdBQVQsU0FBUyxDQUF3QjtRQUNqQyxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQzlCLENBQUM7QUFDTixDQUFDO0FBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVcmxUcmVlLCBVcmxTZWdtZW50IH0gZnJvbSAnLi91cmxfdHJlZSc7XG5pbXBvcnQgeyBmbGF0dGVuLCBmaXJzdCwgbWVyZ2UgfSBmcm9tICcuL3V0aWxzL2NvbGxlY3Rpb24nO1xuaW1wb3J0IHsgVHJlZU5vZGUsIHJvb3ROb2RlIH0gZnJvbSAnLi91dGlscy90cmVlJztcbmltcG9ydCB7IFJvdXRlclN0YXRlLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJy4vcm91dGVyX3N0YXRlJztcbmltcG9ydCB7IFBhcmFtcywgUFJJTUFSWV9PVVRMRVQgfSBmcm9tICcuL3NoYXJlZCc7XG5pbXBvcnQgeyBSb3V0ZXJDb25maWcsIFJvdXRlIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMvT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzL0JlaGF2aW9yU3ViamVjdCc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWNvZ25pemUoY29uZmlnOiBSb3V0ZXJDb25maWcsIHVybDogVXJsVHJlZSwgZXhpc3RpbmdTdGF0ZTogUm91dGVyU3RhdGUpOiBPYnNlcnZhYmxlPFJvdXRlclN0YXRlPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgbWF0Y2ggPSBuZXcgTWF0Y2hSZXN1bHQoZXhpc3RpbmdTdGF0ZS5yb290LmNvbXBvbmVudCwgY29uZmlnLCBbdXJsLnJvb3RdLCB7fSwgcm9vdE5vZGUodXJsKS5jaGlsZHJlbiwgW10sIFBSSU1BUllfT1VUTEVUKTtcbiAgICAoPGFueT5leGlzdGluZ1N0YXRlLnF1ZXJ5UGFyYW1zKS5uZXh0KHVybC5xdWVyeVBhcmFtZXRlcnMpO1xuICAgICg8YW55PmV4aXN0aW5nU3RhdGUuZnJhZ21lbnQpLm5leHQodXJsLmZyYWdtZW50KTtcbiAgICBjb25zdCByb290cyA9IGNvbnN0cnVjdEFjdGl2YXRlZFJvdXRlKG1hdGNoLCByb290Tm9kZShleGlzdGluZ1N0YXRlKSk7XG4gICAgY29uc3QgcmVzID0gbmV3IFJvdXRlclN0YXRlKHJvb3RzWzBdLCBleGlzdGluZ1N0YXRlLnF1ZXJ5UGFyYW1zLCBleGlzdGluZ1N0YXRlLmZyYWdtZW50KTtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8Um91dGVyU3RhdGU+KG9icyA9PiB7XG4gICAgICBvYnMubmV4dChyZXMpO1xuICAgICAgb2JzLmNvbXBsZXRlKCk7XG4gICAgfSk7XG4gIH0gY2F0Y2goZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxSb3V0ZXJTdGF0ZT4ob2JzID0+IG9icy5lcnJvcihlKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29uc3RydWN0QWN0aXZhdGVkUm91dGUobWF0Y2g6IE1hdGNoUmVzdWx0LCBleGlzdGluZ1JvdXRlOiBUcmVlTm9kZTxBY3RpdmF0ZWRSb3V0ZT4gfCBudWxsKTogVHJlZU5vZGU8QWN0aXZhdGVkUm91dGU+W10ge1xuICBjb25zdCBhY3RpdmF0ZWRSb3V0ZSA9IGNyZWF0ZU9yUmV1c2VSb3V0ZShtYXRjaCwgZXhpc3RpbmdSb3V0ZSk7XG4gIGNvbnN0IGV4aXN0aW5nQ2hpbGRyZW4gPSBleGlzdGluZ1JvdXRlID8gZXhpc3RpbmdSb3V0ZS5jaGlsZHJlbiA6IFtdO1xuXG4gIGlmIChtYXRjaC5sZWZ0T3ZlclVybC5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSByZWNvZ25pemVNYW55KG1hdGNoLmNoaWxkcmVuLCBtYXRjaC5sZWZ0T3ZlclVybCwgZXhpc3RpbmdDaGlsZHJlbik7XG4gICAgY2hlY2tPdXRsZXROYW1lVW5pcXVlbmVzcyhjaGlsZHJlbik7XG4gICAgcmV0dXJuIFtuZXcgVHJlZU5vZGU8QWN0aXZhdGVkUm91dGU+KGFjdGl2YXRlZFJvdXRlLCBjaGlsZHJlbildO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBbbmV3IFRyZWVOb2RlPEFjdGl2YXRlZFJvdXRlPihhY3RpdmF0ZWRSb3V0ZSwgW10pXTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWNvZ25pemVNYW55KGNvbmZpZzogUm91dGVbXSwgdXJsczogVHJlZU5vZGU8VXJsU2VnbWVudD5bXSxcbiAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdSb3V0ZXM6IFRyZWVOb2RlPEFjdGl2YXRlZFJvdXRlPltdKTogVHJlZU5vZGU8QWN0aXZhdGVkUm91dGU+W10ge1xuICByZXR1cm4gZmxhdHRlbih1cmxzLm1hcCh1cmwgPT4gcmVjb2duaXplT25lKGNvbmZpZywgdXJsLCBleGlzdGluZ1JvdXRlcykpKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3JSZXVzZVJvdXRlKG1hdGNoOiBNYXRjaFJlc3VsdCwgZXhpc3Rpbmc6IFRyZWVOb2RlPEFjdGl2YXRlZFJvdXRlPiB8IG51bGwpOiBBY3RpdmF0ZWRSb3V0ZSB7XG4gIGlmIChleGlzdGluZykge1xuICAgIGNvbnN0IHYgPSBleGlzdGluZy52YWx1ZTtcbiAgICBpZiAodi5jb21wb25lbnQgPT09IG1hdGNoLmNvbXBvbmVudCAmJiB2Lm91dGxldCA9PT0gbWF0Y2gub3V0bGV0KSB7XG4gICAgICAoPGFueT4odi5wYXJhbXMpKS5uZXh0KG1hdGNoLnBhcmFtZXRlcnMpO1xuICAgICAgKDxhbnk+KHYudXJsU2VnbWVudHMpKS5uZXh0KG1hdGNoLmNvbnN1bWVkVXJsU2VnbWVudHMpO1xuICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXcgQWN0aXZhdGVkUm91dGUobmV3IEJlaGF2aW9yU3ViamVjdChtYXRjaC5jb25zdW1lZFVybFNlZ21lbnRzKSwgbmV3IEJlaGF2aW9yU3ViamVjdChtYXRjaC5wYXJhbWV0ZXJzKSwgbWF0Y2gub3V0bGV0LCBtYXRjaC5jb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiByZWNvZ25pemVPbmUoY29uZmlnOiBSb3V0ZVtdLCB1cmw6IFRyZWVOb2RlPFVybFNlZ21lbnQ+LFxuICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nUm91dGVzOiBUcmVlTm9kZTxBY3RpdmF0ZWRSb3V0ZT5bXSk6IFRyZWVOb2RlPEFjdGl2YXRlZFJvdXRlPltdIHtcbiAgbGV0IG0gPSBtYXRjaChjb25maWcsIHVybCk7XG5cbiAgY29uc3Qgcm91dGVzV2l0aFJpZ2h0T3V0bGV0ID0gZXhpc3RpbmdSb3V0ZXMuZmlsdGVyKHIgPT4gci52YWx1ZS5vdXRsZXQgPT0gbS5vdXRsZXQpO1xuICBjb25zdCByb3V0ZVdpdGhSaWdodE91dGxldCA9IHJvdXRlc1dpdGhSaWdodE91dGxldC5sZW5ndGggPiAwID8gcm91dGVzV2l0aFJpZ2h0T3V0bGV0WzBdIDogbnVsbDtcblxuICBjb25zdCBwcmltYXJ5ID0gY29uc3RydWN0QWN0aXZhdGVkUm91dGUobSwgcm91dGVXaXRoUmlnaHRPdXRsZXQpO1xuICBjb25zdCBzZWNvbmRhcnkgPSByZWNvZ25pemVNYW55KGNvbmZpZywgbS5zZWNvbmRhcnksIGV4aXN0aW5nUm91dGVzKTtcbiAgY29uc3QgcmVzID0gcHJpbWFyeS5jb25jYXQoc2Vjb25kYXJ5KTtcbiAgY2hlY2tPdXRsZXROYW1lVW5pcXVlbmVzcyhyZXMpO1xuICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBjaGVja091dGxldE5hbWVVbmlxdWVuZXNzKG5vZGVzOiBUcmVlTm9kZTxBY3RpdmF0ZWRSb3V0ZT5bXSk6IFRyZWVOb2RlPEFjdGl2YXRlZFJvdXRlPltdIHtcbiAgbGV0IG5hbWVzID0ge307XG4gIG5vZGVzLmZvckVhY2gobiA9PiB7XG4gICAgbGV0IHJvdXRlV2l0aFNhbWVPdXRsZXROYW1lID0gbmFtZXNbbi52YWx1ZS5vdXRsZXRdO1xuICAgIGlmIChyb3V0ZVdpdGhTYW1lT3V0bGV0TmFtZSkge1xuICAgICAgY29uc3QgcCA9ICg8YW55PnJvdXRlV2l0aFNhbWVPdXRsZXROYW1lLnVybFNlZ21lbnRzKS52YWx1ZS5tYXAocyA9PiBzLnRvU3RyaW5nKCkpLmpvaW4oXCIvXCIpO1xuICAgICAgY29uc3QgYyA9ICg8YW55Pm4udmFsdWUudXJsU2VnbWVudHMpLnZhbHVlLm1hcChzID0+IHMudG9TdHJpbmcoKSkuam9pbihcIi9cIik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFR3byBzZWdtZW50cyBjYW5ub3QgaGF2ZSB0aGUgc2FtZSBvdXRsZXQgbmFtZTogJyR7cH0nIGFuZCAnJHtjfScuYCk7XG4gICAgfVxuICAgIG5hbWVzW24udmFsdWUub3V0bGV0XSA9IG4udmFsdWU7XG4gIH0pO1xuICByZXR1cm4gbm9kZXM7XG59XG5cbmZ1bmN0aW9uIG1hdGNoKGNvbmZpZzogUm91dGVbXSwgdXJsOiBUcmVlTm9kZTxVcmxTZWdtZW50Pik6IE1hdGNoUmVzdWx0IHtcbiAgY29uc3QgbSA9IG1hdGNoTm9uSW5kZXgoY29uZmlnLCB1cmwpO1xuICBpZiAobSkgcmV0dXJuIG07XG5cbiAgY29uc3QgbUluZGV4ID0gbWF0Y2hJbmRleChjb25maWcsIHVybCk7XG4gIGlmIChtSW5kZXgpIHJldHVybiBtSW5kZXg7XG5cbiAgY29uc3QgYXZhaWxhYmxlUm91dGVzID0gY29uZmlnLm1hcChyID0+IHtcbiAgICBjb25zdCBvdXRsZXQgPSAhci5vdXRsZXQgPyAnJyA6IGAke3Iub3V0bGV0fTpgO1xuICAgIHJldHVybiBgJyR7b3V0bGV0fSR7ci5wYXRofSdgO1xuICB9KS5qb2luKFwiLCBcIik7XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgQ2Fubm90IG1hdGNoIGFueSByb3V0ZXMuIEN1cnJlbnQgc2VnbWVudDogJyR7dXJsLnZhbHVlfScuIEF2YWlsYWJsZSByb3V0ZXM6IFske2F2YWlsYWJsZVJvdXRlc31dLmApO1xufVxuXG5mdW5jdGlvbiBtYXRjaE5vbkluZGV4KGNvbmZpZzogUm91dGVbXSwgdXJsOiBUcmVlTm9kZTxVcmxTZWdtZW50Pik6IE1hdGNoUmVzdWx0IHwgbnVsbCB7XG4gIGZvciAobGV0IHIgb2YgY29uZmlnKSB7XG4gICAgbGV0IG0gPSBtYXRjaFdpdGhQYXJ0cyhyLCB1cmwpO1xuICAgIGlmIChtKSByZXR1cm4gbTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gbWF0Y2hJbmRleChjb25maWc6IFJvdXRlW10sIHVybDogVHJlZU5vZGU8VXJsU2VnbWVudD4pOiBNYXRjaFJlc3VsdCB8IG51bGwge1xuICBmb3IgKGxldCByIG9mIGNvbmZpZykge1xuICAgIGlmIChyLmluZGV4KSB7XG4gICAgICBjb25zdCBvdXRsZXQgPSByLm91dGxldCA/IHIub3V0bGV0IDogUFJJTUFSWV9PVVRMRVQ7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHIuY2hpbGRyZW4gPyByLmNoaWxkcmVuIDogW107XG4gICAgICByZXR1cm4gbmV3IE1hdGNoUmVzdWx0KHIuY29tcG9uZW50LCBjaGlsZHJlbiwgW10sIHt9LCBbdXJsXSwgW10sIG91dGxldCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBtYXRjaFdpdGhQYXJ0cyhyb3V0ZTogUm91dGUsIHVybDogVHJlZU5vZGU8VXJsU2VnbWVudD4pOiBNYXRjaFJlc3VsdCB8IG51bGwge1xuICBpZiAoIXJvdXRlLnBhdGgpIHJldHVybiBudWxsO1xuICBpZiAoKHJvdXRlLm91dGxldCA/IHJvdXRlLm91dGxldCA6IFBSSU1BUllfT1VUTEVUKSAhPT0gdXJsLnZhbHVlLm91dGxldCkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgcGF0aCA9IHJvdXRlLnBhdGguc3RhcnRzV2l0aChcIi9cIikgPyByb3V0ZS5wYXRoLnN1YnN0cmluZygxKSA6IHJvdXRlLnBhdGg7XG4gIGlmIChwYXRoID09PSBcIioqXCIpIHtcbiAgICBjb25zdCBjb25zdW1lZFVybCA9IFtdO1xuICAgIGxldCB1OlRyZWVOb2RlPFVybFNlZ21lbnQ+fG51bGwgPSB1cmw7XG4gICAgd2hpbGUgKHUpIHtcbiAgICAgIGNvbnN1bWVkVXJsLnB1c2godS52YWx1ZSk7XG4gICAgICB1ID0gZmlyc3QodS5jaGlsZHJlbik7XG4gICAgfVxuICAgIGNvbnN0IGxhc3QgPSBjb25zdW1lZFVybFtjb25zdW1lZFVybC5sZW5ndGggLSAxXTtcbiAgICByZXR1cm4gbmV3IE1hdGNoUmVzdWx0KHJvdXRlLmNvbXBvbmVudCwgW10sIGNvbnN1bWVkVXJsLCBsYXN0LnBhcmFtZXRlcnMsIFtdLCBbXSwgUFJJTUFSWV9PVVRMRVQpO1xuICB9XG5cbiAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKTtcbiAgY29uc3QgcG9zaXRpb25hbFBhcmFtcyA9IHt9O1xuICBjb25zdCBjb25zdW1lZFVybFNlZ21lbnRzID0gW107XG5cbiAgbGV0IGxhc3RQYXJlbnQ6IFRyZWVOb2RlPFVybFNlZ21lbnQ+fG51bGwgPSBudWxsO1xuICBsZXQgbGFzdFNlZ21lbnQ6IFRyZWVOb2RlPFVybFNlZ21lbnQ+fG51bGwgPSBudWxsO1xuXG4gIGxldCBjdXJyZW50OiBUcmVlTm9kZTxVcmxTZWdtZW50PnxudWxsID0gdXJsO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCFjdXJyZW50KSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHAgPSBwYXJ0c1tpXTtcbiAgICBjb25zdCBpc0xhc3RTZWdtZW50ID0gaSA9PT0gcGFydHMubGVuZ3RoIC0gMTtcbiAgICBjb25zdCBpc0xhc3RQYXJlbnQgPSBpID09PSBwYXJ0cy5sZW5ndGggLSAyO1xuICAgIGNvbnN0IGlzUG9zUGFyYW0gPSBwLnN0YXJ0c1dpdGgoXCI6XCIpO1xuXG4gICAgaWYgKCFpc1Bvc1BhcmFtICYmIHAgIT0gY3VycmVudC52YWx1ZS5wYXRoKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoaXNMYXN0U2VnbWVudCkge1xuICAgICAgbGFzdFNlZ21lbnQgPSBjdXJyZW50O1xuICAgIH1cbiAgICBpZiAoaXNMYXN0UGFyZW50KSB7XG4gICAgICBsYXN0UGFyZW50ID0gY3VycmVudDtcbiAgICB9XG5cbiAgICBpZiAoaXNQb3NQYXJhbSkge1xuICAgICAgcG9zaXRpb25hbFBhcmFtc1twLnN1YnN0cmluZygxKV0gPSBjdXJyZW50LnZhbHVlLnBhdGg7XG4gICAgfVxuXG4gICAgY29uc3VtZWRVcmxTZWdtZW50cy5wdXNoKGN1cnJlbnQudmFsdWUpO1xuXG4gICAgY3VycmVudCA9IGZpcnN0KGN1cnJlbnQuY2hpbGRyZW4pO1xuICB9XG5cbiAgaWYgKCFsYXN0U2VnbWVudCkgdGhyb3cgXCJDYW5ub3QgYmUgcmVhY2hlZFwiO1xuXG4gIGNvbnN0IHAgPSBsYXN0U2VnbWVudC52YWx1ZS5wYXJhbWV0ZXJzO1xuICBjb25zdCBwYXJhbWV0ZXJzID0gPHtba2V5OiBzdHJpbmddOiBzdHJpbmd9Pm1lcmdlKHAsIHBvc2l0aW9uYWxQYXJhbXMpO1xuICBjb25zdCBzZWNvbmRhcnlTdWJ0cmVlcyA9IGxhc3RQYXJlbnQgPyBsYXN0UGFyZW50LmNoaWxkcmVuLnNsaWNlKDEpIDogW107XG4gIGNvbnN0IGNoaWxkcmVuID0gcm91dGUuY2hpbGRyZW4gPyByb3V0ZS5jaGlsZHJlbiA6IFtdO1xuICBjb25zdCBvdXRsZXQgPSByb3V0ZS5vdXRsZXQgPyByb3V0ZS5vdXRsZXQgOiBQUklNQVJZX09VVExFVDtcblxuICByZXR1cm4gbmV3IE1hdGNoUmVzdWx0KHJvdXRlLmNvbXBvbmVudCwgY2hpbGRyZW4sIGNvbnN1bWVkVXJsU2VnbWVudHMsIHBhcmFtZXRlcnMsIGxhc3RTZWdtZW50LmNoaWxkcmVuLFxuICAgIHNlY29uZGFyeVN1YnRyZWVzLCBvdXRsZXQpO1xufVxuXG5jbGFzcyBNYXRjaFJlc3VsdCB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjb21wb25lbnQ6IFR5cGUgfCBzdHJpbmcsXG4gICAgICAgICAgICAgIHB1YmxpYyBjaGlsZHJlbjogUm91dGVbXSxcbiAgICAgICAgICAgICAgcHVibGljIGNvbnN1bWVkVXJsU2VnbWVudHM6IFVybFNlZ21lbnRbXSxcbiAgICAgICAgICAgICAgcHVibGljIHBhcmFtZXRlcnM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9LFxuICAgICAgICAgICAgICBwdWJsaWMgbGVmdE92ZXJVcmw6IFRyZWVOb2RlPFVybFNlZ21lbnQ+W10sXG4gICAgICAgICAgICAgIHB1YmxpYyBzZWNvbmRhcnk6IFRyZWVOb2RlPFVybFNlZ21lbnQ+W10sXG4gICAgICAgICAgICAgIHB1YmxpYyBvdXRsZXQ6IHN0cmluZ1xuICApIHt9XG59Il19 \ No newline at end of file diff --git a/modules/@angular/router/build/es6/src/router.d.ts b/modules/@angular/router/build/es6/src/router.d.ts new file mode 100644 index 0000000000..7fd1b6a794 --- /dev/null +++ b/modules/@angular/router/build/es6/src/router.d.ts @@ -0,0 +1,40 @@ +import { ComponentResolver } from '@angular/core'; +import { Location } from '@angular/common'; +import { UrlSerializer } from './url_serializer'; +import { RouterOutletMap } from './router_outlet_map'; +import { UrlTree } from './url_tree'; +import { Params } from './shared'; +import { RouterState, ActivatedRoute } from './router_state'; +import { RouterConfig } from './config'; +import { Observable } from 'rxjs/Observable'; +import 'rxjs/add/operator/map'; +import 'rxjs/add/operator/mergeMap'; +import 'rxjs/add/operator/toPromise'; +export interface NavigationExtras { + relativeTo?: ActivatedRoute; + queryParameters?: Params; + fragment?: string; +} +export declare class Router { + private rootComponent; + private resolver; + private urlSerializer; + private outletMap; + private location; + private currentUrlTree; + private currentRouterState; + private config; + private locationSubscription; + constructor(rootComponent: Object, resolver: ComponentResolver, urlSerializer: UrlSerializer, outletMap: RouterOutletMap, location: Location); + readonly routerState: RouterState; + readonly urlTree: UrlTree; + navigateByUrl(url: string): Observable; + resetConfig(config: RouterConfig): void; + dispose(): void; + createUrlTree(commands: any[], {relativeTo, queryParameters, fragment}?: NavigationExtras): UrlTree; + navigate(commands: any[], extras?: NavigationExtras): Observable; + serializeUrl(url: UrlTree): string; + parseUrl(url: string): UrlTree; + private setUpLocationChangeListener(); + private runNavigate(url, pop?); +} diff --git a/modules/@angular/router/build/es6/src/router.js b/modules/@angular/router/build/es6/src/router.js new file mode 100644 index 0000000000..32029bef2a --- /dev/null +++ b/modules/@angular/router/build/es6/src/router.js @@ -0,0 +1,138 @@ +import { ReflectiveInjector } from '@angular/core'; +import { RouterOutletMap } from './router_outlet_map'; +import { recognize } from './recognize'; +import { rootNode } from './utils/tree'; +import { createEmptyUrlTree } from './url_tree'; +import { PRIMARY_OUTLET } from './shared'; +import { createEmptyState, ActivatedRoute } from './router_state'; +import { createUrlTree } from './create_url_tree'; +import { forEach } from './utils/collection'; +import 'rxjs/add/operator/map'; +import 'rxjs/add/operator/mergeMap'; +import 'rxjs/add/operator/toPromise'; +import { fromPromise } from 'rxjs/observable/fromPromise'; +import { forkJoin } from 'rxjs/observable/forkJoin'; +export class Router { + constructor(rootComponent, resolver, urlSerializer, outletMap, location) { + this.rootComponent = rootComponent; + this.resolver = resolver; + this.urlSerializer = urlSerializer; + this.outletMap = outletMap; + this.location = location; + this.currentUrlTree = createEmptyUrlTree(); + this.currentRouterState = createEmptyState(rootComponent.constructor); + this.setUpLocationChangeListener(); + this.navigateByUrl(this.location.path()); + } + get routerState() { + return this.currentRouterState; + } + get urlTree() { + return this.currentUrlTree; + } + navigateByUrl(url) { + const urlTree = this.urlSerializer.parse(url); + return this.runNavigate(urlTree, false); + } + resetConfig(config) { + this.config = config; + } + dispose() { this.locationSubscription.unsubscribe(); } + createUrlTree(commands, { relativeTo, queryParameters, fragment } = {}) { + const a = relativeTo ? relativeTo : this.routerState.root; + return createUrlTree(a, this.currentUrlTree, commands, queryParameters, fragment); + } + navigate(commands, extras = {}) { + return this.runNavigate(this.createUrlTree(commands, extras)); + } + serializeUrl(url) { return this.urlSerializer.serialize(url); } + parseUrl(url) { return this.urlSerializer.parse(url); } + setUpLocationChangeListener() { + this.locationSubscription = this.location.subscribe((change) => { + this.runNavigate(this.urlSerializer.parse(change['url']), change['pop']); + }); + } + runNavigate(url, pop) { + const r = recognize(this.config, url, this.currentRouterState).mergeMap((newState) => { + return new ActivateRoutes(this.resolver, newState, this.currentRouterState).activate(this.outletMap).map(() => { + this.currentUrlTree = url; + this.currentRouterState = newState; + if (!pop) { + this.location.go(this.urlSerializer.serialize(url)); + } + }); + }); + r.subscribe((a) => { }, (e) => { }, () => { }); + return r; + } +} +class ActivateRoutes { + constructor(resolver, futureState, currState) { + this.resolver = resolver; + this.futureState = futureState; + this.currState = currState; + } + activate(parentOutletMap) { + const currRoot = this.currState ? rootNode(this.currState) : null; + const futureRoot = rootNode(this.futureState); + return this.activateChildRoutes(futureRoot, currRoot, parentOutletMap); + } + activateChildRoutes(futureNode, currNode, outletMap) { + const prevChildren = nodeChildrenAsMap(currNode); + const observables = []; + futureNode.children.forEach(c => { + observables.push(this.activateRoutes(c, prevChildren[c.value.outlet], outletMap).toPromise()); + delete prevChildren[c.value.outlet]; + }); + forEach(prevChildren, (v, k) => this.deactivateOutletAndItChildren(outletMap._outlets[k])); + return forkJoin(observables); + } + activateRoutes(futureNode, currNode, parentOutletMap) { + const future = futureNode.value; + const curr = currNode ? currNode.value : null; + const outlet = getOutlet(parentOutletMap, futureNode.value); + if (future === curr) { + return this.activateChildRoutes(futureNode, currNode, outlet.outletMap); + } + else { + this.deactivateOutletAndItChildren(outlet); + const outletMap = new RouterOutletMap(); + return this.activateNewRoutes(outletMap, future, outlet).mergeMap(() => this.activateChildRoutes(futureNode, currNode, outletMap)); + } + } + activateNewRoutes(outletMap, future, outlet) { + const resolved = ReflectiveInjector.resolve([ + { provide: ActivatedRoute, useValue: future }, + { provide: RouterOutletMap, useValue: outletMap } + ]); + return fromPromise(this.resolver.resolveComponent(future.component)). + map(factory => outlet.activate(factory, resolved, outletMap)); + } + deactivateOutletAndItChildren(outlet) { + if (outlet && outlet.isActivated) { + forEach(outlet.outletMap._outlets, (v, k) => this.deactivateOutletAndItChildren(v)); + outlet.deactivate(); + } + } +} +function nodeChildrenAsMap(node) { + return node ? + node.children.reduce((m, c) => { + m[c.value.outlet] = c; + return m; + }, {}) : + {}; +} +function getOutlet(outletMap, route) { + let outlet = outletMap._outlets[route.outlet]; + if (!outlet) { + if (route.outlet === PRIMARY_OUTLET) { + throw new Error(`Cannot find primary outlet`); + } + else { + throw new Error(`Cannot find the outlet ${route.outlet}`); + } + } + return outlet; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiT0FBTyxFQUFxQixrQkFBa0IsRUFBRSxNQUFNLGVBQWU7T0FHOUQsRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUI7T0FDOUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhO09BQ2hDLEVBQUUsUUFBUSxFQUFZLE1BQU0sY0FBYztPQUMxQyxFQUFXLGtCQUFrQixFQUFFLE1BQU0sWUFBWTtPQUNqRCxFQUFFLGNBQWMsRUFBVSxNQUFNLFVBQVU7T0FDMUMsRUFBRSxnQkFBZ0IsRUFBZSxjQUFjLEVBQUMsTUFBTSxnQkFBZ0I7T0FHdEUsRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUI7T0FDMUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0I7T0FHckMsdUJBQXVCO09BQ3ZCLDRCQUE0QjtPQUM1Qiw2QkFBNkI7T0FDN0IsRUFBQyxXQUFXLEVBQUMsTUFBTSw2QkFBNkI7T0FDaEQsRUFBQyxRQUFRLEVBQUMsTUFBTSwwQkFBMEI7QUFPakQ7SUFTRSxZQUFvQixhQUFvQixFQUFVLFFBQTJCLEVBQVUsYUFBNEIsRUFBVSxTQUEwQixFQUFVLFFBQWtCO1FBQS9KLGtCQUFhLEdBQWIsYUFBYSxDQUFPO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBbUI7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFVLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNqTCxJQUFJLENBQUMsY0FBYyxHQUFHLGtCQUFrQixFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGdCQUFnQixDQUFNLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMs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QUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDcEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzVELENBQUM7SUFDSCxDQUFDO0lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVzb2x2ZXIsIFJlZmxlY3RpdmVJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVXJsU2VyaWFsaXplciB9IGZyb20gJy4vdXJsX3NlcmlhbGl6ZXInO1xuaW1wb3J0IHsgUm91dGVyT3V0bGV0TWFwIH0gZnJvbSAnLi9yb3V0ZXJfb3V0bGV0X21hcCc7XG5pbXBvcnQgeyByZWNvZ25pemUgfSBmcm9tICcuL3JlY29nbml6ZSc7XG5pbXBvcnQgeyByb290Tm9kZSwgVHJlZU5vZGUgfSBmcm9tICcuL3V0aWxzL3RyZWUnO1xuaW1wb3J0IHsgVXJsVHJlZSwgY3JlYXRlRW1wdHlVcmxUcmVlIH0gZnJvbSAnLi91cmxfdHJlZSc7XG5pbXBvcnQgeyBQUklNQVJZX09VVExFVCwgUGFyYW1zIH0gZnJvbSAnLi9zaGFyZWQnO1xuaW1wb3J0IHsgY3JlYXRlRW1wdHlTdGF0ZSwgUm91dGVyU3RhdGUsIEFjdGl2YXRlZFJvdXRlfSBmcm9tICcuL3JvdXRlcl9zdGF0ZSc7XG5pbXBvcnQgeyBSb3V0ZXJDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBSb3V0ZXJPdXRsZXQgfSBmcm9tICcuL2RpcmVjdGl2ZXMvcm91dGVyX291dGxldCc7XG5pbXBvcnQgeyBjcmVhdGVVcmxUcmVlIH0gZnJvbSAnLi9jcmVhdGVfdXJsX3RyZWUnO1xuaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gJy4vdXRpbHMvY29sbGVjdGlvbic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcy9PYnNlcnZhYmxlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMvU3Vic2NyaXB0aW9uJztcbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvbWFwJztcbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvbWVyZ2VNYXAnO1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci90b1Byb21pc2UnO1xuaW1wb3J0IHtmcm9tUHJvbWlzZX0gZnJvbSAncnhqcy9vYnNlcnZhYmxlL2Zyb21Qcm9taXNlJztcbmltcG9ydCB7Zm9ya0pvaW59IGZyb20gJ3J4anMvb2JzZXJ2YWJsZS9mb3JrSm9pbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmF2aWdhdGlvbkV4dHJhcyB7IHJlbGF0aXZlVG8/OiBBY3RpdmF0ZWRSb3V0ZTsgcXVlcnlQYXJhbWV0ZXJzPzogUGFyYW1zOyBmcmFnbWVudD86IHN0cmluZzsgfVxuXG4vKipcbiAqIFRoZSBgUm91dGVyYCBpcyByZXNwb25zaWJsZSBmb3IgbWFwcGluZyBVUkxzIHRvIGNvbXBvbmVudHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBSb3V0ZXIge1xuICBwcml2YXRlIGN1cnJlbnRVcmxUcmVlOiBVcmxUcmVlO1xuICBwcml2YXRlIGN1cnJlbnRSb3V0ZXJTdGF0ZTogUm91dGVyU3RhdGU7XG4gIHByaXZhdGUgY29uZmlnOiBSb3V0ZXJDb25maWc7XG4gIHByaXZhdGUgbG9jYXRpb25TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvb3RDb21wb25lbnQ6T2JqZWN0LCBwcml2YXRlIHJlc29sdmVyOiBDb21wb25lbnRSZXNvbHZlciwgcHJpdmF0ZSB1cmxTZXJpYWxpemVyOiBVcmxTZXJpYWxpemVyLCBwcml2YXRlIG91dGxldE1hcDogUm91dGVyT3V0bGV0TWFwLCBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbikge1xuICAgIHRoaXMuY3VycmVudFVybFRyZWUgPSBjcmVhdGVFbXB0eVVybFRyZWUoKTtcbiAgICB0aGlzLmN1cnJlbnRSb3V0ZXJTdGF0ZSA9IGNyZWF0ZUVtcHR5U3RhdGUoPGFueT5yb290Q29tcG9uZW50LmNvbnN0cnVjdG9yKTtcbiAgICB0aGlzLnNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpO1xuICAgIHRoaXMubmF2aWdhdGVCeVVybCh0aGlzLmxvY2F0aW9uLnBhdGgoKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCByb3V0ZSBzdGF0ZS5cbiAgICovXG4gIGdldCByb3V0ZXJTdGF0ZSgpOiBSb3V0ZXJTdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFJvdXRlclN0YXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgdXJsIHRyZWUuXG4gICAqL1xuICBnZXQgdXJsVHJlZSgpOiBVcmxUcmVlIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50VXJsVHJlZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOYXZpZ2F0ZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgdXJsLiBUaGlzIG5hdmlnYXRpb24gaXMgYWx3YXlzIGFic29sdXRlLlxuICAgKlxuICAgKiAjIyMgVXNhZ2VcbiAgICpcbiAgICogYGBgXG4gICAqIHJvdXRlci5uYXZpZ2F0ZUJ5VXJsKFwiL3RlYW0vMzMvdXNlci8xMVwiKTtcbiAgICogYGBgXG4gICAqL1xuICBuYXZpZ2F0ZUJ5VXJsKHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY29uc3QgdXJsVHJlZSA9IHRoaXMudXJsU2VyaWFsaXplci5wYXJzZSh1cmwpO1xuICAgIHJldHVybiB0aGlzLnJ1bk5hdmlnYXRlKHVybFRyZWUsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGNvbmZpZ3VyYXRpb24gdXNlZCBmb3IgbmF2aWdhdGlvbiBhbmQgZ2VuZXJhdGluZyBsaW5rcy5cbiAgICpcbiAgICogIyMjIFVzYWdlXG4gICAqXG4gICAqIGBgYFxuICAgKiByb3V0ZXIucmVzZXRDb25maWcoW1xuICAgKiAgeyBwYXRoOiAndGVhbS86aWQnLCBjb21wb25lbnQ6IFRlYW1DbXAsIGNoaWxkcmVuOiBbXG4gICAqICAgIHsgcGF0aDogJ3NpbXBsZScsIGNvbXBvbmVudDogU2ltcGxlQ21wIH0sXG4gICAqICAgIHsgcGF0aDogJ3VzZXIvOm5hbWUnLCBjb21wb25lbnQ6IFVzZXJDbXAgfVxuICAgKiAgXSB9XG4gICAqIF0pO1xuICAgKiBgYGBcbiAgICovXG4gIHJlc2V0Q29uZmlnKGNvbmZpZzogUm91dGVyQ29uZmlnKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBkaXNwb3NlKCk6IHZvaWQgeyB0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IH1cblxuICAvKipcbiAgICogQXBwbGllcyBhbiBhcnJheSBvZiBjb21tYW5kcyB0byB0aGUgY3VycmVudCB1cmwgdHJlZSBhbmQgY3JlYXRlc1xuICAgKiBhIG5ldyB1cmwgdHJlZS5cbiAgICpcbiAgICogV2hlbiBnaXZlbiBhbiBhY3RpdmF0ZSByb3V0ZSwgYXBwbGllcyB0aGUgZ2l2ZW4gY29tbWFuZHMgc3RhcnRpbmcgZnJvbSB0aGUgcm91dGUuXG4gICAqIFdoZW4gbm90IGdpdmVuIGEgcm91dGUsIGFwcGxpZXMgdGhlIGdpdmVuIGNvbW1hbmQgc3RhcnRpbmcgZnJvbSB0aGUgcm9vdC5cbiAgICpcbiAgICogIyMjIFVzYWdlXG4gICAqXG4gICAqIGBgYFxuICAgKiAvLyBjcmVhdGUgL3RlYW0vMzMvdXNlci8xMVxuICAgKiByb3V0ZXIuY3JlYXRlVXJsVHJlZShbJy90ZWFtJywgMzMsICd1c2VyJywgMTFdKTtcbiAgICpcbiAgICogLy8gY3JlYXRlIC90ZWFtLzMzO2V4cGFuZD10cnVlL3VzZXIvMTFcbiAgICogcm91dGVyLmNyZWF0ZVVybFRyZWUoWycvdGVhbScsIDMzLCB7ZXhwYW5kOiB0cnVlfSwgJ3VzZXInLCAxMV0pO1xuICAgKlxuICAgKiAvLyB5b3UgY2FuIGNvbGxhcHNlIHN0YXRpYyBmcmFnbWVudHMgbGlrZSB0aGlzXG4gICAqIHJvdXRlci5jcmVhdGVVcmxUcmVlKFsnL3RlYW0vMzMvdXNlcicsIHVzZXJJZF0pO1xuICAgKlxuICAgKiAvLyBhc3N1bWluZyB0aGUgY3VycmVudCB1cmwgaXMgYC90ZWFtLzMzL3VzZXIvMTFgIGFuZCB0aGUgcm91dGUgcG9pbnRzIHRvIGB1c2VyLzExYFxuICAgKlxuICAgKiAvLyBuYXZpZ2F0ZSB0byAvdGVhbS8zMy91c2VyLzExL2RldGFpbHNcbiAgICogcm91dGVyLmNyZWF0ZVVybFRyZWUoWydkZXRhaWxzJ10sIHtyZWxhdGl2ZVRvOiByb3V0ZX0pO1xuICAgKlxuICAgKiAvLyBuYXZpZ2F0ZSB0byAvdGVhbS8zMy91c2VyLzIyXG4gICAqIHJvdXRlci5jcmVhdGVVcmxUcmVlKFsnLi4vMjInXSwge3JlbGF0aXZlVG86IHJvdXRlfSk7XG4gICAqXG4gICAqIC8vIG5hdmlnYXRlIHRvIC90ZWFtLzQ0L3VzZXIvMjJcbiAgICogcm91dGVyLmNyZWF0ZVVybFRyZWUoWycuLi8uLi90ZWFtLzQ0L3VzZXIvMjInXSwge3JlbGF0aXZlVG86IHJvdXRlfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgY3JlYXRlVXJsVHJlZShjb21tYW5kczogYW55W10sIHtyZWxhdGl2ZVRvLCBxdWVyeVBhcmFtZXRlcnMsIGZyYWdtZW50fTogTmF2aWdhdGlvbkV4dHJhcyA9IHt9KTogVXJsVHJlZSB7XG4gICAgY29uc3QgYSA9IHJlbGF0aXZlVG8gPyByZWxhdGl2ZVRvIDogdGhpcy5yb3V0ZXJTdGF0ZS5yb290O1xuICAgIHJldHVybiBjcmVhdGVVcmxUcmVlKGEsIHRoaXMuY3VycmVudFVybFRyZWUsIGNvbW1hbmRzLCBxdWVyeVBhcmFtZXRlcnMsIGZyYWdtZW50KTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBhcnJheSBvZiBjb21tYW5kcyBhbmQgYSBzdGFydGluZyBwb2ludC5cbiAgICogSWYgbm8gc3RhcnRpbmcgcm91dGUgaXMgcHJvdmlkZWQsIHRoZSBuYXZpZ2F0aW9uIGlzIGFic29sdXRlLlxuICAgKlxuICAgKiAjIyMgVXNhZ2VcbiAgICpcbiAgICogYGBgXG4gICAqIHJvdXRlci5uYXZpZ2F0ZShbJ3RlYW0nLCAzMywgJ3RlYW0nLCAnMTFdLCB7cmVsYXRpdmVUbzogcm91dGV9KTtcbiAgICogYGBgXG4gICAqL1xuICBuYXZpZ2F0ZShjb21tYW5kczogYW55W10sIGV4dHJhczogTmF2aWdhdGlvbkV4dHJhcyA9IHt9KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMucnVuTmF2aWdhdGUodGhpcy5jcmVhdGVVcmxUcmVlKGNvbW1hbmRzLCBleHRyYXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEge0BsaW5rIFVybFRyZWV9IGludG8gYSBzdHJpbmcuXG4gICAqL1xuICBzZXJpYWxpemVVcmwodXJsOiBVcmxUcmVlKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodXJsKTsgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBhIHN0cmluZyBpbnRvIGEge0BsaW5rIFVybFRyZWV9LlxuICAgKi9cbiAgcGFyc2VVcmwodXJsOiBzdHJpbmcpOiBVcmxUcmVlIHsgcmV0dXJuIHRoaXMudXJsU2VyaWFsaXplci5wYXJzZSh1cmwpOyB9XG5cbiAgcHJpdmF0ZSBzZXRVcExvY2F0aW9uQ2hhbmdlTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhdGlvblN1YnNjcmlwdGlvbiA9IDxhbnk+dGhpcy5sb2NhdGlvbi5zdWJzY3JpYmUoKGNoYW5nZSkgPT4ge1xuICAgICAgdGhpcy5ydW5OYXZpZ2F0ZSh0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UoY2hhbmdlWyd1cmwnXSksIGNoYW5nZVsncG9wJ10pXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJ1bk5hdmlnYXRlKHVybDpVcmxUcmVlLCBwb3A/OmJvb2xlYW4pOk9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IHIgPSByZWNvZ25pemUodGhpcy5jb25maWcsIHVybCwgdGhpcy5jdXJyZW50Um91dGVyU3RhdGUpLm1lcmdlTWFwKChuZXdTdGF0ZTpSb3V0ZXJTdGF0ZSkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBBY3RpdmF0ZVJvdXRlcyh0aGlzLnJlc29sdmVyLCBuZXdTdGF0ZSwgdGhpcy5jdXJyZW50Um91dGVyU3RhdGUpLmFjdGl2YXRlKHRoaXMub3V0bGV0TWFwKS5tYXAoKCkgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRVcmxUcmVlID0gdXJsO1xuICAgICAgICB0aGlzLmN1cnJlbnRSb3V0ZXJTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgICBpZiAoIXBvcCkge1xuICAgICAgICAgIHRoaXMubG9jYXRpb24uZ28odGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh1cmwpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgci5zdWJzY3JpYmUoKGEpID0+IHt9LCAoZSkgPT4ge30sICgpID0+IHt9KTsgLy8gZm9yY2UgZXhlY3V0aW9uXG4gICAgcmV0dXJuIHI7XG4gIH1cbn1cblxuY2xhc3MgQWN0aXZhdGVSb3V0ZXMge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlc29sdmVyOiBDb21wb25lbnRSZXNvbHZlciwgcHJpdmF0ZSBmdXR1cmVTdGF0ZTogUm91dGVyU3RhdGUsIHByaXZhdGUgY3VyclN0YXRlOiBSb3V0ZXJTdGF0ZSkge31cblxuICBhY3RpdmF0ZShwYXJlbnRPdXRsZXRNYXA6IFJvdXRlck91dGxldE1hcCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IGN1cnJSb290ID0gdGhpcy5jdXJyU3RhdGUgPyByb290Tm9kZSh0aGlzLmN1cnJTdGF0ZSkgOiBudWxsO1xuICAgIGNvbnN0IGZ1dHVyZVJvb3QgPSByb290Tm9kZSh0aGlzLmZ1dHVyZVN0YXRlKTtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGZ1dHVyZVJvb3QsIGN1cnJSb290LCBwYXJlbnRPdXRsZXRNYXApO1xuICB9XG5cbiAgcHJpdmF0ZSBhY3RpdmF0ZUNoaWxkUm91dGVzKGZ1dHVyZU5vZGU6IFRyZWVOb2RlPEFjdGl2YXRlZFJvdXRlPixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJOb2RlOiBUcmVlTm9kZTxBY3RpdmF0ZWRSb3V0ZT4gfCBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGV0TWFwOiBSb3V0ZXJPdXRsZXRNYXApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHByZXZDaGlsZHJlbiA9IG5vZGVDaGlsZHJlbkFzTWFwKGN1cnJOb2RlKTtcbiAgICBjb25zdCBvYnNlcnZhYmxlcyA9IFtdO1xuICAgIGZ1dHVyZU5vZGUuY2hpbGRyZW4uZm9yRWFjaChjID0+IHtcbiAgICAgIG9ic2VydmFibGVzLnB1c2godGhpcy5hY3RpdmF0ZVJvdXRlcyhjLCBwcmV2Q2hpbGRyZW5bYy52YWx1ZS5vdXRsZXRdLCBvdXRsZXRNYXApLnRvUHJvbWlzZSgpKTtcbiAgICAgIGRlbGV0ZSBwcmV2Q2hpbGRyZW5bYy52YWx1ZS5vdXRsZXRdO1xuICAgIH0pO1xuICAgIGZvckVhY2gocHJldkNoaWxkcmVuLCAodiwgaykgPT4gdGhpcy5kZWFjdGl2YXRlT3V0bGV0QW5kSXRDaGlsZHJlbihvdXRsZXRNYXAuX291dGxldHNba10pKTtcbiAgICByZXR1cm4gZm9ya0pvaW4ob2JzZXJ2YWJsZXMpO1xuICB9XG5cblxuICBhY3RpdmF0ZVJvdXRlcyhmdXR1cmVOb2RlOiBUcmVlTm9kZTxBY3RpdmF0ZWRSb3V0ZT4sIGN1cnJOb2RlOiBUcmVlTm9kZTxBY3RpdmF0ZWRSb3V0ZT4sXG4gICAgICAgICAgICAgICAgIHBhcmVudE91dGxldE1hcDogUm91dGVyT3V0bGV0TWFwKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY29uc3QgZnV0dXJlID0gZnV0dXJlTm9kZS52YWx1ZTtcbiAgICBjb25zdCBjdXJyID0gY3Vyck5vZGUgPyBjdXJyTm9kZS52YWx1ZSA6IG51bGw7XG4gICAgY29uc3Qgb3V0bGV0ID0gZ2V0T3V0bGV0KHBhcmVudE91dGxldE1hcCwgZnV0dXJlTm9kZS52YWx1ZSk7XG5cbiAgICBpZiAoZnV0dXJlID09PSBjdXJyKSB7XG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGZ1dHVyZU5vZGUsIGN1cnJOb2RlLCBvdXRsZXQub3V0bGV0TWFwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWFjdGl2YXRlT3V0bGV0QW5kSXRDaGlsZHJlbihvdXRsZXQpO1xuICAgICAgY29uc3Qgb3V0bGV0TWFwID0gbmV3IFJvdXRlck91dGxldE1hcCgpO1xuICAgICAgcmV0dXJuIHRoaXMuYWN0aXZhdGVOZXdSb3V0ZXMob3V0bGV0TWFwLCBmdXR1cmUsIG91dGxldCkubWVyZ2VNYXAoKCkgPT5cbiAgICAgICAgdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGZ1dHVyZU5vZGUsIGN1cnJOb2RlLCBvdXRsZXRNYXApKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFjdGl2YXRlTmV3Um91dGVzKG91dGxldE1hcDogUm91dGVyT3V0bGV0TWFwLCBmdXR1cmU6IEFjdGl2YXRlZFJvdXRlLCBvdXRsZXQ6IFJvdXRlck91dGxldCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IHJlc29sdmVkID0gUmVmbGVjdGl2ZUluamVjdG9yLnJlc29sdmUoW1xuICAgICAge3Byb3ZpZGU6IEFjdGl2YXRlZFJvdXRlLCB1c2VWYWx1ZTogZnV0dXJlfSxcbiAgICAgIHtwcm92aWRlOiBSb3V0ZXJPdXRsZXRNYXAsIHVzZVZhbHVlOiBvdXRsZXRNYXB9XG4gICAgXSk7XG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKHRoaXMucmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudCg8YW55PmZ1dHVyZS5jb21wb25lbnQpKS5cbiAgICAgIG1hcChmYWN0b3J5ID0+IG91dGxldC5hY3RpdmF0ZShmYWN0b3J5LCByZXNvbHZlZCwgb3V0bGV0TWFwKSk7XG4gIH1cblxuICBwcml2YXRlIGRlYWN0aXZhdGVPdXRsZXRBbmRJdENoaWxkcmVuKG91dGxldDogUm91dGVyT3V0bGV0KTogdm9pZCB7XG4gICAgaWYgKG91dGxldCAmJiBvdXRsZXQuaXNBY3RpdmF0ZWQpIHtcbiAgICAgIGZvckVhY2gob3V0bGV0Lm91dGxldE1hcC5fb3V0bGV0cywgKHYsIGspID0+IHRoaXMuZGVhY3RpdmF0ZU91dGxldEFuZEl0Q2hpbGRyZW4odikpO1xuICAgICAgb3V0bGV0LmRlYWN0aXZhdGUoKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbm9kZUNoaWxkcmVuQXNNYXAobm9kZTogVHJlZU5vZGU8QWN0aXZhdGVkUm91dGU+fG51bGwpIHtcbiAgcmV0dXJuIG5vZGUgP1xuICAgIG5vZGUuY2hpbGRyZW4ucmVkdWNlKFxuICAgICAgKG0sIGMpID0+IHtcbiAgICAgICAgbVtjLnZhbHVlLm91dGxldF0gPSBjO1xuICAgICAgICByZXR1cm4gbTtcbiAgICAgIH0sXG4gICAgICB7fSkgOlxuICB7fTtcbn1cblxuZnVuY3Rpb24gZ2V0T3V0bGV0KG91dGxldE1hcDogUm91dGVyT3V0bGV0TWFwLCByb3V0ZTogQWN0aXZhdGVkUm91dGUpOiBSb3V0ZXJPdXRsZXQge1xuICBsZXQgb3V0bGV0ID0gb3V0bGV0TWFwLl9vdXRsZXRzW3JvdXRlLm91dGxldF07XG4gIGlmICghb3V0bGV0KSB7XG4gICAgaWYgKHJvdXRlLm91dGxldCA9PT0gUFJJTUFSWV9PVVRMRVQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgcHJpbWFyeSBvdXRsZXRgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCB0aGUgb3V0bGV0ICR7cm91dGUub3V0bGV0fWApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0bGV0O1xufVxuIl19 \ No newline at end of file diff --git a/modules/@angular/router/build/es6/src/router_outlet_map.d.ts b/modules/@angular/router/build/es6/src/router_outlet_map.d.ts new file mode 100644 index 0000000000..df50474269 --- /dev/null +++ b/modules/@angular/router/build/es6/src/router_outlet_map.d.ts @@ -0,0 +1,7 @@ +import { RouterOutlet } from './directives/router_outlet'; +export declare class RouterOutletMap { + _outlets: { + [name: string]: RouterOutlet; + }; + registerOutlet(name: string, outlet: RouterOutlet): void; +} diff --git a/modules/@angular/router/build/es6/src/router_outlet_map.js b/modules/@angular/router/build/es6/src/router_outlet_map.js new file mode 100644 index 0000000000..111d0035ab --- /dev/null +++ b/modules/@angular/router/build/es6/src/router_outlet_map.js @@ -0,0 +1,7 @@ +export class RouterOutletMap { + constructor() { + this._outlets = {}; + } + registerOutlet(name, outlet) { this._outlets[name] = outlet; } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyX291dGxldF9tYXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGVyX291dGxldF9tYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0E7SUFBQTtRQUVFLGFBQVEsR0FBbUMsRUFBRSxDQUFDO0lBRWhELENBQUM7SUFEQyxjQUFjLENBQUMsSUFBWSxFQUFFLE1BQW9CLElBQVUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzVGLENBQUM7QUFBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJvdXRlck91dGxldCB9IGZyb20gJy4vZGlyZWN0aXZlcy9yb3V0ZXJfb3V0bGV0JztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIFJvdXRlck91dGxldE1hcCB7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX291dGxldHM6IHtbbmFtZTogc3RyaW5nXTogUm91dGVyT3V0bGV0fSA9IHt9O1xuICByZWdpc3Rlck91dGxldChuYW1lOiBzdHJpbmcsIG91dGxldDogUm91dGVyT3V0bGV0KTogdm9pZCB7IHRoaXMuX291dGxldHNbbmFtZV0gPSBvdXRsZXQ7IH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/modules/@angular/router/build/es6/src/router_state.d.ts b/modules/@angular/router/build/es6/src/router_state.d.ts new file mode 100644 index 0000000000..569b8837ac --- /dev/null +++ b/modules/@angular/router/build/es6/src/router_state.d.ts @@ -0,0 +1,18 @@ +import { Tree, TreeNode } from './utils/tree'; +import { UrlSegment } from './url_tree'; +import { Params } from './shared'; +import { Observable } from 'rxjs/Observable'; +import { Type } from '@angular/core'; +export declare class RouterState extends Tree { + queryParams: Observable; + fragment: Observable; + constructor(root: TreeNode, queryParams: Observable, fragment: Observable); +} +export declare function createEmptyState(rootComponent: Type): RouterState; +export declare class ActivatedRoute { + urlSegments: Observable; + params: Observable; + outlet: string; + component: Type | string; + constructor(urlSegments: Observable, params: Observable, outlet: string, component: Type | string); +} diff --git a/modules/@angular/router/build/es6/src/router_state.js b/modules/@angular/router/build/es6/src/router_state.js new file mode 100644 index 0000000000..301c5f6e47 --- /dev/null +++ b/modules/@angular/router/build/es6/src/router_state.js @@ -0,0 +1,28 @@ +import { Tree, TreeNode } from './utils/tree'; +import { UrlSegment } from './url_tree'; +import { PRIMARY_OUTLET } from './shared'; +import { BehaviorSubject } from 'rxjs/BehaviorSubject'; +export class RouterState extends Tree { + constructor(root, queryParams, fragment) { + super(root); + this.queryParams = queryParams; + this.fragment = fragment; + } +} +export function createEmptyState(rootComponent) { + const emptyUrl = new BehaviorSubject([new UrlSegment("", {}, PRIMARY_OUTLET)]); + const emptyParams = new BehaviorSubject({}); + const emptyQueryParams = new BehaviorSubject({}); + const fragment = new BehaviorSubject(""); + const activated = new ActivatedRoute(emptyUrl, emptyParams, PRIMARY_OUTLET, rootComponent); + return new RouterState(new TreeNode(activated, []), emptyQueryParams, fragment); +} +export class ActivatedRoute { + constructor(urlSegments, params, outlet, component) { + this.urlSegments = urlSegments; + this.params = params; + this.outlet = outlet; + this.component = component; + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyX3N0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JvdXRlcl9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjO09BQ3RDLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWTtPQUNoQyxFQUFVLGNBQWMsRUFBRSxNQUFNLFVBQVU7T0FFMUMsRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0I7QUFrQnRELGlDQUFpQyxJQUFJO0lBQ25DLFlBQVksSUFBOEIsRUFBUyxXQUErQixFQUFTLFFBQTRCO1FBQ3JILE1BQU0sSUFBSSxDQUFDLENBQUM7UUFEcUMsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQVMsYUFBUSxHQUFSLFFBQVEsQ0FBb0I7SUFFdkgsQ0FBQztBQUNILENBQUM7QUFFRCxpQ0FBaUMsYUFBbUI7SUFDbEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxlQUFlLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRSxNQUFNLFdBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QyxNQUFNLGdCQUFnQixHQUFHLElBQUksZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sUUFBUSxHQUFHLElBQUksZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sU0FBUyxHQUFHLElBQUksY0FBYyxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzNGLE1BQU0sQ0FBQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLFFBQVEsQ0FBaUIsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2xHLENBQUM7QUFlRDtJQUNFLFlBQW1CLFdBQXFDLEVBQ3JDLE1BQTBCLEVBQzFCLE1BQWMsRUFDZCxTQUF3QjtRQUh4QixnQkFBVyxHQUFYLFdBQVcsQ0FBMEI7UUFDckMsV0FBTSxHQUFOLE1BQU0sQ0FBb0I7UUFDMUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGNBQVMsR0FBVCxTQUFTLENBQWU7SUFBRyxDQUFDO0FBQ2pELENBQUM7QUFBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyZWUsIFRyZWVOb2RlIH0gZnJvbSAnLi91dGlscy90cmVlJztcbmltcG9ydCB7IFVybFNlZ21lbnQgfSBmcm9tICcuL3VybF90cmVlJztcbmltcG9ydCB7IFBhcmFtcywgUFJJTUFSWV9PVVRMRVQgfSBmcm9tICcuL3NoYXJlZCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcy9PYnNlcnZhYmxlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMvQmVoYXZpb3JTdWJqZWN0JztcbmltcG9ydCB7IFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBUaGUgc3RhdGUgb2YgdGhlIHJvdXRlciBhdCBhIHBhcnRpY3VsYXIgbW9tZW50IGluIHRpbWUuXG4gKlxuICogIyMjIFVzYWdlXG4gKlxuICogYGBgXG4gKiBjbGFzcyBNeUNvbXBvbmVudCB7XG4gKiAgIGNvbnN0cnVjdG9yKHJvdXRlcjogUm91dGVyKSB7XG4gKiAgICAgY29uc3Qgc3RhdGUgPSByb3V0ZXIucm91dGVyU3RhdGU7XG4gKiAgICAgY29uc3QgaWQ6IE9ic2VydmFibGU8c3RyaW5nPiA9IHN0YXRlLmZpcnN0Q2hpbGQoc3RhdGUucm9vdCkucGFyYW1zLm1hcChwID0+IHAuaWQpO1xuICogICAgIGNvbnN0IGlzRGVidWc6IE9ic2VydmFibGU8c3RyaW5nPiA9IHN0YXRlLnF1ZXJ5UGFyYW1zLm1hcChxID0+IHEuZGVidWcpO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFJvdXRlclN0YXRlIGV4dGVuZHMgVHJlZTxBY3RpdmF0ZWRSb3V0ZT4ge1xuICBjb25zdHJ1Y3Rvcihyb290OiBUcmVlTm9kZTxBY3RpdmF0ZWRSb3V0ZT4sIHB1YmxpYyBxdWVyeVBhcmFtczogT2JzZXJ2YWJsZTxQYXJhbXM+LCBwdWJsaWMgZnJhZ21lbnQ6IE9ic2VydmFibGU8c3RyaW5nPikge1xuICAgIHN1cGVyKHJvb3QpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbXB0eVN0YXRlKHJvb3RDb21wb25lbnQ6IFR5cGUpOiBSb3V0ZXJTdGF0ZSB7XG4gIGNvbnN0IGVtcHR5VXJsID0gbmV3IEJlaGF2aW9yU3ViamVjdChbbmV3IFVybFNlZ21lbnQoXCJcIiwge30sIFBSSU1BUllfT1VUTEVUKV0pO1xuICBjb25zdCBlbXB0eVBhcmFtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Qoe30pO1xuICBjb25zdCBlbXB0eVF1ZXJ5UGFyYW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdCh7fSk7XG4gIGNvbnN0IGZyYWdtZW50ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcIlwiKTtcbiAgY29uc3QgYWN0aXZhdGVkID0gbmV3IEFjdGl2YXRlZFJvdXRlKGVtcHR5VXJsLCBlbXB0eVBhcmFtcywgUFJJTUFSWV9PVVRMRVQsIHJvb3RDb21wb25lbnQpO1xuICByZXR1cm4gbmV3IFJvdXRlclN0YXRlKG5ldyBUcmVlTm9kZTxBY3RpdmF0ZWRSb3V0ZT4oYWN0aXZhdGVkLCBbXSksIGVtcHR5UXVlcnlQYXJhbXMsIGZyYWdtZW50KTtcbn1cblxuLyoqXG4gKiBDb250YWlucyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgYSBjb21wb25lbnQgbG9hZGVkIGluIGFuIG91dGxldC5cbiAqXG4gKiAjIyMgVXNhZ2VcbiAqXG4gKiBgYGBcbiAqIGNsYXNzIE15Q29tcG9uZW50IHtcbiAqICAgY29uc3RydWN0b3Iocm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7XG4gKiAgICAgY29uc3QgaWQ6IE9ic2VydmFibGU8c3RyaW5nPiA9IHJvdXRlLnBhcmFtcy5tYXAocCA9PiBwLmlkKTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBBY3RpdmF0ZWRSb3V0ZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB1cmxTZWdtZW50czogT2JzZXJ2YWJsZTxVcmxTZWdtZW50W10+LFxuICAgICAgICAgICAgICBwdWJsaWMgcGFyYW1zOiBPYnNlcnZhYmxlPFBhcmFtcz4sXG4gICAgICAgICAgICAgIHB1YmxpYyBvdXRsZXQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgcHVibGljIGNvbXBvbmVudDogVHlwZSB8IHN0cmluZykge31cbn0iXX0= \ No newline at end of file diff --git a/modules/@angular/router/build/es6/src/shared.d.ts b/modules/@angular/router/build/es6/src/shared.d.ts new file mode 100644 index 0000000000..2aacfdf7a6 --- /dev/null +++ b/modules/@angular/router/build/es6/src/shared.d.ts @@ -0,0 +1,4 @@ +export declare const PRIMARY_OUTLET: string; +export declare type Params = { + [key: string]: string; +}; diff --git a/modules/@angular/router/build/es6/src/shared.js b/modules/@angular/router/build/es6/src/shared.js new file mode 100644 index 0000000000..9cc0b44dc9 --- /dev/null +++ b/modules/@angular/router/build/es6/src/shared.js @@ -0,0 +1,2 @@ +export const PRIMARY_OUTLET = "PRIMARY_OUTLET"; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NoYXJlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLE1BQU0sY0FBYyxHQUFXLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBOYW1lIG9mIHRoZSBwcmltYXJ5IG91dGxldC5cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBQUklNQVJZX09VVExFVDogc3RyaW5nID0gXCJQUklNQVJZX09VVExFVFwiO1xuXG4vKipcbiAqIEEgY29sbGVjdGlvbiBvZiBwYXJhbWV0ZXJzLlxuICovXG5leHBvcnQgdHlwZSBQYXJhbXMgPSB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuIl19 \ No newline at end of file diff --git a/modules/@angular/router/build/es6/src/url_serializer.d.ts b/modules/@angular/router/build/es6/src/url_serializer.d.ts new file mode 100644 index 0000000000..509f6b4ea0 --- /dev/null +++ b/modules/@angular/router/build/es6/src/url_serializer.d.ts @@ -0,0 +1,10 @@ +import { UrlTree, UrlSegment } from './url_tree'; +export declare abstract class UrlSerializer { + abstract parse(url: string): UrlTree; + abstract serialize(tree: UrlTree): string; +} +export declare class DefaultUrlSerializer implements UrlSerializer { + parse(url: string): UrlTree; + serialize(tree: UrlTree): string; +} +export declare function serializeSegment(segment: UrlSegment): string; diff --git a/modules/@angular/router/build/es6/src/url_serializer.js b/modules/@angular/router/build/es6/src/url_serializer.js new file mode 100644 index 0000000000..3ee0925dbf --- /dev/null +++ b/modules/@angular/router/build/es6/src/url_serializer.js @@ -0,0 +1,212 @@ +import { UrlTree, UrlSegment } from './url_tree'; +import { PRIMARY_OUTLET } from './shared'; +import { rootNode, TreeNode } from './utils/tree'; +export class UrlSerializer { +} +export class DefaultUrlSerializer { + parse(url) { + const p = new UrlParser(url); + return new UrlTree(p.parseRootSegment(), p.parseQueryParams(), p.parseFragment()); + } + serialize(tree) { + const node = serializeUrlTreeNode(rootNode(tree)); + const query = serializeQueryParams(tree.queryParameters); + const fragment = tree.fragment !== null ? `#${tree.fragment}` : ''; + return `${node}${query}${fragment}`; + } +} +function serializeUrlTreeNode(node) { + return `${serializeSegment(node.value)}${serializeChildren(node)}`; +} +function serializeUrlTreeNodes(nodes) { + const primary = serializeSegment(nodes[0].value); + const secondaryNodes = nodes.slice(1); + const secondary = secondaryNodes.length > 0 ? `(${secondaryNodes.map(serializeUrlTreeNode).join("//")})` : ""; + const children = serializeChildren(nodes[0]); + return `${primary}${secondary}${children}`; +} +function serializeChildren(node) { + if (node.children.length > 0) { + return `/${serializeUrlTreeNodes(node.children)}`; + } + else { + return ""; + } +} +export function serializeSegment(segment) { + const outlet = segment.outlet === PRIMARY_OUTLET ? '' : `${segment.outlet}:`; + return `${outlet}${segment.path}${serializeParams(segment.parameters)}`; +} +function serializeParams(params) { + return pairs(params).map(p => `;${p.first}=${p.second}`).join(""); +} +function serializeQueryParams(params) { + const strs = pairs(params).map(p => `${p.first}=${p.second}`); + return strs.length > 0 ? `?${strs.join("&")}` : ""; +} +class Pair { + constructor(first, second) { + this.first = first; + this.second = second; + } +} +function pairs(obj) { + const res = []; + for (let prop in obj) { + if (obj.hasOwnProperty(prop)) { + res.push(new Pair(prop, obj[prop])); + } + } + return res; +} +const SEGMENT_RE = /^[^\/\(\)\?;=&#]+/; +function matchUrlSegment(str) { + SEGMENT_RE.lastIndex = 0; + var match = SEGMENT_RE.exec(str); + return match ? match[0] : ''; +} +const QUERY_PARAM_VALUE_RE = /^[^\(\)\?;&#]+/; +function matchUrlQueryParamValue(str) { + QUERY_PARAM_VALUE_RE.lastIndex = 0; + const match = QUERY_PARAM_VALUE_RE.exec(str); + return match ? match[0] : ''; +} +class UrlParser { + constructor(remaining) { + this.remaining = remaining; + } + peekStartsWith(str) { return this.remaining.startsWith(str); } + capture(str) { + if (!this.remaining.startsWith(str)) { + throw new Error(`Expected "${str}".`); + } + this.remaining = this.remaining.substring(str.length); + } + parseRootSegment() { + if (this.remaining == '' || this.remaining == '/') { + return new TreeNode(new UrlSegment('', {}, PRIMARY_OUTLET), []); + } + else { + const segments = this.parseSegments(false); + return new TreeNode(new UrlSegment('', {}, PRIMARY_OUTLET), segments); + } + } + parseSegments(hasOutletName) { + if (this.remaining.length == 0) { + return []; + } + if (this.peekStartsWith('/')) { + this.capture('/'); + } + let path = matchUrlSegment(this.remaining); + this.capture(path); + let outletName; + if (hasOutletName) { + if (path.indexOf(":") === -1) { + throw new Error("Not outlet name is provided"); + } + if (path.indexOf(":") > -1 && hasOutletName) { + let parts = path.split(":"); + outletName = parts[0]; + path = parts[1]; + } + } + else { + if (path.indexOf(":") > -1) { + throw new Error("Not outlet name is allowed"); + } + outletName = PRIMARY_OUTLET; + } + let matrixParams = {}; + if (this.peekStartsWith(';')) { + matrixParams = this.parseMatrixParams(); + } + let secondary = []; + if (this.peekStartsWith('(')) { + secondary = this.parseSecondarySegments(); + } + let children = []; + if (this.peekStartsWith('/') && !this.peekStartsWith('//')) { + this.capture('/'); + children = this.parseSegments(false); + } + const segment = new UrlSegment(path, matrixParams, outletName); + const node = new TreeNode(segment, children); + return [node].concat(secondary); + } + parseQueryParams() { + var params = {}; + if (this.peekStartsWith('?')) { + this.capture('?'); + this.parseQueryParam(params); + while (this.remaining.length > 0 && this.peekStartsWith('&')) { + this.capture('&'); + this.parseQueryParam(params); + } + } + return params; + } + parseFragment() { + if (this.peekStartsWith('#')) { + return this.remaining.substring(1); + } + else { + return null; + } + } + parseMatrixParams() { + var params = {}; + while (this.remaining.length > 0 && this.peekStartsWith(';')) { + this.capture(';'); + this.parseParam(params); + } + return params; + } + parseParam(params) { + var key = matchUrlSegment(this.remaining); + if (!key) { + return; + } + this.capture(key); + var value = "true"; + if (this.peekStartsWith('=')) { + this.capture('='); + var valueMatch = matchUrlSegment(this.remaining); + if (valueMatch) { + value = valueMatch; + this.capture(value); + } + } + params[key] = value; + } + parseQueryParam(params) { + var key = matchUrlSegment(this.remaining); + if (!key) { + return; + } + this.capture(key); + var value = "true"; + if (this.peekStartsWith('=')) { + this.capture('='); + var valueMatch = matchUrlQueryParamValue(this.remaining); + if (valueMatch) { + value = valueMatch; + this.capture(value); + } + } + params[key] = value; + } + parseSecondarySegments() { + var segments = []; + this.capture('('); + while (!this.peekStartsWith(')') && this.remaining.length > 0) { + segments = segments.concat(this.parseSegments(true)); + if (this.peekStartsWith('//')) { + this.capture('//'); + } + } + this.capture(')'); + return segments; + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsX3NlcmlhbGl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXJsX3NlcmlhbGl6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ik9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWTtPQUN6QyxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVU7T0FDbEMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYztBQUtqRDtBQVVBLENBQUM7QUFLRDtJQUNFLEtBQUssQ0FBQyxHQUFXO1FBQ2YsTUFBTSxDQUFDLEdBQUcsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0IsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFRCxTQUFTLENBQUMsSUFBYTtRQUNyQixNQUFNLElBQUksR0FBRyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNsRCxNQUFNLEtBQUssR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDekQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsUUFBUSxFQUFFLENBQUM7SUFDdEMsQ0FBQztBQUNILENBQUM7QUFFRCw4QkFBOEIsSUFBMEI7SUFDdEQsTUFBTSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDckUsQ0FBQztBQUVELCtCQUErQixLQUE2QjtJ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JztcbmltcG9ydCB7IFBSSU1BUllfT1VUTEVUIH0gZnJvbSAnLi9zaGFyZWQnO1xuaW1wb3J0IHsgcm9vdE5vZGUsIFRyZWVOb2RlIH0gZnJvbSAnLi91dGlscy90cmVlJztcblxuLyoqXG4gKiBEZWZpbmVzIGEgd2F5IHRvIHNlcmlhbGl6ZS9kZXNlcmlhbGl6ZSBhIHVybCB0cmVlLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVXJsU2VyaWFsaXplciB7XG4gIC8qKlxuICAgKiBQYXJzZSBhIHVybCBpbnRvIGEge0BMaW5rIFVybFRyZWV9XG4gICAqL1xuICBhYnN0cmFjdCBwYXJzZSh1cmw6IHN0cmluZyk6IFVybFRyZWU7XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEge0BMaW5rIFVybFRyZWV9IGludG8gYSB1cmxcbiAgICovXG4gIGFic3RyYWN0IHNlcmlhbGl6ZSh0cmVlOiBVcmxUcmVlKTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc2VyaWFsaXphdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIERlZmF1bHRVcmxTZXJpYWxpemVyIGltcGxlbWVudHMgVXJsU2VyaWFsaXplciB7XG4gIHBhcnNlKHVybDogc3RyaW5nKTogVXJsVHJlZSB7XG4gICAgY29uc3QgcCA9IG5ldyBVcmxQYXJzZXIodXJsKTtcbiAgICByZXR1cm4gbmV3IFVybFRyZWUocC5wYXJzZVJvb3RTZWdtZW50KCksIHAucGFyc2VRdWVyeVBhcmFtcygpLCBwLnBhcnNlRnJhZ21lbnQoKSk7XG4gIH1cblxuICBzZXJpYWxpemUodHJlZTogVXJsVHJlZSk6IHN0cmluZyB7IFxuICAgIGNvbnN0IG5vZGUgPSBzZXJpYWxpemVVcmxUcmVlTm9kZShyb290Tm9kZSh0cmVlKSk7XG4gICAgY29uc3QgcXVlcnkgPSBzZXJpYWxpemVRdWVyeVBhcmFtcyh0cmVlLnF1ZXJ5UGFyYW1ldGVycyk7XG4gICAgY29uc3QgZnJhZ21lbnQgPSB0cmVlLmZyYWdtZW50ICE9PSBudWxsID8gYCMke3RyZWUuZnJhZ21lbnR9YCA6ICcnO1xuICAgIHJldHVybiBgJHtub2RlfSR7cXVlcnl9JHtmcmFnbWVudH1gO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZVVybFRyZWVOb2RlKG5vZGU6IFRyZWVOb2RlPFVybFNlZ21lbnQ+KTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke3NlcmlhbGl6ZVNlZ21lbnQobm9kZS52YWx1ZSl9JHtzZXJpYWxpemVDaGlsZHJlbihub2RlKX1gO1xufVxuXG5mdW5jdGlvbiBzZXJpYWxpemVVcmxUcmVlTm9kZXMobm9kZXM6IFRyZWVOb2RlPFVybFNlZ21lbnQ+W10pOiBzdHJpbmcge1xuICBjb25zdCBwcmltYXJ5ID0gc2VyaWFsaXplU2VnbWVudChub2Rlc1swXS52YWx1ZSk7XG4gIGNvbnN0IHNlY29uZGFyeU5vZGVzID0gbm9kZXMuc2xpY2UoMSk7XG4gIGNvbnN0IHNlY29uZGFyeSA9IHNlY29uZGFyeU5vZGVzLmxlbmd0aCA+IDAgPyBgKCR7c2Vjb25kYXJ5Tm9kZXMubWFwKHNlcmlhbGl6ZVVybFRyZWVOb2RlKS5qb2luKFwiLy9cIil9KWAgOiBcIlwiO1xuICBjb25zdCBjaGlsZHJlbiA9IHNlcmlhbGl6ZUNoaWxkcmVuKG5vZGVzWzBdKTtcbiAgcmV0dXJuIGAke3ByaW1hcnl9JHtzZWNvbmRhcnl9JHtjaGlsZHJlbn1gO1xufVxuXG5mdW5jdGlvbiBzZXJpYWxpemVDaGlsZHJlbihub2RlOiBUcmVlTm9kZTxVcmxTZWdtZW50Pik6IHN0cmluZyB7XG4gIGlmIChub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gYC8ke3NlcmlhbGl6ZVVybFRyZWVOb2Rlcyhub2RlLmNoaWxkcmVuKX1gO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVTZWdtZW50KHNlZ21lbnQ6IFVybFNlZ21lbnQpOiBzdHJpbmcge1xuICBjb25zdCBvdXRsZXQgPSBzZWdtZW50Lm91dGxldCA9PT0gUFJJTUFSWV9PVVRMRVQgPyAnJyA6IGAke3NlZ21lbnQub3V0bGV0fTpgO1xuICByZXR1cm4gYCR7b3V0bGV0fSR7c2VnbWVudC5wYXRofSR7c2VyaWFsaXplUGFyYW1zKHNlZ21lbnQucGFyYW1ldGVycyl9YDtcbn1cblxuZnVuY3Rpb24gc2VyaWFsaXplUGFyYW1zKHBhcmFtczoge1trZXk6IHN0cmluZ106IHN0cmluZ30pOiBzdHJpbmcge1xuICByZXR1cm4gcGFpcnMocGFyYW1zKS5tYXAocCA9PiBgOyR7cC5maXJzdH09JHtwLnNlY29uZH1gKS5qb2luKFwiXCIpO1xufVxuXG5mdW5jdGlvbiBzZXJpYWxpemVRdWVyeVBhcmFtcyhwYXJhbXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9KTogc3RyaW5nIHtcbiAgY29uc3Qgc3RycyA9IHBhaXJzKHBhcmFtcykubWFwKHAgPT4gYCR7cC5maXJzdH09JHtwLnNlY29uZH1gKTtcbiAgcmV0dXJuIHN0cnMubGVuZ3RoID4gMCA/IGA/JHtzdHJzLmpvaW4oXCImXCIpfWAgOiBcIlwiO1xufVxuXG5jbGFzcyBQYWlyPEEsQj4geyBjb25zdHJ1Y3RvcihwdWJsaWMgZmlyc3Q6QSwgcHVibGljIHNlY29uZDpCKSB7fSB9XG5mdW5jdGlvbiBwYWlyczxUPihvYmo6IHtba2V5OiBzdHJpbmddOiBUfSk6UGFpcjxzdHJpbmcsVD5bXSB7XG4gIGNvbnN0IHJlcyA9IFtdO1xuICBmb3IgKGxldCBwcm9wIGluIG9iaikge1xuICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgIHJlcy5wdXNoKG5ldyBQYWlyPHN0cmluZywgVD4ocHJvcCwgb2JqW3Byb3BdKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmNvbnN0IFNFR01FTlRfUkUgPSAvXlteXFwvXFwoXFwpXFw/Oz0mI10rLztcbmZ1bmN0aW9uIG1hdGNoVXJsU2VnbWVudChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIFNFR01FTlRfUkUubGFzdEluZGV4ID0gMDtcbiAgdmFyIG1hdGNoID0gU0VHTUVOVF9SRS5leGVjKHN0cik7XG4gIHJldHVybiBtYXRjaCA/IG1hdGNoWzBdIDogJyc7XG59XG5cbmNvbnN0IFFVRVJZX1BBUkFNX1ZBTFVFX1JFID0gL15bXlxcKFxcKVxcPzsmI10rLztcbmZ1bmN0aW9uIG1hdGNoVXJsUXVlcnlQYXJhbVZhbHVlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgUVVFUllfUEFSQU1fVkFMVUVfUkUubGFzdEluZGV4ID0gMDtcbiAgY29uc3QgbWF0Y2ggPSBRVUVSWV9QQVJBTV9WQUxVRV9SRS5leGVjKHN0cik7XG4gIHJldHVybiBtYXRjaCA/IG1hdGNoWzBdIDogJyc7XG59XG5cbmNsYXNzIFVybFBhcnNlciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVtYWluaW5nOiBzdHJpbmcpIHt9XG5cbiAgcGVla1N0YXJ0c1dpdGgoc3RyOiBzdHJpbmcpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMucmVtYWluaW5nLnN0YXJ0c1dpdGgoc3RyKTsgfVxuXG4gIGNhcHR1cmUoc3RyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmVtYWluaW5nLnN0YXJ0c1dpdGgoc3RyKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBcIiR7c3RyfVwiLmApO1xuICAgIH1cbiAgICB0aGlzLnJlbWFpbmluZyA9IHRoaXMucmVtYWluaW5nLnN1YnN0cmluZyhzdHIubGVuZ3RoKTtcbiAgfVxuXG4gIHBhcnNlUm9vdFNlZ21lbnQoKTogVHJlZU5vZGU8VXJsU2VnbWVudD4ge1xuICAgIGlmICh0aGlzLnJlbWFpbmluZyAgPT0gJycgfHwgdGhpcy5yZW1haW5pbmcgPT0gJy8nKSB7XG4gICAgICByZXR1cm4gbmV3IFRyZWVOb2RlPFVybFNlZ21lbnQ+KG5ldyBVcmxTZWdtZW50KCcnLCB7fSwgUFJJTUFSWV9PVVRMRVQpLCBbXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gdGhpcy5wYXJzZVNlZ21lbnRzKGZhbHNlKTtcbiAgICAgIHJldHVybiBuZXcgVHJlZU5vZGU8VXJsU2VnbWVudD4obmV3IFVybFNlZ21lbnQoJycsIHt9LCBQUklNQVJZX09VVExFVCksIHNlZ21lbnRzKTtcbiAgICB9XG4gIH1cblxuICBwYXJzZVNlZ21lbnRzKGhhc091dGxldE5hbWU6IGJvb2xlYW4pOiBUcmVlTm9kZTxVcmxTZWdtZW50PltdIHtcbiAgICBpZiAodGhpcy5yZW1haW5pbmcubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgaWYgKHRoaXMucGVla1N0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgdGhpcy5jYXB0dXJlKCcvJyk7XG4gICAgfVxuICAgIGxldCBwYXRoID0gbWF0Y2hVcmxTZWdtZW50KHRoaXMucmVtYWluaW5nKTtcbiAgICB0aGlzLmNhcHR1cmUocGF0aCk7XG5cbiAgICBsZXQgb3V0bGV0TmFtZTtcbiAgICBpZiAoaGFzT3V0bGV0TmFtZSkge1xuICAgICAgaWYgKHBhdGguaW5kZXhPZihcIjpcIikgPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vdCBvdXRsZXQgbmFtZSBpcyBwcm92aWRlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChwYXRoLmluZGV4T2YoXCI6XCIpID4gLTEgJiYgaGFzT3V0bGV0TmFtZSkge1xuICAgICAgICBsZXQgcGFydHMgPSBwYXRoLnNwbGl0KFwiOlwiKTtcbiAgICAgICAgb3V0bGV0TmFtZSA9IHBhcnRzWzBdO1xuICAgICAgICBwYXRoID0gcGFydHNbMV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwYXRoLmluZGV4T2YoXCI6XCIpID4gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm90IG91dGxldCBuYW1lIGlzIGFsbG93ZWRcIik7XG4gICAgICB9XG4gICAgICBvdXRsZXROYW1lID0gUFJJTUFSWV9PVVRMRVQ7XG4gICAgfVxuXG4gICAgbGV0IG1hdHJpeFBhcmFtczoge1trZXk6IHN0cmluZ106IGFueX0gPSB7fTtcbiAgICBpZiAodGhpcy5wZWVrU3RhcnRzV2l0aCgnOycpKSB7XG4gICAgICBtYXRyaXhQYXJhbXMgPSB0aGlzLnBhcnNlTWF0cml4UGFyYW1zKCk7XG4gICAgfVxuXG4gICAgbGV0IHNlY29uZGFyeSA9IFtdO1xuICAgIGlmICh0aGlzLnBlZWtTdGFydHNXaXRoKCcoJykpIHtcbiAgICAgIHNlY29uZGFyeSA9IHRoaXMucGFyc2VTZWNvbmRhcnlTZWdtZW50cygpO1xuICAgIH1cblxuICAgIGxldCBjaGlsZHJlbjogVHJlZU5vZGU8VXJsU2VnbWVudD5bXSA9IFtdO1xuICAgIGlmICh0aGlzLnBlZWtTdGFydHNXaXRoKCcvJykgJiYgIXRoaXMucGVla1N0YXJ0c1dpdGgoJy8vJykpIHtcbiAgICAgIHRoaXMuY2FwdHVyZSgnLycpO1xuICAgICAgY2hpbGRyZW4gPSB0aGlzLnBhcnNlU2VnbWVudHMoZmFsc2UpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlZ21lbnQgPSBuZXcgVXJsU2VnbWVudChwYXRoLCBtYXRyaXhQYXJhbXMsIG91dGxldE5hbWUpO1xuICAgIGNvbnN0IG5vZGUgPSBuZXcgVHJlZU5vZGU8VXJsU2VnbWVudD4oc2VnbWVudCwgY2hpbGRyZW4pO1xuICAgIHJldHVybiBbbm9kZV0uY29uY2F0KHNlY29uZGFyeSk7XG4gIH1cblxuICBwYXJzZVF1ZXJ5UGFyYW1zKCk6IHtba2V5OiBzdHJpbmddOiBhbnl9IHtcbiAgICB2YXIgcGFyYW1zOiB7W2tleTogc3RyaW5nXTogYW55fSA9IHt9O1xuICAgIGlmICh0aGlzLnBlZWtTdGFydHNXaXRoKCc/JykpIHtcbiAgICAgIHRoaXMuY2FwdHVyZSgnPycpO1xuICAgICAgdGhpcy5wYXJzZVF1ZXJ5UGFyYW0ocGFyYW1zKTtcbiAgICAgIHdoaWxlICh0aGlzLnJlbWFpbmluZy5sZW5ndGggPiAwICYmIHRoaXMucGVla1N0YXJ0c1dpdGgoJyYnKSkge1xuICAgICAgICB0aGlzLmNhcHR1cmUoJyYnKTtcbiAgICAgICAgdGhpcy5wYXJzZVF1ZXJ5UGFyYW0ocGFyYW1zKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxuXG4gIHBhcnNlRnJhZ21lbnQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMucGVla1N0YXJ0c1dpdGgoJyMnKSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVtYWluaW5nLnN1YnN0cmluZygxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcGFyc2VNYXRyaXhQYXJhbXMoKToge1trZXk6IHN0cmluZ106IGFueX0ge1xuICAgIHZhciBwYXJhbXM6IHtba2V5OiBzdHJpbmddOiBhbnl9ID0ge307XG4gICAgd2hpbGUgKHRoaXMucmVtYWluaW5nLmxlbmd0aCA+IDAgJiYgdGhpcy5wZWVrU3RhcnRzV2l0aCgnOycpKSB7XG4gICAgICB0aGlzLmNhcHR1cmUoJzsnKTtcbiAgICAgIHRoaXMucGFyc2VQYXJhbShwYXJhbXMpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG5cbiAgcGFyc2VQYXJhbShwYXJhbXM6IHtba2V5OiBzdHJpbmddOiBhbnl9KTogdm9pZCB7XG4gICAgdmFyIGtleSA9IG1hdGNoVXJsU2VnbWVudCh0aGlzLnJlbWFpbmluZyk7XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jYXB0dXJlKGtleSk7XG4gICAgdmFyIHZhbHVlOiBhbnkgPSBcInRydWVcIjtcbiAgICBpZiAodGhpcy5wZWVrU3RhcnRzV2l0aCgnPScpKSB7XG4gICAgICB0aGlzLmNhcHR1cmUoJz0nKTtcbiAgICAgIHZhciB2YWx1ZU1hdGNoID0gbWF0Y2hVcmxTZWdtZW50KHRoaXMucmVtYWluaW5nKTtcbiAgICAgIGlmICh2YWx1ZU1hdGNoKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWVNYXRjaDtcbiAgICAgICAgdGhpcy5jYXB0dXJlKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJhbXNba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcGFyc2VRdWVyeVBhcmFtKHBhcmFtczoge1trZXk6IHN0cmluZ106IGFueX0pOiB2b2lkIHtcbiAgICB2YXIga2V5ID0gbWF0Y2hVcmxTZWdtZW50KHRoaXMucmVtYWluaW5nKTtcbiAgICBpZiAoIWtleSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNhcHR1cmUoa2V5KTtcbiAgICB2YXIgdmFsdWU6IGFueSA9IFwidHJ1ZVwiO1xuICAgIGlmICh0aGlzLnBlZWtTdGFydHNXaXRoKCc9JykpIHtcbiAgICAgIHRoaXMuY2FwdHVyZSgnPScpO1xuICAgICAgdmFyIHZhbHVlTWF0Y2ggPSBtYXRjaFVybFF1ZXJ5UGFyYW1WYWx1ZSh0aGlzLnJlbWFpbmluZyk7XG4gICAgICBpZiAodmFsdWVNYXRjaCkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlTWF0Y2g7XG4gICAgICAgIHRoaXMuY2FwdHVyZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHBhcmFtc1trZXldID0gdmFsdWU7XG4gIH1cblxuICBwYXJzZVNlY29uZGFyeVNlZ21lbnRzKCk6IFRyZWVOb2RlPFVybFNlZ21lbnQ+W10ge1xuICAgIHZhciBzZWdtZW50cyA9IFtdO1xuICAgIHRoaXMuY2FwdHVyZSgnKCcpO1xuXG4gICAgd2hpbGUgKCF0aGlzLnBlZWtTdGFydHNXaXRoKCcpJykgJiYgdGhpcy5yZW1haW5pbmcubGVuZ3RoID4gMCkge1xuICAgICAgc2VnbWVudHMgPSBzZWdtZW50cy5jb25jYXQodGhpcy5wYXJzZVNlZ21lbnRzKHRydWUpKTtcbiAgICAgIGlmICh0aGlzLnBlZWtTdGFydHNXaXRoKCcvLycpKSB7XG4gICAgICAgIHRoaXMuY2FwdHVyZSgnLy8nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jYXB0dXJlKCcpJyk7XG5cbiAgICByZXR1cm4gc2VnbWVudHM7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/modules/@angular/router/build/es6/src/url_tree.d.ts b/modules/@angular/router/build/es6/src/url_tree.d.ts new file mode 100644 index 0000000000..f9ea224dae --- /dev/null +++ b/modules/@angular/router/build/es6/src/url_tree.d.ts @@ -0,0 +1,23 @@ +import { Tree, TreeNode } from './utils/tree'; +export declare function createEmptyUrlTree(): UrlTree; +export declare class UrlTree extends Tree { + queryParameters: { + [key: string]: string; + }; + fragment: string | null; + constructor(root: TreeNode, queryParameters: { + [key: string]: string; + }, fragment: string | null); +} +export declare class UrlSegment { + path: string; + parameters: { + [key: string]: string; + }; + outlet: string; + constructor(path: string, parameters: { + [key: string]: string; + }, outlet: string); + toString(): string; +} +export declare function equalUrlSegments(a: UrlSegment[], b: UrlSegment[]): boolean; diff --git a/modules/@angular/router/build/es6/src/url_tree.js b/modules/@angular/router/build/es6/src/url_tree.js new file mode 100644 index 0000000000..272b03bf73 --- /dev/null +++ b/modules/@angular/router/build/es6/src/url_tree.js @@ -0,0 +1,43 @@ +import { Tree, TreeNode } from './utils/tree'; +import { shallowEqual } from './utils/collection'; +import { PRIMARY_OUTLET } from './shared'; +export function createEmptyUrlTree() { + return new UrlTree(new TreeNode(new UrlSegment("", {}, PRIMARY_OUTLET), []), {}, null); +} +export class UrlTree extends Tree { + constructor(root, queryParameters, fragment) { + super(root); + this.queryParameters = queryParameters; + this.fragment = fragment; + } +} +export class UrlSegment { + constructor(path, parameters, outlet) { + this.path = path; + this.parameters = parameters; + this.outlet = outlet; + } + toString() { + const params = []; + for (let prop in this.parameters) { + if (this.parameters.hasOwnProperty(prop)) { + params.push(`${prop}=${this.parameters[prop]}`); + } + } + const paramsString = params.length > 0 ? `(${params.join(',')})` : ''; + const outlet = this.outlet === PRIMARY_OUTLET ? '' : `${this.outlet}:`; + return `${outlet}${this.path}${paramsString}`; + } +} +export function equalUrlSegments(a, b) { + if (a.length !== b.length) + return false; + for (let i = 0; i < a.length; ++i) { + if (a[i].path !== b[i].path) + return false; + if (!shallowEqual(a[i].parameters, b[i].parameters)) + return false; + } + return true; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsX3RyZWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXJsX3RyZWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ik9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYztPQUN0QyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQjtPQUMxQyxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVU7QUFFekM7SUFDRSxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxRQUFRLENBQWEsSUFBSSxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxjQUFjLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDckcsQ0FBQztBQUtELDZCQUE2QixJQUFJO0lBQy9CLFlBQVksSUFBMEIsRUFBUyxlQUF3QyxFQUFTLFFBQXVCO1FBQ3JILE1BQU0sSUFBSSxDQUFDLENBQUM7UUFEaUMsb0JBQWUsR0FBZixlQUFlLENBQXlCO1FBQVMsYUFBUSxHQUFSLFFBQVEsQ0FBZTtJQUV2SCxDQUFDO0FBQ0gsQ0FBQztBQUVEO0lBQ0UsWUFBbUIsSUFBWSxFQUFTLFVBQW1DLEVBQVMsTUFBYztRQUEvRSxTQUFJLEdBQUosSUFBSSxDQUFRO1FBQVMsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQUcsQ0FBQztJQUV0RyxRQUFRO1FBQ04sTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsRCxDQUFDO1FBQ0gsQ0FBQztRQUNELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUN0RSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxLQUFLLGNBQWMsR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDdkUsTUFBTSxDQUFDLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsWUFBWSxFQUFFLENBQUM7SUFDaEQsQ0FBQztBQUNILENBQUM7QUFFRCxpQ0FBaUMsQ0FBZSxFQUFFLENBQWU7SUFDL0QsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUN4QyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNsQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNwRSxDQUFDO0lBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmVlLCBUcmVlTm9kZSB9IGZyb20gJy4vdXRpbHMvdHJlZSc7XG5pbXBvcnQgeyBzaGFsbG93RXF1YWwgfSBmcm9tICcuL3V0aWxzL2NvbGxlY3Rpb24nO1xuaW1wb3J0IHsgUFJJTUFSWV9PVVRMRVQgfSBmcm9tICcuL3NoYXJlZCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbXB0eVVybFRyZWUoKSB7XG4gIHJldHVybiBuZXcgVXJsVHJlZShuZXcgVHJlZU5vZGU8VXJsU2VnbWVudD4obmV3IFVybFNlZ21lbnQoXCJcIiwge30sIFBSSU1BUllfT1VUTEVUKSwgW10pLCB7fSwgbnVsbCk7XG59XG5cbi8qKlxuICogQSBVUkwgaW4gdGhlIHRyZWUgZm9ybS5cbiAqL1xuZXhwb3J0IGNsYXNzIFVybFRyZWUgZXh0ZW5kcyBUcmVlPFVybFNlZ21lbnQ+IHtcbiAgY29uc3RydWN0b3Iocm9vdDogVHJlZU5vZGU8VXJsU2VnbWVudD4sIHB1YmxpYyBxdWVyeVBhcmFtZXRlcnM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9LCBwdWJsaWMgZnJhZ21lbnQ6IHN0cmluZyB8IG51bGwpIHtcbiAgICBzdXBlcihyb290KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXJsU2VnbWVudCB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwYXRoOiBzdHJpbmcsIHB1YmxpYyBwYXJhbWV0ZXJzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSwgcHVibGljIG91dGxldDogc3RyaW5nKSB7fVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGNvbnN0IHBhcmFtcyA9IFtdO1xuICAgIGZvciAobGV0IHByb3AgaW4gdGhpcy5wYXJhbWV0ZXJzKSB7XG4gICAgICBpZiAodGhpcy5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICAgIHBhcmFtcy5wdXNoKGAke3Byb3B9PSR7dGhpcy5wYXJhbWV0ZXJzW3Byb3BdfWApO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBwYXJhbXNTdHJpbmcgPSBwYXJhbXMubGVuZ3RoID4gMCA/IGAoJHtwYXJhbXMuam9pbignLCcpfSlgIDogJyc7XG4gICAgY29uc3Qgb3V0bGV0ID0gdGhpcy5vdXRsZXQgPT09IFBSSU1BUllfT1VUTEVUID8gJycgOiBgJHt0aGlzLm91dGxldH06YDtcbiAgICByZXR1cm4gYCR7b3V0bGV0fSR7dGhpcy5wYXRofSR7cGFyYW1zU3RyaW5nfWA7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsVXJsU2VnbWVudHMoYTogVXJsU2VnbWVudFtdLCBiOiBVcmxTZWdtZW50W10pOiBib29sZWFuIHtcbiAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoYVtpXS5wYXRoICE9PSBiW2ldLnBhdGgpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIXNoYWxsb3dFcXVhbChhW2ldLnBhcmFtZXRlcnMsIGJbaV0ucGFyYW1ldGVycykpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbiJdfQ== \ No newline at end of file diff --git a/modules/@angular/router/build/es6/src/utils/collection.d.ts b/modules/@angular/router/build/es6/src/utils/collection.d.ts new file mode 100644 index 0000000000..9df4eefaf9 --- /dev/null +++ b/modules/@angular/router/build/es6/src/utils/collection.d.ts @@ -0,0 +1,17 @@ +export declare function shallowEqual(a: { + [x: string]: any; +}, b: { + [x: string]: any; +}): boolean; +export declare function flatten(a: T[][]): T[]; +export declare function first(a: T[]): T | null; +export declare function merge(m1: { + [key: string]: V; +}, m2: { + [key: string]: V; +}): { + [key: string]: V; +}; +export declare function forEach(map: { + [key: string]: V; +}, callback: Function): void; diff --git a/modules/@angular/router/build/es6/src/utils/collection.js b/modules/@angular/router/build/es6/src/utils/collection.js new file mode 100644 index 0000000000..92be32b5cf --- /dev/null +++ b/modules/@angular/router/build/es6/src/utils/collection.js @@ -0,0 +1,49 @@ +export function shallowEqual(a, b) { + var k1 = Object.keys(a); + var k2 = Object.keys(b); + if (k1.length != k2.length) { + return false; + } + var key; + for (var i = 0; i < k1.length; i++) { + key = k1[i]; + if (a[key] !== b[key]) { + return false; + } + } + return true; +} +export function flatten(a) { + const target = []; + for (let i = 0; i < a.length; ++i) { + for (let j = 0; j < a[i].length; ++j) { + target.push(a[i][j]); + } + } + return target; +} +export function first(a) { + return a.length > 0 ? a[0] : null; +} +export function merge(m1, m2) { + var m = {}; + for (var attr in m1) { + if (m1.hasOwnProperty(attr)) { + m[attr] = m1[attr]; + } + } + for (var attr in m2) { + if (m2.hasOwnProperty(attr)) { + m[attr] = m2[attr]; + } + } + return m; +} +export function forEach(map, callback) { + for (var prop in map) { + if (map.hasOwnProperty(prop)) { + callback(map[prop], prop); + } + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlscy9jb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZCQUE2QixDQUFtQixFQUFFLENBQW1CO0lBQ25FLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEIsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsSUFBSSxHQUFHLENBQUM7SUFDUixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNuQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1osRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCx3QkFBMkIsQ0FBUTtJQUNqQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDbEMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDckMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztJQUNELE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELHNCQUF5QixDQUFNO0lBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BDLENBQUM7QUFFRCxzQkFBeUIsRUFBc0IsRUFBRSxFQUFzQjtJQUNyRSxJQUFJLENBQUMsR0FBdUIsRUFBRSxDQUFDO0lBRS9CLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEIsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUVELEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEIsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBRUQsd0JBQThCLEdBQXVCLEVBQUUsUUFBcUM7SUFDMUYsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QixRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBzaGFsbG93RXF1YWwoYToge1t4OnN0cmluZ106YW55fSwgYjoge1t4OnN0cmluZ106YW55fSk6IGJvb2xlYW4ge1xuICB2YXIgazEgPSBPYmplY3Qua2V5cyhhKTtcbiAgdmFyIGsyID0gT2JqZWN0LmtleXMoYik7XG4gIGlmIChrMS5sZW5ndGggIT0gazIubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBrZXk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgazEubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBrMVtpXTtcbiAgICBpZiAoYVtrZXldICE9PSBiW2tleV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuPFQ+KGE6IFRbXVtdKTogVFtdIHtcbiAgY29uc3QgdGFyZ2V0ID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7ICsraSkge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgYVtpXS5sZW5ndGg7ICsraikge1xuICAgICAgdGFyZ2V0LnB1c2goYVtpXVtqXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdDxUPihhOiBUW10pOiBUIHwgbnVsbCB7XG4gIHJldHVybiBhLmxlbmd0aCA+IDAgPyBhWzBdIDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlPFY+KG0xOiB7W2tleTogc3RyaW5nXTogVn0sIG0yOiB7W2tleTogc3RyaW5nXTogVn0pOiB7W2tleTogc3RyaW5nXTogVn0ge1xuICB2YXIgbToge1trZXk6IHN0cmluZ106IFZ9ID0ge307XG5cbiAgZm9yICh2YXIgYXR0ciBpbiBtMSkge1xuICAgIGlmIChtMS5oYXNPd25Qcm9wZXJ0eShhdHRyKSkge1xuICAgICAgbVthdHRyXSA9IG0xW2F0dHJdO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGF0dHIgaW4gbTIpIHtcbiAgICBpZiAobTIuaGFzT3duUHJvcGVydHkoYXR0cikpIHtcbiAgICAgIG1bYXR0cl0gPSBtMlthdHRyXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2g8SywgVj4obWFwOiB7W2tleTogc3RyaW5nXTogVn0sIGNhbGxiYWNrOiAvKihWLCBLKSA9PiB2b2lkKi8gRnVuY3Rpb24pOiB2b2lkIHtcbiAgZm9yICh2YXIgcHJvcCBpbiBtYXApIHtcbiAgICBpZiAobWFwLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICBjYWxsYmFjayhtYXBbcHJvcF0sIHByb3ApO1xuICAgIH1cbiAgfVxufSJdfQ== \ No newline at end of file diff --git a/modules/@angular/router/build/es6/src/utils/tree.d.ts b/modules/@angular/router/build/es6/src/utils/tree.d.ts new file mode 100644 index 0000000000..1b025de959 --- /dev/null +++ b/modules/@angular/router/build/es6/src/utils/tree.d.ts @@ -0,0 +1,17 @@ +export declare class Tree { + _root: TreeNode; + constructor(root: TreeNode); + readonly root: T; + parent(t: T): T | null; + children(t: T): T[]; + firstChild(t: T): T | null; + siblings(t: T): T[]; + pathFromRoot(t: T): T[]; + contains(tree: Tree): boolean; +} +export declare function rootNode(tree: Tree): TreeNode; +export declare class TreeNode { + value: T; + children: TreeNode[]; + constructor(value: T, children: TreeNode[]); +} diff --git a/modules/@angular/router/build/es6/src/utils/tree.js b/modules/@angular/router/build/es6/src/utils/tree.js new file mode 100644 index 0000000000..b0a517094a --- /dev/null +++ b/modules/@angular/router/build/es6/src/utils/tree.js @@ -0,0 +1,71 @@ +export class Tree { + constructor(root) { + this._root = root; + } + get root() { return this._root.value; } + parent(t) { + const p = this.pathFromRoot(t); + return p.length > 1 ? p[p.length - 2] : null; + } + children(t) { + const n = findNode(t, this._root); + return n ? n.children.map(t => t.value) : []; + } + firstChild(t) { + const n = findNode(t, this._root); + return n && n.children.length > 0 ? n.children[0].value : null; + } + siblings(t) { + const p = findPath(t, this._root, []); + if (p.length < 2) + return []; + const c = p[p.length - 2].children.map(c => c.value); + return c.filter(cc => cc !== t); + } + pathFromRoot(t) { return findPath(t, this._root, []).map(s => s.value); } + contains(tree) { return contains(this._root, tree._root); } +} +export function rootNode(tree) { + return tree._root; +} +function findNode(expected, c) { + if (expected === c.value) + return c; + for (let cc of c.children) { + const r = findNode(expected, cc); + if (r) + return r; + } + return null; +} +function findPath(expected, c, collected) { + collected.push(c); + if (expected === c.value) + return collected; + for (let cc of c.children) { + const cloned = collected.slice(0); + const r = findPath(expected, cc, cloned); + if (r) + return r; + } + return []; +} +function contains(tree, subtree) { + if (tree.value !== subtree.value) + return false; + for (let subtreeNode of subtree.children) { + const s = tree.children.filter(child => child.value === subtreeNode.value); + if (s.length === 0) + return false; + if (!contains(s[0], subtreeNode)) + return false; + } + return true; +} +export class TreeNode { + constructor(value, children) { + this.value = value; + this.children = children; + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlscy90cmVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0lBSUUsWUFBWSxJQUFpQjtRQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQUMsQ0FBQztJQUVyRCxJQUFJLElBQUksS0FBUSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBRTFDLE1BQU0sQ0FBQyxDQUFJO1FBQ1QsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQy9DLENBQUM7SUFFRCxRQUFRLENBQUMsQ0FBSTtRQUNYLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVELFVBQVUsQ0FBQyxDQUFJO1FBQ2IsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ2pFLENBQUM7SUFFRCxRQUFRLENBQUMsQ0FBSTtRQUNYLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FB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QUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNqRCxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDtJQUNFLFlBQW1CLEtBQVEsRUFBUyxRQUF1QjtRQUF4QyxVQUFLLEdBQUwsS0FBSyxDQUFHO1FBQVMsYUFBUSxHQUFSLFFBQVEsQ0FBZTtJQUFHLENBQUM7QUFDakUsQ0FBQztBQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFRyZWU8VD4ge1xuICAvKiogQGludGVybmFsICovXG4gIF9yb290OiBUcmVlTm9kZTxUPjtcblxuICBjb25zdHJ1Y3Rvcihyb290OiBUcmVlTm9kZTxUPikgeyB0aGlzLl9yb290ID0gcm9vdDsgfVxuXG4gIGdldCByb290KCk6IFQgeyByZXR1cm4gdGhpcy5fcm9vdC52YWx1ZTsgfVxuXG4gIHBhcmVudCh0OiBUKTogVCB8IG51bGwge1xuICAgIGNvbnN0IHAgPSB0aGlzLnBhdGhGcm9tUm9vdCh0KTtcbiAgICByZXR1cm4gcC5sZW5ndGggPiAxID8gcFtwLmxlbmd0aCAtIDJdIDogbnVsbDtcbiAgfVxuXG4gIGNoaWxkcmVuKHQ6IFQpOiBUW10ge1xuICAgIGNvbnN0IG4gPSBmaW5kTm9kZSh0LCB0aGlzLl9yb290KTtcbiAgICByZXR1cm4gbiA/IG4uY2hpbGRyZW4ubWFwKHQgPT4gdC52YWx1ZSkgOiBbXTtcbiAgfVxuXG4gIGZpcnN0Q2hpbGQodDogVCk6IFQgfCBudWxsIHtcbiAgICBjb25zdCBuID0gZmluZE5vZGUodCwgdGhpcy5fcm9vdCk7XG4gICAgcmV0dXJuIG4gJiYgbi5jaGlsZHJlbi5sZW5ndGggPiAwID8gbi5jaGlsZHJlblswXS52YWx1ZSA6IG51bGw7XG4gIH1cblxuICBzaWJsaW5ncyh0OiBUKTogVFtdIHtcbiAgICBjb25zdCBwID0gZmluZFBhdGgodCwgdGhpcy5fcm9vdCwgW10pO1xuICAgIGlmIChwLmxlbmd0aCA8IDIpIHJldHVybiBbXTtcblxuICAgIGNvbnN0IGMgPSBwW3AubGVuZ3RoIC0gMl0uY2hpbGRyZW4ubWFwKGMgPT4gYy52YWx1ZSk7XG4gICAgcmV0dXJuIGMuZmlsdGVyKGNjID0+IGNjICE9PSB0KTtcbiAgfVxuXG4gIHBhdGhGcm9tUm9vdCh0OiBUKTogVFtdIHsgcmV0dXJuIGZpbmRQYXRoKHQsIHRoaXMuX3Jvb3QsIFtdKS5tYXAocyA9PiBzLnZhbHVlKTsgfVxuXG4gIGNvbnRhaW5zKHRyZWU6IFRyZWU8VD4pOiBib29sZWFuIHsgcmV0dXJuIGNvbnRhaW5zKHRoaXMuX3Jvb3QsIHRyZWUuX3Jvb3QpOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByb290Tm9kZTxUPih0cmVlOiBUcmVlPFQ+KTogVHJlZU5vZGU8VD4ge1xuICByZXR1cm4gdHJlZS5fcm9vdDtcbn1cblxuZnVuY3Rpb24gZmluZE5vZGU8VD4oZXhwZWN0ZWQ6IFQsIGM6IFRyZWVOb2RlPFQ+KTogVHJlZU5vZGU8VD4gfCBudWxsIHtcbiAgaWYgKGV4cGVjdGVkID09PSBjLnZhbHVlKSByZXR1cm4gYztcbiAgZm9yIChsZXQgY2Mgb2YgYy5jaGlsZHJlbikge1xuICAgIGNvbnN0IHIgPSBmaW5kTm9kZShleHBlY3RlZCwgY2MpO1xuICAgIGlmIChyKSByZXR1cm4gcjtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZmluZFBhdGg8VD4oZXhwZWN0ZWQ6IFQsIGM6IFRyZWVOb2RlPFQ+LCBjb2xsZWN0ZWQ6IFRyZWVOb2RlPFQ+W10pOiBUcmVlTm9kZTxUPltdIHtcbiAgY29sbGVjdGVkLnB1c2goYyk7XG4gIGlmIChleHBlY3RlZCA9PT0gYy52YWx1ZSkgcmV0dXJuIGNvbGxlY3RlZDtcblxuICBmb3IgKGxldCBjYyBvZiBjLmNoaWxkcmVuKSB7XG4gICAgY29uc3QgY2xvbmVkID0gY29sbGVjdGVkLnNsaWNlKDApO1xuICAgIGNvbnN0IHIgPSBmaW5kUGF0aChleHBlY3RlZCwgY2MsIGNsb25lZCk7XG4gICAgaWYgKHIpIHJldHVybiByO1xuICB9XG5cbiAgcmV0dXJuIFtdO1xufVxuXG5mdW5jdGlvbiBjb250YWluczxUPih0cmVlOiBUcmVlTm9kZTxUPiwgc3VidHJlZTogVHJlZU5vZGU8VD4pOiBib29sZWFuIHtcbiAgaWYgKHRyZWUudmFsdWUgIT09IHN1YnRyZWUudmFsdWUpIHJldHVybiBmYWxzZTtcblxuICBmb3IgKGxldCBzdWJ0cmVlTm9kZSBvZiBzdWJ0cmVlLmNoaWxkcmVuKSB7XG4gICAgY29uc3QgcyA9IHRyZWUuY2hpbGRyZW4uZmlsdGVyKGNoaWxkID0+IGNoaWxkLnZhbHVlID09PSBzdWJ0cmVlTm9kZS52YWx1ZSk7XG4gICAgaWYgKHMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCFjb250YWlucyhzWzBdLCBzdWJ0cmVlTm9kZSkpIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY2xhc3MgVHJlZU5vZGU8VD4ge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdmFsdWU6IFQsIHB1YmxpYyBjaGlsZHJlbjogVHJlZU5vZGU8VD5bXSkge31cbn0iXX0= \ No newline at end of file diff --git a/modules/@angular/router/build/package.json b/modules/@angular/router/build/package.json new file mode 100644 index 0000000000..312420f918 --- /dev/null +++ b/modules/@angular/router/build/package.json @@ -0,0 +1,68 @@ +{ + "name": "vladivostok", + "version": "0.9.1", + "description": "", + "main": "./build/src/index.js", + "jsnext:main": "./build/es6/index.js", + "scripts": { + "karma": "karma start", + "test": "npm run build; karma start", + "build_watch": "rm -rf dist; tsc -w", + "build": "rm -rf dist; tsc", + "build_npm": "rm -rf dist && tsc -p tsconfig.publish.es5.json && tsc -p tsconfig.publish.es6.json", + "postbuild_npm": "cp package.json README.md dist/ && npm run rewrite_npm_package", + "rewrite_npm_package": "node --harmony_destructuring tools/rewrite-published-package.js", + "build_bundle": "cp -r src router && tsc typings/index.d.ts src/router.ts --rootDir . --module system -t es5 --outFile dist/bundles/router.js --moduleResolution node --emitDecoratorMetadata --experimentalDecorators" + }, + "keywords": [ + "angular2", + "angular", + "router" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/angular/vladivostok.git" + }, + "author": "vsavkin", + "license": "MIT", + "bugs": { + "url": "https://github.com/angular/vladivostok/issues" + }, + "homepage": "https://github.com/angular/vladivostok#readme", + "devDependencies": { + "es6-module-loader": "^0.17.10", + "es6-shim": "^0.35.0", + "gulp": "^3.9.0", + "gulp-jasmine": "^2.2.1", + "gulp-typescript": "^2.10.0", + "http-server": "^0.8.5", + "jasmine": "^2.4.1", + "jasmine-core": "^2.4.1", + "json": "^9.0.3", + "karma": "^0.13.19", + "karma-chrome-launcher": "^0.2.2", + "karma-firefox-launcher": "^0.1.7", + "karma-jasmine": "^0.3.6", + "karma-systemjs": "^0.10.0", + "karma-sourcemap-loader": "~0.3", + "parse5": "^1.3.2", + "protractor": "3.0.0", + "reflect-metadata": "0.1.2", + "systemjs": "^0.19.16", + "systemjs-builder": "^0.15.7", + "traceur": "0.0.96", + "tsd": "^0.6.5", + "typescript": "^1.9.0-dev.20160409", + "typings": "^1.0.4", + "zone.js": "^0.6.6" + }, + "typings": "router.d.ts", + "peerDependencies": { + "@angular/common": "2.0.0-rc.1", + "@angular/compiler": "2.0.0-rc.1", + "@angular/core": "2.0.0-rc.1", + "@angular/platform-browser": "2.0.0-rc.1", + "@angular/platform-browser-dynamic": "2.0.0-rc.1", + "rxjs": "5.0.0-beta.6" + } +} \ No newline at end of file diff --git a/modules/@angular/router/build/src/config.d.ts b/modules/@angular/router/build/src/config.d.ts new file mode 100644 index 0000000000..d0f5b418d6 --- /dev/null +++ b/modules/@angular/router/build/src/config.d.ts @@ -0,0 +1,9 @@ +import { Type } from '@angular/core'; +export declare type RouterConfig = Route[]; +export interface Route { + index?: boolean; + path?: string; + component: Type | string; + outlet?: string; + children?: Route[]; +} diff --git a/modules/@angular/router/build/src/config.js b/modules/@angular/router/build/src/config.js new file mode 100644 index 0000000000..c50ab67c1f --- /dev/null +++ b/modules/@angular/router/build/src/config.js @@ -0,0 +1,2 @@ +"use strict"; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgdHlwZSBSb3V0ZXJDb25maWcgPSBSb3V0ZVtdO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlIHtcbiAgaW5kZXg/OiBib29sZWFuO1xuICBwYXRoPzogc3RyaW5nO1xuICBjb21wb25lbnQ6IFR5cGUgfCBzdHJpbmc7XG4gIG91dGxldD86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBSb3V0ZVtdO1xufSJdfQ== \ No newline at end of file diff --git a/modules/@angular/router/build/src/create_url_tree.d.ts b/modules/@angular/router/build/src/create_url_tree.d.ts new file mode 100644 index 0000000000..999cea0d39 --- /dev/null +++ b/modules/@angular/router/build/src/create_url_tree.d.ts @@ -0,0 +1,4 @@ +import { UrlTree } from './url_tree'; +import { ActivatedRoute } from './router_state'; +import { Params } from './shared'; +export declare function createUrlTree(route: ActivatedRoute, urlTree: UrlTree, commands: any[], queryParameters: Params | undefined, fragment: string | undefined): UrlTree; diff --git a/modules/@angular/router/build/src/create_url_tree.js b/modules/@angular/router/build/src/create_url_tree.js new file mode 100644 index 0000000000..0053e97510 --- /dev/null +++ b/modules/@angular/router/build/src/create_url_tree.js @@ -0,0 +1,189 @@ +"use strict"; +var url_tree_1 = require('./url_tree'); +var tree_1 = require('./utils/tree'); +var collection_1 = require('./utils/collection'); +var shared_1 = require('./shared'); +function createUrlTree(route, urlTree, commands, queryParameters, fragment) { + if (commands.length === 0) { + return tree(tree_1.rootNode(urlTree), urlTree, queryParameters, fragment); + } + var normalizedCommands = normalizeCommands(commands); + if (navigateToRoot(normalizedCommands)) { + return tree(new tree_1.TreeNode(urlTree.root, []), urlTree, queryParameters, fragment); + } + var startingNode = findStartingNode(normalizedCommands, urlTree, route); + var updated = normalizedCommands.commands.length > 0 ? + updateMany(startingNode.children.slice(0), normalizedCommands.commands) : + []; + var newRoot = constructNewTree(tree_1.rootNode(urlTree), startingNode, updated); + return tree(newRoot, urlTree, queryParameters, fragment); +} +exports.createUrlTree = createUrlTree; +function tree(root, urlTree, queryParameters, fragment) { + var q = queryParameters ? stringify(queryParameters) : urlTree.queryParameters; + var f = fragment ? fragment : urlTree.fragment; + return new url_tree_1.UrlTree(root, q, f); +} +function navigateToRoot(normalizedChange) { + return normalizedChange.isAbsolute && normalizedChange.commands.length === 1 && + normalizedChange.commands[0] == "/"; +} +var NormalizedNavigationCommands = (function () { + function NormalizedNavigationCommands(isAbsolute, numberOfDoubleDots, commands) { + this.isAbsolute = isAbsolute; + this.numberOfDoubleDots = numberOfDoubleDots; + this.commands = commands; + } + return NormalizedNavigationCommands; +}()); +function normalizeCommands(commands) { + if ((typeof commands[0] === "string") && commands.length === 1 && commands[0] == "/") { + return new NormalizedNavigationCommands(true, 0, commands); + } + var numberOfDoubleDots = 0; + var isAbsolute = false; + var res = []; + for (var i = 0; i < commands.length; ++i) { + var c = commands[i]; + if (!(typeof c === "string")) { + res.push(c); + continue; + } + var parts = c.split('/'); + for (var j = 0; j < parts.length; ++j) { + var cc = parts[j]; + if (i == 0) { + if (j == 0 && cc == ".") { + } + else if (j == 0 && cc == "") { + isAbsolute = true; + } + else if (cc == "..") { + numberOfDoubleDots++; + } + else if (cc != '') { + res.push(cc); + } + } + else { + if (cc != '') { + res.push(cc); + } + } + } + } + return new NormalizedNavigationCommands(isAbsolute, numberOfDoubleDots, res); +} +function findStartingNode(normalizedChange, urlTree, route) { + if (normalizedChange.isAbsolute) { + return tree_1.rootNode(urlTree); + } + else { + var urlSegment = findUrlSegment(route, urlTree, normalizedChange.numberOfDoubleDots); + return findMatchingNode(urlSegment, tree_1.rootNode(urlTree)); + } +} +function findUrlSegment(route, urlTree, numberOfDoubleDots) { + var segments = route.urlSegments.value; + var urlSegment = segments[segments.length - 1]; + var path = urlTree.pathFromRoot(urlSegment); + if (path.length <= numberOfDoubleDots) { + throw new Error("Invalid number of '../'"); + } + return path[path.length - 1 - numberOfDoubleDots]; +} +function findMatchingNode(segment, node) { + if (node.value === segment) + return node; + for (var _i = 0, _a = node.children; _i < _a.length; _i++) { + var c = _a[_i]; + var r = findMatchingNode(segment, c); + if (r) + return r; + } + throw new Error("Cannot find url segment '" + segment + "'"); +} +function constructNewTree(node, original, updated) { + if (node === original) { + return new tree_1.TreeNode(node.value, updated); + } + else { + return new tree_1.TreeNode(node.value, node.children.map(function (c) { return constructNewTree(c, original, updated); })); + } +} +function updateMany(nodes, commands) { + var outlet = getOutlet(commands); + var nodesInRightOutlet = nodes.filter(function (c) { return c.value.outlet === outlet; }); + if (nodesInRightOutlet.length > 0) { + var nodeRightOutlet = nodesInRightOutlet[0]; + nodes[nodes.indexOf(nodeRightOutlet)] = update(nodeRightOutlet, commands); + } + else { + nodes.push(update(null, commands)); + } + return nodes; +} +function getPath(commands) { + if (!(typeof commands[0] === "string")) + return commands[0]; + var parts = commands[0].toString().split(":"); + return parts.length > 1 ? parts[1] : commands[0]; +} +function getOutlet(commands) { + if (!(typeof commands[0] === "string")) + return shared_1.PRIMARY_OUTLET; + var parts = commands[0].toString().split(":"); + return parts.length > 1 ? parts[0] : shared_1.PRIMARY_OUTLET; +} +function update(node, commands) { + var rest = commands.slice(1); + var next = rest.length === 0 ? null : rest[0]; + var outlet = getOutlet(commands); + var path = getPath(commands); + if (!node && !(typeof next === 'object')) { + var urlSegment = new url_tree_1.UrlSegment(path, {}, outlet); + var children = rest.length === 0 ? [] : [update(null, rest)]; + return new tree_1.TreeNode(urlSegment, children); + } + else if (!node && typeof next === 'object') { + var urlSegment = new url_tree_1.UrlSegment(path, stringify(next), outlet); + return recurse(urlSegment, node, rest.slice(1)); + } + else if (node && outlet !== node.value.outlet) { + return node; + } + else if (node && typeof path === 'object') { + var newSegment = new url_tree_1.UrlSegment(node.value.path, stringify(path), node.value.outlet); + return recurse(newSegment, node, rest); + } + else if (node && typeof next === 'object' && compare(path, stringify(next), node.value)) { + return recurse(node.value, node, rest.slice(1)); + } + else if (node && typeof next === 'object') { + var urlSegment = new url_tree_1.UrlSegment(path, stringify(next), outlet); + return recurse(urlSegment, node, rest.slice(1)); + } + else if (node && compare(path, {}, node.value)) { + return recurse(node.value, node, rest); + } + else { + var urlSegment = new url_tree_1.UrlSegment(path, {}, outlet); + return recurse(urlSegment, node, rest); + } +} +function stringify(params) { + var res = {}; + collection_1.forEach(params, function (v, k) { return res[k] = v.toString(); }); + return res; +} +function compare(path, params, segment) { + return path == segment.path && collection_1.shallowEqual(params, segment.parameters); +} +function recurse(urlSegment, node, rest) { + if (rest.length === 0) { + return new tree_1.TreeNode(urlSegment, []); + } + var children = node ? node.children.slice(0) : []; + return new tree_1.TreeNode(urlSegment, updateMany(children, rest)); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlX3VybF90cmVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NyZWF0ZV91cmxfdHJlZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEseUJBQXNELFlBQVksQ0FBQyxDQUFBO0FBQ25FLHFCQUFtQyxjQUFjLENBQUMsQ0FBQTtBQUNsRCwyQkFBc0Msb0JBQW9CLENBQUMsQ0FBQTtBQUUzRCx1QkFBdUMsVUFBVSxDQUFDLENBQUE7QUFFbEQsdUJBQThCLEtBQXFCLEVBQUUsT0FBZ0IsRUFBRSxRQUFlLEVBQ3hELGVBQW1DLEVBQUUsUUFBNEI7SUFDN0YsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELElBQU0sa0JBQWtCLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkQsRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxlQUFRLENBQWEsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFFRCxJQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUUsSUFBTSxPQUFPLEdBQUcsa0JBQWtCLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQ2xELFVBQVUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxRQUFRLENBQUM7UUFD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RUFBRSxDQUFDLElBQUssT0FBQSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFyQixDQUFxQixDQUFDLENBQUM7SUFDakQsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxpQkFBaUIsSUFBWSxFQUFFLE1BQTRCLEVBQUUsT0FBbUI7SUFDOUUsTUFBTSxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLHlCQUFZLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBRUQsaUJBQWlCLFVBQXNCLEVBQUUsSUFBaUMsRUFDeEQsSUFBVztJQUMzQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLElBQUksZUFBUSxDQUFhLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQ0QsSUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNwRCxNQUFNLENBQUMsSUFBSSxlQUFRLENBQWEsVUFBVSxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXJsVHJlZSwgVXJsU2VnbWVudCwgZXF1YWxVcmxTZWdtZW50cyB9IGZyb20gJy4vdXJsX3RyZWUnO1xuaW1wb3J0IHsgVHJlZU5vZGUsIHJvb3ROb2RlIH0gZnJvbSAnLi91dGlscy90cmVlJztcbmltcG9ydCB7IGZvckVhY2gsIHNoYWxsb3dFcXVhbCB9IGZyb20gJy4vdXRpbHMvY29sbGVjdGlvbic7XG5pbXBvcnQgeyBSb3V0ZXJTdGF0ZSwgQWN0aXZhdGVkUm91dGUgfSBmcm9tICcuL3JvdXRlcl9zdGF0ZSc7XG5pbXBvcnQgeyBQYXJhbXMsIFBSSU1BUllfT1VUTEVUIH0gZnJvbSAnLi9zaGFyZWQnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVXJsVHJlZShyb3V0ZTogQWN0aXZhdGVkUm91dGUsIHVybFRyZWU6IFVybFRyZWUsIGNvbW1hbmRzOiBhbnlbXSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnM6IFBhcmFtcyB8IHVuZGVmaW5lZCwgZnJhZ21lbnQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFVybFRyZWUge1xuICBpZiAoY29tbWFuZHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRyZWUocm9vdE5vZGUodXJsVHJlZSksIHVybFRyZWUsIHF1ZXJ5UGFyYW1ldGVycywgZnJhZ21lbnQpO1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZENvbW1hbmRzID0gbm9ybWFsaXplQ29tbWFuZHMoY29tbWFuZHMpO1xuICBpZiAobmF2aWdhdGVUb1Jvb3Qobm9ybWFsaXplZENvbW1hbmRzKSkge1xuICAgIHJldHVybiB0cmVlKG5ldyBUcmVlTm9kZTxVcmxTZWdtZW50Pih1cmxUcmVlLnJvb3QsIFtdKSwgdXJsVHJlZSwgcXVlcnlQYXJhbWV0ZXJzLCBmcmFnbWVudCk7XG4gIH1cblxuICBjb25zdCBzdGFydGluZ05vZGUgPSBmaW5kU3RhcnRpbmdOb2RlKG5vcm1hbGl6ZWRDb21tYW5kcywgdXJsVHJlZSwgcm91dGUpO1xuICBjb25zdCB1cGRhdGVkID0gbm9ybWFsaXplZENvbW1hbmRzLmNvbW1hbmRzLmxlbmd0aCA+IDAgP1xuICAgICAgdXBkYXRlTWFueShzdGFydGluZ05vZGUuY2hpbGRyZW4uc2xpY2UoMCksIG5vcm1hbGl6ZWRDb21tYW5kcy5jb21tYW5kcykgOlxuICAgICAgW107XG4gIGNvbnN0IG5ld1Jvb3QgPSBjb25zdHJ1Y3ROZXdUcmVlKHJvb3ROb2RlKHVybFRyZWUpLCBzdGFydGluZ05vZGUsIHVwZGF0ZWQpO1xuXG4gIHJldHVybiB0cmVlKG5ld1Jvb3QsIHVybFRyZWUsIHF1ZXJ5UGFyYW1ldGVycywgZnJhZ21lbnQpO1xufVxuXG5mdW5jdGlvbiB0cmVlKHJvb3Q6IFRyZWVOb2RlPFVybFNlZ21lbnQ+LCB1cmxUcmVlOiBVcmxUcmVlLCBxdWVyeVBhcmFtZXRlcnM6IFBhcmFtcyB8IHVuZGVmaW5lZCwgZnJhZ21lbnQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFVybFRyZWUge1xuICBjb25zdCBxID0gcXVlcnlQYXJhbWV0ZXJzID8gc3RyaW5naWZ5KHF1ZXJ5UGFyYW1ldGVycykgOiB1cmxUcmVlLnF1ZXJ5UGFyYW1ldGVycztcbiAgY29uc3QgZiA9IGZyYWdtZW50ID8gZnJhZ21lbnQgOiB1cmxUcmVlLmZyYWdtZW50O1xuICByZXR1cm4gbmV3IFVybFRyZWUocm9vdCwgcSwgZik7XG59XG5cbmZ1bmN0aW9uIG5hdmlnYXRlVG9Sb290KG5vcm1hbGl6ZWRDaGFuZ2U6IE5vcm1hbGl6ZWROYXZpZ2F0aW9uQ29tbWFuZHMpOiBib29sZWFuIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZWRDaGFuZ2UuaXNBYnNvbHV0ZSAmJiBub3JtYWxpemVkQ2hhbmdlLmNvbW1hbmRzLmxlbmd0aCA9PT0gMSAmJlxuICAgIG5vcm1hbGl6ZWRDaGFuZ2UuY29tbWFuZHNbMF0gPT0gXCIvXCI7XG59XG5cbmNsYXNzIE5vcm1hbGl6ZWROYXZpZ2F0aW9uQ29tbWFuZHMge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgaXNBYnNvbHV0ZTogYm9vbGVhbiwgcHVibGljIG51bWJlck9mRG91YmxlRG90czogbnVtYmVyLFxuICAgICAgICAgICAgICBwdWJsaWMgY29tbWFuZHM6IGFueVtdKSB7fVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVDb21tYW5kcyhjb21tYW5kczogYW55W10pOiBOb3JtYWxpemVkTmF2aWdhdGlvbkNvbW1hbmRzIHtcbiAgaWYgKCh0eXBlb2YgY29tbWFuZHNbMF0gPT09IFwic3RyaW5nXCIpICYmIGNvbW1hbmRzLmxlbmd0aCA9PT0gMSAmJiBjb21tYW5kc1swXSA9PSBcIi9cIikge1xuICAgIHJldHVybiBuZXcgTm9ybWFsaXplZE5hdmlnYXRpb25Db21tYW5kcyh0cnVlLCAwLCBjb21tYW5kcyk7XG4gIH1cblxuICBsZXQgbnVtYmVyT2ZEb3VibGVEb3RzID0gMDtcbiAgbGV0IGlzQWJzb2x1dGUgPSBmYWxzZTtcbiAgY29uc3QgcmVzID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21tYW5kcy5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGMgPSBjb21tYW5kc1tpXTtcblxuICAgIGlmICghKHR5cGVvZiBjID09PSBcInN0cmluZ1wiKSkge1xuICAgICAgcmVzLnB1c2goYyk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJ0cyA9IGMuc3BsaXQoJy8nKTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBhcnRzLmxlbmd0aDsgKytqKSB7XG4gICAgICBsZXQgY2MgPSBwYXJ0c1tqXTtcblxuICAgICAgLy8gZmlyc3QgZXhwIGlzIHRyZWF0ZWQgaW4gYSBzcGVjaWFsIHdheVxuICAgICAgaWYgKGkgPT0gMCkge1xuICAgICAgICBpZiAoaiA9PSAwICYmIGNjID09IFwiLlwiKSB7ICAvLyAgJy4vYSdcbiAgICAgICAgICAvLyBza2lwIGl0XG4gICAgICAgIH0gZWxzZSBpZiAoaiA9PSAwICYmIGNjID09IFwiXCIpIHsgIC8vICAnL2EnXG4gICAgICAgICAgaXNBYnNvbHV0ZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoY2MgPT0gXCIuLlwiKSB7ICAvLyAgJy4uL2EnXG4gICAgICAgICAgbnVtYmVyT2ZEb3VibGVEb3RzKys7XG4gICAgICAgIH0gZWxzZSBpZiAoY2MgIT0gJycpIHtcbiAgICAgICAgICByZXMucHVzaChjYyk7XG4gICAgICAgIH1cblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGNjICE9ICcnKSB7XG4gICAgICAgICAgcmVzLnB1c2goY2MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBOb3JtYWxpemVkTmF2aWdhdGlvbkNvbW1hbmRzKGlzQWJzb2x1dGUsIG51bWJlck9mRG91YmxlRG90cywgcmVzKTtcbn1cblxuZnVuY3Rpb24gZmluZFN0YXJ0aW5nTm9kZShub3JtYWxpemVkQ2hhbmdlOiBOb3JtYWxpemVkTmF2aWdhdGlvbkNvbW1hbmRzLCB1cmxUcmVlOiBVcmxUcmVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlKTogVHJlZU5vZGU8VXJsU2VnbWVudD4ge1xuICBpZiAobm9ybWFsaXplZENoYW5nZS5pc0Fic29sdXRlKSB7XG4gICAgcmV0dXJuIHJvb3ROb2RlKHVybFRyZWUpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHVybFNlZ21lbnQgPVxuICAgICAgZmluZFVybFNlZ21lbnQocm91dGUsIHVybFRyZWUsIG5vcm1hbGl6ZWRDaGFuZ2UubnVtYmVyT2ZEb3VibGVEb3RzKTtcbiAgICByZXR1cm4gZmluZE1hdGNoaW5nTm9kZSh1cmxTZWdtZW50LCByb290Tm9kZSh1cmxUcmVlKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZFVybFNlZ21lbnQocm91dGU6IEFjdGl2YXRlZFJvdXRlLCB1cmxUcmVlOiBVcmxUcmVlLCBudW1iZXJPZkRvdWJsZURvdHM6IG51bWJlcik6IFVybFNlZ21lbnQge1xuICBjb25zdCBzZWdtZW50cyA9ICg8YW55PnJvdXRlLnVybFNlZ21lbnRzKS52YWx1ZTtcbiAgY29uc3QgdXJsU2VnbWVudCA9IHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdO1xuICBjb25zdCBwYXRoID0gdXJsVHJlZS5wYXRoRnJvbVJvb3QodXJsU2VnbWVudCk7XG4gIGlmIChwYXRoLmxlbmd0aCA8PSBudW1iZXJPZkRvdWJsZURvdHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIG51bWJlciBvZiAnLi4vJ1wiKTtcbiAgfVxuICByZXR1cm4gcGF0aFtwYXRoLmxlbmd0aCAtIDEgLSBudW1iZXJPZkRvdWJsZURvdHNdO1xufVxuXG5mdW5jdGlvbiBmaW5kTWF0Y2hpbmdOb2RlKHNlZ21lbnQ6IFVybFNlZ21lbnQsIG5vZGU6IFRyZWVOb2RlPFVybFNlZ21lbnQ+KTogVHJlZU5vZGU8VXJsU2VnbWVudD4ge1xuICBpZiAobm9kZS52YWx1ZSA9PT0gc2VnbWVudCkgcmV0dXJuIG5vZGU7XG4gIGZvciAobGV0IGMgb2Ygbm9kZS5jaGlsZHJlbikge1xuICAgIGNvbnN0IHIgPSBmaW5kTWF0Y2hpbmdOb2RlKHNlZ21lbnQsIGMpO1xuICAgIGlmIChyKSByZXR1cm4gcjtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHVybCBzZWdtZW50ICcke3NlZ21lbnR9J2ApO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3ROZXdUcmVlKG5vZGU6IFRyZWVOb2RlPFVybFNlZ21lbnQ+LCBvcmlnaW5hbDogVHJlZU5vZGU8VXJsU2VnbWVudD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQ6IFRyZWVOb2RlPFVybFNlZ21lbnQ+W10pOiBUcmVlTm9kZTxVcmxTZWdtZW50PiB7XG4gIGlmIChub2RlID09PSBvcmlnaW5hbCkge1xuICAgIHJldHVybiBuZXcgVHJlZU5vZGU8VXJsU2VnbWVudD4obm9kZS52YWx1ZSwgdXBkYXRlZCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBUcmVlTm9kZTxVcmxTZWdtZW50PihcbiAgICAgIG5vZGUudmFsdWUsIG5vZGUuY2hpbGRyZW4ubWFwKGMgPT4gY29uc3RydWN0TmV3VHJlZShjLCBvcmlnaW5hbCwgdXBkYXRlZCkpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVNYW55KG5vZGVzOiBUcmVlTm9kZTxVcmxTZWdtZW50PltdLCBjb21tYW5kczogYW55W10pOiBUcmVlTm9kZTxVcmxTZWdtZW50PltdIHtcbiAgY29uc3Qgb3V0bGV0ID0gZ2V0T3V0bGV0KGNvbW1hbmRzKTtcbiAgY29uc3Qgbm9kZXNJblJpZ2h0T3V0bGV0ID0gbm9kZXMuZmlsdGVyKGMgPT4gYy52YWx1ZS5vdXRsZXQgPT09IG91dGxldCk7XG4gIGlmIChub2Rlc0luUmlnaHRPdXRsZXQubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IG5vZGVSaWdodE91dGxldCA9IG5vZGVzSW5SaWdodE91dGxldFswXTsgIC8vIHRoZXJlIGNhbiBiZSBvbmx5IG9uZVxuICAgIG5vZGVzW25vZGVzLmluZGV4T2Yobm9kZVJpZ2h0T3V0bGV0KV0gPSB1cGRhdGUobm9kZVJpZ2h0T3V0bGV0LCBjb21tYW5kcyk7XG4gIH0gZWxzZSB7XG4gICAgbm9kZXMucHVzaCh1cGRhdGUobnVsbCwgY29tbWFuZHMpKTtcbiAgfVxuICByZXR1cm4gbm9kZXM7XG59XG5cbmZ1bmN0aW9uIGdldFBhdGgoY29tbWFuZHM6IGFueVtdKTogYW55IHtcbiAgaWYgKCEodHlwZW9mIGNvbW1hbmRzWzBdID09PSBcInN0cmluZ1wiKSkgcmV0dXJuIGNvbW1hbmRzWzBdO1xuICBjb25zdCBwYXJ0cyA9IGNvbW1hbmRzWzBdLnRvU3RyaW5nKCkuc3BsaXQoXCI6XCIpO1xuICByZXR1cm4gcGFydHMubGVuZ3RoID4gMSA/IHBhcnRzWzFdIDogY29tbWFuZHNbMF07XG59XG5cbmZ1bmN0aW9uIGdldE91dGxldChjb21tYW5kczogYW55W10pOiBzdHJpbmcge1xuICBpZiAoISh0eXBlb2YgY29tbWFuZHNbMF0gPT09IFwic3RyaW5nXCIpKSByZXR1cm4gUFJJTUFSWV9PVVRMRVQ7XG4gIGNvbnN0IHBhcnRzID0gY29tbWFuZHNbMF0udG9TdHJpbmcoKS5zcGxpdChcIjpcIik7XG4gIHJldHVybiBwYXJ0cy5sZW5ndGggPiAxID8gcGFydHNbMF0gOiBQUklNQVJZX09VVExFVDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlKG5vZGU6IFRyZWVOb2RlPFVybFNlZ21lbnQ+fG51bGwsIGNvbW1hbmRzOiBhbnlbXSk6IFRyZWVOb2RlPFVybFNlZ21lbnQ+IHtcbiAgY29uc3QgcmVzdCA9IGNvbW1hbmRzLnNsaWNlKDEpO1xuICBjb25zdCBuZXh0ID0gcmVzdC5sZW5ndGggPT09IDAgPyBudWxsIDogcmVzdFswXTtcbiAgY29uc3Qgb3V0bGV0ID0gZ2V0T3V0bGV0KGNvbW1hbmRzKTtcbiAgY29uc3QgcGF0aCA9IGdldFBhdGgoY29tbWFuZHMpO1xuXG4gIC8vIHJlYWNoIHRoZSBlbmQgb2YgdGhlIHRyZWUgPT4gY3JlYXRlIG5ldyB0cmVlIG5vZGVzLlxuICBpZiAoIW5vZGUgJiYgISh0eXBlb2YgbmV4dCA9PT0gJ29iamVjdCcpKSB7XG4gICAgY29uc3QgdXJsU2VnbWVudCA9IG5ldyBVcmxTZWdtZW50KHBhdGgsIHt9LCBvdXRsZXQpO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gcmVzdC5sZW5ndGggPT09IDAgPyBbXSA6IFt1cGRhdGUobnVsbCwgcmVzdCldO1xuICAgIHJldHVybiBuZXcgVHJlZU5vZGU8VXJsU2VnbWVudD4odXJsU2VnbWVudCwgY2hpbGRyZW4pO1xuXG4gIH0gZWxzZSBpZiAoIW5vZGUgJiYgdHlwZW9mIG5leHQgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgdXJsU2VnbWVudCA9IG5ldyBVcmxTZWdtZW50KHBhdGgsIHN0cmluZ2lmeShuZXh0KSwgb3V0bGV0KTtcbiAgICByZXR1cm4gcmVjdXJzZSh1cmxTZWdtZW50LCBub2RlLCByZXN0LnNsaWNlKDEpKTtcblxuICAgIC8vIGRpZmZlcmVudCBvdXRsZXQgPT4gcHJlc2VydmUgdGhlIHN1YnRyZWVcbiAgfSBlbHNlIGlmIChub2RlICYmIG91dGxldCAhPT0gbm9kZS52YWx1ZS5vdXRsZXQpIHtcbiAgICByZXR1cm4gbm9kZTtcblxuICAgIC8vIHBhcmFtcyBjb21tYW5kXG4gIH0gZWxzZSBpZiAobm9kZSAmJiB0eXBlb2YgcGF0aCA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBuZXdTZWdtZW50ID0gbmV3IFVybFNlZ21lbnQobm9kZS52YWx1ZS5wYXRoLCBzdHJpbmdpZnkocGF0aCksIG5vZGUudmFsdWUub3V0bGV0KTtcbiAgICByZXR1cm4gcmVjdXJzZShuZXdTZWdtZW50LCBub2RlLCByZXN0KTtcblxuICAgIC8vIG5leHQgb25lIGlzIGEgcGFyYW1zIGNvbW1hbmQgJiYgY2FuIHJldXNlIHRoZSBub2RlXG4gIH0gZWxzZSBpZiAobm9kZSAmJiB0eXBlb2YgbmV4dCA9PT0gJ29iamVjdCcgJiYgY29tcGFyZShwYXRoLCBzdHJpbmdpZnkobmV4dCksIG5vZGUudmFsdWUpKSB7XG4gICAgcmV0dXJuIHJlY3Vyc2Uobm9kZS52YWx1ZSwgbm9kZSwgcmVzdC5zbGljZSgxKSk7XG5cbiAgICAvLyBuZXh0IG9uZSBpcyBhIHBhcmFtcyBjb21tYW5kICYmIGNhbm5vdCByZXVzZSB0aGUgbm9kZVxuICB9IGVsc2UgaWYgKG5vZGUgJiYgdHlwZW9mIG5leHQgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgdXJsU2VnbWVudCA9IG5ldyBVcmxTZWdtZW50KHBhdGgsIHN0cmluZ2lmeShuZXh0KSwgb3V0bGV0KTtcbiAgICByZXR1cm4gcmVjdXJzZSh1cmxTZWdtZW50LCBub2RlLCByZXN0LnNsaWNlKDEpKTtcblxuICAgIC8vIG5leHQgb25lIGlzIG5vdCBhIHBhcmFtcyBjb21tYW5kICYmIGNhbiByZXVzZSB0aGUgbm9kZVxuICB9IGVsc2UgaWYgKG5vZGUgJiYgY29tcGFyZShwYXRoLCB7fSwgbm9kZS52YWx1ZSkpIHtcbiAgICByZXR1cm4gcmVjdXJzZShub2RlLnZhbHVlLCBub2RlLCByZXN0KTtcblxuICAgIC8vIG5leHQgb25lIGlzIG5vdCBhIHBhcmFtcyBjb21tYW5kICYmIGNhbm5vdCByZXVzZSB0aGUgbm9kZVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IHVybFNlZ21lbnQgPSBuZXcgVXJsU2VnbWVudChwYXRoLCB7fSwgb3V0bGV0KTtcbiAgICByZXR1cm4gcmVjdXJzZSh1cmxTZWdtZW50LCBub2RlLCByZXN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnkocGFyYW1zOiB7W2tleTogc3RyaW5nXTogYW55fSk6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9IHtcbiAgY29uc3QgcmVzID0ge307XG4gIGZvckVhY2gocGFyYW1zLCAodiwgaykgPT4gcmVzW2tdID0gdi50b1N0cmluZygpKTtcbiAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gY29tcGFyZShwYXRoOiBzdHJpbmcsIHBhcmFtczoge1trZXk6IHN0cmluZ106IGFueX0sIHNlZ21lbnQ6IFVybFNlZ21lbnQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHBhdGggPT0gc2VnbWVudC5wYXRoICYmIHNoYWxsb3dFcXVhbChwYXJhbXMsIHNlZ21lbnQucGFyYW1ldGVycyk7XG59XG5cbmZ1bmN0aW9uIHJlY3Vyc2UodXJsU2VnbWVudDogVXJsU2VnbWVudCwgbm9kZTogVHJlZU5vZGU8VXJsU2VnbWVudD4gfCBudWxsLFxuICAgICAgICAgICAgICAgICAgcmVzdDogYW55W10pOiBUcmVlTm9kZTxVcmxTZWdtZW50PiB7XG4gIGlmIChyZXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBuZXcgVHJlZU5vZGU8VXJsU2VnbWVudD4odXJsU2VnbWVudCwgW10pO1xuICB9XG4gIGNvbnN0IGNoaWxkcmVuID0gbm9kZSA/IG5vZGUuY2hpbGRyZW4uc2xpY2UoMCkgOiBbXTtcbiAgcmV0dXJuIG5ldyBUcmVlTm9kZTxVcmxTZWdtZW50Pih1cmxTZWdtZW50LCB1cGRhdGVNYW55KGNoaWxkcmVuLCByZXN0KSk7XG59Il19 \ No newline at end of file diff --git a/modules/@angular/router/build/src/directives/router_link.d.ts b/modules/@angular/router/build/src/directives/router_link.d.ts new file mode 100644 index 0000000000..5ce81cb7fc --- /dev/null +++ b/modules/@angular/router/build/src/directives/router_link.d.ts @@ -0,0 +1,13 @@ +import { Router } from '../router'; +import { ActivatedRoute } from '../router_state'; +export declare class RouterLink { + private router; + private route; + target: string; + private commands; + href: string; + constructor(router: Router, route: ActivatedRoute); + routerLink: any[] | string; + onClick(): boolean; + private updateTargetUrlAndHref(); +} diff --git a/modules/@angular/router/build/src/directives/router_link.js b/modules/@angular/router/build/src/directives/router_link.js new file mode 100644 index 0000000000..11f7f909e3 --- /dev/null +++ b/modules/@angular/router/build/src/directives/router_link.js @@ -0,0 +1,72 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var core_1 = require('@angular/core'); +var router_1 = require('../router'); +var router_state_1 = require('../router_state'); +var RouterLink = (function () { + function RouterLink(router, route) { + this.router = router; + this.route = route; + this.commands = []; + } + Object.defineProperty(RouterLink.prototype, "routerLink", { + set: function (data) { + if (Array.isArray(data)) { + this.commands = data; + } + else { + this.commands = [data]; + } + this.updateTargetUrlAndHref(); + }, + enumerable: true, + configurable: true + }); + RouterLink.prototype.onClick = function () { + if (!(typeof this.target === "string") || this.target == '_self') { + this.router.navigate(this.commands, { relativeTo: this.route }); + return false; + } + return true; + }; + RouterLink.prototype.updateTargetUrlAndHref = function () { + var tree = this.router.createUrlTree(this.commands, { relativeTo: this.route }); + if (tree) { + this.href = this.router.serializeUrl(tree); + } + }; + __decorate([ + core_1.Input(), + __metadata('design:type', String) + ], RouterLink.prototype, "target", void 0); + __decorate([ + core_1.HostBinding(), + __metadata('design:type', String) + ], RouterLink.prototype, "href", void 0); + __decorate([ + core_1.Input(), + __metadata('design:type', Object), + __metadata('design:paramtypes', [Object]) + ], RouterLink.prototype, "routerLink", null); + __decorate([ + core_1.HostListener("click"), + __metadata('design:type', Function), + __metadata('design:paramtypes', []), + __metadata('design:returntype', Boolean) + ], RouterLink.prototype, "onClick", null); + RouterLink = __decorate([ + core_1.Directive({ selector: '[routerLink]' }), + __metadata('design:paramtypes', [router_1.Router, router_state_1.ActivatedRoute]) + ], RouterLink); + return RouterLink; +}()); +exports.RouterLink = RouterLink; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyX2xpbmsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGlyZWN0aXZlcy9yb3V0ZXJfbGluay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEscUJBS08sZUFBZSxDQUFDLENBQUE7QUFDdkIsdUJBQXFCLFdBQVcsQ0FBQyxDQUFBO0FBQ2pDLDZCQUE2QixpQkFBaUIsQ0FBQyxDQUFBO0FBNEIvQztJQU9FLG9CQUFvQixNQUFjLEVBQVUsS0FBcUI7UUFBN0MsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBTHpELGFBQVEsR0FBVSxFQUFFLENBQUM7SUFLdUMsQ0FBQztJQUdyRSxzQkFBSSxrQ0FBVTthQUFkLFVBQWUsSUFBb0I7WUFDakMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDTixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsQ0FBQztZQUNELElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ2hDLENBQUM7OztPQUFBO0lBSUQsNEJBQU8sR0FBUDtRQUVFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUM7WUFDOUQsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLDJDQUFzQixHQUE5QjtRQUNFLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUM7UUFDaEYsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNULElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsQ0FBQztJQUNILENBQUM7SUFsQ0Q7UUFBQyxZQUFLLEVBQUU7OzhDQUFBO0lBSVI7UUFBQyxrQkFBVyxFQUFFOzs0Q0FBQTtJQUlkO1FBQUMsWUFBSyxFQUFFOzs7Z0RBQUE7SUFXUjtRQUFDLG1CQUFZLENBQUMsT0FBTyxDQUFDOzs7OzZDQUFBO0lBckJ4QjtRQUFDLGdCQUFTLENBQUMsRUFBQyxRQUFRLEVBQUUsY0FBYyxFQUFDLENBQUM7O2tCQUFBO0lBcUN0QyxpQkFBQztBQUFELENBQUMsQUFwQ0QsSUFvQ0M7QUFwQ1ksa0JBQVUsYUFvQ3RCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJy4uL3JvdXRlcic7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICcuLi9yb3V0ZXJfc3RhdGUnO1xuXG4vKipcbiAqIFRoZSBSb3V0ZXJMaW5rIGRpcmVjdGl2ZSBsZXRzIHlvdSBsaW5rIHRvIHNwZWNpZmljIHBhcnRzIG9mIHlvdXIgYXBwLlxuICpcbiAqIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgcm91dGUgY29uZmlndXJhdGlvbjpcblxuICogYGBgXG4gKiBbeyBwYXRoOiAnL3VzZXInLCBjb21wb25lbnQ6IFVzZXJDbXAgfV1cbiAqIGBgYFxuICpcbiAqIFdoZW4gbGlua2luZyB0byB0aGlzIGBVc2VyYCByb3V0ZSwgeW91IGNhbiB3cml0ZTpcbiAqXG4gKiBgYGBcbiAqIDxhIFtyb3V0ZXJMaW5rXT1cIlsnL3VzZXInXVwiPmxpbmsgdG8gdXNlciBjb21wb25lbnQ8L2E+XG4gKiBgYGBcbiAqXG4gKiBSb3V0ZXJMaW5rIGV4cGVjdHMgdGhlIHZhbHVlIHRvIGJlIGFuIGFycmF5IG9mIHBhdGggc2VnbWVudHMsIGZvbGxvd2VkIGJ5IHRoZSBwYXJhbXNcbiAqIGZvciB0aGF0IGxldmVsIG9mIHJvdXRpbmcuIEZvciBpbnN0YW5jZSBgWycvdGVhbScsIHt0ZWFtSWQ6IDF9LCAndXNlcicsIHt1c2VySWQ6IDJ9XWBcbiAqIG1lYW5zIHRoYXQgd2Ugd2FudCB0byBnZW5lcmF0ZSBhIGxpbmsgdG8gYC90ZWFtO3RlYW1JZD0xL3VzZXI7dXNlcklkPTJgLlxuICpcbiAqIFRoZSBmaXJzdCBzZWdtZW50IG5hbWUgY2FuIGJlIHByZXBlbmRlZCB3aXRoIGAvYCwgYC4vYCwgb3IgYC4uL2AuXG4gKiBJZiB0aGUgc2VnbWVudCBiZWdpbnMgd2l0aCBgL2AsIHRoZSByb3V0ZXIgd2lsbCBsb29rIHVwIHRoZSByb3V0ZSBmcm9tIHRoZSByb290IG9mIHRoZSBhcHAuXG4gKiBJZiB0aGUgc2VnbWVudCBiZWdpbnMgd2l0aCBgLi9gLCBvciBkb2Vzbid0IGJlZ2luIHdpdGggYSBzbGFzaCwgdGhlIHJvdXRlciB3aWxsXG4gKiBpbnN0ZWFkIGxvb2sgaW4gdGhlIGN1cnJlbnQgY29tcG9uZW50J3MgY2hpbGRyZW4gZm9yIHRoZSByb3V0ZS5cbiAqIEFuZCBpZiB0aGUgc2VnbWVudCBiZWdpbnMgd2l0aCBgLi4vYCwgdGhlIHJvdXRlciB3aWxsIGdvIHVwIG9uZSBsZXZlbC5cbiAqL1xuQERpcmVjdGl2ZSh7c2VsZWN0b3I6ICdbcm91dGVyTGlua10nfSlcbmV4cG9ydCBjbGFzcyBSb3V0ZXJMaW5rIHtcbiAgQElucHV0KCkgdGFyZ2V0OiBzdHJpbmc7XG4gIHByaXZhdGUgY29tbWFuZHM6IGFueVtdID0gW107XG5cbiAgLy8gdGhlIHVybCBkaXNwbGF5ZWQgb24gdGhlIGFuY2hvciBlbGVtZW50LlxuICBASG9zdEJpbmRpbmcoKSBocmVmOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUpIHt9XG5cbiAgQElucHV0KClcbiAgc2V0IHJvdXRlckxpbmsoZGF0YTogYW55W10gfCBzdHJpbmcpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgdGhpcy5jb21tYW5kcyA9IGRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29tbWFuZHMgPSBbZGF0YV07XG4gICAgfVxuICAgIHRoaXMudXBkYXRlVGFyZ2V0VXJsQW5kSHJlZigpO1xuICB9XG5cblxuICBASG9zdExpc3RlbmVyKFwiY2xpY2tcIilcbiAgb25DbGljaygpOiBib29sZWFuIHtcbiAgICAvLyBJZiBubyB0YXJnZXQsIG9yIGlmIHRhcmdldCBpcyBfc2VsZiwgcHJldmVudCBkZWZhdWx0IGJyb3dzZXIgYmVoYXZpb3JcbiAgICBpZiAoISh0eXBlb2YgdGhpcy50YXJnZXQgPT09IFwic3RyaW5nXCIpIHx8IHRoaXMudGFyZ2V0ID09ICdfc2VsZicpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKHRoaXMuY29tbWFuZHMsIHtyZWxhdGl2ZVRvOiB0aGlzLnJvdXRlfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVUYXJnZXRVcmxBbmRIcmVmKCk6IHZvaWQge1xuICAgIGNvbnN0IHRyZWUgPSB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKHRoaXMuY29tbWFuZHMsIHtyZWxhdGl2ZVRvOiB0aGlzLnJvdXRlfSk7XG4gICAgaWYgKHRyZWUpIHtcbiAgICAgIHRoaXMuaHJlZiA9IHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybCh0cmVlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/modules/@angular/router/build/src/directives/router_outlet.d.ts b/modules/@angular/router/build/src/directives/router_outlet.d.ts new file mode 100644 index 0000000000..bfddeddb4b --- /dev/null +++ b/modules/@angular/router/build/src/directives/router_outlet.d.ts @@ -0,0 +1,11 @@ +import { ViewContainerRef, ComponentFactory, ResolvedReflectiveProvider } from '@angular/core'; +import { RouterOutletMap } from '../router_outlet_map'; +export declare class RouterOutlet { + private location; + private activated; + outletMap: RouterOutletMap; + constructor(parentOutletMap: RouterOutletMap, location: ViewContainerRef, name: string); + readonly isActivated: boolean; + deactivate(): void; + activate(factory: ComponentFactory, providers: ResolvedReflectiveProvider[], outletMap: RouterOutletMap): void; +} diff --git a/modules/@angular/router/build/src/directives/router_outlet.js b/modules/@angular/router/build/src/directives/router_outlet.js new file mode 100644 index 0000000000..41ac2aef21 --- /dev/null +++ b/modules/@angular/router/build/src/directives/router_outlet.js @@ -0,0 +1,46 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var core_1 = require('@angular/core'); +var router_outlet_map_1 = require('../router_outlet_map'); +var shared_1 = require('../shared'); +var RouterOutlet = (function () { + function RouterOutlet(parentOutletMap, location, name) { + this.location = location; + parentOutletMap.registerOutlet(name ? name : shared_1.PRIMARY_OUTLET, this); + } + Object.defineProperty(RouterOutlet.prototype, "isActivated", { + get: function () { return !!this.activated; }, + enumerable: true, + configurable: true + }); + RouterOutlet.prototype.deactivate = function () { + if (this.activated) { + this.activated.destroy(); + this.activated = null; + } + }; + RouterOutlet.prototype.activate = function (factory, providers, outletMap) { + this.outletMap = outletMap; + var inj = core_1.ReflectiveInjector.fromResolvedProviders(providers, this.location.parentInjector); + this.activated = this.location.createComponent(factory, this.location.length, inj, []); + }; + RouterOutlet = __decorate([ + core_1.Directive({ selector: 'router-outlet' }), + __param(2, core_1.Attribute('name')), + __metadata('design:paramtypes', [router_outlet_map_1.RouterOutletMap, core_1.ViewContainerRef, String]) + ], RouterOutlet); + return RouterOutlet; +}()); +exports.RouterOutlet = RouterOutlet; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyX291dGxldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kaXJlY3RpdmVzL3JvdXRlcl9vdXRsZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLHFCQUFxSSxlQUFlLENBQUMsQ0FBQTtBQUNySixrQ0FBOEIsc0JBQXNCLENBQUMsQ0FBQTtBQUNyRCx1QkFBNkIsV0FBVyxDQUFDLENBQUE7QUFHekM7SUFJRSxzQkFBWSxlQUErQixFQUFVLFFBQXlCLEVBQy9DLElBQVc7UUFEVyxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUU1RSxlQUFlLENBQUMsY0FBYyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsdUJBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsc0JBQUkscUNBQVc7YUFBZixjQUE2QixNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUV2RCxpQ0FBVSxHQUFWO1FBQ0UsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN4QixDQUFDO0lBQ0gsQ0FBQztJQUVELCtCQUFRLEdBQVIsVUFBUyxPQUE4QixFQUFFLFNBQXVDLEVBQ3ZFLFNBQTBCO1FBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksR0FBRyxHQUFHLHlCQUFrQixDQUFDLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVGLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBeEJIO1FBQUMsZ0JBQVMsQ0FBQyxFQUFDLFFBQVEsRUFBRSxlQUFlLEVBQUMsQ0FBQzttQkFNeEIsZ0JBQVMsQ0FBQyxNQUFNLENBQUM7O29CQU5PO0lBeUJ2QyxtQkFBQztBQUFELENBQUMsQUF4QkQsSUF3QkM7QUF4Qlksb0JBQVksZUF3QnhCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgVmlld0NvbnRhaW5lclJlZiwgQXR0cmlidXRlLCBDb21wb25lbnRSZWYsIENvbXBvbmVudEZhY3RvcnksIFJlc29sdmVkUmVmbGVjdGl2ZVByb3ZpZGVyLCBSZWZsZWN0aXZlSW5qZWN0b3J9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSb3V0ZXJPdXRsZXRNYXB9IGZyb20gJy4uL3JvdXRlcl9vdXRsZXRfbWFwJztcbmltcG9ydCB7UFJJTUFSWV9PVVRMRVR9IGZyb20gJy4uL3NoYXJlZCc7XG5cbkBEaXJlY3RpdmUoe3NlbGVjdG9yOiAncm91dGVyLW91dGxldCd9KVxuZXhwb3J0IGNsYXNzIFJvdXRlck91dGxldCB7XG4gIHByaXZhdGUgYWN0aXZhdGVkOkNvbXBvbmVudFJlZjxhbnk+fG51bGw7XG4gIHB1YmxpYyBvdXRsZXRNYXA6Um91dGVyT3V0bGV0TWFwO1xuXG4gIGNvbnN0cnVjdG9yKHBhcmVudE91dGxldE1hcDpSb3V0ZXJPdXRsZXRNYXAsIHByaXZhdGUgbG9jYXRpb246Vmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgICAgICAgQEF0dHJpYnV0ZSgnbmFtZScpIG5hbWU6c3RyaW5nKSB7XG4gICAgcGFyZW50T3V0bGV0TWFwLnJlZ2lzdGVyT3V0bGV0KG5hbWUgPyBuYW1lIDogUFJJTUFSWV9PVVRMRVQsIHRoaXMpO1xuICB9XG5cbiAgZ2V0IGlzQWN0aXZhdGVkKCk6IGJvb2xlYW4geyByZXR1cm4gISF0aGlzLmFjdGl2YXRlZDsgfVxuICBcbiAgZGVhY3RpdmF0ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hY3RpdmF0ZWQpIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVkLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuYWN0aXZhdGVkID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhY3RpdmF0ZShmYWN0b3J5OiBDb21wb25lbnRGYWN0b3J5PGFueT4sIHByb3ZpZGVyczogUmVzb2x2ZWRSZWZsZWN0aXZlUHJvdmlkZXJbXSxcbiAgICAgICAgICAgb3V0bGV0TWFwOiBSb3V0ZXJPdXRsZXRNYXApOiB2b2lkIHtcbiAgICB0aGlzLm91dGxldE1hcCA9IG91dGxldE1hcDtcbiAgICBsZXQgaW5qID0gUmVmbGVjdGl2ZUluamVjdG9yLmZyb21SZXNvbHZlZFByb3ZpZGVycyhwcm92aWRlcnMsIHRoaXMubG9jYXRpb24ucGFyZW50SW5qZWN0b3IpO1xuICAgIHRoaXMuYWN0aXZhdGVkID0gdGhpcy5sb2NhdGlvbi5jcmVhdGVDb21wb25lbnQoZmFjdG9yeSwgdGhpcy5sb2NhdGlvbi5sZW5ndGgsIGluaiwgW10pO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/modules/@angular/router/build/src/index.d.ts b/modules/@angular/router/build/src/index.d.ts new file mode 100644 index 0000000000..7ec5c4879d --- /dev/null +++ b/modules/@angular/router/build/src/index.d.ts @@ -0,0 +1,7 @@ +export { Router } from './router'; +export { UrlSerializer, DefaultUrlSerializer } from './url_serializer'; +export { RouterState, ActivatedRoute } from './router_state'; +export { RouterOutletMap } from './router_outlet_map'; +import { RouterOutlet } from './directives/router_outlet'; +import { RouterLink } from './directives/router_link'; +export declare const ROUTER_DIRECTIVES: (typeof RouterOutlet | typeof RouterLink)[]; diff --git a/modules/@angular/router/build/src/index.js b/modules/@angular/router/build/src/index.js new file mode 100644 index 0000000000..0804f1e456 --- /dev/null +++ b/modules/@angular/router/build/src/index.js @@ -0,0 +1,15 @@ +"use strict"; +var router_1 = require('./router'); +exports.Router = router_1.Router; +var url_serializer_1 = require('./url_serializer'); +exports.UrlSerializer = url_serializer_1.UrlSerializer; +exports.DefaultUrlSerializer = url_serializer_1.DefaultUrlSerializer; +var router_state_1 = require('./router_state'); +exports.RouterState = router_state_1.RouterState; +exports.ActivatedRoute = router_state_1.ActivatedRoute; +var router_outlet_map_1 = require('./router_outlet_map'); +exports.RouterOutletMap = router_outlet_map_1.RouterOutletMap; +var router_outlet_1 = require('./directives/router_outlet'); +var router_link_1 = require('./directives/router_link'); +exports.ROUTER_DIRECTIVES = [router_outlet_1.RouterOutlet, router_link_1.RouterLink]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHVCQUF1QixVQUFVLENBQUM7QUFBekIsaUNBQXlCO0FBQ2xDLCtCQUFvRCxrQkFBa0IsQ0FBQztBQUE5RCx1REFBYTtBQUFFLHFFQUErQztBQUN2RSw2QkFBNEMsZ0JBQWdCLENBQUM7QUFBcEQsaURBQVc7QUFBRSx1REFBdUM7QUFDN0Qsa0NBQWdDLHFCQUFxQixDQUFDO0FBQTdDLDhEQUE2QztBQUV0RCw4QkFBNkIsNEJBQTRCLENBQUMsQ0FBQTtBQUMxRCw0QkFBMkIsMEJBQTBCLENBQUMsQ0FBQTtBQUV6Qyx5QkFBaUIsR0FBRyxDQUFDLDRCQUFZLEVBQUUsd0JBQVUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgUm91dGVyIH0gZnJvbSAnLi9yb3V0ZXInO1xuZXhwb3J0IHsgVXJsU2VyaWFsaXplciwgRGVmYXVsdFVybFNlcmlhbGl6ZXIgfSBmcm9tICcuL3VybF9zZXJpYWxpemVyJztcbmV4cG9ydCB7IFJvdXRlclN0YXRlLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJy4vcm91dGVyX3N0YXRlJztcbmV4cG9ydCB7IFJvdXRlck91dGxldE1hcCB9IGZyb20gJy4vcm91dGVyX291dGxldF9tYXAnO1xuXG5pbXBvcnQgeyBSb3V0ZXJPdXRsZXQgfSBmcm9tICcuL2RpcmVjdGl2ZXMvcm91dGVyX291dGxldCc7XG5pbXBvcnQgeyBSb3V0ZXJMaW5rIH0gZnJvbSAnLi9kaXJlY3RpdmVzL3JvdXRlcl9saW5rJztcblxuZXhwb3J0IGNvbnN0IFJPVVRFUl9ESVJFQ1RJVkVTID0gW1JvdXRlck91dGxldCwgUm91dGVyTGlua107Il19 \ No newline at end of file diff --git a/modules/@angular/router/build/src/recognize.d.ts b/modules/@angular/router/build/src/recognize.d.ts new file mode 100644 index 0000000000..64aeb9f2f7 --- /dev/null +++ b/modules/@angular/router/build/src/recognize.d.ts @@ -0,0 +1,5 @@ +import { UrlTree } from './url_tree'; +import { RouterState } from './router_state'; +import { RouterConfig } from './config'; +import { Observable } from 'rxjs/Observable'; +export declare function recognize(config: RouterConfig, url: UrlTree, existingState: RouterState): Observable; diff --git a/modules/@angular/router/build/src/recognize.js b/modules/@angular/router/build/src/recognize.js new file mode 100644 index 0000000000..0b4cb3fbe6 --- /dev/null +++ b/modules/@angular/router/build/src/recognize.js @@ -0,0 +1,171 @@ +"use strict"; +var collection_1 = require('./utils/collection'); +var tree_1 = require('./utils/tree'); +var router_state_1 = require('./router_state'); +var shared_1 = require('./shared'); +var Observable_1 = require('rxjs/Observable'); +var BehaviorSubject_1 = require('rxjs/BehaviorSubject'); +function recognize(config, url, existingState) { + try { + var match_1 = new MatchResult(existingState.root.component, config, [url.root], {}, tree_1.rootNode(url).children, [], shared_1.PRIMARY_OUTLET); + existingState.queryParams.next(url.queryParameters); + existingState.fragment.next(url.fragment); + var roots = constructActivatedRoute(match_1, tree_1.rootNode(existingState)); + var res_1 = new router_state_1.RouterState(roots[0], existingState.queryParams, existingState.fragment); + return new Observable_1.Observable(function (obs) { + obs.next(res_1); + obs.complete(); + }); + } + catch (e) { + return new Observable_1.Observable(function (obs) { return obs.error(e); }); + } +} +exports.recognize = recognize; +function constructActivatedRoute(match, existingRoute) { + var activatedRoute = createOrReuseRoute(match, existingRoute); + var existingChildren = existingRoute ? existingRoute.children : []; + if (match.leftOverUrl.length > 0) { + var children = recognizeMany(match.children, match.leftOverUrl, existingChildren); + checkOutletNameUniqueness(children); + return [new tree_1.TreeNode(activatedRoute, children)]; + } + else { + return [new tree_1.TreeNode(activatedRoute, [])]; + } +} +function recognizeMany(config, urls, existingRoutes) { + return collection_1.flatten(urls.map(function (url) { return recognizeOne(config, url, existingRoutes); })); +} +function createOrReuseRoute(match, existing) { + if (existing) { + var v = existing.value; + if (v.component === match.component && v.outlet === match.outlet) { + (v.params).next(match.parameters); + (v.urlSegments).next(match.consumedUrlSegments); + return v; + } + } + return new router_state_1.ActivatedRoute(new BehaviorSubject_1.BehaviorSubject(match.consumedUrlSegments), new BehaviorSubject_1.BehaviorSubject(match.parameters), match.outlet, match.component); +} +function recognizeOne(config, url, existingRoutes) { + var m = match(config, url); + var routesWithRightOutlet = existingRoutes.filter(function (r) { return r.value.outlet == m.outlet; }); + var routeWithRightOutlet = routesWithRightOutlet.length > 0 ? routesWithRightOutlet[0] : null; + var primary = constructActivatedRoute(m, routeWithRightOutlet); + var secondary = recognizeMany(config, m.secondary, existingRoutes); + var res = primary.concat(secondary); + checkOutletNameUniqueness(res); + return res; +} +function checkOutletNameUniqueness(nodes) { + var names = {}; + nodes.forEach(function (n) { + var routeWithSameOutletName = names[n.value.outlet]; + if (routeWithSameOutletName) { + var p = routeWithSameOutletName.urlSegments.value.map(function (s) { return s.toString(); }).join("/"); + var c = n.value.urlSegments.value.map(function (s) { return s.toString(); }).join("/"); + throw new Error("Two segments cannot have the same outlet name: '" + p + "' and '" + c + "'."); + } + names[n.value.outlet] = n.value; + }); + return nodes; +} +function match(config, url) { + var m = matchNonIndex(config, url); + if (m) + return m; + var mIndex = matchIndex(config, url); + if (mIndex) + return mIndex; + var availableRoutes = config.map(function (r) { + var outlet = !r.outlet ? '' : r.outlet + ":"; + return "'" + outlet + r.path + "'"; + }).join(", "); + throw new Error("Cannot match any routes. Current segment: '" + url.value + "'. Available routes: [" + availableRoutes + "]."); +} +function matchNonIndex(config, url) { + for (var _i = 0, config_1 = config; _i < config_1.length; _i++) { + var r = config_1[_i]; + var m = matchWithParts(r, url); + if (m) + return m; + } + return null; +} +function matchIndex(config, url) { + for (var _i = 0, config_2 = config; _i < config_2.length; _i++) { + var r = config_2[_i]; + if (r.index) { + var outlet = r.outlet ? r.outlet : shared_1.PRIMARY_OUTLET; + var children = r.children ? r.children : []; + return new MatchResult(r.component, children, [], {}, [url], [], outlet); + } + } + return null; +} +function matchWithParts(route, url) { + if (!route.path) + return null; + if ((route.outlet ? route.outlet : shared_1.PRIMARY_OUTLET) !== url.value.outlet) + return null; + var path = route.path.startsWith("/") ? route.path.substring(1) : route.path; + if (path === "**") { + var consumedUrl = []; + var u = url; + while (u) { + consumedUrl.push(u.value); + u = collection_1.first(u.children); + } + var last = consumedUrl[consumedUrl.length - 1]; + return new MatchResult(route.component, [], consumedUrl, last.parameters, [], [], shared_1.PRIMARY_OUTLET); + } + var parts = path.split("/"); + var positionalParams = {}; + var consumedUrlSegments = []; + var lastParent = null; + var lastSegment = null; + var current = url; + for (var i = 0; i < parts.length; ++i) { + if (!current) + return null; + var p_1 = parts[i]; + var isLastSegment = i === parts.length - 1; + var isLastParent = i === parts.length - 2; + var isPosParam = p_1.startsWith(":"); + if (!isPosParam && p_1 != current.value.path) + return null; + if (isLastSegment) { + lastSegment = current; + } + if (isLastParent) { + lastParent = current; + } + if (isPosParam) { + positionalParams[p_1.substring(1)] = current.value.path; + } + consumedUrlSegments.push(current.value); + current = collection_1.first(current.children); + } + if (!lastSegment) + throw "Cannot be reached"; + var p = lastSegment.value.parameters; + var parameters = collection_1.merge(p, positionalParams); + var secondarySubtrees = lastParent ? lastParent.children.slice(1) : []; + var children = route.children ? route.children : []; + var outlet = route.outlet ? route.outlet : shared_1.PRIMARY_OUTLET; + return new MatchResult(route.component, children, consumedUrlSegments, parameters, lastSegment.children, secondarySubtrees, outlet); +} +var MatchResult = (function () { + function MatchResult(component, children, consumedUrlSegments, parameters, leftOverUrl, secondary, outlet) { + this.component = component; + this.children = children; + this.consumedUrlSegments = consumedUrlSegments; + this.parameters = parameters; + this.leftOverUrl = leftOverUrl; + this.secondary = secondary; + this.outlet = outlet; + } + return MatchResult; +}()); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb2duaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlY29nbml6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsMkJBQXNDLG9CQUFvQixDQUFDLENBQUE7QUFDM0QscUJBQW1DLGNBQWMsQ0FBQyxDQUFBO0FBQ2xELDZCQUE0QyxnQkFBZ0IsQ0FBQyxDQUFBO0FBQzdELHVCQUF1QyxVQUFVLENBQUMsQ0FBQTtBQUdsRCwyQkFBMkIsaUJBQWlCLENBQUMsQ0FBQTtBQUM3QyxnQ0FBZ0Msc0JBQXNCLENBQUMsQ0FBQTtBQUV2RCxtQkFBMEIsTUFBb0IsRUFBRSxHQUFZLEVBQUUsYUFBMEI7SUFDdEYsSUFBSSxDQUFDO1FBQ0gsSUFBTSxPQUFLLEdBQUcsSUFBSSxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxlQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSx1QkFBYyxDQUFDLENBQUM7UUFDMUgsYUFBYSxDQUFDLFdBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3JELGFBQWEsQ0FBQyxRQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqRCxJQUFNLEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxPQUFLLEVBQUUsZUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDdEUsSUFBTSxLQUFHLEdBQUcsSUFBSSwwQkFBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6RixNQUFNLENBQUMsSUFBSSx1QkFBVSxDQUFjLFVBQUEsR0FBRztZQUNwQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUcsQ0FBQyxD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Q0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN6RSxJQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3RELElBQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyx1QkFBYyxDQUFDO0lBRTVELE1BQU0sQ0FBQyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFDckcsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVEO0lBQ0UscUJBQW1CLFNBQXdCLEVBQ3hCLFFBQWlCLEVBQ2pCLG1CQUFpQyxFQUNqQyxVQUFtQyxFQUNuQyxXQUFtQyxFQUNuQyxTQUFpQyxFQUNqQyxNQUFjO1FBTmQsY0FBUyxHQUFULFNBQVMsQ0FBZTtRQUN4QixhQUFRLEdBQVIsUUFBUSxDQUFTO1FBQ2pCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBYztRQUNqQyxlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUNuQyxnQkFBVyxHQUFYLFdBQVcsQ0FBd0I7UUFDbkMsY0FBUyxHQUFULFNBQVMsQ0FBd0I7UUFDakMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUM5QixDQUFDO0lBQ04sa0JBQUM7QUFBRCxDQUFDLEFBVEQsSUFTQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVybFRyZWUsIFVybFNlZ21lbnQgfSBmcm9tICcuL3VybF90cmVlJztcbmltcG9ydCB7IGZsYXR0ZW4sIGZpcnN0LCBtZXJnZSB9IGZyb20gJy4vdXRpbHMvY29sbGVjdGlvbic7XG5pbXBvcnQgeyBUcmVlTm9kZSwgcm9vdE5vZGUgfSBmcm9tICcuL3V0aWxzL3RyZWUnO1xuaW1wb3J0IHsgUm91dGVyU3RhdGUsIEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnLi9yb3V0ZXJfc3RhdGUnO1xuaW1wb3J0IHsgUGFyYW1zLCBQUklNQVJZX09VVExFVCB9IGZyb20gJy4vc2hhcmVkJztcbmltcG9ydCB7IFJvdXRlckNvbmZpZywgUm91dGUgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcy9PYnNlcnZhYmxlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMvQmVoYXZpb3JTdWJqZWN0JztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlY29nbml6ZShjb25maWc6IFJvdXRlckNvbmZpZywgdXJsOiBVcmxUcmVlLCBleGlzdGluZ1N0YXRlOiBSb3V0ZXJTdGF0ZSk6IE9ic2VydmFibGU8Um91dGVyU3RhdGU+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBtYXRjaCA9IG5ldyBNYXRjaFJlc3VsdChleGlzdGluZ1N0YXRlLnJvb3QuY29tcG9uZW50LCBjb25maWcsIFt1cmwucm9vdF0sIHt9LCByb290Tm9kZSh1cmwpLmNoaWxkcmVuLCBbXSwgUFJJTUFSWV9PVVRMRVQpO1xuICAgICg8YW55PmV4aXN0aW5nU3RhdGUucXVlcnlQYXJhbXMpLm5leHQodXJsLnF1ZXJ5UGFyYW1ldGVycyk7XG4gICAgKDxhbnk+ZXhpc3RpbmdTdGF0ZS5mcmFnbWVudCkubmV4dCh1cmwuZnJhZ21lbnQpO1xuICAgIGNvbnN0IHJvb3RzID0gY29uc3RydWN0QWN0aXZhdGVkUm91dGUobWF0Y2gsIHJvb3ROb2RlKGV4aXN0aW5nU3RhdGUpKTtcbiAgICBjb25zdCByZXMgPSBuZXcgUm91dGVyU3RhdGUocm9vdHNbMF0sIGV4aXN0aW5nU3RhdGUucXVlcnlQYXJhbXMsIGV4aXN0aW5nU3RhdGUuZnJhZ21lbnQpO1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxSb3V0ZXJTdGF0ZT4ob2JzID0+IHtcbiAgICAgIG9icy5uZXh0KHJlcyk7XG4gICAgICBvYnMuY29tcGxldGUoKTtcbiAgICB9KTtcbiAgfSBjYXRjaChlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPFJvdXRlclN0YXRlPihvYnMgPT4gb2JzLmVycm9yKGUpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RBY3RpdmF0ZWRSb3V0ZShtYXRjaDogTWF0Y2hSZXN1bHQsIGV4aXN0aW5nUm91dGU6IFRyZWVOb2RlPEFjdGl2YXRlZFJvdXRlPiB8IG51bGwpOiBUcmVlTm9kZTxBY3RpdmF0ZWRSb3V0ZT5bXSB7XG4gIGNvbnN0IGFjdGl2YXRlZFJvdXRlID0gY3JlYXRlT3JSZXVzZVJvdXRlKG1hdGNoLCBleGlzdGluZ1JvdXRlKTtcbiAgY29uc3QgZXhpc3RpbmdDaGlsZHJlbiA9IGV4aXN0aW5nUm91dGUgPyBleGlzdGluZ1JvdXRlLmNoaWxkcmVuIDogW107XG5cbiAgaWYgKG1hdGNoLmxlZnRPdmVyVXJsLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHJlY29nbml6ZU1hbnkobWF0Y2guY2hpbGRyZW4sIG1hdGNoLmxlZnRPdmVyVXJsLCBleGlzdGluZ0NoaWxkcmVuKTtcbiAgICBjaGVja091dGxldE5hbWVVbmlxdWVuZXNzKGNoaWxkcmVuKTtcbiAgICByZXR1cm4gW25ldyBUcmVlTm9kZTxBY3RpdmF0ZWRSb3V0ZT4oYWN0aXZhdGVkUm91dGUsIGNoaWxkcmVuKV07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFtuZXcgVHJlZU5vZGU8QWN0aXZhdGVkUm91dGU+KGFjdGl2YXRlZFJvdXRlLCBbXSldO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlY29nbml6ZU1hbnkoY29uZmlnOiBSb3V0ZVtdLCB1cmxzOiBUcmVlTm9kZTxVcmxTZWdtZW50PltdLFxuICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ1JvdXRlczogVHJlZU5vZGU8QWN0aXZhdGVkUm91dGU+W10pOiBUcmVlTm9kZTxBY3RpdmF0ZWRSb3V0ZT5bXSB7XG4gIHJldHVybiBmbGF0dGVuKHVybHMubWFwKHVybCA9PiByZWNvZ25pemVPbmUoY29uZmlnLCB1cmwsIGV4aXN0aW5nUm91dGVzKSkpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPclJldXNlUm91dGUobWF0Y2g6IE1hdGNoUmVzdWx0LCBleGlzdGluZzogVHJlZU5vZGU8QWN0aXZhdGVkUm91dGU+IHwgbnVsbCk6IEFjdGl2YXRlZFJvdXRlIHtcbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgY29uc3QgdiA9IGV4aXN0aW5nLnZhbHVlO1xuICAgIGlmICh2LmNvbXBvbmVudCA9PT0gbWF0Y2guY29tcG9uZW50ICYmIHYub3V0bGV0ID09PSBtYXRjaC5vdXRsZXQpIHtcbiAgICAgICg8YW55Pih2LnBhcmFtcykpLm5leHQobWF0Y2gucGFyYW1ldGVycyk7XG4gICAgICAoPGFueT4odi51cmxTZWdtZW50cykpLm5leHQobWF0Y2guY29uc3VtZWRVcmxTZWdtZW50cyk7XG4gICAgICByZXR1cm4gdjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBBY3RpdmF0ZWRSb3V0ZShuZXcgQmVoYXZpb3JTdWJqZWN0KG1hdGNoLmNvbnN1bWVkVXJsU2VnbWVudHMpLCBuZXcgQmVoYXZpb3JTdWJqZWN0KG1hdGNoLnBhcmFtZXRlcnMpLCBtYXRjaC5vdXRsZXQsIG1hdGNoLmNvbXBvbmVudCk7XG59XG5cbmZ1bmN0aW9uIHJlY29nbml6ZU9uZShjb25maWc6IFJvdXRlW10sIHVybDogVHJlZU5vZGU8VXJsU2VnbWVudD4sXG4gICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdSb3V0ZXM6IFRyZWVOb2RlPEFjdGl2YXRlZFJvdXRlPltdKTogVHJlZU5vZGU8QWN0aXZhdGVkUm91dGU+W10ge1xuICBsZXQgbSA9IG1hdGNoKGNvbmZpZywgdXJsKTtcblxuICBjb25zdCByb3V0ZXNXaXRoUmlnaHRPdXRsZXQgPSBleGlzdGluZ1JvdXRlcy5maWx0ZXIociA9PiByLnZhbHVlLm91dGxldCA9PSBtLm91dGxldCk7XG4gIGNvbnN0IHJvdXRlV2l0aFJpZ2h0T3V0bGV0ID0gcm91dGVzV2l0aFJpZ2h0T3V0bGV0Lmxlbmd0aCA+IDAgPyByb3V0ZXNXaXRoUmlnaHRPdXRsZXRbMF0gOiBudWxsO1xuXG4gIGNvbnN0IHByaW1hcnkgPSBjb25zdHJ1Y3RBY3RpdmF0ZWRSb3V0ZShtLCByb3V0ZVdpdGhSaWdodE91dGxldCk7XG4gIGNvbnN0IHNlY29uZGFyeSA9IHJlY29nbml6ZU1hbnkoY29uZmlnLCBtLnNlY29uZGFyeSwgZXhpc3RpbmdSb3V0ZXMpO1xuICBjb25zdCByZXMgPSBwcmltYXJ5LmNvbmNhdChzZWNvbmRhcnkpO1xuICBjaGVja091dGxldE5hbWVVbmlxdWVuZXNzKHJlcyk7XG4gIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIGNoZWNrT3V0bGV0TmFtZVVuaXF1ZW5lc3Mobm9kZXM6IFRyZWVOb2RlPEFjdGl2YXRlZFJvdXRlPltdKTogVHJlZU5vZGU8QWN0aXZhdGVkUm91dGU+W10ge1xuICBsZXQgbmFtZXMgPSB7fTtcbiAgbm9kZXMuZm9yRWFjaChuID0+IHtcbiAgICBsZXQgcm91dGVXaXRoU2FtZU91dGxldE5hbWUgPSBuYW1lc1tuLnZhbHVlLm91dGxldF07XG4gICAgaWYgKHJvdXRlV2l0aFNhbWVPdXRsZXROYW1lKSB7XG4gICAgICBjb25zdCBwID0gKDxhbnk+cm91dGVXaXRoU2FtZU91dGxldE5hbWUudXJsU2VnbWVudHMpLnZhbHVlLm1hcChzID0+IHMudG9TdHJpbmcoKSkuam9pbihcIi9cIik7XG4gICAgICBjb25zdCBjID0gKDxhbnk+bi52YWx1ZS51cmxTZWdtZW50cykudmFsdWUubWFwKHMgPT4gcy50b1N0cmluZygpKS5qb2luKFwiL1wiKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVHdvIHNlZ21lbnRzIGNhbm5vdCBoYXZlIHRoZSBzYW1lIG91dGxldCBuYW1lOiAnJHtwfScgYW5kICcke2N9Jy5gKTtcbiAgICB9XG4gICAgbmFtZXNbbi52YWx1ZS5vdXRsZXRdID0gbi52YWx1ZTtcbiAgfSk7XG4gIHJldHVybiBub2Rlcztcbn1cblxuZnVuY3Rpb24gbWF0Y2goY29uZmlnOiBSb3V0ZVtdLCB1cmw6IFRyZWVOb2RlPFVybFNlZ21lbnQ+KTogTWF0Y2hSZXN1bHQge1xuICBjb25zdCBtID0gbWF0Y2hOb25JbmRleChjb25maWcsIHVybCk7XG4gIGlmIChtKSByZXR1cm4gbTtcblxuICBjb25zdCBtSW5kZXggPSBtYXRjaEluZGV4KGNvbmZpZywgdXJsKTtcbiAgaWYgKG1JbmRleCkgcmV0dXJuIG1JbmRleDtcblxuICBjb25zdCBhdmFpbGFibGVSb3V0ZXMgPSBjb25maWcubWFwKHIgPT4ge1xuICAgIGNvbnN0IG91dGxldCA9ICFyLm91dGxldCA/ICcnIDogYCR7ci5vdXRsZXR9OmA7XG4gICAgcmV0dXJuIGAnJHtvdXRsZXR9JHtyLnBhdGh9J2A7XG4gIH0pLmpvaW4oXCIsIFwiKTtcbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGBDYW5ub3QgbWF0Y2ggYW55IHJvdXRlcy4gQ3VycmVudCBzZWdtZW50OiAnJHt1cmwudmFsdWV9Jy4gQXZhaWxhYmxlIHJvdXRlczogWyR7YXZhaWxhYmxlUm91dGVzfV0uYCk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoTm9uSW5kZXgoY29uZmlnOiBSb3V0ZVtdLCB1cmw6IFRyZWVOb2RlPFVybFNlZ21lbnQ+KTogTWF0Y2hSZXN1bHQgfCBudWxsIHtcbiAgZm9yIChsZXQgciBvZiBjb25maWcpIHtcbiAgICBsZXQgbSA9IG1hdGNoV2l0aFBhcnRzKHIsIHVybCk7XG4gICAgaWYgKG0pIHJldHVybiBtO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBtYXRjaEluZGV4KGNvbmZpZzogUm91dGVbXSwgdXJsOiBUcmVlTm9kZTxVcmxTZWdtZW50Pik6IE1hdGNoUmVzdWx0IHwgbnVsbCB7XG4gIGZvciAobGV0IHIgb2YgY29uZmlnKSB7XG4gICAgaWYgKHIuaW5kZXgpIHtcbiAgICAgIGNvbnN0IG91dGxldCA9IHIub3V0bGV0ID8gci5vdXRsZXQgOiBQUklNQVJZX09VVExFVDtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gci5jaGlsZHJlbiA/IHIuY2hpbGRyZW4gOiBbXTtcbiAgICAgIHJldHVybiBuZXcgTWF0Y2hSZXN1bHQoci5jb21wb25lbnQsIGNoaWxkcmVuLCBbXSwge30sIFt1cmxdLCBbXSwgb3V0bGV0KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIG1hdGNoV2l0aFBhcnRzKHJvdXRlOiBSb3V0ZSwgdXJsOiBUcmVlTm9kZTxVcmxTZWdtZW50Pik6IE1hdGNoUmVzdWx0IHwgbnVsbCB7XG4gIGlmICghcm91dGUucGF0aCkgcmV0dXJuIG51bGw7XG4gIGlmICgocm91dGUub3V0bGV0ID8gcm91dGUub3V0bGV0IDogUFJJTUFSWV9PVVRMRVQpICE9PSB1cmwudmFsdWUub3V0bGV0KSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBwYXRoID0gcm91dGUucGF0aC5zdGFydHNXaXRoKFwiL1wiKSA/IHJvdXRlLnBhdGguc3Vic3RyaW5nKDEpIDogcm91dGUucGF0aDtcbiAgaWYgKHBhdGggPT09IFwiKipcIikge1xuICAgIGNvbnN0IGNvbnN1bWVkVXJsID0gW107XG4gICAgbGV0IHU6VHJlZU5vZGU8VXJsU2VnbWVudD58bnVsbCA9IHVybDtcbiAgICB3aGlsZSAodSkge1xuICAgICAgY29uc3VtZWRVcmwucHVzaCh1LnZhbHVlKTtcbiAgICAgIHUgPSBmaXJzdCh1LmNoaWxkcmVuKTtcbiAgICB9XG4gICAgY29uc3QgbGFzdCA9IGNvbnN1bWVkVXJsW2NvbnN1bWVkVXJsLmxlbmd0aCAtIDFdO1xuICAgIHJldHVybiBuZXcgTWF0Y2hSZXN1bHQocm91dGUuY29tcG9uZW50LCBbXSwgY29uc3VtZWRVcmwsIGxhc3QucGFyYW1ldGVycywgW10sIFtdLCBQUklNQVJZX09VVExFVCk7XG4gIH1cblxuICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpO1xuICBjb25zdCBwb3NpdGlvbmFsUGFyYW1zID0ge307XG4gIGNvbnN0IGNvbnN1bWVkVXJsU2VnbWVudHMgPSBbXTtcblxuICBsZXQgbGFzdFBhcmVudDogVHJlZU5vZGU8VXJsU2VnbWVudD58bnVsbCA9IG51bGw7XG4gIGxldCBsYXN0U2VnbWVudDogVHJlZU5vZGU8VXJsU2VnbWVudD58bnVsbCA9IG51bGw7XG5cbiAgbGV0IGN1cnJlbnQ6IFRyZWVOb2RlPFVybFNlZ21lbnQ+fG51bGwgPSB1cmw7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoIWN1cnJlbnQpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgcCA9IHBhcnRzW2ldO1xuICAgIGNvbnN0IGlzTGFzdFNlZ21lbnQgPSBpID09PSBwYXJ0cy5sZW5ndGggLSAxO1xuICAgIGNvbnN0IGlzTGFzdFBhcmVudCA9IGkgPT09IHBhcnRzLmxlbmd0aCAtIDI7XG4gICAgY29uc3QgaXNQb3NQYXJhbSA9IHAuc3RhcnRzV2l0aChcIjpcIik7XG5cbiAgICBpZiAoIWlzUG9zUGFyYW0gJiYgcCAhPSBjdXJyZW50LnZhbHVlLnBhdGgpIHJldHVybiBudWxsO1xuICAgIGlmIChpc0xhc3RTZWdtZW50KSB7XG4gICAgICBsYXN0U2VnbWVudCA9IGN1cnJlbnQ7XG4gICAgfVxuICAgIGlmIChpc0xhc3RQYXJlbnQpIHtcbiAgICAgIGxhc3RQYXJlbnQgPSBjdXJyZW50O1xuICAgIH1cblxuICAgIGlmIChpc1Bvc1BhcmFtKSB7XG4gICAgICBwb3NpdGlvbmFsUGFyYW1zW3Auc3Vic3RyaW5nKDEpXSA9IGN1cnJlbnQudmFsdWUucGF0aDtcbiAgICB9XG5cbiAgICBjb25zdW1lZFVybFNlZ21lbnRzLnB1c2goY3VycmVudC52YWx1ZSk7XG5cbiAgICBjdXJyZW50ID0gZmlyc3QoY3VycmVudC5jaGlsZHJlbik7XG4gIH1cblxuICBpZiAoIWxhc3RTZWdtZW50KSB0aHJvdyBcIkNhbm5vdCBiZSByZWFjaGVkXCI7XG5cbiAgY29uc3QgcCA9IGxhc3RTZWdtZW50LnZhbHVlLnBhcmFtZXRlcnM7XG4gIGNvbnN0IHBhcmFtZXRlcnMgPSA8e1trZXk6IHN0cmluZ106IHN0cmluZ30+bWVyZ2UocCwgcG9zaXRpb25hbFBhcmFtcyk7XG4gIGNvbnN0IHNlY29uZGFyeVN1YnRyZWVzID0gbGFzdFBhcmVudCA/IGxhc3RQYXJlbnQuY2hpbGRyZW4uc2xpY2UoMSkgOiBbXTtcbiAgY29uc3QgY2hpbGRyZW4gPSByb3V0ZS5jaGlsZHJlbiA/IHJvdXRlLmNoaWxkcmVuIDogW107XG4gIGNvbnN0IG91dGxldCA9IHJvdXRlLm91dGxldCA/IHJvdXRlLm91dGxldCA6IFBSSU1BUllfT1VUTEVUO1xuXG4gIHJldHVybiBuZXcgTWF0Y2hSZXN1bHQocm91dGUuY29tcG9uZW50LCBjaGlsZHJlbiwgY29uc3VtZWRVcmxTZWdtZW50cywgcGFyYW1ldGVycywgbGFzdFNlZ21lbnQuY2hpbGRyZW4sXG4gICAgc2Vjb25kYXJ5U3VidHJlZXMsIG91dGxldCk7XG59XG5cbmNsYXNzIE1hdGNoUmVzdWx0IHtcbiAgY29uc3RydWN0b3IocHVibGljIGNvbXBvbmVudDogVHlwZSB8IHN0cmluZyxcbiAgICAgICAgICAgICAgcHVibGljIGNoaWxkcmVuOiBSb3V0ZVtdLFxuICAgICAgICAgICAgICBwdWJsaWMgY29uc3VtZWRVcmxTZWdtZW50czogVXJsU2VnbWVudFtdLFxuICAgICAgICAgICAgICBwdWJsaWMgcGFyYW1ldGVyczoge1trZXk6IHN0cmluZ106IHN0cmluZ30sXG4gICAgICAgICAgICAgIHB1YmxpYyBsZWZ0T3ZlclVybDogVHJlZU5vZGU8VXJsU2VnbWVudD5bXSxcbiAgICAgICAgICAgICAgcHVibGljIHNlY29uZGFyeTogVHJlZU5vZGU8VXJsU2VnbWVudD5bXSxcbiAgICAgICAgICAgICAgcHVibGljIG91dGxldDogc3RyaW5nXG4gICkge31cbn0iXX0= \ No newline at end of file diff --git a/modules/@angular/router/build/src/router.d.ts b/modules/@angular/router/build/src/router.d.ts new file mode 100644 index 0000000000..7fd1b6a794 --- /dev/null +++ b/modules/@angular/router/build/src/router.d.ts @@ -0,0 +1,40 @@ +import { ComponentResolver } from '@angular/core'; +import { Location } from '@angular/common'; +import { UrlSerializer } from './url_serializer'; +import { RouterOutletMap } from './router_outlet_map'; +import { UrlTree } from './url_tree'; +import { Params } from './shared'; +import { RouterState, ActivatedRoute } from './router_state'; +import { RouterConfig } from './config'; +import { Observable } from 'rxjs/Observable'; +import 'rxjs/add/operator/map'; +import 'rxjs/add/operator/mergeMap'; +import 'rxjs/add/operator/toPromise'; +export interface NavigationExtras { + relativeTo?: ActivatedRoute; + queryParameters?: Params; + fragment?: string; +} +export declare class Router { + private rootComponent; + private resolver; + private urlSerializer; + private outletMap; + private location; + private currentUrlTree; + private currentRouterState; + private config; + private locationSubscription; + constructor(rootComponent: Object, resolver: ComponentResolver, urlSerializer: UrlSerializer, outletMap: RouterOutletMap, location: Location); + readonly routerState: RouterState; + readonly urlTree: UrlTree; + navigateByUrl(url: string): Observable; + resetConfig(config: RouterConfig): void; + dispose(): void; + createUrlTree(commands: any[], {relativeTo, queryParameters, fragment}?: NavigationExtras): UrlTree; + navigate(commands: any[], extras?: NavigationExtras): Observable; + serializeUrl(url: UrlTree): string; + parseUrl(url: string): UrlTree; + private setUpLocationChangeListener(); + private runNavigate(url, pop?); +} diff --git a/modules/@angular/router/build/src/router.js b/modules/@angular/router/build/src/router.js new file mode 100644 index 0000000000..3bbb164b96 --- /dev/null +++ b/modules/@angular/router/build/src/router.js @@ -0,0 +1,159 @@ +"use strict"; +var core_1 = require('@angular/core'); +var router_outlet_map_1 = require('./router_outlet_map'); +var recognize_1 = require('./recognize'); +var tree_1 = require('./utils/tree'); +var url_tree_1 = require('./url_tree'); +var shared_1 = require('./shared'); +var router_state_1 = require('./router_state'); +var create_url_tree_1 = require('./create_url_tree'); +var collection_1 = require('./utils/collection'); +require('rxjs/add/operator/map'); +require('rxjs/add/operator/mergeMap'); +require('rxjs/add/operator/toPromise'); +var fromPromise_1 = require('rxjs/observable/fromPromise'); +var forkJoin_1 = require('rxjs/observable/forkJoin'); +var Router = (function () { + function Router(rootComponent, resolver, urlSerializer, outletMap, location) { + this.rootComponent = rootComponent; + this.resolver = resolver; + this.urlSerializer = urlSerializer; + this.outletMap = outletMap; + this.location = location; + this.currentUrlTree = url_tree_1.createEmptyUrlTree(); + this.currentRouterState = router_state_1.createEmptyState(rootComponent.constructor); + this.setUpLocationChangeListener(); + this.navigateByUrl(this.location.path()); + } + Object.defineProperty(Router.prototype, "routerState", { + get: function () { + return this.currentRouterState; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Router.prototype, "urlTree", { + get: function () { + return this.currentUrlTree; + }, + enumerable: true, + configurable: true + }); + Router.prototype.navigateByUrl = function (url) { + var urlTree = this.urlSerializer.parse(url); + return this.runNavigate(urlTree, false); + }; + Router.prototype.resetConfig = function (config) { + this.config = config; + }; + Router.prototype.dispose = function () { this.locationSubscription.unsubscribe(); }; + Router.prototype.createUrlTree = function (commands, _a) { + var _b = _a === void 0 ? {} : _a, relativeTo = _b.relativeTo, queryParameters = _b.queryParameters, fragment = _b.fragment; + var a = relativeTo ? relativeTo : this.routerState.root; + return create_url_tree_1.createUrlTree(a, this.currentUrlTree, commands, queryParameters, fragment); + }; + Router.prototype.navigate = function (commands, extras) { + if (extras === void 0) { extras = {}; } + return this.runNavigate(this.createUrlTree(commands, extras)); + }; + Router.prototype.serializeUrl = function (url) { return this.urlSerializer.serialize(url); }; + Router.prototype.parseUrl = function (url) { return this.urlSerializer.parse(url); }; + Router.prototype.setUpLocationChangeListener = function () { + var _this = this; + this.locationSubscription = this.location.subscribe(function (change) { + _this.runNavigate(_this.urlSerializer.parse(change['url']), change['pop']); + }); + }; + Router.prototype.runNavigate = function (url, pop) { + var _this = this; + var r = recognize_1.recognize(this.config, url, this.currentRouterState).mergeMap(function (newState) { + return new ActivateRoutes(_this.resolver, newState, _this.currentRouterState).activate(_this.outletMap).map(function () { + _this.currentUrlTree = url; + _this.currentRouterState = newState; + if (!pop) { + _this.location.go(_this.urlSerializer.serialize(url)); + } + }); + }); + r.subscribe(function (a) { }, function (e) { }, function () { }); + return r; + }; + return Router; +}()); +exports.Router = Router; +var ActivateRoutes = (function () { + function ActivateRoutes(resolver, futureState, currState) { + this.resolver = resolver; + this.futureState = futureState; + this.currState = currState; + } + ActivateRoutes.prototype.activate = function (parentOutletMap) { + var currRoot = this.currState ? tree_1.rootNode(this.currState) : null; + var futureRoot = tree_1.rootNode(this.futureState); + return this.activateChildRoutes(futureRoot, currRoot, parentOutletMap); + }; + ActivateRoutes.prototype.activateChildRoutes = function (futureNode, currNode, outletMap) { + var _this = this; + var prevChildren = nodeChildrenAsMap(currNode); + var observables = []; + futureNode.children.forEach(function (c) { + observables.push(_this.activateRoutes(c, prevChildren[c.value.outlet], outletMap).toPromise()); + delete prevChildren[c.value.outlet]; + }); + collection_1.forEach(prevChildren, function (v, k) { return _this.deactivateOutletAndItChildren(outletMap._outlets[k]); }); + return forkJoin_1.forkJoin(observables); + }; + ActivateRoutes.prototype.activateRoutes = function (futureNode, currNode, parentOutletMap) { + var _this = this; + var future = futureNode.value; + var curr = currNode ? currNode.value : null; + var outlet = getOutlet(parentOutletMap, futureNode.value); + if (future === curr) { + return this.activateChildRoutes(futureNode, currNode, outlet.outletMap); + } + else { + this.deactivateOutletAndItChildren(outlet); + var outletMap_1 = new router_outlet_map_1.RouterOutletMap(); + return this.activateNewRoutes(outletMap_1, future, outlet).mergeMap(function () { + return _this.activateChildRoutes(futureNode, currNode, outletMap_1); + }); + } + }; + ActivateRoutes.prototype.activateNewRoutes = function (outletMap, future, outlet) { + var resolved = core_1.ReflectiveInjector.resolve([ + { provide: router_state_1.ActivatedRoute, useValue: future }, + { provide: router_outlet_map_1.RouterOutletMap, useValue: outletMap } + ]); + return fromPromise_1.fromPromise(this.resolver.resolveComponent(future.component)). + map(function (factory) { return outlet.activate(factory, resolved, outletMap); }); + }; + ActivateRoutes.prototype.deactivateOutletAndItChildren = function (outlet) { + var _this = this; + if (outlet && outlet.isActivated) { + collection_1.forEach(outlet.outletMap._outlets, function (v, k) { return _this.deactivateOutletAndItChildren(v); }); + outlet.deactivate(); + } + }; + return ActivateRoutes; +}()); +function nodeChildrenAsMap(node) { + return node ? + node.children.reduce(function (m, c) { + m[c.value.outlet] = c; + return m; + }, {}) : + {}; +} +function getOutlet(outletMap, route) { + var outlet = outletMap._outlets[route.outlet]; + if (!outlet) { + if (route.outlet === shared_1.PRIMARY_OUTLET) { + throw new Error("Cannot find primary outlet"); + } + else { + throw new Error("Cannot find the outlet " + route.outlet); + } + } + return outlet; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEscUJBQXNELGVBQWUsQ0FBQyxDQUFBO0FBR3RFLGtDQUFnQyxxQkFBcUIsQ0FBQyxDQUFBO0FBQ3RELDBCQUEwQixhQUFhLENBQUMsQ0FBQTtBQUN4QyxxQkFBbUMsY0FBYyxDQUFDLENBQUE7QUFDbEQseUJBQTRDLFlBQVksQ0FBQyxDQUFBO0FBQ3pELHVCQUF1QyxVQUFVLENBQUMsQ0FBQTtBQUNsRCw2QkFBNkQsZ0JBQWdCLENBQUMsQ0FBQTtBQUc5RSxnQ0FBOEIsbUJBQW1CLENBQUMsQ0FBQTtBQUNsRCwyQkFBd0Isb0JBQW9CLENBQUMsQ0FBQTtBQUc3QyxRQUFPLHVCQUF1QixDQUFDLENBQUE7QUFDL0IsUUFBTyw0QkFBNEIsQ0FBQyxDQUFBO0FBQ3BDLFFBQU8sNkJBQTZCLENBQUMsQ0FBQTtBQUNyQyw0QkFBMEIsNkJBQTZCLENBQUMsQ0FBQTtBQUN4RCx5QkFBdUIsMEJBQTBCLENBQUMsQ0FBQTtBQU9sRDtJQVNFLGdCQUFvQixhQUFvQixFQUFVLFFBQTJCLEVBQVUsYUFBNEIsRUFBVSxTQUEwQixFQUFVLFFBQWtCO1FBQS9KLGtCQUFhLEdBQWIsYUFBYSxDQUFPO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBbUI7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFVLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNqTCxJQUFJLENBQUMsY0FBYyxHQUFHLDZCQUFrQixFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLGtCQUFrQixHQUFHLCtCQUFnQixDQUFNLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxF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UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FDbEIsVUFBQyxDQUFDLEVBQUUsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxFQUNELEVBQUUsQ0FBQztRQUNQLEVBQUUsQ0FBQztBQUNMLENBQUM7QUFFRCxtQkFBbUIsU0FBMEIsRUFBRSxLQUFxQjtJQUNsRSxJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDWixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLHVCQUFjLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLDRCQUEwQixLQUFLLENBQUMsTUFBUSxDQUFDLENBQUM7UUFDNUQsQ0FBQztJQUNILENBQUM7SUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZXNvbHZlciwgUmVmbGVjdGl2ZUluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBVcmxTZXJpYWxpemVyIH0gZnJvbSAnLi91cmxfc2VyaWFsaXplcic7XG5pbXBvcnQgeyBSb3V0ZXJPdXRsZXRNYXAgfSBmcm9tICcuL3JvdXRlcl9vdXRsZXRfbWFwJztcbmltcG9ydCB7IHJlY29nbml6ZSB9IGZyb20gJy4vcmVjb2duaXplJztcbmltcG9ydCB7IHJvb3ROb2RlLCBUcmVlTm9kZSB9IGZyb20gJy4vdXRpbHMvdHJlZSc7XG5pbXBvcnQgeyBVcmxUcmVlLCBjcmVhdGVFbXB0eVVybFRyZWUgfSBmcm9tICcuL3VybF90cmVlJztcbmltcG9ydCB7IFBSSU1BUllfT1VUTEVULCBQYXJhbXMgfSBmcm9tICcuL3NoYXJlZCc7XG5pbXBvcnQgeyBjcmVhdGVFbXB0eVN0YXRlLCBSb3V0ZXJTdGF0ZSwgQWN0aXZhdGVkUm91dGV9IGZyb20gJy4vcm91dGVyX3N0YXRlJztcbmltcG9ydCB7IFJvdXRlckNvbmZpZyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IFJvdXRlck91dGxldCB9IGZyb20gJy4vZGlyZWN0aXZlcy9yb3V0ZXJfb3V0bGV0JztcbmltcG9ydCB7IGNyZWF0ZVVybFRyZWUgfSBmcm9tICcuL2NyZWF0ZV91cmxfdHJlZSc7XG5pbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSAnLi91dGlscy9jb2xsZWN0aW9uJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzL09ic2VydmFibGUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcy9TdWJzY3JpcHRpb24nO1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9tYXAnO1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9tZXJnZU1hcCc7XG5pbXBvcnQgJ3J4anMvYWRkL29wZXJhdG9yL3RvUHJvbWlzZSc7XG5pbXBvcnQge2Zyb21Qcm9taXNlfSBmcm9tICdyeGpzL29ic2VydmFibGUvZnJvbVByb21pc2UnO1xuaW1wb3J0IHtmb3JrSm9pbn0gZnJvbSAncnhqcy9vYnNlcnZhYmxlL2ZvcmtKb2luJztcblxuZXhwb3J0IGludGVyZmFjZSBOYXZpZ2F0aW9uRXh0cmFzIHsgcmVsYXRpdmVUbz86IEFjdGl2YXRlZFJvdXRlOyBxdWVyeVBhcmFtZXRlcnM/OiBQYXJhbXM7IGZyYWdtZW50Pzogc3RyaW5nOyB9XG5cbi8qKlxuICogVGhlIGBSb3V0ZXJgIGlzIHJlc3BvbnNpYmxlIGZvciBtYXBwaW5nIFVSTHMgdG8gY29tcG9uZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFJvdXRlciB7XG4gIHByaXZhdGUgY3VycmVudFVybFRyZWU6IFVybFRyZWU7XG4gIHByaXZhdGUgY3VycmVudFJvdXRlclN0YXRlOiBSb3V0ZXJTdGF0ZTtcbiAgcHJpdmF0ZSBjb25maWc6IFJvdXRlckNvbmZpZztcbiAgcHJpdmF0ZSBsb2NhdGlvblN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm9vdENvbXBvbmVudDpPYmplY3QsIHByaXZhdGUgcmVzb2x2ZXI6IENvbXBvbmVudFJlc29sdmVyLCBwcml2YXRlIHVybFNlcmlhbGl6ZXI6IFVybFNlcmlhbGl6ZXIsIHByaXZhdGUgb3V0bGV0TWFwOiBSb3V0ZXJPdXRsZXRNYXAsIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uKSB7XG4gICAgdGhpcy5jdXJyZW50VXJsVHJlZSA9IGNyZWF0ZUVtcHR5VXJsVHJlZSgpO1xuICAgIHRoaXMuY3VycmVudFJvdXRlclN0YXRlID0gY3JlYXRlRW1wdHlTdGF0ZSg8YW55PnJvb3RDb21wb25lbnQuY29uc3RydWN0b3IpO1xuICAgIHRoaXMuc2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKCk7XG4gICAgdGhpcy5uYXZpZ2F0ZUJ5VXJsKHRoaXMubG9jYXRpb24ucGF0aCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHJvdXRlIHN0YXRlLlxuICAgKi9cbiAgZ2V0IHJvdXRlclN0YXRlKCk6IFJvdXRlclN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50Um91dGVyU3RhdGU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCB1cmwgdHJlZS5cbiAgICovXG4gIGdldCB1cmxUcmVlKCk6IFVybFRyZWUge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRVcmxUcmVlO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCB1cmwuIFRoaXMgbmF2aWdhdGlvbiBpcyBhbHdheXMgYWJzb2x1dGUuXG4gICAqXG4gICAqICMjIyBVc2FnZVxuICAgKlxuICAgKiBgYGBcbiAgICogcm91dGVyLm5hdmlnYXRlQnlVcmwoXCIvdGVhbS8zMy91c2VyLzExXCIpO1xuICAgKiBgYGBcbiAgICovXG4gIG5hdmlnYXRlQnlVcmwodXJsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBjb25zdCB1cmxUcmVlID0gdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKHVybCk7XG4gICAgcmV0dXJuIHRoaXMucnVuTmF2aWdhdGUodXJsVHJlZSwgZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgY29uZmlndXJhdGlvbiB1c2VkIGZvciBuYXZpZ2F0aW9uIGFuZCBnZW5lcmF0aW5nIGxpbmtzLlxuICAgKlxuICAgKiAjIyMgVXNhZ2VcbiAgICpcbiAgICogYGBgXG4gICAqIHJvdXRlci5yZXNldENvbmZpZyhbXG4gICAqICB7IHBhdGg6ICd0ZWFtLzppZCcsIGNvbXBvbmVudDogVGVhbUNtcCwgY2hpbGRyZW46IFtcbiAgICogICAgeyBwYXRoOiAnc2ltcGxlJywgY29tcG9uZW50OiBTaW1wbGVDbXAgfSxcbiAgICogICAgeyBwYXRoOiAndXNlci86bmFtZScsIGNvbXBvbmVudDogVXNlckNtcCB9XG4gICAqICBdIH1cbiAgICogXSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcmVzZXRDb25maWcoY29uZmlnOiBSb3V0ZXJDb25maWcpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGRpc3Bvc2UoKTogdm9pZCB7IHRoaXMubG9jYXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGFuIGFycmF5IG9mIGNvbW1hbmRzIHRvIHRoZSBjdXJyZW50IHVybCB0cmVlIGFuZCBjcmVhdGVzXG4gICAqIGEgbmV3IHVybCB0cmVlLlxuICAgKlxuICAgKiBXaGVuIGdpdmVuIGFuIGFjdGl2YXRlIHJvdXRlLCBhcHBsaWVzIHRoZSBnaXZlbiBjb21tYW5kcyBzdGFydGluZyBmcm9tIHRoZSByb3V0ZS5cbiAgICogV2hlbiBub3QgZ2l2ZW4gYSByb3V0ZSwgYXBwbGllcyB0aGUgZ2l2ZW4gY29tbWFuZCBzdGFydGluZyBmcm9tIHRoZSByb290LlxuICAgKlxuICAgKiAjIyMgVXNhZ2VcbiAgICpcbiAgICogYGBgXG4gICAqIC8vIGNyZWF0ZSAvdGVhbS8zMy91c2VyLzExXG4gICAqIHJvdXRlci5jcmVhdGVVcmxUcmVlKFsnL3RlYW0nLCAzMywgJ3VzZXInLCAxMV0pO1xuICAgKlxuICAgKiAvLyBjcmVhdGUgL3RlYW0vMzM7ZXhwYW5kPXRydWUvdXNlci8xMVxuICAgKiByb3V0ZXIuY3JlYXRlVXJsVHJlZShbJy90ZWFtJywgMzMsIHtleHBhbmQ6IHRydWV9LCAndXNlcicsIDExXSk7XG4gICAqXG4gICAqIC8vIHlvdSBjYW4gY29sbGFwc2Ugc3RhdGljIGZyYWdtZW50cyBsaWtlIHRoaXNcbiAgICogcm91dGVyLmNyZWF0ZVVybFRyZWUoWycvdGVhbS8zMy91c2VyJywgdXNlcklkXSk7XG4gICAqXG4gICAqIC8vIGFzc3VtaW5nIHRoZSBjdXJyZW50IHVybCBpcyBgL3RlYW0vMzMvdXNlci8xMWAgYW5kIHRoZSByb3V0ZSBwb2ludHMgdG8gYHVzZXIvMTFgXG4gICAqXG4gICAqIC8vIG5hdmlnYXRlIHRvIC90ZWFtLzMzL3VzZXIvMTEvZGV0YWlsc1xuICAgKiByb3V0ZXIuY3JlYXRlVXJsVHJlZShbJ2RldGFpbHMnXSwge3JlbGF0aXZlVG86IHJvdXRlfSk7XG4gICAqXG4gICAqIC8vIG5hdmlnYXRlIHRvIC90ZWFtLzMzL3VzZXIvMjJcbiAgICogcm91dGVyLmNyZWF0ZVVybFRyZWUoWycuLi8yMiddLCB7cmVsYXRpdmVUbzogcm91dGV9KTtcbiAgICpcbiAgICogLy8gbmF2aWdhdGUgdG8gL3RlYW0vNDQvdXNlci8yMlxuICAgKiByb3V0ZXIuY3JlYXRlVXJsVHJlZShbJy4uLy4uL3RlYW0vNDQvdXNlci8yMiddLCB7cmVsYXRpdmVUbzogcm91dGV9KTtcbiAgICogYGBgXG4gICAqL1xuICBjcmVhdGVVcmxUcmVlKGNvbW1hbmRzOiBhbnlbXSwge3JlbGF0aXZlVG8sIHF1ZXJ5UGFyYW1ldGVycywgZnJhZ21lbnR9OiBOYXZpZ2F0aW9uRXh0cmFzID0ge30pOiBVcmxUcmVlIHtcbiAgICBjb25zdCBhID0gcmVsYXRpdmVUbyA/IHJlbGF0aXZlVG8gOiB0aGlzLnJvdXRlclN0YXRlLnJvb3Q7XG4gICAgcmV0dXJuIGNyZWF0ZVVybFRyZWUoYSwgdGhpcy5jdXJyZW50VXJsVHJlZSwgY29tbWFuZHMsIHF1ZXJ5UGFyYW1ldGVycywgZnJhZ21lbnQpO1xuICB9XG5cblxuICAvKipcbiAgICogTmF2aWdhdGUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGFycmF5IG9mIGNvbW1hbmRzIGFuZCBhIHN0YXJ0aW5nIHBvaW50LlxuICAgKiBJZiBubyBzdGFydGluZyByb3V0ZSBpcyBwcm92aWRlZCwgdGhlIG5hdmlnYXRpb24gaXMgYWJzb2x1dGUuXG4gICAqXG4gICAqICMjIyBVc2FnZVxuICAgKlxuICAgKiBgYGBcbiAgICogcm91dGVyLm5hdmlnYXRlKFsndGVhbScsIDMzLCAndGVhbScsICcxMV0sIHtyZWxhdGl2ZVRvOiByb3V0ZX0pO1xuICAgKiBgYGBcbiAgICovXG4gIG5hdmlnYXRlKGNvbW1hbmRzOiBhbnlbXSwgZXh0cmFzOiBOYXZpZ2F0aW9uRXh0cmFzID0ge30pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5ydW5OYXZpZ2F0ZSh0aGlzLmNyZWF0ZVVybFRyZWUoY29tbWFuZHMsIGV4dHJhcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSB7QGxpbmsgVXJsVHJlZX0gaW50byBhIHN0cmluZy5cbiAgICovXG4gIHNlcmlhbGl6ZVVybCh1cmw6IFVybFRyZWUpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh1cmwpOyB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGEgc3RyaW5nIGludG8gYSB7QGxpbmsgVXJsVHJlZX0uXG4gICAqL1xuICBwYXJzZVVybCh1cmw6IHN0cmluZyk6IFVybFRyZWUgeyByZXR1cm4gdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKHVybCk7IH1cblxuICBwcml2YXRlIHNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICB0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9uID0gPGFueT50aGlzLmxvY2F0aW9uLnN1YnNjcmliZSgoY2hhbmdlKSA9PiB7XG4gICAgICB0aGlzLnJ1bk5hdmlnYXRlKHRoaXMudXJsU2VyaWFsaXplci5wYXJzZShjaGFuZ2VbJ3VybCddKSwgY2hhbmdlWydwb3AnXSlcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcnVuTmF2aWdhdGUodXJsOlVybFRyZWUsIHBvcD86Ym9vbGVhbik6T2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY29uc3QgciA9IHJlY29nbml6ZSh0aGlzLmNvbmZpZywgdXJsLCB0aGlzLmN1cnJlbnRSb3V0ZXJTdGF0ZSkubWVyZ2VNYXAoKG5ld1N0YXRlOlJvdXRlclN0YXRlKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IEFjdGl2YXRlUm91dGVzKHRoaXMucmVzb2x2ZXIsIG5ld1N0YXRlLCB0aGlzLmN1cnJlbnRSb3V0ZXJTdGF0ZSkuYWN0aXZhdGUodGhpcy5vdXRsZXRNYXApLm1hcCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudFVybFRyZWUgPSB1cmw7XG4gICAgICAgIHRoaXMuY3VycmVudFJvdXRlclN0YXRlID0gbmV3U3RhdGU7XG4gICAgICAgIGlmICghcG9wKSB7XG4gICAgICAgICAgdGhpcy5sb2NhdGlvbi5nbyh0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHVybCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByLnN1YnNjcmliZSgoYSkgPT4ge30sIChlKSA9PiB7fSwgKCkgPT4ge30pOyAvLyBmb3JjZSBleGVjdXRpb25cbiAgICByZXR1cm4gcjtcbiAgfVxufVxuXG5jbGFzcyBBY3RpdmF0ZVJvdXRlcyB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVzb2x2ZXI6IENvbXBvbmVudFJlc29sdmVyLCBwcml2YXRlIGZ1dHVyZVN0YXRlOiBSb3V0ZXJTdGF0ZSwgcHJpdmF0ZSBjdXJyU3RhdGU6IFJvdXRlclN0YXRlKSB7fVxuXG4gIGFjdGl2YXRlKHBhcmVudE91dGxldE1hcDogUm91dGVyT3V0bGV0TWFwKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY29uc3QgY3VyclJvb3QgPSB0aGlzLmN1cnJTdGF0ZSA/IHJvb3ROb2RlKHRoaXMuY3VyclN0YXRlKSA6IG51bGw7XG4gICAgY29uc3QgZnV0dXJlUm9vdCA9IHJvb3ROb2RlKHRoaXMuZnV0dXJlU3RhdGUpO1xuICAgIHJldHVybiB0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMoZnV0dXJlUm9vdCwgY3VyclJvb3QsIHBhcmVudE91dGxldE1hcCk7XG4gIH1cblxuICBwcml2YXRlIGFjdGl2YXRlQ2hpbGRSb3V0ZXMoZnV0dXJlTm9kZTogVHJlZU5vZGU8QWN0aXZhdGVkUm91dGU+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyck5vZGU6IFRyZWVOb2RlPEFjdGl2YXRlZFJvdXRlPiB8IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRsZXRNYXA6IFJvdXRlck91dGxldE1hcCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgcHJldkNoaWxkcmVuID0gbm9kZUNoaWxkcmVuQXNNYXAoY3Vyck5vZGUpO1xuICAgIGNvbnN0IG9ic2VydmFibGVzID0gW107XG4gICAgZnV0dXJlTm9kZS5jaGlsZHJlbi5mb3JFYWNoKGMgPT4ge1xuICAgICAgb2JzZXJ2YWJsZXMucHVzaCh0aGlzLmFjdGl2YXRlUm91dGVzKGMsIHByZXZDaGlsZHJlbltjLnZhbHVlLm91dGxldF0sIG91dGxldE1hcCkudG9Qcm9taXNlKCkpO1xuICAgICAgZGVsZXRlIHByZXZDaGlsZHJlbltjLnZhbHVlLm91dGxldF07XG4gICAgfSk7XG4gICAgZm9yRWFjaChwcmV2Q2hpbGRyZW4sICh2LCBrKSA9PiB0aGlzLmRlYWN0aXZhdGVPdXRsZXRBbmRJdENoaWxkcmVuKG91dGxldE1hcC5fb3V0bGV0c1trXSkpO1xuICAgIHJldHVybiBmb3JrSm9pbihvYnNlcnZhYmxlcyk7XG4gIH1cblxuXG4gIGFjdGl2YXRlUm91dGVzKGZ1dHVyZU5vZGU6IFRyZWVOb2RlPEFjdGl2YXRlZFJvdXRlPiwgY3Vyck5vZGU6IFRyZWVOb2RlPEFjdGl2YXRlZFJvdXRlPixcbiAgICAgICAgICAgICAgICAgcGFyZW50T3V0bGV0TWFwOiBSb3V0ZXJPdXRsZXRNYXApOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBjb25zdCBmdXR1cmUgPSBmdXR1cmVOb2RlLnZhbHVlO1xuICAgIGNvbnN0IGN1cnIgPSBjdXJyTm9kZSA/IGN1cnJOb2RlLnZhbHVlIDogbnVsbDtcbiAgICBjb25zdCBvdXRsZXQgPSBnZXRPdXRsZXQocGFyZW50T3V0bGV0TWFwLCBmdXR1cmVOb2RlLnZhbHVlKTtcblxuICAgIGlmIChmdXR1cmUgPT09IGN1cnIpIHtcbiAgICAgIHJldHVybiB0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMoZnV0dXJlTm9kZSwgY3Vyck5vZGUsIG91dGxldC5vdXRsZXRNYXApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlYWN0aXZhdGVPdXRsZXRBbmRJdENoaWxkcmVuKG91dGxldCk7XG4gICAgICBjb25zdCBvdXRsZXRNYXAgPSBuZXcgUm91dGVyT3V0bGV0TWFwKCk7XG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmF0ZU5ld1JvdXRlcyhvdXRsZXRNYXAsIGZ1dHVyZSwgb3V0bGV0KS5tZXJnZU1hcCgoKSA9PlxuICAgICAgICB0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMoZnV0dXJlTm9kZSwgY3Vyck5vZGUsIG91dGxldE1hcCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWN0aXZhdGVOZXdSb3V0ZXMob3V0bGV0TWFwOiBSb3V0ZXJPdXRsZXRNYXAsIGZ1dHVyZTogQWN0aXZhdGVkUm91dGUsIG91dGxldDogUm91dGVyT3V0bGV0KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBSZWZsZWN0aXZlSW5qZWN0b3IucmVzb2x2ZShbXG4gICAgICB7cHJvdmlkZTogQWN0aXZhdGVkUm91dGUsIHVzZVZhbHVlOiBmdXR1cmV9LFxuICAgICAge3Byb3ZpZGU6IFJvdXRlck91dGxldE1hcCwgdXNlVmFsdWU6IG91dGxldE1hcH1cbiAgICBdKTtcbiAgICByZXR1cm4gZnJvbVByb21pc2UodGhpcy5yZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50KDxhbnk+ZnV0dXJlLmNvbXBvbmVudCkpLlxuICAgICAgbWFwKGZhY3RvcnkgPT4gb3V0bGV0LmFjdGl2YXRlKGZhY3RvcnksIHJlc29sdmVkLCBvdXRsZXRNYXApKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVhY3RpdmF0ZU91dGxldEFuZEl0Q2hpbGRyZW4ob3V0bGV0OiBSb3V0ZXJPdXRsZXQpOiB2b2lkIHtcbiAgICBpZiAob3V0bGV0ICYmIG91dGxldC5pc0FjdGl2YXRlZCkge1xuICAgICAgZm9yRWFjaChvdXRsZXQub3V0bGV0TWFwLl9vdXRsZXRzLCAodiwgaykgPT4gdGhpcy5kZWFjdGl2YXRlT3V0bGV0QW5kSXRDaGlsZHJlbih2KSk7XG4gICAgICBvdXRsZXQuZGVhY3RpdmF0ZSgpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBub2RlQ2hpbGRyZW5Bc01hcChub2RlOiBUcmVlTm9kZTxBY3RpdmF0ZWRSb3V0ZT58bnVsbCkge1xuICByZXR1cm4gbm9kZSA/XG4gICAgbm9kZS5jaGlsZHJlbi5yZWR1Y2UoXG4gICAgICAobSwgYykgPT4ge1xuICAgICAgICBtW2MudmFsdWUub3V0bGV0XSA9IGM7XG4gICAgICAgIHJldHVybiBtO1xuICAgICAgfSxcbiAgICAgIHt9KSA6XG4gIHt9O1xufVxuXG5mdW5jdGlvbiBnZXRPdXRsZXQob3V0bGV0TWFwOiBSb3V0ZXJPdXRsZXRNYXAsIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSk6IFJvdXRlck91dGxldCB7XG4gIGxldCBvdXRsZXQgPSBvdXRsZXRNYXAuX291dGxldHNbcm91dGUub3V0bGV0XTtcbiAgaWYgKCFvdXRsZXQpIHtcbiAgICBpZiAocm91dGUub3V0bGV0ID09PSBQUklNQVJZX09VVExFVCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBwcmltYXJ5IG91dGxldGApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHRoZSBvdXRsZXQgJHtyb3V0ZS5vdXRsZXR9YCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXRsZXQ7XG59XG4iXX0= \ No newline at end of file diff --git a/modules/@angular/router/build/src/router_outlet_map.d.ts b/modules/@angular/router/build/src/router_outlet_map.d.ts new file mode 100644 index 0000000000..df50474269 --- /dev/null +++ b/modules/@angular/router/build/src/router_outlet_map.d.ts @@ -0,0 +1,7 @@ +import { RouterOutlet } from './directives/router_outlet'; +export declare class RouterOutletMap { + _outlets: { + [name: string]: RouterOutlet; + }; + registerOutlet(name: string, outlet: RouterOutlet): void; +} diff --git a/modules/@angular/router/build/src/router_outlet_map.js b/modules/@angular/router/build/src/router_outlet_map.js new file mode 100644 index 0000000000..1895fca1f3 --- /dev/null +++ b/modules/@angular/router/build/src/router_outlet_map.js @@ -0,0 +1,10 @@ +"use strict"; +var RouterOutletMap = (function () { + function RouterOutletMap() { + this._outlets = {}; + } + RouterOutletMap.prototype.registerOutlet = function (name, outlet) { this._outlets[name] = outlet; }; + return RouterOutletMap; +}()); +exports.RouterOutletMap = RouterOutletMap; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyX291dGxldF9tYXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcm91dGVyX291dGxldF9tYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUtBO0lBQUE7UUFFRSxhQUFRLEdBQW1DLEVBQUUsQ0FBQztJQUVoRCxDQUFDO0lBREMsd0NBQWMsR0FBZCxVQUFlLElBQVksRUFBRSxNQUFvQixJQUFVLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUM1RixzQkFBQztBQUFELENBQUMsQUFKRCxJQUlDO0FBSlksdUJBQWUsa0JBSTNCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSb3V0ZXJPdXRsZXQgfSBmcm9tICcuL2RpcmVjdGl2ZXMvcm91dGVyX291dGxldCc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBSb3V0ZXJPdXRsZXRNYXAge1xuICAvKiogQGludGVybmFsICovXG4gIF9vdXRsZXRzOiB7W25hbWU6IHN0cmluZ106IFJvdXRlck91dGxldH0gPSB7fTtcbiAgcmVnaXN0ZXJPdXRsZXQobmFtZTogc3RyaW5nLCBvdXRsZXQ6IFJvdXRlck91dGxldCk6IHZvaWQgeyB0aGlzLl9vdXRsZXRzW25hbWVdID0gb3V0bGV0OyB9XG59XG4iXX0= \ No newline at end of file diff --git a/modules/@angular/router/build/src/router_state.d.ts b/modules/@angular/router/build/src/router_state.d.ts new file mode 100644 index 0000000000..569b8837ac --- /dev/null +++ b/modules/@angular/router/build/src/router_state.d.ts @@ -0,0 +1,18 @@ +import { Tree, TreeNode } from './utils/tree'; +import { UrlSegment } from './url_tree'; +import { Params } from './shared'; +import { Observable } from 'rxjs/Observable'; +import { Type } from '@angular/core'; +export declare class RouterState extends Tree { + queryParams: Observable; + fragment: Observable; + constructor(root: TreeNode, queryParams: Observable, fragment: Observable); +} +export declare function createEmptyState(rootComponent: Type): RouterState; +export declare class ActivatedRoute { + urlSegments: Observable; + params: Observable; + outlet: string; + component: Type | string; + constructor(urlSegments: Observable, params: Observable, outlet: string, component: Type | string); +} diff --git a/modules/@angular/router/build/src/router_state.js b/modules/@angular/router/build/src/router_state.js new file mode 100644 index 0000000000..558d05b795 --- /dev/null +++ b/modules/@angular/router/build/src/router_state.js @@ -0,0 +1,40 @@ +"use strict"; +var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +}; +var tree_1 = require('./utils/tree'); +var url_tree_1 = require('./url_tree'); +var shared_1 = require('./shared'); +var BehaviorSubject_1 = require('rxjs/BehaviorSubject'); +var RouterState = (function (_super) { + __extends(RouterState, _super); + function RouterState(root, queryParams, fragment) { + _super.call(this, root); + this.queryParams = queryParams; + this.fragment = fragment; + } + return RouterState; +}(tree_1.Tree)); +exports.RouterState = RouterState; +function createEmptyState(rootComponent) { + var emptyUrl = new BehaviorSubject_1.BehaviorSubject([new url_tree_1.UrlSegment("", {}, shared_1.PRIMARY_OUTLET)]); + var emptyParams = new BehaviorSubject_1.BehaviorSubject({}); + var emptyQueryParams = new BehaviorSubject_1.BehaviorSubject({}); + var fragment = new BehaviorSubject_1.BehaviorSubject(""); + var activated = new ActivatedRoute(emptyUrl, emptyParams, shared_1.PRIMARY_OUTLET, rootComponent); + return new RouterState(new tree_1.TreeNode(activated, []), emptyQueryParams, fragment); +} +exports.createEmptyState = createEmptyState; +var ActivatedRoute = (function () { + function ActivatedRoute(urlSegments, params, outlet, component) { + this.urlSegments = urlSegments; + this.params = params; + this.outlet = outlet; + this.component = component; + } + return ActivatedRoute; +}()); +exports.ActivatedRoute = ActivatedRoute; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyX3N0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JvdXRlcl9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxxQkFBK0IsY0FBYyxDQUFDLENBQUE7QUFDOUMseUJBQTJCLFlBQVksQ0FBQyxDQUFBO0FBQ3hDLHVCQUF1QyxVQUFVLENBQUMsQ0FBQTtBQUVsRCxnQ0FBZ0Msc0JBQXNCLENBQUMsQ0FBQTtBQWtCdkQ7SUFBaUMsK0JBQW9CO0lBQ25ELHFCQUFZLElBQThCLEVBQVMsV0FBK0IsRUFBUyxRQUE0QjtRQUNySCxrQkFBTSxJQUFJLENBQUMsQ0FBQztRQURxQyxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFBUyxhQUFRLEdBQVIsUUFBUSxDQUFvQjtJQUV2SCxDQUFDO0lBQ0gsa0JBQUM7QUFBRCxDQUFDLEFBSkQsQ0FBaUMsV0FBSSxHQUlwQztBQUpZLG1CQUFXLGNBSXZCLENBQUE7QUFFRCwwQkFBaUMsYUFBbUI7SUFDbEQsSUFBTSxRQUFRLEdBQUcsSUFBSSxpQ0FBZSxDQUFDLENBQUMsSUFBSSxxQkFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsdUJBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRSxJQUFNLFdBQVcsR0FBRyxJQUFJLGlDQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUMsSUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGlDQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakQsSUFBTSxRQUFRLEdBQUcsSUFBSSxpQ0FBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLElBQU0sU0FBUyxHQUFHLElBQUksY0FBYyxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsdUJBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUMzRixNQUFNLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxlQUFRLENBQWlCLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNsRyxDQUFDO0FBUGUsd0JBQWdCLG1CQU8vQixDQUFBO0FBZUQ7SUFDRSx3QkFBbUIsV0FBcUMsRUFDckMsTUFBMEIsRUFDMUIsTUFBYyxFQUNkLFNBQXdCO1FBSHhCLGdCQUFXLEdBQVgsV0FBVyxDQUEwQjtRQUNyQyxXQUFNLEdBQU4sTUFBTSxDQUFvQjtRQUMxQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsY0FBUyxHQUFULFNBQVMsQ0FBZTtJQUFHLENBQUM7SUFDakQscUJBQUM7QUFBRCxDQUFDLEFBTEQsSUFLQztBQUxZLHNCQUFjLGlCQUsxQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJlZSwgVHJlZU5vZGUgfSBmcm9tICcuL3V0aWxzL3RyZWUnO1xuaW1wb3J0IHsgVXJsU2VnbWVudCB9IGZyb20gJy4vdXJsX3RyZWUnO1xuaW1wb3J0IHsgUGFyYW1zLCBQUklNQVJZX09VVExFVCB9IGZyb20gJy4vc2hhcmVkJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzL09ic2VydmFibGUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcy9CZWhhdmlvclN1YmplY3QnO1xuaW1wb3J0IHsgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIFRoZSBzdGF0ZSBvZiB0aGUgcm91dGVyIGF0IGEgcGFydGljdWxhciBtb21lbnQgaW4gdGltZS5cbiAqXG4gKiAjIyMgVXNhZ2VcbiAqXG4gKiBgYGBcbiAqIGNsYXNzIE15Q29tcG9uZW50IHtcbiAqICAgY29uc3RydWN0b3Iocm91dGVyOiBSb3V0ZXIpIHtcbiAqICAgICBjb25zdCBzdGF0ZSA9IHJvdXRlci5yb3V0ZXJTdGF0ZTtcbiAqICAgICBjb25zdCBpZDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gc3RhdGUuZmlyc3RDaGlsZChzdGF0ZS5yb290KS5wYXJhbXMubWFwKHAgPT4gcC5pZCk7XG4gKiAgICAgY29uc3QgaXNEZWJ1ZzogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gc3RhdGUucXVlcnlQYXJhbXMubWFwKHEgPT4gcS5kZWJ1Zyk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUm91dGVyU3RhdGUgZXh0ZW5kcyBUcmVlPEFjdGl2YXRlZFJvdXRlPiB7XG4gIGNvbnN0cnVjdG9yKHJvb3Q6IFRyZWVOb2RlPEFjdGl2YXRlZFJvdXRlPiwgcHVibGljIHF1ZXJ5UGFyYW1zOiBPYnNlcnZhYmxlPFBhcmFtcz4sIHB1YmxpYyBmcmFnbWVudDogT2JzZXJ2YWJsZTxzdHJpbmc+KSB7XG4gICAgc3VwZXIocm9vdCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVtcHR5U3RhdGUocm9vdENvbXBvbmVudDogVHlwZSk6IFJvdXRlclN0YXRlIHtcbiAgY29uc3QgZW1wdHlVcmwgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtuZXcgVXJsU2VnbWVudChcIlwiLCB7fSwgUFJJTUFSWV9PVVRMRVQpXSk7XG4gIGNvbnN0IGVtcHR5UGFyYW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdCh7fSk7XG4gIGNvbnN0IGVtcHR5UXVlcnlQYXJhbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHt9KTtcbiAgY29uc3QgZnJhZ21lbnQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFwiXCIpO1xuICBjb25zdCBhY3RpdmF0ZWQgPSBuZXcgQWN0aXZhdGVkUm91dGUoZW1wdHlVcmwsIGVtcHR5UGFyYW1zLCBQUklNQVJZX09VVExFVCwgcm9vdENvbXBvbmVudCk7XG4gIHJldHVybiBuZXcgUm91dGVyU3RhdGUobmV3IFRyZWVOb2RlPEFjdGl2YXRlZFJvdXRlPihhY3RpdmF0ZWQsIFtdKSwgZW1wdHlRdWVyeVBhcmFtcywgZnJhZ21lbnQpO1xufVxuXG4vKipcbiAqIENvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhIGNvbXBvbmVudCBsb2FkZWQgaW4gYW4gb3V0bGV0LlxuICpcbiAqICMjIyBVc2FnZVxuICpcbiAqIGBgYFxuICogY2xhc3MgTXlDb21wb25lbnQge1xuICogICBjb25zdHJ1Y3Rvcihyb3V0ZTogQWN0aXZhdGVkUm91dGUpIHtcbiAqICAgICBjb25zdCBpZDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gcm91dGUucGFyYW1zLm1hcChwID0+IHAuaWQpO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIEFjdGl2YXRlZFJvdXRlIHtcbiAgY29uc3RydWN0b3IocHVibGljIHVybFNlZ21lbnRzOiBPYnNlcnZhYmxlPFVybFNlZ21lbnRbXT4sXG4gICAgICAgICAgICAgIHB1YmxpYyBwYXJhbXM6IE9ic2VydmFibGU8UGFyYW1zPixcbiAgICAgICAgICAgICAgcHVibGljIG91dGxldDogc3RyaW5nLFxuICAgICAgICAgICAgICBwdWJsaWMgY29tcG9uZW50OiBUeXBlIHwgc3RyaW5nKSB7fVxufSJdfQ== \ No newline at end of file diff --git a/modules/@angular/router/build/src/shared.d.ts b/modules/@angular/router/build/src/shared.d.ts new file mode 100644 index 0000000000..2aacfdf7a6 --- /dev/null +++ b/modules/@angular/router/build/src/shared.d.ts @@ -0,0 +1,4 @@ +export declare const PRIMARY_OUTLET: string; +export declare type Params = { + [key: string]: string; +}; diff --git a/modules/@angular/router/build/src/shared.js b/modules/@angular/router/build/src/shared.js new file mode 100644 index 0000000000..9bb5b9dd40 --- /dev/null +++ b/modules/@angular/router/build/src/shared.js @@ -0,0 +1,3 @@ +"use strict"; +exports.PRIMARY_OUTLET = "PRIMARY_OUTLET"; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NoYXJlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBSWEsc0JBQWMsR0FBVyxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTmFtZSBvZiB0aGUgcHJpbWFyeSBvdXRsZXQuXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgUFJJTUFSWV9PVVRMRVQ6IHN0cmluZyA9IFwiUFJJTUFSWV9PVVRMRVRcIjtcblxuLyoqXG4gKiBBIGNvbGxlY3Rpb24gb2YgcGFyYW1ldGVycy5cbiAqL1xuZXhwb3J0IHR5cGUgUGFyYW1zID0geyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbiJdfQ== \ No newline at end of file diff --git a/modules/@angular/router/build/src/url_serializer.d.ts b/modules/@angular/router/build/src/url_serializer.d.ts new file mode 100644 index 0000000000..509f6b4ea0 --- /dev/null +++ b/modules/@angular/router/build/src/url_serializer.d.ts @@ -0,0 +1,10 @@ +import { UrlTree, UrlSegment } from './url_tree'; +export declare abstract class UrlSerializer { + abstract parse(url: string): UrlTree; + abstract serialize(tree: UrlTree): string; +} +export declare class DefaultUrlSerializer implements UrlSerializer { + parse(url: string): UrlTree; + serialize(tree: UrlTree): string; +} +export declare function serializeSegment(segment: UrlSegment): string; diff --git a/modules/@angular/router/build/src/url_serializer.js b/modules/@angular/router/build/src/url_serializer.js new file mode 100644 index 0000000000..987e3ba18a --- /dev/null +++ b/modules/@angular/router/build/src/url_serializer.js @@ -0,0 +1,224 @@ +"use strict"; +var url_tree_1 = require('./url_tree'); +var shared_1 = require('./shared'); +var tree_1 = require('./utils/tree'); +var UrlSerializer = (function () { + function UrlSerializer() { + } + return UrlSerializer; +}()); +exports.UrlSerializer = UrlSerializer; +var DefaultUrlSerializer = (function () { + function DefaultUrlSerializer() { + } + DefaultUrlSerializer.prototype.parse = function (url) { + var p = new UrlParser(url); + return new url_tree_1.UrlTree(p.parseRootSegment(), p.parseQueryParams(), p.parseFragment()); + }; + DefaultUrlSerializer.prototype.serialize = function (tree) { + var node = serializeUrlTreeNode(tree_1.rootNode(tree)); + var query = serializeQueryParams(tree.queryParameters); + var fragment = tree.fragment !== null ? "#" + tree.fragment : ''; + return "" + node + query + fragment; + }; + return DefaultUrlSerializer; +}()); +exports.DefaultUrlSerializer = DefaultUrlSerializer; +function serializeUrlTreeNode(node) { + return "" + serializeSegment(node.value) + serializeChildren(node); +} +function serializeUrlTreeNodes(nodes) { + var primary = serializeSegment(nodes[0].value); + var secondaryNodes = nodes.slice(1); + var secondary = secondaryNodes.length > 0 ? "(" + secondaryNodes.map(serializeUrlTreeNode).join("//") + ")" : ""; + var children = serializeChildren(nodes[0]); + return "" + primary + secondary + children; +} +function serializeChildren(node) { + if (node.children.length > 0) { + return "/" + serializeUrlTreeNodes(node.children); + } + else { + return ""; + } +} +function serializeSegment(segment) { + var outlet = segment.outlet === shared_1.PRIMARY_OUTLET ? '' : segment.outlet + ":"; + return "" + outlet + segment.path + serializeParams(segment.parameters); +} +exports.serializeSegment = serializeSegment; +function serializeParams(params) { + return pairs(params).map(function (p) { return (";" + p.first + "=" + p.second); }).join(""); +} +function serializeQueryParams(params) { + var strs = pairs(params).map(function (p) { return (p.first + "=" + p.second); }); + return strs.length > 0 ? "?" + strs.join("&") : ""; +} +var Pair = (function () { + function Pair(first, second) { + this.first = first; + this.second = second; + } + return Pair; +}()); +function pairs(obj) { + var res = []; + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + res.push(new Pair(prop, obj[prop])); + } + } + return res; +} +var SEGMENT_RE = /^[^\/\(\)\?;=&#]+/; +function matchUrlSegment(str) { + SEGMENT_RE.lastIndex = 0; + var match = SEGMENT_RE.exec(str); + return match ? match[0] : ''; +} +var QUERY_PARAM_VALUE_RE = /^[^\(\)\?;&#]+/; +function matchUrlQueryParamValue(str) { + QUERY_PARAM_VALUE_RE.lastIndex = 0; + var match = QUERY_PARAM_VALUE_RE.exec(str); + return match ? match[0] : ''; +} +var UrlParser = (function () { + function UrlParser(remaining) { + this.remaining = remaining; + } + UrlParser.prototype.peekStartsWith = function (str) { return this.remaining.startsWith(str); }; + UrlParser.prototype.capture = function (str) { + if (!this.remaining.startsWith(str)) { + throw new Error("Expected \"" + str + "\"."); + } + this.remaining = this.remaining.substring(str.length); + }; + UrlParser.prototype.parseRootSegment = function () { + if (this.remaining == '' || this.remaining == '/') { + return new tree_1.TreeNode(new url_tree_1.UrlSegment('', {}, shared_1.PRIMARY_OUTLET), []); + } + else { + var segments = this.parseSegments(false); + return new tree_1.TreeNode(new url_tree_1.UrlSegment('', {}, shared_1.PRIMARY_OUTLET), segments); + } + }; + UrlParser.prototype.parseSegments = function (hasOutletName) { + if (this.remaining.length == 0) { + return []; + } + if (this.peekStartsWith('/')) { + this.capture('/'); + } + var path = matchUrlSegment(this.remaining); + this.capture(path); + var outletName; + if (hasOutletName) { + if (path.indexOf(":") === -1) { + throw new Error("Not outlet name is provided"); + } + if (path.indexOf(":") > -1 && hasOutletName) { + var parts = path.split(":"); + outletName = parts[0]; + path = parts[1]; + } + } + else { + if (path.indexOf(":") > -1) { + throw new Error("Not outlet name is allowed"); + } + outletName = shared_1.PRIMARY_OUTLET; + } + var matrixParams = {}; + if (this.peekStartsWith(';')) { + matrixParams = this.parseMatrixParams(); + } + var secondary = []; + if (this.peekStartsWith('(')) { + secondary = this.parseSecondarySegments(); + } + var children = []; + if (this.peekStartsWith('/') && !this.peekStartsWith('//')) { + this.capture('/'); + children = this.parseSegments(false); + } + var segment = new url_tree_1.UrlSegment(path, matrixParams, outletName); + var node = new tree_1.TreeNode(segment, children); + return [node].concat(secondary); + }; + UrlParser.prototype.parseQueryParams = function () { + var params = {}; + if (this.peekStartsWith('?')) { + this.capture('?'); + this.parseQueryParam(params); + while (this.remaining.length > 0 && this.peekStartsWith('&')) { + this.capture('&'); + this.parseQueryParam(params); + } + } + return params; + }; + UrlParser.prototype.parseFragment = function () { + if (this.peekStartsWith('#')) { + return this.remaining.substring(1); + } + else { + return null; + } + }; + UrlParser.prototype.parseMatrixParams = function () { + var params = {}; + while (this.remaining.length > 0 && this.peekStartsWith(';')) { + this.capture(';'); + this.parseParam(params); + } + return params; + }; + UrlParser.prototype.parseParam = function (params) { + var key = matchUrlSegment(this.remaining); + if (!key) { + return; + } + this.capture(key); + var value = "true"; + if (this.peekStartsWith('=')) { + this.capture('='); + var valueMatch = matchUrlSegment(this.remaining); + if (valueMatch) { + value = valueMatch; + this.capture(value); + } + } + params[key] = value; + }; + UrlParser.prototype.parseQueryParam = function (params) { + var key = matchUrlSegment(this.remaining); + if (!key) { + return; + } + this.capture(key); + var value = "true"; + if (this.peekStartsWith('=')) { + this.capture('='); + var valueMatch = matchUrlQueryParamValue(this.remaining); + if (valueMatch) { + value = valueMatch; + this.capture(value); + } + } + params[key] = value; + }; + UrlParser.prototype.parseSecondarySegments = function () { + var segments = []; + this.capture('('); + while (!this.peekStartsWith(')') && this.remaining.length > 0) { + segments = segments.concat(this.parseSegments(true)); + if (this.peekStartsWith('//')) { + this.capture('//'); + } + } + this.capture(')'); + return segments; + }; + return UrlParser; +}()); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsX3NlcmlhbGl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXJsX3NlcmlhbGl6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHlCQUFvQyxZQUFZLENBQUMsQ0FBQTtBQUNqRCx1QkFBK0IsVUFBVSxDQUFDLENBQUE7QUFDMUMscUJBQW1DLGNBQWMsQ0FBQyxDQUFBO0FBS2xEO0lBQUE7SUFVQSxDQUFDO0lBQUQsb0JBQUM7QUFBRCxDQUFDLEFBVkQsSUFVQztBQVZxQixxQkFBYSxnQkFVbEMsQ0FBQTtBQUtEO0lBQUE7SUFZQSxDQUFDO0lBWEMsb0NBQUssR0FBTCxVQUFNLEdBQVc7UUFDZixJQUFNLENBQUMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixNQUFNLENBQUMsSUFBSSxrQkFBTyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFRCx3Q0FBUyxHQUFULFVBQVUsSUFBYTtRQUNyQixJQUFNLElBQUksR0FBRyxvQkFBb0IsQ0FBQyxlQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNsRCxJQUFNLEtBQUssR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDekQsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEdBQUcsTUFBSSxJQUFJLENBQUMsUUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNuRSxNQUFNLENBQUMsS0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLFFBQVUsQ0FBQztJQUN0QyxDQUFDO0lBQ0gsMkJBQUM7QUFBRCxDQUFDLEFBWkQsSUFZQztBQVpZLDRCQUFvQix1QkFZaEMsQ0FBQTtBQUVELDhCQUE4QixJQUEwQjtJQUN0RCxNQUFNLENBQUMsS0FBRyxnQkFBZ0Is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QkFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQixDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFbEIsTUFBTSxDQUFDLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ0gsZ0JBQUM7QUFBRCxDQUFDLEFBdEpELElBc0pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXJsVHJlZSwgVXJsU2VnbWVudCB9IGZyb20gJy4vdXJsX3RyZWUnO1xuaW1wb3J0IHsgUFJJTUFSWV9PVVRMRVQgfSBmcm9tICcuL3NoYXJlZCc7XG5pbXBvcnQgeyByb290Tm9kZSwgVHJlZU5vZGUgfSBmcm9tICcuL3V0aWxzL3RyZWUnO1xuXG4vKipcbiAqIERlZmluZXMgYSB3YXkgdG8gc2VyaWFsaXplL2Rlc2VyaWFsaXplIGEgdXJsIHRyZWUuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBVcmxTZXJpYWxpemVyIHtcbiAgLyoqXG4gICAqIFBhcnNlIGEgdXJsIGludG8gYSB7QExpbmsgVXJsVHJlZX1cbiAgICovXG4gIGFic3RyYWN0IHBhcnNlKHVybDogc3RyaW5nKTogVXJsVHJlZTtcblxuICAvKipcbiAgICogQ29udmVydHMgYSB7QExpbmsgVXJsVHJlZX0gaW50byBhIHVybFxuICAgKi9cbiAgYWJzdHJhY3Qgc2VyaWFsaXplKHRyZWU6IFVybFRyZWUpOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBzZXJpYWxpemF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgRGVmYXVsdFVybFNlcmlhbGl6ZXIgaW1wbGVtZW50cyBVcmxTZXJpYWxpemVyIHtcbiAgcGFyc2UodXJsOiBzdHJpbmcpOiBVcmxUcmVlIHtcbiAgICBjb25zdCBwID0gbmV3IFVybFBhcnNlcih1cmwpO1xuICAgIHJldHVybiBuZXcgVXJsVHJlZShwLnBhcnNlUm9vdFNlZ21lbnQoKSwgcC5wYXJzZVF1ZXJ5UGFyYW1zKCksIHAucGFyc2VGcmFnbWVudCgpKTtcbiAgfVxuXG4gIHNlcmlhbGl6ZSh0cmVlOiBVcmxUcmVlKTogc3RyaW5nIHsgXG4gICAgY29uc3Qgbm9kZSA9IHNlcmlhbGl6ZVVybFRyZWVOb2RlKHJvb3ROb2RlKHRyZWUpKTtcbiAgICBjb25zdCBxdWVyeSA9IHNlcmlhbGl6ZVF1ZXJ5UGFyYW1zKHRyZWUucXVlcnlQYXJhbWV0ZXJzKTtcbiAgICBjb25zdCBmcmFnbWVudCA9IHRyZWUuZnJhZ21lbnQgIT09IG51bGwgPyBgIyR7dHJlZS5mcmFnbWVudH1gIDogJyc7XG4gICAgcmV0dXJuIGAke25vZGV9JHtxdWVyeX0ke2ZyYWdtZW50fWA7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2VyaWFsaXplVXJsVHJlZU5vZGUobm9kZTogVHJlZU5vZGU8VXJsU2VnbWVudD4pOiBzdHJpbmcge1xuICByZXR1cm4gYCR7c2VyaWFsaXplU2VnbWVudChub2RlLnZhbHVlKX0ke3NlcmlhbGl6ZUNoaWxkcmVuKG5vZGUpfWA7XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZVVybFRyZWVOb2Rlcyhub2RlczogVHJlZU5vZGU8VXJsU2VnbWVudD5bXSk6IHN0cmluZyB7XG4gIGNvbnN0IHByaW1hcnkgPSBzZXJpYWxpemVTZWdtZW50KG5vZGVzWzBdLnZhbHVlKTtcbiAgY29uc3Qgc2Vjb25kYXJ5Tm9kZXMgPSBub2Rlcy5zbGljZSgxKTtcbiAgY29uc3Qgc2Vjb25kYXJ5ID0gc2Vjb25kYXJ5Tm9kZXMubGVuZ3RoID4gMCA/IGAoJHtzZWNvbmRhcnlOb2Rlcy5tYXAoc2VyaWFsaXplVXJsVHJlZU5vZGUpLmpvaW4oXCIvL1wiKX0pYCA6IFwiXCI7XG4gIGNvbnN0IGNoaWxkcmVuID0gc2VyaWFsaXplQ2hpbGRyZW4obm9kZXNbMF0pO1xuICByZXR1cm4gYCR7cHJpbWFyeX0ke3NlY29uZGFyeX0ke2NoaWxkcmVufWA7XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZUNoaWxkcmVuKG5vZGU6IFRyZWVOb2RlPFVybFNlZ21lbnQ+KTogc3RyaW5nIHtcbiAgaWYgKG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBgLyR7c2VyaWFsaXplVXJsVHJlZU5vZGVzKG5vZGUuY2hpbGRyZW4pfWA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZVNlZ21lbnQoc2VnbWVudDogVXJsU2VnbWVudCk6IHN0cmluZyB7XG4gIGNvbnN0IG91dGxldCA9IHNlZ21lbnQub3V0bGV0ID09PSBQUklNQVJZX09VVExFVCA/ICcnIDogYCR7c2VnbWVudC5vdXRsZXR9OmA7XG4gIHJldHVybiBgJHtvdXRsZXR9JHtzZWdtZW50LnBhdGh9JHtzZXJpYWxpemVQYXJhbXMoc2VnbWVudC5wYXJhbWV0ZXJzKX1gO1xufVxuXG5mdW5jdGlvbiBzZXJpYWxpemVQYXJhbXMocGFyYW1zOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSk6IHN0cmluZyB7XG4gIHJldHVybiBwYWlycyhwYXJhbXMpLm1hcChwID0+IGA7JHtwLmZpcnN0fT0ke3Auc2Vjb25kfWApLmpvaW4oXCJcIik7XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZVF1ZXJ5UGFyYW1zKHBhcmFtczoge1trZXk6IHN0cmluZ106IHN0cmluZ30pOiBzdHJpbmcge1xuICBjb25zdCBzdHJzID0gcGFpcnMocGFyYW1zKS5tYXAocCA9PiBgJHtwLmZpcnN0fT0ke3Auc2Vjb25kfWApO1xuICByZXR1cm4gc3Rycy5sZW5ndGggPiAwID8gYD8ke3N0cnMuam9pbihcIiZcIil9YCA6IFwiXCI7XG59XG5cbmNsYXNzIFBhaXI8QSxCPiB7IGNvbnN0cnVjdG9yKHB1YmxpYyBmaXJzdDpBLCBwdWJsaWMgc2Vjb25kOkIpIHt9IH1cbmZ1bmN0aW9uIHBhaXJzPFQ+KG9iajoge1trZXk6IHN0cmluZ106IFR9KTpQYWlyPHN0cmluZyxUPltdIHtcbiAgY29uc3QgcmVzID0gW107XG4gIGZvciAobGV0IHByb3AgaW4gb2JqKSB7XG4gICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgcmVzLnB1c2gobmV3IFBhaXI8c3RyaW5nLCBUPihwcm9wLCBvYmpbcHJvcF0pKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuY29uc3QgU0VHTUVOVF9SRSA9IC9eW15cXC9cXChcXClcXD87PSYjXSsvO1xuZnVuY3Rpb24gbWF0Y2hVcmxTZWdtZW50KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgU0VHTUVOVF9SRS5sYXN0SW5kZXggPSAwO1xuICB2YXIgbWF0Y2ggPSBTRUdNRU5UX1JFLmV4ZWMoc3RyKTtcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMF0gOiAnJztcbn1cblxuY29uc3QgUVVFUllfUEFSQU1fVkFMVUVfUkUgPSAvXlteXFwoXFwpXFw/OyYjXSsvO1xuZnVuY3Rpb24gbWF0Y2hVcmxRdWVyeVBhcmFtVmFsdWUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBRVUVSWV9QQVJBTV9WQUxVRV9SRS5sYXN0SW5kZXggPSAwO1xuICBjb25zdCBtYXRjaCA9IFFVRVJZX1BBUkFNX1ZBTFVFX1JFLmV4ZWMoc3RyKTtcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMF0gOiAnJztcbn1cblxuY2xhc3MgVXJsUGFyc2VyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW1haW5pbmc6IHN0cmluZykge31cblxuICBwZWVrU3RhcnRzV2l0aChzdHI6IHN0cmluZyk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5yZW1haW5pbmcuc3RhcnRzV2l0aChzdHIpOyB9XG5cbiAgY2FwdHVyZShzdHI6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yZW1haW5pbmcuc3RhcnRzV2l0aChzdHIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIFwiJHtzdHJ9XCIuYCk7XG4gICAgfVxuICAgIHRoaXMucmVtYWluaW5nID0gdGhpcy5yZW1haW5pbmcuc3Vic3RyaW5nKHN0ci5sZW5ndGgpO1xuICB9XG5cbiAgcGFyc2VSb290U2VnbWVudCgpOiBUcmVlTm9kZTxVcmxTZWdtZW50PiB7XG4gICAgaWYgKHRoaXMucmVtYWluaW5nICA9PSAnJyB8fCB0aGlzLnJlbWFpbmluZyA9PSAnLycpIHtcbiAgICAgIHJldHVybiBuZXcgVHJlZU5vZGU8VXJsU2VnbWVudD4obmV3IFVybFNlZ21lbnQoJycsIHt9LCBQUklNQVJZX09VVExFVCksIFtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VnbWVudHMgPSB0aGlzLnBhcnNlU2VnbWVudHMoZmFsc2UpO1xuICAgICAgcmV0dXJuIG5ldyBUcmVlTm9kZTxVcmxTZWdtZW50PihuZXcgVXJsU2VnbWVudCgnJywge30sIFBSSU1BUllfT1VUTEVUKSwgc2VnbWVudHMpO1xuICAgIH1cbiAgfVxuXG4gIHBhcnNlU2VnbWVudHMoaGFzT3V0bGV0TmFtZTogYm9vbGVhbik6IFRyZWVOb2RlPFVybFNlZ21lbnQ+W10ge1xuICAgIGlmICh0aGlzLnJlbWFpbmluZy5sZW5ndGggPT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBpZiAodGhpcy5wZWVrU3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICB0aGlzLmNhcHR1cmUoJy8nKTtcbiAgICB9XG4gICAgbGV0IHBhdGggPSBtYXRjaFVybFNlZ21lbnQodGhpcy5yZW1haW5pbmcpO1xuICAgIHRoaXMuY2FwdHVyZShwYXRoKTtcblxuICAgIGxldCBvdXRsZXROYW1lO1xuICAgIGlmIChoYXNPdXRsZXROYW1lKSB7XG4gICAgICBpZiAocGF0aC5pbmRleE9mKFwiOlwiKSA9PT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm90IG91dGxldCBuYW1lIGlzIHByb3ZpZGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHBhdGguaW5kZXhPZihcIjpcIikgPiAtMSAmJiBoYXNPdXRsZXROYW1lKSB7XG4gICAgICAgIGxldCBwYXJ0cyA9IHBhdGguc3BsaXQoXCI6XCIpO1xuICAgICAgICBvdXRsZXROYW1lID0gcGFydHNbMF07XG4gICAgICAgIHBhdGggPSBwYXJ0c1sxXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHBhdGguaW5kZXhPZihcIjpcIikgPiAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3Qgb3V0bGV0IG5hbWUgaXMgYWxsb3dlZFwiKTtcbiAgICAgIH1cbiAgICAgIG91dGxldE5hbWUgPSBQUklNQVJZX09VVExFVDtcbiAgICB9XG5cbiAgICBsZXQgbWF0cml4UGFyYW1zOiB7W2tleTogc3RyaW5nXTogYW55fSA9IHt9O1xuICAgIGlmICh0aGlzLnBlZWtTdGFydHNXaXRoKCc7JykpIHtcbiAgICAgIG1hdHJpeFBhcmFtcyA9IHRoaXMucGFyc2VNYXRyaXhQYXJhbXMoKTtcbiAgICB9XG5cbiAgICBsZXQgc2Vjb25kYXJ5ID0gW107XG4gICAgaWYgKHRoaXMucGVla1N0YXJ0c1dpdGgoJygnKSkge1xuICAgICAgc2Vjb25kYXJ5ID0gdGhpcy5wYXJzZVNlY29uZGFyeVNlZ21lbnRzKCk7XG4gICAgfVxuXG4gICAgbGV0IGNoaWxkcmVuOiBUcmVlTm9kZTxVcmxTZWdtZW50PltdID0gW107XG4gICAgaWYgKHRoaXMucGVla1N0YXJ0c1dpdGgoJy8nKSAmJiAhdGhpcy5wZWVrU3RhcnRzV2l0aCgnLy8nKSkge1xuICAgICAgdGhpcy5jYXB0dXJlKCcvJyk7XG4gICAgICBjaGlsZHJlbiA9IHRoaXMucGFyc2VTZWdtZW50cyhmYWxzZSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VnbWVudCA9IG5ldyBVcmxTZWdtZW50KHBhdGgsIG1hdHJpeFBhcmFtcywgb3V0bGV0TmFtZSk7XG4gICAgY29uc3Qgbm9kZSA9IG5ldyBUcmVlTm9kZTxVcmxTZWdtZW50PihzZWdtZW50LCBjaGlsZHJlbik7XG4gICAgcmV0dXJuIFtub2RlXS5jb25jYXQoc2Vjb25kYXJ5KTtcbiAgfVxuXG4gIHBhcnNlUXVlcnlQYXJhbXMoKToge1trZXk6IHN0cmluZ106IGFueX0ge1xuICAgIHZhciBwYXJhbXM6IHtba2V5OiBzdHJpbmddOiBhbnl9ID0ge307XG4gICAgaWYgKHRoaXMucGVla1N0YXJ0c1dpdGgoJz8nKSkge1xuICAgICAgdGhpcy5jYXB0dXJlKCc/Jyk7XG4gICAgICB0aGlzLnBhcnNlUXVlcnlQYXJhbShwYXJhbXMpO1xuICAgICAgd2hpbGUgKHRoaXMucmVtYWluaW5nLmxlbmd0aCA+IDAgJiYgdGhpcy5wZWVrU3RhcnRzV2l0aCgnJicpKSB7XG4gICAgICAgIHRoaXMuY2FwdHVyZSgnJicpO1xuICAgICAgICB0aGlzLnBhcnNlUXVlcnlQYXJhbShwYXJhbXMpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG5cbiAgcGFyc2VGcmFnbWVudCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5wZWVrU3RhcnRzV2l0aCgnIycpKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW1haW5pbmcuc3Vic3RyaW5nKDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwYXJzZU1hdHJpeFBhcmFtcygpOiB7W2tleTogc3RyaW5nXTogYW55fSB7XG4gICAgdmFyIHBhcmFtczoge1trZXk6IHN0cmluZ106IGFueX0gPSB7fTtcbiAgICB3aGlsZSAodGhpcy5yZW1haW5pbmcubGVuZ3RoID4gMCAmJiB0aGlzLnBlZWtTdGFydHNXaXRoKCc7JykpIHtcbiAgICAgIHRoaXMuY2FwdHVyZSgnOycpO1xuICAgICAgdGhpcy5wYXJzZVBhcmFtKHBhcmFtcyk7XG4gICAgfVxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICBwYXJzZVBhcmFtKHBhcmFtczoge1trZXk6IHN0cmluZ106IGFueX0pOiB2b2lkIHtcbiAgICB2YXIga2V5ID0gbWF0Y2hVcmxTZWdtZW50KHRoaXMucmVtYWluaW5nKTtcbiAgICBpZiAoIWtleSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNhcHR1cmUoa2V5KTtcbiAgICB2YXIgdmFsdWU6IGFueSA9IFwidHJ1ZVwiO1xuICAgIGlmICh0aGlzLnBlZWtTdGFydHNXaXRoKCc9JykpIHtcbiAgICAgIHRoaXMuY2FwdHVyZSgnPScpO1xuICAgICAgdmFyIHZhbHVlTWF0Y2ggPSBtYXRjaFVybFNlZ21lbnQodGhpcy5yZW1haW5pbmcpO1xuICAgICAgaWYgKHZhbHVlTWF0Y2gpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZU1hdGNoO1xuICAgICAgICB0aGlzLmNhcHR1cmUodmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBhcmFtc1trZXldID0gdmFsdWU7XG4gIH1cblxuICBwYXJzZVF1ZXJ5UGFyYW0ocGFyYW1zOiB7W2tleTogc3RyaW5nXTogYW55fSk6IHZvaWQge1xuICAgIHZhciBrZXkgPSBtYXRjaFVybFNlZ21lbnQodGhpcy5yZW1haW5pbmcpO1xuICAgIGlmICgha2V5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2FwdHVyZShrZXkpO1xuICAgIHZhciB2YWx1ZTogYW55ID0gXCJ0cnVlXCI7XG4gICAgaWYgKHRoaXMucGVla1N0YXJ0c1dpdGgoJz0nKSkge1xuICAgICAgdGhpcy5jYXB0dXJlKCc9Jyk7XG4gICAgICB2YXIgdmFsdWVNYXRjaCA9IG1hdGNoVXJsUXVlcnlQYXJhbVZhbHVlKHRoaXMucmVtYWluaW5nKTtcbiAgICAgIGlmICh2YWx1ZU1hdGNoKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWVNYXRjaDtcbiAgICAgICAgdGhpcy5jYXB0dXJlKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyYW1zW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHBhcnNlU2Vjb25kYXJ5U2VnbWVudHMoKTogVHJlZU5vZGU8VXJsU2VnbWVudD5bXSB7XG4gICAgdmFyIHNlZ21lbnRzID0gW107XG4gICAgdGhpcy5jYXB0dXJlKCcoJyk7XG5cbiAgICB3aGlsZSAoIXRoaXMucGVla1N0YXJ0c1dpdGgoJyknKSAmJiB0aGlzLnJlbWFpbmluZy5sZW5ndGggPiAwKSB7XG4gICAgICBzZWdtZW50cyA9IHNlZ21lbnRzLmNvbmNhdCh0aGlzLnBhcnNlU2VnbWVudHModHJ1ZSkpO1xuICAgICAgaWYgKHRoaXMucGVla1N0YXJ0c1dpdGgoJy8vJykpIHtcbiAgICAgICAgdGhpcy5jYXB0dXJlKCcvLycpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNhcHR1cmUoJyknKTtcblxuICAgIHJldHVybiBzZWdtZW50cztcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/modules/@angular/router/build/src/url_tree.d.ts b/modules/@angular/router/build/src/url_tree.d.ts new file mode 100644 index 0000000000..f9ea224dae --- /dev/null +++ b/modules/@angular/router/build/src/url_tree.d.ts @@ -0,0 +1,23 @@ +import { Tree, TreeNode } from './utils/tree'; +export declare function createEmptyUrlTree(): UrlTree; +export declare class UrlTree extends Tree { + queryParameters: { + [key: string]: string; + }; + fragment: string | null; + constructor(root: TreeNode, queryParameters: { + [key: string]: string; + }, fragment: string | null); +} +export declare class UrlSegment { + path: string; + parameters: { + [key: string]: string; + }; + outlet: string; + constructor(path: string, parameters: { + [key: string]: string; + }, outlet: string); + toString(): string; +} +export declare function equalUrlSegments(a: UrlSegment[], b: UrlSegment[]): boolean; diff --git a/modules/@angular/router/build/src/url_tree.js b/modules/@angular/router/build/src/url_tree.js new file mode 100644 index 0000000000..eb5b501d4b --- /dev/null +++ b/modules/@angular/router/build/src/url_tree.js @@ -0,0 +1,56 @@ +"use strict"; +var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +}; +var tree_1 = require('./utils/tree'); +var collection_1 = require('./utils/collection'); +var shared_1 = require('./shared'); +function createEmptyUrlTree() { + return new UrlTree(new tree_1.TreeNode(new UrlSegment("", {}, shared_1.PRIMARY_OUTLET), []), {}, null); +} +exports.createEmptyUrlTree = createEmptyUrlTree; +var UrlTree = (function (_super) { + __extends(UrlTree, _super); + function UrlTree(root, queryParameters, fragment) { + _super.call(this, root); + this.queryParameters = queryParameters; + this.fragment = fragment; + } + return UrlTree; +}(tree_1.Tree)); +exports.UrlTree = UrlTree; +var UrlSegment = (function () { + function UrlSegment(path, parameters, outlet) { + this.path = path; + this.parameters = parameters; + this.outlet = outlet; + } + UrlSegment.prototype.toString = function () { + var params = []; + for (var prop in this.parameters) { + if (this.parameters.hasOwnProperty(prop)) { + params.push(prop + "=" + this.parameters[prop]); + } + } + var paramsString = params.length > 0 ? "(" + params.join(',') + ")" : ''; + var outlet = this.outlet === shared_1.PRIMARY_OUTLET ? '' : this.outlet + ":"; + return "" + outlet + this.path + paramsString; + }; + return UrlSegment; +}()); +exports.UrlSegment = UrlSegment; +function equalUrlSegments(a, b) { + if (a.length !== b.length) + return false; + for (var i = 0; i < a.length; ++i) { + if (a[i].path !== b[i].path) + return false; + if (!collection_1.shallowEqual(a[i].parameters, b[i].parameters)) + return false; + } + return true; +} +exports.equalUrlSegments = equalUrlSegments; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsX3RyZWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXJsX3RyZWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEscUJBQStCLGNBQWMsQ0FBQyxDQUFBO0FBQzlDLDJCQUE2QixvQkFBb0IsQ0FBQyxDQUFBO0FBQ2xELHVCQUErQixVQUFVLENBQUMsQ0FBQTtBQUUxQztJQUNFLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLGVBQVEsQ0FBYSxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLHVCQUFjLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDckcsQ0FBQztBQUZlLDBCQUFrQixxQkFFakMsQ0FBQTtBQUtEO0lBQTZCLDJCQUFnQjtJQUMzQyxpQkFBWSxJQUEwQixFQUFTLGVBQXdDLEVBQVMsUUFBdUI7UUFDckgsa0JBQU0sSUFBSSxDQUFDLENBQUM7UUFEaUMsb0JBQWUsR0FBZixlQUFlLENBQXlCO1FBQVMsYUFBUSxHQUFSLFFBQVEsQ0FBZTtJQUV2SCxDQUFDO0lBQ0gsY0FBQztBQUFELENBQUMsQUFKRCxDQUE2QixXQUFJLEdBSWhDO0FBSlksZUFBTyxVQUluQixDQUFBO0FBRUQ7SUFDRSxvQkFBbUIsSUFBWSxFQUFTLFVBQW1DLEVBQVMsTUFBYztRQUEvRSxTQUFJLEdBQUosSUFBSSxDQUFRO1FBQVMsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQUcsQ0FBQztJQUV0Ryw2QkFBUSxHQUFSO1FBQ0UsSUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekMsTUFBTSxDQUFDLElBQUksQ0FBSSxJQUFJLFNBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUcsQ0FBQyxDQUFDO1lBQ2xELENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsTUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ3RFLElBQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEtBQUssdUJBQWMsR0FBRyxFQUFFLEdBQU0sSUFBSSxDQUFDLE1BQU0sTUFBRyxDQUFDO1FBQ3ZFLE1BQU0sQ0FBQyxLQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLFlBQWMsQ0FBQztJQUNoRCxDQUFDO0lBQ0gsaUJBQUM7QUFBRCxDQUFDLEFBZEQsSUFjQztBQWRZLGtCQUFVLGFBY3RCLENBQUE7QUFFRCwwQkFBaUMsQ0FBZSxFQUFFLENBQWU7SUFDL0QsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUN4QyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNsQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzFDLEVBQUUsQ0FBQyxDQUFDLENBQUMseUJBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDcEUsQ0FBQztJQUNELE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBUGUsd0JBQWdCLG1CQU8vQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJlZSwgVHJlZU5vZGUgfSBmcm9tICcuL3V0aWxzL3RyZWUnO1xuaW1wb3J0IHsgc2hhbGxvd0VxdWFsIH0gZnJvbSAnLi91dGlscy9jb2xsZWN0aW9uJztcbmltcG9ydCB7IFBSSU1BUllfT1VUTEVUIH0gZnJvbSAnLi9zaGFyZWQnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW1wdHlVcmxUcmVlKCkge1xuICByZXR1cm4gbmV3IFVybFRyZWUobmV3IFRyZWVOb2RlPFVybFNlZ21lbnQ+KG5ldyBVcmxTZWdtZW50KFwiXCIsIHt9LCBQUklNQVJZX09VVExFVCksIFtdKSwge30sIG51bGwpO1xufVxuXG4vKipcbiAqIEEgVVJMIGluIHRoZSB0cmVlIGZvcm0uXG4gKi9cbmV4cG9ydCBjbGFzcyBVcmxUcmVlIGV4dGVuZHMgVHJlZTxVcmxTZWdtZW50PiB7XG4gIGNvbnN0cnVjdG9yKHJvb3Q6IFRyZWVOb2RlPFVybFNlZ21lbnQ+LCBwdWJsaWMgcXVlcnlQYXJhbWV0ZXJzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSwgcHVibGljIGZyYWdtZW50OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgc3VwZXIocm9vdCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVybFNlZ21lbnQge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcGF0aDogc3RyaW5nLCBwdWJsaWMgcGFyYW1ldGVyczoge1trZXk6IHN0cmluZ106IHN0cmluZ30sIHB1YmxpYyBvdXRsZXQ6IHN0cmluZykge31cblxuICB0b1N0cmluZygpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBbXTtcbiAgICBmb3IgKGxldCBwcm9wIGluIHRoaXMucGFyYW1ldGVycykge1xuICAgICAgaWYgKHRoaXMucGFyYW1ldGVycy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICBwYXJhbXMucHVzaChgJHtwcm9wfT0ke3RoaXMucGFyYW1ldGVyc1twcm9wXX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcGFyYW1zU3RyaW5nID0gcGFyYW1zLmxlbmd0aCA+IDAgPyBgKCR7cGFyYW1zLmpvaW4oJywnKX0pYCA6ICcnO1xuICAgIGNvbnN0IG91dGxldCA9IHRoaXMub3V0bGV0ID09PSBQUklNQVJZX09VVExFVCA/ICcnIDogYCR7dGhpcy5vdXRsZXR9OmA7XG4gICAgcmV0dXJuIGAke291dGxldH0ke3RoaXMucGF0aH0ke3BhcmFtc1N0cmluZ31gO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbFVybFNlZ21lbnRzKGE6IFVybFNlZ21lbnRbXSwgYjogVXJsU2VnbWVudFtdKTogYm9vbGVhbiB7XG4gIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGFbaV0ucGF0aCAhPT0gYltpXS5wYXRoKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCFzaGFsbG93RXF1YWwoYVtpXS5wYXJhbWV0ZXJzLCBiW2ldLnBhcmFtZXRlcnMpKSByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG4iXX0= \ No newline at end of file diff --git a/modules/@angular/router/build/src/utils/collection.d.ts b/modules/@angular/router/build/src/utils/collection.d.ts new file mode 100644 index 0000000000..9df4eefaf9 --- /dev/null +++ b/modules/@angular/router/build/src/utils/collection.d.ts @@ -0,0 +1,17 @@ +export declare function shallowEqual(a: { + [x: string]: any; +}, b: { + [x: string]: any; +}): boolean; +export declare function flatten(a: T[][]): T[]; +export declare function first(a: T[]): T | null; +export declare function merge(m1: { + [key: string]: V; +}, m2: { + [key: string]: V; +}): { + [key: string]: V; +}; +export declare function forEach(map: { + [key: string]: V; +}, callback: Function): void; diff --git a/modules/@angular/router/build/src/utils/collection.js b/modules/@angular/router/build/src/utils/collection.js new file mode 100644 index 0000000000..4c1e38130d --- /dev/null +++ b/modules/@angular/router/build/src/utils/collection.js @@ -0,0 +1,55 @@ +"use strict"; +function shallowEqual(a, b) { + var k1 = Object.keys(a); + var k2 = Object.keys(b); + if (k1.length != k2.length) { + return false; + } + var key; + for (var i = 0; i < k1.length; i++) { + key = k1[i]; + if (a[key] !== b[key]) { + return false; + } + } + return true; +} +exports.shallowEqual = shallowEqual; +function flatten(a) { + var target = []; + for (var i = 0; i < a.length; ++i) { + for (var j = 0; j < a[i].length; ++j) { + target.push(a[i][j]); + } + } + return target; +} +exports.flatten = flatten; +function first(a) { + return a.length > 0 ? a[0] : null; +} +exports.first = first; +function merge(m1, m2) { + var m = {}; + for (var attr in m1) { + if (m1.hasOwnProperty(attr)) { + m[attr] = m1[attr]; + } + } + for (var attr in m2) { + if (m2.hasOwnProperty(attr)) { + m[attr] = m2[attr]; + } + } + return m; +} +exports.merge = merge; +function forEach(map, callback) { + for (var prop in map) { + if (map.hasOwnProperty(prop)) { + callback(map[prop], prop); + } + } +} +exports.forEach = forEach; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9jb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxzQkFBNkIsQ0FBbUIsRUFBRSxDQUFtQjtJQUNuRSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEIsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMzQixNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELElBQUksR0FBRyxDQUFDO0lBQ1IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDbkMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNaLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUNELE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBZGUsb0JBQVksZUFjM0IsQ0FBQTtBQUVELGlCQUEyQixDQUFRO0lBQ2pDLElBQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNsQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNyQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBUmUsZUFBTyxVQVF0QixDQUFBO0FBRUQsZUFBeUIsQ0FBTTtJQUM3QixNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNwQyxDQUFDO0FBRmUsYUFBSyxRQUVwQixDQUFBO0FBRUQsZUFBeUIsRUFBc0IsRUFBRSxFQUFzQjtJQUNyRSxJQUFJLENBQUMsR0FBdUIsRUFBRSxDQUFDO0lBRS9CLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEIsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUVELEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEIsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBaEJlLGFBQUssUUFnQnBCLENBQUE7QUFFRCxpQkFBOEIsR0FBdUIsRUFBRSxRQUFxQztJQUMxRixHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBTmUsZUFBTyxVQU10QixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3dFcXVhbChhOiB7W3g6c3RyaW5nXTphbnl9LCBiOiB7W3g6c3RyaW5nXTphbnl9KTogYm9vbGVhbiB7XG4gIHZhciBrMSA9IE9iamVjdC5rZXlzKGEpO1xuICB2YXIgazIgPSBPYmplY3Qua2V5cyhiKTtcbiAgaWYgKGsxLmxlbmd0aCAhPSBrMi5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGtleTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrMS5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IGsxW2ldO1xuICAgIGlmIChhW2tleV0gIT09IGJba2V5XSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW48VD4oYTogVFtdW10pOiBUW10ge1xuICBjb25zdCB0YXJnZXQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgKytpKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBhW2ldLmxlbmd0aDsgKytqKSB7XG4gICAgICB0YXJnZXQucHVzaChhW2ldW2pdKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0PFQ+KGE6IFRbXSk6IFQgfCBudWxsIHtcbiAgcmV0dXJuIGEubGVuZ3RoID4gMCA/IGFbMF0gOiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2U8Vj4obTE6IHtba2V5OiBzdHJpbmddOiBWfSwgbTI6IHtba2V5OiBzdHJpbmddOiBWfSk6IHtba2V5OiBzdHJpbmddOiBWfSB7XG4gIHZhciBtOiB7W2tleTogc3RyaW5nXTogVn0gPSB7fTtcblxuICBmb3IgKHZhciBhdHRyIGluIG0xKSB7XG4gICAgaWYgKG0xLmhhc093blByb3BlcnR5KGF0dHIpKSB7XG4gICAgICBtW2F0dHJdID0gbTFbYXR0cl07XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgYXR0ciBpbiBtMikge1xuICAgIGlmIChtMi5oYXNPd25Qcm9wZXJ0eShhdHRyKSkge1xuICAgICAgbVthdHRyXSA9IG0yW2F0dHJdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yRWFjaDxLLCBWPihtYXA6IHtba2V5OiBzdHJpbmddOiBWfSwgY2FsbGJhY2s6IC8qKFYsIEspID0+IHZvaWQqLyBGdW5jdGlvbik6IHZvaWQge1xuICBmb3IgKHZhciBwcm9wIGluIG1hcCkge1xuICAgIGlmIChtYXAuaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgIGNhbGxiYWNrKG1hcFtwcm9wXSwgcHJvcCk7XG4gICAgfVxuICB9XG59Il19 \ No newline at end of file diff --git a/modules/@angular/router/build/src/utils/tree.d.ts b/modules/@angular/router/build/src/utils/tree.d.ts new file mode 100644 index 0000000000..1b025de959 --- /dev/null +++ b/modules/@angular/router/build/src/utils/tree.d.ts @@ -0,0 +1,17 @@ +export declare class Tree { + _root: TreeNode; + constructor(root: TreeNode); + readonly root: T; + parent(t: T): T | null; + children(t: T): T[]; + firstChild(t: T): T | null; + siblings(t: T): T[]; + pathFromRoot(t: T): T[]; + contains(tree: Tree): boolean; +} +export declare function rootNode(tree: Tree): TreeNode; +export declare class TreeNode { + value: T; + children: TreeNode[]; + constructor(value: T, children: TreeNode[]); +} diff --git a/modules/@angular/router/build/src/utils/tree.js b/modules/@angular/router/build/src/utils/tree.js new file mode 100644 index 0000000000..6121f4b421 --- /dev/null +++ b/modules/@angular/router/build/src/utils/tree.js @@ -0,0 +1,88 @@ +"use strict"; +var Tree = (function () { + function Tree(root) { + this._root = root; + } + Object.defineProperty(Tree.prototype, "root", { + get: function () { return this._root.value; }, + enumerable: true, + configurable: true + }); + Tree.prototype.parent = function (t) { + var p = this.pathFromRoot(t); + return p.length > 1 ? p[p.length - 2] : null; + }; + Tree.prototype.children = function (t) { + var n = findNode(t, this._root); + return n ? n.children.map(function (t) { return t.value; }) : []; + }; + Tree.prototype.firstChild = function (t) { + var n = findNode(t, this._root); + return n && n.children.length > 0 ? n.children[0].value : null; + }; + Tree.prototype.siblings = function (t) { + var p = findPath(t, this._root, []); + if (p.length < 2) + return []; + var c = p[p.length - 2].children.map(function (c) { return c.value; }); + return c.filter(function (cc) { return cc !== t; }); + }; + Tree.prototype.pathFromRoot = function (t) { return findPath(t, this._root, []).map(function (s) { return s.value; }); }; + Tree.prototype.contains = function (tree) { return contains(this._root, tree._root); }; + return Tree; +}()); +exports.Tree = Tree; +function rootNode(tree) { + return tree._root; +} +exports.rootNode = rootNode; +function findNode(expected, c) { + if (expected === c.value) + return c; + for (var _i = 0, _a = c.children; _i < _a.length; _i++) { + var cc = _a[_i]; + var r = findNode(expected, cc); + if (r) + return r; + } + return null; +} +function findPath(expected, c, collected) { + collected.push(c); + if (expected === c.value) + return collected; + for (var _i = 0, _a = c.children; _i < _a.length; _i++) { + var cc = _a[_i]; + var cloned = collected.slice(0); + var r = findPath(expected, cc, cloned); + if (r) + return r; + } + return []; +} +function contains(tree, subtree) { + if (tree.value !== subtree.value) + return false; + var _loop_1 = function(subtreeNode) { + var s = tree.children.filter(function (child) { return child.value === subtreeNode.value; }); + if (s.length === 0) + return { value: false }; + if (!contains(s[0], subtreeNode)) + return { value: false }; + }; + for (var _i = 0, _a = subtree.children; _i < _a.length; _i++) { + var subtreeNode = _a[_i]; + var state_1 = _loop_1(subtreeNode); + if (typeof state_1 === "object") return state_1.value; + } + return true; +} +var TreeNode = (function () { + function TreeNode(value, children) { + this.value = value; + this.children = children; + } + return TreeNode; +}()); +exports.TreeNode = TreeNode; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy90cmVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTtJQUlFLGNBQVksSUFBaUI7UUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUFDLENBQUM7SUFFckQsc0JBQUksc0JBQUk7YUFBUixjQUFnQixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUUxQyxxQkFBTSxHQUFOLFVBQU8sQ0FBSTtRQUNULElBQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUMvQyxDQUFDO0lBRUQsdUJBQVEsR0FBUixVQUFTLENBQUk7UUFDWCxJQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLEtBQUssRUFBUCxDQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVELHlCQUFVLEdBQVYsVUFBVyxDQUFJO1FBQ2IsSUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ2pFLENB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LEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBQSxLQUFLLElBQUksT0FBQSxLQUFLLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxLQUFLLEVBQWpDLENBQWlDLENBQUMsQ0FBQztRQUMzRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztZQUFDLGdCQUFPLEtBQUssR0FBQztRQUNqQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFBQyxnQkFBTyxLQUFLLEdBQUM7O0lBSGpELEdBQUcsQ0FBQyxDQUFvQixVQUFnQixFQUFoQixLQUFBLE9BQU8sQ0FBQyxRQUFRLEVBQWhCLGNBQWdCLEVBQWhCLElBQWdCLENBQUM7UUFBcEMsSUFBSSxXQUFXLFNBQUE7OztLQUluQjtJQUVELE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7SUFDRSxrQkFBbUIsS0FBUSxFQUFTLFFBQXVCO1FBQXhDLFVBQUssR0FBTCxLQUFLLENBQUc7UUFBUyxhQUFRLEdBQVIsUUFBUSxDQUFlO0lBQUcsQ0FBQztJQUNqRSxlQUFDO0FBQUQsQ0FBQyxBQUZELElBRUM7QUFGWSxnQkFBUSxXQUVwQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFRyZWU8VD4ge1xuICAvKiogQGludGVybmFsICovXG4gIF9yb290OiBUcmVlTm9kZTxUPjtcblxuICBjb25zdHJ1Y3Rvcihyb290OiBUcmVlTm9kZTxUPikgeyB0aGlzLl9yb290ID0gcm9vdDsgfVxuXG4gIGdldCByb290KCk6IFQgeyByZXR1cm4gdGhpcy5fcm9vdC52YWx1ZTsgfVxuXG4gIHBhcmVudCh0OiBUKTogVCB8IG51bGwge1xuICAgIGNvbnN0IHAgPSB0aGlzLnBhdGhGcm9tUm9vdCh0KTtcbiAgICByZXR1cm4gcC5sZW5ndGggPiAxID8gcFtwLmxlbmd0aCAtIDJdIDogbnVsbDtcbiAgfVxuXG4gIGNoaWxkcmVuKHQ6IFQpOiBUW10ge1xuICAgIGNvbnN0IG4gPSBmaW5kTm9kZSh0LCB0aGlzLl9yb290KTtcbiAgICByZXR1cm4gbiA/IG4uY2hpbGRyZW4ubWFwKHQgPT4gdC52YWx1ZSkgOiBbXTtcbiAgfVxuXG4gIGZpcnN0Q2hpbGQodDogVCk6IFQgfCBudWxsIHtcbiAgICBjb25zdCBuID0gZmluZE5vZGUodCwgdGhpcy5fcm9vdCk7XG4gICAgcmV0dXJuIG4gJiYgbi5jaGlsZHJlbi5sZW5ndGggPiAwID8gbi5jaGlsZHJlblswXS52YWx1ZSA6IG51bGw7XG4gIH1cblxuICBzaWJsaW5ncyh0OiBUKTogVFtdIHtcbiAgICBjb25zdCBwID0gZmluZFBhdGgodCwgdGhpcy5fcm9vdCwgW10pO1xuICAgIGlmIChwLmxlbmd0aCA8IDIpIHJldHVybiBbXTtcblxuICAgIGNvbnN0IGMgPSBwW3AubGVuZ3RoIC0gMl0uY2hpbGRyZW4ubWFwKGMgPT4gYy52YWx1ZSk7XG4gICAgcmV0dXJuIGMuZmlsdGVyKGNjID0+IGNjICE9PSB0KTtcbiAgfVxuXG4gIHBhdGhGcm9tUm9vdCh0OiBUKTogVFtdIHsgcmV0dXJuIGZpbmRQYXRoKHQsIHRoaXMuX3Jvb3QsIFtdKS5tYXAocyA9PiBzLnZhbHVlKTsgfVxuXG4gIGNvbnRhaW5zKHRyZWU6IFRyZWU8VD4pOiBib29sZWFuIHsgcmV0dXJuIGNvbnRhaW5zKHRoaXMuX3Jvb3QsIHRyZWUuX3Jvb3QpOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByb290Tm9kZTxUPih0cmVlOiBUcmVlPFQ+KTogVHJlZU5vZGU8VD4ge1xuICByZXR1cm4gdHJlZS5fcm9vdDtcbn1cblxuZnVuY3Rpb24gZmluZE5vZGU8VD4oZXhwZWN0ZWQ6IFQsIGM6IFRyZWVOb2RlPFQ+KTogVHJlZU5vZGU8VD4gfCBudWxsIHtcbiAgaWYgKGV4cGVjdGVkID09PSBjLnZhbHVlKSByZXR1cm4gYztcbiAgZm9yIChsZXQgY2Mgb2YgYy5jaGlsZHJlbikge1xuICAgIGNvbnN0IHIgPSBmaW5kTm9kZShleHBlY3RlZCwgY2MpO1xuICAgIGlmIChyKSByZXR1cm4gcjtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZmluZFBhdGg8VD4oZXhwZWN0ZWQ6IFQsIGM6IFRyZWVOb2RlPFQ+LCBjb2xsZWN0ZWQ6IFRyZWVOb2RlPFQ+W10pOiBUcmVlTm9kZTxUPltdIHtcbiAgY29sbGVjdGVkLnB1c2goYyk7XG4gIGlmIChleHBlY3RlZCA9PT0gYy52YWx1ZSkgcmV0dXJuIGNvbGxlY3RlZDtcblxuICBmb3IgKGxldCBjYyBvZiBjLmNoaWxkcmVuKSB7XG4gICAgY29uc3QgY2xvbmVkID0gY29sbGVjdGVkLnNsaWNlKDApO1xuICAgIGNvbnN0IHIgPSBmaW5kUGF0aChleHBlY3RlZCwgY2MsIGNsb25lZCk7XG4gICAgaWYgKHIpIHJldHVybiByO1xuICB9XG5cbiAgcmV0dXJuIFtdO1xufVxuXG5mdW5jdGlvbiBjb250YWluczxUPih0cmVlOiBUcmVlTm9kZTxUPiwgc3VidHJlZTogVHJlZU5vZGU8VD4pOiBib29sZWFuIHtcbiAgaWYgKHRyZWUudmFsdWUgIT09IHN1YnRyZWUudmFsdWUpIHJldHVybiBmYWxzZTtcblxuICBmb3IgKGxldCBzdWJ0cmVlTm9kZSBvZiBzdWJ0cmVlLmNoaWxkcmVuKSB7XG4gICAgY29uc3QgcyA9IHRyZWUuY2hpbGRyZW4uZmlsdGVyKGNoaWxkID0+IGNoaWxkLnZhbHVlID09PSBzdWJ0cmVlTm9kZS52YWx1ZSk7XG4gICAgaWYgKHMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCFjb250YWlucyhzWzBdLCBzdWJ0cmVlTm9kZSkpIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY2xhc3MgVHJlZU5vZGU8VD4ge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdmFsdWU6IFQsIHB1YmxpYyBjaGlsZHJlbjogVHJlZU5vZGU8VD5bXSkge31cbn0iXX0= \ No newline at end of file diff --git a/modules/@angular/router/package.json b/modules/@angular/router/package.json index 0aa37f13ad..8e5800ddda 100644 --- a/modules/@angular/router/package.json +++ b/modules/@angular/router/package.json @@ -2,8 +2,8 @@ "name": "vladivostok", "version": "0.9.1", "description": "", - "main": "./dist/src/index.js", - "jsnext:main": "./dist/es6/index.js", + "main": "./build/src/index.js", + "jsnext:main": "./build/es6/index.js", "scripts": { "karma": "karma start", "test": "npm run build; karma start", @@ -64,5 +64,5 @@ "typings": "^1.0.4", "zone.js": "^0.6.6" }, - "typings": "dist/router.d.ts" + "typings": "build/src/index.d.ts" }