Socket
Socket
Sign inDemoInstall

@ditojs/router

Package Overview
Dependencies
Maintainers
1
Versions
320
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ditojs/router - npm Package Compare versions

Comparing version 0.40.0 to 0.41.0

90

lib/Node.js

@@ -7,5 +7,4 @@ "use strict";

exports.default = void 0;
const STATIC = 0;
const PARAM = 1;
const MATCH_ANY = 2;
const PARAM = ':';
const MATCH_ANY = '*';

@@ -17,6 +16,5 @@ class Node {

initialize(prefix = '/', type = STATIC, children = [], handler = null, paramNames = null) {
this.label = prefix.charCodeAt(0);
initialize(prefix = '/', children = {}, handler = null, paramNames = null) {
this.label = prefix[0];
this.prefix = prefix;
this.type = type;
this.children = children;

@@ -29,29 +27,9 @@ this.handler = handler;

addChild(child) {
this.children.push(child);
this.children[child.label] = child;
}
findChild(label, type) {
for (const child of this.children) {
if (child.label === label && child.type === type) {
return child;
}
}
findChild(label) {
return this.children[label];
}
findChildWithLabel(label) {
for (const child of this.children) {
if (child.label === label) {
return child;
}
}
}
findChildWithType(type) {
for (const child of this.children) {
if (child.type === type) {
return child;
}
}
}
add(path, handler) {

@@ -63,4 +41,4 @@ const paramNames = [];

if (ch === ':') {
this.insert(path.substring(0, pos), STATIC);
if (ch === PARAM) {
this.insert(path.substring(0, pos));
pos++;

@@ -74,18 +52,18 @@ const start = pos;

if (start === length) {
return this.insert(path, PARAM, paramNames, handler);
return this.insert(path, paramNames, handler);
}
pos = start;
this.insert(path.substring(0, pos), PARAM, paramNames);
} else if (ch === '*') {
this.insert(path.substring(0, pos), STATIC);
paramNames.push('*');
return this.insert(path, MATCH_ANY, paramNames, handler);
this.insert(path.substring(0, pos), paramNames);
} else if (ch === MATCH_ANY) {
this.insert(path.substring(0, pos));
paramNames.push(MATCH_ANY);
return this.insert(path, paramNames, handler);
}
}
this.insert(path, STATIC, paramNames, handler);
this.insert(path, paramNames, handler);
}
insert(path, type, paramNames, handler) {
insert(path, paramNames, handler) {
let current = this;

@@ -100,3 +78,3 @@

while (pos < max && path.charCodeAt(pos) === prefix.charCodeAt(pos)) {
while (pos < max && path[pos] === prefix[pos]) {
pos++;

@@ -106,10 +84,8 @@ }

if (pos < prefix.length) {
const node = new Node(prefix.substring(pos), current.type, current.children, current.handler, current.paramNames);
const node = new Node(prefix.substring(pos), current.children, current.handler, current.paramNames);
current.initialize(prefix.substring(0, pos));
current.addChild(node);
if (pos === path.length) {
current.type = type;
} else {
const node = new Node(path.substring(pos), type);
if (pos < path.length) {
const node = new Node(path.substring(pos));
current.addChild(node);

@@ -120,3 +96,3 @@ current = node;

path = path.substring(pos);
const child = current.findChildWithLabel(path.charCodeAt(0));
const child = current.findChild(path[0]);

@@ -128,3 +104,3 @@ if (child !== undefined) {

const node = new Node(path, type);
const node = new Node(path);
current.addChild(node);

@@ -175,7 +151,7 @@ current = node;

path = path.substring(this.prefix.length);
} else if (this.type !== PARAM) {
} else if (this.label !== PARAM) {
return null;
}
const staticChild = this.findChild(path.charCodeAt(0), STATIC);
const staticChild = this.findChild(path[0]);

@@ -194,3 +170,3 @@ if (staticChild) {

const paramChild = this.findChildWithType(PARAM);
const paramChild = this.findChild(PARAM);

@@ -209,7 +185,7 @@ if (paramChild) {

const anyChild = this.findChildWithType(MATCH_ANY);
const matchAnyChild = this.findChild(MATCH_ANY);
if (anyChild) {
if (matchAnyChild) {
paramValues.push(path);
return anyChild.find('', paramValues);
return matchAnyChild.find('', paramValues);
}

@@ -225,7 +201,5 @@

const lines = [`${format(prefix, tail, '└── ', '├── ')}${this.type === PARAM ? `${this.prefix}${this.paramName}` : this.prefix}${handler ? ` ${handler}` : ''} children=${this.children.length}`];
const children = Object.values(this.children);
const lines = [`${format(prefix, tail, '└── ', '├── ')}${this.label === PARAM ? `${this.prefix}${this.paramName}` : this.prefix}${handler ? ` ${handler}` : ''} children=${children.length}`];
const str = format(prefix, tail, ' ', '│ ');
const {
children
} = this;

@@ -242,2 +216,2 @@ for (let i = 0, l = children.length - 1; i <= l; i++) {

exports.default = Node;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9Ob2RlLmpzIl0sIm5hbWVzIjpbIlNUQVRJQyIsIlBBUkFNIiwiTUFUQ0hfQU5ZIiwiTm9kZSIsImNvbnN0cnVjdG9yIiwiYXJncyIsImluaXRpYWxpemUiLCJwcmVmaXgiLCJ0eXBlIiwiY2hpbGRyZW4iLCJoYW5kbGVyIiwicGFyYW1OYW1lcyIsImxhYmVsIiwiY2hhckNvZGVBdCIsInBhcmFtTmFtZSIsImFkZENoaWxkIiwiY2hpbGQiLCJwdXNoIiwiZmluZENoaWxkIiwiZmluZENoaWxkV2l0aExhYmVsIiwiZmluZENoaWxkV2l0aFR5cGUiLCJhZGQiLCJwYXRoIiwicG9zIiwibGVuZ3RoIiwiY2giLCJpbnNlcnQiLCJzdWJzdHJpbmciLCJzdGFydCIsIm1hdGNoIiwiY3VycmVudCIsIm1heCIsIm5vZGUiLCJ1bmRlZmluZWQiLCJmaW5kIiwicGFyYW1WYWx1ZXMiLCJwYXJhbXMiLCJpIiwibmFtZSIsImZ1bGxNYXRjaCIsInN0YXJ0c1dpdGgiLCJzdGF0aWNDaGlsZCIsInJlc3VsdCIsInBhcmFtQ2hpbGQiLCJwb3AiLCJhbnlDaGlsZCIsInRvU3RyaW5nIiwidGFpbCIsInJvb3QiLCJmb3JtYXQiLCJvbiIsIm9mZiIsImxpbmVzIiwic3RyIiwibCIsImpvaW4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLE1BQU1BLE1BQU0sR0FBRyxDQUFmO0FBQ0EsTUFBTUMsS0FBSyxHQUFHLENBQWQ7QUFDQSxNQUFNQyxTQUFTLEdBQUcsQ0FBbEI7O0FBRWUsTUFBTUMsSUFBTixDQUFXO0FBQ3hCQyxFQUFBQSxXQUFXLENBQUMsR0FBR0MsSUFBSixFQUFVO0FBQ25CLFNBQUtDLFVBQUwsQ0FBZ0IsR0FBR0QsSUFBbkI7QUFDRDs7QUFFREMsRUFBQUEsVUFBVSxDQUNSQyxNQUFNLEdBQUcsR0FERCxFQUVSQyxJQUFJLEdBQUdSLE1BRkMsRUFHUlMsUUFBUSxHQUFHLEVBSEgsRUFJUkMsT0FBTyxHQUFHLElBSkYsRUFLUkMsVUFBVSxHQUFHLElBTEws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RUFBMEJoQixDQUFDLEtBQUtpQixDQUFoQyxFQUFtQyxLQUFuQyxDQUFYO0FBQ0Q7O0FBQ0QsV0FBT0YsS0FBSyxDQUFDRyxJQUFOLENBQVcsSUFBWCxDQUFQO0FBQ0Q7O0FBOU51QiIsInNvdXJjZXNDb250ZW50IjpbIi8vIE5vZGUgVHlwZXM6XG5jb25zdCBTVEFUSUMgPSAwXG5jb25zdCBQQVJBTSA9IDFcbmNvbnN0IE1BVENIX0FOWSA9IDJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9kZSB7XG4gIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICB0aGlzLmluaXRpYWxpemUoLi4uYXJncylcbiAgfVxuXG4gIGluaXRpYWxpemUoXG4gICAgcHJlZml4ID0gJy8nLFxuICAgIHR5cGUgPSBTVEFUSUMsXG4gICAgY2hpbGRyZW4gPSBbXSxcbiAgICBoYW5kbGVyID0gbnVsbCxcbiAgICBwYXJhbU5hbWVzID0gbnVsbFxuICApIHtcbiAgICB0aGlzLmxhYmVsID0gcHJlZml4LmNoYXJDb2RlQXQoMClcbiAgICB0aGlzLnByZWZpeCA9IHByZWZpeFxuICAgIHRoaXMudHlwZSA9IHR5cGVcbiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW5cbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyXG4gICAgdGhpcy5wYXJhbU5hbWVzID0gcGFyYW1OYW1lc1xuICAgIHRoaXMucGFyYW1OYW1lID0gbnVsbFxuICB9XG5cbiAgYWRkQ2hpbGQoY2hpbGQpIHtcbiAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpXG4gIH1cblxuICBmaW5kQ2hpbGQobGFiZWwsIHR5cGUpIHtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuY2hpbGRyZW4pIHtcbiAgICAgIGlmIChjaGlsZC5sYWJlbCA9PT0gbGFiZWwgJiYgY2hpbGQudHlwZSA9PT0gdHlwZSkge1xuICAgICAgICByZXR1cm4gY2hpbGRcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaW5kQ2hpbGRXaXRoTGFiZWwobGFiZWwpIHtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuY2hpbGRyZW4pIHtcbiAgICAgIGlmIChjaGlsZC5sYWJlbCA9PT0gbGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZmluZENoaWxkV2l0aFR5cGUodHlwZSkge1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5jaGlsZHJlbikge1xuICAgICAgaWYgKGNoaWxkLnR5cGUgPT09IHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWRkKHBhdGgsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBwYXJhbU5hbWVzID0gW11cbiAgICBmb3IgKGxldCBwb3MgPSAwLCBsZW5ndGggPSBwYXRoLmxlbmd0aDsgcG9zIDwgbGVuZ3RoOyBwb3MrKykge1xuICAgICAgY29uc3QgY2ggPSBwYXRoW3Bvc11cbiAgICAgIGlmIChjaCA9PT0gJzonKSB7XG4gICAgICAgIHRoaXMuaW5zZXJ0KHBhdGguc3Vic3RyaW5nKDAsIHBvcyksIFNUQVRJQylcbiAgICAgICAgcG9zKysgLy8gU2tpcCBjb2xvbi5cbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwb3NcbiAgICAgICAgLy8gTW92ZSBwb3MgdG8gdGhlIG5leHQgb2NjdXJyZW5jZSBvZiB0aGUgc2xhc2ggb3IgdGhlIGVuZDpcbiAgICAgICAgcG9zICs9IHBhdGguc3Vic3RyaW5nKHBvcykubWF0Y2goL14oW14vXSopLylbMV0ubGVuZ3RoXG5cbiAgICAgICAgcGFyYW1OYW1lcy5wdXNoKHBhdGguc3Vic3RyaW5nKHN0YXJ0LCBwb3MpKVxuICAgICAgICAvLyBDaG9wIG91dCBwYXJhbSBuYW1lIGZyb20gcGF0aCwgYnV0IGtlZXAgY29sb24uXG4gICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZygwLCBzdGFydCkgKyBwYXRoLnN1YnN0cmluZyhwb3MpXG4gICAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoIC8vIFVwZGF0ZSBsZW5ndGggYWZ0ZXIgY2hhbmdpbmcgcGF0aC5cblxuICAgICAgICBpZiAoc3RhcnQgPT09IGxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmluc2VydChwYXRoLCBQQVJBTSwgcGFyYW1OYW1lcywgaGFuZGxlcilcbiAgICAgICAgfVxuICAgICAgICBwb3MgPSBzdGFydFxuICAgICAgICB0aGlzLmluc2VydChwYXRoLnN1YnN0cmluZygwLCBwb3MpLCBQQVJBTSwgcGFyYW1OYW1lcylcbiAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICcqJykge1xuICAgICAgICB0aGlzLmluc2VydChwYXRoLnN1YnN0cmluZygwLCBwb3MpLCBTVEFUSUMpXG4gICAgICAgIHBhcmFtTmFtZXMucHVzaCgnKicpXG4gICAgICAgIHJldHVybiB0aGlzLmluc2VydChwYXRoLCBNQVRDSF9BTlksIHBhcmFtTmFtZXMsIGhhbmRsZXIpXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuaW5zZXJ0KHBhdGgsIFNUQVRJQywgcGFyYW1OYW1lcywgaGFuZGxlcilcbiAgfVxuXG4gIGluc2VydChwYXRoLCB0eXBlLCBwYXJhbU5hbWVzLCBoYW5kbGVyKSB7XG4gICAgbGV0IGN1cnJlbnQgPSB0aGlzXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIC8vIEZpbmQgdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBwYXRoIGFuZCB0aGUgbm9kZSdzIHByZWZpeCBzdGFydCBkaXZlcmdpbmcuXG4gICAgICBjb25zdCB7IHByZWZpeCB9ID0gY3VycmVudFxuICAgICAgbGV0IHBvcyA9IDBcbiAgICAgIGNvbnN0IG1heCA9IHBhdGgubGVuZ3RoIDwgcHJlZml4Lmxlbmd0aCA/IHBhdGgubGVuZ3RoIDogcHJlZml4Lmxlbmd0aFxuICAgICAgd2hpbGUgKHBvcyA8IG1heCAmJiBwYXRoLmNoYXJDb2RlQXQocG9zKSA9PT0gcHJlZml4LmNoYXJDb2RlQXQocG9zKSkge1xuICAgICAgICBwb3MrK1xuICAgICAgfVxuICAgICAgaWYgKHBvcyA8IHByZWZpeC5sZW5ndGgpIHtcbiAgICAgICAgLy8gU3BsaXQgbm9kZVxuICAgICAgICBjb25zdCBub2RlID0gbmV3IE5vZGUoXG4gICAgICAgICAgcHJlZml4LnN1YnN0cmluZyhwb3MpLFxuICAgICAgICAgIGN1cnJlbnQudHlwZSxcbiAgICAgICAgICBjdXJyZW50LmNoaWxkcmVuLFxuICAgICAgICAgIGN1cnJlbnQuaGFuZGxlcixcbiAgICAgICAgICBjdXJyZW50LnBhcmFtTmFtZXNcbiAgICAgICAgKVxuICAgICAgICAvLyBSZXNldCBwYXJlbnQgbm9kZSBhbmQgYWRkIG5ldyBub2RlIGFzIGNoaWxkIHRvIGl0OlxuICAgICAgICBjdXJyZW50LmluaXRpYWxpemUocHJlZml4LnN1YnN0cmluZygwLCBwb3MpKVxuICAgICAgICBjdXJyZW50LmFkZENoaWxkKG5vZGUpXG4gICAgICAgIGlmIChwb3MgPT09IHBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gQXQgcGFyZW50IG5vZGVcbiAgICAgICAgICBjdXJyZW50LnR5cGUgPSB0eXBlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQ3JlYXRlIGNoaWxkIG5vZGVcbiAgICAgICAgICBjb25zdCBub2RlID0gbmV3IE5vZGUocGF0aC5zdWJzdHJpbmcocG9zKSwgdHlwZSlcbiAgICAgICAgICBjdXJyZW50LmFkZENoaWxkKG5vZGUpXG4gICAgICAgICAgY3VycmVudCA9IG5vZGUgLy8gU3dpdGNoIHRvIGNoaWxkIHRvIHNldCBoYW5kbGVyXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocG9zIDwgcGF0aC5sZW5ndGgpIHtcbiAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKHBvcylcbiAgICAgICAgY29uc3QgY2hpbGQgPSBjdXJyZW50LmZpbmRDaGlsZFdpdGhMYWJlbChwYXRoLmNoYXJDb2RlQXQoMCkpXG4gICAgICAgIGlmIChjaGlsZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gR28gZGVlcGVyXG4gICAgICAgICAgY3VycmVudCA9IGNoaWxkXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICAvLyBDcmVhdGUgY2hpbGQgbm9kZVxuICAgICAgICBjb25zdCBub2RlID0gbmV3IE5vZGUocGF0aCwgdHlwZSlcbiAgICAgICAgY3VycmVudC5hZGRDaGlsZChub2RlKVxuICAgICAgICBjdXJyZW50ID0gbm9kZSAvLyBTd2l0Y2ggdG8gY2hpbGQgdG8gc2V0IGhhbmRsZXJcbiAgICAgIH1cbiAgICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICAgIGN1cnJlbnQuaGFuZGxlciA9IGhhbmRsZXJcbiAgICAgICAgY3VycmVudC5wYXJhbU5hbWVzID0gcGFyYW1OYW1lc1xuICAgICAgfVxuICAgICAgaWYgKHBhcmFtTmFtZXMpIHtcbiAgICAgICAgLy8gUmVtZW1iZXIgdGhlIGxhc3QgZW50cnkgZnJvbSB0aGUgbGlzdCBvZiBwYXJhbSBuYW1lcyB0aGF0IGtlZXBzXG4gICAgICAgIC8vIGdyb3dpbmcgZHVyaW5nIHBhcnNpbmcgYXMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgbm9kZS5cbiAgICAgICAgY3VycmVudC5wYXJhbU5hbWUgPSBwYXJhbU5hbWVzW3BhcmFtTmFtZXMubGVuZ3RoIC0gMV1cbiAgICAgIH1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgZmluZChwYXRoLCBwYXJhbVZhbHVlcyA9IFtdKSB7XG4gICAgaWYgKCFwYXRoIHx8IHBhdGggPT09IHRoaXMucHJlZml4KSB7XG4gICAgICAvLyBJdCdzIGEgbWF0Y2ghXG4gICAgICBjb25zdCB7IGhhbmRsZXIsIHBhcmFtTmFtZXMgfSA9IHRoaXNcbiAgICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICAgIC8vIENvbnZlcnQgcGFyYW1OYW1lcyBhbmQgdmFsdWVzIHRvIHBhcmFtc1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7fVxuICAgICAgICBsZXQgaSA9IDBcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIHBhcmFtTmFtZXMpIHtcbiAgICAgICAgICBwYXJhbXNbbmFtZV0gPSBwYXJhbVZhbHVlc1tpKytdXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgaGFuZGxlciwgcGFyYW1zIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgY29uc3QgZnVsbE1hdGNoID0gcGF0aC5zdGFydHNXaXRoKHRoaXMucHJlZml4KVxuICAgIGlmIChmdWxsTWF0Y2gpIHtcbiAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZyh0aGlzLnByZWZpeC5sZW5ndGgpXG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgIT09IFBBUkFNKSB7XG4gICAgICAvLyBJZiB0aGUgcGF0aCBkb2Vzbid0IGZ1bGx5IG1hdGNoIHRoZSBwcmVmaXgsIHdlIG9ubHkgbmVlZCB0byBsb29rXG4gICAgICAvLyBmdXJ0aGVyIG9uIHBhcmFtIG5vZGVzLCB3aGljaCBjYW4gaGF2ZSBvdmVybGFwcGluZyBzdGF0aWMgY2hpbGRyZW4uXG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIC8vIFNlYXJjaCBvcmRlcjogU3RhdGljID4gUGFyYW0gPiBNYXRjaC1hbnlcblxuICAgIC8vIFN0YXRpYyBub2RlXG4gICAgY29uc3Qgc3RhdGljQ2hpbGQgPSB0aGlzLmZpbmRDaGlsZChwYXRoLmNoYXJDb2RlQXQoMCksIFNUQVRJQylcbiAgICBpZiAoc3RhdGljQ2hpbGQpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0YXRpY0NoaWxkLmZpbmQocGF0aCwgcGFyYW1WYWx1ZXMpXG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBOb2RlIG5vdCBmb3VuZFxuICAgIGlmICghZnVsbE1hdGNoKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIC8vIFBhcmFtIG5vZGVcbiAgICBjb25zdCBwYXJhbUNoaWxkID0gdGhpcy5maW5kQ2hpbGRXaXRoVHlwZShQQVJBTSlcbiAgICBpZiAocGFyYW1DaGlsZCkge1xuICAgICAgLy8gRmluZCB0aGUgcG9zaXRpb24gb2YgdGhlIG5leHQgc2xhc2g6XG4gICAgICBjb25zdCBwb3MgPSBwYXRoLm1hdGNoKC9eKFteL10qKS8pWzFdLmxlbmd0aFxuICAgICAgcGFyYW1WYWx1ZXMucHVzaChwYXRoLnN1YnN0cmluZygwLCBwb3MpKVxuICAgICAgY29uc3QgcmVzdWx0ID0gcGFyYW1DaGlsZC5maW5kKHBhdGguc3Vic3RyaW5nKHBvcyksIHBhcmFtVmFsdWVzKVxuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICB9XG4gICAgICBwYXJhbVZhbHVlcy5wb3AoKVxuICAgIH1cblxuICAgIC8vIE1hdGNoLWFueSBub2RlXG4gICAgY29uc3QgYW55Q2hpbGQgPSB0aGlzLmZpbmRDaGlsZFdpdGhUeXBlKE1BVENIX0FOWSlcbiAgICBpZiAoYW55Q2hpbGQpIHtcbiAgICAgIHBhcmFtVmFsdWVzLnB1c2gocGF0aClcbiAgICAgIHJldHVybiBhbnlDaGlsZC5maW5kKCcnLCBwYXJhbVZhbHVlcykgLy8gJycgPT0gRW5kXG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHRvU3RyaW5nKHByZWZpeCA9ICcnLCB0YWlsID0gdHJ1ZSwgcm9vdCA9IHRydWUpIHtcbiAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5oYW5kbGVyICYmIGAke3RoaXMuaGFuZGxlci5uYW1lIHx8ICfGkid9KClgXG4gICAgY29uc3QgZm9ybWF0ID0gKHByZWZpeCwgdGFpbCwgb24sIG9mZikgPT5cbiAgICAgIHJvb3QgPyAnJyA6IGAke3ByZWZpeH0ke3RhaWwgPyBvbiA6IG9mZn1gXG4gICAgY29uc3QgbGluZXMgPSBbXG4gICAgICBgJHtmb3JtYXQocHJlZml4LCB0YWlsLCAn4pSU4pSA4pSAICcsICfilJzilIDilIAgJyl9JHtcbiAgICAgICAgdGhpcy50eXBlID09PSBQQVJBTVxuICAgICAgICAgID8gYCR7dGhpcy5wcmVmaXh9JHt0aGlzLnBhcmFtTmFtZX1gXG4gICAgICAgICAgOiB0aGlzLnByZWZpeFxuICAgICAgfSR7XG4gICAgICAgIGhhbmRsZXIgPyBgICR7aGFuZGxlcn1gIDogJydcbiAgICAgIH0gY2hpbGRyZW49JHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5sZW5ndGhcbiAgICAgIH1gXG4gICAgXVxuXG4gICAgY29uc3Qgc3RyID0gZm9ybWF0KHByZWZpeCwgdGFpbCwgJyAgICAnLCAn4pSCICAgJylcbiAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSB0aGlzXG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGggLSAxOyBpIDw9IGw7IGkrKykge1xuICAgICAgbGluZXMucHVzaChjaGlsZHJlbltpXS50b1N0cmluZyhzdHIsIGkgPT09IGwsIGZhbHNlKSlcbiAgICB9XG4gICAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpXG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9Ob2RlLmpzIl0sIm5hbWVzIjpbIlBBUkFNIiwiTUFUQ0hfQU5ZIiwiTm9kZSIsImNvbnN0cnVjdG9yIiwiYXJncyIsImluaXRpYWxpemUiLCJwcmVmaXgiLCJjaGlsZHJlbiIsImhhbmRsZXIiLCJwYXJhbU5hbWVzIiwibGFiZWwiLCJwYXJhbU5hbWUiLCJhZGRDaGlsZCIsImNoaWxkIiwiZmluZENoaWxkIiwiYWRkIiwicGF0aCIsInBvcyIsImxlbmd0aCIsImNoIiwiaW5zZXJ0Iiwic3Vic3RyaW5nIiwic3RhcnQiLCJtYXRjaCIsInB1c2giLCJjdXJyZW50IiwibWF4Iiwibm9kZSIsInVuZGVmaW5lZCIsImZpbmQiLCJwYXJhbVZhbHVlcyIsInBhcmFtcyIsImkiLCJuYW1lIiwiZnVsbE1hdGNoIiwic3RhcnRzV2l0aCIsInN0YXRpY0NoaWxkIiwicmVzdWx0IiwicGFyYW1DaGlsZCIsInBvcCIsIm1hdGNoQW55Q2hpbGQiLCJ0b1N0cmluZyIsInRhaWwiLCJyb290IiwiZm9ybWF0Iiwib24iLCJvZmYiLCJPYmplY3QiLCJ2YWx1ZXMiLCJsaW5lcyIsInN0ciIsImwiLCJqb2luIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxNQUFNQSxLQUFLLEdBQUcsR0FBZDtBQUNBLE1BQU1DLFNBQVMsR0FBRyxHQUFsQjs7QUFFZSxNQUFNQyxJQUFOLENBQVc7QUFDeEJDLEVBQUFBLFdBQVcsQ0FBQyxHQUFHQyxJQUFKLEVBQVU7QUFDbkIsU0FBS0MsVUFBTCxDQUFnQixHQUFHRCxJQUFuQjtBQUNEOztBQUVEQyxFQUFBQSxVQUFVLENBQ1JDLE1BQU0sR0FBRyxHQURELEVBRVJDLFFBQVEsR0FBRyxFQUZILEVBR1JDLE9BQU8sR0FBRyxJQUhGLEVBSVJDLFVBQVUsR0FBRyxJQUpMLEVBS1I7QUFDQSxTQUFLQyxLQUFMLEdBQWFKLE1BQU0sQ0FBQyxDQUFELENBQW5CO0FBQ0EsU0FBS0EsTUFBTCxHQUFjQSxNQUFkO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQkEsUUFBaEI7QUFDQSxTQUFLQyxPQUFMLEdBQWVBLE9BQWY7QUFDQSxTQUFLQyxVQUFMLEdBQWtCQSxVQUFsQjtBQUNBLFNBQUtFLFNBQUwsR0FBaUIsSUFBakI7QUFDRDs7QUFFREMsRUFBQUEsUUFBUSxDQUFDQyxLQUFELEVBQVE7QUFFZCxTQUFLTixRQUFMLENBQWNNLEtBQUssQ0FBQ0gsS0FBcEIsSUFBNkJHLEtBQTdCO0FBQ0Q7O0FBRURDLEVBQUFBLFNBQVMsQ0FBQ0osS0FBRCxFQUFRO0FBQ2YsV0FBTyxLQUFLSCxRQUFMLENBQWNHLEtBQWQsQ0FBUDtBQUNEOztBQUVESyxFQUFBQSxHQUFHLENBQUNDLElBQUQsRUFBT1IsT0FBUCxFQUFnQjtBQUNqQixVQUFNQyxVQUFVLEdBQUcsRUFBbkI7O0FBQ0EsU0FBSyxJQUFJUSxHQUFHLEdBQUcsQ0FBVixFQUFhQyxNQUFNLEdBQUdGLElBQUksQ0FBQ0UsTUFBaEMsRUFBd0NELEdBQUcsR0FBR0MsTUFBOUMsRUFBc0RELEdBQUcsRUFBekQsRUFBNkQ7QUFDM0QsWUFBTUUsRUFBRSxHQUFHSCxJQUFJLENBQUNDLEdBQUQsQ0FBZjs7QUFDQSxVQUFJRSxFQUFFLEtBQUtuQixLQUFYLEVBQWtCO0FBQ2hCLGFBQUtvQixNQUFMLENBQVlKLElBQUksQ0FBQ0ssU0FBTCxDQUFlLENBQWYsRUFBa0JKLEdBQWxCLENBQVo7QUFDQUEsUUFBQUEsR0FBRztBQUNILGNBQU1LLEtBQUssR0FBR0wsR0FBZDtBQUVBQSxRQUFBQSxHQUFHLElBQUlELElBQUksQ0FBQ0ssU0FBTCxDQUFlSixHQUFmLEVBQW9CTSxLQUFwQixDQUEwQixVQUExQixFQUFzQyxDQUF0QyxFQUF5Q0wsTUFBaEQ7QUFFQVQsUUFBQUEsVUFBVSxDQUFDZSxJQUFYLENBQWdCUixJQUFJLENBQUNLLFNBQUwsQ0FBZUMsS0FBZixFQUFzQkwsR0FBdEIsQ0FBaEI7QUFFQUQsUUFBQUEsSUFBSSxHQUFHQSxJQUFJLENBQUNLLFNBQUwsQ0FBZSxDQUFmLEVBQWtCQyxLQUFsQixJQUEyQk4sSUFBSSxDQUFDSyxTQUFMLENBQWVKLEdBQWYsQ0FBbEM7QUFDQUMsUUFBQUEsTUFBTSxHQUFHRixJQUFJLENBQUNFLE1BQWQ7O0FBRUEsWUFBSUksS0FBSyxLQUFLSixNQUFkLEVBQXNCO0FBQ3BCLGlCQUFPLEtBQUtFLE1BQUwsQ0FBWUosSUFBWixFQUFrQlAsVUFBbEIsRUFBOEJELE9BQTlCLENBQVA7QUFDRDs7QUFDRFMsUUFBQUEsR0FBRyxHQUFHSyxLQUFOO0FBRUEsYUFBS0YsTUFBTCxDQUFZSixJQUFJLENBQUNLLFNBQUwsQ0FBZSxDQUFmLEVBQWtCSixHQUFsQixDQUFaLEVBQW9DUixVQUFwQztBQUNELE9BbEJELE1Ba0JPLElBQUlVLEVBQUUsS0FBS2xCLFNBQVgsRUFBc0I7QUFDM0IsYUFBS21CLE1BQUwsQ0FBWUosSUFBSSxDQUFDSyxTQUFMLENBQWUsQ0FBZixFQUFrQkosR0FBbEIsQ0FBWjtBQUNBUixRQUFBQSxVQUFVLENBQUNlLElBQVgsQ0FBZ0J2QixTQUFoQjtBQUNBLGVBQU8sS0FBS21CLE1BQUwsQ0FBWUosSUFBWixFQUFrQlAsVUFBbEIsRUFBOEJELE9BQTlCLENBQVA7QUFDRDtBQUNGOztBQUNELFNBQUtZLE1BQUwsQ0FBWUosSUFBWixFQUFrQlAsVUFBbEIsRUFBOEJELE9BQTlCO0FBQ0Q7O0FBRURZLEVBQUFBLE1BQU0sQ0FBQ0osSUFBRCxFQUFPUCxVQUFQLEVBQW1CRCxPQUFuQixFQUE0QjtBQUNoQyxRQUFJaUIsT0FBTyxHQUFHLElBQWQ7O0FBQ0EsV0FBTyxJQUFQLEVBQWE7QUFFWCxZQUFNO0FBQUVuQixRQUFBQTtBQUFGLFVBQWFtQixPQUFuQjtBQUNBLFVBQUlSLEdBQUcsR0FBRyxDQUFWO0FBQ0EsWUFBTVMsR0FBRyxHQUFHVixJQUFJLENBQUNFLE1BQUwsR0FBY1osTUFBTSxDQUFDWSxNQUFyQixHQUE4QkYsSUFBSSxDQUFDRSxNQUFuQyxHQUE0Q1osTUFBTSxDQUFDWSxNQUEvRDs7QUFDQSxhQUFPRCxHQUFHLEdBQUdTLEdBQU4sSUFBYVYsSUFBSSxDQUFDQyxHQUFELENBQUosS0FBY1gsTUFBTSxDQUFDVyxHQUFELENBQXhDLEVBQStDO0FBQzdDQSxRQUFBQSxHQUFHO0FBQ0o7O0FBQ0QsVUFBSUEsR0FBRyxHQUFHWCxNQUFNLENBQUNZLE1BQWpCLEVBQXlCO0FBRXZCLGNBQU1TLElBQUksR0FBRyxJQUFJekIsSUFBSixDQUNYSSxNQUFNLENBQUNlLFNBQVAsQ0FBaUJKLEdBQWpCLENBRFcsRUFFWFEsT0FBTyxDQUFDbEIsUUFGRyxFQUdYa0IsT0FBTyxDQUFDakIsT0FIRyxFQUlYaUIsT0FBTyxDQUFDaEIsVUFKRyxDQUFiO0FBT0FnQixRQUFBQSxPQUFPLENBQUNwQixVQUFSLENBQW1CQyxNQUFNLENBQUNlLFNBQVAsQ0FBaUIsQ0FBakIsRUFBb0JKLEdBQXBCLENBQW5CO0FBQ0FRLFFBQUFBLE9BQU8sQ0FBQ2IsUUFBUixDQUFpQmUsSUFBakI7O0FBQ0EsWUFBSVYsR0FBRyxHQUFHRCxJQUFJLENBQUNFLE1BQWYsRUFBdUI7QUFFckIsZ0JBQU1TLElBQUksR0FBRyxJQUFJekIsSUFBSixDQUFTYyxJQUFJLENBQUNLLFNBQUwsQ0FBZUosR0FBZixDQUFULENBQWI7QUFDQVEsVUFBQUEsT0FBTyxDQUFDYixRQUFSLENBQWlCZSxJQUFqQjtBQUNBRixVQUFBQSxPQUFPLEdBQUdFLElBQVY7QUFDRDtBQUNGLE9BakJELE1BaUJPLElBQUlWLEdBQUcsR0FBR0QsSUFBSSxDQUFDRSxNQUFmLEVBQXVCO0FBQzVCRixRQUFBQSxJQUFJLEdBQUdBLElBQUksQ0FBQ0ssU0FBTCxDQUFlSixHQUFmLENBQVA7QUFDQSxjQUFNSixLQUFLLEdBQUdZLE9BQU8sQ0FBQ1gsU0FBUixDQUFrQkUsSUFBSSxDQUFDLENBQUQsQ0FBdEIsQ0FBZDs7QUFDQSxZQUFJSCxLQUFLLEtBQUtlLFNBQWQsRUFBeUI7QUFFdkJILFVBQUFBLE9BQU8sR0FBR1osS0FBVjtBQUNBO0FBQ0Q7O0FBRUQsY0FBTWMsSUFBSSxHQUFHLElBQUl6QixJQUFKLENBQVNjLElBQVQsQ0FBYjtBQUNBUyxRQUFBQSxPQUFPLENBQUNiLFFBQVIsQ0FBaUJlLElBQWpCO0FBQ0FGLFFBQUFBLE9BQU8sR0FBR0UsSUFBVjtBQUNEOztBQUNELFVBQUluQixPQUFKLEVBQWE7QUFDWGlCLFFBQUFBLE9BQU8sQ0FBQ2pCLE9BQVIsR0FBa0JBLE9BQWxCO0FBQ0FpQixRQUFBQSxPQUFPLENBQUNoQixVQUFSLEdBQXFCQSxVQUFyQjtBQUNEOztBQUNELFVBQUlBLFVBQUosRUFBZ0I7QUFHZGdCLFFBQUFBLE9BQU8sQ0FBQ2QsU0FBUixHQUFvQkYsVUFBVSxDQUFDQSxVQUFVLENBQUNTLE1BQVgsR0FBb0IsQ0FBckIsQ0FBOUI7QUFDRDs7QUFDRDtBQUNEO0FBQ0Y7O0FBRURXLEVBQUFBLElBQUksQ0FBQ2IsSUFBRCxFQUFPYyxXQUFXLEdBQUcsRUFBckIsRUFBeUI7QUFDM0IsUUFBSSxDQUFDZCxJQUFELElBQVNBLElBQUksS0FBSyxLQUFLVixNQUEzQixFQUFtQztBQUVqQyxZQUFNO0FBQUVFLFFBQUFBLE9BQUY7QUFBV0MsUUFBQUE7QUFBWCxVQUEwQixJQUFoQzs7QUFDQSxVQUFJRCxPQUFKLEVBQWE7QUFFWCxjQUFNdUIsTUFBTSxHQUFHLEVBQWY7QUFDQSxZQUFJQyxDQUFDLEdBQUcsQ0FBUjs7QUFDQSxhQUFLLE1BQU1DLElBQVgsSUFBbUJ4QixVQUFuQixFQUErQjtBQUM3QnNCLFVBQUFBLE1BQU0sQ0FBQ0UsSUFBRCxDQUFOLEdBQWVILFdBQVcsQ0FBQ0UsQ0FBQyxFQUFGLENBQTFCO0FBQ0Q7O0FBQ0QsZUFBTztBQUFFeEIsVUFBQUEsT0FBRjtBQUFXdUIsVUFBQUE7QUFBWCxTQUFQO0FBQ0Q7O0FBQ0QsYUFBTyxJQUFQO0FBQ0Q7O0FBRUQsVUFBTUcsU0FBUyxHQUFHbEIsSUFBSSxDQUFDbUIsVUFBTCxDQUFnQixLQUFLN0IsTUFBckIsQ0FBbEI7O0FBQ0EsUUFBSTRCLFNBQUosRUFBZTtBQUNibEIsTUFBQUEsSUFBSSxHQUFHQSxJQUFJLENBQUNLLFNBQUwsQ0FBZSxLQUFLZixNQUFMLENBQVlZLE1BQTNCLENBQVA7QUFDRCxLQUZELE1BRU8sSUFBSSxLQUFLUixLQUFMLEtBQWVWLEtBQW5CLEVBQTBCO0FBRy9CLGFBQU8sSUFBUDtBQUNEOztBQUtELFVBQU1vQyxXQUFXLEdBQUcsS0FBS3RCLFNBQUwsQ0FBZUUsSUFBSSxDQUFDLENBQUQsQ0FBbkIsQ0FBcEI7O0FBQ0EsUUFBSW9CLFdBQUosRUFBaUI7QUFDZixZQUFNQyxNQUFNLEdBQUdELFdBQVcsQ0FBQ1AsSUFBWixDQUFpQmIsSUFBakIsRUFBdUJjLFdBQXZCLENBQWY7O0FBQ0EsVUFBSU8sTUFBSixFQUFZO0FBQ1YsZUFBT0EsTUFBUDtBQUNEO0FBQ0Y7O0FBR0QsUUFBSSxDQUFDSCxTQUFMLEVBQWdCO0FBQ2QsYUFBTyxJQUFQO0FBQ0Q7O0FBR0QsVUFBTUksVUFBVSxHQUFHLEtBQUt4QixTQUFMLENBQWVkLEtBQWYsQ0FBbkI7O0FBQ0EsUUFBSXNDLFVBQUosRUFBZ0I7QUFFZCxZQUFNckIsR0FBRyxHQUFHRCxJQUFJLENBQUNPLEtBQUwsQ0FBVyxVQUFYLEVBQXVCLENBQXZCLEVBQTBCTCxNQUF0QztBQUNBWSxNQUFBQSxXQUFXLENBQUNOLElBQVosQ0FBaUJSLElBQUksQ0FBQ0ssU0FBTCxDQUFlLENBQWYsRUFBa0JKLEdBQWxCLENBQWpCO0FBQ0EsWUFBTW9CLE1BQU0sR0FBR0MsVUFBVSxDQUFDVCxJQUFYLENBQWdCYixJQUFJLENBQUNLLFNBQUwsQ0FBZUosR0FBZixDQUFoQixFQUFxQ2EsV0FBckMsQ0FBZjs7QUFDQSxVQUFJTyxNQUFKLEVBQVk7QUFDVixlQUFPQSxNQUFQO0FBQ0Q7O0FBQ0RQLE1BQUFBLFdBQVcsQ0FBQ1MsR0FBWjtBQUNEOztBQUdELFVBQU1DLGFBQWEsR0FBRyxLQUFLMUIsU0FBTCxDQUFlYixTQUFmLENBQXRCOztBQUNBLFFBQUl1QyxhQUFKLEVBQW1CO0FBQ2pCVixNQUFBQSxXQUFXLENBQUNOLElBQVosQ0FBaUJSLElBQWpCO0FBQ0EsYUFBT3dCLGFBQWEsQ0FBQ1gsSUFBZCxDQUFtQixFQUFuQixFQUF1QkMsV0FBdkIsQ0FBUDtBQUNEOztBQUVELFdBQU8sSUFBUDtBQUNEOztBQUVEVyxFQUFBQSxRQUFRLENBQUNuQyxNQUFNLEdBQUcsRUFBVixFQUFjb0MsSUFBSSxHQUFHLElBQXJCLEVBQTJCQyxJQUFJLEdBQUcsSUFBbEMsRUFBd0M7QUFDOUMsVUFBTW5DLE9BQU8sR0FBRyxLQUFLQSxPQUFMLElBQWlCLEdBQUUsS0FBS0EsT0FBTCxDQUFheUIsSUFBYixJQUFxQixHQUFJLElBQTVEOztBQUNBLFVBQU1XLE1BQU0sR0FBRyxDQUFDdEMsTUFBRCxFQUFTb0MsSUFBVCxFQUFlRyxFQUFmLEVBQW1CQyxHQUFuQixLQUNiSCxJQUFJLEdBQUcsRUFBSCxHQUFTLEdBQUVyQyxNQUFPLEdBQUVvQyxJQUFJLEdBQUdHLEVBQUgsR0FBUUMsR0FBSSxFQUQxQzs7QUFFQSxVQUFNdkMsUUFBUSxHQUFHd0MsTUFBTSxDQUFDQyxNQUFQLENBQWMsS0FBS3pDLFFBQW5CLENBQWpCO0FBQ0EsVUFBTTBDLEtBQUssR0FBRyxDQUNYLEdBQUVMLE1BQU0sQ0FBQ3RDLE1BQUQsRUFBU29DLElBQVQsRUFBZSxNQUFmLEVBQXVCLE1BQXZCLENBQStCLEdBQ3RDLEtBQUtoQyxLQUFMLEtBQWVWLEtBQWYsR0FDSyxHQUFFLEtBQUtNLE1BQU8sR0FBRSxLQUFLSyxTQUFVLEVBRHBDLEdBRUksS0FBS0wsTUFDVixHQUNDRSxPQUFPLEdBQUksSUFBR0EsT0FBUSxFQUFmLEdBQW1CLEVBQzNCLGFBQ0NELFFBQVEsQ0FBQ1csTUFDVixFQVRXLENBQWQ7QUFZQSxVQUFNZ0MsR0FBRyxHQUFHTixNQUFNLENBQUN0QyxNQUFELEVBQVNvQyxJQUFULEVBQWUsTUFBZixFQUF1QixNQUF2QixDQUFsQjs7QUFFQSxTQUFLLElBQUlWLENBQUMsR0FBRyxDQUFSLEVBQVdtQixDQUFDLEdBQUc1QyxRQUFRLENBQUNXLE1BQVQsR0FBa0IsQ0FBdEMsRUFBeUNjLENBQUMsSUFBSW1CLENBQTlDLEVBQWlEbkIsQ0FBQyxFQUFsRCxFQUFzRDtBQUNwRGlCLE1BQUFBLEtBQUssQ0FBQ3pCLElBQU4sQ0FBV2pCLFFBQVEsQ0FBQ3lCLENBQUQsQ0FBUixDQUFZUyxRQUFaLENBQXFCUyxHQUFyQixFQUEwQmxCLENBQUMsS0FBS21CLENBQWhDLEVBQW1DLEtBQW5DLENBQVg7QUFDRDs7QUFDRCxXQUFPRixLQUFLLENBQUNHLElBQU4sQ0FBVyxJQUFYLENBQVA7QUFDRDs7QUF2TXVCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU3BlY2lhbCBMYWJlbHM6XG5jb25zdCBQQVJBTSA9ICc6J1xuY29uc3QgTUFUQ0hfQU5ZID0gJyonXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vZGUge1xuICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgdGhpcy5pbml0aWFsaXplKC4uLmFyZ3MpXG4gIH1cblxuICBpbml0aWFsaXplKFxuICAgIHByZWZpeCA9ICcvJyxcbiAgICBjaGlsZHJlbiA9IHt9LFxuICAgIGhhbmRsZXIgPSBudWxsLFxuICAgIHBhcmFtTmFtZXMgPSBudWxsXG4gICkge1xuICAgIHRoaXMubGFiZWwgPSBwcmVmaXhbMF1cbiAgICB0aGlzLnByZWZpeCA9IHByZWZpeFxuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlblxuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXJcbiAgICB0aGlzLnBhcmFtTmFtZXMgPSBwYXJhbU5hbWVzXG4gICAgdGhpcy5wYXJhbU5hbWUgPSBudWxsXG4gIH1cblxuICBhZGRDaGlsZChjaGlsZCkge1xuICAgIC8vIE5vIHR3byBjaGlsZHJlbiBjYW4gaGF2ZSB0aGUgc2FtZSBsYWJlbCBpbiBhIHByZWZpeC10cmVlIHNvIHRoaXMgaXMgZmluZTpcbiAgICB0aGlzLmNoaWxkcmVuW2NoaWxkLmxhYmVsXSA9IGNoaWxkXG4gIH1cblxuICBmaW5kQ2hpbGQobGFiZWwpIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZHJlbltsYWJlbF1cbiAgfVxuXG4gIGFkZChwYXRoLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgcGFyYW1OYW1lcyA9IFtdXG4gICAgZm9yIChsZXQgcG9zID0gMCwgbGVuZ3RoID0gcGF0aC5sZW5ndGg7IHBvcyA8IGxlbmd0aDsgcG9zKyspIHtcbiAgICAgIGNvbnN0IGNoID0gcGF0aFtwb3NdXG4gICAgICBpZiAoY2ggPT09IFBBUkFNKSB7XG4gICAgICAgIHRoaXMuaW5zZXJ0KHBhdGguc3Vic3RyaW5nKDAsIHBvcykpXG4gICAgICAgIHBvcysrIC8vIFNraXAgY29sb24uXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gcG9zXG4gICAgICAgIC8vIE1vdmUgcG9zIHRvIHRoZSBuZXh0IG9jY3VycmVuY2Ugb2YgdGhlIHNsYXNoIG9yIHRoZSBlbmQ6XG4gICAgICAgIHBvcyArPSBwYXRoLnN1YnN0cmluZyhwb3MpLm1hdGNoKC9eKFteL10qKS8pWzFdLmxlbmd0aFxuXG4gICAgICAgIHBhcmFtTmFtZXMucHVzaChwYXRoLnN1YnN0cmluZyhzdGFydCwgcG9zKSlcbiAgICAgICAgLy8gQ2hvcCBvdXQgcGFyYW0gbmFtZSBmcm9tIHBhdGgsIGJ1dCBrZWVwIGNvbG9uLlxuICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoMCwgc3RhcnQpICsgcGF0aC5zdWJzdHJpbmcocG9zKVxuICAgICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCAvLyBVcGRhdGUgbGVuZ3RoIGFmdGVyIGNoYW5naW5nIHBhdGguXG5cbiAgICAgICAgaWYgKHN0YXJ0ID09PSBsZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbnNlcnQocGF0aCwgcGFyYW1OYW1lcywgaGFuZGxlcilcbiAgICAgICAgfVxuICAgICAgICBwb3MgPSBzdGFydFxuICAgICAgICAvLyBXZSBuZWVkIHRvIGluY2x1ZGUgcGFyYW1OYW1lcyBoZXJlIGZvciB0b1N0cmluZygpIGFuZCBuZXN0ZWQgcXVlcmllcy5cbiAgICAgICAgdGhpcy5pbnNlcnQocGF0aC5zdWJzdHJpbmcoMCwgcG9zKSwgcGFyYW1OYW1lcylcbiAgICAgIH0gZWxzZSBpZiAoY2ggPT09IE1BVENIX0FOWSkge1xuICAgICAgICB0aGlzLmluc2VydChwYXRoLnN1YnN0cmluZygwLCBwb3MpKVxuICAgICAgICBwYXJhbU5hbWVzLnB1c2goTUFUQ0hfQU5ZKVxuICAgICAgICByZXR1cm4gdGhpcy5pbnNlcnQocGF0aCwgcGFyYW1OYW1lcywgaGFuZGxlcilcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5pbnNlcnQocGF0aCwgcGFyYW1OYW1lcywgaGFuZGxlcilcbiAgfVxuXG4gIGluc2VydChwYXRoLCBwYXJhbU5hbWVzLCBoYW5kbGVyKSB7XG4gICAgbGV0IGN1cnJlbnQgPSB0aGlzXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIC8vIEZpbmQgdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBwYXRoIGFuZCB0aGUgbm9kZSdzIHByZWZpeCBzdGFydCBkaXZlcmdpbmdcbiAgICAgIGNvbnN0IHsgcHJlZml4IH0gPSBjdXJyZW50XG4gICAgICBsZXQgcG9zID0gMFxuICAgICAgY29uc3QgbWF4ID0gcGF0aC5sZW5ndGggPCBwcmVmaXgubGVuZ3RoID8gcGF0aC5sZW5ndGggOiBwcmVmaXgubGVuZ3RoXG4gICAgICB3aGlsZSAocG9zIDwgbWF4ICYmIHBhdGhbcG9zXSA9PT0gcHJlZml4W3Bvc10pIHtcbiAgICAgICAgcG9zKytcbiAgICAgIH1cbiAgICAgIGlmIChwb3MgPCBwcmVmaXgubGVuZ3RoKSB7XG4gICAgICAgIC8vIFNwbGl0IG5vZGVcbiAgICAgICAgY29uc3Qgbm9kZSA9IG5ldyBOb2RlKFxuICAgICAgICAgIHByZWZpeC5zdWJzdHJpbmcocG9zKSxcbiAgICAgICAgICBjdXJyZW50LmNoaWxkcmVuLFxuICAgICAgICAgIGN1cnJlbnQuaGFuZGxlcixcbiAgICAgICAgICBjdXJyZW50LnBhcmFtTmFtZXNcbiAgICAgICAgKVxuICAgICAgICAvLyBSZXNldCBwYXJlbnQgbm9kZSBhbmQgYWRkIG5ldyBub2RlIGFzIGNoaWxkIHRvIGl0OlxuICAgICAgICBjdXJyZW50LmluaXRpYWxpemUocHJlZml4LnN1YnN0cmluZygwLCBwb3MpKVxuICAgICAgICBjdXJyZW50LmFkZENoaWxkKG5vZGUpXG4gICAgICAgIGlmIChwb3MgPCBwYXRoLmxlbmd0aCkge1xuICAgICAgICAgIC8vIENyZWF0ZSBjaGlsZCBub2RlXG4gICAgICAgICAgY29uc3Qgbm9kZSA9IG5ldyBOb2RlKHBhdGguc3Vic3RyaW5nKHBvcykpXG4gICAgICAgICAgY3VycmVudC5hZGRDaGlsZChub2RlKVxuICAgICAgICAgIGN1cnJlbnQgPSBub2RlIC8vIFN3aXRjaCB0byBjaGlsZCB0byBzZXQgaGFuZGxlclxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHBvcyA8IHBhdGgubGVuZ3RoKSB7XG4gICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZyhwb3MpXG4gICAgICAgIGNvbnN0IGNoaWxkID0gY3VycmVudC5maW5kQ2hpbGQocGF0aFswXSlcbiAgICAgICAgaWYgKGNoaWxkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBHbyBkZWVwZXJcbiAgICAgICAgICBjdXJyZW50ID0gY2hpbGRcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIC8vIENyZWF0ZSBjaGlsZCBub2RlXG4gICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgTm9kZShwYXRoKVxuICAgICAgICBjdXJyZW50LmFkZENoaWxkKG5vZGUpXG4gICAgICAgIGN1cnJlbnQgPSBub2RlIC8vIFN3aXRjaCB0byBjaGlsZCB0byBzZXQgaGFuZGxlclxuICAgICAgfVxuICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgY3VycmVudC5oYW5kbGVyID0gaGFuZGxlclxuICAgICAgICBjdXJyZW50LnBhcmFtTmFtZXMgPSBwYXJhbU5hbWVzXG4gICAgICB9XG4gICAgICBpZiAocGFyYW1OYW1lcykge1xuICAgICAgICAvLyBSZW1lbWJlciB0aGUgbGFzdCBlbnRyeSBmcm9tIHRoZSBsaXN0IG9mIHBhcmFtIG5hbWVzIHRoYXQga2VlcHNcbiAgICAgICAgLy8gZ3Jvd2luZyBkdXJpbmcgcGFyc2luZyBhcyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBub2RlLlxuICAgICAgICBjdXJyZW50LnBhcmFtTmFtZSA9IHBhcmFtTmFtZXNbcGFyYW1OYW1lcy5sZW5ndGggLSAxXVxuICAgICAgfVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBmaW5kKHBhdGgsIHBhcmFtVmFsdWVzID0gW10pIHtcbiAgICBpZiAoIXBhdGggfHwgcGF0aCA9PT0gdGhpcy5wcmVmaXgpIHtcbiAgICAgIC8vIEl0J3MgYSBtYXRjaCFcbiAgICAgIGNvbnN0IHsgaGFuZGxlciwgcGFyYW1OYW1lcyB9ID0gdGhpc1xuICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgLy8gQ29udmVydCBwYXJhbU5hbWVzIGFuZCB2YWx1ZXMgdG8gcGFyYW1zXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHt9XG4gICAgICAgIGxldCBpID0gMFxuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgcGFyYW1OYW1lcykge1xuICAgICAgICAgIHBhcmFtc1tuYW1lXSA9IHBhcmFtVmFsdWVzW2krK11cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBoYW5kbGVyLCBwYXJhbXMgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsTWF0Y2ggPSBwYXRoLnN0YXJ0c1dpdGgodGhpcy5wcmVmaXgpXG4gICAgaWYgKGZ1bGxNYXRjaCkge1xuICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKHRoaXMucHJlZml4Lmxlbmd0aClcbiAgICB9IGVsc2UgaWYgKHRoaXMubGFiZWwgIT09IFBBUkFNKSB7XG4gICAgICAvLyBJZiB0aGUgcGF0aCBkb2Vzbid0IGZ1bGx5IG1hdGNoIHRoZSBwcmVmaXgsIHdlIG9ubHkgbmVlZCB0byBsb29rXG4gICAgICAvLyBmdXJ0aGVyIG9uIHBhcmFtIG5vZGVzLCB3aGljaCBjYW4gaGF2ZSBvdmVybGFwcGluZyBzdGF0aWMgY2hpbGRyZW4uXG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIC8vIFNlYXJjaCBvcmRlcjogU3RhdGljID4gUGFyYW0gPiBNYXRjaC1hbnlcblxuICAgIC8vIFN0YXRpYyBub2RlXG4gICAgY29uc3Qgc3RhdGljQ2hpbGQgPSB0aGlzLmZpbmRDaGlsZChwYXRoWzBdKVxuICAgIGlmIChzdGF0aWNDaGlsZCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gc3RhdGljQ2hpbGQuZmluZChwYXRoLCBwYXJhbVZhbHVlcylcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE5vZGUgbm90IGZvdW5kXG4gICAgaWYgKCFmdWxsTWF0Y2gpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgLy8gUGFyYW0gbm9kZVxuICAgIGNvbnN0IHBhcmFtQ2hpbGQgPSB0aGlzLmZpbmRDaGlsZChQQVJBTSlcbiAgICBpZiAocGFyYW1DaGlsZCkge1xuICAgICAgLy8gRmluZCB0aGUgcG9zaXRpb24gb2YgdGhlIG5leHQgc2xhc2g6XG4gICAgICBjb25zdCBwb3MgPSBwYXRoLm1hdGNoKC9eKFteL10qKS8pWzFdLmxlbmd0aFxuICAgICAgcGFyYW1WYWx1ZXMucHVzaChwYXRoLnN1YnN0cmluZygwLCBwb3MpKVxuICAgICAgY29uc3QgcmVzdWx0ID0gcGFyYW1DaGlsZC5maW5kKHBhdGguc3Vic3RyaW5nKHBvcyksIHBhcmFtVmFsdWVzKVxuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICB9XG4gICAgICBwYXJhbVZhbHVlcy5wb3AoKVxuICAgIH1cblxuICAgIC8vIE1hdGNoLWFueSBub2RlXG4gICAgY29uc3QgbWF0Y2hBbnlDaGlsZCA9IHRoaXMuZmluZENoaWxkKE1BVENIX0FOWSlcbiAgICBpZiAobWF0Y2hBbnlDaGlsZCkge1xuICAgICAgcGFyYW1WYWx1ZXMucHVzaChwYXRoKVxuICAgICAgcmV0dXJuIG1hdGNoQW55Q2hpbGQuZmluZCgnJywgcGFyYW1WYWx1ZXMpIC8vICcnID09IEVuZFxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICB0b1N0cmluZyhwcmVmaXggPSAnJywgdGFpbCA9IHRydWUsIHJvb3QgPSB0cnVlKSB7XG4gICAgY29uc3QgaGFuZGxlciA9IHRoaXMuaGFuZGxlciAmJiBgJHt0aGlzLmhhbmRsZXIubmFtZSB8fCAnxpInfSgpYFxuICAgIGNvbnN0IGZvcm1hdCA9IChwcmVmaXgsIHRhaWwsIG9uLCBvZmYpID0+XG4gICAgICByb290ID8gJycgOiBgJHtwcmVmaXh9JHt0YWlsID8gb24gOiBvZmZ9YFxuICAgIGNvbnN0IGNoaWxkcmVuID0gT2JqZWN0LnZhbHVlcyh0aGlzLmNoaWxkcmVuKVxuICAgIGNvbnN0IGxpbmVzID0gW1xuICAgICAgYCR7Zm9ybWF0KHByZWZpeCwgdGFpbCwgJ+KUlOKUgOKUgCAnLCAn4pSc4pSA4pSAICcpfSR7XG4gICAgICAgIHRoaXMubGFiZWwgPT09IFBBUkFNXG4gICAgICAgICAgPyBgJHt0aGlzLnByZWZpeH0ke3RoaXMucGFyYW1OYW1lfWBcbiAgICAgICAgICA6IHRoaXMucHJlZml4XG4gICAgICB9JHtcbiAgICAgICAgaGFuZGxlciA/IGAgJHtoYW5kbGVyfWAgOiAnJ1xuICAgICAgfSBjaGlsZHJlbj0ke1xuICAgICAgICBjaGlsZHJlbi5sZW5ndGhcbiAgICAgIH1gXG4gICAgXVxuXG4gICAgY29uc3Qgc3RyID0gZm9ybWF0KHByZWZpeCwgdGFpbCwgJyAgICAnLCAn4pSCICAgJylcblxuICAgIGZvciAobGV0IGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA8PSBsOyBpKyspIHtcbiAgICAgIGxpbmVzLnB1c2goY2hpbGRyZW5baV0udG9TdHJpbmcoc3RyLCBpID09PSBsLCBmYWxzZSkpXG4gICAgfVxuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKVxuICB9XG59XG4iXX0=
{
"name": "@ditojs/router",
"version": "0.40.0",
"version": "0.41.0",
"description": "Dito.js Router – Dito.js is a declarative and modern web framework, based on Objection.js, Koa.js and Vue.js",

@@ -29,3 +29,3 @@ "main": "lib/index.js",

"devDependencies": {
"@ditojs/utils": "^0.40.0"
"@ditojs/utils": "^0.41.0"
},

@@ -39,3 +39,3 @@ "keywords": [

],
"gitHead": "19103cf1701a5b7c2a46c52075bdc160a28bfb97"
"gitHead": "41f5f6724fec81c02f0cf16359bd1d795c3e8aff"
}

@@ -1,5 +0,4 @@

// Node Types:
const STATIC = 0
const PARAM = 1
const MATCH_ANY = 2
// Special Labels:
const PARAM = ':'
const MATCH_ANY = '*'

@@ -13,10 +12,8 @@ export default class Node {

prefix = '/',
type = STATIC,
children = [],
children = {},
handler = null,
paramNames = null
) {
this.label = prefix.charCodeAt(0)
this.label = prefix[0]
this.prefix = prefix
this.type = type
this.children = children

@@ -29,29 +26,10 @@ this.handler = handler

addChild(child) {
this.children.push(child)
// No two children can have the same label in a prefix-tree so this is fine:
this.children[child.label] = child
}
findChild(label, type) {
for (const child of this.children) {
if (child.label === label && child.type === type) {
return child
}
}
findChild(label) {
return this.children[label]
}
findChildWithLabel(label) {
for (const child of this.children) {
if (child.label === label) {
return child
}
}
}
findChildWithType(type) {
for (const child of this.children) {
if (child.type === type) {
return child
}
}
}
add(path, handler) {

@@ -61,4 +39,4 @@ const paramNames = []

const ch = path[pos]
if (ch === ':') {
this.insert(path.substring(0, pos), STATIC)
if (ch === PARAM) {
this.insert(path.substring(0, pos))
pos++ // Skip colon.

@@ -75,23 +53,24 @@ const start = pos

if (start === length) {
return this.insert(path, PARAM, paramNames, handler)
return this.insert(path, paramNames, handler)
}
pos = start
this.insert(path.substring(0, pos), PARAM, paramNames)
} else if (ch === '*') {
this.insert(path.substring(0, pos), STATIC)
paramNames.push('*')
return this.insert(path, MATCH_ANY, paramNames, handler)
// We need to include paramNames here for toString() and nested queries.
this.insert(path.substring(0, pos), paramNames)
} else if (ch === MATCH_ANY) {
this.insert(path.substring(0, pos))
paramNames.push(MATCH_ANY)
return this.insert(path, paramNames, handler)
}
}
this.insert(path, STATIC, paramNames, handler)
this.insert(path, paramNames, handler)
}
insert(path, type, paramNames, handler) {
insert(path, paramNames, handler) {
let current = this
while (true) {
// Find the position where the path and the node's prefix start diverging.
// Find the position where the path and the node's prefix start diverging
const { prefix } = current
let pos = 0
const max = path.length < prefix.length ? path.length : prefix.length
while (pos < max && path.charCodeAt(pos) === prefix.charCodeAt(pos)) {
while (pos < max && path[pos] === prefix[pos]) {
pos++

@@ -103,3 +82,2 @@ }

prefix.substring(pos),
current.type,
current.children,

@@ -112,8 +90,5 @@ current.handler,

current.addChild(node)
if (pos === path.length) {
// At parent node
current.type = type
} else {
if (pos < path.length) {
// Create child node
const node = new Node(path.substring(pos), type)
const node = new Node(path.substring(pos))
current.addChild(node)

@@ -124,3 +99,3 @@ current = node // Switch to child to set handler

path = path.substring(pos)
const child = current.findChildWithLabel(path.charCodeAt(0))
const child = current.findChild(path[0])
if (child !== undefined) {

@@ -132,3 +107,3 @@ // Go deeper

// Create child node
const node = new Node(path, type)
const node = new Node(path)
current.addChild(node)

@@ -169,3 +144,3 @@ current = node // Switch to child to set handler

path = path.substring(this.prefix.length)
} else if (this.type !== PARAM) {
} else if (this.label !== PARAM) {
// If the path doesn't fully match the prefix, we only need to look

@@ -179,3 +154,3 @@ // further on param nodes, which can have overlapping static children.

// Static node
const staticChild = this.findChild(path.charCodeAt(0), STATIC)
const staticChild = this.findChild(path[0])
if (staticChild) {

@@ -194,3 +169,3 @@ const result = staticChild.find(path, paramValues)

// Param node
const paramChild = this.findChildWithType(PARAM)
const paramChild = this.findChild(PARAM)
if (paramChild) {

@@ -208,6 +183,6 @@ // Find the position of the next slash:

// Match-any node
const anyChild = this.findChildWithType(MATCH_ANY)
if (anyChild) {
const matchAnyChild = this.findChild(MATCH_ANY)
if (matchAnyChild) {
paramValues.push(path)
return anyChild.find('', paramValues) // '' == End
return matchAnyChild.find('', paramValues) // '' == End
}

@@ -222,5 +197,6 @@

root ? '' : `${prefix}${tail ? on : off}`
const children = Object.values(this.children)
const lines = [
`${format(prefix, tail, '└── ', '├── ')}${
this.type === PARAM
this.label === PARAM
? `${this.prefix}${this.paramName}`

@@ -231,3 +207,3 @@ : this.prefix

} children=${
this.children.length
children.length
}`

@@ -237,3 +213,3 @@ ]

const str = format(prefix, tail, ' ', '│ ')
const { children } = this
for (let i = 0, l = children.length - 1; i <= l; i++) {

@@ -240,0 +216,0 @@ lines.push(children[i].toString(str, i === l, false))

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc