@defjs/core 0.0.0-test-005 → 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/index.d.ts +210 -292
- package/index.js +218 -188
- package/index.min.js +1 -587
- package/package.json +4 -1
package/index.js
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
// src/error.ts
|
|
2
|
+
var ERR_ABORTED = new Error("ERR_ABORTED");
|
|
3
|
+
var ERR_TIMEOUT = new Error("ERR_TIMEOUT");
|
|
4
|
+
var ERR_NETWORK = new Error("ERR_NETWORK");
|
|
5
|
+
var ERR_NOT_FOUND_HANDLER = new Error("ERR_NOT_FOUND_HANDLER");
|
|
6
|
+
var ERR_OBSERVE = new Error("ERR_OBSERVE");
|
|
7
|
+
var ERR_NOT_SET_ALIAS = new Error("ERR_NOT_SET_ALIAS");
|
|
8
|
+
var ERR_UNSUPPORTED_FIELD_TYPE = new Error("ERR_UNSUPPORTED_FIELD_TYPE");
|
|
9
|
+
var ERR_INVALID_CLIENT = new Error("ERR_INVALID_CLIENT");
|
|
10
|
+
var ERR_NOT_FOUND_GLOBAL_CLIENT = new Error("ERR_NOT_FOUND_GLOBAL_CLIENT");
|
|
11
|
+
var ERR_INVALID_HTTP_CONTEXT_TOKEN = new Error("ERR_INVALID_HTTP_CONTEXT_TOKEN");
|
|
12
|
+
var ERR_UNKNOWN = new Error("ERR_UNKNOWN");
|
|
13
|
+
|
|
12
14
|
class HttpErrorResponse extends Error {
|
|
13
15
|
status;
|
|
14
16
|
statusText;
|
|
@@ -19,7 +21,7 @@ class HttpErrorResponse extends Error {
|
|
|
19
21
|
const status = init?.status ?? 0;
|
|
20
22
|
const statusText = init?.statusText ?? "";
|
|
21
23
|
const ok = status >= 200 && status < 300;
|
|
22
|
-
const headers = init?.headers ?? new Headers
|
|
24
|
+
const headers = init?.headers ?? new Headers;
|
|
23
25
|
const url = init?.url ?? "";
|
|
24
26
|
const body = init?.body ?? null;
|
|
25
27
|
let message;
|
|
@@ -41,6 +43,7 @@ class HttpErrorResponse extends Error {
|
|
|
41
43
|
}
|
|
42
44
|
}
|
|
43
45
|
|
|
46
|
+
// src/handler/util.ts
|
|
44
47
|
function __getContentLength(headers) {
|
|
45
48
|
const value = headers.get("Content-Length");
|
|
46
49
|
if (!value) {
|
|
@@ -87,7 +90,7 @@ function __concatChunks(chunks, totalLength) {
|
|
|
87
90
|
return chunksAll;
|
|
88
91
|
}
|
|
89
92
|
|
|
90
|
-
|
|
93
|
+
// src/context.ts
|
|
91
94
|
function makeHttpContextToken(defaultValue) {
|
|
92
95
|
Object.defineProperty(defaultValue, HTTP_CONTEXT_TOKEN, { value: defaultValue });
|
|
93
96
|
return defaultValue;
|
|
@@ -95,12 +98,11 @@ function makeHttpContextToken(defaultValue) {
|
|
|
95
98
|
function isHttpContextToken(value) {
|
|
96
99
|
return typeof value === "function" && HTTP_CONTEXT_TOKEN in value;
|
|
97
100
|
}
|
|
98
|
-
const HTTP_CONTEXT = Symbol("HttpContext");
|
|
99
101
|
function isHttpContext(value) {
|
|
100
102
|
return typeof value === "object" && value !== null && HTTP_CONTEXT in value;
|
|
101
103
|
}
|
|
102
104
|
function makeHttpContext(entries) {
|
|
103
|
-
const ctx =
|
|
105
|
+
const ctx = new Map;
|
|
104
106
|
switch (true) {
|
|
105
107
|
case Array.isArray(entries): {
|
|
106
108
|
for (const [token, value] of entries) {
|
|
@@ -150,23 +152,14 @@ function makeHttpContext(entries) {
|
|
|
150
152
|
[HTTP_CONTEXT]: ctx
|
|
151
153
|
};
|
|
152
154
|
}
|
|
155
|
+
var HTTP_CONTEXT_TOKEN = Symbol("HttpContextToken");
|
|
156
|
+
var HTTP_CONTEXT = Symbol("HttpContext");
|
|
153
157
|
|
|
154
|
-
|
|
155
|
-
var FieldType = /* @__PURE__ */ ((FieldType2) => {
|
|
156
|
-
FieldType2[FieldType2["Json"] = 0] = "Json";
|
|
157
|
-
FieldType2[FieldType2["Query"] = 1] = "Query";
|
|
158
|
-
FieldType2[FieldType2["Param"] = 2] = "Param";
|
|
159
|
-
FieldType2[FieldType2["Header"] = 3] = "Header";
|
|
160
|
-
FieldType2[FieldType2["Form"] = 4] = "Form";
|
|
161
|
-
FieldType2[FieldType2["Body"] = 5] = "Body";
|
|
162
|
-
FieldType2[FieldType2["UrlForm"] = 6] = "UrlForm";
|
|
163
|
-
return FieldType2;
|
|
164
|
-
})(FieldType || {});
|
|
158
|
+
// src/field.ts
|
|
165
159
|
function field(defaultValue) {
|
|
166
160
|
const meta = {
|
|
167
|
-
// todo
|
|
168
161
|
required: typeof defaultValue !== "undefined",
|
|
169
|
-
alias:
|
|
162
|
+
alias: new Map,
|
|
170
163
|
validators: [],
|
|
171
164
|
asyncValidator: []
|
|
172
165
|
};
|
|
@@ -199,7 +192,7 @@ function field(defaultValue) {
|
|
|
199
192
|
return getter;
|
|
200
193
|
};
|
|
201
194
|
getter.withBody = () => {
|
|
202
|
-
meta.alias.set(5 /* Body */,
|
|
195
|
+
meta.alias.set(5 /* Body */, undefined);
|
|
203
196
|
return getter;
|
|
204
197
|
};
|
|
205
198
|
getter.withValidators = (...fn) => {
|
|
@@ -224,24 +217,25 @@ function isField(value) {
|
|
|
224
217
|
function isFieldGroup(value) {
|
|
225
218
|
return !!value && typeof value === "object" && Object.entries(value).every(([, v]) => isField(v));
|
|
226
219
|
}
|
|
220
|
+
var FIELD = Symbol("field");
|
|
227
221
|
|
|
228
|
-
|
|
229
|
-
|
|
222
|
+
// src/handler/handler.ts
|
|
223
|
+
var globalHttpHandler = undefined;
|
|
224
|
+
var getGlobalHttpHandler = () => globalHttpHandler;
|
|
230
225
|
|
|
226
|
+
// src/interceptor/interceptor.ts
|
|
231
227
|
function makeInterceptorChain(interceptors) {
|
|
232
|
-
return interceptors.reduceRight(
|
|
233
|
-
(
|
|
234
|
-
|
|
235
|
-
},
|
|
236
|
-
(req, fn) => fn(req)
|
|
237
|
-
);
|
|
228
|
+
return interceptors.reduceRight((fn, interceptor) => {
|
|
229
|
+
return (initReq, finalHandlerFn) => interceptor(initReq, (req) => fn(req, finalHandlerFn));
|
|
230
|
+
}, (req, fn) => fn(req));
|
|
238
231
|
}
|
|
239
232
|
|
|
233
|
+
// src/response.ts
|
|
240
234
|
function __makeResponse(options) {
|
|
241
235
|
const status = options?.status ?? 0;
|
|
242
236
|
const statusText = options?.statusText ?? "";
|
|
243
237
|
const url = options?.url ?? "";
|
|
244
|
-
const headers = options?.headers ?? new Headers
|
|
238
|
+
const headers = options?.headers ?? new Headers;
|
|
245
239
|
const body = options?.body ?? null;
|
|
246
240
|
return {
|
|
247
241
|
status,
|
|
@@ -252,6 +246,7 @@ function __makeResponse(options) {
|
|
|
252
246
|
};
|
|
253
247
|
}
|
|
254
248
|
|
|
249
|
+
// src/request.ts
|
|
255
250
|
function __serializeBody(body) {
|
|
256
251
|
switch (true) {
|
|
257
252
|
case body instanceof FormData:
|
|
@@ -297,121 +292,124 @@ function __buildFieldDefaultValue(input) {
|
|
|
297
292
|
}
|
|
298
293
|
if (isFieldGroup(input)) {
|
|
299
294
|
const obj = {};
|
|
300
|
-
for (const [key,
|
|
301
|
-
obj[key] =
|
|
295
|
+
for (const [key, field3] of Object.entries(input)) {
|
|
296
|
+
obj[key] = field3();
|
|
302
297
|
}
|
|
303
298
|
return obj;
|
|
304
299
|
}
|
|
305
|
-
return
|
|
300
|
+
return;
|
|
306
301
|
}
|
|
307
|
-
function defineRequest(
|
|
302
|
+
function defineRequest(...args) {
|
|
303
|
+
let method;
|
|
304
|
+
let endpoint;
|
|
308
305
|
let requiredInput = false;
|
|
309
|
-
let
|
|
306
|
+
let field3;
|
|
310
307
|
let interceptors = [];
|
|
311
308
|
let responseType = "json";
|
|
312
|
-
let
|
|
313
|
-
let observe = "body";
|
|
309
|
+
let context2;
|
|
314
310
|
let withCredentials = false;
|
|
315
311
|
let validators = [];
|
|
316
312
|
let transformResponse;
|
|
317
|
-
|
|
313
|
+
switch (args.length) {
|
|
314
|
+
case 1: {
|
|
315
|
+
method = "GET";
|
|
316
|
+
endpoint = args[0];
|
|
317
|
+
break;
|
|
318
|
+
}
|
|
319
|
+
case 2: {
|
|
320
|
+
method = args[0];
|
|
321
|
+
endpoint = args[1];
|
|
322
|
+
break;
|
|
323
|
+
}
|
|
324
|
+
default:
|
|
325
|
+
throw new Error("Invalid arguments");
|
|
326
|
+
}
|
|
327
|
+
const fn = (options) => {
|
|
328
|
+
const timeout = options?.timeout || 0;
|
|
329
|
+
const client2 = options?.client || getGlobalClient();
|
|
330
|
+
const clientOptions = getClientConfig(client2);
|
|
331
|
+
const handler2 = options?.handler || clientOptions?.handler || getGlobalHttpHandler();
|
|
332
|
+
if (!handler2) {
|
|
333
|
+
throw ERR_NOT_FOUND_HANDLER;
|
|
334
|
+
}
|
|
318
335
|
let uploadProgress;
|
|
319
336
|
let downloadProgress;
|
|
320
|
-
let
|
|
321
|
-
const
|
|
337
|
+
let abortController;
|
|
338
|
+
const abortSignal = [];
|
|
339
|
+
if (options?.abort) {
|
|
340
|
+
abortSignal.push(options.abort);
|
|
341
|
+
} else {
|
|
342
|
+
abortController = new AbortController;
|
|
343
|
+
abortSignal.push(abortController.signal);
|
|
344
|
+
}
|
|
345
|
+
if (timeout > 0) {
|
|
346
|
+
abortSignal.push(AbortSignal.timeout(timeout));
|
|
347
|
+
}
|
|
348
|
+
const cancel = () => {
|
|
349
|
+
abortController?.abort();
|
|
350
|
+
};
|
|
351
|
+
const getInitValue = () => __buildFieldDefaultValue(field3);
|
|
322
352
|
const setUploadProgress = (fn2) => {
|
|
323
353
|
uploadProgress = fn2;
|
|
324
354
|
};
|
|
325
355
|
const setDownloadProgress = (fn2) => {
|
|
326
356
|
downloadProgress = fn2;
|
|
327
357
|
};
|
|
328
|
-
const doRequest = async (...
|
|
358
|
+
const doRequest = async (...args2) => {
|
|
329
359
|
let input;
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
case 1: {
|
|
333
|
-
if (requiredInput) {
|
|
334
|
-
input = args[0];
|
|
335
|
-
} else {
|
|
336
|
-
doRequestOptions = args[0];
|
|
337
|
-
}
|
|
338
|
-
break;
|
|
339
|
-
}
|
|
340
|
-
case 2: {
|
|
341
|
-
input = args[0];
|
|
342
|
-
doRequestOptions = args[1];
|
|
343
|
-
break;
|
|
344
|
-
}
|
|
360
|
+
if (requiredInput && args2.length === 1) {
|
|
361
|
+
input = args2[0];
|
|
345
362
|
}
|
|
346
363
|
if (requiredInput && !input) {
|
|
347
|
-
throw new Error(`Because the request has input, the
|
|
364
|
+
throw new Error(`Because the request has input, the argument must be the input value`);
|
|
348
365
|
}
|
|
349
366
|
if (validators.length > 0) {
|
|
350
367
|
for (const fn2 of validators) {
|
|
351
368
|
fn2(input);
|
|
352
369
|
}
|
|
353
370
|
}
|
|
354
|
-
const timeout = doRequestOptions?.timeout || 0;
|
|
355
|
-
if (doRequestOptions?.abort) {
|
|
356
|
-
abortSignal = doRequestOptions.abort;
|
|
357
|
-
} else if (timeout > 0) {
|
|
358
|
-
abortSignal = AbortSignal.timeout(timeout);
|
|
359
|
-
}
|
|
360
|
-
const client = isClient(doRequestOptions?.client) ? doRequestOptions.client : getGlobalClient();
|
|
361
|
-
const clientOptions = getClientConfig(client);
|
|
362
371
|
const req = {
|
|
363
372
|
host: clientOptions?.host,
|
|
364
373
|
method,
|
|
365
374
|
endpoint,
|
|
366
|
-
queryParams: new URLSearchParams
|
|
367
|
-
headers: new Headers
|
|
368
|
-
body:
|
|
375
|
+
queryParams: new URLSearchParams,
|
|
376
|
+
headers: new Headers,
|
|
377
|
+
body: undefined,
|
|
369
378
|
withCredentials,
|
|
370
379
|
responseType,
|
|
371
|
-
context:
|
|
372
|
-
observe,
|
|
380
|
+
context: context2 || makeHttpContext(),
|
|
373
381
|
uploadProgress,
|
|
374
382
|
downloadProgress,
|
|
375
383
|
timeout,
|
|
376
|
-
abort: abortSignal
|
|
384
|
+
abort: AbortSignal.any(abortSignal)
|
|
377
385
|
};
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
throw ERR_NOT_FOUND_HANDLER;
|
|
386
|
+
if (requiredInput && field3) {
|
|
387
|
+
await __fillRequestFromField(req, field3, input);
|
|
381
388
|
}
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
}
|
|
385
|
-
const chain = makeInterceptorChain([...interceptors]);
|
|
386
|
-
let res = await chain(req, handler);
|
|
389
|
+
const chain = makeInterceptorChain([...clientOptions.interceptors, ...interceptors]);
|
|
390
|
+
let res = await chain(req, handler2);
|
|
387
391
|
if (typeof transformResponse === "function") {
|
|
388
392
|
try {
|
|
389
393
|
res = __makeResponse({
|
|
390
394
|
...res,
|
|
391
395
|
body: transformResponse(res)
|
|
392
396
|
});
|
|
393
|
-
} catch (
|
|
394
|
-
throw new HttpErrorResponse({ error });
|
|
397
|
+
} catch (error3) {
|
|
398
|
+
throw new HttpErrorResponse({ error: error3 });
|
|
395
399
|
}
|
|
396
400
|
}
|
|
397
|
-
|
|
398
|
-
case "body":
|
|
399
|
-
return res.body;
|
|
400
|
-
case "response":
|
|
401
|
-
return res;
|
|
402
|
-
default:
|
|
403
|
-
throw ERR_OBSERVE;
|
|
404
|
-
}
|
|
401
|
+
return res;
|
|
405
402
|
};
|
|
406
403
|
return {
|
|
407
404
|
doRequest,
|
|
405
|
+
cancel,
|
|
408
406
|
getInitValue,
|
|
409
407
|
setUploadProgress,
|
|
410
408
|
setDownloadProgress
|
|
411
409
|
};
|
|
412
410
|
};
|
|
413
411
|
fn.withField = (value) => {
|
|
414
|
-
|
|
412
|
+
field3 = value;
|
|
415
413
|
requiredInput = true;
|
|
416
414
|
return fn;
|
|
417
415
|
};
|
|
@@ -420,7 +418,7 @@ function defineRequest(method, endpoint) {
|
|
|
420
418
|
return fn;
|
|
421
419
|
};
|
|
422
420
|
fn.withContext = (value) => {
|
|
423
|
-
|
|
421
|
+
context2 = value;
|
|
424
422
|
return fn;
|
|
425
423
|
};
|
|
426
424
|
fn.withCredentials = (value) => {
|
|
@@ -435,10 +433,6 @@ function defineRequest(method, endpoint) {
|
|
|
435
433
|
transformResponse = value;
|
|
436
434
|
return fn;
|
|
437
435
|
};
|
|
438
|
-
fn.withObserve = (value) => {
|
|
439
|
-
observe = value;
|
|
440
|
-
return fn;
|
|
441
|
-
};
|
|
442
436
|
fn.withResponseType = (value) => {
|
|
443
437
|
responseType = value;
|
|
444
438
|
return fn;
|
|
@@ -501,49 +495,49 @@ async function __fillRequestFromField(request, fieldOrFieldGroup, input) {
|
|
|
501
495
|
let params;
|
|
502
496
|
let queryParams;
|
|
503
497
|
let headers;
|
|
504
|
-
let body =
|
|
498
|
+
let body = undefined;
|
|
505
499
|
const validValue = getValidValue(input, fieldOrFieldGroup());
|
|
506
500
|
const meta = __getFieldMetadata(fieldOrFieldGroup);
|
|
507
501
|
await doValid([...meta.validators, ...meta.asyncValidator], validValue);
|
|
508
502
|
for (const [type, aliasName] of meta.alias) {
|
|
509
503
|
switch (type) {
|
|
510
|
-
case
|
|
504
|
+
case 1 /* Query */: {
|
|
511
505
|
if (!aliasName) {
|
|
512
506
|
throw ERR_NOT_SET_ALIAS;
|
|
513
507
|
}
|
|
514
|
-
queryParams = appendValue(new URLSearchParams
|
|
508
|
+
queryParams = appendValue(new URLSearchParams, aliasName, validValue);
|
|
515
509
|
break;
|
|
516
510
|
}
|
|
517
|
-
case
|
|
511
|
+
case 2 /* Param */: {
|
|
518
512
|
if (!aliasName) {
|
|
519
513
|
throw ERR_NOT_SET_ALIAS;
|
|
520
514
|
}
|
|
521
|
-
params = setValue(
|
|
515
|
+
params = setValue(new Map, aliasName, validValue);
|
|
522
516
|
break;
|
|
523
517
|
}
|
|
524
|
-
case
|
|
518
|
+
case 3 /* Header */: {
|
|
525
519
|
if (!aliasName) {
|
|
526
520
|
throw ERR_NOT_SET_ALIAS;
|
|
527
521
|
}
|
|
528
|
-
headers = appendValue(new Headers
|
|
522
|
+
headers = appendValue(new Headers, aliasName, validValue);
|
|
529
523
|
break;
|
|
530
524
|
}
|
|
531
|
-
case
|
|
525
|
+
case 4 /* Form */: {
|
|
532
526
|
if (!aliasName) {
|
|
533
527
|
throw ERR_NOT_SET_ALIAS;
|
|
534
528
|
}
|
|
535
|
-
body = appendValue(new FormData
|
|
529
|
+
body = appendValue(new FormData, aliasName, validValue);
|
|
536
530
|
break;
|
|
537
531
|
}
|
|
538
|
-
case
|
|
532
|
+
case 6 /* UrlForm */: {
|
|
539
533
|
if (!aliasName) {
|
|
540
534
|
throw ERR_NOT_SET_ALIAS;
|
|
541
535
|
}
|
|
542
|
-
body = appendValue(new URLSearchParams
|
|
536
|
+
body = appendValue(new URLSearchParams, aliasName, validValue);
|
|
543
537
|
break;
|
|
544
538
|
}
|
|
545
|
-
case
|
|
546
|
-
case
|
|
539
|
+
case 0 /* Json */:
|
|
540
|
+
case 5 /* Body */:
|
|
547
541
|
body = validValue;
|
|
548
542
|
break;
|
|
549
543
|
}
|
|
@@ -557,52 +551,52 @@ async function __fillRequestFromField(request, fieldOrFieldGroup, input) {
|
|
|
557
551
|
return;
|
|
558
552
|
}
|
|
559
553
|
if (isFieldGroup(fieldOrFieldGroup) && inputIsObject(input)) {
|
|
560
|
-
let params =
|
|
561
|
-
let queryParams = new URLSearchParams
|
|
562
|
-
let headers = new Headers
|
|
563
|
-
let urlForm = new URLSearchParams
|
|
564
|
-
let formData = new FormData
|
|
554
|
+
let params = new Map;
|
|
555
|
+
let queryParams = new URLSearchParams;
|
|
556
|
+
let headers = new Headers;
|
|
557
|
+
let urlForm = new URLSearchParams;
|
|
558
|
+
let formData = new FormData;
|
|
565
559
|
const json = {};
|
|
566
|
-
let body =
|
|
560
|
+
let body = undefined;
|
|
567
561
|
let lastBodyField;
|
|
568
|
-
for (const [propertyKey,
|
|
569
|
-
const meta = __getFieldMetadata(
|
|
562
|
+
for (const [propertyKey, field3] of Object.entries(fieldOrFieldGroup)) {
|
|
563
|
+
const meta = __getFieldMetadata(field3);
|
|
570
564
|
for (const [type, aliasName] of meta.alias) {
|
|
571
565
|
const valueKey = aliasName || propertyKey;
|
|
572
|
-
const value = getValidValue(input[propertyKey],
|
|
566
|
+
const value = getValidValue(input[propertyKey], field3());
|
|
573
567
|
await doValid([...meta.validators, ...meta.asyncValidator], value);
|
|
574
568
|
switch (type) {
|
|
575
|
-
case
|
|
569
|
+
case 0 /* Json */: {
|
|
576
570
|
Object.defineProperty(json, valueKey, {
|
|
577
571
|
value,
|
|
578
572
|
writable: true,
|
|
579
573
|
enumerable: true
|
|
580
574
|
});
|
|
581
|
-
lastBodyField =
|
|
575
|
+
lastBodyField = 0 /* Json */;
|
|
582
576
|
break;
|
|
583
577
|
}
|
|
584
|
-
case
|
|
578
|
+
case 1 /* Query */:
|
|
585
579
|
queryParams = appendValue(queryParams, valueKey, value);
|
|
586
580
|
break;
|
|
587
|
-
case
|
|
581
|
+
case 2 /* Param */:
|
|
588
582
|
params = setValue(params, valueKey, value);
|
|
589
583
|
break;
|
|
590
|
-
case
|
|
584
|
+
case 3 /* Header */:
|
|
591
585
|
headers = appendValue(headers, valueKey, value);
|
|
592
586
|
break;
|
|
593
|
-
case
|
|
587
|
+
case 4 /* Form */: {
|
|
594
588
|
formData = appendValue(formData, valueKey, value);
|
|
595
|
-
lastBodyField =
|
|
589
|
+
lastBodyField = 4 /* Form */;
|
|
596
590
|
break;
|
|
597
591
|
}
|
|
598
|
-
case
|
|
592
|
+
case 6 /* UrlForm */: {
|
|
599
593
|
urlForm = appendValue(urlForm, valueKey, value);
|
|
600
|
-
lastBodyField =
|
|
594
|
+
lastBodyField = 6 /* UrlForm */;
|
|
601
595
|
break;
|
|
602
596
|
}
|
|
603
|
-
case
|
|
597
|
+
case 5 /* Body */: {
|
|
604
598
|
body = value;
|
|
605
|
-
lastBodyField =
|
|
599
|
+
lastBodyField = 5 /* Body */;
|
|
606
600
|
break;
|
|
607
601
|
}
|
|
608
602
|
}
|
|
@@ -612,16 +606,16 @@ async function __fillRequestFromField(request, fieldOrFieldGroup, input) {
|
|
|
612
606
|
request.queryParams = queryParams;
|
|
613
607
|
request.headers = headers;
|
|
614
608
|
switch (lastBodyField) {
|
|
615
|
-
case
|
|
609
|
+
case 5 /* Body */:
|
|
616
610
|
request.body = body;
|
|
617
611
|
break;
|
|
618
|
-
case
|
|
612
|
+
case 4 /* Form */:
|
|
619
613
|
request.body = formData;
|
|
620
614
|
break;
|
|
621
|
-
case
|
|
615
|
+
case 6 /* UrlForm */:
|
|
622
616
|
request.body = urlForm;
|
|
623
617
|
break;
|
|
624
|
-
case
|
|
618
|
+
case 0 /* Json */:
|
|
625
619
|
request.body = json;
|
|
626
620
|
break;
|
|
627
621
|
}
|
|
@@ -630,14 +624,15 @@ async function __fillRequestFromField(request, fieldOrFieldGroup, input) {
|
|
|
630
624
|
throw ERR_UNSUPPORTED_FIELD_TYPE;
|
|
631
625
|
}
|
|
632
626
|
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
627
|
+
// src/handler/fetch/fetch.ts
|
|
628
|
+
function __createRequest(request2) {
|
|
629
|
+
const url = new URL(request2.endpoint, request2.host);
|
|
630
|
+
if (request2.queryParams) {
|
|
631
|
+
url.search = request2.queryParams.toString();
|
|
637
632
|
}
|
|
638
|
-
const headers =
|
|
633
|
+
const headers = request2.headers ?? new Headers;
|
|
639
634
|
if (!headers.has("Content-Type")) {
|
|
640
|
-
const detectedType = __detectContentTypeHeader(
|
|
635
|
+
const detectedType = __detectContentTypeHeader(request2.body);
|
|
641
636
|
if (detectedType) {
|
|
642
637
|
headers.set("Content-Type", detectedType);
|
|
643
638
|
}
|
|
@@ -645,23 +640,23 @@ function __createRequest(request) {
|
|
|
645
640
|
if (!headers.has("Accept")) {
|
|
646
641
|
headers.set("Accept", "application/json, text/plain, */*");
|
|
647
642
|
}
|
|
648
|
-
const credentials =
|
|
643
|
+
const credentials = request2.withCredentials ? "include" : undefined;
|
|
649
644
|
return new Request(url, {
|
|
650
645
|
headers,
|
|
651
|
-
method:
|
|
652
|
-
body: __serializeBody(
|
|
653
|
-
signal:
|
|
646
|
+
method: request2.method,
|
|
647
|
+
body: __serializeBody(request2.body),
|
|
648
|
+
signal: request2.abort,
|
|
654
649
|
credentials
|
|
655
650
|
});
|
|
656
651
|
}
|
|
657
652
|
async function fetchHandler(httpRequest) {
|
|
658
653
|
const downloadProgress = httpRequest.downloadProgress;
|
|
659
|
-
const
|
|
654
|
+
const request2 = __createRequest(httpRequest);
|
|
660
655
|
const abortSignal = httpRequest.abort;
|
|
661
|
-
let
|
|
656
|
+
let response3;
|
|
662
657
|
try {
|
|
663
|
-
|
|
664
|
-
} catch (
|
|
658
|
+
response3 = await globalThis.fetch(request2);
|
|
659
|
+
} catch (error4) {
|
|
665
660
|
if (abortSignal?.aborted && abortSignal.reason instanceof Error) {
|
|
666
661
|
switch (true) {
|
|
667
662
|
case abortSignal.reason.name === "AbortError":
|
|
@@ -670,15 +665,15 @@ async function fetchHandler(httpRequest) {
|
|
|
670
665
|
throw new HttpErrorResponse({ error: ERR_TIMEOUT });
|
|
671
666
|
}
|
|
672
667
|
}
|
|
673
|
-
throw new HttpErrorResponse({ error });
|
|
668
|
+
throw new HttpErrorResponse({ error: error4 });
|
|
674
669
|
}
|
|
675
|
-
const { ok, headers, status, statusText, url } =
|
|
670
|
+
const { ok, headers, status, statusText, url } = response3;
|
|
676
671
|
const contentLength = __getContentLength(headers);
|
|
677
672
|
const contentType = __getContentType(headers);
|
|
678
673
|
let body = null;
|
|
679
|
-
if (
|
|
674
|
+
if (response3.body) {
|
|
680
675
|
const chunks = [];
|
|
681
|
-
const reader =
|
|
676
|
+
const reader = response3.body.getReader();
|
|
682
677
|
let receivedLength = 0;
|
|
683
678
|
while (true) {
|
|
684
679
|
const { done, value } = await reader.read();
|
|
@@ -700,9 +695,9 @@ async function fetchHandler(httpRequest) {
|
|
|
700
695
|
content: chunksAll,
|
|
701
696
|
contentType
|
|
702
697
|
});
|
|
703
|
-
} catch (
|
|
698
|
+
} catch (error4) {
|
|
704
699
|
throw new HttpErrorResponse({
|
|
705
|
-
error,
|
|
700
|
+
error: error4,
|
|
706
701
|
status,
|
|
707
702
|
statusText,
|
|
708
703
|
headers,
|
|
@@ -727,22 +722,19 @@ async function fetchHandler(httpRequest) {
|
|
|
727
722
|
body
|
|
728
723
|
});
|
|
729
724
|
}
|
|
730
|
-
|
|
731
|
-
const CLIENT = Symbol("Client");
|
|
732
|
-
let globalClient;
|
|
725
|
+
// src/client.ts
|
|
733
726
|
function isClient(value) {
|
|
734
727
|
return typeof value === "object" && value !== null && CLIENT in value;
|
|
735
728
|
}
|
|
736
|
-
function getClientConfig(
|
|
737
|
-
if (!isClient(
|
|
729
|
+
function getClientConfig(client2) {
|
|
730
|
+
if (!isClient(client2)) {
|
|
738
731
|
throw ERR_INVALID_CLIENT;
|
|
739
732
|
}
|
|
740
|
-
return
|
|
733
|
+
return client2[CLIENT];
|
|
741
734
|
}
|
|
742
735
|
function createClient(options) {
|
|
743
736
|
const conf = {
|
|
744
737
|
host: options.host,
|
|
745
|
-
strict: options.strict ?? true,
|
|
746
738
|
interceptors: options.interceptors ?? [],
|
|
747
739
|
handler: options.handler || fetchHandler
|
|
748
740
|
};
|
|
@@ -750,8 +742,8 @@ function createClient(options) {
|
|
|
750
742
|
[CLIENT]: conf
|
|
751
743
|
};
|
|
752
744
|
}
|
|
753
|
-
function cloneClient(
|
|
754
|
-
const preConf = getClientConfig(
|
|
745
|
+
function cloneClient(client2, options) {
|
|
746
|
+
const preConf = getClientConfig(client2);
|
|
755
747
|
const conf = {
|
|
756
748
|
...preConf,
|
|
757
749
|
...options
|
|
@@ -766,16 +758,18 @@ function getGlobalClient() {
|
|
|
766
758
|
}
|
|
767
759
|
return globalClient;
|
|
768
760
|
}
|
|
769
|
-
function setGlobalClient(
|
|
770
|
-
globalClient =
|
|
761
|
+
function setGlobalClient(client2) {
|
|
762
|
+
globalClient = client2;
|
|
771
763
|
}
|
|
772
764
|
function restGlobalClient() {
|
|
773
|
-
globalClient =
|
|
765
|
+
globalClient = undefined;
|
|
774
766
|
}
|
|
775
767
|
function createGlobalClient(options) {
|
|
776
768
|
globalClient = createClient(options);
|
|
777
769
|
}
|
|
778
|
-
|
|
770
|
+
var CLIENT = Symbol("Client");
|
|
771
|
+
var globalClient;
|
|
772
|
+
// src/interceptor/authorization/basic_auth_interceptor.ts
|
|
779
773
|
function basicAuthInterceptor(fn, options) {
|
|
780
774
|
let encode = options?.encode;
|
|
781
775
|
if (!encode) {
|
|
@@ -786,48 +780,48 @@ function basicAuthInterceptor(fn, options) {
|
|
|
786
780
|
encode = (data) => btoa(`${data.username}:${data.password}`);
|
|
787
781
|
}
|
|
788
782
|
return (req, next) => {
|
|
789
|
-
const headers = req.headers || new Headers
|
|
783
|
+
const headers = req.headers || new Headers;
|
|
790
784
|
headers.set("Authorization", `Basic ${encode(fn())}`);
|
|
791
785
|
req.headers = headers;
|
|
792
786
|
return next(req);
|
|
793
787
|
};
|
|
794
788
|
}
|
|
795
|
-
|
|
796
|
-
|
|
789
|
+
// src/validator.ts
|
|
790
|
+
var required = (value) => {
|
|
797
791
|
if (!value) {
|
|
798
792
|
return new Error("required");
|
|
799
793
|
}
|
|
800
794
|
return null;
|
|
801
795
|
};
|
|
802
|
-
|
|
796
|
+
var requiredTrue = (value) => {
|
|
803
797
|
if (typeof value !== "boolean" || !value) {
|
|
804
798
|
return new Error("requiredTrue");
|
|
805
799
|
}
|
|
806
800
|
return null;
|
|
807
801
|
};
|
|
808
|
-
|
|
802
|
+
var minLength = (min) => {
|
|
809
803
|
return (value) => {
|
|
810
804
|
if (typeof value !== "string") {
|
|
811
805
|
return new Error("invalid string");
|
|
812
806
|
}
|
|
813
|
-
if (value.length <
|
|
814
|
-
return new Error(`minLength ${
|
|
807
|
+
if (value.length < min) {
|
|
808
|
+
return new Error(`minLength ${min}`);
|
|
815
809
|
}
|
|
816
810
|
return null;
|
|
817
811
|
};
|
|
818
812
|
};
|
|
819
|
-
|
|
813
|
+
var maxLength = (max) => {
|
|
820
814
|
return (value) => {
|
|
821
815
|
if (typeof value !== "string") {
|
|
822
816
|
return new Error("invalid string");
|
|
823
817
|
}
|
|
824
|
-
if (value.length >
|
|
825
|
-
return new Error(`maxLength ${
|
|
818
|
+
if (value.length > max) {
|
|
819
|
+
return new Error(`maxLength ${max}`);
|
|
826
820
|
}
|
|
827
821
|
return null;
|
|
828
822
|
};
|
|
829
823
|
};
|
|
830
|
-
|
|
824
|
+
var min = (min2) => {
|
|
831
825
|
return (value) => {
|
|
832
826
|
if (typeof value !== "number" || isNaN(value)) {
|
|
833
827
|
return new Error("invalid number");
|
|
@@ -838,7 +832,7 @@ const min = (min2) => {
|
|
|
838
832
|
return null;
|
|
839
833
|
};
|
|
840
834
|
};
|
|
841
|
-
|
|
835
|
+
var max = (max2) => {
|
|
842
836
|
return (value) => {
|
|
843
837
|
if (typeof value !== "number" || isNaN(value)) {
|
|
844
838
|
return new Error("invalid number");
|
|
@@ -849,7 +843,7 @@ const max = (max2) => {
|
|
|
849
843
|
return null;
|
|
850
844
|
};
|
|
851
845
|
};
|
|
852
|
-
|
|
846
|
+
var pattern = (pattern2) => {
|
|
853
847
|
return (value) => {
|
|
854
848
|
if (typeof value !== "string") {
|
|
855
849
|
return new Error("invalid string");
|
|
@@ -860,5 +854,41 @@ const pattern = (pattern2) => {
|
|
|
860
854
|
return null;
|
|
861
855
|
};
|
|
862
856
|
};
|
|
863
|
-
|
|
864
|
-
|
|
857
|
+
export {
|
|
858
|
+
setGlobalClient,
|
|
859
|
+
restGlobalClient,
|
|
860
|
+
requiredTrue,
|
|
861
|
+
required,
|
|
862
|
+
pattern,
|
|
863
|
+
minLength,
|
|
864
|
+
min,
|
|
865
|
+
maxLength,
|
|
866
|
+
max,
|
|
867
|
+
makeHttpContextToken,
|
|
868
|
+
makeHttpContext,
|
|
869
|
+
isHttpContextToken,
|
|
870
|
+
isFieldGroup,
|
|
871
|
+
isField,
|
|
872
|
+
isClient,
|
|
873
|
+
getGlobalClient,
|
|
874
|
+
field,
|
|
875
|
+
fetchHandler,
|
|
876
|
+
doValid,
|
|
877
|
+
defineRequest,
|
|
878
|
+
createGlobalClient,
|
|
879
|
+
createClient,
|
|
880
|
+
cloneClient,
|
|
881
|
+
basicAuthInterceptor,
|
|
882
|
+
HttpErrorResponse,
|
|
883
|
+
ERR_UNSUPPORTED_FIELD_TYPE,
|
|
884
|
+
ERR_UNKNOWN,
|
|
885
|
+
ERR_TIMEOUT,
|
|
886
|
+
ERR_OBSERVE,
|
|
887
|
+
ERR_NOT_SET_ALIAS,
|
|
888
|
+
ERR_NOT_FOUND_HANDLER,
|
|
889
|
+
ERR_NOT_FOUND_GLOBAL_CLIENT,
|
|
890
|
+
ERR_NETWORK,
|
|
891
|
+
ERR_INVALID_HTTP_CONTEXT_TOKEN,
|
|
892
|
+
ERR_INVALID_CLIENT,
|
|
893
|
+
ERR_ABORTED
|
|
894
|
+
};
|