ts-routes
Version:
Strongly typed routes management
130 lines (117 loc) • 4.68 kB
JavaScript
;
var pathToRegexp = require('path-to-regexp');
var qs = require('qs');
function createRouting(routes, options) {
function createRoute(currentPattern, _a) {
var pattern2 = _a.pattern, children = _a.children;
var pattern = currentPattern + pattern2.pattern;
var compiledPattern = pathToRegexp.compile(pattern);
function route(pathParams, queryParams, overrideOptions) {
var queryString = queryParams ? "?".concat(qs.stringify(queryParams, overrideOptions !== null && overrideOptions !== void 0 ? overrideOptions : options)) : "";
return compiledPattern(pathParams) + queryString;
}
route.pattern = pattern;
route.parseQuery = function (query, overrideOptions) { return qs.parse(query, overrideOptions !== null && overrideOptions !== void 0 ? overrideOptions : options); };
if (children) {
for (var childRoute in children) {
route[childRoute] = createRoute(pattern, children[childRoute]);
}
}
return route;
}
var mappedRoutes = {};
for (var route in routes) {
mappedRoutes[route] = createRoute("", routes[route]);
}
return mappedRoutes;
}
var SegmentPattern = /** @class */ (function () {
function SegmentPattern(pattern, params) {
this.pattern = pattern;
this.params = params;
}
return SegmentPattern;
}());
function segment(literals) {
var placeholders = [];
for (var _i = 1; _i < arguments.length; _i++) {
placeholders[_i - 1] = arguments[_i];
}
var result = "";
for (var i = 0; i < placeholders.length; i++) {
result += literals[i];
result += placeholders[i].pattern;
}
result += literals[literals.length - 1];
return {
pattern: new SegmentPattern(result, placeholders),
};
}
var PathParamDescription = /** @class */ (function () {
function PathParamDescription(_a) {
var name = _a.name, optionality = _a.optionality, pattern = _a.pattern;
var patternPart = pattern ? "(".concat(pattern, ")") : "";
var requirementPart = optionality === "optional" ? "?" : "";
this.name = name;
this.optionality = optionality;
this.pattern = ":".concat(name).concat(patternPart).concat(requirementPart);
}
return PathParamDescription;
}());
function string(name, optsOrOptionality) {
var _a;
var 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: name, optionality: optionality });
}
function uuid$1(name, optsOrOptionality) {
var _a;
var 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";
}
var number = "[0-9]+";
return new PathParamDescription({ name: name, optionality: optionality, pattern: number });
}
function uuid(name, optsOrOptionality) {
var _a;
var 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";
}
var 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: name, optionality: optionality, pattern: uuid });
}
function arg(name, _a) {
var _b = _a === void 0 ? {} : _a, pattern = _b.pattern, _c = _b.optionality, optionality = _c === void 0 ? "required" : _c;
return new PathParamDescription({ name: name, optionality: optionality, pattern: pattern });
}
var QueryParamDescription = /** @class */ (function () {
function QueryParamDescription(optionality) {
this.optionality = optionality;
}
return QueryParamDescription;
}());
function query(optionality) {
if (optionality === void 0) { optionality = "required"; }
return new QueryParamDescription(optionality);
}
exports.arg = arg;
exports.createRouting = createRouting;
exports.number = uuid$1;
exports.query = query;
exports.segment = segment;
exports.string = string;
exports.uuid = uuid;
//# sourceMappingURL=index.cjs.js.map