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.
Files changed (80) hide show
  1. package/LICENSE.md +7 -0
  2. package/README.md +2 -0
  3. package/dist/cjs/errors.d.ts +11 -0
  4. package/dist/cjs/errors.d.ts.map +1 -0
  5. package/dist/cjs/errors.js +39 -0
  6. package/dist/cjs/errors.js.map +1 -0
  7. package/dist/cjs/exacturi.d.ts +91 -0
  8. package/dist/cjs/exacturi.d.ts.map +1 -0
  9. package/dist/cjs/exacturi.js +332 -0
  10. package/dist/cjs/exacturi.js.map +1 -0
  11. package/dist/cjs/index.d.ts +29 -0
  12. package/dist/cjs/index.d.ts.map +1 -0
  13. package/dist/cjs/index.js +19 -0
  14. package/dist/cjs/index.js.map +1 -0
  15. package/dist/cjs/parts.d.ts +15 -0
  16. package/dist/cjs/parts.d.ts.map +1 -0
  17. package/dist/cjs/parts.js +3 -0
  18. package/dist/cjs/parts.js.map +1 -0
  19. package/dist/cjs/reuri.d.ts +92 -0
  20. package/dist/cjs/reuri.d.ts.map +1 -0
  21. package/dist/cjs/reuri.js +345 -0
  22. package/dist/cjs/reuri.js.map +1 -0
  23. package/dist/cjs/utils.d.ts +3 -0
  24. package/dist/cjs/utils.d.ts.map +1 -0
  25. package/dist/cjs/utils.js +45 -0
  26. package/dist/cjs/utils.js.map +1 -0
  27. package/dist/esm/errors.d.ts +11 -0
  28. package/dist/esm/errors.d.ts.map +1 -0
  29. package/dist/esm/errors.js +28 -0
  30. package/dist/esm/errors.js.map +1 -0
  31. package/dist/esm/exacturi.d.ts +91 -0
  32. package/dist/esm/exacturi.d.ts.map +1 -0
  33. package/dist/esm/exacturi.js +328 -0
  34. package/dist/esm/exacturi.js.map +1 -0
  35. package/dist/esm/index.d.ts +29 -0
  36. package/dist/esm/index.d.ts.map +1 -0
  37. package/dist/esm/index.js +13 -0
  38. package/dist/esm/index.js.map +1 -0
  39. package/dist/esm/parts.d.ts +15 -0
  40. package/dist/esm/parts.d.ts.map +1 -0
  41. package/dist/esm/parts.js +2 -0
  42. package/dist/esm/parts.js.map +1 -0
  43. package/dist/esm/reuri.d.ts +92 -0
  44. package/dist/esm/reuri.d.ts.map +1 -0
  45. package/dist/esm/reuri.js +341 -0
  46. package/dist/esm/reuri.js.map +1 -0
  47. package/dist/esm/utils.d.ts +3 -0
  48. package/dist/esm/utils.d.ts.map +1 -0
  49. package/dist/esm/utils.js +41 -0
  50. package/dist/esm/utils.js.map +1 -0
  51. package/dist/lib/errors.d.ts +14 -0
  52. package/dist/lib/errors.d.ts.map +1 -0
  53. package/dist/lib/errors.js +52 -0
  54. package/dist/lib/index.d.ts +31 -0
  55. package/dist/lib/index.d.ts.map +1 -0
  56. package/dist/lib/index.js +20 -0
  57. package/dist/lib/parts.d.ts +18 -0
  58. package/dist/lib/parts.d.ts.map +1 -0
  59. package/dist/lib/parts.js +3 -0
  60. package/dist/lib/payload.d.ts +17 -0
  61. package/dist/lib/payload.d.ts.map +1 -0
  62. package/dist/lib/payload.js +126 -0
  63. package/dist/lib/reuri.d.ts +127 -0
  64. package/dist/lib/reuri.d.ts.map +1 -0
  65. package/dist/lib/reuri.js +457 -0
  66. package/dist/lib/utils.d.ts +2 -0
  67. package/dist/lib/utils.d.ts.map +1 -0
  68. package/dist/lib/utils.js +26 -0
  69. package/dist/test/basic.test.js +319 -0
  70. package/dist/test/basic.test.js.map +1 -0
  71. package/dist/test/extras.test.js +77 -0
  72. package/dist/test/extras.test.js.map +1 -0
  73. package/dist/test/matching.test.js +80 -0
  74. package/dist/test/matching.test.js.map +1 -0
  75. package/package.json +101 -0
  76. package/src/errors.ts +31 -0
  77. package/src/exacturi.ts +444 -0
  78. package/src/index.ts +37 -0
  79. package/src/parts.ts +29 -0
  80. 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":"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"}