UNPKG

@libj/make-uri

Version:
109 lines 4.02 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; 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.UriTemplate = void 0; var UriPart_1 = require("./UriPart"); var Tag = { SCHEME: 'scheme', AUTHORITY: 'authority', HOST: 'host', USER: 'user', PORT: 'port', PATH: 'path', QUERY: 'query', FRAGMENT: 'fragment', }; var Tpl = { URI: tpl(Tag.SCHEME, Tag.AUTHORITY, Tag.PATH, Tag.QUERY, Tag.FRAGMENT), SCHEME: tpl(Tag.SCHEME, UriPart_1.UriPart.COLON), AUTHORITY: tpl(Tag.USER, Tag.HOST, Tag.PORT), PORT: tpl(UriPart_1.UriPart.COLON, Tag.PORT), USER: tpl(Tag.USER, UriPart_1.UriPart.AT), PATH: tpl(UriPart_1.UriPart.SLASH, Tag.PATH), FRAGMENT: tpl(UriPart_1.UriPart.HASH, Tag.FRAGMENT), }; exports.UriTemplate = { uri: function (parts) { return produce(Tpl.URI, parts); }, scheme: function (val) { return produce(Tpl.SCHEME, { scheme: val }, { sanitize: ["".concat(UriPart_1.UriPart.COLON).concat(UriPart_1.UriPart.DSLASH), UriPart_1.UriPart.COLON], // order matters ! }); }, authority: function (parts, prefix) { if (prefix === void 0) { prefix = false; } var template = prefixTpl([UriPart_1.UriPart.DSLASH, prefix], Tpl.AUTHORITY); return produce(template, __assign({ port: '', user: '' }, parts)); }, port: function (val) { return produce(Tpl.PORT, { port: val }); }, user: function (val) { return produce(Tpl.USER, { user: val }); }, path: function (val, _a) { var _b = _a === void 0 ? { trimTrail: false } : _a, trimTrail = _b.trimTrail; return produce(Tpl.PATH, { path: val }, { sanitize: trimTrail ? /^\/+|\/+$/g : /^\/+/, }); }, query: function (val, prefix) { if (prefix === void 0) { prefix = false; } var template = prefixTpl([UriPart_1.UriPart.QM, prefix], Tag.QUERY); return produce(template, { query: val }); }, fragment: function (val) { var _a; return produce(Tpl.FRAGMENT, (_a = {}, _a[Tag.FRAGMENT] = val, _a)); }, }; function produce(template, parts, options) { if (options === void 0) { options = {}; } var pattern = "{(".concat(Object.keys(parts).join('|'), ")}"); return template.replace(new RegExp(pattern, 'g'), function (_, p1) { return sanitize(parts[p1], options.sanitize); }); } function sanitize(val, slag) { if (!slag) { return val; } var needle = Array.isArray(slag) ? slag : [slag]; return needle.reduce(function (acc, replace) { return acc.replace(replace instanceof RegExp ? replace : new RegExp(replace, 'g'), ''); }, val); } function tpl() { var parts = []; for (var _i = 0; _i < arguments.length; _i++) { parts[_i] = arguments[_i]; } return parts .map(function (p) { return (/^[a-z]+$/.test(p) ? "{".concat(p, "}") : p); }) .join(''); } function prefixTpl(prefix) { var parts = []; for (var _i = 1; _i < arguments.length; _i++) { parts[_i - 1] = arguments[_i]; } var prefixStr = prefix[0], condition = prefix[1], prefixPart = condition ? prefixStr : ''; return tpl.apply(void 0, __spreadArray([prefixPart], parts, false)); } //# sourceMappingURL=UriTemplate.js.map