diff options
author | Minteck <contact@minteck.org> | 2022-10-18 08:59:09 +0200 |
---|---|---|
committer | Minteck <contact@minteck.org> | 2022-10-18 08:59:09 +0200 |
commit | 2c4ae43e688a9873e86211ea0e7aeb9ba770dd77 (patch) | |
tree | 17848d95522dab25d3cdeb9c4a6450e2a234861f /alarm/node_modules/matchit/lib | |
parent | 108525534c28013cfe1897c30e4565f9893f3766 (diff) | |
download | pluralconnect-2c4ae43e688a9873e86211ea0e7aeb9ba770dd77.tar.gz pluralconnect-2c4ae43e688a9873e86211ea0e7aeb9ba770dd77.tar.bz2 pluralconnect-2c4ae43e688a9873e86211ea0e7aeb9ba770dd77.zip |
Update
Diffstat (limited to 'alarm/node_modules/matchit/lib')
-rw-r--r-- | alarm/node_modules/matchit/lib/matchit.js | 119 | ||||
-rw-r--r-- | alarm/node_modules/matchit/lib/matchit.mjs | 115 |
2 files changed, 234 insertions, 0 deletions
diff --git a/alarm/node_modules/matchit/lib/matchit.js b/alarm/node_modules/matchit/lib/matchit.js new file mode 100644 index 0000000..2c76c54 --- /dev/null +++ b/alarm/node_modules/matchit/lib/matchit.js @@ -0,0 +1,119 @@ +'use strict'; + +const every = require('@arr/every'); + +const SEP = '/'; +// Types ~> static, param, any, optional +const STYPE=0, PTYPE=1, ATYPE=2, OTYPE=3; +// Char Codes ~> / : * +const SLASH=47, COLON=58, ASTER=42, QMARK=63; + +function strip(str) { + if (str === SEP) return str; + (str.charCodeAt(0) === SLASH) && (str=str.substring(1)); + var len = str.length - 1; + return str.charCodeAt(len) === SLASH ? str.substring(0, len) : str; +} + +function split(str) { + return (str=strip(str)) === SEP ? [SEP] : str.split(SEP); +} + +function isMatch(arr, obj, idx) { + idx = arr[idx]; + return (obj.val === idx && obj.type === STYPE) || (idx === SEP ? obj.type > PTYPE : obj.type !== STYPE && (idx || '').endsWith(obj.end)); +} + +function match(str, all) { + var i=0, tmp, segs=split(str), len=segs.length, l; + var fn = isMatch.bind(isMatch, segs); + + for (; i < all.length; i++) { + tmp = all[i]; + if ((l=tmp.length) === len || (l < len && tmp[l-1].type === ATYPE) || (l > len && tmp[l-1].type === OTYPE)) { + if (every(tmp, fn)) return tmp; + } + } + + return []; +} + +function parse(str) { + if (str === SEP) { + return [{ old:str, type:STYPE, val:str, end:'' }]; + } + + var c, x, t, sfx, nxt=strip(str), i=-1, j=0, len=nxt.length, out=[]; + + while (++i < len) { + c = nxt.charCodeAt(i); + + if (c === COLON) { + j = i + 1; // begining of param + t = PTYPE; // set type + x = 0; // reset mark + sfx = ''; + + while (i < len && nxt.charCodeAt(i) !== SLASH) { + c = nxt.charCodeAt(i); + if (c === QMARK) { + x=i; t=OTYPE; + } else if (c === 46 && sfx.length === 0) { + sfx = nxt.substring(x=i); + } + i++; // move on + } + + out.push({ + old: str, + type: t, + val: nxt.substring(j, x||i), + end: sfx + }); + + // shorten string & update pointers + nxt=nxt.substring(i); len-=i; i=0; + + continue; // loop + } else if (c === ASTER) { + out.push({ + old: str, + type: ATYPE, + val: nxt.substring(i), + end: '' + }); + continue; // loop + } else { + j = i; + while (i < len && nxt.charCodeAt(i) !== SLASH) { + ++i; // skip to next slash + } + out.push({ + old: str, + type: STYPE, + val: nxt.substring(j, i), + end: '' + }); + // shorten string & update pointers + nxt=nxt.substring(i); len-=i; i=j=0; + } + } + + return out; +} + +function exec(str, arr) { + var i=0, x, y, segs=split(str), out={}; + for (; i < arr.length; i++) { + x=segs[i]; y=arr[i]; + if (x === SEP) continue; + if (x !== void 0 && y.type | 2 === OTYPE) { + out[ y.val ] = x.replace(y.end, ''); + } + } + return out; +} + +exports.exec = exec; +exports.match = match; +exports.parse = parse;
\ No newline at end of file diff --git a/alarm/node_modules/matchit/lib/matchit.mjs b/alarm/node_modules/matchit/lib/matchit.mjs new file mode 100644 index 0000000..03da81e --- /dev/null +++ b/alarm/node_modules/matchit/lib/matchit.mjs @@ -0,0 +1,115 @@ +'use strict'; + +import every from '@arr/every'; + +const SEP = '/'; +// Types ~> static, param, any, optional +const STYPE=0, PTYPE=1, ATYPE=2, OTYPE=3; +// Char Codes ~> / : * +const SLASH=47, COLON=58, ASTER=42, QMARK=63; + +function strip(str) { + if (str === SEP) return str; + (str.charCodeAt(0) === SLASH) && (str=str.substring(1)); + var len = str.length - 1; + return str.charCodeAt(len) === SLASH ? str.substring(0, len) : str; +} + +function split(str) { + return (str=strip(str)) === SEP ? [SEP] : str.split(SEP); +} + +function isMatch(arr, obj, idx) { + idx = arr[idx]; + return (obj.val === idx && obj.type === STYPE) || (idx === SEP ? obj.type > PTYPE : obj.type !== STYPE && (idx || '').endsWith(obj.end)); +} + +export function match(str, all) { + var i=0, tmp, segs=split(str), len=segs.length, l; + var fn = isMatch.bind(isMatch, segs); + + for (; i < all.length; i++) { + tmp = all[i]; + if ((l=tmp.length) === len || (l < len && tmp[l-1].type === ATYPE) || (l > len && tmp[l-1].type === OTYPE)) { + if (every(tmp, fn)) return tmp; + } + } + + return []; +} + +export function parse(str) { + if (str === SEP) { + return [{ old:str, type:STYPE, val:str, end:'' }]; + } + + var c, x, t, sfx, nxt=strip(str), i=-1, j=0, len=nxt.length, out=[]; + + while (++i < len) { + c = nxt.charCodeAt(i); + + if (c === COLON) { + j = i + 1; // begining of param + t = PTYPE; // set type + x = 0; // reset mark + sfx = ''; + + while (i < len && nxt.charCodeAt(i) !== SLASH) { + c = nxt.charCodeAt(i); + if (c === QMARK) { + x=i; t=OTYPE; + } else if (c === 46 && sfx.length === 0) { + sfx = nxt.substring(x=i); + } + i++; // move on + } + + out.push({ + old: str, + type: t, + val: nxt.substring(j, x||i), + end: sfx + }); + + // shorten string & update pointers + nxt=nxt.substring(i); len-=i; i=0; + + continue; // loop + } else if (c === ASTER) { + out.push({ + old: str, + type: ATYPE, + val: nxt.substring(i), + end: '' + }); + continue; // loop + } else { + j = i; + while (i < len && nxt.charCodeAt(i) !== SLASH) { + ++i; // skip to next slash + } + out.push({ + old: str, + type: STYPE, + val: nxt.substring(j, i), + end: '' + }); + // shorten string & update pointers + nxt=nxt.substring(i); len-=i; i=j=0; + } + } + + return out; +} + +export function exec(str, arr) { + var i=0, x, y, segs=split(str), out={}; + for (; i < arr.length; i++) { + x=segs[i]; y=arr[i]; + if (x === SEP) continue; + if (x !== void 0 && y.type | 2 === OTYPE) { + out[ y.val ] = x.replace(y.end, ''); + } + } + return out; +} |