Urara-Blog/node_modules/.pnpm-store/v3/files/33/26d6e8902e4e71e126c196abd464d05738483810ecde9cbc7beb8f12b6ce4bd5a922d56d996db963830921d2bde0abea9bcb50471bf737501460921fafd918
2022-08-14 01:14:53 +08:00

39 lines
No EOL
1.1 KiB
Text

function parse(str, loose) {
if (str instanceof RegExp) return { keys:false, pattern:str };
var c, o, tmp, ext, keys=[], pattern='', arr = str.split('/');
arr[0] || arr.shift();
while (tmp = arr.shift()) {
c = tmp[0];
if (c === '*') {
keys.push('wild');
pattern += '/(.*)';
} else if (c === ':') {
o = tmp.indexOf('?', 1);
ext = tmp.indexOf('.', 1);
keys.push( tmp.substring(1, !!~o ? o : !!~ext ? ext : tmp.length) );
pattern += !!~o && !~ext ? '(?:/([^/]+?))?' : '/([^/]+?)';
if (!!~ext) pattern += (!!~o ? '?' : '') + '\\' + tmp.substring(ext);
} else {
pattern += '/' + tmp;
}
}
return {
keys: keys,
pattern: new RegExp('^' + pattern + (loose ? '(?=$|\/)' : '\/?$'), 'i')
};
}
var RGX = /*#__PURE__*/ /(\/|^)([:*][^/]*?)(\?)?(?=[/.]|$)/g;
// error if key missing?
function inject(route, values) {
return route.replace(RGX, (x, lead, key, optional) => {
x = values[key=='*' ? 'wild' : key.substring(1)];
return x ? '/'+x : (optional || key=='*') ? '' : '/' + key;
});
}
exports.inject = inject;
exports.parse = parse;