@elysiajs/eden 0.5.1 → 0.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/fetch/index.d.ts +4 -0
- package/dist/fetch/types.d.ts +32 -0
- package/dist/fn/index.d.ts +4 -0
- package/dist/fn/types.d.ts +24 -0
- package/dist/fn/utils.d.ts +13 -0
- package/dist/index.d.ts +3 -0
- package/dist/treaty/index.d.ts +17 -0
- package/dist/treaty/utils.d.ts +1 -0
- package/dist/treaty.js +1 -1
- package/dist/treaty.mjs +30 -25
- package/dist/types.d.ts +25 -0
- package/dist/utils.d.ts +5 -0
- package/package.json +11 -7
- package/src/treaty/index.ts +36 -22
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/// <reference types="bun-types" />
|
|
2
|
+
import type { Elysia, SCHEMA } from 'elysia';
|
|
3
|
+
import type { EdenFetchError } from '../utils';
|
|
4
|
+
import type { MapError, IsUnknown, IsNever } from '../types';
|
|
5
|
+
export declare namespace EdenFetch {
|
|
6
|
+
type Create<App extends Elysia<any>> = App['meta'] extends Record<typeof SCHEMA, infer Schema extends Record<string, any>> ? EdenFetch.Fn<Schema> : 'Please install Elysia before using Eden';
|
|
7
|
+
interface Config {
|
|
8
|
+
}
|
|
9
|
+
type Fn<Schema extends Record<string, any>> = <Endpoint extends keyof Schema, Method extends Extract<keyof Schema[Endpoint], string>, Route extends Schema[Endpoint][Method]>(endpoint: Endpoint, options: Omit<RequestInit, 'body' | 'method' | 'headers'> & ('get' extends Method ? {
|
|
10
|
+
method?: Uppercase<Method>;
|
|
11
|
+
} : {
|
|
12
|
+
method: Uppercase<Method>;
|
|
13
|
+
}) & (IsNever<keyof Route['params']> extends true ? {
|
|
14
|
+
params?: Record<never, string>;
|
|
15
|
+
} : {
|
|
16
|
+
params: Route['params'];
|
|
17
|
+
}) & (undefined extends Route['headers'] ? {
|
|
18
|
+
headers?: Record<string, string>;
|
|
19
|
+
} : {
|
|
20
|
+
headers: Route['headers'];
|
|
21
|
+
}) & (IsUnknown<Route['body']> extends false ? {
|
|
22
|
+
body: Route['body'];
|
|
23
|
+
} : {
|
|
24
|
+
body?: unknown;
|
|
25
|
+
})) => Promise<{
|
|
26
|
+
data: Route['response']['200'];
|
|
27
|
+
error: null;
|
|
28
|
+
} | {
|
|
29
|
+
data: null;
|
|
30
|
+
error: MapError<Route['response']> extends infer Errors ? IsNever<Errors> extends true ? EdenFetchError<number, string> : Errors : EdenFetchError<number, string>;
|
|
31
|
+
}>;
|
|
32
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/// <reference types="bun-types" />
|
|
2
|
+
import type { Elysia, EXPOSED } from 'elysia';
|
|
3
|
+
export declare namespace EdenFn {
|
|
4
|
+
type Create<App extends Elysia<any>> = App['meta'] extends Record<typeof EXPOSED, infer Schema extends Record<string, any>> ? EdenFn.Compose<Schema> : 'Please install Elysia before using Eden';
|
|
5
|
+
interface Config {
|
|
6
|
+
}
|
|
7
|
+
type Compose<Exposed extends Record<string, any>> = Fn<Exposed> & {
|
|
8
|
+
$set(config: Config): void;
|
|
9
|
+
$clone(config?: Config): Compose<Exposed>;
|
|
10
|
+
};
|
|
11
|
+
type Fn<T> = T extends {
|
|
12
|
+
[EXPOSED]: any;
|
|
13
|
+
value: infer Value;
|
|
14
|
+
} ? Asynctify<Value> : Asynctify<T>;
|
|
15
|
+
interface Config {
|
|
16
|
+
fn?: string;
|
|
17
|
+
fetch?: Omit<RequestInit, 'body'>;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
type Promisify<T extends (...args: any[]) => any> = T extends (...args: infer Args) => infer Return ? Return extends Promise<any> ? T : (...args: Args) => Promise<Return> : never;
|
|
21
|
+
type Asynctify<T> = T extends infer Fn extends (...args: any) => any ? Promisify<Fn> : T extends Record<string, any> ? {
|
|
22
|
+
[K in keyof T]: EdenFn.Fn<T[K]>;
|
|
23
|
+
} : never;
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { EdenFn } from './types';
|
|
2
|
+
export declare class Signal {
|
|
3
|
+
private url;
|
|
4
|
+
private config;
|
|
5
|
+
private pendings;
|
|
6
|
+
private operation;
|
|
7
|
+
private isFetching;
|
|
8
|
+
private sJson;
|
|
9
|
+
constructor(url: string, config?: EdenFn.Config);
|
|
10
|
+
setConfig(config: EdenFn.Config): void;
|
|
11
|
+
clone(config?: EdenFn.Config): Signal;
|
|
12
|
+
run(procedure: string[], params: any): Promise<any>;
|
|
13
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/// <reference types="bun-types" />
|
|
2
|
+
import type { Elysia, TypedSchema } from 'elysia';
|
|
3
|
+
import type { EdenTreaty } from './types';
|
|
4
|
+
export type { EdenTreaty } from './types';
|
|
5
|
+
export declare class EdenWS<Schema extends TypedSchema<any> = TypedSchema> {
|
|
6
|
+
ws: WebSocket;
|
|
7
|
+
url: string;
|
|
8
|
+
constructor(url: string);
|
|
9
|
+
send(data: Schema['body'] | Schema['body'][]): this;
|
|
10
|
+
on<K extends keyof WebSocketEventMap>(type: K, listener: (event: EdenTreaty.WSEvent<K, Schema['response']>) => void, options?: boolean | AddEventListenerOptions): this;
|
|
11
|
+
off<K extends keyof WebSocketEventMap>(type: K, listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any, options?: boolean | EventListenerOptions): this;
|
|
12
|
+
subscribe(onMessage: (event: EdenTreaty.WSEvent<'message', Schema['response']>) => void, options?: boolean | AddEventListenerOptions): this;
|
|
13
|
+
addEventListener<K extends keyof WebSocketEventMap>(type: K, listener: (event: EdenTreaty.WSEvent<K, Schema['response']>) => void, options?: boolean | AddEventListenerOptions): this;
|
|
14
|
+
removeEventListener<K extends keyof WebSocketEventMap>(type: K, listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any, options?: boolean | EventListenerOptions): this;
|
|
15
|
+
close(): this;
|
|
16
|
+
}
|
|
17
|
+
export declare const edenTreaty: <App extends Elysia<any>>(domain: string, config?: {}) => EdenTreaty.Create<App>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const composePath: (domain: string, path: string, query: Record<string, string> | undefined) => string;
|
package/dist/treaty.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var O=Object.defineProperty;var m=(r,e,t)=>e in r?O(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var w=(r,e,t)=>(m(r,typeof e!="symbol"?e+"":e,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const j=require("./utils-a2cfc56a.js"),k=(r,e,t)=>{if(r.endsWith("/")||(r+="/"),e==="index"&&(e=""),!t||!Object.keys(t).length)return`${r}${e}`;let n="";for(const[f,s]of Object.entries(t))n+=`${f}=${s}&`;return`${r}${e}?${n.slice(0,-1)}`},p=typeof FileList>"u",S=r=>p?r instanceof Blob:r instanceof FileList||r instanceof File,x=r=>{for(let e in r){if(S(r[e]))return!0;if(Array.isArray(r[e])&&r[e].find(t=>S(t)))return!0}return!1},E=r=>p?r:new Promise(e=>{const t=new FileReader;t.onload=()=>{e(new Blob([t.result],{type:r.type}))},t.readAsArrayBuffer(r)});class F{constructor(e){w(this,"ws");w(this,"url");this.ws=new WebSocket(e),this.url=e}send(e){return Array.isArray(e)?(e.forEach(t=>this.send(t)),this):(this.ws.send(typeof e=="object"?JSON.stringify(e):e.toString()),this)}on(e,t,n){return this.addEventListener(e,t,n)}off(e,t,n){return this.ws.removeEventListener(e,t,n),this}subscribe(e,t){return this.addEventListener("message",e,t)}addEventListener(e,t,n){return this.ws.addEventListener(e,f=>{if(e==="message"){let s=f.data.toString();const i=s.charCodeAt(0);if(i===47||i===123)try{s=JSON.parse(s)}catch{}else Number.isNaN(+s)?s==="true"?s=!0:s==="fase"&&(s=!1):s=+s;t({...f,data:s})}else t(f)},n),this}removeEventListener(e,t,n){return this.off(e,t,n),this}close(){return this.ws.close(),this}}const L=(r,e="",t)=>new Proxy(()=>{},{get(n,f,s){return L(r,`${e}/${f.toString()}`)},apply(n,f,[{$query:s,$fetch:i,$body:N,...g}={$fetch:void 0,$query:void 0,$body:void 0}]=[{}]){const h=e.lastIndexOf("/"),b=e.slice(h+1),d=k(r,e.slice(0,h),s);return b==="subscribe"?new F(d.replace(/^([^]+):\/\//,d.startsWith("https://")?"wss://":"ws://")):(async()=>{let c=N??(Object.keys(g).length?g:void 0);const y=typeof c=="object",v=y&&x(c);if(v){const o=new FormData;for(const[a,l]of Object.entries(c))if(p)o.append(a,l);else if(l instanceof File)o.append(a,await E(l));else if(l instanceof FileList)for(let u=0;u<l.length;u++)o.append(a,await E(l[u]));else o.append(a,l);c=o}else y&&(c=JSON.stringify(c));return fetch(d,{method:b,body:c,...i,headers:c?v?i==null?void 0:i.headers:{"content-type":y?"application/json":"text/plain",...i==null?void 0:i.headers}:i==null?void 0:i.headers}).then(async o=>{var l;let a;switch((l=o.headers.get("Content-Type"))==null?void 0:l.split(";")[0]){case"application/json":a=await o.json();break;default:a=await o.text().then(u=>Number.isNaN(+u)?u==="true"?!0:u==="false"?!1:u:+u)}return o.status>300?{data:a,error:new j.EdenFetchError(o.status,await a)}:{data:a,error:null}})})()}}),A=(r,e={})=>new Proxy({},{get(t,n){return L(r,n)}});exports.EdenWS=F;exports.edenTreaty=A;
|
package/dist/treaty.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
1
|
+
var N = Object.defineProperty;
|
|
2
|
+
var S = (r, e, t) => e in r ? N(r, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[e] = t;
|
|
3
|
+
var p = (r, e, t) => (S(r, typeof e != "symbol" ? e + "" : e, t), t);
|
|
4
4
|
import { E as x } from "./utils-5a40996f.mjs";
|
|
5
5
|
const O = (r, e, t) => {
|
|
6
6
|
if (r.endsWith("/") || (r += "/"), e === "index" && (e = ""), !t || !Object.keys(t).length)
|
|
@@ -9,24 +9,24 @@ const O = (r, e, t) => {
|
|
|
9
9
|
for (const [f, s] of Object.entries(t))
|
|
10
10
|
n += `${f}=${s}&`;
|
|
11
11
|
return `${r}${e}?${n.slice(0, -1)}`;
|
|
12
|
-
},
|
|
12
|
+
}, w = typeof FileList > "u", E = (r) => w ? r instanceof Blob : r instanceof FileList || r instanceof File, k = (r) => {
|
|
13
13
|
for (let e in r) {
|
|
14
|
-
if (
|
|
14
|
+
if (E(r[e]))
|
|
15
15
|
return !0;
|
|
16
|
-
if (Array.isArray(r[e]) && r[e].find((t) =>
|
|
16
|
+
if (Array.isArray(r[e]) && r[e].find((t) => E(t)))
|
|
17
17
|
return !0;
|
|
18
18
|
}
|
|
19
19
|
return !1;
|
|
20
|
-
},
|
|
20
|
+
}, F = (r) => w ? r : new Promise((e) => {
|
|
21
21
|
const t = new FileReader();
|
|
22
22
|
t.onload = () => {
|
|
23
23
|
e(new Blob([t.result], { type: r.type }));
|
|
24
24
|
}, t.readAsArrayBuffer(r);
|
|
25
25
|
});
|
|
26
|
-
class
|
|
26
|
+
class A {
|
|
27
27
|
constructor(e) {
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
p(this, "ws");
|
|
29
|
+
p(this, "url");
|
|
30
30
|
this.ws = new WebSocket(e), this.url = e;
|
|
31
31
|
}
|
|
32
32
|
send(e) {
|
|
@@ -74,37 +74,42 @@ class k {
|
|
|
74
74
|
return this.ws.close(), this;
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
|
-
const
|
|
77
|
+
const m = (r, e = "", t) => new Proxy(() => {
|
|
78
78
|
}, {
|
|
79
79
|
get(n, f, s) {
|
|
80
|
-
return
|
|
80
|
+
return m(r, `${e}/${f.toString()}`);
|
|
81
81
|
},
|
|
82
82
|
apply(n, f, [
|
|
83
|
-
{ $query: s, $fetch: i, $body:
|
|
83
|
+
{ $query: s, $fetch: i, $body: L, ...g } = {
|
|
84
84
|
$fetch: void 0,
|
|
85
85
|
$query: void 0,
|
|
86
86
|
$body: void 0
|
|
87
87
|
}
|
|
88
88
|
] = [{}]) {
|
|
89
|
-
const
|
|
90
|
-
return
|
|
89
|
+
const h = e.lastIndexOf("/"), b = e.slice(h + 1), d = O(r, e.slice(0, h), s);
|
|
90
|
+
return b === "subscribe" ? new A(
|
|
91
91
|
d.replace(
|
|
92
92
|
/^([^]+):\/\//,
|
|
93
93
|
d.startsWith("https://") ? "wss://" : "ws://"
|
|
94
94
|
)
|
|
95
95
|
) : (async () => {
|
|
96
|
-
let c =
|
|
97
|
-
const y = typeof c == "object",
|
|
98
|
-
if (
|
|
96
|
+
let c = L ?? (Object.keys(g).length ? g : void 0);
|
|
97
|
+
const y = typeof c == "object", v = y && k(c);
|
|
98
|
+
if (v) {
|
|
99
99
|
const o = new FormData();
|
|
100
100
|
for (const [a, l] of Object.entries(c))
|
|
101
|
-
if (
|
|
102
|
-
o.append(a,
|
|
101
|
+
if (w)
|
|
102
|
+
o.append(a, l);
|
|
103
|
+
else if (l instanceof File)
|
|
104
|
+
o.append(
|
|
105
|
+
a,
|
|
106
|
+
await F(l)
|
|
107
|
+
);
|
|
103
108
|
else if (l instanceof FileList)
|
|
104
109
|
for (let u = 0; u < l.length; u++)
|
|
105
110
|
o.append(
|
|
106
111
|
a,
|
|
107
|
-
await
|
|
112
|
+
await F(l[u])
|
|
108
113
|
);
|
|
109
114
|
else
|
|
110
115
|
o.append(a, l);
|
|
@@ -112,11 +117,11 @@ const F = (r, e = "", t) => new Proxy(() => {
|
|
|
112
117
|
} else
|
|
113
118
|
y && (c = JSON.stringify(c));
|
|
114
119
|
return fetch(d, {
|
|
115
|
-
method:
|
|
120
|
+
method: b,
|
|
116
121
|
body: c,
|
|
117
122
|
// ...config.fetch,
|
|
118
123
|
...i,
|
|
119
|
-
headers: c ?
|
|
124
|
+
headers: c ? v ? i == null ? void 0 : i.headers : {
|
|
120
125
|
"content-type": y ? "application/json" : "text/plain",
|
|
121
126
|
...i == null ? void 0 : i.headers
|
|
122
127
|
} : i == null ? void 0 : i.headers
|
|
@@ -141,11 +146,11 @@ const F = (r, e = "", t) => new Proxy(() => {
|
|
|
141
146
|
{},
|
|
142
147
|
{
|
|
143
148
|
get(t, n) {
|
|
144
|
-
return
|
|
149
|
+
return m(r, n);
|
|
145
150
|
}
|
|
146
151
|
}
|
|
147
152
|
);
|
|
148
153
|
export {
|
|
149
|
-
|
|
154
|
+
A as EdenWS,
|
|
150
155
|
P as edenTreaty
|
|
151
156
|
};
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { EdenFetchError } from './utils';
|
|
2
|
+
type Range<F extends number, T extends number> = Exclude<Enumerate<T>, Enumerate<F>>;
|
|
3
|
+
type Enumerate<N extends number, Acc extends number[] = []> = Acc['length'] extends N ? Acc[number] : Enumerate<N, [...Acc, Acc['length']]>;
|
|
4
|
+
type ErrorRange = Range<300, 599>;
|
|
5
|
+
export type MapError<T extends Record<number, unknown>> = [
|
|
6
|
+
{
|
|
7
|
+
[K in keyof T]-?: K extends ErrorRange ? K : never;
|
|
8
|
+
}[keyof T]
|
|
9
|
+
] extends [infer A extends number] ? {
|
|
10
|
+
[K in A]: EdenFetchError<K, T[K]>;
|
|
11
|
+
}[A] : false;
|
|
12
|
+
export type UnionToIntersect<U> = (U extends unknown ? (arg: U) => 0 : never) extends (arg: infer I) => 0 ? I : never;
|
|
13
|
+
export type IsAny<T> = 0 extends 1 & T ? true : false;
|
|
14
|
+
export type IsNever<T> = [T] extends [never] ? true : false;
|
|
15
|
+
export type IsUnknown<T> = IsAny<T> extends true ? false : unknown extends T ? true : false;
|
|
16
|
+
export type AnyTypedRoute = {
|
|
17
|
+
body: unknown;
|
|
18
|
+
headers: Record<string, any> | undefined;
|
|
19
|
+
query: Record<string, any> | undefined;
|
|
20
|
+
params: Record<string, any> | undefined;
|
|
21
|
+
response: Record<string, unknown> & {
|
|
22
|
+
'200': unknown;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
export {};
|
package/dist/utils.d.ts
ADDED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elysiajs/eden",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.3",
|
|
4
4
|
"description": "Fully type-safe Elysia client",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "saltyAom",
|
|
@@ -13,25 +13,29 @@
|
|
|
13
13
|
"require": "./dist/index.js",
|
|
14
14
|
"import": "./dist/index.mjs",
|
|
15
15
|
"node": "./dist/index.js",
|
|
16
|
-
"default": "./dist/index.js"
|
|
16
|
+
"default": "./dist/index.js",
|
|
17
|
+
"types": "./dist/index.d.ts"
|
|
17
18
|
},
|
|
18
19
|
"./treaty": {
|
|
19
20
|
"require": "./dist/treaty.js",
|
|
20
21
|
"import": "./dist/treaty.mjs",
|
|
21
22
|
"node": "./dist/treaty.js",
|
|
22
|
-
"default": "./dist/treaty.js"
|
|
23
|
+
"default": "./dist/treaty.js",
|
|
24
|
+
"types": "./dist/treaty/index.d.ts"
|
|
23
25
|
},
|
|
24
26
|
"./fetch": {
|
|
25
27
|
"require": "./dist/fetch.js",
|
|
26
28
|
"import": "./dist/fetch.mjs",
|
|
27
29
|
"node": "./dist/fetch.js",
|
|
28
|
-
"default": "./dist/fetch.js"
|
|
30
|
+
"default": "./dist/fetch.js",
|
|
31
|
+
"types": "./dist/fetch/index.d.ts"
|
|
29
32
|
},
|
|
30
33
|
"./fn": {
|
|
31
34
|
"require": "./dist/fn.js",
|
|
32
35
|
"import": "./dist/fn.mjs",
|
|
33
36
|
"node": "./dist/fn.js",
|
|
34
|
-
"default": "./dist/fn.js"
|
|
37
|
+
"default": "./dist/fn.js",
|
|
38
|
+
"types": "./dist/fn/index.d.ts"
|
|
35
39
|
}
|
|
36
40
|
},
|
|
37
41
|
"types": "./src/index.ts",
|
|
@@ -50,7 +54,7 @@
|
|
|
50
54
|
"scripts": {
|
|
51
55
|
"dev": "bun run --hot example/index.ts",
|
|
52
56
|
"test": "bun wiptest",
|
|
53
|
-
"build": "vite build",
|
|
57
|
+
"build": "vite build && tsc",
|
|
54
58
|
"release": "npm run build && npm run test && npm publish --access public"
|
|
55
59
|
},
|
|
56
60
|
"peerDependencies": {
|
|
@@ -69,7 +73,7 @@
|
|
|
69
73
|
"@sinclair/typebox": "^0.26.8",
|
|
70
74
|
"@types/node": "^18.15.5",
|
|
71
75
|
"bun-types": "^0.5.8",
|
|
72
|
-
"elysia": "0.5.
|
|
76
|
+
"elysia": "0.5.17",
|
|
73
77
|
"eslint": "^8.26.0",
|
|
74
78
|
"rimraf": "^4.4.1",
|
|
75
79
|
"typescript": "^5.0.4",
|
package/src/treaty/index.ts
CHANGED
|
@@ -7,12 +7,17 @@ import type { EdenTreaty } from './types'
|
|
|
7
7
|
|
|
8
8
|
export type { EdenTreaty } from './types'
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
if (typeof FileList === 'undefined') return false
|
|
10
|
+
// @ts-ignore
|
|
11
|
+
const isServer = typeof FileList === 'undefined'
|
|
13
12
|
|
|
13
|
+
const isFile = (v: any) => {
|
|
14
14
|
// @ts-ignore
|
|
15
|
-
|
|
15
|
+
if (isServer) {
|
|
16
|
+
return v instanceof Blob
|
|
17
|
+
} else {
|
|
18
|
+
// @ts-ignore
|
|
19
|
+
return v instanceof FileList || v instanceof File
|
|
20
|
+
}
|
|
16
21
|
}
|
|
17
22
|
|
|
18
23
|
// FormData is 1 level deep
|
|
@@ -31,16 +36,18 @@ const hasFile = (obj: Record<string, any>) => {
|
|
|
31
36
|
|
|
32
37
|
// @ts-ignore
|
|
33
38
|
const fileToBlob = (v: File) =>
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
39
|
+
isServer
|
|
40
|
+
? v
|
|
41
|
+
: new Promise<Blob>((resolve) => {
|
|
42
|
+
// @ts-ignore
|
|
43
|
+
const reader = new FileReader()
|
|
37
44
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
45
|
+
reader.onload = () => {
|
|
46
|
+
resolve(new Blob([reader.result!], { type: v.type }))
|
|
47
|
+
}
|
|
41
48
|
|
|
42
|
-
|
|
43
|
-
|
|
49
|
+
reader.readAsArrayBuffer(v)
|
|
50
|
+
})
|
|
44
51
|
|
|
45
52
|
export class EdenWS<Schema extends TypedSchema<any> = TypedSchema> {
|
|
46
53
|
ws: WebSocket
|
|
@@ -184,19 +191,26 @@ const createProxy = (
|
|
|
184
191
|
|
|
185
192
|
// FormData is 1 level deep
|
|
186
193
|
for (const [key, field] of Object.entries(body)) {
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
// @ts-ignore
|
|
191
|
-
else if (field instanceof FileList) {
|
|
194
|
+
if (isServer) {
|
|
195
|
+
newBody.append(key, field as any)
|
|
196
|
+
} else {
|
|
192
197
|
// @ts-ignore
|
|
193
|
-
|
|
198
|
+
if (field instanceof File)
|
|
194
199
|
newBody.append(
|
|
195
|
-
key
|
|
196
|
-
await fileToBlob(
|
|
200
|
+
key,
|
|
201
|
+
await fileToBlob(field as any)
|
|
197
202
|
)
|
|
198
|
-
|
|
199
|
-
|
|
203
|
+
// @ts-ignore
|
|
204
|
+
else if (field instanceof FileList) {
|
|
205
|
+
// @ts-ignore
|
|
206
|
+
for (let i = 0; i < field.length; i++) {
|
|
207
|
+
newBody.append(
|
|
208
|
+
key as any,
|
|
209
|
+
await fileToBlob((field as any)[i])
|
|
210
|
+
)
|
|
211
|
+
}
|
|
212
|
+
} else newBody.append(key, field as string)
|
|
213
|
+
}
|
|
200
214
|
}
|
|
201
215
|
|
|
202
216
|
body = newBody
|