@defjs/core 0.3.1 → 0.3.3
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 +99 -34
- 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
|
}
|
|
@@ -417,7 +420,66 @@ async function __fillRequestFromField(request, fieldGroup, input) {
|
|
|
417
420
|
return value;
|
|
418
421
|
}
|
|
419
422
|
}
|
|
420
|
-
if (
|
|
423
|
+
if (isField(fieldOrFieldGroup)) {
|
|
424
|
+
let params;
|
|
425
|
+
let queryParams;
|
|
426
|
+
let headers;
|
|
427
|
+
let body = undefined;
|
|
428
|
+
const validValue = getValidValue(input, fieldOrFieldGroup());
|
|
429
|
+
const meta = __getFieldMetadata(fieldOrFieldGroup);
|
|
430
|
+
await doValid([...meta.validators, ...meta.asyncValidator], validValue);
|
|
431
|
+
for (const [type, aliasName] of meta.alias) {
|
|
432
|
+
switch (type) {
|
|
433
|
+
case 1 /* Query */: {
|
|
434
|
+
if (!aliasName) {
|
|
435
|
+
throw ERR_NOT_SET_ALIAS;
|
|
436
|
+
}
|
|
437
|
+
queryParams = appendValue(new URLSearchParams, aliasName, validValue);
|
|
438
|
+
break;
|
|
439
|
+
}
|
|
440
|
+
case 2 /* Param */: {
|
|
441
|
+
if (!aliasName) {
|
|
442
|
+
throw ERR_NOT_SET_ALIAS;
|
|
443
|
+
}
|
|
444
|
+
params = setValue(new Map, aliasName, validValue);
|
|
445
|
+
break;
|
|
446
|
+
}
|
|
447
|
+
case 3 /* Header */: {
|
|
448
|
+
if (!aliasName) {
|
|
449
|
+
throw ERR_NOT_SET_ALIAS;
|
|
450
|
+
}
|
|
451
|
+
headers = appendValue(new Headers, aliasName, validValue);
|
|
452
|
+
break;
|
|
453
|
+
}
|
|
454
|
+
case 4 /* Form */: {
|
|
455
|
+
if (!aliasName) {
|
|
456
|
+
throw ERR_NOT_SET_ALIAS;
|
|
457
|
+
}
|
|
458
|
+
body = appendValue(new FormData, aliasName, validValue);
|
|
459
|
+
break;
|
|
460
|
+
}
|
|
461
|
+
case 6 /* UrlForm */: {
|
|
462
|
+
if (!aliasName) {
|
|
463
|
+
throw ERR_NOT_SET_ALIAS;
|
|
464
|
+
}
|
|
465
|
+
body = appendValue(new URLSearchParams, aliasName, validValue);
|
|
466
|
+
break;
|
|
467
|
+
}
|
|
468
|
+
case 0 /* Json */:
|
|
469
|
+
case 5 /* Body */:
|
|
470
|
+
body = validValue;
|
|
471
|
+
break;
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
if (params) {
|
|
475
|
+
request.endpoint = __fillUrl(request.endpoint, params);
|
|
476
|
+
}
|
|
477
|
+
request.queryParams = queryParams;
|
|
478
|
+
request.headers = headers;
|
|
479
|
+
request.body = body;
|
|
480
|
+
return;
|
|
481
|
+
}
|
|
482
|
+
if (isFieldGroup(fieldOrFieldGroup) && inputIsObject(input)) {
|
|
421
483
|
let params = new Map;
|
|
422
484
|
let queryParams = new URLSearchParams;
|
|
423
485
|
let headers = new Headers;
|
|
@@ -426,7 +488,7 @@ async function __fillRequestFromField(request, fieldGroup, input) {
|
|
|
426
488
|
const json = {};
|
|
427
489
|
let body = undefined;
|
|
428
490
|
let lastBodyField;
|
|
429
|
-
for (const [propertyKey, field2] of Object.entries(
|
|
491
|
+
for (const [propertyKey, field2] of Object.entries(fieldOrFieldGroup)) {
|
|
430
492
|
const meta = __getFieldMetadata(field2);
|
|
431
493
|
for (const [type, aliasName] of meta.alias) {
|
|
432
494
|
const valueKey = aliasName || propertyKey;
|
|
@@ -486,7 +548,9 @@ async function __fillRequestFromField(request, fieldGroup, input) {
|
|
|
486
548
|
request.body = json;
|
|
487
549
|
break;
|
|
488
550
|
}
|
|
551
|
+
return;
|
|
489
552
|
}
|
|
553
|
+
throw ERR_UNSUPPORTED_FIELD_TYPE;
|
|
490
554
|
}
|
|
491
555
|
|
|
492
556
|
// src/handler/util.ts
|
|
@@ -786,6 +850,7 @@ export {
|
|
|
786
850
|
ERR_UNKNOWN,
|
|
787
851
|
ERR_TIMEOUT,
|
|
788
852
|
ERR_OBSERVE,
|
|
853
|
+
ERR_NOT_SET_ALIAS,
|
|
789
854
|
ERR_NOT_FOUND_HANDLER,
|
|
790
855
|
ERR_NOT_FOUND_GLOBAL_CLIENT,
|
|
791
856
|
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 Ct(...t){let n,r,o=!1,T,H=[],f="json",i,e=!1,w=[],E;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(),p=z(k),C=x?.handler||p?.handler||a();if(!C)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(w.length>0)for(let ct of w)ct(U);let b={host:p?.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 st(b,T,U);let D=await q([...p.interceptors,...H])(b,C);if(typeof E==="function")D=N({...D,body:E(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 w=x,c},c.withTransformResponse=(x)=>{return E=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 st(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":case typeof e==="undefined":return String(e);default:throw new Error(`Unsupported value type: ${typeof e}`)}}function H(e,w,E){if(Array.isArray(E)){for(let c of E)e.append(w,T(c));return e}if(typeof E!=="undefined")e.set(w,T(E));return e}function f(e,w,E){if(Array.isArray(E)){for(let c of E)f(e,w,T(c));return e}if(typeof E!=="undefined")e.set(w,T(E));return e}function i(e,w){switch(!0){case typeof e==="undefined":return w;case(typeof e==="object"&&e===null):return e;default:return e}}if(M(n)){let e,w,E,c=void 0,x=i(r,n()),R=G(n);await V([...R.validators,...R.asyncValidator],x);for(let[k,p]of R.alias)switch(k){case 1:{if(!p)throw A;w=H(new URLSearchParams,p,x);break}case 2:{if(!p)throw A;e=f(new Map,p,x);break}case 3:{if(!p)throw A;E=H(new Headers,p,x);break}case 4:{if(!p)throw A;c=H(new FormData,p,x);break}case 6:{if(!p)throw A;c=H(new URLSearchParams,p,x);break}case 0:case 5:c=x;break}if(e)t.endpoint=l(t.endpoint,e);t.queryParams=w,t.headers=E,t.body=c;return}if(g(n)&&o(r)){let e=new Map,w=new URLSearchParams,E=new Headers,c=new URLSearchParams,x=new FormData,R={},k=void 0,p;for(let[C,m]of Object.entries(n)){let I=G(m);for(let[h,_]of I.alias){let O=_||C,s=i(r[C],m());switch(await V([...I.validators,...I.asyncValidator],s),h){case 0:{Object.defineProperty(R,O,{value:s,writable:!0,enumerable:!0}),p=0;break}case 1:w=H(w,O,s);break;case 2:e=f(e,O,s);break;case 3:E=H(E,O,s);break;case 4:{x=H(x,O,s),p=4;break}case 6:{c=H(c,O,s),p=6;break}case 5:{k=s,p=5;break}}}}switch(t.endpoint=l(t.endpoint,e),t.queryParams=w,t.headers=E,p){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,w=nt(H),E=rt(H),c=null;if(T.body){let x=[],R=T.body.getReader(),k=0;while(!0){let{done:C,value:m}=await R.read();if(C)break;x.push(m),k+=m.length,n?.({lengthComputable:w>0,loaded:k,total:w})}let p=et(x,k);try{c=ot({request:t,content:p,contentType:E})}catch(C){return N({error:C,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,Ct 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};
|