UNPKG

fp-ts-routing

Version:

A type-safe routing library for TypeScript

82 lines 2.56 kB
"use strict"; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Route = void 0; /** * @since 0.6.0 */ var Record_1 = require("fp-ts/lib/Record"); /** * @category routes * @since 0.4.0 */ var Route = exports.Route = /** @class */ (function () { function Route(parts, query) { this.parts = parts; this.query = query; } /** * @since 0.4.0 */ Route.isEmpty = function (r) { return r.parts.length === 0 && (0, Record_1.isEmpty)(r.query); }; /** * @since 0.4.0 */ Route.parse = function (s, decode) { var _a; if (decode === void 0) { decode = true; } var pathname = (_a = new URL(s, 'http://localhost'), _a.pathname), searchParams = _a.searchParams; // `base` is needed when `path` is relative var segments = pathname.split('/').filter(Boolean); var parts = decode ? segments.map(decodeURIComponent) : segments; return new Route(parts, toQuery(searchParams)); }; /** * @since 0.4.0 */ Route.prototype.toString = function (encode) { if (encode === void 0) { encode = true; } var qs = fromQuery(this.query).toString(); var parts = encode ? this.parts.map(encodeURIComponent) : this.parts; return "/".concat(parts.join('/')).concat(qs ? '?' + qs : ''); }; /** * @since 0.4.0 */ Route.empty = new Route([], {}); return Route; }()); var fromQuery = function (query) { var qs = new URLSearchParams(); Object.entries(query).forEach(function (_a) { var k = _a[0], v = _a[1]; if (typeof v === 'undefined') { return; } return Array.isArray(v) ? v.forEach(function (x) { return qs.append(k, x); }) : qs.set(k, v); }); return qs; }; var toQuery = function (params) { var q = {}; params.forEach(function (v, k) { var current = q[k]; if (current) { q[k] = Array.isArray(current) ? __spreadArray(__spreadArray([], current, true), [v], false) : [current, v]; } else { q[k] = v; } }); return q; }; //# sourceMappingURL=route.js.map