@synnaxlabs/freighter 0.1.0 → 0.2.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/.editorconfig +15 -0
- package/.eslintrc.json +33 -0
- package/.gitignore +9 -0
- package/.nyc_output/3238f10e-9572-49ec-ab9d-28cbcaa6152a.json +1 -0
- package/.nyc_output/4e78a5c9-c0ca-4664-aa04-f478522608eb.json +1 -0
- package/.nyc_output/6a2244f2-5aea-45c7-8eeb-e14b454f0096.json +1 -0
- package/.nyc_output/dd1075a0-827b-4154-a75e-9bc90a4e16d0.json +1 -0
- package/.nyc_output/f829ad27-9bcd-4604-ae57-aae8c6f28d51.json +1 -0
- package/.nyc_output/fabc60f1-8fc5-4a1e-bea0-dc1fbcc31c9c.json +1 -0
- package/.nyc_output/processinfo/3238f10e-9572-49ec-ab9d-28cbcaa6152a.json +1 -0
- package/.nyc_output/processinfo/4e78a5c9-c0ca-4664-aa04-f478522608eb.json +1 -0
- package/.nyc_output/processinfo/6a2244f2-5aea-45c7-8eeb-e14b454f0096.json +1 -0
- package/.nyc_output/processinfo/dd1075a0-827b-4154-a75e-9bc90a4e16d0.json +1 -0
- package/.nyc_output/processinfo/f829ad27-9bcd-4604-ae57-aae8c6f28d51.json +1 -0
- package/.nyc_output/processinfo/fabc60f1-8fc5-4a1e-bea0-dc1fbcc31c9c.json +1 -0
- package/.nyc_output/processinfo/index.json +1 -0
- package/.prettierignore +2 -0
- package/.prettierrc +3 -0
- package/.vscode/settings.json +4 -0
- package/build/main/index.d.ts +2 -0
- package/build/main/index.js +4 -2
- package/build/main/lib/caseconv.js +7 -7
- package/build/main/lib/encoder.d.ts +8 -9
- package/build/main/lib/encoder.js +3 -7
- package/build/main/lib/encoder.spec.js +2 -2
- package/build/main/lib/errors.d.ts +34 -24
- package/build/main/lib/errors.js +117 -99
- package/build/main/lib/errors.spec.js +63 -51
- package/build/main/lib/http.d.ts +11 -7
- package/build/main/lib/http.js +44 -29
- package/build/main/lib/http.spec.js +14 -4
- package/build/main/lib/middleware.d.ts +45 -0
- package/build/main/lib/middleware.js +38 -0
- package/build/main/lib/runtime.d.ts +2 -2
- package/build/main/lib/runtime.js +17 -15
- package/build/main/lib/stream.d.ts +2 -1
- package/build/main/lib/transport.d.ts +13 -0
- package/build/main/lib/transport.js +3 -0
- package/build/main/lib/unary.d.ts +2 -1
- package/build/main/lib/url.d.ts +30 -29
- package/build/main/lib/url.js +54 -46
- package/build/main/lib/url.spec.js +35 -30
- package/build/main/lib/util/log.d.ts +2 -0
- package/build/main/lib/util/log.js +15 -0
- package/build/main/lib/websocket.d.ts +7 -3
- package/build/main/lib/websocket.js +37 -19
- package/build/main/lib/websocket.spec.d.ts +1 -0
- package/build/main/lib/websocket.spec.js +86 -0
- package/build/main/lib/ws.spec.js +96 -54
- package/build/module/index.d.ts +2 -0
- package/build/module/index.js +2 -1
- package/build/module/lib/caseconv.js +8 -5
- package/build/module/lib/encoder.d.ts +8 -9
- package/build/module/lib/encoder.js +3 -7
- package/build/module/lib/encoder.spec.js +2 -2
- package/build/module/lib/errors.d.ts +34 -24
- package/build/module/lib/errors.js +101 -97
- package/build/module/lib/errors.spec.js +64 -50
- package/build/module/lib/http.d.ts +11 -7
- package/build/module/lib/http.js +42 -28
- package/build/module/lib/http.spec.js +14 -4
- package/build/module/lib/middleware.d.ts +45 -0
- package/build/module/lib/middleware.js +32 -0
- package/build/module/lib/runtime.d.ts +2 -2
- package/build/module/lib/runtime.js +14 -12
- package/build/module/lib/stream.d.ts +2 -1
- package/build/module/lib/transport.d.ts +13 -0
- package/build/module/lib/transport.js +2 -0
- package/build/module/lib/unary.d.ts +2 -1
- package/build/module/lib/url.d.ts +30 -29
- package/build/module/lib/url.js +55 -51
- package/build/module/lib/url.spec.js +26 -23
- package/build/module/lib/util/log.d.ts +2 -0
- package/build/module/lib/util/log.js +11 -0
- package/build/module/lib/websocket.d.ts +7 -3
- package/build/module/lib/websocket.js +40 -19
- package/build/module/lib/websocket.spec.d.ts +1 -0
- package/build/module/lib/websocket.spec.js +82 -0
- package/build/module/lib/ws.spec.js +68 -43
- package/build/tsconfig.module.tsbuildinfo +1 -0
- package/build/tsconfig.tsbuildinfo +1 -0
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/caseconv.ts.html +124 -0
- package/coverage/encoder.ts.html +403 -0
- package/coverage/errors.ts.html +727 -0
- package/coverage/favicon.png +0 -0
- package/coverage/http.ts.html +532 -0
- package/coverage/index.html +221 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/caseconv.ts.html +124 -0
- package/coverage/lcov-report/encoder.ts.html +403 -0
- package/coverage/lcov-report/errors.ts.html +727 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/http.ts.html +532 -0
- package/coverage/lcov-report/index.html +221 -0
- package/coverage/lcov-report/middleware.ts.html +286 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/runtime.ts.html +154 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +196 -0
- package/coverage/lcov-report/url.ts.html +322 -0
- package/coverage/lcov-report/websocket.ts.html +760 -0
- package/coverage/lcov.info +552 -0
- package/coverage/middleware.ts.html +286 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/runtime.ts.html +154 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +196 -0
- package/coverage/url.ts.html +322 -0
- package/coverage/websocket.ts.html +760 -0
- package/package.json +3 -2
- package/src/index.ts +25 -0
- package/src/lib/caseconv.ts +13 -0
- package/src/lib/encoder.spec.ts +23 -0
- package/src/lib/encoder.ts +105 -0
- package/src/lib/errors.spec.ts +98 -0
- package/src/lib/errors.ts +214 -0
- package/src/lib/http.spec.ts +85 -0
- package/src/lib/http.ts +149 -0
- package/src/lib/middleware.ts +67 -0
- package/src/lib/runtime.ts +23 -0
- package/src/lib/stream.ts +88 -0
- package/src/lib/transport.ts +14 -0
- package/src/lib/unary.ts +21 -0
- package/src/lib/url.spec.ts +37 -0
- package/src/lib/url.ts +79 -0
- package/src/lib/util/log.ts +12 -0
- package/src/lib/websocket.spec.ts +106 -0
- package/src/lib/websocket.ts +225 -0
- package/src/types/example.d.ts +24 -0
- package/tsconfig.json +47 -0
- package/tsconfig.module.json +9 -0
- package/yarn.lock +5878 -0
package/build/main/lib/http.js
CHANGED
|
@@ -3,37 +3,45 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.POSTClient = exports.GETClient = exports.HTTPClientFactory = void 0;
|
|
6
|
+
exports.buildQueryString = exports.POSTClient = exports.GETClient = exports.CONTENT_TYPE_HEADER_KEY = exports.HTTPClientFactory = void 0;
|
|
7
7
|
const axios_1 = __importDefault(require("axios"));
|
|
8
8
|
const errors_1 = require("./errors");
|
|
9
|
+
const middleware_1 = require("./middleware");
|
|
9
10
|
/**
|
|
10
|
-
* HTTPClientFactory provides a POST and GET implementation of the Unary
|
|
11
|
+
* HTTPClientFactory provides a POST and GET implementation of the Unary
|
|
12
|
+
* protocol.
|
|
11
13
|
*
|
|
12
14
|
* @param url - The base URL of the API.
|
|
13
15
|
* @param encoder - The encoder/decoder to use for the request/response.
|
|
14
16
|
*/
|
|
15
|
-
class HTTPClientFactory {
|
|
17
|
+
class HTTPClientFactory extends middleware_1.MiddlewareCollector {
|
|
16
18
|
constructor(endpoint, encoder) {
|
|
19
|
+
super();
|
|
17
20
|
this.endpoint = endpoint;
|
|
18
21
|
this.encoder = encoder;
|
|
19
22
|
}
|
|
20
23
|
getClient() {
|
|
21
|
-
|
|
24
|
+
const gc = new GETClient(this.endpoint, this.encoder);
|
|
25
|
+
gc.use(...this.middleware);
|
|
26
|
+
return gc;
|
|
22
27
|
}
|
|
23
28
|
postClient() {
|
|
24
|
-
|
|
29
|
+
const pc = new POSTClient(this.endpoint, this.encoder);
|
|
30
|
+
pc.use(...this.middleware);
|
|
31
|
+
return pc;
|
|
25
32
|
}
|
|
26
33
|
}
|
|
27
34
|
exports.HTTPClientFactory = HTTPClientFactory;
|
|
28
|
-
|
|
35
|
+
exports.CONTENT_TYPE_HEADER_KEY = 'Content-Type';
|
|
36
|
+
class Core extends middleware_1.MiddlewareCollector {
|
|
29
37
|
constructor(endpoint, encoder) {
|
|
38
|
+
super();
|
|
30
39
|
this.endpoint = endpoint.replace({ protocol: 'http' });
|
|
31
40
|
this.encoder = encoder;
|
|
32
41
|
}
|
|
33
42
|
get headers() {
|
|
34
43
|
return {
|
|
35
|
-
[
|
|
36
|
-
[Core.ERROR_ENCODING_HEADER_KEY]: Core.ERROR_ENCODING_HEADER_VALUE,
|
|
44
|
+
[exports.CONTENT_TYPE_HEADER_KEY]: this.encoder.contentType,
|
|
37
45
|
};
|
|
38
46
|
}
|
|
39
47
|
requestConfig() {
|
|
@@ -45,33 +53,38 @@ class Core {
|
|
|
45
53
|
};
|
|
46
54
|
}
|
|
47
55
|
async execute(request, resSchema) {
|
|
48
|
-
|
|
49
|
-
if (
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
56
|
+
let rs = undefined;
|
|
57
|
+
if (!request.url)
|
|
58
|
+
throw new Error('[freighter.http] - expected valid request url');
|
|
59
|
+
const err = await this.executeMiddleware({ target: request.url, protocol: 'http', params: {} }, async (md) => {
|
|
60
|
+
request.headers = Object.assign(Object.assign(Object.assign({}, request.headers), this.headers), md.params);
|
|
61
|
+
const httpRes = await axios_1.default.request(request);
|
|
62
|
+
if (httpRes.status < 200 || httpRes.status >= 300) {
|
|
63
|
+
try {
|
|
64
|
+
const err = this.encoder.decode(httpRes.data, errors_1.ErrorPayloadSchema);
|
|
65
|
+
return (0, errors_1.decodeError)(err);
|
|
66
|
+
}
|
|
67
|
+
catch (_a) {
|
|
68
|
+
return new Error(httpRes.data);
|
|
69
|
+
}
|
|
53
70
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
const data = this.encoder.decode(response.data, resSchema);
|
|
59
|
-
return [data, undefined];
|
|
71
|
+
rs = this.encoder.decode(httpRes.data, resSchema);
|
|
72
|
+
return undefined;
|
|
73
|
+
});
|
|
74
|
+
return [rs, err];
|
|
60
75
|
}
|
|
61
76
|
}
|
|
62
|
-
Core.ERROR_ENCODING_HEADER_KEY = 'Error-Encoding';
|
|
63
|
-
Core.ERROR_ENCODING_HEADER_VALUE = 'freighter';
|
|
64
|
-
Core.CONTENT_TYPE_HEADER_KEY = 'Content-Type';
|
|
65
77
|
/**
|
|
66
78
|
* Implementation of the UnaryClient protocol backed by HTTP GET requests. It
|
|
67
79
|
* should not be instantiated directly, but through the HTTPClientFactory.
|
|
68
80
|
*/
|
|
69
81
|
class GETClient extends Core {
|
|
70
82
|
async send(target, req, resSchema) {
|
|
71
|
-
const queryString = buildQueryString(req);
|
|
72
83
|
const request = this.requestConfig();
|
|
73
84
|
request.method = 'GET';
|
|
74
|
-
request.url =
|
|
85
|
+
request.url =
|
|
86
|
+
this.endpoint.child(target).stringify() +
|
|
87
|
+
(0, exports.buildQueryString)({ request: req });
|
|
75
88
|
return await this.execute(request, resSchema);
|
|
76
89
|
}
|
|
77
90
|
}
|
|
@@ -91,9 +104,11 @@ class POSTClient extends Core {
|
|
|
91
104
|
}
|
|
92
105
|
}
|
|
93
106
|
exports.POSTClient = POSTClient;
|
|
94
|
-
const buildQueryString = (request) => {
|
|
95
|
-
return
|
|
96
|
-
.
|
|
97
|
-
|
|
107
|
+
const buildQueryString = ({ request, prefix = '', }) => {
|
|
108
|
+
return ('?' +
|
|
109
|
+
Object.keys(request)
|
|
110
|
+
.map((key) => `${prefix}${key}=${request[key]}`)
|
|
111
|
+
.join('&'));
|
|
98
112
|
};
|
|
99
|
-
|
|
113
|
+
exports.buildQueryString = buildQueryString;
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvaHR0cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxrREFBa0Q7QUFJbEQscUNBQTJEO0FBQzNELDZDQUE2RDtBQUk3RDs7Ozs7O0dBTUc7QUFDSCxNQUFhLGlCQUFrQixTQUFRLGdDQUFtQjtJQUl4RCxZQUFZLFFBQWEsRUFBRSxPQUF1QjtRQUNoRCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxTQUFTO1FBQ1AsTUFBTSxFQUFFLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEQsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzQixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxVQUFVO1FBQ1IsTUFBTSxFQUFFLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkQsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzQixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7Q0FDRjtBQXJCRCw4Q0FxQkM7QUFFWSxRQUFBLHVCQUF1QixHQUFHLGNBQWMsQ0FBQztBQUV0RCxNQUFNLElBQUssU0FBUSxnQ0FBbUI7SUFJcEMsWUFBWSxRQUFhLEVBQUUsT0FBdUI7UUFDaEQsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN2RCxJQUFJLENB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
|
|
@@ -11,7 +11,7 @@ const url_1 = __importDefault(require("./url"));
|
|
|
11
11
|
const ENDPOINT = new url_1.default({
|
|
12
12
|
host: '127.0.0.1',
|
|
13
13
|
port: 8080,
|
|
14
|
-
pathPrefix: '
|
|
14
|
+
pathPrefix: 'unary',
|
|
15
15
|
});
|
|
16
16
|
const factory = new http_1.HTTPClientFactory(ENDPOINT, new encoder_1.JSONEncoderDecoder());
|
|
17
17
|
const MessageSchema = zod_1.z.object({
|
|
@@ -38,12 +38,22 @@ const postClient = factory.postClient();
|
|
|
38
38
|
});
|
|
39
39
|
(0, ava_1.default)('[http] - get not found', async (t) => {
|
|
40
40
|
const [response, error] = await getClient.send('/not-found', {}, MessageSchema);
|
|
41
|
-
t.is(error === null || error === void 0 ? void 0 : error.message, 'Cannot GET /
|
|
41
|
+
t.is(error === null || error === void 0 ? void 0 : error.message, 'Cannot GET /unary/not-found');
|
|
42
42
|
t.is(response, undefined);
|
|
43
43
|
});
|
|
44
44
|
(0, ava_1.default)('[http] - post not found', async (t) => {
|
|
45
45
|
const [response, error] = await postClient.send('/not-found', {}, MessageSchema);
|
|
46
|
-
t.is(error === null || error === void 0 ? void 0 : error.message, 'Cannot POST /
|
|
46
|
+
t.is(error === null || error === void 0 ? void 0 : error.message, 'Cannot POST /unary/not-found');
|
|
47
47
|
t.is(response, undefined);
|
|
48
48
|
});
|
|
49
|
-
|
|
49
|
+
(0, ava_1.default)('[http] - middleware', async (t) => {
|
|
50
|
+
const client = factory.getClient();
|
|
51
|
+
client.use(async (md, next) => {
|
|
52
|
+
md.params['Test'] = 'test';
|
|
53
|
+
return await next(md);
|
|
54
|
+
});
|
|
55
|
+
const [response, error] = await client.send('/middlewareCheck', {}, MessageSchema);
|
|
56
|
+
t.is(error, undefined);
|
|
57
|
+
t.is(response === null || response === void 0 ? void 0 : response.message, '');
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9odHRwLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw4Q0FBdUI7QUFDdkIsNkJBQXdCO0FBRXhCLHVDQUErQztBQUMvQyxpQ0FBMkM7QUFDM0MsZ0RBQXdCO0FBRXhCLE1BQU0sUUFBUSxHQUFHLElBQUksYUFBRyxDQUFDO0lBQ3ZCLElBQUksRUFBRSxXQUFXO0lBQ2pCLElBQUksRUFBRSxJQUFJO0lBQ1YsVUFBVSxFQUFFLE9BQU87Q0FDcEIsQ0FBQyxDQUFDO0FBRUgsTUFBTSxPQUFPLEdBQUcsSUFBSSx3QkFBaUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSw0QkFBa0IsRUFBRSxDQUFDLENBQUM7QUFFMUUsTUFBTSxhQUFhLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM3QixFQUFFLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN6QixPQUFPLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUMvQixDQUFDLENBQUM7QUFJSCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDdEMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBRXhDLElBQUEsYUFBSSxFQUFDLG9CQUFvQixFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNyQyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxHQUFHLE1BQU0sVUFBVSxDQUFDLElBQUksQ0FDN0MsT0FBTyxFQUNQO1FBQ0UsRUFBRSxFQUFFLENBQUM7UUFDTCxPQUFPLEVBQUUsT0FBTztLQUNqQixFQUNELGFBQWEsQ0FDZCxDQUFDO0lBQ0YsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkIsQ0FBQyxDQUFDLFNBQVMsQ0FB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
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MetaData is the metadata associated with a freighter transport request.
|
|
3
|
+
*
|
|
4
|
+
* @property target - The target the request is being issued to.
|
|
5
|
+
* @property protocol - The protocol used to issue the request.
|
|
6
|
+
* @property params - Arbitrary string parameters that can be set by client side
|
|
7
|
+
* middleware and read by server side middleware.
|
|
8
|
+
*/
|
|
9
|
+
export declare type MetaData = {
|
|
10
|
+
target: string;
|
|
11
|
+
protocol: string;
|
|
12
|
+
params: Record<string, string>;
|
|
13
|
+
};
|
|
14
|
+
/** Next executes the next middleware in the chain. */
|
|
15
|
+
export declare type Next = (md: MetaData) => Promise<Error | undefined>;
|
|
16
|
+
/**
|
|
17
|
+
* Middleware represents a general middleware function that can be used to
|
|
18
|
+
* parse/attach metadata to a request or alter its behavior.
|
|
19
|
+
*/
|
|
20
|
+
export declare type Middleware = (md: MetaData, next: Next) => Promise<Error | undefined>;
|
|
21
|
+
/**
|
|
22
|
+
* Finalizer is a middleware that is executed as the last step in the chain.
|
|
23
|
+
* Finalizer middleware should be used to execute the request.
|
|
24
|
+
*/
|
|
25
|
+
declare type Finalizer = (md: MetaData) => Promise<Error | undefined>;
|
|
26
|
+
/**
|
|
27
|
+
* MiddlewareCollector is a class that can be used to collect and execute
|
|
28
|
+
* middleware in order to implement the Transport interface.
|
|
29
|
+
*/
|
|
30
|
+
export declare class MiddlewareCollector {
|
|
31
|
+
middleware: Middleware[];
|
|
32
|
+
/** Implements the Transport interface */
|
|
33
|
+
use(...mw: Middleware[]): void;
|
|
34
|
+
/**
|
|
35
|
+
* Executes middleware in order, passing the the metadata to each middleware
|
|
36
|
+
* until the end of the chain is reached. It then calls the finalizer with the
|
|
37
|
+
* metadata.
|
|
38
|
+
*
|
|
39
|
+
* @param md - The metadata to pass to the middleware.
|
|
40
|
+
* @param finalizer - The finalizer to call with the metadata.
|
|
41
|
+
* @returns An error if one was encountered, otherwise undefined.
|
|
42
|
+
*/
|
|
43
|
+
executeMiddleware(md: MetaData, finalizer: Finalizer): Promise<Error | undefined>;
|
|
44
|
+
}
|
|
45
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MiddlewareCollector = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* MiddlewareCollector is a class that can be used to collect and execute
|
|
6
|
+
* middleware in order to implement the Transport interface.
|
|
7
|
+
*/
|
|
8
|
+
class MiddlewareCollector {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.middleware = [];
|
|
11
|
+
}
|
|
12
|
+
/** Implements the Transport interface */
|
|
13
|
+
use(...mw) {
|
|
14
|
+
this.middleware.push(...mw);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Executes middleware in order, passing the the metadata to each middleware
|
|
18
|
+
* until the end of the chain is reached. It then calls the finalizer with the
|
|
19
|
+
* metadata.
|
|
20
|
+
*
|
|
21
|
+
* @param md - The metadata to pass to the middleware.
|
|
22
|
+
* @param finalizer - The finalizer to call with the metadata.
|
|
23
|
+
* @returns An error if one was encountered, otherwise undefined.
|
|
24
|
+
*/
|
|
25
|
+
executeMiddleware(md, finalizer) {
|
|
26
|
+
let i = 0;
|
|
27
|
+
const next = (md) => {
|
|
28
|
+
if (i == this.middleware.length)
|
|
29
|
+
return finalizer(md);
|
|
30
|
+
const _mw = this.middleware[i];
|
|
31
|
+
i++;
|
|
32
|
+
return _mw(md, next);
|
|
33
|
+
};
|
|
34
|
+
return next(md);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.MiddlewareCollector = MiddlewareCollector;
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFnQ0E7OztHQUdHO0FBQ0gsTUFBYSxtQkFBbUI7SUFBaEM7UUFDRSxlQUFVLEdBQWlCLEVBQUUsQ0FBQztJQTZCaEMsQ0FBQztJQTNCQyx5Q0FBeUM7SUFDekMsR0FBRyxDQUFDLEdBQUcsRUFBZ0I7UUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxpQkFBaUIsQ0FDZixFQUFZLEVBQ1osU0FBb0I7UUFFcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsTUFBTSxJQUFJLEdBQUcsQ0FBQyxFQUFZLEVBQThCLEVBQUU7WUFDeEQsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNO2dCQUFFLE9BQU8sU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3RELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0IsQ0FBQyxFQUFFLENBQUM7WUFDSixPQUFPLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEIsQ0FBQztDQUNGO0FBOUJELGtEQThCQyJ9
|
|
@@ -1,22 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports,
|
|
1
|
+
'use strict';
|
|
2
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
3
3
|
exports.RUNTIME = exports.Runtime = void 0;
|
|
4
4
|
var Runtime;
|
|
5
5
|
(function (Runtime) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
})(Runtime = exports.Runtime || (exports.Runtime = {}));
|
|
6
|
+
Runtime['Browser'] = 'browser';
|
|
7
|
+
Runtime['Node'] = 'node';
|
|
8
|
+
})((Runtime = exports.Runtime || (exports.Runtime = {})));
|
|
9
9
|
const detectRuntime = () => {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
console.warn('Freighter unable to safely detect runtime, assuming browser');
|
|
10
|
+
if (
|
|
11
|
+
typeof process !== 'undefined' &&
|
|
12
|
+
process.versions != null &&
|
|
13
|
+
process.versions.node != null
|
|
14
|
+
) {
|
|
15
|
+
return Runtime.Node;
|
|
16
|
+
}
|
|
17
|
+
if (typeof window !== 'undefined' && typeof window.document !== 'undefined') {
|
|
19
18
|
return Runtime.Browser;
|
|
19
|
+
}
|
|
20
|
+
console.warn('Freighter unable to safely detect runtime, assuming browser');
|
|
21
|
+
return Runtime.Browser;
|
|
20
22
|
};
|
|
21
23
|
exports.RUNTIME = detectRuntime();
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcnVudGltZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFZLE9BR1g7QUFIRCxXQUFZLE9BQU87SUFDakIsOEJBQW1CLENBQUE7SUFDbkIsd0JBQWEsQ0FBQTtBQUNmLENBQUMsRUFIVyxPQUFPLEdBQVAsZUFBTyxLQUFQLGVBQU8sUUFHbEI7QUFFRCxNQUFNLGFBQWEsR0FBRyxHQUFZLEVBQUU7SUFDbEMsSUFDRSxPQUFPLE9BQU8sS0FBSyxXQUFXO1FBQzlCLE9BQU8sQ0FBQyxRQUFRLElBQUksSUFBSTtRQUN4QixPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxJQUFJLEVBQzdCO1FBQ0EsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDO0tBQ3JCO0lBRUQsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksT0FBTyxNQUFNLENBQUMsUUFBUSxLQUFLLFdBQVcsRUFBRTtRQUMzRSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUM7S0FDeEI7SUFFRCxPQUFPLENBQUMsSUFBSSxDQUFDLDZEQUE2RCxDQUFDLENBQUM7SUFDNUUsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQ3pCLENBQUMsQ0FBQztBQUVXLFFBQUEsT0FBTyxHQUFHLGFBQWEsRUFBRSxDQUFDIn0=
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcnVudGltZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFZLE9BR1g7QUFIRCxXQUFZLE9BQU87SUFDakIsOEJBQW1CLENBQUE7SUFDbkIsd0JBQWEsQ0FBQTtBQUNmLENBQUMsRUFIVyxPQUFPLEdBQVAsZUFBTyxLQUFQLGVBQU8sUUFHbEI7QUFFRCxNQUFNLGFBQWEsR0FBRyxHQUFZLEVBQUU7SUFDbEMsSUFDRSxPQUFPLE9BQU8sS0FBSyxXQUFXO1FBQzlCLE9BQU8sQ0FBQyxRQUFRLElBQUksSUFBSTtRQUN4QixPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxJQUFJLEVBQzdCO1FBQ0EsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDO0tBQ3JCO0lBRUQsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksT0FBTyxNQUFNLENBQUMsUUFBUSxLQUFLLFdBQVcsRUFBRTtRQUMzRSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUM7S0FDeEI7SUFFRCxPQUFPLENBQUMsSUFBSSxDQUFDLDZEQUE2RCxDQUFDLENBQUM7SUFDNUUsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQ3pCLENBQUMsQ0FBQztBQUVXLFFBQUEsT0FBTyxHQUFHLGFBQWEsRUFBRSxDQUFDIn0=
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ZodSchema } from 'zod';
|
|
2
|
+
import { Transport } from './transport';
|
|
2
3
|
/**
|
|
3
4
|
* Interface for an entity that receives a stream of responses.
|
|
4
5
|
*/
|
|
@@ -59,7 +60,7 @@ export interface Stream<RQ, RS> extends StreamSenderCloser<RQ>, StreamReceiver<R
|
|
|
59
60
|
/**
|
|
60
61
|
* Interface for a bidirectional stream between a client and a server.
|
|
61
62
|
*/
|
|
62
|
-
export interface StreamClient {
|
|
63
|
+
export interface StreamClient extends Transport {
|
|
63
64
|
/**
|
|
64
65
|
* Dials the target and returns a stream that can be used to issue requests
|
|
65
66
|
* and receive responses
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Middleware } from './middleware';
|
|
2
|
+
/**
|
|
3
|
+
* Transport is a based interface that represents a general transport for
|
|
4
|
+
* exchanging messages between a client and a server.
|
|
5
|
+
*/
|
|
6
|
+
export interface Transport {
|
|
7
|
+
/**
|
|
8
|
+
* Use registers middleware that will be executed in order when the transport
|
|
9
|
+
*
|
|
10
|
+
* @param mw - The middleware to register.
|
|
11
|
+
*/
|
|
12
|
+
use(...mw: Middleware[]): void;
|
|
13
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc3BvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { ZodSchema } from 'zod';
|
|
2
|
+
import { Transport } from './transport';
|
|
2
3
|
/**
|
|
3
4
|
* An interface for an entity that implements a simple request-response
|
|
4
5
|
* transport between two entities.
|
|
5
6
|
*/
|
|
6
|
-
export interface UnaryClient {
|
|
7
|
+
export interface UnaryClient extends Transport {
|
|
7
8
|
/**
|
|
8
9
|
* Sends a request to the target server and waits until a response is received.
|
|
9
10
|
* @param target - The target server to send the request to.
|
package/build/main/lib/url.d.ts
CHANGED
|
@@ -1,37 +1,38 @@
|
|
|
1
1
|
declare type URLProps = {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
host: string;
|
|
3
|
+
port: number;
|
|
4
|
+
protocol?: string;
|
|
5
|
+
pathPrefix?: string;
|
|
6
|
+
params?: string;
|
|
6
7
|
};
|
|
7
8
|
/**
|
|
8
9
|
* URL is a simple class for building and extending URLs.
|
|
9
10
|
*/
|
|
10
11
|
export default class URL {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
12
|
+
protocol: string;
|
|
13
|
+
host: string;
|
|
14
|
+
port: number;
|
|
15
|
+
path: string;
|
|
16
|
+
/**
|
|
17
|
+
* @param host - The hostname or IP address of the server.
|
|
18
|
+
* @param port - The port number of the server.
|
|
19
|
+
* @param protocol - The protocol to use for all requests. Defaults to "".
|
|
20
|
+
* @param pathPrefix - A path prefix to use for all requests. Defaults to "".
|
|
21
|
+
*/
|
|
22
|
+
constructor({ host, port, protocol, pathPrefix }: URLProps);
|
|
23
|
+
/**
|
|
24
|
+
* Replaces creates a new URL with the specified properties replaced.
|
|
25
|
+
* @param props - The properties to replace.
|
|
26
|
+
* @returns a new URL.
|
|
27
|
+
*/
|
|
28
|
+
replace(props: Partial<URLProps>): URL;
|
|
29
|
+
/**
|
|
30
|
+
* Creates a new url with the given path appended to the current path.
|
|
31
|
+
* @param path - the path to append to the URL.
|
|
32
|
+
* @returns a new URL.
|
|
33
|
+
*/
|
|
34
|
+
child(path: string): URL;
|
|
35
|
+
/** @returns a string representation of the url */
|
|
36
|
+
stringify(): string;
|
|
36
37
|
}
|
|
37
38
|
export {};
|
package/build/main/lib/url.js
CHANGED
|
@@ -1,57 +1,65 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports,
|
|
1
|
+
'use strict';
|
|
2
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
3
3
|
/**
|
|
4
4
|
* URL is a simple class for building and extending URLs.
|
|
5
5
|
*/
|
|
6
6
|
class URL {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
7
|
+
/**
|
|
8
|
+
* @param host - The hostname or IP address of the server.
|
|
9
|
+
* @param port - The port number of the server.
|
|
10
|
+
* @param protocol - The protocol to use for all requests. Defaults to "".
|
|
11
|
+
* @param pathPrefix - A path prefix to use for all requests. Defaults to "".
|
|
12
|
+
*/
|
|
13
|
+
constructor({ host, port, protocol = '', pathPrefix = '' }) {
|
|
14
|
+
this.protocol = protocol;
|
|
15
|
+
this.host = host;
|
|
16
|
+
this.port = port;
|
|
17
|
+
this.path = formatPath(pathPrefix);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Replaces creates a new URL with the specified properties replaced.
|
|
21
|
+
* @param props - The properties to replace.
|
|
22
|
+
* @returns a new URL.
|
|
23
|
+
*/
|
|
24
|
+
replace(props) {
|
|
25
|
+
return new URL({
|
|
26
|
+
host: props.host || this.host,
|
|
27
|
+
port: props.port || this.port,
|
|
28
|
+
protocol: props.protocol || this.protocol,
|
|
29
|
+
pathPrefix: props.pathPrefix || this.path,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Creates a new url with the given path appended to the current path.
|
|
34
|
+
* @param path - the path to append to the URL.
|
|
35
|
+
* @returns a new URL.
|
|
36
|
+
*/
|
|
37
|
+
child(path) {
|
|
38
|
+
return new URL(
|
|
39
|
+
Object.assign(Object.assign({}, this), {
|
|
40
|
+
pathPrefix: joinPaths(this.path, path),
|
|
41
|
+
})
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
/** @returns a string representation of the url */
|
|
45
|
+
stringify() {
|
|
46
|
+
return removeTrailingSlash(
|
|
47
|
+
`${this.protocol}://${this.host}:${this.port}/${this.path}`
|
|
48
|
+
);
|
|
49
|
+
}
|
|
44
50
|
}
|
|
45
51
|
exports.default = URL;
|
|
46
52
|
// joinPath joins the two paths, ensuring there is a single slash between them.
|
|
47
53
|
const joinPaths = (...paths) => {
|
|
48
|
-
|
|
54
|
+
return paths.map(formatPath).join('');
|
|
49
55
|
};
|
|
50
56
|
const formatPath = (path) => {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
path = path.slice(1);
|
|
55
|
-
return path;
|
|
57
|
+
if (!path.endsWith('/')) path += '/';
|
|
58
|
+
if (path.startsWith('/')) path = path.slice(1);
|
|
59
|
+
return path;
|
|
56
60
|
};
|
|
57
|
-
|
|
61
|
+
const removeTrailingSlash = (path) => {
|
|
62
|
+
if (path.endsWith('/')) path = path.slice(0, -1);
|
|
63
|
+
return path;
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi91cmwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFRQTs7R0FFRztBQUNILE1BQXFCLEdBQUc7SUFNdEI7Ozs7O09BS0c7SUFDSCxZQUFZLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEdBQUcsRUFBRSxFQUFFLFVBQVUsR0FBRyxFQUFFLEVBQVk7UUFDbEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxPQUFPLENBQUMsS0FBd0I7UUFDOUIsT0FBTyxJQUFJLEdBQUcsQ0FBQztZQUNiLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJO1lBQzdCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJO1lBQzdCLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQ3pDLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxJQUFJO1NBQzFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLElBQVk7UUFDaEIsT0FBTyxJQUFJLEdBQUcsaUNBQ1QsSUFBSSxLQUNQLFVBQVUsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFDdEMsQ0FBQztJQUNMLENBQUM7SUFFRCxrREFBa0Q7SUFDbEQsU0FBUztRQUNQLE9BQU8sbUJBQW1CLENBQ3hCLEdBQUcsSUFBSSxDQUFDLFFBQVEsTUFBTSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUM1RCxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBbkRELHNCQW1EQztBQUVELCtFQUErRTtBQUMvRSxNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQUcsS0FBZSxFQUFVLEVBQUU7SUFDL0MsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QyxDQUFDLENBQUM7QUFFRixNQUFNLFVBQVUsR0FBRyxDQUFDLElBQVksRUFBVSxFQUFFO0lBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztRQUFFLElBQUksSUFBSSxHQUFHLENBQUM7SUFDckMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztRQUFFLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBRUYsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLElBQVksRUFBVSxFQUFFO0lBQ25ELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQyJ9
|
|
@@ -1,36 +1,41 @@
|
|
|
1
|
-
|
|
2
|
-
var __importDefault =
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
var __importDefault =
|
|
3
|
+
(this && this.__importDefault) ||
|
|
4
|
+
function (mod) {
|
|
5
|
+
return mod && mod.__esModule ? mod : { default: mod };
|
|
6
|
+
};
|
|
7
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
8
|
+
const ava_1 = __importDefault(require('ava'));
|
|
9
|
+
const url_1 = __importDefault(require('./url'));
|
|
8
10
|
(0, ava_1.default)('URL - child', (t) => {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
const endpoint = new url_1.default({
|
|
12
|
+
host: 'localhost',
|
|
13
|
+
port: 8080,
|
|
14
|
+
protocol: 'http',
|
|
15
|
+
pathPrefix: 'api',
|
|
16
|
+
});
|
|
17
|
+
t.is(endpoint.child('test').stringify(), 'http://localhost:8080/api/test');
|
|
16
18
|
});
|
|
17
19
|
(0, ava_1.default)('URL - child with trailing slash', (t) => {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
20
|
+
const endpoint = new url_1.default({
|
|
21
|
+
host: 'localhost',
|
|
22
|
+
port: 8080,
|
|
23
|
+
protocol: 'http',
|
|
24
|
+
pathPrefix: 'api',
|
|
25
|
+
});
|
|
26
|
+
const child = endpoint.child('test/');
|
|
27
|
+
t.is(child.stringify(), 'http://localhost:8080/api/test');
|
|
26
28
|
});
|
|
27
29
|
(0, ava_1.default)('URL - replacing protocol', (t) => {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
const endpoint = new url_1.default({
|
|
31
|
+
host: 'localhost',
|
|
32
|
+
port: 8080,
|
|
33
|
+
protocol: 'http',
|
|
34
|
+
pathPrefix: 'api',
|
|
35
|
+
});
|
|
36
|
+
t.is(
|
|
37
|
+
endpoint.child('test').replace({ protocol: 'https' }).stringify(),
|
|
38
|
+
'https://localhost:8080/api/test'
|
|
39
|
+
);
|
|
35
40
|
});
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3VybC5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsOENBQXVCO0FBRXZCLGdEQUF3QjtBQUV4QixJQUFBLGFBQUksRUFBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtJQUN4QixNQUFNLFFBQVEsR0FBRyxJQUFJLGFBQUcsQ0FBQztRQUN2QixJQUFJLEVBQUUsV0FBVztRQUNqQixJQUFJLEVBQUUsSUFBSTtRQUNWLFFBQVEsRUFBRSxNQUFNO1FBQ2hCLFVBQVUsRUFBRSxLQUFLO0tBQ2xCLENBQUMsQ0FBQztJQUNILENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO0FBQzdFLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBQSxhQUFJLEVBQUMsaUNBQWlDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtJQUM1QyxNQUFNLFFBQVEsR0FBRyxJQUFJLGFBQUcsQ0FBQztRQUN2QixJQUFJLEVBQUUsV0FBVztRQUNqQixJQUFJLEVBQUUsSUFBSTtRQUNWLFFBQVEsRUFBRSxNQUFNO1FBQ2hCLFVBQVUsRUFBRSxLQUFLO0tBQ2xCLENBQUMsQ0FBQztJQUNILE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztBQUM1RCxDQUFDLENBQUMsQ0FBQztBQUVILElBQUEsYUFBSSxFQUFDLDBCQUEwQixFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7SUFDckMsTUFBTSxRQUFRLEdBQUcsSUFBSSxhQUFHLENBQUM7UUFDdkIsSUFBSSxFQUFFLFdBQVc7UUFDakIsSUFBSSxFQUFFLElBQUk7UUFDVixRQUFRLEVBQUUsTUFBTTtRQUNoQixVQUFVLEVBQUUsS0FBSztLQUNsQixDQUFDLENBQUM7SUFDSCxDQUFDLENBQUMsRUFBRSxDQUNGLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQ2pFLGlDQUFpQyxDQUNsQyxDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUMifQ==
|