sensai
Version:
Because even AI needs a master
431 lines (430 loc) • 14.8 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
const _nodetest = /*#__PURE__*/ _interop_require_default(require("node:test"));
const _nodeassert = /*#__PURE__*/ _interop_require_default(require("node:assert"));
const _trie = /*#__PURE__*/ _interop_require_default(require("./trie"));
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
// statis segment(s)
(0, _nodetest.default)('add static branches', ()=>{
const { add, get } = (0, _trie.default)();
_nodeassert.default.equal(add('/hello/world'), true);
_nodeassert.default.equal(get('/hello')?.end, false);
_nodeassert.default.equal(get('/hello/world')?.end, true);
_nodeassert.default.equal(add('/hello'), true);
_nodeassert.default.equal(get('/hello')?.end, true);
});
(0, _nodetest.default)('add dynamic branches', ()=>{
const { add, get } = (0, _trie.default)();
_nodeassert.default.equal(add('/hello/[country]/john'), true);
_nodeassert.default.equal(get('/hello')?.end, false);
_nodeassert.default.equal(get('/hello/[country]')?.end, false);
_nodeassert.default.equal(get('/hello/world'), undefined);
_nodeassert.default.equal(add('/hello/[country]'), true);
_nodeassert.default.equal(get('/hello/[country]')?.end, true);
});
(0, _nodetest.default)('remove static branch', ()=>{
const { add, get, remove } = (0, _trie.default)();
add('/hello');
add('/hello/world');
_nodeassert.default.equal(remove('/hello'), true);
_nodeassert.default.equal(get('/hello/world')?.end, true);
_nodeassert.default.equal(get('/hello')?.end, false);
_nodeassert.default.equal(remove('/hello/john'), false);
});
(0, _nodetest.default)('lookup static branch', ()=>{
const { add, lookup, remove } = (0, _trie.default)();
add('/');
_nodeassert.default.deepEqual(lookup('/'), {
path: '/',
params: {}
});
add('/hello/world');
_nodeassert.default.deepEqual(lookup('/hello/world'), {
path: '/hello/world',
params: {}
});
add('/hello');
_nodeassert.default.deepEqual(lookup('/hello'), {
path: '/hello',
params: {}
});
remove('/hello/world');
_nodeassert.default.equal(lookup('/hello/world'), undefined);
});
// parametic segment(s)
(0, _nodetest.default)('lookup branch with parametric segment', ()=>{
const { add, lookup, remove } = (0, _trie.default)();
add('/hello/[country]');
_nodeassert.default.deepEqual(lookup('/hello/canada'), {
path: '/hello/[country]',
params: {
country: 'canada'
}
});
remove('/hello/[country]');
_nodeassert.default.equal(lookup('/hello/canada'), undefined);
if (lookup('/hello/world/france/canada')) _nodeassert.default.fail('/hello/world/france/canada lookup should be undefined');
});
(0, _nodetest.default)('lookup branch with multiple parametric segments', ()=>{
const { add, lookup, remove } = (0, _trie.default)();
add('/hello/[country]');
add('/hello/[country]/ontario');
add('/hello/[country]/ontario/[city]');
add('/hello/[country]/[province]');
const provinces = ()=>{
_nodeassert.default.deepEqual(lookup('/hello/canada/ontario'), {
path: '/hello/[country]/ontario',
params: {
country: 'canada'
}
});
_nodeassert.default.deepEqual(lookup('/hello/canada/alberta'), {
path: '/hello/[country]/[province]',
params: {
country: 'canada',
province: 'alberta'
}
});
};
const city = ()=>{
_nodeassert.default.deepEqual(lookup('/hello/canada/ontario/toronto'), {
path: '/hello/[country]/ontario/[city]',
params: {
country: 'canada',
city: 'toronto'
}
});
};
_nodeassert.default.deepEqual(lookup('/hello/canada'), {
path: '/hello/[country]',
params: {
country: 'canada'
}
});
provinces();
city();
remove('/hello/[country]');
_nodeassert.default.equal(lookup('/hello/canada'), undefined);
provinces();
city();
remove('/hello/[country]/[province]');
_nodeassert.default.deepEqual(lookup('/hello/canada/ontario'), {
path: '/hello/[country]/ontario',
params: {
country: 'canada'
}
});
_nodeassert.default.equal(lookup('/hello/canada/alberta'), undefined);
city();
remove('/hello/[country]/ontario/[city]');
_nodeassert.default.equal(lookup('/hello/canada/ontario/guelph'), undefined);
});
// force remove
(0, _nodetest.default)('delete all subsequent branches', ()=>{
const { add, get, remove } = (0, _trie.default)();
add('/hello/world');
add('/hello/world/[country]');
add('/hello');
add('/hello/john');
_nodeassert.default.equal(remove('/hello', true), true);
_nodeassert.default.equal(get('/hello/world'), undefined);
_nodeassert.default.equal(get('/hello/world/[country]'), undefined);
_nodeassert.default.equal(get('/hello/world/john'), undefined);
});
// catch-all segment(s)
(0, _nodetest.default)('lookup branch with catch-all segment', ()=>{
const { add, lookup, remove } = (0, _trie.default)();
add('/hello/[...names]');
_nodeassert.default.deepEqual(lookup('/hello/john'), {
path: '/hello/[...names]',
params: {
names: [
'john'
]
}
});
_nodeassert.default.deepEqual(lookup('/hello/john/jane'), {
path: '/hello/[...names]',
params: {
names: [
'john',
'jane'
]
}
});
remove('/hello/[...names]');
_nodeassert.default.equal(lookup('/hello/john'), undefined);
_nodeassert.default.equal(lookup('/hello/jane'), undefined);
});
(0, _nodetest.default)('should not lookup segments after catch-all', ()=>{
const { add, lookup, remove } = (0, _trie.default)();
add('/hello/[...countries]');
add('/hello/[...countries]/ontario/[...cities]');
_nodeassert.default.deepEqual(lookup('/hello/canada'), {
path: '/hello/[...countries]',
params: {
countries: [
'canada'
]
}
});
_nodeassert.default.deepEqual(lookup('/hello/canada/france'), {
path: '/hello/[...countries]',
params: {
countries: [
'canada',
'france'
]
}
});
_nodeassert.default.deepEqual(lookup('/hello/canada/ontario/toronto'), {
path: '/hello/[...countries]',
params: {
countries: [
'canada',
'ontario',
'toronto'
]
}
});
remove('/hello/[...countries]');
_nodeassert.default.equal(lookup('/hello/canada'), undefined);
_nodeassert.default.equal(lookup('/hello/canada/france'), undefined);
_nodeassert.default.equal(lookup('/hello/canada/ontario/toronto'), undefined);
});
(0, _nodetest.default)('lookup branch with parametric and catch all segments', ()=>{
const { add, lookup, remove } = (0, _trie.default)();
add('/hello/[country]');
add('/hello/[country]/ontario/[...cities]');
_nodeassert.default.deepEqual(lookup('/hello/canada'), {
path: '/hello/[country]',
params: {
country: 'canada'
}
});
_nodeassert.default.equal(lookup('/hello/canada/ontario'), undefined);
_nodeassert.default.deepEqual(lookup('/hello/canada/ontario/toronto/guelph'), {
path: '/hello/[country]/ontario/[...cities]',
params: {
country: 'canada',
cities: [
'toronto',
'guelph'
]
}
});
remove('/hello/[country]');
_nodeassert.default.equal(lookup('/hello/canada'), undefined);
_nodeassert.default.deepEqual(lookup('/hello/canada/ontario/toronto/guelph'), {
path: '/hello/[country]/ontario/[...cities]',
params: {
country: 'canada',
cities: [
'toronto',
'guelph'
]
}
});
remove('/hello/[country]/ontario/[...cities]');
_nodeassert.default.equal(lookup('/hello/canada/ontario/toronto/guelph'), undefined);
add('/hello/[...countries]/[city]');
_nodeassert.default.equal(lookup('/hello/canada/france/paris'), undefined);
add('/hello/[...countries]');
_nodeassert.default.deepEqual(lookup('/hello/canada/france/paris'), undefined) // the folder [country] still exists
;
remove('/hello/[country]', true);
_nodeassert.default.deepEqual(lookup('/hello/canada/france/paris'), {
path: '/hello/[...countries]',
params: {
countries: [
'canada',
'france',
'paris'
]
}
});
});
// optional catch-all segment(s)
(0, _nodetest.default)('lookup branch with optional catch-all segment', ()=>{
const { add, lookup, remove } = (0, _trie.default)();
add('/hello/[[...names]]');
_nodeassert.default.deepEqual(lookup('/hello/john'), {
path: '/hello/[[...names]]',
params: {
names: [
'john'
]
}
});
_nodeassert.default.deepEqual(lookup('/hello/john/jane'), {
path: '/hello/[[...names]]',
params: {
names: [
'john',
'jane'
]
}
});
_nodeassert.default.deepEqual(lookup('/hello'), {
path: '/hello/[[...names]]',
params: {
names: []
}
});
add('/hello');
_nodeassert.default.deepEqual(lookup('/hello'), {
path: '/hello',
params: {}
});
remove('/hello/[[...names]]');
_nodeassert.default.equal(lookup('/hello/john'), undefined);
_nodeassert.default.equal(lookup('/hello/jane'), undefined);
});
(0, _nodetest.default)('should not lookup segments after optional catch-all', ()=>{
const { add, lookup, remove } = (0, _trie.default)();
add('/hello/[[...countries]]');
add('/hello/[[...countries]]/ontario/[...cities]');
_nodeassert.default.deepEqual(lookup('/hello/canada'), {
path: '/hello/[[...countries]]',
params: {
countries: [
'canada'
]
}
});
_nodeassert.default.deepEqual(lookup('/hello/canada/france'), {
path: '/hello/[[...countries]]',
params: {
countries: [
'canada',
'france'
]
}
});
_nodeassert.default.deepEqual(lookup('/hello/canada/ontario/toronto'), {
path: '/hello/[[...countries]]',
params: {
countries: [
'canada',
'ontario',
'toronto'
]
}
});
remove('/hello/[[...countries]]');
_nodeassert.default.equal(lookup('/hello'), undefined);
_nodeassert.default.equal(lookup('/hello/canada'), undefined);
_nodeassert.default.equal(lookup('/hello/canada/france'), undefined);
_nodeassert.default.equal(lookup('/hello/canada/ontario/toronto'), undefined);
add('/hello/[[...countries]]');
_nodeassert.default.deepEqual(lookup('/hello/canada/france'), {
path: '/hello/[[...countries]]',
params: {
countries: [
'canada',
'france'
]
}
});
});
(0, _nodetest.default)('lookup branch with parametric and optional catch all segments', ()=>{
const { add, lookup, remove } = (0, _trie.default)();
add('/hello/[country]');
add('/hello/[country]/ontario/[[...cities]]');
_nodeassert.default.deepEqual(lookup('/hello/canada'), {
path: '/hello/[country]',
params: {
country: 'canada'
}
});
_nodeassert.default.deepEqual(lookup('/hello/canada/ontario'), {
path: '/hello/[country]/ontario/[[...cities]]',
params: {
country: 'canada',
cities: []
}
});
_nodeassert.default.deepEqual(lookup('/hello/canada/ontario/toronto/guelph'), {
path: '/hello/[country]/ontario/[[...cities]]',
params: {
country: 'canada',
cities: [
'toronto',
'guelph'
]
}
});
remove('/hello/[country]');
_nodeassert.default.equal(lookup('/hello/canada'), undefined);
_nodeassert.default.deepEqual(lookup('/hello/canada/ontario/toronto/guelph'), {
path: '/hello/[country]/ontario/[[...cities]]',
params: {
country: 'canada',
cities: [
'toronto',
'guelph'
]
}
});
remove('/hello/[country]/ontario/[[...cities]]');
_nodeassert.default.equal(lookup('/hello/canada/ontario/toronto/guelph'), undefined);
add('/hello/[...countries]/[city]');
_nodeassert.default.equal(lookup('/hello/canada/france/paris'), undefined);
add('/hello/[...countries]');
_nodeassert.default.deepEqual(lookup('/hello/canada/france/paris'), undefined) // the folder [country] still exists
;
remove('/hello/[country]', true);
_nodeassert.default.deepEqual(lookup('/hello/canada/france/paris'), {
path: '/hello/[...countries]',
params: {
countries: [
'canada',
'france',
'paris'
]
}
});
});
(0, _nodetest.default)('returns params correctly for "dirty" paths', ()=>{
const { add, lookup } = (0, _trie.default)();
add('/[country]');
_nodeassert.default.deepEqual(lookup('///france//'), {
path: '/[country]',
params: {
country: 'france'
}
});
add('/[country]/[...cities]');
_nodeassert.default.deepEqual(lookup('///france//paris///nice///'), {
path: '/[country]/[...cities]',
params: {
country: 'france',
cities: [
'paris',
'nice'
]
}
});
});
(0, _nodetest.default)('should remove static route and replace with parametric route', ()=>{
const { add, lookup, remove } = (0, _trie.default)();
add('/hello/france');
_nodeassert.default.deepStrictEqual(lookup('/hello/france'), {
path: '/hello/france',
params: {}
});
remove('/hello/france');
add('/hello/[name]');
_nodeassert.default.deepStrictEqual(lookup('/hello/france'), {
path: '/hello/[name]',
params: {
name: 'france'
}
});
});