@libj/make-uri
Version:
109 lines • 4.02 kB
JavaScript
;
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