UNPKG

sensai

Version:

Because even AI needs a master

431 lines (430 loc) 14.8 kB
"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' } }); });