@oazapfts/runtime 0.0.1-start → 1.0.0-alpha.4
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/dist/headers.cjs +1 -1
- package/dist/headers.cjs.map +1 -7
- package/dist/headers.js +18 -0
- package/dist/headers.js.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -7
- package/dist/index.js +150 -0
- package/dist/index.js.map +1 -0
- package/dist/query.cjs +1 -1
- package/dist/query.cjs.map +1 -7
- package/dist/query.js +34 -0
- package/dist/query.js.map +1 -0
- package/dist/util.cjs +1 -1
- package/dist/util.cjs.map +1 -7
- package/dist/util.js +25 -0
- package/dist/util.js.map +1 -0
- package/package.json +7 -7
- package/vite.config.ts +19 -0
- package/dist/chunk-6C7A2H7M.mjs +0 -2
- package/dist/chunk-6C7A2H7M.mjs.map +0 -7
- package/dist/chunk-AU3ZD6WL.mjs +0 -2
- package/dist/chunk-AU3ZD6WL.mjs.map +0 -7
- package/dist/chunk-E3LXWSGM.mjs +0 -2
- package/dist/chunk-E3LXWSGM.mjs.map +0 -7
- package/dist/chunk-LUOVPBCG.mjs +0 -2
- package/dist/chunk-LUOVPBCG.mjs.map +0 -7
- package/dist/chunk-T7KECS5U.mjs +0 -2
- package/dist/chunk-T7KECS5U.mjs.map +0 -7
- package/dist/headers.mjs +0 -2
- package/dist/headers.mjs.map +0 -7
- package/dist/index.mjs +0 -2
- package/dist/index.mjs.map +0 -7
- package/dist/index.test.d.ts +0 -1
- package/dist/query.mjs +0 -2
- package/dist/query.mjs.map +0 -7
- package/dist/query.test.d.ts +0 -1
- package/dist/runtime.cjs +0 -2
- package/dist/runtime.cjs.map +0 -7
- package/dist/runtime.mjs +0 -2
- package/dist/runtime.mjs.map +0 -7
- package/dist/util.mjs +0 -2
- package/dist/util.mjs.map +0 -7
- package/dist/util.test.d.ts +0 -1
package/dist/headers.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function s(e,r){const t=n(e);return n(r).forEach((a,i)=>{t.set(i,a)}),t}function n(e){return e&&!(e instanceof Headers)&&!Array.isArray(e)?new Headers(Object.fromEntries(Object.entries(e).filter(([,r])=>r!=null).map(([r,t])=>[r,String(t)]))):new Headers(e)}exports.mergeHeaders=s;exports.normalizeHeaders=n;
|
|
2
2
|
//# sourceMappingURL=headers.cjs.map
|
package/dist/headers.cjs.map
CHANGED
|
@@ -1,7 +1 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/headers.ts"],
|
|
4
|
-
"sourcesContent": ["export type CustomHeaders = Record<\n string,\n string | null | boolean | number | undefined\n>;\n\nexport function mergeHeaders(\n base: HeadersInit | CustomHeaders | undefined,\n overwrite?: HeadersInit | CustomHeaders,\n) {\n const baseHeaders = normalizeHeaders(base);\n const overwriteHeaders = normalizeHeaders(overwrite);\n\n overwriteHeaders.forEach((value, key) => {\n baseHeaders.set(key, value);\n });\n\n return baseHeaders;\n}\n\nexport function normalizeHeaders(\n headers: HeadersInit | CustomHeaders | undefined,\n) {\n // This might be custom header config containing null | boolean | number | undefined\n // By default Headers constructor will convert them to string but we don't want that\n // for nullish values.\n if (headers && !(headers instanceof Headers) && !Array.isArray(headers)) {\n return new Headers(\n Object.fromEntries(\n Object.entries(headers)\n .filter(([, v]) => v != null)\n .map(([k, v]) => [k, String(v)]),\n ),\n );\n }\n\n return new Headers(headers);\n}\n"],
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,kBAAAE,EAAA,qBAAAC,IAAA,eAAAC,EAAAJ,GAKO,SAASE,EACdG,EACAC,EACA,CACA,MAAMC,EAAcJ,EAAiBE,CAAI,EAGzC,OAFyBF,EAAiBG,CAAS,EAElC,QAAQ,CAACE,EAAOC,IAAQ,CACvCF,EAAY,IAAIE,EAAKD,CAAK,CAC5B,CAAC,EAEMD,CACT,CAEO,SAASJ,EACdO,EACA,CAIA,OAAIA,GAAW,EAAEA,aAAmB,UAAY,CAAC,MAAM,QAAQA,CAAO,EAC7D,IAAI,QACT,OAAO,YACL,OAAO,QAAQA,CAAO,EACnB,OAAO,CAAC,CAAC,CAAEC,CAAC,IAAMA,GAAK,IAAI,EAC3B,IAAI,CAAC,CAACC,EAAGD,CAAC,IAAM,CAACC,EAAG,OAAOD,CAAC,CAAC,CAAC,CACnC,CACF,EAGK,IAAI,QAAQD,CAAO,CAC5B",
|
|
6
|
-
"names": ["headers_exports", "__export", "mergeHeaders", "normalizeHeaders", "__toCommonJS", "base", "overwrite", "baseHeaders", "value", "key", "headers", "v", "k"]
|
|
7
|
-
}
|
|
1
|
+
{"version":3,"file":"headers.cjs","sources":["../src/headers.ts"],"sourcesContent":["export type CustomHeaders = Record<\n string,\n string | null | boolean | number | undefined\n>;\n\nexport function mergeHeaders(\n base: HeadersInit | CustomHeaders | undefined,\n overwrite?: HeadersInit | CustomHeaders,\n) {\n const baseHeaders = normalizeHeaders(base);\n const overwriteHeaders = normalizeHeaders(overwrite);\n\n overwriteHeaders.forEach((value, key) => {\n baseHeaders.set(key, value);\n });\n\n return baseHeaders;\n}\n\nexport function normalizeHeaders(\n headers: HeadersInit | CustomHeaders | undefined,\n) {\n // This might be custom header config containing null | boolean | number | undefined\n // By default Headers constructor will convert them to string but we don't want that\n // for nullish values.\n if (headers && !(headers instanceof Headers) && !Array.isArray(headers)) {\n return new Headers(\n Object.fromEntries(\n Object.entries(headers)\n .filter(([, v]) => v != null)\n .map(([k, v]) => [k, String(v)]),\n ),\n );\n }\n\n return new Headers(headers);\n}\n"],"names":["mergeHeaders","base","overwrite","baseHeaders","normalizeHeaders","value","key","headers","v","k"],"mappings":"gFAKgB,SAAAA,EACdC,EACAC,EACA,CACM,MAAAC,EAAcC,EAAiBH,CAAI,EAGxB,OAFQG,EAAiBF,CAAS,EAElC,QAAQ,CAACG,EAAOC,IAAQ,CAC3BH,EAAA,IAAIG,EAAKD,CAAK,CAAA,CAC3B,EAEMF,CACT,CAEO,SAASC,EACdG,EACA,CAII,OAAAA,GAAW,EAAEA,aAAmB,UAAY,CAAC,MAAM,QAAQA,CAAO,EAC7D,IAAI,QACT,OAAO,YACL,OAAO,QAAQA,CAAO,EACnB,OAAO,CAAC,EAAGC,CAAC,IAAMA,GAAK,IAAI,EAC3B,IAAI,CAAC,CAACC,EAAGD,CAAC,IAAM,CAACC,EAAG,OAAOD,CAAC,CAAC,CAAC,CACnC,CAAA,EAIG,IAAI,QAAQD,CAAO,CAC5B"}
|
package/dist/headers.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
function o(e, r) {
|
|
2
|
+
const n = t(e);
|
|
3
|
+
return t(r).forEach((i, s) => {
|
|
4
|
+
n.set(s, i);
|
|
5
|
+
}), n;
|
|
6
|
+
}
|
|
7
|
+
function t(e) {
|
|
8
|
+
return e && !(e instanceof Headers) && !Array.isArray(e) ? new Headers(
|
|
9
|
+
Object.fromEntries(
|
|
10
|
+
Object.entries(e).filter(([, r]) => r != null).map(([r, n]) => [r, String(n)])
|
|
11
|
+
)
|
|
12
|
+
) : new Headers(e);
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
o as mergeHeaders,
|
|
16
|
+
t as normalizeHeaders
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=headers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headers.js","sources":["../src/headers.ts"],"sourcesContent":["export type CustomHeaders = Record<\n string,\n string | null | boolean | number | undefined\n>;\n\nexport function mergeHeaders(\n base: HeadersInit | CustomHeaders | undefined,\n overwrite?: HeadersInit | CustomHeaders,\n) {\n const baseHeaders = normalizeHeaders(base);\n const overwriteHeaders = normalizeHeaders(overwrite);\n\n overwriteHeaders.forEach((value, key) => {\n baseHeaders.set(key, value);\n });\n\n return baseHeaders;\n}\n\nexport function normalizeHeaders(\n headers: HeadersInit | CustomHeaders | undefined,\n) {\n // This might be custom header config containing null | boolean | number | undefined\n // By default Headers constructor will convert them to string but we don't want that\n // for nullish values.\n if (headers && !(headers instanceof Headers) && !Array.isArray(headers)) {\n return new Headers(\n Object.fromEntries(\n Object.entries(headers)\n .filter(([, v]) => v != null)\n .map(([k, v]) => [k, String(v)]),\n ),\n );\n }\n\n return new Headers(headers);\n}\n"],"names":["mergeHeaders","base","overwrite","baseHeaders","normalizeHeaders","value","key","headers","v","k"],"mappings":"AAKgB,SAAAA,EACdC,GACAC,GACA;AACM,QAAAC,IAAcC,EAAiBH,CAAI;AAGxB,SAFQG,EAAiBF,CAAS,EAElC,QAAQ,CAACG,GAAOC,MAAQ;AAC3B,IAAAH,EAAA,IAAIG,GAAKD,CAAK;AAAA,EAAA,CAC3B,GAEMF;AACT;AAEO,SAASC,EACdG,GACA;AAII,SAAAA,KAAW,EAAEA,aAAmB,YAAY,CAAC,MAAM,QAAQA,CAAO,IAC7D,IAAI;AAAA,IACT,OAAO;AAAA,MACL,OAAO,QAAQA,CAAO,EACnB,OAAO,CAAC,GAAGC,CAAC,MAAMA,KAAK,IAAI,EAC3B,IAAI,CAAC,CAACC,GAAGD,CAAC,MAAM,CAACC,GAAG,OAAOD,CAAC,CAAC,CAAC;AAAA,IACnC;AAAA,EAAA,IAIG,IAAI,QAAQD,CAAO;AAC5B;"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var g=Object.defineProperty;var E=(s,e,a)=>e in s?g(s,e,{enumerable:!0,configurable:!0,writable:!0,value:a}):s[e]=a;var p=(s,e,a)=>(E(s,typeof e!="symbol"?e+"":e,a),a);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const H=require("./query.cjs"),C=require("./util.cjs"),h=require("./headers.cjs");function b(s={}){async function e(r,n){const t=await f(r,n);let o;try{o=await t.text()}catch{}return{status:t.status,headers:t.headers,contentType:t.headers.get("content-type"),data:o}}async function a(r,n={}){const{status:t,headers:o,contentType:u,data:c}=await e(r,{...n,headers:h.mergeHeaders({Accept:"application/json"},n.headers)});return(u?u.includes("json"):!1)?{status:t,headers:o,data:c?JSON.parse(c):null}:{status:t,headers:o,data:c}}async function i(r,n={}){const t=await f(r,n);let o;try{o=await t.blob()}catch{}return{status:t.status,headers:t.headers,data:o}}async function f(r,n={}){const{baseUrl:t,fetch:o,...u}={...s,...n,headers:h.mergeHeaders(s.headers,n.headers)},c=C.joinUrl(t,r);return await(o||fetch)(c,u)}return{ok:l,fetchText:e,fetchJson:a,fetchBlob:i,mergeHeaders:h.mergeHeaders,json({body:r,headers:n,...t}){return{...t,...r!=null&&{body:JSON.stringify(r)},headers:h.mergeHeaders({"Content-Type":"application/json"},n)}},form({body:r,headers:n,...t}){return{...t,...r!=null&&{body:H.form(r)},headers:h.mergeHeaders({"Content-Type":"application/x-www-form-urlencoded"},n)}},multipart({body:r,headers:n,...t}){if(r==null)return{...t,body:r,headers:h.normalizeHeaders(n)};const o=new(s.formDataConstructor||t.formDataConstructor||FormData),u=(c,d)=>{typeof d=="string"||d instanceof Blob?o.append(c,d):o.append(c,new Blob([JSON.stringify(d)],{type:"application/json"}))};return Object.entries(r).forEach(([c,d])=>{Array.isArray(d)?d.forEach(S=>u(c,S)):u(c,d)}),{...t,body:o,headers:h.normalizeHeaders(n)}}}}async function j(s,e){const{status:a,data:i,headers:f}=await s,r=e[a];if(r)return r(i);if(e.default)return e.default(a,i);throw new y(a,i,f)}const m=[200,201,202,204];async function l(s){const e=await s;if(m.some(a=>a==e.status))return e.data;throw new y(e.status,e.data,e.headers)}function w(s){return(...e)=>l(s(...e))}function O(s){const e={};return Object.entries(s).forEach(([a,i])=>{e[a]=typeof i=="function"?w(i):i}),e}class y extends Error{constructor(a,i,f){super(`Error: ${a}`);p(this,"status");p(this,"data");p(this,"headers");this.status=a,this.data=i,this.headers=f}}exports.HttpError=y;exports.SUCCESS_CODES=m;exports.handle=j;exports.ok=l;exports.okify=w;exports.optimistic=O;exports.runtime=b;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1,7 +1 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["import type { ApiResponse, WithHeaders } from \"./runtime\";\n\nexport * from \"./runtime\";\n\n/**\n * Type to access a response's data property for a given status.\n */\nexport type DataType<T extends ApiResponse, S extends number> = T extends {\n status: S;\n}\n ? T[\"data\"]\n : never;\n\n/**\n * Object with methods to handle possible status codes of an ApiResponse.\n */\nexport type ResponseHandler<T extends ApiResponse> = {\n [P in T[\"status\"]]?: (res: DataType<T, P>) => any;\n} & {\n default?: (status: number, data: any) => any;\n};\n\nexport type FunctionReturnType<T> = T extends (...args: any[]) => any\n ? ReturnType<T>\n : never;\n\n/**\n * Utility function to handle different status codes.\n *\n * Example:\n *\n * const userId = await handle(api.register({ email, password }), {\n * 200: (user: User) => user.id,\n * 400: (err: string) => console.log(err),\n * })\n **/\nexport async function handle<\n T extends WithHeaders<ApiResponse>,\n H extends ResponseHandler<T>,\n>(promise: Promise<T>, handler: H): Promise<FunctionReturnType<H[keyof H]>> {\n const { status, data, headers } = await promise;\n const statusHandler = (handler as any)[status];\n if (statusHandler) return statusHandler(data);\n if (handler.default) return handler.default(status, data);\n throw new HttpError(status, data, headers);\n}\n\nexport const SUCCESS_CODES = [200, 201, 202, 204] as const;\nexport type SuccessCodes = (typeof SUCCESS_CODES)[number];\n\nexport type SuccessResponse<T extends ApiResponse> = DataType<T, SuccessCodes>;\n\n/**\n * Utility function to directly return any successful response\n * and throw a HttpError otherwise.\n *\n * Example:\n *\n * try {\n * const userId = await ok(api.register({ email, password }));\n * }\n * catch (err) {\n * console.log(err.status)\n * }\n */\nexport async function ok<T extends WithHeaders<ApiResponse>>(\n promise: Promise<T>,\n): Promise<SuccessResponse<T>> {\n const res = await promise;\n if (SUCCESS_CODES.some((s) => s == res.status)) return res.data;\n throw new HttpError(res.status, res.data, res.headers);\n}\n\nexport type Args<T> = T extends (...args: infer U) => any ? U : any;\nexport type ApiFunction = (...args: any[]) => Promise<WithHeaders<ApiResponse>>;\nexport type AsyncReturnType<T> = T extends (...args: any[]) => Promise<infer V>\n ? V\n : never;\n\nexport type OkResponse<T extends ApiFunction> = SuccessResponse<\n AsyncReturnType<T>\n>;\n\nexport type Okify<T extends ApiFunction> = (\n ...args: Args<T>\n) => Promise<OkResponse<T>>;\n\n/**\n * Utility function to wrap an API function with `ok(...)`.\n */\nexport function okify<T extends ApiFunction>(fn: T): Okify<T> {\n return (...args: Args<T>) => ok(fn(...args));\n}\n\ntype OptimisticApi<T> = {\n [K in keyof T]: T[K] extends ApiFunction ? Okify<T[K]> : T[K];\n};\n\n/**\n * Utility to `okify` each function of an API.\n */\nexport function optimistic<T extends Record<string, ApiFunction | unknown>>(\n api: T,\n): OptimisticApi<T> {\n const okApi: any = {};\n Object.entries(api).forEach(([key, value]) => {\n okApi[key] = typeof value === \"function\" ? okify(value as any) : value;\n });\n return okApi;\n}\n\nexport class HttpError extends Error {\n status: number;\n data?: any;\n headers: Headers;\n\n constructor(status: number, data: any, headers: Headers) {\n super(`Error: ${status}`);\n this.status = status;\n this.data = data;\n this.headers = headers;\n }\n}\n"],
|
|
5
|
-
"mappings": "ozBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,eAAAE,EAAA,kBAAAC,EAAA,WAAAC,EAAA,OAAAC,EAAA,UAAAC,EAAA,eAAAC,IAAA,eAAAC,EAAAR,GAEAS,EAAAC,EAAc,qBAFd,gBAoCA,SAAsBC,EAGpBC,EAAqBC,EAAqD,QAAAC,EAAA,sBAC1E,KAAM,CAAE,OAAAC,EAAQ,KAAAC,EAAM,QAAAC,CAAQ,EAAI,MAAML,EAClCM,EAAiBL,EAAgBE,CAAM,EAC7C,GAAIG,EAAe,OAAOA,EAAcF,CAAI,EAC5C,GAAIH,EAAQ,QAAS,OAAOA,EAAQ,QAAQE,EAAQC,CAAI,EACxD,MAAM,IAAIG,EAAUJ,EAAQC,EAAMC,CAAO,CAC3C,GAEO,MAAMG,EAAgB,CAAC,IAAK,IAAK,IAAK,GAAG,EAkBhD,SAAsBC,EACpBT,EAC6B,QAAAE,EAAA,sBAC7B,MAAMQ,EAAM,MAAMV,EAClB,GAAIQ,EAAc,KAAMG,GAAMA,GAAKD,EAAI,MAAM,EAAG,OAAOA,EAAI,KAC3D,MAAM,IAAIH,EAAUG,EAAI,OAAQA,EAAI,KAAMA,EAAI,OAAO,CACvD,GAmBO,SAASE,EAA6BC,EAAiB,CAC5D,MAAO,IAAIC,IAAkBL,EAAGI,EAAG,GAAGC,CAAI,CAAC,CAC7C,CASO,SAASC,EACdC,EACkB,CAClB,MAAMC,EAAa,CAAC,EACpB,cAAO,QAAQD,CAAG,EAAE,QAAQ,CAAC,CAACE,EAAKC,CAAK,IAAM,CAC5CF,EAAMC,CAAG,EAAI,OAAOC,GAAU,WAAaP,EAAMO,CAAY,EAAIA,CACnE,CAAC,EACMF,CACT,CAEO,MAAMV,UAAkB,KAAM,CAKnC,YAAYJ,EAAgBC,EAAWC,EAAkB,CACvD,MAAM,UAAUF,CAAM,EAAE,EAL1BiB,EAAA,eACAA,EAAA,aACAA,EAAA,gBAIE,KAAK,OAASjB,EACd,KAAK,KAAOC,EACZ,KAAK,QAAUC,CACjB,CACF",
|
|
6
|
-
"names": ["src_exports", "__export", "HttpError", "SUCCESS_CODES", "handle", "ok", "okify", "optimistic", "__toCommonJS", "__reExport", "src_exports", "handle", "promise", "handler", "__async", "status", "data", "headers", "statusHandler", "HttpError", "SUCCESS_CODES", "ok", "res", "s", "okify", "fn", "args", "optimistic", "api", "okApi", "key", "value", "__publicField"]
|
|
7
|
-
}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/runtime.ts","../src/index.ts"],"sourcesContent":["import * as qs from \"./query\";\nimport { joinUrl } from \"./util\";\nimport { ok } from \"./index\";\nimport { CustomHeaders, mergeHeaders, normalizeHeaders } from \"./headers\";\n\nexport { type CustomHeaders };\n\nexport type RequestOpts = {\n baseUrl?: string;\n fetch?: typeof fetch;\n formDataConstructor?: new () => FormData;\n headers?: HeadersInit | CustomHeaders;\n} & Omit<RequestInit, \"body\" | \"headers\">;\n\nexport type Defaults<Headers extends RequestOpts[\"headers\"] = CustomHeaders> =\n Omit<RequestOpts, \"headers\" | \"baseUrl\"> & {\n baseUrl: string;\n headers: Headers;\n };\n\ntype FetchRequestOpts = RequestOpts & {\n body?: string | FormData | Blob;\n};\n\ntype JsonRequestOpts = RequestOpts & {\n body?: any;\n};\n\ntype FormRequestOpts = RequestOpts & {\n body?: Record<string, any>;\n};\n\nexport type ApiResponse = { status: number; data?: any };\n\nexport type WithHeaders<T extends ApiResponse> = T & { headers: Headers };\n\ntype MultipartRequestOpts = RequestOpts & {\n body?: Record<string, unknown>;\n};\n\nexport function runtime(defaults: RequestOpts = {}) {\n async function fetchText(url: string, req?: FetchRequestOpts) {\n const res = await doFetch(url, req);\n let data;\n try {\n data = await res.text();\n } catch (err) {}\n\n return {\n status: res.status,\n headers: res.headers,\n contentType: res.headers.get(\"content-type\"),\n data,\n };\n }\n\n async function fetchJson<T extends ApiResponse>(\n url: string,\n req: FetchRequestOpts = {},\n ) {\n const { status, headers, contentType, data } = await fetchText(url, {\n ...req,\n headers: mergeHeaders(\n {\n Accept: \"application/json\",\n },\n req.headers,\n ),\n });\n\n const isJson = contentType ? contentType.includes(\"json\") : false;\n\n if (isJson) {\n return {\n status,\n headers,\n data: data ? JSON.parse(data) : null,\n } as WithHeaders<T>;\n }\n\n return { status, headers, data } as WithHeaders<T>;\n }\n\n async function fetchBlob<T extends ApiResponse>(\n url: string,\n req: FetchRequestOpts = {},\n ) {\n const res = await doFetch(url, req);\n let data;\n try {\n data = await res.blob();\n } catch (err) {}\n return { status: res.status, headers: res.headers, data } as WithHeaders<T>;\n }\n\n async function doFetch(url: string, req: FetchRequestOpts = {}) {\n const {\n baseUrl,\n fetch: customFetch,\n ...init\n } = {\n ...defaults,\n ...req,\n headers: mergeHeaders(defaults.headers, req.headers),\n };\n const href = joinUrl(baseUrl, url);\n const res = await (customFetch || fetch)(href, init);\n return res;\n }\n\n return {\n ok,\n fetchText,\n fetchJson,\n fetchBlob,\n mergeHeaders,\n\n json({ body, headers, ...req }: JsonRequestOpts) {\n return {\n ...req,\n ...(body != null && { body: JSON.stringify(body) }),\n headers: mergeHeaders(\n {\n \"Content-Type\": \"application/json\",\n },\n headers,\n ),\n };\n },\n\n form({ body, headers, ...req }: FormRequestOpts) {\n return {\n ...req,\n ...(body != null && { body: qs.form(body) }),\n headers: mergeHeaders(\n {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n headers,\n ),\n };\n },\n\n multipart({ body, headers, ...req }: MultipartRequestOpts) {\n if (body == null)\n return { ...req, body, headers: normalizeHeaders(headers) };\n\n const data = new (defaults.formDataConstructor ||\n req.formDataConstructor ||\n FormData)();\n\n const append = (name: string, value: unknown) => {\n if (typeof value === \"string\" || value instanceof Blob) {\n data.append(name, value);\n } else {\n data.append(\n name,\n new Blob([JSON.stringify(value)], { type: \"application/json\" }),\n );\n }\n };\n\n Object.entries(body).forEach(([name, value]) => {\n if (Array.isArray(value)) {\n value.forEach((v) => append(name, v));\n } else {\n append(name, value);\n }\n });\n\n return {\n ...req,\n body: data,\n headers: normalizeHeaders(headers),\n };\n },\n };\n}\n","import type { ApiResponse, WithHeaders } from \"./runtime\";\n\nexport * from \"./runtime\";\n\n/**\n * Type to access a response's data property for a given status.\n */\nexport type DataType<T extends ApiResponse, S extends number> = T extends {\n status: S;\n}\n ? T[\"data\"]\n : never;\n\n/**\n * Object with methods to handle possible status codes of an ApiResponse.\n */\nexport type ResponseHandler<T extends ApiResponse> = {\n [P in T[\"status\"]]?: (res: DataType<T, P>) => any;\n} & {\n default?: (status: number, data: any) => any;\n};\n\nexport type FunctionReturnType<T> = T extends (...args: any[]) => any\n ? ReturnType<T>\n : never;\n\n/**\n * Utility function to handle different status codes.\n *\n * Example:\n *\n * const userId = await handle(api.register({ email, password }), {\n * 200: (user: User) => user.id,\n * 400: (err: string) => console.log(err),\n * })\n **/\nexport async function handle<\n T extends WithHeaders<ApiResponse>,\n H extends ResponseHandler<T>,\n>(promise: Promise<T>, handler: H): Promise<FunctionReturnType<H[keyof H]>> {\n const { status, data, headers } = await promise;\n const statusHandler = (handler as any)[status];\n if (statusHandler) return statusHandler(data);\n if (handler.default) return handler.default(status, data);\n throw new HttpError(status, data, headers);\n}\n\nexport const SUCCESS_CODES = [200, 201, 202, 204] as const;\nexport type SuccessCodes = (typeof SUCCESS_CODES)[number];\n\nexport type SuccessResponse<T extends ApiResponse> = DataType<T, SuccessCodes>;\n\n/**\n * Utility function to directly return any successful response\n * and throw a HttpError otherwise.\n *\n * Example:\n *\n * try {\n * const userId = await ok(api.register({ email, password }));\n * }\n * catch (err) {\n * console.log(err.status)\n * }\n */\nexport async function ok<T extends WithHeaders<ApiResponse>>(\n promise: Promise<T>,\n): Promise<SuccessResponse<T>> {\n const res = await promise;\n if (SUCCESS_CODES.some((s) => s == res.status)) return res.data;\n throw new HttpError(res.status, res.data, res.headers);\n}\n\nexport type Args<T> = T extends (...args: infer U) => any ? U : any;\nexport type ApiFunction = (...args: any[]) => Promise<WithHeaders<ApiResponse>>;\nexport type AsyncReturnType<T> = T extends (...args: any[]) => Promise<infer V>\n ? V\n : never;\n\nexport type OkResponse<T extends ApiFunction> = SuccessResponse<\n AsyncReturnType<T>\n>;\n\nexport type Okify<T extends ApiFunction> = (\n ...args: Args<T>\n) => Promise<OkResponse<T>>;\n\n/**\n * Utility function to wrap an API function with `ok(...)`.\n */\nexport function okify<T extends ApiFunction>(fn: T): Okify<T> {\n return (...args: Args<T>) => ok(fn(...args));\n}\n\ntype OptimisticApi<T> = {\n [K in keyof T]: T[K] extends ApiFunction ? Okify<T[K]> : T[K];\n};\n\n/**\n * Utility to `okify` each function of an API.\n */\nexport function optimistic<T extends Record<string, ApiFunction | unknown>>(\n api: T,\n): OptimisticApi<T> {\n const okApi: any = {};\n Object.entries(api).forEach(([key, value]) => {\n okApi[key] = typeof value === \"function\" ? okify(value as any) : value;\n });\n return okApi;\n}\n\nexport class HttpError extends Error {\n status: number;\n data?: any;\n headers: Headers;\n\n constructor(status: number, data: any, headers: Headers) {\n super(`Error: ${status}`);\n this.status = status;\n this.data = data;\n this.headers = headers;\n }\n}\n"],"names":["runtime","defaults","fetchText","url","req","res","doFetch","data","fetchJson","status","headers","contentType","mergeHeaders","fetchBlob","baseUrl","customFetch","init","href","joinUrl","ok","body","qs.form","normalizeHeaders","append","name","value","v","handle","promise","handler","statusHandler","HttpError","SUCCESS_CODES","s","okify","fn","args","optimistic","api","okApi","key","__publicField"],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
var j = Object.defineProperty;
|
|
2
|
+
var E = (n, t, s) => t in n ? j(n, t, { enumerable: !0, configurable: !0, writable: !0, value: s }) : n[t] = s;
|
|
3
|
+
var p = (n, t, s) => (E(n, typeof t != "symbol" ? t + "" : t, s), s);
|
|
4
|
+
import { form as b } from "./query.js";
|
|
5
|
+
import { joinUrl as C } from "./util.js";
|
|
6
|
+
import { mergeHeaders as h, normalizeHeaders as l } from "./headers.js";
|
|
7
|
+
function A(n = {}) {
|
|
8
|
+
async function t(r, a) {
|
|
9
|
+
const e = await d(r, a);
|
|
10
|
+
let o;
|
|
11
|
+
try {
|
|
12
|
+
o = await e.text();
|
|
13
|
+
} catch {
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
status: e.status,
|
|
17
|
+
headers: e.headers,
|
|
18
|
+
contentType: e.headers.get("content-type"),
|
|
19
|
+
data: o
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
async function s(r, a = {}) {
|
|
23
|
+
const { status: e, headers: o, contentType: u, data: i } = await t(r, {
|
|
24
|
+
...a,
|
|
25
|
+
headers: h(
|
|
26
|
+
{
|
|
27
|
+
Accept: "application/json"
|
|
28
|
+
},
|
|
29
|
+
a.headers
|
|
30
|
+
)
|
|
31
|
+
});
|
|
32
|
+
return (u ? u.includes("json") : !1) ? {
|
|
33
|
+
status: e,
|
|
34
|
+
headers: o,
|
|
35
|
+
data: i ? JSON.parse(i) : null
|
|
36
|
+
} : { status: e, headers: o, data: i };
|
|
37
|
+
}
|
|
38
|
+
async function c(r, a = {}) {
|
|
39
|
+
const e = await d(r, a);
|
|
40
|
+
let o;
|
|
41
|
+
try {
|
|
42
|
+
o = await e.blob();
|
|
43
|
+
} catch {
|
|
44
|
+
}
|
|
45
|
+
return { status: e.status, headers: e.headers, data: o };
|
|
46
|
+
}
|
|
47
|
+
async function d(r, a = {}) {
|
|
48
|
+
const {
|
|
49
|
+
baseUrl: e,
|
|
50
|
+
fetch: o,
|
|
51
|
+
...u
|
|
52
|
+
} = {
|
|
53
|
+
...n,
|
|
54
|
+
...a,
|
|
55
|
+
headers: h(n.headers, a.headers)
|
|
56
|
+
}, i = C(e, r);
|
|
57
|
+
return await (o || fetch)(i, u);
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
ok: y,
|
|
61
|
+
fetchText: t,
|
|
62
|
+
fetchJson: s,
|
|
63
|
+
fetchBlob: c,
|
|
64
|
+
mergeHeaders: h,
|
|
65
|
+
json({ body: r, headers: a, ...e }) {
|
|
66
|
+
return {
|
|
67
|
+
...e,
|
|
68
|
+
...r != null && { body: JSON.stringify(r) },
|
|
69
|
+
headers: h(
|
|
70
|
+
{
|
|
71
|
+
"Content-Type": "application/json"
|
|
72
|
+
},
|
|
73
|
+
a
|
|
74
|
+
)
|
|
75
|
+
};
|
|
76
|
+
},
|
|
77
|
+
form({ body: r, headers: a, ...e }) {
|
|
78
|
+
return {
|
|
79
|
+
...e,
|
|
80
|
+
...r != null && { body: b(r) },
|
|
81
|
+
headers: h(
|
|
82
|
+
{
|
|
83
|
+
"Content-Type": "application/x-www-form-urlencoded"
|
|
84
|
+
},
|
|
85
|
+
a
|
|
86
|
+
)
|
|
87
|
+
};
|
|
88
|
+
},
|
|
89
|
+
multipart({ body: r, headers: a, ...e }) {
|
|
90
|
+
if (r == null)
|
|
91
|
+
return { ...e, body: r, headers: l(a) };
|
|
92
|
+
const o = new (n.formDataConstructor || e.formDataConstructor || FormData)(), u = (i, f) => {
|
|
93
|
+
typeof f == "string" || f instanceof Blob ? o.append(i, f) : o.append(
|
|
94
|
+
i,
|
|
95
|
+
new Blob([JSON.stringify(f)], { type: "application/json" })
|
|
96
|
+
);
|
|
97
|
+
};
|
|
98
|
+
return Object.entries(r).forEach(([i, f]) => {
|
|
99
|
+
Array.isArray(f) ? f.forEach((w) => u(i, w)) : u(i, f);
|
|
100
|
+
}), {
|
|
101
|
+
...e,
|
|
102
|
+
body: o,
|
|
103
|
+
headers: l(a)
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
async function D(n, t) {
|
|
109
|
+
const { status: s, data: c, headers: d } = await n, r = t[s];
|
|
110
|
+
if (r)
|
|
111
|
+
return r(c);
|
|
112
|
+
if (t.default)
|
|
113
|
+
return t.default(s, c);
|
|
114
|
+
throw new m(s, c, d);
|
|
115
|
+
}
|
|
116
|
+
const S = [200, 201, 202, 204];
|
|
117
|
+
async function y(n) {
|
|
118
|
+
const t = await n;
|
|
119
|
+
if (S.some((s) => s == t.status))
|
|
120
|
+
return t.data;
|
|
121
|
+
throw new m(t.status, t.data, t.headers);
|
|
122
|
+
}
|
|
123
|
+
function J(n) {
|
|
124
|
+
return (...t) => y(n(...t));
|
|
125
|
+
}
|
|
126
|
+
function H(n) {
|
|
127
|
+
const t = {};
|
|
128
|
+
return Object.entries(n).forEach(([s, c]) => {
|
|
129
|
+
t[s] = typeof c == "function" ? J(c) : c;
|
|
130
|
+
}), t;
|
|
131
|
+
}
|
|
132
|
+
class m extends Error {
|
|
133
|
+
constructor(s, c, d) {
|
|
134
|
+
super(`Error: ${s}`);
|
|
135
|
+
p(this, "status");
|
|
136
|
+
p(this, "data");
|
|
137
|
+
p(this, "headers");
|
|
138
|
+
this.status = s, this.data = c, this.headers = d;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
export {
|
|
142
|
+
m as HttpError,
|
|
143
|
+
S as SUCCESS_CODES,
|
|
144
|
+
D as handle,
|
|
145
|
+
y as ok,
|
|
146
|
+
J as okify,
|
|
147
|
+
H as optimistic,
|
|
148
|
+
A as runtime
|
|
149
|
+
};
|
|
150
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/runtime.ts","../src/index.ts"],"sourcesContent":["import * as qs from \"./query\";\nimport { joinUrl } from \"./util\";\nimport { ok } from \"./index\";\nimport { CustomHeaders, mergeHeaders, normalizeHeaders } from \"./headers\";\n\nexport { type CustomHeaders };\n\nexport type RequestOpts = {\n baseUrl?: string;\n fetch?: typeof fetch;\n formDataConstructor?: new () => FormData;\n headers?: HeadersInit | CustomHeaders;\n} & Omit<RequestInit, \"body\" | \"headers\">;\n\nexport type Defaults<Headers extends RequestOpts[\"headers\"] = CustomHeaders> =\n Omit<RequestOpts, \"headers\" | \"baseUrl\"> & {\n baseUrl: string;\n headers: Headers;\n };\n\ntype FetchRequestOpts = RequestOpts & {\n body?: string | FormData | Blob;\n};\n\ntype JsonRequestOpts = RequestOpts & {\n body?: any;\n};\n\ntype FormRequestOpts = RequestOpts & {\n body?: Record<string, any>;\n};\n\nexport type ApiResponse = { status: number; data?: any };\n\nexport type WithHeaders<T extends ApiResponse> = T & { headers: Headers };\n\ntype MultipartRequestOpts = RequestOpts & {\n body?: Record<string, unknown>;\n};\n\nexport function runtime(defaults: RequestOpts = {}) {\n async function fetchText(url: string, req?: FetchRequestOpts) {\n const res = await doFetch(url, req);\n let data;\n try {\n data = await res.text();\n } catch (err) {}\n\n return {\n status: res.status,\n headers: res.headers,\n contentType: res.headers.get(\"content-type\"),\n data,\n };\n }\n\n async function fetchJson<T extends ApiResponse>(\n url: string,\n req: FetchRequestOpts = {},\n ) {\n const { status, headers, contentType, data } = await fetchText(url, {\n ...req,\n headers: mergeHeaders(\n {\n Accept: \"application/json\",\n },\n req.headers,\n ),\n });\n\n const isJson = contentType ? contentType.includes(\"json\") : false;\n\n if (isJson) {\n return {\n status,\n headers,\n data: data ? JSON.parse(data) : null,\n } as WithHeaders<T>;\n }\n\n return { status, headers, data } as WithHeaders<T>;\n }\n\n async function fetchBlob<T extends ApiResponse>(\n url: string,\n req: FetchRequestOpts = {},\n ) {\n const res = await doFetch(url, req);\n let data;\n try {\n data = await res.blob();\n } catch (err) {}\n return { status: res.status, headers: res.headers, data } as WithHeaders<T>;\n }\n\n async function doFetch(url: string, req: FetchRequestOpts = {}) {\n const {\n baseUrl,\n fetch: customFetch,\n ...init\n } = {\n ...defaults,\n ...req,\n headers: mergeHeaders(defaults.headers, req.headers),\n };\n const href = joinUrl(baseUrl, url);\n const res = await (customFetch || fetch)(href, init);\n return res;\n }\n\n return {\n ok,\n fetchText,\n fetchJson,\n fetchBlob,\n mergeHeaders,\n\n json({ body, headers, ...req }: JsonRequestOpts) {\n return {\n ...req,\n ...(body != null && { body: JSON.stringify(body) }),\n headers: mergeHeaders(\n {\n \"Content-Type\": \"application/json\",\n },\n headers,\n ),\n };\n },\n\n form({ body, headers, ...req }: FormRequestOpts) {\n return {\n ...req,\n ...(body != null && { body: qs.form(body) }),\n headers: mergeHeaders(\n {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n headers,\n ),\n };\n },\n\n multipart({ body, headers, ...req }: MultipartRequestOpts) {\n if (body == null)\n return { ...req, body, headers: normalizeHeaders(headers) };\n\n const data = new (defaults.formDataConstructor ||\n req.formDataConstructor ||\n FormData)();\n\n const append = (name: string, value: unknown) => {\n if (typeof value === \"string\" || value instanceof Blob) {\n data.append(name, value);\n } else {\n data.append(\n name,\n new Blob([JSON.stringify(value)], { type: \"application/json\" }),\n );\n }\n };\n\n Object.entries(body).forEach(([name, value]) => {\n if (Array.isArray(value)) {\n value.forEach((v) => append(name, v));\n } else {\n append(name, value);\n }\n });\n\n return {\n ...req,\n body: data,\n headers: normalizeHeaders(headers),\n };\n },\n };\n}\n","import type { ApiResponse, WithHeaders } from \"./runtime\";\n\nexport * from \"./runtime\";\n\n/**\n * Type to access a response's data property for a given status.\n */\nexport type DataType<T extends ApiResponse, S extends number> = T extends {\n status: S;\n}\n ? T[\"data\"]\n : never;\n\n/**\n * Object with methods to handle possible status codes of an ApiResponse.\n */\nexport type ResponseHandler<T extends ApiResponse> = {\n [P in T[\"status\"]]?: (res: DataType<T, P>) => any;\n} & {\n default?: (status: number, data: any) => any;\n};\n\nexport type FunctionReturnType<T> = T extends (...args: any[]) => any\n ? ReturnType<T>\n : never;\n\n/**\n * Utility function to handle different status codes.\n *\n * Example:\n *\n * const userId = await handle(api.register({ email, password }), {\n * 200: (user: User) => user.id,\n * 400: (err: string) => console.log(err),\n * })\n **/\nexport async function handle<\n T extends WithHeaders<ApiResponse>,\n H extends ResponseHandler<T>,\n>(promise: Promise<T>, handler: H): Promise<FunctionReturnType<H[keyof H]>> {\n const { status, data, headers } = await promise;\n const statusHandler = (handler as any)[status];\n if (statusHandler) return statusHandler(data);\n if (handler.default) return handler.default(status, data);\n throw new HttpError(status, data, headers);\n}\n\nexport const SUCCESS_CODES = [200, 201, 202, 204] as const;\nexport type SuccessCodes = (typeof SUCCESS_CODES)[number];\n\nexport type SuccessResponse<T extends ApiResponse> = DataType<T, SuccessCodes>;\n\n/**\n * Utility function to directly return any successful response\n * and throw a HttpError otherwise.\n *\n * Example:\n *\n * try {\n * const userId = await ok(api.register({ email, password }));\n * }\n * catch (err) {\n * console.log(err.status)\n * }\n */\nexport async function ok<T extends WithHeaders<ApiResponse>>(\n promise: Promise<T>,\n): Promise<SuccessResponse<T>> {\n const res = await promise;\n if (SUCCESS_CODES.some((s) => s == res.status)) return res.data;\n throw new HttpError(res.status, res.data, res.headers);\n}\n\nexport type Args<T> = T extends (...args: infer U) => any ? U : any;\nexport type ApiFunction = (...args: any[]) => Promise<WithHeaders<ApiResponse>>;\nexport type AsyncReturnType<T> = T extends (...args: any[]) => Promise<infer V>\n ? V\n : never;\n\nexport type OkResponse<T extends ApiFunction> = SuccessResponse<\n AsyncReturnType<T>\n>;\n\nexport type Okify<T extends ApiFunction> = (\n ...args: Args<T>\n) => Promise<OkResponse<T>>;\n\n/**\n * Utility function to wrap an API function with `ok(...)`.\n */\nexport function okify<T extends ApiFunction>(fn: T): Okify<T> {\n return (...args: Args<T>) => ok(fn(...args));\n}\n\ntype OptimisticApi<T> = {\n [K in keyof T]: T[K] extends ApiFunction ? Okify<T[K]> : T[K];\n};\n\n/**\n * Utility to `okify` each function of an API.\n */\nexport function optimistic<T extends Record<string, ApiFunction | unknown>>(\n api: T,\n): OptimisticApi<T> {\n const okApi: any = {};\n Object.entries(api).forEach(([key, value]) => {\n okApi[key] = typeof value === \"function\" ? okify(value as any) : value;\n });\n return okApi;\n}\n\nexport class HttpError extends Error {\n status: number;\n data?: any;\n headers: Headers;\n\n constructor(status: number, data: any, headers: Headers) {\n super(`Error: ${status}`);\n this.status = status;\n this.data = data;\n this.headers = headers;\n }\n}\n"],"names":["runtime","defaults","fetchText","url","req","res","doFetch","data","fetchJson","status","headers","contentType","mergeHeaders","fetchBlob","baseUrl","customFetch","init","href","joinUrl","ok","body","qs.form","normalizeHeaders","append","name","value","v","handle","promise","handler","statusHandler","HttpError","SUCCESS_CODES","okify","fn","args","optimistic","api","okApi","key","__publicField"],"mappings":"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"}
|
package/dist/query.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./util.cjs");function $(...o){const n=o.filter(Boolean).join("&");return n&&`?${n}`}function l(o,[n,i]=t.encodeReserved){const e=t.encode([s=>s,n]),r=t.encode([s=>s,i]),c=(s,f="")=>Object.entries(s).filter(([,d])=>d!==void 0).map(([d,u])=>{const y=Array.isArray(s)?"":d,p=f?e`${f}[${y}]`:d;return typeof u=="object"?c(u,p):r`${p}=${u}`}).join("&");return c(o)}function j(o,n=t.encodeReserved){const i=t.encode(n);return Object.entries(o).filter(([,e])=>e!==void 0).map(([e,r])=>Array.isArray(r)?r.map(c=>i`${e}=${c}`).join("&"):typeof r=="object"?j(r,n):i`${e}=${r}`).join("&")}function m(o,n=t.encodeReserved){const i=t.encode(n);return Object.entries(o).filter(([,e])=>e!==void 0).map(([e,r])=>{const c=JSON.stringify(r);return i`${e}=${c}`}).join("&")}const a=t.delimited(),q=t.delimited("|"),b=t.delimited("%20");exports.deep=l;exports.explode=j;exports.form=a;exports.json=m;exports.pipe=q;exports.query=$;exports.space=b;
|
|
2
2
|
//# sourceMappingURL=query.cjs.map
|
package/dist/query.cjs.map
CHANGED
|
@@ -1,7 +1 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/query.ts"],
|
|
4
|
-
"sourcesContent": ["import { encode, delimited, encodeReserved } from \"./util\";\n\n/**\n * Join params using an ampersand and prepends a questionmark if not empty.\n */\nexport function query(...params: string[]) {\n const s = params.filter(Boolean).join(\"&\");\n return s && `?${s}`;\n}\n\n/**\n * Serializes nested objects according to the `deepObject` style specified in\n * https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.0.md#style-values\n */\nexport function deep(\n params: Record<string, any>,\n [k, v] = encodeReserved,\n): string {\n const qk = encode([(s) => s, k]);\n const qv = encode([(s) => s, v]);\n // don't add index to arrays\n // https://github.com/expressjs/body-parser/issues/289\n const visit = (obj: any, prefix = \"\"): string =>\n Object.entries(obj)\n .filter(([, v]) => v !== undefined)\n .map(([prop, v]) => {\n const index = Array.isArray(obj) ? \"\" : prop;\n const key = prefix ? qk`${prefix}[${index}]` : prop;\n if (typeof v === \"object\") {\n return visit(v, key);\n }\n return qv`${key}=${v}`;\n })\n .join(\"&\");\n\n return visit(params);\n}\n\n/**\n * Property values of type array or object generate separate parameters\n * for each value of the array, or key-value-pair of the map.\n * For other types of properties this property has no effect.\n * See https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.0.md#encoding-object\n */\nexport function explode(\n params: Record<string, any>,\n encoders = encodeReserved,\n): string {\n const q = encode(encoders);\n return Object.entries(params)\n .filter(([, value]) => value !== undefined)\n .map(([name, value]) => {\n if (Array.isArray(value)) {\n return value.map((v) => q`${name}=${v}`).join(\"&\");\n }\n if (typeof value === \"object\") {\n return explode(value, encoders);\n }\n return q`${name}=${value}`;\n })\n .join(\"&\");\n}\n\nexport function json(\n params: Record<string, any>,\n encoders = encodeReserved,\n): string {\n const q = encode(encoders);\n return Object.entries(params)\n .filter(([, value]) => value !== undefined)\n .map(([name, value]) => {\n const v = JSON.stringify(value);\n return q`${name}=${v}`;\n })\n .join(\"&\");\n}\n\nexport const form = delimited();\nexport const pipe = delimited(\"|\");\nexport const space = delimited(\"%20\");\n"],
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,UAAAE,EAAA,YAAAC,EAAA,SAAAC,EAAA,SAAAC,EAAA,SAAAC,EAAA,UAAAC,EAAA,UAAAC,IAAA,eAAAC,EAAAT,GAAA,IAAAU,EAAkD,kBAK3C,SAASH,KAASI,EAAkB,CACzC,MAAMC,EAAID,EAAO,OAAO,OAAO,EAAE,KAAK,GAAG,EACzC,OAAOC,GAAK,IAAIA,CAAC,EACnB,CAMO,SAASV,EACdS,EACA,CAACE,EAAGC,CAAC,EAAI,iBACD,CACR,MAAMC,KAAK,UAAO,CAAEH,GAAMA,EAAGC,CAAC,CAAC,EACzBG,KAAK,UAAO,CAAEJ,GAAMA,EAAGE,CAAC,CAAC,EAGzBG,EAAQ,CAACC,EAAUC,EAAS,KAChC,OAAO,QAAQD,CAAG,EACf,OAAO,CAAC,CAAC,CAAEJ,CAAC,IAAMA,IAAM,MAAS,EACjC,IAAI,CAAC,CAACM,EAAMN,CAAC,IAAM,CAClB,MAAMO,EAAQ,MAAM,QAAQH,CAAG,EAAI,GAAKE,EAClCE,EAAMH,EAASJ,IAAKI,CAAM,IAAIE,CAAK,IAAMD,EAC/C,OAAI,OAAON,GAAM,SACRG,EAAMH,EAAGQ,CAAG,EAEdN,IAAKM,CAAG,IAAIR,CAAC,EACtB,CAAC,EACA,KAAK,GAAG,EAEb,OAAOG,EAAMN,CAAM,CACrB,CAQO,SAASR,EACdQ,EACAY,EAAW,iBACH,CACR,MAAMC,KAAI,UAAOD,CAAQ,EACzB,OAAO,OAAO,QAAQZ,CAAM,EACzB,OAAO,CAAC,CAAC,CAAEc,CAAK,IAAMA,IAAU,MAAS,EACzC,IAAI,CAAC,CAACC,EAAMD,CAAK,IACZ,MAAM,QAAQA,CAAK,EACdA,EAAM,IAAKX,GAAMU,IAAIE,CAAI,IAAIZ,CAAC,EAAE,EAAE,KAAK,GAAG,EAE/C,OAAOW,GAAU,SACZtB,EAAQsB,EAAOF,CAAQ,EAEzBC,IAAIE,CAAI,IAAID,CAAK,EACzB,EACA,KAAK,GAAG,CACb,CAEO,SAASpB,EACdM,EACAY,EAAW,iBACH,CACR,MAAMC,KAAI,UAAOD,CAAQ,EACzB,OAAO,OAAO,QAAQZ,CAAM,EACzB,OAAO,CAAC,CAAC,CAAEc,CAAK,IAAMA,IAAU,MAAS,EACzC,IAAI,CAAC,CAACC,EAAMD,CAAK,IAAM,CACtB,MAAMX,EAAI,KAAK,UAAUW,CAAK,EAC9B,OAAOD,IAAIE,CAAI,IAAIZ,CAAC,EACtB,CAAC,EACA,KAAK,GAAG,CACb,CAEO,MAAMV,KAAO,aAAU,EACjBE,KAAO,aAAU,GAAG,EACpBE,KAAQ,aAAU,KAAK",
|
|
6
|
-
"names": ["query_exports", "__export", "deep", "explode", "form", "json", "pipe", "query", "space", "__toCommonJS", "import_util", "params", "s", "k", "v", "qk", "qv", "visit", "obj", "prefix", "prop", "index", "key", "encoders", "q", "value", "name"]
|
|
7
|
-
}
|
|
1
|
+
{"version":3,"file":"query.cjs","sources":["../src/query.ts"],"sourcesContent":["import { encode, delimited, encodeReserved } from \"./util\";\n\n/**\n * Join params using an ampersand and prepends a questionmark if not empty.\n */\nexport function query(...params: string[]) {\n const s = params.filter(Boolean).join(\"&\");\n return s && `?${s}`;\n}\n\n/**\n * Serializes nested objects according to the `deepObject` style specified in\n * https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.0.md#style-values\n */\nexport function deep(\n params: Record<string, any>,\n [k, v] = encodeReserved,\n): string {\n const qk = encode([(s) => s, k]);\n const qv = encode([(s) => s, v]);\n // don't add index to arrays\n // https://github.com/expressjs/body-parser/issues/289\n const visit = (obj: any, prefix = \"\"): string =>\n Object.entries(obj)\n .filter(([, v]) => v !== undefined)\n .map(([prop, v]) => {\n const index = Array.isArray(obj) ? \"\" : prop;\n const key = prefix ? qk`${prefix}[${index}]` : prop;\n if (typeof v === \"object\") {\n return visit(v, key);\n }\n return qv`${key}=${v}`;\n })\n .join(\"&\");\n\n return visit(params);\n}\n\n/**\n * Property values of type array or object generate separate parameters\n * for each value of the array, or key-value-pair of the map.\n * For other types of properties this property has no effect.\n * See https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.0.md#encoding-object\n */\nexport function explode(\n params: Record<string, any>,\n encoders = encodeReserved,\n): string {\n const q = encode(encoders);\n return Object.entries(params)\n .filter(([, value]) => value !== undefined)\n .map(([name, value]) => {\n if (Array.isArray(value)) {\n return value.map((v) => q`${name}=${v}`).join(\"&\");\n }\n if (typeof value === \"object\") {\n return explode(value, encoders);\n }\n return q`${name}=${value}`;\n })\n .join(\"&\");\n}\n\nexport function json(\n params: Record<string, any>,\n encoders = encodeReserved,\n): string {\n const q = encode(encoders);\n return Object.entries(params)\n .filter(([, value]) => value !== undefined)\n .map(([name, value]) => {\n const v = JSON.stringify(value);\n return q`${name}=${v}`;\n })\n .join(\"&\");\n}\n\nexport const form = delimited();\nexport const pipe = delimited(\"|\");\nexport const space = delimited(\"%20\");\n"],"names":["query","params","s","deep","k","v","encodeReserved","qk","encode","qv","visit","obj","prefix","prop","index","key","explode","encoders","q","value","name","json","form","delimited","pipe","space"],"mappings":"8GAKO,SAASA,KAASC,EAAkB,CACzC,MAAMC,EAAID,EAAO,OAAO,OAAO,EAAE,KAAK,GAAG,EAClC,OAAAC,GAAK,IAAIA,CAAC,EACnB,CAMO,SAASC,EACdF,EACA,CAACG,EAAGC,CAAC,EAAIC,EAAAA,eACD,CACR,MAAMC,EAAKC,EAAAA,OAAO,CAAE,GAAM,EAAGJ,CAAC,CAAC,EACzBK,EAAKD,EAAAA,OAAO,CAAE,GAAM,EAAGH,CAAC,CAAC,EAGzBK,EAAQ,CAACC,EAAUC,EAAS,KAChC,OAAO,QAAQD,CAAG,EACf,OAAO,CAAC,CAAA,CAAGN,CAAC,IAAMA,IAAM,MAAS,EACjC,IAAI,CAAC,CAACQ,EAAMR,CAAC,IAAM,CAClB,MAAMS,EAAQ,MAAM,QAAQH,CAAG,EAAI,GAAKE,EAClCE,EAAMH,EAASL,IAAKK,CAAM,IAAIE,CAAK,IAAMD,EAC3C,OAAA,OAAOR,GAAM,SACRK,EAAML,EAAGU,CAAG,EAEdN,IAAKM,CAAG,IAAIV,CAAC,EAAA,CACrB,EACA,KAAK,GAAG,EAEb,OAAOK,EAAMT,CAAM,CACrB,CAQgB,SAAAe,EACdf,EACAgB,EAAWX,iBACH,CACF,MAAAY,EAAIV,SAAOS,CAAQ,EACzB,OAAO,OAAO,QAAQhB,CAAM,EACzB,OAAO,CAAC,CAAA,CAAGkB,CAAK,IAAMA,IAAU,MAAS,EACzC,IAAI,CAAC,CAACC,EAAMD,CAAK,IACZ,MAAM,QAAQA,CAAK,EACdA,EAAM,IAAKd,GAAMa,IAAIE,CAAI,IAAIf,CAAC,EAAE,EAAE,KAAK,GAAG,EAE/C,OAAOc,GAAU,SACZH,EAAQG,EAAOF,CAAQ,EAEzBC,IAAIE,CAAI,IAAID,CAAK,EACzB,EACA,KAAK,GAAG,CACb,CAEgB,SAAAE,EACdpB,EACAgB,EAAWX,iBACH,CACF,MAAAY,EAAIV,SAAOS,CAAQ,EACzB,OAAO,OAAO,QAAQhB,CAAM,EACzB,OAAO,CAAC,CAAA,CAAGkB,CAAK,IAAMA,IAAU,MAAS,EACzC,IAAI,CAAC,CAACC,EAAMD,CAAK,IAAM,CAChB,MAAAd,EAAI,KAAK,UAAUc,CAAK,EACvB,OAAAD,IAAIE,CAAI,IAAIf,CAAC,EAAA,CACrB,EACA,KAAK,GAAG,CACb,CAEO,MAAMiB,EAAOC,EAAAA,UAAU,EACjBC,EAAOD,YAAU,GAAG,EACpBE,EAAQF,YAAU,KAAK"}
|
package/dist/query.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { encodeReserved as $, delimited as d, encode as f } from "./util.js";
|
|
2
|
+
function q(...r) {
|
|
3
|
+
const n = r.filter(Boolean).join("&");
|
|
4
|
+
return n && `?${n}`;
|
|
5
|
+
}
|
|
6
|
+
function b(r, [n, o] = $) {
|
|
7
|
+
const t = f([(c) => c, n]), e = f([(c) => c, o]), i = (c, j = "") => Object.entries(c).filter(([, s]) => s !== void 0).map(([s, u]) => {
|
|
8
|
+
const y = Array.isArray(c) ? "" : s, p = j ? t`${j}[${y}]` : s;
|
|
9
|
+
return typeof u == "object" ? i(u, p) : e`${p}=${u}`;
|
|
10
|
+
}).join("&");
|
|
11
|
+
return i(r);
|
|
12
|
+
}
|
|
13
|
+
function m(r, n = $) {
|
|
14
|
+
const o = f(n);
|
|
15
|
+
return Object.entries(r).filter(([, t]) => t !== void 0).map(([t, e]) => Array.isArray(e) ? e.map((i) => o`${t}=${i}`).join("&") : typeof e == "object" ? m(e, n) : o`${t}=${e}`).join("&");
|
|
16
|
+
}
|
|
17
|
+
function A(r, n = $) {
|
|
18
|
+
const o = f(n);
|
|
19
|
+
return Object.entries(r).filter(([, t]) => t !== void 0).map(([t, e]) => {
|
|
20
|
+
const i = JSON.stringify(e);
|
|
21
|
+
return o`${t}=${i}`;
|
|
22
|
+
}).join("&");
|
|
23
|
+
}
|
|
24
|
+
const O = d(), l = d("|"), k = d("%20");
|
|
25
|
+
export {
|
|
26
|
+
b as deep,
|
|
27
|
+
m as explode,
|
|
28
|
+
O as form,
|
|
29
|
+
A as json,
|
|
30
|
+
l as pipe,
|
|
31
|
+
q as query,
|
|
32
|
+
k as space
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sources":["../src/query.ts"],"sourcesContent":["import { encode, delimited, encodeReserved } from \"./util\";\n\n/**\n * Join params using an ampersand and prepends a questionmark if not empty.\n */\nexport function query(...params: string[]) {\n const s = params.filter(Boolean).join(\"&\");\n return s && `?${s}`;\n}\n\n/**\n * Serializes nested objects according to the `deepObject` style specified in\n * https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.0.md#style-values\n */\nexport function deep(\n params: Record<string, any>,\n [k, v] = encodeReserved,\n): string {\n const qk = encode([(s) => s, k]);\n const qv = encode([(s) => s, v]);\n // don't add index to arrays\n // https://github.com/expressjs/body-parser/issues/289\n const visit = (obj: any, prefix = \"\"): string =>\n Object.entries(obj)\n .filter(([, v]) => v !== undefined)\n .map(([prop, v]) => {\n const index = Array.isArray(obj) ? \"\" : prop;\n const key = prefix ? qk`${prefix}[${index}]` : prop;\n if (typeof v === \"object\") {\n return visit(v, key);\n }\n return qv`${key}=${v}`;\n })\n .join(\"&\");\n\n return visit(params);\n}\n\n/**\n * Property values of type array or object generate separate parameters\n * for each value of the array, or key-value-pair of the map.\n * For other types of properties this property has no effect.\n * See https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.0.md#encoding-object\n */\nexport function explode(\n params: Record<string, any>,\n encoders = encodeReserved,\n): string {\n const q = encode(encoders);\n return Object.entries(params)\n .filter(([, value]) => value !== undefined)\n .map(([name, value]) => {\n if (Array.isArray(value)) {\n return value.map((v) => q`${name}=${v}`).join(\"&\");\n }\n if (typeof value === \"object\") {\n return explode(value, encoders);\n }\n return q`${name}=${value}`;\n })\n .join(\"&\");\n}\n\nexport function json(\n params: Record<string, any>,\n encoders = encodeReserved,\n): string {\n const q = encode(encoders);\n return Object.entries(params)\n .filter(([, value]) => value !== undefined)\n .map(([name, value]) => {\n const v = JSON.stringify(value);\n return q`${name}=${v}`;\n })\n .join(\"&\");\n}\n\nexport const form = delimited();\nexport const pipe = delimited(\"|\");\nexport const space = delimited(\"%20\");\n"],"names":["query","params","s","deep","k","v","encodeReserved","qk","encode","qv","visit","obj","prefix","prop","index","key","explode","encoders","q","value","name","json","form","delimited","pipe","space"],"mappings":";AAKO,SAASA,KAASC,GAAkB;AACzC,QAAMC,IAAID,EAAO,OAAO,OAAO,EAAE,KAAK,GAAG;AAClC,SAAAC,KAAK,IAAIA,CAAC;AACnB;AAMO,SAASC,EACdF,GACA,CAACG,GAAGC,CAAC,IAAIC,GACD;AACR,QAAMC,IAAKC,EAAO,CAAC,CAACN,MAAMA,GAAGE,CAAC,CAAC,GACzBK,IAAKD,EAAO,CAAC,CAACN,MAAMA,GAAGG,CAAC,CAAC,GAGzBK,IAAQ,CAACC,GAAUC,IAAS,OAChC,OAAO,QAAQD,CAAG,EACf,OAAO,CAAC,CAAA,EAAGN,CAAC,MAAMA,MAAM,MAAS,EACjC,IAAI,CAAC,CAACQ,GAAMR,CAAC,MAAM;AAClB,UAAMS,IAAQ,MAAM,QAAQH,CAAG,IAAI,KAAKE,GAClCE,IAAMH,IAASL,IAAKK,CAAM,IAAIE,CAAK,MAAMD;AAC3C,WAAA,OAAOR,KAAM,WACRK,EAAML,GAAGU,CAAG,IAEdN,IAAKM,CAAG,IAAIV,CAAC;AAAA,EAAA,CACrB,EACA,KAAK,GAAG;AAEb,SAAOK,EAAMT,CAAM;AACrB;AAQgB,SAAAe,EACdf,GACAgB,IAAWX,GACH;AACF,QAAAY,IAAIV,EAAOS,CAAQ;AACzB,SAAO,OAAO,QAAQhB,CAAM,EACzB,OAAO,CAAC,CAAA,EAAGkB,CAAK,MAAMA,MAAU,MAAS,EACzC,IAAI,CAAC,CAACC,GAAMD,CAAK,MACZ,MAAM,QAAQA,CAAK,IACdA,EAAM,IAAI,CAACd,MAAMa,IAAIE,CAAI,IAAIf,CAAC,EAAE,EAAE,KAAK,GAAG,IAE/C,OAAOc,KAAU,WACZH,EAAQG,GAAOF,CAAQ,IAEzBC,IAAIE,CAAI,IAAID,CAAK,EACzB,EACA,KAAK,GAAG;AACb;AAEgB,SAAAE,EACdpB,GACAgB,IAAWX,GACH;AACF,QAAAY,IAAIV,EAAOS,CAAQ;AACzB,SAAO,OAAO,QAAQhB,CAAM,EACzB,OAAO,CAAC,CAAA,EAAGkB,CAAK,MAAMA,MAAU,MAAS,EACzC,IAAI,CAAC,CAACC,GAAMD,CAAK,MAAM;AAChB,UAAAd,IAAI,KAAK,UAAUc,CAAK;AACvB,WAAAD,IAAIE,CAAI,IAAIf,CAAC;AAAA,EAAA,CACrB,EACA,KAAK,GAAG;AACb;AAEO,MAAMiB,IAAOC,EAAU,GACjBC,IAAOD,EAAU,GAAG,GACpBE,IAAQF,EAAU,KAAK;"}
|
package/dist/util.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=[encodeURIComponent,encodeURIComponent],f=[encodeURIComponent,encodeURI];function u(o,n=","){const t=(e,r)=>{const c=o[r%o.length];return typeof e>"u"?"":typeof e=="object"?Array.isArray(e)?e.map(c).join(n):Object.entries(e).reduce((i,a)=>[...i,...a],[]).map(c).join(n):c(String(e))};return(e,...r)=>e.reduce((c,d,i)=>`${c}${d}${t(r[i],i)}`,"")}function p(o=","){return(n,t=l)=>Object.entries(n).filter(([,e])=>e!==void 0).map(([e,r])=>u(t,o)`${e}=${r}`).join("&")}function s(...o){return o.filter(Boolean).map((n,t)=>t===0?n:n.replace(/^\/+/,"")).map((n,t,e)=>t===e.length-1?n:n.replace(/\/+$/,"")).join("/")}exports.allowReserved=f;exports.delimited=p;exports.encode=u;exports.encodeReserved=l;exports.joinUrl=s;
|
|
2
2
|
//# sourceMappingURL=util.cjs.map
|
package/dist/util.cjs.map
CHANGED
|
@@ -1,7 +1 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/util.ts"],
|
|
4
|
-
"sourcesContent": ["type Encoders = Array<(s: string) => string>;\n\n// Encode param names and values as URIComponent\nexport const encodeReserved = [encodeURIComponent, encodeURIComponent];\nexport const allowReserved = [encodeURIComponent, encodeURI];\n\n/**\n * Creates a tag-function to encode template strings with the given encoders.\n */\nexport function encode(encoders: Encoders, delimiter = \",\") {\n const q = (v: any, i: number) => {\n const encoder = encoders[i % encoders.length];\n if (typeof v === \"undefined\") {\n return \"\";\n }\n if (typeof v === \"object\") {\n if (Array.isArray(v)) {\n return v.map(encoder).join(delimiter);\n }\n const flat = Object.entries(v).reduce(\n (flat, entry) => [...flat, ...entry],\n [] as any,\n );\n return flat.map(encoder).join(delimiter);\n }\n\n return encoder(String(v));\n };\n\n return (strings: TemplateStringsArray, ...values: any[]) => {\n return strings.reduce((prev, s, i) => {\n return `${prev}${s}${q(values[i], i)}`;\n }, \"\");\n };\n}\n\n/**\n * Separate array values by the given delimiter.\n */\nexport function delimited(delimiter = \",\") {\n return (params: Record<string, any>, encoders = encodeReserved) =>\n Object.entries(params)\n .filter(([, value]) => value !== undefined)\n .map(([name, value]) => encode(encoders, delimiter)`${name}=${value}`)\n .join(\"&\");\n}\n\nexport function joinUrl(...parts: Array<string | undefined>) {\n return parts\n .filter(Boolean)\n .map((s, i) => (i === 0 ? s : s!.replace(/^\\/+/, \"\")))\n .map((s, i, a) => (i === a.length - 1 ? s : s!.replace(/\\/+$/, \"\")))\n .join(\"/\");\n}\n"],
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,EAAA,cAAAC,EAAA,WAAAC,EAAA,mBAAAC,EAAA,YAAAC,IAAA,eAAAC,EAAAP,GAGO,MAAMK,EAAiB,CAAC,mBAAoB,kBAAkB,EACxDH,EAAgB,CAAC,mBAAoB,SAAS,EAKpD,SAASE,EAAOI,EAAoBC,EAAY,IAAK,CAC1D,MAAMC,EAAI,CAACC,EAAQC,IAAc,CAC/B,MAAMC,EAAUL,EAASI,EAAIJ,EAAS,MAAM,EAC5C,OAAI,OAAOG,GAAM,YACR,GAEL,OAAOA,GAAM,SACX,MAAM,QAAQA,CAAC,EACVA,EAAE,IAAIE,CAAO,EAAE,KAAKJ,CAAS,EAEzB,OAAO,QAAQE,CAAC,EAAE,OAC7B,CAACG,EAAMC,IAAU,CAAC,GAAGD,EAAM,GAAGC,CAAK,EACnC,CAAC,CACH,EACY,IAAIF,CAAO,EAAE,KAAKJ,CAAS,EAGlCI,EAAQ,OAAOF,CAAC,CAAC,CAC1B,EAEA,MAAO,CAACK,KAAkCC,IACjCD,EAAQ,OAAO,CAACE,EAAMC,EAAG,IACvB,GAAGD,CAAI,GAAGC,CAAC,GAAGT,EAAEO,EAAO,CAAC,EAAG,CAAC,CAAC,GACnC,EAAE,CAET,CAKO,SAASd,EAAUM,EAAY,IAAK,CACzC,MAAO,CAACW,EAA6BZ,EAAWH,IAC9C,OAAO,QAAQe,CAAM,EAClB,OAAO,CAAC,CAAC,CAAEC,CAAK,IAAMA,IAAU,MAAS,EACzC,IAAI,CAAC,CAACC,EAAMD,CAAK,IAAMjB,EAAOI,EAAUC,CAAS,IAAIa,CAAI,IAAID,CAAK,EAAE,EACpE,KAAK,GAAG,CACf,CAEO,SAASf,KAAWiB,EAAkC,CAC3D,OAAOA,EACJ,OAAO,OAAO,EACd,IAAI,CAACJ,EAAGP,IAAOA,IAAM,EAAIO,EAAIA,EAAG,QAAQ,OAAQ,EAAE,CAAE,EACpD,IAAI,CAACA,EAAGP,EAAGY,IAAOZ,IAAMY,EAAE,OAAS,EAAIL,EAAIA,EAAG,QAAQ,OAAQ,EAAE,CAAE,EAClE,KAAK,GAAG,CACb",
|
|
6
|
-
"names": ["util_exports", "__export", "allowReserved", "delimited", "encode", "encodeReserved", "joinUrl", "__toCommonJS", "encoders", "delimiter", "q", "v", "i", "encoder", "flat", "entry", "strings", "values", "prev", "s", "params", "value", "name", "parts", "a"]
|
|
7
|
-
}
|
|
1
|
+
{"version":3,"file":"util.cjs","sources":["../src/util.ts"],"sourcesContent":["type Encoders = Array<(s: string) => string>;\n\n// Encode param names and values as URIComponent\nexport const encodeReserved = [encodeURIComponent, encodeURIComponent];\nexport const allowReserved = [encodeURIComponent, encodeURI];\n\n/**\n * Creates a tag-function to encode template strings with the given encoders.\n */\nexport function encode(encoders: Encoders, delimiter = \",\") {\n const q = (v: any, i: number) => {\n const encoder = encoders[i % encoders.length];\n if (typeof v === \"undefined\") {\n return \"\";\n }\n if (typeof v === \"object\") {\n if (Array.isArray(v)) {\n return v.map(encoder).join(delimiter);\n }\n const flat = Object.entries(v).reduce(\n (flat, entry) => [...flat, ...entry],\n [] as any,\n );\n return flat.map(encoder).join(delimiter);\n }\n\n return encoder(String(v));\n };\n\n return (strings: TemplateStringsArray, ...values: any[]) => {\n return strings.reduce((prev, s, i) => {\n return `${prev}${s}${q(values[i], i)}`;\n }, \"\");\n };\n}\n\n/**\n * Separate array values by the given delimiter.\n */\nexport function delimited(delimiter = \",\") {\n return (params: Record<string, any>, encoders = encodeReserved) =>\n Object.entries(params)\n .filter(([, value]) => value !== undefined)\n .map(([name, value]) => encode(encoders, delimiter)`${name}=${value}`)\n .join(\"&\");\n}\n\nexport function joinUrl(...parts: Array<string | undefined>) {\n return parts\n .filter(Boolean)\n .map((s, i) => (i === 0 ? s : s!.replace(/^\\/+/, \"\")))\n .map((s, i, a) => (i === a.length - 1 ? s : s!.replace(/\\/+$/, \"\")))\n .join(\"/\");\n}\n"],"names":["encodeReserved","allowReserved","encode","encoders","delimiter","q","v","i","encoder","flat","entry","strings","values","prev","s","delimited","params","value","name","joinUrl","parts","a"],"mappings":"gFAGa,MAAAA,EAAiB,CAAC,mBAAoB,kBAAkB,EACxDC,EAAgB,CAAC,mBAAoB,SAAS,EAK3C,SAAAC,EAAOC,EAAoBC,EAAY,IAAK,CACpD,MAAAC,EAAI,CAACC,EAAQC,IAAc,CAC/B,MAAMC,EAAUL,EAASI,EAAIJ,EAAS,MAAM,EACxC,OAAA,OAAOG,EAAM,IACR,GAEL,OAAOA,GAAM,SACX,MAAM,QAAQA,CAAC,EACVA,EAAE,IAAIE,CAAO,EAAE,KAAKJ,CAAS,EAEzB,OAAO,QAAQE,CAAC,EAAE,OAC7B,CAACG,EAAMC,IAAU,CAAC,GAAGD,EAAM,GAAGC,CAAK,EACnC,CAAC,CAAA,EAES,IAAIF,CAAO,EAAE,KAAKJ,CAAS,EAGlCI,EAAQ,OAAOF,CAAC,CAAC,CAAA,EAGnB,MAAA,CAACK,KAAkCC,IACjCD,EAAQ,OAAO,CAACE,EAAMC,EAAG,IACvB,GAAGD,CAAI,GAAGC,CAAC,GAAGT,EAAEO,EAAO,CAAC,EAAG,CAAC,CAAC,GACnC,EAAE,CAET,CAKgB,SAAAG,EAAUX,EAAY,IAAK,CACzC,MAAO,CAACY,EAA6Bb,EAAWH,IAC9C,OAAO,QAAQgB,CAAM,EAClB,OAAO,CAAC,CAAA,CAAGC,CAAK,IAAMA,IAAU,MAAS,EACzC,IAAI,CAAC,CAACC,EAAMD,CAAK,IAAMf,EAAOC,EAAUC,CAAS,IAAIc,CAAI,IAAID,CAAK,EAAE,EACpE,KAAK,GAAG,CACf,CAEO,SAASE,KAAWC,EAAkC,CAC3D,OAAOA,EACJ,OAAO,OAAO,EACd,IAAI,CAACN,EAAGP,IAAOA,IAAM,EAAIO,EAAIA,EAAG,QAAQ,OAAQ,EAAE,CAAE,EACpD,IAAI,CAACA,EAAGP,EAAGc,IAAOd,IAAMc,EAAE,OAAS,EAAIP,EAAIA,EAAG,QAAQ,OAAQ,EAAE,CAAE,EAClE,KAAK,GAAG,CACb"}
|
package/dist/util.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
const a = [encodeURIComponent, encodeURIComponent], p = [encodeURIComponent, encodeURI];
|
|
2
|
+
function f(r, n = ",") {
|
|
3
|
+
const t = (e, o) => {
|
|
4
|
+
const c = r[o % r.length];
|
|
5
|
+
return typeof e > "u" ? "" : typeof e == "object" ? Array.isArray(e) ? e.map(c).join(n) : Object.entries(e).reduce(
|
|
6
|
+
(i, d) => [...i, ...d],
|
|
7
|
+
[]
|
|
8
|
+
).map(c).join(n) : c(String(e));
|
|
9
|
+
};
|
|
10
|
+
return (e, ...o) => e.reduce((c, u, i) => `${c}${u}${t(o[i], i)}`, "");
|
|
11
|
+
}
|
|
12
|
+
function l(r = ",") {
|
|
13
|
+
return (n, t = a) => Object.entries(n).filter(([, e]) => e !== void 0).map(([e, o]) => f(t, r)`${e}=${o}`).join("&");
|
|
14
|
+
}
|
|
15
|
+
function j(...r) {
|
|
16
|
+
return r.filter(Boolean).map((n, t) => t === 0 ? n : n.replace(/^\/+/, "")).map((n, t, e) => t === e.length - 1 ? n : n.replace(/\/+$/, "")).join("/");
|
|
17
|
+
}
|
|
18
|
+
export {
|
|
19
|
+
p as allowReserved,
|
|
20
|
+
l as delimited,
|
|
21
|
+
f as encode,
|
|
22
|
+
a as encodeReserved,
|
|
23
|
+
j as joinUrl
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=util.js.map
|
package/dist/util.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sources":["../src/util.ts"],"sourcesContent":["type Encoders = Array<(s: string) => string>;\n\n// Encode param names and values as URIComponent\nexport const encodeReserved = [encodeURIComponent, encodeURIComponent];\nexport const allowReserved = [encodeURIComponent, encodeURI];\n\n/**\n * Creates a tag-function to encode template strings with the given encoders.\n */\nexport function encode(encoders: Encoders, delimiter = \",\") {\n const q = (v: any, i: number) => {\n const encoder = encoders[i % encoders.length];\n if (typeof v === \"undefined\") {\n return \"\";\n }\n if (typeof v === \"object\") {\n if (Array.isArray(v)) {\n return v.map(encoder).join(delimiter);\n }\n const flat = Object.entries(v).reduce(\n (flat, entry) => [...flat, ...entry],\n [] as any,\n );\n return flat.map(encoder).join(delimiter);\n }\n\n return encoder(String(v));\n };\n\n return (strings: TemplateStringsArray, ...values: any[]) => {\n return strings.reduce((prev, s, i) => {\n return `${prev}${s}${q(values[i], i)}`;\n }, \"\");\n };\n}\n\n/**\n * Separate array values by the given delimiter.\n */\nexport function delimited(delimiter = \",\") {\n return (params: Record<string, any>, encoders = encodeReserved) =>\n Object.entries(params)\n .filter(([, value]) => value !== undefined)\n .map(([name, value]) => encode(encoders, delimiter)`${name}=${value}`)\n .join(\"&\");\n}\n\nexport function joinUrl(...parts: Array<string | undefined>) {\n return parts\n .filter(Boolean)\n .map((s, i) => (i === 0 ? s : s!.replace(/^\\/+/, \"\")))\n .map((s, i, a) => (i === a.length - 1 ? s : s!.replace(/\\/+$/, \"\")))\n .join(\"/\");\n}\n"],"names":["encodeReserved","allowReserved","encode","encoders","delimiter","q","v","i","encoder","flat","entry","strings","values","prev","s","delimited","params","value","name","joinUrl","parts","a"],"mappings":"AAGa,MAAAA,IAAiB,CAAC,oBAAoB,kBAAkB,GACxDC,IAAgB,CAAC,oBAAoB,SAAS;AAK3C,SAAAC,EAAOC,GAAoBC,IAAY,KAAK;AACpD,QAAAC,IAAI,CAACC,GAAQC,MAAc;AAC/B,UAAMC,IAAUL,EAASI,IAAIJ,EAAS,MAAM;AACxC,WAAA,OAAOG,IAAM,MACR,KAEL,OAAOA,KAAM,WACX,MAAM,QAAQA,CAAC,IACVA,EAAE,IAAIE,CAAO,EAAE,KAAKJ,CAAS,IAEzB,OAAO,QAAQE,CAAC,EAAE;AAAA,MAC7B,CAACG,GAAMC,MAAU,CAAC,GAAGD,GAAM,GAAGC,CAAK;AAAA,MACnC,CAAC;AAAA,IAAA,EAES,IAAIF,CAAO,EAAE,KAAKJ,CAAS,IAGlCI,EAAQ,OAAOF,CAAC,CAAC;AAAA,EAAA;AAGnB,SAAA,CAACK,MAAkCC,MACjCD,EAAQ,OAAO,CAACE,GAAMC,GAAG,MACvB,GAAGD,CAAI,GAAGC,CAAC,GAAGT,EAAEO,EAAO,CAAC,GAAG,CAAC,CAAC,IACnC,EAAE;AAET;AAKgB,SAAAG,EAAUX,IAAY,KAAK;AACzC,SAAO,CAACY,GAA6Bb,IAAWH,MAC9C,OAAO,QAAQgB,CAAM,EAClB,OAAO,CAAC,CAAA,EAAGC,CAAK,MAAMA,MAAU,MAAS,EACzC,IAAI,CAAC,CAACC,GAAMD,CAAK,MAAMf,EAAOC,GAAUC,CAAS,IAAIc,CAAI,IAAID,CAAK,EAAE,EACpE,KAAK,GAAG;AACf;AAEO,SAASE,KAAWC,GAAkC;AAC3D,SAAOA,EACJ,OAAO,OAAO,EACd,IAAI,CAACN,GAAGP,MAAOA,MAAM,IAAIO,IAAIA,EAAG,QAAQ,QAAQ,EAAE,CAAE,EACpD,IAAI,CAACA,GAAGP,GAAGc,MAAOd,MAAMc,EAAE,SAAS,IAAIP,IAAIA,EAAG,QAAQ,QAAQ,EAAE,CAAE,EAClE,KAAK,GAAG;AACb;"}
|
package/package.json
CHANGED
|
@@ -1,37 +1,37 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oazapfts/runtime",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "1.0.0-alpha.4",
|
|
4
4
|
"description": "Runtime for OpenApi TypeScript client generator",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
7
|
-
"module": "dist/index.
|
|
7
|
+
"module": "dist/index.js",
|
|
8
8
|
"types": "dist/index.d.ts",
|
|
9
9
|
"exports": {
|
|
10
10
|
".": {
|
|
11
11
|
"types": "./dist/index.d.ts",
|
|
12
12
|
"require": "./dist/index.cjs",
|
|
13
|
-
"import": "./dist/index.
|
|
13
|
+
"import": "./dist/index.js"
|
|
14
14
|
},
|
|
15
15
|
"./query": {
|
|
16
16
|
"types": "./dist/query.d.ts",
|
|
17
17
|
"require": "./dist/query.cjs",
|
|
18
|
-
"import": "./dist/query.
|
|
18
|
+
"import": "./dist/query.js"
|
|
19
19
|
},
|
|
20
20
|
"./util": {
|
|
21
21
|
"types": "./dist/util.d.ts",
|
|
22
22
|
"require": "./dist/util.cjs",
|
|
23
|
-
"import": "./dist/util.
|
|
23
|
+
"import": "./dist/util.js"
|
|
24
24
|
},
|
|
25
25
|
"./headers": {
|
|
26
26
|
"types": "./dist/headers.d.ts",
|
|
27
27
|
"require": "./dist/headers.cjs",
|
|
28
|
-
"import": "./dist/headers.
|
|
28
|
+
"import": "./dist/headers.js"
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
31
|
"license": "MIT",
|
|
32
32
|
"repository": "oazapfts/oazapfts",
|
|
33
33
|
"scripts": {
|
|
34
|
-
"build": "rm -rf dist && tsc &&
|
|
34
|
+
"build": "rm -rf dist && tsc && vite build"
|
|
35
35
|
},
|
|
36
36
|
"release": {
|
|
37
37
|
"extends": "semantic-release-monorepo",
|
package/vite.config.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { UserConfig } from "vite";
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
build: {
|
|
5
|
+
sourcemap: true,
|
|
6
|
+
emptyOutDir: false,
|
|
7
|
+
outDir: "dist",
|
|
8
|
+
lib: {
|
|
9
|
+
entry: ["src/index.ts", "src/query.ts", "src/util.ts", "src/headers.ts"],
|
|
10
|
+
formats: ["es", "cjs"],
|
|
11
|
+
},
|
|
12
|
+
rollupOptions: {
|
|
13
|
+
output: {
|
|
14
|
+
exports: "auto",
|
|
15
|
+
interop: "esModule",
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
} satisfies UserConfig;
|
package/dist/chunk-6C7A2H7M.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
function a(e,r){let n=t(e);return t(r).forEach((s,i)=>{n.set(i,s)}),n}function t(e){return e&&!(e instanceof Headers)&&!Array.isArray(e)?new Headers(Object.fromEntries(Object.entries(e).filter(([,r])=>r!=null).map(([r,n])=>[r,String(n)]))):new Headers(e)}export{a,t as b};
|
|
2
|
-
//# sourceMappingURL=chunk-6C7A2H7M.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/headers.ts"],
|
|
4
|
-
"sourcesContent": ["export type CustomHeaders = Record<\n string,\n string | null | boolean | number | undefined\n>;\n\nexport function mergeHeaders(\n base: HeadersInit | CustomHeaders | undefined,\n overwrite?: HeadersInit | CustomHeaders,\n) {\n const baseHeaders = normalizeHeaders(base);\n const overwriteHeaders = normalizeHeaders(overwrite);\n\n overwriteHeaders.forEach((value, key) => {\n baseHeaders.set(key, value);\n });\n\n return baseHeaders;\n}\n\nexport function normalizeHeaders(\n headers: HeadersInit | CustomHeaders | undefined,\n) {\n // This might be custom header config containing null | boolean | number | undefined\n // By default Headers constructor will convert them to string but we don't want that\n // for nullish values.\n if (headers && !(headers instanceof Headers) && !Array.isArray(headers)) {\n return new Headers(\n Object.fromEntries(\n Object.entries(headers)\n .filter(([, v]) => v != null)\n .map(([k, v]) => [k, String(v)]),\n ),\n );\n }\n\n return new Headers(headers);\n}\n"],
|
|
5
|
-
"mappings": "AAKO,SAASA,EACdC,EACAC,EACA,CACA,IAAMC,EAAcC,EAAiBH,CAAI,EAGzC,OAFyBG,EAAiBF,CAAS,EAElC,QAAQ,CAACG,EAAOC,IAAQ,CACvCH,EAAY,IAAIG,EAAKD,CAAK,CAC5B,CAAC,EAEMF,CACT,CAEO,SAASC,EACdG,EACA,CAIA,OAAIA,GAAW,EAAEA,aAAmB,UAAY,CAAC,MAAM,QAAQA,CAAO,EAC7D,IAAI,QACT,OAAO,YACL,OAAO,QAAQA,CAAO,EACnB,OAAO,CAAC,CAAC,CAAEC,CAAC,IAAMA,GAAK,IAAI,EAC3B,IAAI,CAAC,CAACC,EAAGD,CAAC,IAAM,CAACC,EAAG,OAAOD,CAAC,CAAC,CAAC,CACnC,CACF,EAGK,IAAI,QAAQD,CAAO,CAC5B",
|
|
6
|
-
"names": ["mergeHeaders", "base", "overwrite", "baseHeaders", "normalizeHeaders", "value", "key", "headers", "v", "k"]
|
|
7
|
-
}
|
package/dist/chunk-AU3ZD6WL.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var p=[encodeURIComponent,encodeURIComponent],s=[encodeURIComponent,encodeURI];function u(t,n=","){let r=(e,o)=>{let c=t[o%t.length];return typeof e>"u"?"":typeof e=="object"?Array.isArray(e)?e.map(c).join(n):Object.entries(e).reduce((i,d)=>[...i,...d],[]).map(c).join(n):c(String(e))};return(e,...o)=>e.reduce((c,a,i)=>`${c}${a}${r(o[i],i)}`,"")}function f(t=","){return(n,r=p)=>Object.entries(n).filter(([,e])=>e!==void 0).map(([e,o])=>u(r,t)`${e}=${o}`).join("&")}function l(...t){return t.filter(Boolean).map((n,r)=>r===0?n:n.replace(/^\/+/,"")).map((n,r,e)=>r===e.length-1?n:n.replace(/\/+$/,"")).join("/")}export{p as a,s as b,u as c,f as d,l as e};
|
|
2
|
-
//# sourceMappingURL=chunk-AU3ZD6WL.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/util.ts"],
|
|
4
|
-
"sourcesContent": ["type Encoders = Array<(s: string) => string>;\n\n// Encode param names and values as URIComponent\nexport const encodeReserved = [encodeURIComponent, encodeURIComponent];\nexport const allowReserved = [encodeURIComponent, encodeURI];\n\n/**\n * Creates a tag-function to encode template strings with the given encoders.\n */\nexport function encode(encoders: Encoders, delimiter = \",\") {\n const q = (v: any, i: number) => {\n const encoder = encoders[i % encoders.length];\n if (typeof v === \"undefined\") {\n return \"\";\n }\n if (typeof v === \"object\") {\n if (Array.isArray(v)) {\n return v.map(encoder).join(delimiter);\n }\n const flat = Object.entries(v).reduce(\n (flat, entry) => [...flat, ...entry],\n [] as any,\n );\n return flat.map(encoder).join(delimiter);\n }\n\n return encoder(String(v));\n };\n\n return (strings: TemplateStringsArray, ...values: any[]) => {\n return strings.reduce((prev, s, i) => {\n return `${prev}${s}${q(values[i], i)}`;\n }, \"\");\n };\n}\n\n/**\n * Separate array values by the given delimiter.\n */\nexport function delimited(delimiter = \",\") {\n return (params: Record<string, any>, encoders = encodeReserved) =>\n Object.entries(params)\n .filter(([, value]) => value !== undefined)\n .map(([name, value]) => encode(encoders, delimiter)`${name}=${value}`)\n .join(\"&\");\n}\n\nexport function joinUrl(...parts: Array<string | undefined>) {\n return parts\n .filter(Boolean)\n .map((s, i) => (i === 0 ? s : s!.replace(/^\\/+/, \"\")))\n .map((s, i, a) => (i === a.length - 1 ? s : s!.replace(/\\/+$/, \"\")))\n .join(\"/\");\n}\n"],
|
|
5
|
-
"mappings": "AAGO,IAAMA,EAAiB,CAAC,mBAAoB,kBAAkB,EACxDC,EAAgB,CAAC,mBAAoB,SAAS,EAKpD,SAASC,EAAOC,EAAoBC,EAAY,IAAK,CAC1D,IAAMC,EAAI,CAACC,EAAQC,IAAc,CAC/B,IAAMC,EAAUL,EAASI,EAAIJ,EAAS,MAAM,EAC5C,OAAI,OAAOG,EAAM,IACR,GAEL,OAAOA,GAAM,SACX,MAAM,QAAQA,CAAC,EACVA,EAAE,IAAIE,CAAO,EAAE,KAAKJ,CAAS,EAEzB,OAAO,QAAQE,CAAC,EAAE,OAC7B,CAACG,EAAMC,IAAU,CAAC,GAAGD,EAAM,GAAGC,CAAK,EACnC,CAAC,CACH,EACY,IAAIF,CAAO,EAAE,KAAKJ,CAAS,EAGlCI,EAAQ,OAAOF,CAAC,CAAC,CAC1B,EAEA,MAAO,CAACK,KAAkCC,IACjCD,EAAQ,OAAO,CAACE,EAAMC,EAAG,IACvB,GAAGD,CAAI,GAAGC,CAAC,GAAGT,EAAEO,EAAO,CAAC,EAAG,CAAC,CAAC,GACnC,EAAE,CAET,CAKO,SAASG,EAAUX,EAAY,IAAK,CACzC,MAAO,CAACY,EAA6Bb,EAAWH,IAC9C,OAAO,QAAQgB,CAAM,EAClB,OAAO,CAAC,CAAC,CAAEC,CAAK,IAAMA,IAAU,MAAS,EACzC,IAAI,CAAC,CAACC,EAAMD,CAAK,IAAMf,EAAOC,EAAUC,CAAS,IAAIc,CAAI,IAAID,CAAK,EAAE,EACpE,KAAK,GAAG,CACf,CAEO,SAASE,KAAWC,EAAkC,CAC3D,OAAOA,EACJ,OAAO,OAAO,EACd,IAAI,CAACN,EAAGP,IAAOA,IAAM,EAAIO,EAAIA,EAAG,QAAQ,OAAQ,EAAE,CAAE,EACpD,IAAI,CAACA,EAAGP,EAAGc,IAAOd,IAAMc,EAAE,OAAS,EAAIP,EAAIA,EAAG,QAAQ,OAAQ,EAAE,CAAE,EAClE,KAAK,GAAG,CACb",
|
|
6
|
-
"names": ["encodeReserved", "allowReserved", "encode", "encoders", "delimiter", "q", "v", "i", "encoder", "flat", "entry", "strings", "values", "prev", "s", "delimited", "params", "value", "name", "joinUrl", "parts", "a"]
|
|
7
|
-
}
|
package/dist/chunk-E3LXWSGM.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as d,c,d as p}from"./chunk-AU3ZD6WL.mjs";function x(...e){let t=e.filter(Boolean).join("&");return t&&`?${t}`}function m(e,[t,o]=d){let n=c([s=>s,t]),r=c([s=>s,o]),i=(s,y="")=>Object.entries(s).filter(([,f])=>f!==void 0).map(([f,u])=>{let j=Array.isArray(s)?"":f,$=y?n`${y}[${j}]`:f;return typeof u=="object"?i(u,$):r`${$}=${u}`}).join("&");return i(e)}function a(e,t=d){let o=c(t);return Object.entries(e).filter(([,n])=>n!==void 0).map(([n,r])=>Array.isArray(r)?r.map(i=>o`${n}=${i}`).join("&"):typeof r=="object"?a(r,t):o`${n}=${r}`).join("&")}function q(e,t=d){let o=c(t);return Object.entries(e).filter(([,n])=>n!==void 0).map(([n,r])=>{let i=JSON.stringify(r);return o`${n}=${i}`}).join("&")}var b=p(),A=p("|"),O=p("%20");export{x as a,m as b,a as c,q as d,b as e,A as f,O as g};
|
|
2
|
-
//# sourceMappingURL=chunk-E3LXWSGM.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/query.ts"],
|
|
4
|
-
"sourcesContent": ["import { encode, delimited, encodeReserved } from \"./util\";\n\n/**\n * Join params using an ampersand and prepends a questionmark if not empty.\n */\nexport function query(...params: string[]) {\n const s = params.filter(Boolean).join(\"&\");\n return s && `?${s}`;\n}\n\n/**\n * Serializes nested objects according to the `deepObject` style specified in\n * https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.0.md#style-values\n */\nexport function deep(\n params: Record<string, any>,\n [k, v] = encodeReserved,\n): string {\n const qk = encode([(s) => s, k]);\n const qv = encode([(s) => s, v]);\n // don't add index to arrays\n // https://github.com/expressjs/body-parser/issues/289\n const visit = (obj: any, prefix = \"\"): string =>\n Object.entries(obj)\n .filter(([, v]) => v !== undefined)\n .map(([prop, v]) => {\n const index = Array.isArray(obj) ? \"\" : prop;\n const key = prefix ? qk`${prefix}[${index}]` : prop;\n if (typeof v === \"object\") {\n return visit(v, key);\n }\n return qv`${key}=${v}`;\n })\n .join(\"&\");\n\n return visit(params);\n}\n\n/**\n * Property values of type array or object generate separate parameters\n * for each value of the array, or key-value-pair of the map.\n * For other types of properties this property has no effect.\n * See https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.0.md#encoding-object\n */\nexport function explode(\n params: Record<string, any>,\n encoders = encodeReserved,\n): string {\n const q = encode(encoders);\n return Object.entries(params)\n .filter(([, value]) => value !== undefined)\n .map(([name, value]) => {\n if (Array.isArray(value)) {\n return value.map((v) => q`${name}=${v}`).join(\"&\");\n }\n if (typeof value === \"object\") {\n return explode(value, encoders);\n }\n return q`${name}=${value}`;\n })\n .join(\"&\");\n}\n\nexport function json(\n params: Record<string, any>,\n encoders = encodeReserved,\n): string {\n const q = encode(encoders);\n return Object.entries(params)\n .filter(([, value]) => value !== undefined)\n .map(([name, value]) => {\n const v = JSON.stringify(value);\n return q`${name}=${v}`;\n })\n .join(\"&\");\n}\n\nexport const form = delimited();\nexport const pipe = delimited(\"|\");\nexport const space = delimited(\"%20\");\n"],
|
|
5
|
-
"mappings": "kDAKO,SAASA,KAASC,EAAkB,CACzC,IAAMC,EAAID,EAAO,OAAO,OAAO,EAAE,KAAK,GAAG,EACzC,OAAOC,GAAK,IAAIA,CAAC,EACnB,CAMO,SAASC,EACdF,EACA,CAACG,EAAGC,CAAC,EAAIC,EACD,CACR,IAAMC,EAAKC,EAAO,CAAE,GAAM,EAAGJ,CAAC,CAAC,EACzBK,EAAKD,EAAO,CAAE,GAAM,EAAGH,CAAC,CAAC,EAGzBK,EAAQ,CAACC,EAAUC,EAAS,KAChC,OAAO,QAAQD,CAAG,EACf,OAAO,CAAC,CAAC,CAAEN,CAAC,IAAMA,IAAM,MAAS,EACjC,IAAI,CAAC,CAACQ,EAAMR,CAAC,IAAM,CAClB,IAAMS,EAAQ,MAAM,QAAQH,CAAG,EAAI,GAAKE,EAClCE,EAAMH,EAASL,IAAKK,CAAM,IAAIE,CAAK,IAAMD,EAC/C,OAAI,OAAOR,GAAM,SACRK,EAAML,EAAGU,CAAG,EAEdN,IAAKM,CAAG,IAAIV,CAAC,EACtB,CAAC,EACA,KAAK,GAAG,EAEb,OAAOK,EAAMT,CAAM,CACrB,CAQO,SAASe,EACdf,EACAgB,EAAWX,EACH,CACR,IAAMY,EAAIV,EAAOS,CAAQ,EACzB,OAAO,OAAO,QAAQhB,CAAM,EACzB,OAAO,CAAC,CAAC,CAAEkB,CAAK,IAAMA,IAAU,MAAS,EACzC,IAAI,CAAC,CAACC,EAAMD,CAAK,IACZ,MAAM,QAAQA,CAAK,EACdA,EAAM,IAAKd,GAAMa,IAAIE,CAAI,IAAIf,CAAC,EAAE,EAAE,KAAK,GAAG,EAE/C,OAAOc,GAAU,SACZH,EAAQG,EAAOF,CAAQ,EAEzBC,IAAIE,CAAI,IAAID,CAAK,EACzB,EACA,KAAK,GAAG,CACb,CAEO,SAASE,EACdpB,EACAgB,EAAWX,EACH,CACR,IAAMY,EAAIV,EAAOS,CAAQ,EACzB,OAAO,OAAO,QAAQhB,CAAM,EACzB,OAAO,CAAC,CAAC,CAAEkB,CAAK,IAAMA,IAAU,MAAS,EACzC,IAAI,CAAC,CAACC,EAAMD,CAAK,IAAM,CACtB,IAAMd,EAAI,KAAK,UAAUc,CAAK,EAC9B,OAAOD,IAAIE,CAAI,IAAIf,CAAC,EACtB,CAAC,EACA,KAAK,GAAG,CACb,CAEO,IAAMiB,EAAOC,EAAU,EACjBC,EAAOD,EAAU,GAAG,EACpBE,EAAQF,EAAU,KAAK",
|
|
6
|
-
"names": ["query", "params", "s", "deep", "k", "v", "encodeReserved", "qk", "encode", "qv", "visit", "obj", "prefix", "prop", "index", "key", "explode", "encoders", "q", "value", "name", "json", "form", "delimited", "pipe", "space"]
|
|
7
|
-
}
|
package/dist/chunk-LUOVPBCG.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{e as R}from"./chunk-E3LXWSGM.mjs";import{e as x}from"./chunk-AU3ZD6WL.mjs";import{a as y,b as h}from"./chunk-6C7A2H7M.mjs";import{a as f}from"./chunk-T7KECS5U.mjs";async function H(a,s){let{status:o,data:p,headers:d}=await a,t=s[o];if(t)return t(p);if(s.default)return s.default(o,p);throw new T(o,p,d)}var l=[200,201,202,204];async function m(a){let s=await a;if(l.some(o=>o==s.status))return s.data;throw new T(s.status,s.data,s.headers)}function A(a){return(...s)=>m(a(...s))}function g(a){let s={};return Object.entries(a).forEach(([o,p])=>{s[o]=typeof p=="function"?A(p):p}),s}var T=class extends Error{constructor(o,p,d){super(`Error: ${o}`);f(this,"status");f(this,"data");f(this,"headers");this.status=o,this.data=p,this.headers=d}};function P(a={}){async function s(t,n){let e=await d(t,n),r;try{r=await e.text()}catch{}return{status:e.status,headers:e.headers,contentType:e.headers.get("content-type"),data:r}}async function o(t,n={}){let{status:e,headers:r,contentType:c,data:i}=await s(t,{...n,headers:y({Accept:"application/json"},n.headers)});return(c?c.includes("json"):!1)?{status:e,headers:r,data:i?JSON.parse(i):null}:{status:e,headers:r,data:i}}async function p(t,n={}){let e=await d(t,n),r;try{r=await e.blob()}catch{}return{status:e.status,headers:e.headers,data:r}}async function d(t,n={}){let{baseUrl:e,fetch:r,...c}={...a,...n,headers:y(a.headers,n.headers)},i=x(e,t);return await(r||fetch)(i,c)}return{ok:m,fetchText:s,fetchJson:o,fetchBlob:p,mergeHeaders:y,json({body:t,headers:n,...e}){return{...e,...t!=null&&{body:JSON.stringify(t)},headers:y({"Content-Type":"application/json"},n)}},form({body:t,headers:n,...e}){return{...e,...t!=null&&{body:R(t)},headers:y({"Content-Type":"application/x-www-form-urlencoded"},n)}},multipart({body:t,headers:n,...e}){if(t==null)return{...e,body:t,headers:h(n)};let r=new(a.formDataConstructor||e.formDataConstructor||FormData),c=(i,u)=>{typeof u=="string"||u instanceof Blob?r.append(i,u):r.append(i,new Blob([JSON.stringify(u)],{type:"application/json"}))};return Object.entries(t).forEach(([i,u])=>{Array.isArray(u)?u.forEach(O=>c(i,O)):c(i,u)}),{...e,body:r,headers:h(n)}}}}export{P as a,H as b,l as c,m as d,A as e,g as f,T as g};
|
|
2
|
-
//# sourceMappingURL=chunk-LUOVPBCG.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/index.ts", "../src/runtime.ts"],
|
|
4
|
-
"sourcesContent": ["import type { ApiResponse, WithHeaders } from \"./runtime\";\n\nexport * from \"./runtime\";\n\n/**\n * Type to access a response's data property for a given status.\n */\nexport type DataType<T extends ApiResponse, S extends number> = T extends {\n status: S;\n}\n ? T[\"data\"]\n : never;\n\n/**\n * Object with methods to handle possible status codes of an ApiResponse.\n */\nexport type ResponseHandler<T extends ApiResponse> = {\n [P in T[\"status\"]]?: (res: DataType<T, P>) => any;\n} & {\n default?: (status: number, data: any) => any;\n};\n\nexport type FunctionReturnType<T> = T extends (...args: any[]) => any\n ? ReturnType<T>\n : never;\n\n/**\n * Utility function to handle different status codes.\n *\n * Example:\n *\n * const userId = await handle(api.register({ email, password }), {\n * 200: (user: User) => user.id,\n * 400: (err: string) => console.log(err),\n * })\n **/\nexport async function handle<\n T extends WithHeaders<ApiResponse>,\n H extends ResponseHandler<T>,\n>(promise: Promise<T>, handler: H): Promise<FunctionReturnType<H[keyof H]>> {\n const { status, data, headers } = await promise;\n const statusHandler = (handler as any)[status];\n if (statusHandler) return statusHandler(data);\n if (handler.default) return handler.default(status, data);\n throw new HttpError(status, data, headers);\n}\n\nexport const SUCCESS_CODES = [200, 201, 202, 204] as const;\nexport type SuccessCodes = (typeof SUCCESS_CODES)[number];\n\nexport type SuccessResponse<T extends ApiResponse> = DataType<T, SuccessCodes>;\n\n/**\n * Utility function to directly return any successful response\n * and throw a HttpError otherwise.\n *\n * Example:\n *\n * try {\n * const userId = await ok(api.register({ email, password }));\n * }\n * catch (err) {\n * console.log(err.status)\n * }\n */\nexport async function ok<T extends WithHeaders<ApiResponse>>(\n promise: Promise<T>,\n): Promise<SuccessResponse<T>> {\n const res = await promise;\n if (SUCCESS_CODES.some((s) => s == res.status)) return res.data;\n throw new HttpError(res.status, res.data, res.headers);\n}\n\nexport type Args<T> = T extends (...args: infer U) => any ? U : any;\nexport type ApiFunction = (...args: any[]) => Promise<WithHeaders<ApiResponse>>;\nexport type AsyncReturnType<T> = T extends (...args: any[]) => Promise<infer V>\n ? V\n : never;\n\nexport type OkResponse<T extends ApiFunction> = SuccessResponse<\n AsyncReturnType<T>\n>;\n\nexport type Okify<T extends ApiFunction> = (\n ...args: Args<T>\n) => Promise<OkResponse<T>>;\n\n/**\n * Utility function to wrap an API function with `ok(...)`.\n */\nexport function okify<T extends ApiFunction>(fn: T): Okify<T> {\n return (...args: Args<T>) => ok(fn(...args));\n}\n\ntype OptimisticApi<T> = {\n [K in keyof T]: T[K] extends ApiFunction ? Okify<T[K]> : T[K];\n};\n\n/**\n * Utility to `okify` each function of an API.\n */\nexport function optimistic<T extends Record<string, ApiFunction | unknown>>(\n api: T,\n): OptimisticApi<T> {\n const okApi: any = {};\n Object.entries(api).forEach(([key, value]) => {\n okApi[key] = typeof value === \"function\" ? okify(value as any) : value;\n });\n return okApi;\n}\n\nexport class HttpError extends Error {\n status: number;\n data?: any;\n headers: Headers;\n\n constructor(status: number, data: any, headers: Headers) {\n super(`Error: ${status}`);\n this.status = status;\n this.data = data;\n this.headers = headers;\n }\n}\n", "import * as qs from \"./query\";\nimport { joinUrl } from \"./util\";\nimport { ok } from \"./index\";\nimport { CustomHeaders, mergeHeaders, normalizeHeaders } from \"./headers\";\n\nexport { type CustomHeaders };\n\nexport type RequestOpts = {\n baseUrl?: string;\n fetch?: typeof fetch;\n formDataConstructor?: new () => FormData;\n headers?: HeadersInit | CustomHeaders;\n} & Omit<RequestInit, \"body\" | \"headers\">;\n\nexport type Defaults<Headers extends RequestOpts[\"headers\"] = CustomHeaders> =\n Omit<RequestOpts, \"headers\" | \"baseUrl\"> & {\n baseUrl: string;\n headers: Headers;\n };\n\ntype FetchRequestOpts = RequestOpts & {\n body?: string | FormData | Blob;\n};\n\ntype JsonRequestOpts = RequestOpts & {\n body?: any;\n};\n\ntype FormRequestOpts = RequestOpts & {\n body?: Record<string, any>;\n};\n\nexport type ApiResponse = { status: number; data?: any };\n\nexport type WithHeaders<T extends ApiResponse> = T & { headers: Headers };\n\ntype MultipartRequestOpts = RequestOpts & {\n body?: Record<string, unknown>;\n};\n\nexport function runtime(defaults: RequestOpts = {}) {\n async function fetchText(url: string, req?: FetchRequestOpts) {\n const res = await doFetch(url, req);\n let data;\n try {\n data = await res.text();\n } catch (err) {}\n\n return {\n status: res.status,\n headers: res.headers,\n contentType: res.headers.get(\"content-type\"),\n data,\n };\n }\n\n async function fetchJson<T extends ApiResponse>(\n url: string,\n req: FetchRequestOpts = {},\n ) {\n const { status, headers, contentType, data } = await fetchText(url, {\n ...req,\n headers: mergeHeaders(\n {\n Accept: \"application/json\",\n },\n req.headers,\n ),\n });\n\n const isJson = contentType ? contentType.includes(\"json\") : false;\n\n if (isJson) {\n return {\n status,\n headers,\n data: data ? JSON.parse(data) : null,\n } as WithHeaders<T>;\n }\n\n return { status, headers, data } as WithHeaders<T>;\n }\n\n async function fetchBlob<T extends ApiResponse>(\n url: string,\n req: FetchRequestOpts = {},\n ) {\n const res = await doFetch(url, req);\n let data;\n try {\n data = await res.blob();\n } catch (err) {}\n return { status: res.status, headers: res.headers, data } as WithHeaders<T>;\n }\n\n async function doFetch(url: string, req: FetchRequestOpts = {}) {\n const {\n baseUrl,\n fetch: customFetch,\n ...init\n } = {\n ...defaults,\n ...req,\n headers: mergeHeaders(defaults.headers, req.headers),\n };\n const href = joinUrl(baseUrl, url);\n const res = await (customFetch || fetch)(href, init);\n return res;\n }\n\n return {\n ok,\n fetchText,\n fetchJson,\n fetchBlob,\n mergeHeaders,\n\n json({ body, headers, ...req }: JsonRequestOpts) {\n return {\n ...req,\n ...(body != null && { body: JSON.stringify(body) }),\n headers: mergeHeaders(\n {\n \"Content-Type\": \"application/json\",\n },\n headers,\n ),\n };\n },\n\n form({ body, headers, ...req }: FormRequestOpts) {\n return {\n ...req,\n ...(body != null && { body: qs.form(body) }),\n headers: mergeHeaders(\n {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n headers,\n ),\n };\n },\n\n multipart({ body, headers, ...req }: MultipartRequestOpts) {\n if (body == null)\n return { ...req, body, headers: normalizeHeaders(headers) };\n\n const data = new (defaults.formDataConstructor ||\n req.formDataConstructor ||\n FormData)();\n\n const append = (name: string, value: unknown) => {\n if (typeof value === \"string\" || value instanceof Blob) {\n data.append(name, value);\n } else {\n data.append(\n name,\n new Blob([JSON.stringify(value)], { type: \"application/json\" }),\n );\n }\n };\n\n Object.entries(body).forEach(([name, value]) => {\n if (Array.isArray(value)) {\n value.forEach((v) => append(name, v));\n } else {\n append(name, value);\n }\n });\n\n return {\n ...req,\n body: data,\n headers: normalizeHeaders(headers),\n };\n },\n };\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["handle", "promise", "handler", "status", "data", "headers", "statusHandler", "HttpError", "SUCCESS_CODES", "ok", "res", "s", "okify", "fn", "args", "optimistic", "api", "okApi", "key", "value", "__publicField", "runtime", "defaults", "fetchText", "url", "req", "res", "doFetch", "data", "fetchJson", "status", "headers", "contentType", "mergeHeaders", "fetchBlob", "baseUrl", "customFetch", "init", "href", "joinUrl", "ok", "body", "form", "normalizeHeaders", "append", "name", "value", "v"]
|
|
7
|
-
}
|
package/dist/chunk-T7KECS5U.mjs
DELETED
package/dist/headers.mjs
DELETED
package/dist/headers.mjs.map
DELETED
package/dist/index.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a,b,c,d,e,f,g}from"./chunk-LUOVPBCG.mjs";import"./chunk-E3LXWSGM.mjs";import"./chunk-AU3ZD6WL.mjs";import"./chunk-6C7A2H7M.mjs";import"./chunk-T7KECS5U.mjs";export{g as HttpError,c as SUCCESS_CODES,b as handle,d as ok,e as okify,f as optimistic,a as runtime};
|
|
2
|
-
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
DELETED
package/dist/index.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/dist/query.mjs
DELETED
package/dist/query.mjs.map
DELETED
package/dist/query.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/dist/runtime.cjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";var J=Object.create;var R=Object.defineProperty,j=Object.defineProperties,A=Object.getOwnPropertyDescriptor,D=Object.getOwnPropertyDescriptors,U=Object.getOwnPropertyNames,b=Object.getOwnPropertySymbols,B=Object.getPrototypeOf,g=Object.prototype.hasOwnProperty,H=Object.prototype.propertyIsEnumerable;var w=(e,t,s)=>t in e?R(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s,d=(e,t)=>{for(var s in t||(t={}))g.call(t,s)&&w(e,s,t[s]);if(b)for(var s of b(t))H.call(t,s)&&w(e,s,t[s]);return e},l=(e,t)=>j(e,D(t));var O=(e,t)=>{var s={};for(var p in e)g.call(e,p)&&t.indexOf(p)<0&&(s[p]=e[p]);if(e!=null&&b)for(var p of b(e))t.indexOf(p)<0&&H.call(e,p)&&(s[p]=e[p]);return s};var W=(e,t)=>{for(var s in t)R(e,s,{get:t[s],enumerable:!0})},x=(e,t,s,p)=>{if(t&&typeof t=="object"||typeof t=="function")for(let c of U(t))!g.call(e,c)&&c!==s&&R(e,c,{get:()=>t[c],enumerable:!(p=A(t,c))||p.enumerable});return e};var k=(e,t,s)=>(s=e!=null?J(B(e)):{},x(t||!e||!e.__esModule?R(s,"default",{value:e,enumerable:!0}):s,e)),N=e=>x(R({},"__esModule",{value:!0}),e);var q=(e,t,s)=>new Promise((p,c)=>{var a=r=>{try{i(s.next(r))}catch(n){c(n)}},o=r=>{try{i(s.throw(r))}catch(n){c(n)}},i=r=>r.done?p(r.value):Promise.resolve(r.value).then(a,o);i((s=s.apply(e,t)).next())});var I={};W(I,{runtime:()=>E});module.exports=N(I);var S=k(require("./query"),1),F=require("./util"),T=require("./index"),f=require("./headers");function E(e={}){function t(a,o){return q(this,null,function*(){const i=yield c(a,o);let r;try{r=yield i.text()}catch(n){}return{status:i.status,headers:i.headers,contentType:i.headers.get("content-type"),data:r}})}function s(i){return q(this,arguments,function*(a,o={}){const{status:r,headers:n,contentType:h,data:y}=yield t(a,l(d({},o),{headers:(0,f.mergeHeaders)({Accept:"application/json"},o.headers)}));return(h?h.includes("json"):!1)?{status:r,headers:n,data:y?JSON.parse(y):null}:{status:r,headers:n,data:y}})}function p(i){return q(this,arguments,function*(a,o={}){const r=yield c(a,o);let n;try{n=yield r.blob()}catch(h){}return{status:r.status,headers:r.headers,data:n}})}function c(i){return q(this,arguments,function*(a,o={}){const u=l(d(d({},e),o),{headers:(0,f.mergeHeaders)(e.headers,o.headers)}),{baseUrl:r,fetch:n}=u,h=O(u,["baseUrl","fetch"]),y=(0,F.joinUrl)(r,a);return yield(n||fetch)(y,h)})}return{ok:T.ok,fetchText:t,fetchJson:s,fetchBlob:p,mergeHeaders:f.mergeHeaders,json(r){var n=r,{body:a,headers:o}=n,i=O(n,["body","headers"]);return l(d(d({},i),a!=null&&{body:JSON.stringify(a)}),{headers:(0,f.mergeHeaders)({"Content-Type":"application/json"},o)})},form(r){var n=r,{body:a,headers:o}=n,i=O(n,["body","headers"]);return l(d(d({},i),a!=null&&{body:S.form(a)}),{headers:(0,f.mergeHeaders)({"Content-Type":"application/x-www-form-urlencoded"},o)})},multipart(r){var n=r,{body:a,headers:o}=n,i=O(n,["body","headers"]);if(a==null)return l(d({},i),{body:a,headers:(0,f.normalizeHeaders)(o)});const h=new(e.formDataConstructor||i.formDataConstructor||FormData),y=(m,u)=>{typeof u=="string"||u instanceof Blob?h.append(m,u):h.append(m,new Blob([JSON.stringify(u)],{type:"application/json"}))};return Object.entries(a).forEach(([m,u])=>{Array.isArray(u)?u.forEach(C=>y(m,C)):y(m,u)}),l(d({},i),{body:h,headers:(0,f.normalizeHeaders)(o)})}}}
|
|
2
|
-
//# sourceMappingURL=runtime.cjs.map
|
package/dist/runtime.cjs.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/runtime.ts"],
|
|
4
|
-
"sourcesContent": ["import * as qs from \"./query\";\nimport { joinUrl } from \"./util\";\nimport { ok } from \"./index\";\nimport { CustomHeaders, mergeHeaders, normalizeHeaders } from \"./headers\";\n\nexport { type CustomHeaders };\n\nexport type RequestOpts = {\n baseUrl?: string;\n fetch?: typeof fetch;\n formDataConstructor?: new () => FormData;\n headers?: HeadersInit | CustomHeaders;\n} & Omit<RequestInit, \"body\" | \"headers\">;\n\nexport type Defaults<Headers extends RequestOpts[\"headers\"] = CustomHeaders> =\n Omit<RequestOpts, \"headers\" | \"baseUrl\"> & {\n baseUrl: string;\n headers: Headers;\n };\n\ntype FetchRequestOpts = RequestOpts & {\n body?: string | FormData | Blob;\n};\n\ntype JsonRequestOpts = RequestOpts & {\n body?: any;\n};\n\ntype FormRequestOpts = RequestOpts & {\n body?: Record<string, any>;\n};\n\nexport type ApiResponse = { status: number; data?: any };\n\nexport type WithHeaders<T extends ApiResponse> = T & { headers: Headers };\n\ntype MultipartRequestOpts = RequestOpts & {\n body?: Record<string, unknown>;\n};\n\nexport function runtime(defaults: RequestOpts = {}) {\n async function fetchText(url: string, req?: FetchRequestOpts) {\n const res = await doFetch(url, req);\n let data;\n try {\n data = await res.text();\n } catch (err) {}\n\n return {\n status: res.status,\n headers: res.headers,\n contentType: res.headers.get(\"content-type\"),\n data,\n };\n }\n\n async function fetchJson<T extends ApiResponse>(\n url: string,\n req: FetchRequestOpts = {},\n ) {\n const { status, headers, contentType, data } = await fetchText(url, {\n ...req,\n headers: mergeHeaders(\n {\n Accept: \"application/json\",\n },\n req.headers,\n ),\n });\n\n const isJson = contentType ? contentType.includes(\"json\") : false;\n\n if (isJson) {\n return {\n status,\n headers,\n data: data ? JSON.parse(data) : null,\n } as WithHeaders<T>;\n }\n\n return { status, headers, data } as WithHeaders<T>;\n }\n\n async function fetchBlob<T extends ApiResponse>(\n url: string,\n req: FetchRequestOpts = {},\n ) {\n const res = await doFetch(url, req);\n let data;\n try {\n data = await res.blob();\n } catch (err) {}\n return { status: res.status, headers: res.headers, data } as WithHeaders<T>;\n }\n\n async function doFetch(url: string, req: FetchRequestOpts = {}) {\n const {\n baseUrl,\n fetch: customFetch,\n ...init\n } = {\n ...defaults,\n ...req,\n headers: mergeHeaders(defaults.headers, req.headers),\n };\n const href = joinUrl(baseUrl, url);\n const res = await (customFetch || fetch)(href, init);\n return res;\n }\n\n return {\n ok,\n fetchText,\n fetchJson,\n fetchBlob,\n mergeHeaders,\n\n json({ body, headers, ...req }: JsonRequestOpts) {\n return {\n ...req,\n ...(body != null && { body: JSON.stringify(body) }),\n headers: mergeHeaders(\n {\n \"Content-Type\": \"application/json\",\n },\n headers,\n ),\n };\n },\n\n form({ body, headers, ...req }: FormRequestOpts) {\n return {\n ...req,\n ...(body != null && { body: qs.form(body) }),\n headers: mergeHeaders(\n {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n headers,\n ),\n };\n },\n\n multipart({ body, headers, ...req }: MultipartRequestOpts) {\n if (body == null)\n return { ...req, body, headers: normalizeHeaders(headers) };\n\n const data = new (defaults.formDataConstructor ||\n req.formDataConstructor ||\n FormData)();\n\n const append = (name: string, value: unknown) => {\n if (typeof value === \"string\" || value instanceof Blob) {\n data.append(name, value);\n } else {\n data.append(\n name,\n new Blob([JSON.stringify(value)], { type: \"application/json\" }),\n );\n }\n };\n\n Object.entries(body).forEach(([name, value]) => {\n if (Array.isArray(value)) {\n value.forEach((v) => append(name, v));\n } else {\n append(name, value);\n }\n });\n\n return {\n ...req,\n body: data,\n headers: normalizeHeaders(headers),\n };\n },\n };\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["runtime_exports", "__export", "runtime", "__toCommonJS", "qs", "import_util", "import_index", "import_headers", "runtime", "defaults", "fetchText", "url", "req", "__async", "res", "doFetch", "data", "err", "fetchJson", "_0", "status", "headers", "contentType", "__spreadProps", "__spreadValues", "fetchBlob", "_a", "baseUrl", "customFetch", "init", "__objRest", "href", "_b", "body", "_c", "_d", "_e", "_f", "append", "name", "value", "v"]
|
|
7
|
-
}
|
package/dist/runtime.mjs
DELETED
package/dist/runtime.mjs.map
DELETED
package/dist/util.mjs
DELETED
package/dist/util.mjs.map
DELETED
package/dist/util.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|