@elysiajs/eden 0.2.0-rc.1 → 0.2.0-rc.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/index.js +1 -1
- package/dist/index.mjs +12 -7
- package/dist/index.umd.js +1 -1
- package/dist/types.d.ts +9 -4
- package/package.json +1 -1
- package/src/index.ts +6 -1
- package/src/types.ts +21 -7
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class g{constructor(e){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,s){return this.addEventListener(e,t,s)}off(e,t,s){return this.ws.removeEventListener(e,t,s),this}addEventListener(e,t,s){return this.ws.addEventListener(e,i=>{if(e==="message"){let r=i.data.toString();const l=r.charCodeAt(0);if(l===47||l===123)try{r=JSON.parse(r)}catch{}else Number.isNaN(+r)?r==="true"?r=!0:r==="fase"&&(r=!1):r=+r;t({...i,data:r})}else t(i)},s),this}removeEventListener(e,t,s){return this.off(e,t,s),this}close(){return this.ws.close(),this}}const y=n=>n.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`),w=(n,e,t)=>{if(n.endsWith("/")||(n+="/"),e=y(e.replace(/index/g,"")),!t||!Object.keys(t).length)return`${n}${e}`;let s="";for(const[i,r]of Object.entries(t))s+=`${i}=${r}&`;return`${n}${e}?${s.slice(0,-1)}`},v=(n,e="")=>new Proxy(()=>{},{get(t,s,i){return v(n,`${e}/${s.toString()}`)},apply(t,s,[{$query:i,$fetch:r,$body:l,...u}={$fetch:void 0,$query:void 0,$body:void 0}]=[{}]){const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class g{constructor(e){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,s){return this.addEventListener(e,t,s)}off(e,t,s){return this.ws.removeEventListener(e,t,s),this}addEventListener(e,t,s){return this.ws.addEventListener(e,i=>{if(e==="message"){let r=i.data.toString();const l=r.charCodeAt(0);if(l===47||l===123)try{r=JSON.parse(r)}catch{}else Number.isNaN(+r)?r==="true"?r=!0:r==="fase"&&(r=!1):r=+r;t({...i,data:r})}else t(i)},s),this}removeEventListener(e,t,s){return this.off(e,t,s),this}close(){return this.ws.close(),this}}const y=n=>n.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`),w=(n,e,t)=>{if(n.endsWith("/")||(n+="/"),e=y(e.replace(/index/g,"")),!t||!Object.keys(t).length)return`${n}${e}`;let s="";for(const[i,r]of Object.entries(t))s+=`${i}=${r}&`;return`${n}${e}?${s.slice(0,-1)}`},v=(n,e="")=>new Proxy(()=>{},{get(t,s,i){return v(n,`${e}/${s.toString()}`)},apply(t,s,[{$query:i,$fetch:r,$body:l,...u}={$fetch:void 0,$query:void 0,$body:void 0}]=[{}]){const h=e.lastIndexOf("/"),d=e.slice(h+1),f=w(n,e.slice(0,h),i);if(d==="subscribe")return new g(f.replace(/^([^]+):\/\//,f.startsWith("https://")?"wss://":"ws://"));const o=l??(Object.keys(u).length?u:void 0);return fetch(f,{method:d,body:JSON.stringify(o),headers:o?{"content-type":typeof u=="object"?"application/json":"text/plain","content-length":o==null?void 0:o.length,...r==null?void 0:r.headers}:void 0,...r}).then(async c=>{if(c.status>=300)throw new Error(await c.text());if(c.headers.get("content-type")==="application/json")return c.json();const a=await c.text();return Number.isNaN(+a)?a==="true"?!0:a==="false"?!1:a:+a})}}),p=n=>new Proxy({},{get(e,t,s){return v(n,t)}});exports.EdenWS=g;exports.eden=p;
|
package/dist/index.mjs
CHANGED
|
@@ -44,8 +44,8 @@ class v {
|
|
|
44
44
|
return this.ws.close(), this;
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
|
-
const
|
|
48
|
-
if (n.endsWith("/") || (n += "/"), e =
|
|
47
|
+
const w = (n) => n.replace(/[A-Z]/g, (e) => `-${e.toLowerCase()}`), y = (n, e, t) => {
|
|
48
|
+
if (n.endsWith("/") || (n += "/"), e = w(e.replace(/index/g, "")), !t || !Object.keys(t).length)
|
|
49
49
|
return `${n}${e}`;
|
|
50
50
|
let s = "";
|
|
51
51
|
for (const [i, r] of Object.entries(t))
|
|
@@ -63,12 +63,17 @@ const y = (n) => n.replace(/[A-Z]/g, (e) => `-${e.toLowerCase()}`), w = (n, e, t
|
|
|
63
63
|
$body: void 0
|
|
64
64
|
}
|
|
65
65
|
] = [{}]) {
|
|
66
|
-
const
|
|
67
|
-
if (
|
|
68
|
-
return new v(
|
|
66
|
+
const h = e.lastIndexOf("/"), g = e.slice(h + 1), f = y(n, e.slice(0, h), i);
|
|
67
|
+
if (g === "subscribe")
|
|
68
|
+
return new v(
|
|
69
|
+
f.replace(
|
|
70
|
+
/^([^]+):\/\//,
|
|
71
|
+
f.startsWith("https://") ? "wss://" : "ws://"
|
|
72
|
+
)
|
|
73
|
+
);
|
|
69
74
|
const o = l ?? (Object.keys(u).length ? u : void 0);
|
|
70
|
-
return fetch(
|
|
71
|
-
method:
|
|
75
|
+
return fetch(f, {
|
|
76
|
+
method: g,
|
|
72
77
|
body: JSON.stringify(o),
|
|
73
78
|
headers: o ? {
|
|
74
79
|
"content-type": typeof u == "object" ? "application/json" : "text/plain",
|
package/dist/index.umd.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(o,c){typeof exports=="object"&&typeof module<"u"?c(exports):typeof define=="function"&&define.amd?define(["exports"],c):(o=typeof globalThis<"u"?globalThis:o||self,c(o["@elysia/eden"]={}))})(this,function(o){"use strict";class c{constructor(e){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,
|
|
1
|
+
(function(o,c){typeof exports=="object"&&typeof module<"u"?c(exports):typeof define=="function"&&define.amd?define(["exports"],c):(o=typeof globalThis<"u"?globalThis:o||self,c(o["@elysia/eden"]={}))})(this,function(o){"use strict";class c{constructor(e){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,s){return this.addEventListener(e,t,s)}off(e,t,s){return this.ws.removeEventListener(e,t,s),this}addEventListener(e,t,s){return this.ws.addEventListener(e,i=>{if(e==="message"){let n=i.data.toString();const a=n.charCodeAt(0);if(a===47||a===123)try{n=JSON.parse(n)}catch{}else Number.isNaN(+n)?n==="true"?n=!0:n==="fase"&&(n=!1):n=+n;t({...i,data:n})}else t(i)},s),this}removeEventListener(e,t,s){return this.off(e,t,s),this}close(){return this.ws.close(),this}}const v=r=>r.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`),w=(r,e,t)=>{if(r.endsWith("/")||(r+="/"),e=v(e.replace(/index/g,"")),!t||!Object.keys(t).length)return`${r}${e}`;let s="";for(const[i,n]of Object.entries(t))s+=`${i}=${n}&`;return`${r}${e}?${s.slice(0,-1)}`},g=(r,e="")=>new Proxy(()=>{},{get(t,s,i){return g(r,`${e}/${s.toString()}`)},apply(t,s,[{$query:i,$fetch:n,$body:a,...d}={$fetch:void 0,$query:void 0,$body:void 0}]=[{}]){const y=e.lastIndexOf("/"),p=e.slice(y+1),h=w(r,e.slice(0,y),i);if(p==="subscribe")return new c(h.replace(/^([^]+):\/\//,h.startsWith("https://")?"wss://":"ws://"));const u=a??(Object.keys(d).length?d:void 0);return fetch(h,{method:p,body:JSON.stringify(u),headers:u?{"content-type":typeof d=="object"?"application/json":"text/plain","content-length":u==null?void 0:u.length,...n==null?void 0:n.headers}:void 0,...n}).then(async f=>{if(f.status>=300)throw new Error(await f.text());if(f.headers.get("content-type")==="application/json")return f.json();const l=await f.text();return Number.isNaN(+l)?l==="true"?!0:l==="false"?!1:l:+l})}}),S=r=>new Proxy({},{get(e,t,s){return g(r,t)}});o.EdenWS=c,o.eden=S,Object.defineProperty(o,Symbol.toStringTag,{value:"Module"})});
|
package/dist/types.d.ts
CHANGED
|
@@ -16,11 +16,14 @@ declare type TypedRouteToParams<Route extends TypedRoute> = (Route['body'] exten
|
|
|
16
16
|
} : {}) & (Route['query'] extends NonNullable<Route['query']> ? unknown extends Route['query'] ? {} : {
|
|
17
17
|
$query: Route['query'];
|
|
18
18
|
} : {});
|
|
19
|
-
export declare type CreateEden<Server extends Record<string, Record<string, TypedRoute>>, Path extends string = keyof Server, Full extends string = ''> = Path extends `/${infer Start}` ? CreateEden<Server, Start, Path> : Path extends `${infer A}/${infer B}` ? IsPathParameter<A> extends never ? {
|
|
19
|
+
export declare type CreateEden<Server extends Record<string, Record<string, TypedRoute>>, Path extends string = keyof Server extends string ? keyof Server : never, Full extends string = ''> = Path extends `/${infer Start}` ? CreateEden<Server, Start, Path> : Path extends `${infer A}/${infer B}` ? IsPathParameter<A> extends never ? {
|
|
20
20
|
[key in A]: CreateEden<Server, B, Full>;
|
|
21
21
|
} : {
|
|
22
22
|
[x: string]: CreateEden<Server, B, Full>;
|
|
23
|
-
}
|
|
23
|
+
} & {
|
|
24
|
+
$params: `Expected path parameters ':${A}', replace this with any string`;
|
|
25
|
+
} : // Iterate until last string then catch method
|
|
26
|
+
{
|
|
24
27
|
[key in Path extends '' ? 'index' : Path extends `:${infer params}` ? string : Path | CamelCase<Path>]: Full extends keyof Server ? {
|
|
25
28
|
[key in keyof Server[Full] extends string ? Lowercase<keyof Server[Full]> : keyof Server[Full]]: keyof TypedRouteToParams<Server[Full][key extends string ? Uppercase<key> : key]> extends never ? key extends 'subscribe' ? unknown extends NonNullable<Server[Full][key]['query']> ? (params?: {
|
|
26
29
|
$query?: EdenCall['$query'];
|
|
@@ -31,7 +34,7 @@ export declare type CreateEden<Server extends Record<string, Record<string, Type
|
|
|
31
34
|
}) => EdenWS<Server[Full][key]> : (params?: {
|
|
32
35
|
$query?: EdenCall['$query'];
|
|
33
36
|
$fetch?: EdenCall['$fetch'];
|
|
34
|
-
}) => Promise<Server[Full][key]['response']> : key extends 'subscribe' ? unknown extends NonNullable<Server[Full][key]['query']> ? (params?: {
|
|
37
|
+
}) => Promise<key extends string ? Server[Full][Uppercase<key>]['response'] : Server[Full][key]['response']> : key extends 'subscribe' ? unknown extends NonNullable<Server[Full][key]['query']> ? (params?: {
|
|
35
38
|
$query?: EdenCall['$query'];
|
|
36
39
|
}) => EdenWS<Server[Full][key]> : Server[Full][key]['query'] extends NonNullable<Server[Full][key]['query']> ? (params: {
|
|
37
40
|
$query: Server[Full][key]['query'];
|
|
@@ -42,7 +45,9 @@ export declare type CreateEden<Server extends Record<string, Record<string, Type
|
|
|
42
45
|
$fetch?: EdenCall['$fetch'];
|
|
43
46
|
}) => Promise<Server[Full][key extends string ? Uppercase<key> : key]['response']>;
|
|
44
47
|
} : never;
|
|
45
|
-
}
|
|
48
|
+
} & (Path extends `:${infer params}` ? {
|
|
49
|
+
$params: `Expected path parameters ':${params}', replace this with any string`;
|
|
50
|
+
} : {});
|
|
46
51
|
declare type CamelCase<S extends string> = S extends `${infer P1}-${infer P2}${infer P3}` ? `${Lowercase<P1>}${Uppercase<P2>}${CamelCase<P3>}` : Lowercase<S>;
|
|
47
52
|
export interface EdenWSOnMessage<Data = unknown> extends MessageEvent {
|
|
48
53
|
data: Data;
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -145,7 +145,12 @@ const createProxy = (
|
|
|
145
145
|
url = composePath(domain, path.slice(0, i), $query)
|
|
146
146
|
|
|
147
147
|
if (method === 'subscribe')
|
|
148
|
-
return new EdenWS(
|
|
148
|
+
return new EdenWS(
|
|
149
|
+
url.replace(
|
|
150
|
+
/^([^]+):\/\//,
|
|
151
|
+
url.startsWith('https://') ? 'wss://' : 'ws://'
|
|
152
|
+
)
|
|
153
|
+
)
|
|
149
154
|
|
|
150
155
|
const body =
|
|
151
156
|
$body ?? (Object.keys(bodyObj).length ? bodyObj : undefined)
|
package/src/types.ts
CHANGED
|
@@ -40,26 +40,32 @@ type TypedRouteToParams<Route extends TypedRoute> =
|
|
|
40
40
|
|
|
41
41
|
export type CreateEden<
|
|
42
42
|
Server extends Record<string, Record<string, TypedRoute>>,
|
|
43
|
-
//
|
|
44
|
-
Path extends string = keyof Server,
|
|
43
|
+
// pathnames are always string
|
|
44
|
+
Path extends string = keyof Server extends string ? keyof Server : never,
|
|
45
45
|
Full extends string = ''
|
|
46
46
|
> = Path extends `/${infer Start}`
|
|
47
47
|
? CreateEden<Server, Start, Path>
|
|
48
48
|
: Path extends `${infer A}/${infer B}`
|
|
49
|
-
?
|
|
49
|
+
? // If path parameters, accept any string
|
|
50
|
+
IsPathParameter<A> extends never
|
|
50
51
|
? {
|
|
51
52
|
[key in A]: CreateEden<Server, B, Full>
|
|
52
53
|
}
|
|
53
54
|
: {
|
|
54
55
|
[x: string]: CreateEden<Server, B, Full>
|
|
56
|
+
} & {
|
|
57
|
+
$params: `Expected path parameters ':${A}', replace this with any string`
|
|
55
58
|
}
|
|
56
|
-
:
|
|
59
|
+
: // Iterate until last string then catch method
|
|
60
|
+
{
|
|
57
61
|
[key in Path extends ''
|
|
58
|
-
?
|
|
62
|
+
? // If end with empty, then return as index
|
|
63
|
+
'index'
|
|
59
64
|
: Path extends `:${infer params}`
|
|
60
65
|
? string
|
|
61
66
|
: Path | CamelCase<Path>]: Full extends keyof Server
|
|
62
67
|
? {
|
|
68
|
+
// Check if is method
|
|
63
69
|
[key in keyof Server[Full] extends string
|
|
64
70
|
? Lowercase<keyof Server[Full]>
|
|
65
71
|
: keyof Server[Full]]: keyof TypedRouteToParams<
|
|
@@ -84,7 +90,11 @@ export type CreateEden<
|
|
|
84
90
|
: (params?: {
|
|
85
91
|
$query?: EdenCall['$query']
|
|
86
92
|
$fetch?: EdenCall['$fetch']
|
|
87
|
-
}) => Promise<
|
|
93
|
+
}) => Promise<
|
|
94
|
+
key extends string
|
|
95
|
+
? Server[Full][Uppercase<key>]['response']
|
|
96
|
+
: Server[Full][key]['response']
|
|
97
|
+
>
|
|
88
98
|
: key extends 'subscribe'
|
|
89
99
|
? unknown extends NonNullable<
|
|
90
100
|
Server[Full][key]['query']
|
|
@@ -117,7 +127,11 @@ export type CreateEden<
|
|
|
117
127
|
>
|
|
118
128
|
}
|
|
119
129
|
: never
|
|
120
|
-
}
|
|
130
|
+
} & (Path extends `:${infer params}`
|
|
131
|
+
? {
|
|
132
|
+
$params: `Expected path parameters ':${params}', replace this with any string`
|
|
133
|
+
}
|
|
134
|
+
: {})
|
|
121
135
|
|
|
122
136
|
// https://stackoverflow.com/questions/59623524/typescript-how-to-map-type-keys-to-camelcase
|
|
123
137
|
type CamelCase<S extends string> =
|