UNPKG

ts-routes

Version:
111 lines (99 loc) 3.96 kB
import { compile } from 'path-to-regexp'; import { stringify, parse } from 'qs'; function createRouting(routes, options) { function createRoute(currentPattern, { pattern: pattern2, children }) { const pattern = currentPattern + pattern2.pattern; const compiledPattern = compile(pattern); function route(pathParams, queryParams, overrideOptions) { const queryString = queryParams ? `?${stringify(queryParams, overrideOptions !== null && overrideOptions !== void 0 ? overrideOptions : options)}` : ""; return compiledPattern(pathParams) + queryString; } route.pattern = pattern; route.parseQuery = (query, overrideOptions) => parse(query, overrideOptions !== null && overrideOptions !== void 0 ? overrideOptions : options); if (children) { for (const childRoute in children) { route[childRoute] = createRoute(pattern, children[childRoute]); } } return route; } const mappedRoutes = {}; for (const route in routes) { mappedRoutes[route] = createRoute("", routes[route]); } return mappedRoutes; } class SegmentPattern { constructor(pattern, params) { this.pattern = pattern; this.params = params; } } function segment(literals, ...placeholders) { let result = ""; for (let i = 0; i < placeholders.length; i++) { result += literals[i]; result += placeholders[i].pattern; } result += literals[literals.length - 1]; return { pattern: new SegmentPattern(result, placeholders), }; } class PathParamDescription { constructor({ name, optionality, pattern }) { const patternPart = pattern ? `(${pattern})` : ""; const requirementPart = optionality === "optional" ? "?" : ""; this.name = name; this.optionality = optionality; this.pattern = `:${name}${patternPart}${requirementPart}`; } } function string(name, optsOrOptionality) { var _a; let optionality; if (typeof optsOrOptionality === "string") { optionality = optsOrOptionality; } else { optionality = (_a = optsOrOptionality === null || optsOrOptionality === void 0 ? void 0 : optsOrOptionality.optionality) !== null && _a !== void 0 ? _a : "required"; } return new PathParamDescription({ name, optionality }); } function uuid$1(name, optsOrOptionality) { var _a; let optionality; if (typeof optsOrOptionality === "string") { optionality = optsOrOptionality; } else { optionality = (_a = optsOrOptionality === null || optsOrOptionality === void 0 ? void 0 : optsOrOptionality.optionality) !== null && _a !== void 0 ? _a : "required"; } const number = "[0-9]+"; return new PathParamDescription({ name, optionality, pattern: number }); } function uuid(name, optsOrOptionality) { var _a; let optionality; if (typeof optsOrOptionality === "string") { optionality = optsOrOptionality; } else { optionality = (_a = optsOrOptionality === null || optsOrOptionality === void 0 ? void 0 : optsOrOptionality.optionality) !== null && _a !== void 0 ? _a : "required"; } const uuid = "[0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}"; return new PathParamDescription({ name, optionality, pattern: uuid }); } function arg(name, { pattern, optionality = "required", } = {}) { return new PathParamDescription({ name, optionality, pattern }); } class QueryParamDescription { constructor(optionality) { this.optionality = optionality; } } function query(optionality = "required") { return new QueryParamDescription(optionality); } export { arg, createRouting, uuid$1 as number, query, segment, string, uuid }; //# sourceMappingURL=index.esm.js.map