@e22m4u/js-path-trie
Advanced tools
Comparing version 0.0.7 to 0.0.8
{ | ||
"name": "@e22m4u/js-path-trie", | ||
"version": "0.0.7", | ||
"version": "0.0.8", | ||
"description": "A router for Node.js based on a prefix tree", | ||
@@ -5,0 +5,0 @@ "type": "module", |
@@ -126,26 +126,36 @@ import {Errorf} from '@e22m4u/js-format'; | ||
); | ||
// если добавляемый узел является последним, | ||
// а его токен уже существует, то проверяем | ||
// наличие значения в существующем узле | ||
// проверка существования узла | ||
// по текущему токену | ||
let child = parent.children[token]; | ||
const isLast = tokens.length - 1 === index; | ||
let child = parent.children[token]; | ||
if (isLast && child != null) { | ||
debug('The node %v already exist.', token); | ||
// если существующий узел не имеет | ||
// значения, то устанавливаем | ||
if (child.value == null) { | ||
child.value = value; | ||
if (child) { | ||
// если узел не является последним, | ||
// то переходим к следующему | ||
if (!isLast) { | ||
debug('The node %v already exist.', token); | ||
return this._createNode(tokens, index + 1, value, child); | ||
} | ||
// если существующий узел имеет значение | ||
// отличное от устанавливаемого, | ||
// то выбрасываем ошибку | ||
else if (child.value !== value) { | ||
throw new Errorf( | ||
'The duplicate path %v has a different value.', | ||
'/' + tokens.join('/'), | ||
); | ||
// если узел является последним, | ||
// то проверяем наличие значения | ||
else { | ||
debug('The node %v already exist.', token); | ||
// если существующий узел не имеет | ||
// значения, то устанавливаем текущее | ||
if (child.value == null) { | ||
debug('The node %v has the same value.', token); | ||
child.value = value; | ||
} | ||
// если существующий узел имеет | ||
// значение отличное от текущего, | ||
// то выбрасываем ошибку | ||
else if (child.value !== value) { | ||
throw new Errorf( | ||
'The duplicate path %v has a different value.', | ||
'/' + tokens.join('/'), | ||
); | ||
} | ||
// так как данный токен является последним, | ||
// то возвращаем существующий узел | ||
return child; | ||
} | ||
// так как данный токен является последним, | ||
// то возвращаем существующий узел | ||
return child; | ||
} | ||
@@ -152,0 +162,0 @@ debug('The node %v does not exist.', token); |
@@ -230,2 +230,39 @@ import {expect} from 'chai'; | ||
}); | ||
it('does not overrides value when set another one to the middle', function () { | ||
const trie = new PathTrie(); | ||
trie.add('/foo/bar/baz', VALUE); | ||
trie.add('/foo/bar', ANOTHER_VALUE); | ||
expect(trie['_root']).to.be.eql({ | ||
token: '', | ||
regexp: undefined, | ||
names: [], | ||
value: undefined, | ||
children: { | ||
foo: { | ||
token: 'foo', | ||
regexp: undefined, | ||
names: [], | ||
value: undefined, | ||
children: { | ||
bar: { | ||
token: 'bar', | ||
regexp: undefined, | ||
names: [], | ||
value: ANOTHER_VALUE, | ||
children: { | ||
baz: { | ||
token: 'baz', | ||
regexp: undefined, | ||
names: [], | ||
value: VALUE, | ||
children: {}, | ||
}, | ||
}, | ||
}, | ||
}, | ||
}, | ||
}, | ||
}); | ||
}); | ||
}); | ||
@@ -232,0 +269,0 @@ |
Sorry, the diff of this file is not supported yet
45749
1163