exacturi 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +7 -0
- package/README.md +2 -0
- package/dist/cjs/errors.d.ts +11 -0
- package/dist/cjs/errors.d.ts.map +1 -0
- package/dist/cjs/errors.js +39 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/exacturi.d.ts +91 -0
- package/dist/cjs/exacturi.d.ts.map +1 -0
- package/dist/cjs/exacturi.js +332 -0
- package/dist/cjs/exacturi.js.map +1 -0
- package/dist/cjs/index.d.ts +29 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +19 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/parts.d.ts +15 -0
- package/dist/cjs/parts.d.ts.map +1 -0
- package/dist/cjs/parts.js +3 -0
- package/dist/cjs/parts.js.map +1 -0
- package/dist/cjs/reuri.d.ts +92 -0
- package/dist/cjs/reuri.d.ts.map +1 -0
- package/dist/cjs/reuri.js +345 -0
- package/dist/cjs/reuri.js.map +1 -0
- package/dist/cjs/utils.d.ts +3 -0
- package/dist/cjs/utils.d.ts.map +1 -0
- package/dist/cjs/utils.js +45 -0
- package/dist/cjs/utils.js.map +1 -0
- package/dist/esm/errors.d.ts +11 -0
- package/dist/esm/errors.d.ts.map +1 -0
- package/dist/esm/errors.js +28 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/exacturi.d.ts +91 -0
- package/dist/esm/exacturi.d.ts.map +1 -0
- package/dist/esm/exacturi.js +328 -0
- package/dist/esm/exacturi.js.map +1 -0
- package/dist/esm/index.d.ts +29 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +13 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/parts.d.ts +15 -0
- package/dist/esm/parts.d.ts.map +1 -0
- package/dist/esm/parts.js +2 -0
- package/dist/esm/parts.js.map +1 -0
- package/dist/esm/reuri.d.ts +92 -0
- package/dist/esm/reuri.d.ts.map +1 -0
- package/dist/esm/reuri.js +341 -0
- package/dist/esm/reuri.js.map +1 -0
- package/dist/esm/utils.d.ts +3 -0
- package/dist/esm/utils.d.ts.map +1 -0
- package/dist/esm/utils.js +41 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/lib/errors.d.ts +14 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +52 -0
- package/dist/lib/index.d.ts +31 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +20 -0
- package/dist/lib/parts.d.ts +18 -0
- package/dist/lib/parts.d.ts.map +1 -0
- package/dist/lib/parts.js +3 -0
- package/dist/lib/payload.d.ts +17 -0
- package/dist/lib/payload.d.ts.map +1 -0
- package/dist/lib/payload.js +126 -0
- package/dist/lib/reuri.d.ts +127 -0
- package/dist/lib/reuri.d.ts.map +1 -0
- package/dist/lib/reuri.js +457 -0
- package/dist/lib/utils.d.ts +2 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +26 -0
- package/dist/test/basic.test.js +319 -0
- package/dist/test/basic.test.js.map +1 -0
- package/dist/test/extras.test.js +77 -0
- package/dist/test/extras.test.js.map +1 -0
- package/dist/test/matching.test.js +80 -0
- package/dist/test/matching.test.js.map +1 -0
- package/package.json +101 -0
- package/src/errors.ts +31 -0
- package/src/exacturi.ts +444 -0
- package/src/index.ts +37 -0
- package/src/parts.ts +29 -0
- package/src/utils.ts +42 -0
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getEncodedPath = exports.extractPayload = exports.encodePayload = exports.mustValidatePayload = exports.decodePayload = exports.hostnameContains = exports.payloadContains = exports.traceFlag = exports.payloadMarker = exports.eq = exports.and = void 0;
|
|
4
|
+
// A payload that can be encoded into a URL.
|
|
5
|
+
const errors_1 = require("./errors");
|
|
6
|
+
exports.and = ",,", exports.eq = "-_-", exports.payloadMarker = "~ri~", exports.traceFlag = "t~";
|
|
7
|
+
function payloadContains(child, parent) {
|
|
8
|
+
if (!child) {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
for (const [key, value] of Object.entries(parent)) {
|
|
12
|
+
if (value !== child[key]) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
exports.payloadContains = payloadContains;
|
|
19
|
+
function hostnameContains(child, parent) {
|
|
20
|
+
if (!child) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
const parentParts = parent.split(".").reverse();
|
|
24
|
+
const childParts = child.split(".").reverse();
|
|
25
|
+
if (parentParts.length > childParts.length) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
for (let i = 0; i < parentParts.length; i++) {
|
|
29
|
+
if (!parentParts[i]) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
if (childParts[i] !== parentParts[i]) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
exports.hostnameContains = hostnameContains;
|
|
39
|
+
function decodePayload(suffix) {
|
|
40
|
+
const kvps = suffix.split(exports.and);
|
|
41
|
+
const pairs = kvps.map(x => x.split(exports.eq));
|
|
42
|
+
const obj = Object.create(null);
|
|
43
|
+
for (const [k, v] of pairs) {
|
|
44
|
+
obj[k] = v == null ? true : decodeURIComponent(v);
|
|
45
|
+
}
|
|
46
|
+
return obj;
|
|
47
|
+
}
|
|
48
|
+
exports.decodePayload = decodePayload;
|
|
49
|
+
function mustValidatePayload(payload) {
|
|
50
|
+
for (const [k, v] of Object.entries(payload)) {
|
|
51
|
+
if (typeof v !== "string" && typeof v !== "boolean" && v !== undefined) {
|
|
52
|
+
throw (0, errors_1.payloadBadValueType)(k, v);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.mustValidatePayload = mustValidatePayload;
|
|
57
|
+
function encodePayload(data, flag = "") {
|
|
58
|
+
const args = [];
|
|
59
|
+
for (const [k, v] of Object.entries(data)) {
|
|
60
|
+
if (v === true) {
|
|
61
|
+
args.push([k]);
|
|
62
|
+
}
|
|
63
|
+
else if (v != null && v !== false) {
|
|
64
|
+
args.push([k, encodeURIComponent(v)]);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const payload = args.map(pair => pair.join(exports.eq)).join(exports.and);
|
|
68
|
+
return `${exports.payloadMarker}${flag}${payload}${exports.payloadMarker}`;
|
|
69
|
+
}
|
|
70
|
+
exports.encodePayload = encodePayload;
|
|
71
|
+
function extractPayload(pathWithPayloads) {
|
|
72
|
+
const pathSections = pathWithPayloads?.split(exports.payloadMarker) ?? [];
|
|
73
|
+
let path = "";
|
|
74
|
+
/*
|
|
75
|
+
* This is a shorthand for URL decoding.
|
|
76
|
+
* Basically an encoded payload is between two `infix`.
|
|
77
|
+
* So if we split by `infix`:
|
|
78
|
+
* address = slice[0] + slice[2] + slice[4] + ...
|
|
79
|
+
* encoded = [decode(slice[1]), decode(slice[3])]
|
|
80
|
+
*/
|
|
81
|
+
let payload;
|
|
82
|
+
let tracePayload;
|
|
83
|
+
for (let i = 0; i < pathSections.length; i++) {
|
|
84
|
+
const cur = pathSections[i];
|
|
85
|
+
if (i % 2 === 0) {
|
|
86
|
+
path += cur;
|
|
87
|
+
}
|
|
88
|
+
else if (cur.startsWith(exports.traceFlag) && !tracePayload) {
|
|
89
|
+
tracePayload = decodePayload(cur.slice(2));
|
|
90
|
+
}
|
|
91
|
+
else if (!payload) {
|
|
92
|
+
payload = decodePayload(cur);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
throw (0, errors_1.tooManyPayloads)(pathWithPayloads, 2);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
path,
|
|
100
|
+
payload,
|
|
101
|
+
tracePayload
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
exports.extractPayload = extractPayload;
|
|
105
|
+
function getEncodedPath(path, payload, trace) {
|
|
106
|
+
const somePayload = trace || payload;
|
|
107
|
+
if (!somePayload) {
|
|
108
|
+
return path;
|
|
109
|
+
}
|
|
110
|
+
if (!path) {
|
|
111
|
+
somePayload.__trim = true;
|
|
112
|
+
path = "/";
|
|
113
|
+
}
|
|
114
|
+
const parts = path.split("/");
|
|
115
|
+
let suffix = "";
|
|
116
|
+
if (payload) {
|
|
117
|
+
suffix += encodePayload(payload);
|
|
118
|
+
}
|
|
119
|
+
if (trace) {
|
|
120
|
+
suffix += encodePayload(trace, exports.traceFlag);
|
|
121
|
+
}
|
|
122
|
+
parts[parts.length - 1] += suffix;
|
|
123
|
+
return parts.join("/");
|
|
124
|
+
}
|
|
125
|
+
exports.getEncodedPath = getEncodedPath;
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcGF5bG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw0Q0FBNEM7QUFDNUMscUNBQWdFO0FBRW5ELFFBQUEsR0FBRyxHQUFHLElBQUksRUFDbkIsUUFBQSxFQUFFLEdBQUcsS0FBSyxFQUNWLFFBQUEsYUFBYSxHQUFHLE1BQU0sRUFDdEIsUUFBQSxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBT3JCLFNBQWdCLGVBQWUsQ0FBQyxLQUEwQixFQUFFLE1BQWU7SUFDdkUsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNSLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBQ0QsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDL0MsSUFBSSxLQUFLLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO0tBQ0o7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBVkQsMENBVUM7QUFFRCxTQUFnQixnQkFBZ0IsQ0FBQyxLQUF5QixFQUFFLE1BQWM7SUFDdEUsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNSLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBQ0QsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNoRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzlDLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFO1FBQ3hDLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FB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S0FBSyxFQUFFLGlCQUFTLENBQUMsQ0FBQztLQUM3QztJQUNELEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQztJQUNsQyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQW5CRCx3Q0FtQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBIHBheWxvYWQgdGhhdCBjYW4gYmUgZW5jb2RlZCBpbnRvIGEgVVJMLlxuaW1wb3J0IHsgcGF5bG9hZEJhZFZhbHVlVHlwZSwgdG9vTWFueVBheWxvYWRzIH0gZnJvbSBcIi4vZXJyb3JzXCI7XG5cbmV4cG9ydCBjb25zdCBhbmQgPSBcIiwsXCIsXG4gICAgZXEgPSBcIi1fLVwiLFxuICAgIHBheWxvYWRNYXJrZXIgPSBcIn5yaX5cIixcbiAgICB0cmFjZUZsYWcgPSBcInR+XCI7XG5cbmV4cG9ydCB0eXBlIFBheWxvYWQgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkPiAmIHtcbiAgICBfX3RyaW0/OiB0cnVlO1xufSAmIG9iamVjdDtcbmV4cG9ydCB0eXBlIFBheWxvYWRPckRlZmF1bHQ8VFBheWxvYWQ+ID0gVFBheWxvYWQgZXh0ZW5kcyB1bmRlZmluZWQgPyBQYXlsb2FkIDogVFBheWxvYWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXlsb2FkQ29udGFpbnMoY2hpbGQ6IFBheWxvYWQgfCB1bmRlZmluZWQsIHBhcmVudDogUGF5bG9hZCkge1xuICAgIGlmICghY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwYXJlbnQpKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gY2hpbGRba2V5XSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaG9zdG5hbWVDb250YWlucyhjaGlsZDogc3RyaW5nIHwgdW5kZWZpbmVkLCBwYXJlbnQ6IHN0cmluZykge1xuICAgIGlmICghY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnRQYXJ0cyA9IHBhcmVudC5zcGxpdChcIi5cIikucmV2ZXJzZSgpO1xuICAgIGNvbnN0IGNoaWxkUGFydHMgPSBjaGlsZC5zcGxpdChcIi5cIikucmV2ZXJzZSgpO1xuICAgIGlmIChwYXJlbnRQYXJ0cy5sZW5ndGggPiBjaGlsZFBhcnRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJlbnRQYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIXBhcmVudFBhcnRzW2ldKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hpbGRQYXJ0c1tpXSAhPT0gcGFyZW50UGFydHNbaV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVBheWxvYWQoc3VmZml4OiBzdHJpbmcpOiBQYXlsb2FkIHtcbiAgICBjb25zdCBrdnBzID0gc3VmZml4LnNwbGl0KGFuZCk7XG4gICAgY29uc3QgcGFpcnMgPSBrdnBzLm1hcCh4ID0+IHguc3BsaXQoZXEpKTtcbiAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIHBhaXJzKSB7XG4gICAgICAgIG9ialtrXSA9IHYgPT0gbnVsbCA/IHRydWUgOiBkZWNvZGVVUklDb21wb25lbnQodik7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtdXN0VmFsaWRhdGVQYXlsb2FkKHBheWxvYWQ6IFBheWxvYWQpIHtcbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhwYXlsb2FkKSkge1xuICAgICAgICBpZiAodHlwZW9mIHYgIT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHYgIT09IFwiYm9vbGVhblwiICYmIHYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgcGF5bG9hZEJhZFZhbHVlVHlwZShrLCB2KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVBheWxvYWQoZGF0YTogUGF5bG9hZCwgZmxhZyA9IFwiXCIpIHtcbiAgICBjb25zdCBhcmdzID0gW10gYXMgW3N0cmluZywgc3RyaW5nP11bXTtcbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkge1xuICAgICAgICBpZiAodiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgYXJncy5wdXNoKFtrXSk7XG4gICAgICAgIH0gZWxzZSBpZiAodiAhPSBudWxsICYmIHYgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goW2ssIGVuY29kZVVSSUNvbXBvbmVudCh2KV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHBheWxvYWQgPSBhcmdzLm1hcChwYWlyID0+IHBhaXIuam9pbihlcSkpLmpvaW4oYW5kKTtcbiAgICByZXR1cm4gYCR7cGF5bG9hZE1hcmtlcn0ke2ZsYWd9JHtwYXlsb2FkfSR7cGF5bG9hZE1hcmtlcn1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFBheWxvYWQ8VFBheT4ocGF0aFdpdGhQYXlsb2Fkcz86IHN0cmluZykge1xuICAgIGNvbnN0IHBhdGhTZWN0aW9ucyA9IHBhdGhXaXRoUGF5bG9hZHM/LnNwbGl0KHBheWxvYWRNYXJrZXIpID8/IFtdO1xuICAgIGxldCBwYXRoID0gXCJcIjtcbiAgICAvKlxuICAgICAqIFRoaXMgaXMgYSBzaG9ydGhhbmQgZm9yIFVSTCBkZWNvZGluZy5cbiAgICAgKiBCYXNpY2FsbHkgYW4gZW5jb2RlZCBwYXlsb2FkIGlzIGJldHdlZW4gdHdvIGBpbmZpeGAuXG4gICAgICogU28gaWYgd2Ugc3BsaXQgYnkgYGluZml4YDpcbiAgICAgKiAgYWRkcmVzcyA9IHNsaWNlWzBdICsgc2xpY2VbMl0gKyBzbGljZVs0XSArIC4uLlxuICAgICAqICBlbmNvZGVkID0gW2RlY29kZShzbGljZVsxXSksIGRlY29kZShzbGljZVszXSldXG4gICAgICovXG4gICAgbGV0IHBheWxvYWQ6IFRQYXkgfCB1bmRlZmluZWQ7XG4gICAgbGV0IHRyYWNlUGF5bG9hZDogUGF5bG9hZCB8IHVuZGVmaW5lZDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGhTZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjdXIgPSBwYXRoU2VjdGlvbnNbaV07XG4gICAgICAgIGlmIChpICUgMiA9PT0gMCkge1xuICAgICAgICAgICAgcGF0aCArPSBjdXI7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VyLnN0YXJ0c1dpdGgodHJhY2VGbGFnKSAmJiAhdHJhY2VQYXlsb2FkKSB7XG4gICAgICAgICAgICB0cmFjZVBheWxvYWQgPSBkZWNvZGVQYXlsb2FkKGN1ci5zbGljZSgyKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXBheWxvYWQpIHtcbiAgICAgICAgICAgIHBheWxvYWQgPSBkZWNvZGVQYXlsb2FkKGN1cikgYXMgYW55O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgdG9vTWFueVBheWxvYWRzKHBhdGhXaXRoUGF5bG9hZHMgYXMgc3RyaW5nLCAyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBwYXRoLFxuICAgICAgICBwYXlsb2FkLFxuICAgICAgICB0cmFjZVBheWxvYWRcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW5jb2RlZFBhdGgocGF0aDogc3RyaW5nLCBwYXlsb2FkPzogUGF5bG9hZCwgdHJhY2U/OiBQYXlsb2FkKSB7XG4gICAgY29uc3Qgc29tZVBheWxvYWQgPSB0cmFjZSB8fCBwYXlsb2FkO1xuICAgIGlmICghc29tZVBheWxvYWQpIHtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICAgIGlmICghcGF0aCkge1xuICAgICAgICBzb21lUGF5bG9hZC5fX3RyaW0gPSB0cnVlO1xuICAgICAgICBwYXRoID0gXCIvXCI7XG4gICAgfVxuICAgIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdChcIi9cIik7XG4gICAgbGV0IHN1ZmZpeCA9IFwiXCI7XG4gICAgaWYgKHBheWxvYWQpIHtcbiAgICAgICAgc3VmZml4ICs9IGVuY29kZVBheWxvYWQocGF5bG9hZCk7XG4gICAgfVxuICAgIGlmICh0cmFjZSkge1xuICAgICAgICBzdWZmaXggKz0gZW5jb2RlUGF5bG9hZCh0cmFjZSwgdHJhY2VGbGFnKTtcbiAgICB9XG4gICAgcGFydHNbcGFydHMubGVuZ3RoIC0gMV0gKz0gc3VmZml4O1xuICAgIHJldHVybiBwYXJ0cy5qb2luKFwiL1wiKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { Payload, PayloadOrDefault } from "./payload";
|
|
2
|
+
import { Protocol, ReUriParts, ReUriPathKey } from "./parts";
|
|
3
|
+
export interface ReUriDebugOptions {
|
|
4
|
+
dontEncodePayloads?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare const DEBUG: unique symbol;
|
|
7
|
+
/**
|
|
8
|
+
* Represents a URI and allows performing operations and inspecting it.
|
|
9
|
+
*
|
|
10
|
+
* This class is immutable.
|
|
11
|
+
*/
|
|
12
|
+
export declare class ReUri<TPay extends Payload | undefined = undefined> {
|
|
13
|
+
private _protocol;
|
|
14
|
+
private _hostname;
|
|
15
|
+
private _path;
|
|
16
|
+
private _query;
|
|
17
|
+
private _hash;
|
|
18
|
+
private _payload;
|
|
19
|
+
private _trace;
|
|
20
|
+
private _parsed;
|
|
21
|
+
private _port;
|
|
22
|
+
static readonly [DEBUG]: ReUriDebugOptions;
|
|
23
|
+
private 0;
|
|
24
|
+
constructor(_protocol: Protocol | undefined, _hostname: string | undefined, _path: string, _query: string | undefined, _hash: string | undefined, _payload: TPay, _trace: Payload | undefined, _parsed: string | undefined, _port: string | undefined);
|
|
25
|
+
static isReuri(other: unknown): boolean;
|
|
26
|
+
segments(): string[];
|
|
27
|
+
segments(overwrite: string[]): ReUri<TPay>;
|
|
28
|
+
merge(other: string): ReUri<TPay>;
|
|
29
|
+
merge(other: ReUri<any>): ReUri<TPay>;
|
|
30
|
+
pick(...keys: ReUriPathKey[]): ReUri<TPay>;
|
|
31
|
+
parts(): ReUriParts<TPay>;
|
|
32
|
+
parts<TPay2 extends Payload | undefined = TPay>(overwrite: Partial<ReUriParts<Payload>>): ReUri<TPay2>;
|
|
33
|
+
part(key: "payload"): TPay;
|
|
34
|
+
part(key: "payload", value: TPay): ReUri<TPay>;
|
|
35
|
+
part(key: "trace", value: Payload): ReUri<TPay>;
|
|
36
|
+
part(key: "trace"): Payload;
|
|
37
|
+
part(key: Exclude<ReUriPathKey, "payload" | "trace">): string | undefined;
|
|
38
|
+
part(key: ReUriPathKey, value: string | undefined): ReUri<TPay>;
|
|
39
|
+
address(address: string | undefined | null): ReUri<TPay>;
|
|
40
|
+
address(): string | undefined;
|
|
41
|
+
resource(resource: string | undefined | null): ReUri<TPay>;
|
|
42
|
+
resource(): string | undefined;
|
|
43
|
+
origin(origin: string | undefined | null): ReUri<TPay>;
|
|
44
|
+
origin(): string | undefined;
|
|
45
|
+
segment(index: number): string;
|
|
46
|
+
segment(index: number, value: string): ReUri<TPay>;
|
|
47
|
+
path(): string;
|
|
48
|
+
path(path: string | undefined | null): ReUri<TPay>;
|
|
49
|
+
port(): number | undefined;
|
|
50
|
+
port(raw: true): string | undefined;
|
|
51
|
+
port(port: number | undefined | string | null): ReUri<TPay>;
|
|
52
|
+
protocol(): Protocol | undefined;
|
|
53
|
+
protocol(proto: Protocol | null | undefined): ReUri<TPay>;
|
|
54
|
+
host(): string | undefined;
|
|
55
|
+
host(host: string | undefined | null): ReUri<TPay>;
|
|
56
|
+
hostname(): string | undefined;
|
|
57
|
+
hostname(hostname: string | undefined | null): ReUri<TPay>;
|
|
58
|
+
query(): string | undefined;
|
|
59
|
+
query(query: string | null | undefined): ReUri<TPay>;
|
|
60
|
+
hash(): string;
|
|
61
|
+
hash(hash: string | null | undefined): ReUri<TPay>;
|
|
62
|
+
private _getEncodedPath;
|
|
63
|
+
private _noCopyClone;
|
|
64
|
+
get isWeb(): boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Gets a clone of this instance. The payload is also cloned.
|
|
67
|
+
*/
|
|
68
|
+
clone(): ReUri<TPay>;
|
|
69
|
+
static empty(): ReUri<undefined>;
|
|
70
|
+
static empty<TPay extends Payload>(payload: TPay): ReUri<TPay>;
|
|
71
|
+
static parse(input: null | undefined): ReUri<undefined>;
|
|
72
|
+
static parse<TPay extends Payload | undefined>(input: string | ReUri<TPay> | Partial<ReUriParts<Payload>>): ReUri<TPay>;
|
|
73
|
+
payloadMerge<TMore extends Payload>(this: ReUri<undefined>, more: TMore): ReUri<TMore>;
|
|
74
|
+
payloadMerge<TMore extends Payload>(this: ReUri<TPay>, more: TMore): ReUri<TMore & TPay>;
|
|
75
|
+
trace(): Payload;
|
|
76
|
+
trace(payloadOwner: ReUri<any>): ReUri<TPay>;
|
|
77
|
+
trace(tracePayload: Payload): ReUri<TPay>;
|
|
78
|
+
/**
|
|
79
|
+
* Checks if this URI (CHILD) matches another URI (PARENT). The parent can be a string,
|
|
80
|
+
* a {@link ReUri} or, or an object describing the parts of a URI -- a {@link ReUriParts}.
|
|
81
|
+
*
|
|
82
|
+
* CHILD is considered to be a child of PARENT if:
|
|
83
|
+
* 1. If PARENT has a protocol, it must equal CHILD protocol.
|
|
84
|
+
* 2. If PARENT has a hostname, it must be a parent of CHILD's hostname.
|
|
85
|
+
* 3. If PARENT has a port, it must equal CHILD's port.
|
|
86
|
+
* 4. If PARENT has a path, it must be a parent of CHILD's path.
|
|
87
|
+
* 5. If PARENT has a query, it must equal CHILD's query.
|
|
88
|
+
* 6. If PARENT has a hash, it must equal CHILD's hash.
|
|
89
|
+
* 7. If PARENT has a payload, its properties must match CHILD's payload.
|
|
90
|
+
* 8. The trace payload is ignored.
|
|
91
|
+
* @param parent The parent URI to check against.
|
|
92
|
+
*
|
|
93
|
+
*/
|
|
94
|
+
matches(parent: Partial<ReUriParts<Payload | undefined>> | ReUri<Payload | undefined> | string): boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Checks if this URI equals another URI, which can be given as a string, a {@link ReUri} or, or an object describing the parts of a URI -- a
|
|
97
|
+
* {@link ReUriParts}.
|
|
98
|
+
* @param other The other URI to check against.
|
|
99
|
+
* @param skipPayload If true, the payload is ignored.
|
|
100
|
+
*/
|
|
101
|
+
equal(other: string | ReUri<Payload | undefined> | Partial<ReUriParts<Payload | undefined>>, skipPayload?: boolean): boolean;
|
|
102
|
+
get isArtificial(): boolean;
|
|
103
|
+
payload(): TPay;
|
|
104
|
+
payload(payload: null | undefined): ReUri<undefined>;
|
|
105
|
+
payload<TOther extends Payload | undefined = PayloadOrDefault<TPay>>(payload: TOther): ReUri<TOther>;
|
|
106
|
+
payload<TOther extends Payload | undefined = PayloadOrDefault<TPay>>(otherReuri: ReUri<TOther>): ReUri<TOther>;
|
|
107
|
+
private _print;
|
|
108
|
+
/**
|
|
109
|
+
* Is this a fake URL generated by reflectiz?
|
|
110
|
+
*/
|
|
111
|
+
get isReflectiz(): boolean;
|
|
112
|
+
/**
|
|
113
|
+
* Does this URL have a non-web protocol?
|
|
114
|
+
*/
|
|
115
|
+
get isNonWeb(): boolean;
|
|
116
|
+
/**
|
|
117
|
+
* Gets the full URI, including the payload.
|
|
118
|
+
*/
|
|
119
|
+
get href(): string;
|
|
120
|
+
/**
|
|
121
|
+
* Gets the full URI, minus the payload.
|
|
122
|
+
*/
|
|
123
|
+
get canonical(): string;
|
|
124
|
+
get [Symbol.toStringTag](): string;
|
|
125
|
+
toString(): string;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=reuri.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reuri.d.ts","sourceRoot":"","sources":["../../src/lib/reuri.ts"],"names":[],"mappings":"AASA,OAAO,EAKH,OAAO,EAEP,gBAAgB,EACnB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,QAAQ,EAAsB,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEjF,MAAM,WAAW,iBAAiB;IAC9B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,eAAO,MAAM,KAAK,eAAkB,CAAC;AAErC;;;;GAIG;AACH,qBAAa,KAAK,CAAC,IAAI,SAAS,OAAO,GAAG,SAAS,GAAG,SAAS;IAQvD,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,KAAK;IAfjB,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAExC;IACF,OAAO,CAAC,CAAC,CAAS;gBAIN,SAAS,EAAE,QAAQ,GAAG,SAAS,EAC/B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,QAAQ,EAAE,IAAI,EACd,MAAM,EAAE,OAAO,GAAG,SAAS,EAC3B,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,KAAK,EAAE,MAAM,GAAG,SAAS;IAcrC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO;IAS7B,QAAQ,IAAI,MAAM,EAAE;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;IAU1C,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;IACjC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;IAiBrC,IAAI,CAAC,GAAG,IAAI,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;IAQ1C,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC;IACzB,KAAK,CAAC,KAAK,SAAS,OAAO,GAAG,SAAS,GAAG,IAAI,EAC1C,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GACxC,KAAK,CAAC,KAAK,CAAC;IA6Bf,IAAI,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI;IAC1B,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAC9C,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;IAC/C,IAAI,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAC3B,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,YAAY,EAAE,SAAS,GAAG,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS;IACzE,IAAI,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;IAS/D,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxD,OAAO,IAAI,MAAM,GAAG,SAAS;IAa7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAC1D,QAAQ,IAAI,MAAM,GAAG,SAAS;IAiB9B,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACtD,MAAM,IAAI,MAAM,GAAG,SAAS;IAoB5B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAC9B,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;IAclD,IAAI,IAAI,MAAM;IAEd,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAUlD,IAAI,IAAI,MAAM,GAAG,SAAS;IAC1B,IAAI,CAAC,GAAG,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS;IACnC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAc3D,QAAQ,IAAI,QAAQ,GAAG,SAAS;IAEhC,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;IAWzD,IAAI,IAAI,MAAM,GAAG,SAAS;IAE1B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAelD,QAAQ,IAAI,MAAM,GAAG,SAAS;IAE9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAW1D,KAAK,IAAI,MAAM,GAAG,SAAS;IAE3B,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;IAWpD,IAAI,IAAI,MAAM;IAEd,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;IAUlD,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,YAAY;IAepB,IAAI,KAAK,YAER;IAED;;OAEG;IACH,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC;IAcpB,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,CAAC;IAChC,MAAM,CAAC,KAAK,CAAC,IAAI,SAAS,OAAO,EAAE,OAAO,EAAE,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAgB9D,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,GAAG,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IACvD,MAAM,CAAC,KAAK,CAAC,IAAI,SAAS,OAAO,GAAG,SAAS,EACzC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAC3D,KAAK,CAAC,IAAI,CAAC;IA8Cd,YAAY,CAAC,KAAK,SAAS,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IACtF,YAAY,CAAC,KAAK,SAAS,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;IAMxF,KAAK,IAAI,OAAO;IAChB,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;IAC5C,KAAK,CAAC,YAAY,EAAE,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;IAuBzC;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CACH,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,MAAM,GACvF,OAAO;IAgCV;;;;;OAKG;IACH,KAAK,CACD,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC,EACrF,WAAW,UAAQ,GACpB,OAAO;IAyBV,IAAI,YAAY,IAAI,OAAO,CAE1B;IAGD,OAAO,IAAI,IAAI;IACf,OAAO,CAAC,OAAO,EAAE,IAAI,GAAG,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAEpD,OAAO,CAAC,MAAM,SAAS,OAAO,GAAG,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,EAC/D,OAAO,EAAE,MAAM,GAChB,KAAK,CAAC,MAAM,CAAC;IAEhB,OAAO,CAAC,MAAM,SAAS,OAAO,GAAG,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,EAC/D,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,GAC1B,KAAK,CAAC,MAAM,CAAC;IA2BhB,OAAO,CAAC,MAAM;IAmBd;;OAEG;IACH,IAAI,WAAW,YAEd;IAED;;OAEG;IACH,IAAI,QAAQ,YAEX;IAED;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,SAAS,WAEZ;IAED,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,WAEvB;IAED,QAAQ;CAGX"}
|