@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 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: IsOptionalObject<Input> extends true ? (input?: RequestInputValue<Input>) => Promise<HttpResponse<Output>> : (input: RequestInputValue<Input>) => Promise<HttpResponse<Output>>;
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
- return "multipart/form-data";
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
- if (input && field2) {
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, fieldGroup, input) {
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 (isFieldGroup(fieldGroup) && inputIsObject(input)) {
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(fieldGroup)) {
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};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defjs/core",
3
- "version": "0.3.1",
3
+ "version": "0.3.3",
4
4
  "type": "module",
5
5
  "module": "index.js",
6
6
  "typings": "index.d.ts",