@defjs/core 0.3.1 → 0.3.2
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 +2 -6
- package/index.js +102 -43
- package/index.min.js +1 -1
- package/package.json +1 -1
package/index.d.ts
CHANGED
|
@@ -68,6 +68,7 @@ export declare const ERR_TIMEOUT: Error;
|
|
|
68
68
|
export declare const ERR_NETWORK: Error;
|
|
69
69
|
export declare const ERR_NOT_FOUND_HANDLER: Error;
|
|
70
70
|
export declare const ERR_OBSERVE: Error;
|
|
71
|
+
export declare const ERR_NOT_SET_ALIAS: Error;
|
|
71
72
|
export declare const ERR_UNSUPPORTED_FIELD_TYPE: Error;
|
|
72
73
|
export declare const ERR_INVALID_CLIENT: Error;
|
|
73
74
|
export declare const ERR_NOT_FOUND_GLOBAL_CLIENT: Error;
|
|
@@ -115,10 +116,6 @@ export interface HttpProgressEvent {
|
|
|
115
116
|
readonly total: number;
|
|
116
117
|
}
|
|
117
118
|
export type HttpProgressFn = (event: HttpProgressEvent) => void;
|
|
118
|
-
/**
|
|
119
|
-
* No suitable scenario was found.
|
|
120
|
-
* export type TransformRequestFn<Input = unknown> = (input: Input, request: HttpRequest) => HttpRequest['body']
|
|
121
|
-
*/
|
|
122
119
|
export type TransformResponseFn<Output = unknown> = (response: HttpResponse<unknown>) => Output;
|
|
123
120
|
export interface HttpRequest {
|
|
124
121
|
host?: string;
|
|
@@ -148,9 +145,8 @@ export type UseRequestOptions = {
|
|
|
148
145
|
client?: Client;
|
|
149
146
|
timeout?: number;
|
|
150
147
|
};
|
|
151
|
-
export type IsOptionalObject<T> = Partial<T> extends T ? true : false;
|
|
152
148
|
export type UseRequestFn<Input, Output> = {
|
|
153
|
-
doRequest:
|
|
149
|
+
doRequest: undefined extends RequestInputValue<Input> ? (input?: RequestInputValue<Input>) => Promise<HttpResponse<Output>> : (input: RequestInputValue<Input>) => Promise<HttpResponse<Output>>;
|
|
154
150
|
cancel: () => void;
|
|
155
151
|
getInitValue: () => RequestInputValue<Input>;
|
|
156
152
|
setUploadProgress: (fn: HttpProgressFn) => void;
|
package/index.js
CHANGED
|
@@ -4,6 +4,7 @@ var ERR_TIMEOUT = new Error("ERR_TIMEOUT");
|
|
|
4
4
|
var ERR_NETWORK = new Error("ERR_NETWORK");
|
|
5
5
|
var ERR_NOT_FOUND_HANDLER = new Error("ERR_NOT_FOUND_HANDLER");
|
|
6
6
|
var ERR_OBSERVE = new Error("ERR_OBSERVE");
|
|
7
|
+
var ERR_NOT_SET_ALIAS = new Error("ERR_NOT_SET_ALIAS");
|
|
7
8
|
var ERR_UNSUPPORTED_FIELD_TYPE = new Error("ERR_UNSUPPORTED_FIELD_TYPE");
|
|
8
9
|
var ERR_INVALID_CLIENT = new Error("ERR_INVALID_CLIENT");
|
|
9
10
|
var ERR_NOT_FOUND_GLOBAL_CLIENT = new Error("ERR_NOT_FOUND_GLOBAL_CLIENT");
|
|
@@ -195,15 +196,12 @@ function __serializeBody(body) {
|
|
|
195
196
|
function __detectContentTypeHeader(body) {
|
|
196
197
|
switch (true) {
|
|
197
198
|
case body instanceof FormData:
|
|
198
|
-
|
|
199
|
+
case body instanceof URLSearchParams:
|
|
200
|
+
return null;
|
|
199
201
|
case body instanceof ArrayBuffer:
|
|
200
202
|
return "application/octet-stream";
|
|
201
|
-
case body instanceof Blob:
|
|
203
|
+
case body instanceof Blob:
|
|
202
204
|
return body.type || "application/octet-stream";
|
|
203
|
-
}
|
|
204
|
-
case body instanceof URLSearchParams: {
|
|
205
|
-
return "application/x-www-form-urlencoded;charset=UTF-8";
|
|
206
|
-
}
|
|
207
205
|
case typeof body === "string":
|
|
208
206
|
return "text/plain";
|
|
209
207
|
case (typeof body === "object" && body !== null):
|
|
@@ -227,6 +225,7 @@ function __buildFieldDefaultValue(input) {
|
|
|
227
225
|
function defineRequest(...args) {
|
|
228
226
|
let method;
|
|
229
227
|
let endpoint;
|
|
228
|
+
let requiredInput = false;
|
|
230
229
|
let field2;
|
|
231
230
|
let interceptors = [];
|
|
232
231
|
let responseType = "json";
|
|
@@ -280,32 +279,35 @@ function defineRequest(...args) {
|
|
|
280
279
|
downloadProgress = fn2;
|
|
281
280
|
};
|
|
282
281
|
const doRequest = async (...args2) => {
|
|
283
|
-
let input;
|
|
284
|
-
if (args2.length === 1) {
|
|
285
|
-
input = args2[0];
|
|
286
|
-
}
|
|
287
|
-
if (validators.length > 0) {
|
|
288
|
-
for (const fn2 of validators) {
|
|
289
|
-
fn2(input);
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
const req = {
|
|
293
|
-
host: clientOptions?.host,
|
|
294
|
-
method,
|
|
295
|
-
endpoint,
|
|
296
|
-
queryParams: new URLSearchParams,
|
|
297
|
-
headers: new Headers,
|
|
298
|
-
body: undefined,
|
|
299
|
-
withCredentials,
|
|
300
|
-
responseType,
|
|
301
|
-
context: context || makeHttpContext(),
|
|
302
|
-
uploadProgress,
|
|
303
|
-
downloadProgress,
|
|
304
|
-
timeout,
|
|
305
|
-
abort: AbortSignal.any(abortSignal)
|
|
306
|
-
};
|
|
307
282
|
try {
|
|
308
|
-
|
|
283
|
+
let input;
|
|
284
|
+
if (requiredInput && args2.length === 1) {
|
|
285
|
+
input = args2[0];
|
|
286
|
+
}
|
|
287
|
+
if (requiredInput && !input) {
|
|
288
|
+
throw new Error(`Because the request has input, the argument must be the input value`);
|
|
289
|
+
}
|
|
290
|
+
if (validators.length > 0) {
|
|
291
|
+
for (const fn2 of validators) {
|
|
292
|
+
fn2(input);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
const req = {
|
|
296
|
+
host: clientOptions?.host,
|
|
297
|
+
method,
|
|
298
|
+
endpoint,
|
|
299
|
+
queryParams: new URLSearchParams,
|
|
300
|
+
headers: new Headers,
|
|
301
|
+
body: undefined,
|
|
302
|
+
withCredentials,
|
|
303
|
+
responseType,
|
|
304
|
+
context: context || makeHttpContext(),
|
|
305
|
+
uploadProgress,
|
|
306
|
+
downloadProgress,
|
|
307
|
+
timeout,
|
|
308
|
+
abort: AbortSignal.any(abortSignal)
|
|
309
|
+
};
|
|
310
|
+
if (requiredInput && field2) {
|
|
309
311
|
await __fillRequestFromField(req, field2, input);
|
|
310
312
|
}
|
|
311
313
|
const chain = makeInterceptorChain([...clientOptions.interceptors, ...interceptors]);
|
|
@@ -331,6 +333,7 @@ function defineRequest(...args) {
|
|
|
331
333
|
};
|
|
332
334
|
fn.withField = (value) => {
|
|
333
335
|
field2 = value;
|
|
336
|
+
requiredInput = true;
|
|
334
337
|
return fn;
|
|
335
338
|
};
|
|
336
339
|
fn.withInterceptors = (value) => {
|
|
@@ -364,7 +367,7 @@ function __fillUrl(endpoint, params) {
|
|
|
364
367
|
return params.get(p1) ?? "undefined";
|
|
365
368
|
});
|
|
366
369
|
}
|
|
367
|
-
async function __fillRequestFromField(request,
|
|
370
|
+
async function __fillRequestFromField(request, fieldOrFieldGroup, input) {
|
|
368
371
|
function inputIsObject(input2) {
|
|
369
372
|
return typeof input2 === "object" && input2 !== null;
|
|
370
373
|
}
|
|
@@ -377,10 +380,9 @@ async function __fillRequestFromField(request, fieldGroup, input) {
|
|
|
377
380
|
case typeof value === "boolean":
|
|
378
381
|
case typeof value === "number":
|
|
379
382
|
case typeof value === "string":
|
|
380
|
-
case typeof value === "undefined":
|
|
381
383
|
return String(value);
|
|
382
384
|
default:
|
|
383
|
-
throw new Error(
|
|
385
|
+
throw new Error("Unsupported value type");
|
|
384
386
|
}
|
|
385
387
|
}
|
|
386
388
|
function appendValue(sp, key, value) {
|
|
@@ -388,9 +390,7 @@ async function __fillRequestFromField(request, fieldGroup, input) {
|
|
|
388
390
|
for (const v of value) {
|
|
389
391
|
sp.append(key, serializeToString(v));
|
|
390
392
|
}
|
|
391
|
-
|
|
392
|
-
}
|
|
393
|
-
if (typeof value !== "undefined") {
|
|
393
|
+
} else {
|
|
394
394
|
sp.set(key, serializeToString(value));
|
|
395
395
|
}
|
|
396
396
|
return sp;
|
|
@@ -400,11 +400,8 @@ async function __fillRequestFromField(request, fieldGroup, input) {
|
|
|
400
400
|
for (const v of value) {
|
|
401
401
|
setValue(sp, key, serializeToString(v));
|
|
402
402
|
}
|
|
403
|
-
return sp;
|
|
404
|
-
}
|
|
405
|
-
if (typeof value !== "undefined") {
|
|
406
|
-
sp.set(key, serializeToString(value));
|
|
407
403
|
}
|
|
404
|
+
sp.set(key, serializeToString(value));
|
|
408
405
|
return sp;
|
|
409
406
|
}
|
|
410
407
|
function getValidValue(value, defaultValue) {
|
|
@@ -417,7 +414,66 @@ async function __fillRequestFromField(request, fieldGroup, input) {
|
|
|
417
414
|
return value;
|
|
418
415
|
}
|
|
419
416
|
}
|
|
420
|
-
if (
|
|
417
|
+
if (isField(fieldOrFieldGroup)) {
|
|
418
|
+
let params;
|
|
419
|
+
let queryParams;
|
|
420
|
+
let headers;
|
|
421
|
+
let body = undefined;
|
|
422
|
+
const validValue = getValidValue(input, fieldOrFieldGroup());
|
|
423
|
+
const meta = __getFieldMetadata(fieldOrFieldGroup);
|
|
424
|
+
await doValid([...meta.validators, ...meta.asyncValidator], validValue);
|
|
425
|
+
for (const [type, aliasName] of meta.alias) {
|
|
426
|
+
switch (type) {
|
|
427
|
+
case 1 /* Query */: {
|
|
428
|
+
if (!aliasName) {
|
|
429
|
+
throw ERR_NOT_SET_ALIAS;
|
|
430
|
+
}
|
|
431
|
+
queryParams = appendValue(new URLSearchParams, aliasName, validValue);
|
|
432
|
+
break;
|
|
433
|
+
}
|
|
434
|
+
case 2 /* Param */: {
|
|
435
|
+
if (!aliasName) {
|
|
436
|
+
throw ERR_NOT_SET_ALIAS;
|
|
437
|
+
}
|
|
438
|
+
params = setValue(new Map, aliasName, validValue);
|
|
439
|
+
break;
|
|
440
|
+
}
|
|
441
|
+
case 3 /* Header */: {
|
|
442
|
+
if (!aliasName) {
|
|
443
|
+
throw ERR_NOT_SET_ALIAS;
|
|
444
|
+
}
|
|
445
|
+
headers = appendValue(new Headers, aliasName, validValue);
|
|
446
|
+
break;
|
|
447
|
+
}
|
|
448
|
+
case 4 /* Form */: {
|
|
449
|
+
if (!aliasName) {
|
|
450
|
+
throw ERR_NOT_SET_ALIAS;
|
|
451
|
+
}
|
|
452
|
+
body = appendValue(new FormData, aliasName, validValue);
|
|
453
|
+
break;
|
|
454
|
+
}
|
|
455
|
+
case 6 /* UrlForm */: {
|
|
456
|
+
if (!aliasName) {
|
|
457
|
+
throw ERR_NOT_SET_ALIAS;
|
|
458
|
+
}
|
|
459
|
+
body = appendValue(new URLSearchParams, aliasName, validValue);
|
|
460
|
+
break;
|
|
461
|
+
}
|
|
462
|
+
case 0 /* Json */:
|
|
463
|
+
case 5 /* Body */:
|
|
464
|
+
body = validValue;
|
|
465
|
+
break;
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
if (params) {
|
|
469
|
+
request.endpoint = __fillUrl(request.endpoint, params);
|
|
470
|
+
}
|
|
471
|
+
request.queryParams = queryParams;
|
|
472
|
+
request.headers = headers;
|
|
473
|
+
request.body = body;
|
|
474
|
+
return;
|
|
475
|
+
}
|
|
476
|
+
if (isFieldGroup(fieldOrFieldGroup) && inputIsObject(input)) {
|
|
421
477
|
let params = new Map;
|
|
422
478
|
let queryParams = new URLSearchParams;
|
|
423
479
|
let headers = new Headers;
|
|
@@ -426,7 +482,7 @@ async function __fillRequestFromField(request, fieldGroup, input) {
|
|
|
426
482
|
const json = {};
|
|
427
483
|
let body = undefined;
|
|
428
484
|
let lastBodyField;
|
|
429
|
-
for (const [propertyKey, field2] of Object.entries(
|
|
485
|
+
for (const [propertyKey, field2] of Object.entries(fieldOrFieldGroup)) {
|
|
430
486
|
const meta = __getFieldMetadata(field2);
|
|
431
487
|
for (const [type, aliasName] of meta.alias) {
|
|
432
488
|
const valueKey = aliasName || propertyKey;
|
|
@@ -486,7 +542,9 @@ async function __fillRequestFromField(request, fieldGroup, input) {
|
|
|
486
542
|
request.body = json;
|
|
487
543
|
break;
|
|
488
544
|
}
|
|
545
|
+
return;
|
|
489
546
|
}
|
|
547
|
+
throw ERR_UNSUPPORTED_FIELD_TYPE;
|
|
490
548
|
}
|
|
491
549
|
|
|
492
550
|
// src/handler/util.ts
|
|
@@ -786,6 +844,7 @@ export {
|
|
|
786
844
|
ERR_UNKNOWN,
|
|
787
845
|
ERR_TIMEOUT,
|
|
788
846
|
ERR_OBSERVE,
|
|
847
|
+
ERR_NOT_SET_ALIAS,
|
|
789
848
|
ERR_NOT_FOUND_HANDLER,
|
|
790
849
|
ERR_NOT_FOUND_GLOBAL_CLIENT,
|
|
791
850
|
ERR_NETWORK,
|
package/index.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var L=new Error("ERR_ABORTED"),h=new Error("ERR_TIMEOUT"),Tt=new Error("ERR_NETWORK"),B=new Error("ERR_NOT_FOUND_HANDLER"),it=new Error("ERR_OBSERVE"),xt=new Error("ERR_UNSUPPORTED_FIELD_TYPE"),D=new Error("ERR_INVALID_CLIENT"),M=new Error("ERR_NOT_FOUND_GLOBAL_CLIENT"),U=new Error("ERR_INVALID_HTTP_CONTEXT_TOKEN"),pt=new Error("ERR_UNKNOWN");function k(t){let n=t?.status??0,r=n>=200&&n<300,o=t?.statusText??"",x=t?.url??"",p=t?.headers??new Headers,w=t?.body??null,H=t?.error;if(!H&&!r){let e=`Http failure response for ${x||"(unknown url)"}: ${n}`;if(o)e+=` - ${o}`;H=new Error(e)}return{status:n,statusText:o,url:x,headers:p,body:w,error:H}}var G=Symbol("HttpContextToken");function ct(t){return Object.defineProperty(t,G,{value:t}),t}function y(t){return typeof t==="function"&&G in t}var g=Symbol("HttpContext");function Et(t){return typeof t==="object"&&t!==null&&g in t}function $(t){let n=new Map;switch(!0){case Array.isArray(t):{for(let[r,o]of t)if(y(r))n.set(r,o);break}case Et(t):{for(let[r,o]of t[g])n.set(r,o);break}}return{set(r,o){if(!y(r))throw U;return n.set(r,o),this},get(r){if(!y(r))throw U;if(!n.has(r))n.set(r,r());return n.get(r)},del(r){return n.delete(r),this},has(r){return n.has(r)},keys(){return n.keys()},get length(){return Array.from(n.keys()).length},[g]:n}}var K=Symbol("field");function Ht(t){let n={required:typeof t!=="undefined",alias:new Map,validators:[],asyncValidator:[]},r=()=>t;return Object.defineProperty(r,K,{value:n}),r.withJson=(o)=>{return n.alias.set(0,o),r},r.withForm=(o)=>{return n.alias.set(4,o),r},r.withQuery=(o)=>{return n.alias.set(1,o),r},r.withParam=(o)=>{return n.alias.set(2,o),r},r.withHeader=(o)=>{return n.alias.set(3,o),r},r.withUrlForm=(o)=>{return n.alias.set(6,o),r},r.withBody=()=>{return n.alias.set(5,void 0),r},r.withValidators=(...o)=>{return n.validators=o,r},r.withAsyncValidators=(...o)=>{return n.asyncValidator=o,r},r}function Z(t){return t[K]}async function X(t,n){await Promise.all(t.map((r)=>r(n)))}function S(t){return!!t&&typeof t==="function"&&K in t}function u(t){return!!t&&typeof t==="object"&&Object.entries(t).every(([,n])=>S(n))}var wt=void 0;var z=()=>wt;function b(t){return t.reduceRight((n,r)=>{return(o,x)=>r(o,(p)=>n(p,x))},(n,r)=>r(n))}function l(t){switch(!0){case t instanceof FormData:case t instanceof Blob:case t instanceof ArrayBuffer:case t instanceof URLSearchParams:case typeof t==="string":return t;case typeof t==="object":case typeof t==="boolean":case typeof t==="number":case Array.isArray(t):return JSON.stringify(t);default:return null}}function q(t){switch(!0){case t instanceof FormData:return"multipart/form-data";case t instanceof ArrayBuffer:return"application/octet-stream";case t instanceof Blob:return t.type||"application/octet-stream";case t instanceof URLSearchParams:return"application/x-www-form-urlencoded;charset=UTF-8";case typeof t==="string":return"text/plain";case(typeof t==="object"&&t!==null):case typeof t==="number":case typeof t==="boolean":return"application/json";default:return null}}function Rt(t){if(u(t)){let n={};for(let[r,o]of Object.entries(t))n[r]=o();return n}return}function ft(...t){let n,r,o,x=[],p="json",w,H=!1,e=[],c;switch(t.length){case 1:{n="GET",r=t[0];break}case 2:{n=t[0],r=t[1];break}default:throw new Error("Invalid arguments")}let T=(i)=>{let E=i?.timeout||0,F=i?.client||J(),R=W(F),f=i?.handler||R?.handler||z();if(!f)throw B;let s,N,C,_=[];if(i?.abort)_.push(i.abort);else C=new AbortController,_.push(C.signal);if(E>0)_.push(AbortSignal.timeout(E));return{doRequest:async(...a)=>{let d;if(a.length===1)d=a[0];if(e.length>0)for(let I of e)I(d);let Y={host:R?.host,method:n,endpoint:r,queryParams:new URLSearchParams,headers:new Headers,body:void 0,withCredentials:H,responseType:p,context:w||$(),uploadProgress:s,downloadProgress:N,timeout:E,abort:AbortSignal.any(_)};try{if(d&&o)await mt(Y,o,d);let V=await b([...R.interceptors,...x])(Y,f);if(typeof c==="function")V=k({...V,body:c(V)});return V}catch(I){return k({error:I})}},cancel:()=>{C?.abort()},getInitValue:()=>Rt(o),setUploadProgress:(a)=>{s=a},setDownloadProgress:(a)=>{N=a}}};return T.withField=(i)=>{return o=i,T},T.withInterceptors=(i)=>{return x=i,T},T.withContext=(i)=>{return w=i,T},T.withCredentials=(i)=>{return H=i,T},T.withValidators=(...i)=>{return e=i,T},T.withTransformResponse=(i)=>{return c=i,T},T.withResponseType=(i)=>{return p=i,T},T}function st(t,n){return t.replace(/:([^\/]+)/g,(r,o)=>{return n.get(o)??"undefined"})}async function mt(t,n,r){function o(e){return typeof e==="object"&&e!==null}function x(e){switch(!0){case Array.isArray(e):case(typeof e==="object"&&e!==null):return JSON.stringify(e);case(typeof e==="object"&&e===null):case typeof e==="boolean":case typeof e==="number":case typeof e==="string":case typeof e==="undefined":return String(e);default:throw new Error(`Unsupported value type: ${typeof e}`)}}function p(e,c,T){if(Array.isArray(T)){for(let i of T)e.append(c,x(i));return e}if(typeof T!=="undefined")e.set(c,x(T));return e}function w(e,c,T){if(Array.isArray(T)){for(let i of T)w(e,c,x(i));return e}if(typeof T!=="undefined")e.set(c,x(T));return e}function H(e,c){switch(!0){case typeof e==="undefined":return c;case(typeof e==="object"&&e===null):return e;default:return e}}if(u(n)&&o(r)){let e=new Map,c=new URLSearchParams,T=new Headers,i=new URLSearchParams,E=new FormData,F={},R=void 0,f;for(let[s,N]of Object.entries(n)){let C=Z(N);for(let[_,Q]of C.alias){let O=Q||s,m=H(r[s],N());switch(await X([...C.validators,...C.asyncValidator],m),_){case 0:{Object.defineProperty(F,O,{value:m,writable:!0,enumerable:!0}),f=0;break}case 1:c=p(c,O,m);break;case 2:e=w(e,O,m);break;case 3:T=p(T,O,m);break;case 4:{E=p(E,O,m),f=4;break}case 6:{i=p(i,O,m),f=6;break}case 5:{R=m,f=5;break}}}}switch(t.endpoint=st(t.endpoint,e),t.queryParams=c,t.headers=T,f){case 5:t.body=R;break;case 4:t.body=E;break;case 6:t.body=i;break;case 0:t.body=F;break}}}function v(t){let n=t.get("Content-Length");if(!n)return 0;let r=Number(n);if(isNaN(r))return 0;return r}function tt(t){return t.get("Content-Type")||""}function nt(t){let{request:n,content:r,contentType:o}=t;switch(n.responseType){case"json":{let p=new TextDecoder().decode(r);if(p==="")return null;return JSON.parse(p)}case"text":return new TextDecoder().decode(r);case"blob":return new Blob([r],{type:o});case"arraybuffer":return r.buffer;default:return null}}function rt(t,n){let r=new Uint8Array(n),o=0;for(let x of t)r.set(x,o),o+=x.length;return r}function kt(t){let n=new URL(t.endpoint,t.host);if(t.queryParams)n.search=t.queryParams.toString();let r=t.headers??new Headers;if(!r.has("Content-Type")){let x=q(t.body);if(x)r.set("Content-Type",x)}if(!r.has("Accept"))r.set("Accept","application/json, text/plain, */*");let o=t.withCredentials?"include":void 0;return new Request(n,{headers:r,method:t.method,body:l(t.body),signal:t.abort,credentials:o})}async function j(t){let n=t.downloadProgress,r=kt(t),o=t.abort,x;try{x=await globalThis.fetch(r)}catch(E){if(o?.aborted&&o.reason instanceof Error)switch(!0){case o.reason.name==="AbortError":return k({error:L});case o.reason.name==="TimeoutError":return k({error:h})}return k({error:E})}let{headers:p,status:w,statusText:H,url:e}=x,c=v(p),T=tt(p),i=null;if(x.body){let E=[],F=x.body.getReader(),R=0;while(!0){let{done:s,value:N}=await F.read();if(s)break;E.push(N),R+=N.length,n?.({lengthComputable:c>0,loaded:R,total:c})}let f=rt(E,R);try{i=nt({request:t,content:f,contentType:T})}catch(s){return k({error:s,status:w,statusText:H,headers:p,url:e})}}return k({status:w,statusText:H,headers:p,url:e,body:i})}var P=Symbol("Client"),A;function ot(t){return typeof t==="object"&&t!==null&&P in t}function W(t){if(!ot(t))throw D;return t[P]}function et(t){let n={host:t.host,interceptors:t.interceptors??[],handler:t.handler||j};return{[P]:n}}function Nt(t,n){let o={...W(t),...n};return{[P]:o}}function J(){if(!A)throw M;return A}function Ct(t){A=t}function Ot(){A=void 0}function Ft(t){A=et(t)}function _t(t,n){let r=n?.encode;if(!r){let o=globalThis.btoa;if(typeof o!=="function")throw new Error("BasicAuthInterceptor is not supported in this environment");r=(x)=>o(`${x.username}:${x.password}`)}return(o,x)=>{let p=o.headers||new Headers;return p.set("Authorization",`Basic ${r(t())}`),o.headers=p,x(o)}}var at=(t)=>{if(!t)return new Error("required");return null},At=(t)=>{if(typeof t!=="boolean"||!t)return new Error("requiredTrue");return null},dt=(t)=>{return(n)=>{if(typeof n!=="string")return new Error("invalid string");if(n.length<t)return new Error(`minLength ${t}`);return null}},It=(t)=>{return(n)=>{if(typeof n!=="string")return new Error("invalid string");if(n.length>t)return new Error(`maxLength ${t}`);return null}},Vt=(t)=>{return(n)=>{if(typeof n!=="number"||isNaN(n))return new Error("invalid number");if(n<t)return new Error(`minLength ${t}`);return null}},Ut=(t)=>{return(n)=>{if(typeof n!=="number"||isNaN(n))return new Error("invalid number");if(n>t)return new Error(`maxLength ${t}`);return null}},yt=(t)=>{return(n)=>{if(typeof n!=="string")return new Error("invalid string");if(!t.test(n))return new Error("pattern");return null}};export{Ct as setGlobalClient,Ot as restGlobalClient,At as requiredTrue,at as required,yt as pattern,dt as minLength,Vt as min,It as maxLength,Ut as max,ct as makeHttpContextToken,$ as makeHttpContext,y as isHttpContextToken,u as isFieldGroup,S as isField,ot as isClient,J as getGlobalClient,Ht as field,j as fetchHandler,X as doValid,ft as defineRequest,Ft as createGlobalClient,et as createClient,Nt as cloneClient,_t as basicAuthInterceptor,xt as ERR_UNSUPPORTED_FIELD_TYPE,pt as ERR_UNKNOWN,h as ERR_TIMEOUT,it as ERR_OBSERVE,B as ERR_NOT_FOUND_HANDLER,M as ERR_NOT_FOUND_GLOBAL_CLIENT,Tt as ERR_NETWORK,U as ERR_INVALID_HTTP_CONTEXT_TOKEN,D as ERR_INVALID_CLIENT,L as ERR_ABORTED};
|
|
1
|
+
var K=new Error("ERR_ABORTED"),X=new Error("ERR_TIMEOUT"),Ht=new Error("ERR_NETWORK"),y=new Error("ERR_NOT_FOUND_HANDLER"),Et=new Error("ERR_OBSERVE"),A=new Error("ERR_NOT_SET_ALIAS"),W=new Error("ERR_UNSUPPORTED_FIELD_TYPE"),J=new Error("ERR_INVALID_CLIENT"),j=new Error("ERR_NOT_FOUND_GLOBAL_CLIENT"),L=new Error("ERR_INVALID_HTTP_CONTEXT_TOKEN"),pt=new Error("ERR_UNKNOWN");function N(t){let n=t?.status??0,r=n>=200&&n<300,o=t?.statusText??"",T=t?.url??"",H=t?.headers??new Headers,f=t?.body??null,i=t?.error;if(!i&&!r){let e=`Http failure response for ${T||"(unknown url)"}: ${n}`;if(o)e+=` - ${o}`;i=new Error(e)}return{status:n,statusText:o,url:T,headers:H,body:f,error:i}}var d=Symbol("HttpContextToken");function wt(t){return Object.defineProperty(t,d,{value:t}),t}function P(t){return typeof t==="function"&&d in t}var Q=Symbol("HttpContext");function it(t){return typeof t==="object"&&t!==null&&Q in t}function Y(t){let n=new Map;switch(!0){case Array.isArray(t):{for(let[r,o]of t)if(P(r))n.set(r,o);break}case it(t):{for(let[r,o]of t[Q])n.set(r,o);break}}return{set(r,o){if(!P(r))throw L;return n.set(r,o),this},get(r){if(!P(r))throw L;if(!n.has(r))n.set(r,r());return n.get(r)},del(r){return n.delete(r),this},has(r){return n.has(r)},keys(){return n.keys()},get length(){return Array.from(n.keys()).length},[Q]:n}}var Z=Symbol("field");function Rt(t){let n={required:typeof t!=="undefined",alias:new Map,validators:[],asyncValidator:[]},r=()=>t;return Object.defineProperty(r,Z,{value:n}),r.withJson=(o)=>{return n.alias.set(0,o),r},r.withForm=(o)=>{return n.alias.set(4,o),r},r.withQuery=(o)=>{return n.alias.set(1,o),r},r.withParam=(o)=>{return n.alias.set(2,o),r},r.withHeader=(o)=>{return n.alias.set(3,o),r},r.withUrlForm=(o)=>{return n.alias.set(6,o),r},r.withBody=()=>{return n.alias.set(5,void 0),r},r.withValidators=(...o)=>{return n.validators=o,r},r.withAsyncValidators=(...o)=>{return n.asyncValidator=o,r},r}function G(t){return t[Z]}async function V(t,n){await Promise.all(t.map((r)=>r(n)))}function M(t){return!!t&&typeof t==="function"&&Z in t}function g(t){return!!t&&typeof t==="object"&&Object.entries(t).every(([,n])=>M(n))}var ft=void 0;var a=()=>ft;function q(t){return t.reduceRight((n,r)=>{return(o,T)=>r(o,(H)=>n(H,T))},(n,r)=>r(n))}function v(t){switch(!0){case t instanceof FormData:case t instanceof Blob:case t instanceof ArrayBuffer:case t instanceof URLSearchParams:case typeof t==="string":return t;case typeof t==="object":case typeof t==="boolean":case typeof t==="number":case Array.isArray(t):return JSON.stringify(t);default:return null}}function tt(t){switch(!0){case t instanceof FormData:case t instanceof URLSearchParams:return null;case t instanceof ArrayBuffer:return"application/octet-stream";case t instanceof Blob:return t.type||"application/octet-stream";case typeof t==="string":return"text/plain";case(typeof t==="object"&&t!==null):case typeof t==="number":case typeof t==="boolean":return"application/json";default:return null}}function kt(t){if(g(t)){let n={};for(let[r,o]of Object.entries(t))n[r]=o();return n}return}function st(...t){let n,r,o=!1,T,H=[],f="json",i,e=!1,p=[],w;switch(t.length){case 1:{n="GET",r=t[0];break}case 2:{n=t[0],r=t[1];break}default:throw new Error("Invalid arguments")}let c=(x)=>{let R=x?.timeout||0,k=x?.client||S(),E=z(k),s=x?.handler||E?.handler||a();if(!s)throw y;let m,I,h,_=[];if(x?.abort)_.push(x.abort);else h=new AbortController,_.push(h.signal);if(R>0)_.push(AbortSignal.timeout(R));return{doRequest:async(...F)=>{try{let U;if(o&&F.length===1)U=F[0];if(o&&!U)throw new Error("Because the request has input, the argument must be the input value");if(p.length>0)for(let ct of p)ct(U);let b={host:E?.host,method:n,endpoint:r,queryParams:new URLSearchParams,headers:new Headers,body:void 0,withCredentials:e,responseType:f,context:i||Y(),uploadProgress:m,downloadProgress:I,timeout:R,abort:AbortSignal.any(_)};if(o&&T)await Ct(b,T,U);let D=await q([...E.interceptors,...H])(b,s);if(typeof w==="function")D=N({...D,body:w(D)});return D}catch(U){return N({error:U})}},cancel:()=>{h?.abort()},getInitValue:()=>kt(T),setUploadProgress:(F)=>{m=F},setDownloadProgress:(F)=>{I=F}}};return c.withField=(x)=>{return T=x,o=!0,c},c.withInterceptors=(x)=>{return H=x,c},c.withContext=(x)=>{return i=x,c},c.withCredentials=(x)=>{return e=x,c},c.withValidators=(...x)=>{return p=x,c},c.withTransformResponse=(x)=>{return w=x,c},c.withResponseType=(x)=>{return f=x,c},c}function l(t,n){return t.replace(/:([^\/]+)/g,(r,o)=>{return n.get(o)??"undefined"})}async function Ct(t,n,r){function o(e){return typeof e==="object"&&e!==null}function T(e){switch(!0){case Array.isArray(e):case(typeof e==="object"&&e!==null):return JSON.stringify(e);case(typeof e==="object"&&e===null):case typeof e==="boolean":case typeof e==="number":case typeof e==="string":return String(e);default:throw new Error("Unsupported value type")}}function H(e,p,w){if(Array.isArray(w))for(let c of w)e.append(p,T(c));else e.set(p,T(w));return e}function f(e,p,w){if(Array.isArray(w))for(let c of w)f(e,p,T(c));return e.set(p,T(w)),e}function i(e,p){switch(!0){case typeof e==="undefined":return p;case(typeof e==="object"&&e===null):return e;default:return e}}if(M(n)){let e,p,w,c=void 0,x=i(r,n()),R=G(n);await V([...R.validators,...R.asyncValidator],x);for(let[k,E]of R.alias)switch(k){case 1:{if(!E)throw A;p=H(new URLSearchParams,E,x);break}case 2:{if(!E)throw A;e=f(new Map,E,x);break}case 3:{if(!E)throw A;w=H(new Headers,E,x);break}case 4:{if(!E)throw A;c=H(new FormData,E,x);break}case 6:{if(!E)throw A;c=H(new URLSearchParams,E,x);break}case 0:case 5:c=x;break}if(e)t.endpoint=l(t.endpoint,e);t.queryParams=p,t.headers=w,t.body=c;return}if(g(n)&&o(r)){let e=new Map,p=new URLSearchParams,w=new Headers,c=new URLSearchParams,x=new FormData,R={},k=void 0,E;for(let[s,m]of Object.entries(n)){let I=G(m);for(let[h,_]of I.alias){let O=_||s,C=i(r[s],m());switch(await V([...I.validators,...I.asyncValidator],C),h){case 0:{Object.defineProperty(R,O,{value:C,writable:!0,enumerable:!0}),E=0;break}case 1:p=H(p,O,C);break;case 2:e=f(e,O,C);break;case 3:w=H(w,O,C);break;case 4:{x=H(x,O,C),E=4;break}case 6:{c=H(c,O,C),E=6;break}case 5:{k=C,E=5;break}}}}switch(t.endpoint=l(t.endpoint,e),t.queryParams=p,t.headers=w,E){case 5:t.body=k;break;case 4:t.body=x;break;case 6:t.body=c;break;case 0:t.body=R;break}return}throw W}function nt(t){let n=t.get("Content-Length");if(!n)return 0;let r=Number(n);if(isNaN(r))return 0;return r}function rt(t){return t.get("Content-Type")||""}function ot(t){let{request:n,content:r,contentType:o}=t;switch(n.responseType){case"json":{let H=new TextDecoder().decode(r);if(H==="")return null;return JSON.parse(H)}case"text":return new TextDecoder().decode(r);case"blob":return new Blob([r],{type:o});case"arraybuffer":return r.buffer;default:return null}}function et(t,n){let r=new Uint8Array(n),o=0;for(let T of t)r.set(T,o),o+=T.length;return r}function Nt(t){let n=new URL(t.endpoint,t.host);if(t.queryParams)n.search=t.queryParams.toString();let r=t.headers??new Headers;if(!r.has("Content-Type")){let T=tt(t.body);if(T)r.set("Content-Type",T)}if(!r.has("Accept"))r.set("Accept","application/json, text/plain, */*");let o=t.withCredentials?"include":void 0;return new Request(n,{headers:r,method:t.method,body:v(t.body),signal:t.abort,credentials:o})}async function u(t){let n=t.downloadProgress,r=Nt(t),o=t.abort,T;try{T=await globalThis.fetch(r)}catch(x){if(o?.aborted&&o.reason instanceof Error)switch(!0){case o.reason.name==="AbortError":return N({error:K});case o.reason.name==="TimeoutError":return N({error:X})}return N({error:x})}let{headers:H,status:f,statusText:i,url:e}=T,p=nt(H),w=rt(H),c=null;if(T.body){let x=[],R=T.body.getReader(),k=0;while(!0){let{done:s,value:m}=await R.read();if(s)break;x.push(m),k+=m.length,n?.({lengthComputable:p>0,loaded:k,total:p})}let E=et(x,k);try{c=ot({request:t,content:E,contentType:w})}catch(s){return N({error:s,status:f,statusText:i,headers:H,url:e})}}return N({status:f,statusText:i,headers:H,url:e,body:c})}var $=Symbol("Client"),B;function xt(t){return typeof t==="object"&&t!==null&&$ in t}function z(t){if(!xt(t))throw J;return t[$]}function Tt(t){let n={host:t.host,interceptors:t.interceptors??[],handler:t.handler||u};return{[$]:n}}function mt(t,n){let o={...z(t),...n};return{[$]:o}}function S(){if(!B)throw j;return B}function Ot(t){B=t}function At(){B=void 0}function It(t){B=Tt(t)}function _t(t,n){let r=n?.encode;if(!r){let o=globalThis.btoa;if(typeof o!=="function")throw new Error("BasicAuthInterceptor is not supported in this environment");r=(T)=>o(`${T.username}:${T.password}`)}return(o,T)=>{let H=o.headers||new Headers;return H.set("Authorization",`Basic ${r(t())}`),o.headers=H,T(o)}}var Ft=(t)=>{if(!t)return new Error("required");return null},Ut=(t)=>{if(typeof t!=="boolean"||!t)return new Error("requiredTrue");return null},ht=(t)=>{return(n)=>{if(typeof n!=="string")return new Error("invalid string");if(n.length<t)return new Error(`minLength ${t}`);return null}},Bt=(t)=>{return(n)=>{if(typeof n!=="string")return new Error("invalid string");if(n.length>t)return new Error(`maxLength ${t}`);return null}},Dt=(t)=>{return(n)=>{if(typeof n!=="number"||isNaN(n))return new Error("invalid number");if(n<t)return new Error(`minLength ${t}`);return null}},Lt=(t)=>{return(n)=>{if(typeof n!=="number"||isNaN(n))return new Error("invalid number");if(n>t)return new Error(`maxLength ${t}`);return null}},Pt=(t)=>{return(n)=>{if(typeof n!=="string")return new Error("invalid string");if(!t.test(n))return new Error("pattern");return null}};export{Ot as setGlobalClient,At as restGlobalClient,Ut as requiredTrue,Ft as required,Pt as pattern,ht as minLength,Dt as min,Bt as maxLength,Lt as max,wt as makeHttpContextToken,Y as makeHttpContext,P as isHttpContextToken,g as isFieldGroup,M as isField,xt as isClient,S as getGlobalClient,Rt as field,u as fetchHandler,V as doValid,st as defineRequest,It as createGlobalClient,Tt as createClient,mt as cloneClient,_t as basicAuthInterceptor,W as ERR_UNSUPPORTED_FIELD_TYPE,pt as ERR_UNKNOWN,X as ERR_TIMEOUT,Et as ERR_OBSERVE,A as ERR_NOT_SET_ALIAS,y as ERR_NOT_FOUND_HANDLER,j as ERR_NOT_FOUND_GLOBAL_CLIENT,Ht as ERR_NETWORK,L as ERR_INVALID_HTTP_CONTEXT_TOKEN,J as ERR_INVALID_CLIENT,K as ERR_ABORTED};
|