spiceflow 0.0.7 → 1.0.0
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/README.md +1 -171
- package/dist/client/errors.d.ts +7 -0
- package/dist/client/errors.d.ts.map +1 -0
- package/dist/client/errors.js +18 -0
- package/dist/client/errors.js.map +1 -0
- package/dist/client/index.d.ts +14 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +376 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/types.d.ts +87 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +2 -0
- package/dist/client/types.js.map +1 -0
- package/dist/client/utils.d.ts +2 -0
- package/dist/client/utils.d.ts.map +1 -0
- package/dist/client/utils.js +9 -0
- package/dist/client/utils.js.map +1 -0
- package/dist/client/ws.d.ts +15 -0
- package/dist/client/ws.d.ts.map +1 -0
- package/dist/client/ws.js +51 -0
- package/dist/client/ws.js.map +1 -0
- package/dist/client.test.d.ts +2 -0
- package/dist/client.test.d.ts.map +1 -0
- package/dist/client.test.js +237 -0
- package/dist/client.test.js.map +1 -0
- package/dist/elysia-fork/context.d.ts +87 -0
- package/dist/elysia-fork/context.d.ts.map +1 -0
- package/dist/elysia-fork/context.js +2 -0
- package/dist/elysia-fork/context.js.map +1 -0
- package/dist/elysia-fork/error.d.ts +246 -0
- package/dist/elysia-fork/error.d.ts.map +1 -0
- package/dist/elysia-fork/error.js +195 -0
- package/dist/elysia-fork/error.js.map +1 -0
- package/dist/elysia-fork/types.d.ts +652 -0
- package/dist/elysia-fork/types.d.ts.map +1 -0
- package/dist/elysia-fork/types.js +3 -0
- package/dist/elysia-fork/types.js.map +1 -0
- package/dist/elysia-fork/utils.d.ts +134 -0
- package/dist/elysia-fork/utils.d.ts.map +1 -0
- package/dist/elysia-fork/utils.js +70 -0
- package/dist/elysia-fork/utils.js.map +1 -0
- package/dist/spiceflow.d.ts +253 -0
- package/dist/spiceflow.d.ts.map +1 -0
- package/dist/spiceflow.js +500 -0
- package/dist/spiceflow.js.map +1 -0
- package/dist/spiceflow.test.d.ts +2 -0
- package/dist/spiceflow.test.d.ts.map +1 -0
- package/dist/spiceflow.test.js +225 -0
- package/dist/spiceflow.test.js.map +1 -0
- package/dist/stream.test.d.ts +2 -0
- package/dist/stream.test.d.ts.map +1 -0
- package/dist/stream.test.js +286 -0
- package/dist/stream.test.js.map +1 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +4 -20
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +17 -46
- package/dist/utils.js.map +1 -1
- package/package.json +12 -36
- package/src/client/errors.ts +21 -0
- package/src/client/index.ts +539 -0
- package/src/client/types.ts +233 -0
- package/src/client/utils.ts +7 -0
- package/src/client/ws.ts +99 -0
- package/src/client.test.ts +235 -0
- package/src/elysia-fork/context.ts +196 -0
- package/src/elysia-fork/error.ts +293 -0
- package/src/elysia-fork/types.ts +1454 -0
- package/src/elysia-fork/utils.ts +85 -0
- package/src/spiceflow.test.ts +290 -0
- package/src/spiceflow.ts +1266 -0
- package/src/stream.test.ts +342 -0
- package/src/types.ts +0 -0
- package/src/utils.ts +21 -70
- package/context.d.ts +0 -2
- package/context.js +0 -1
- package/dist/babel.test.d.ts +0 -2
- package/dist/babel.test.d.ts.map +0 -1
- package/dist/babel.test.js +0 -27
- package/dist/babel.test.js.map +0 -1
- package/dist/babelDebugOutputs.d.ts +0 -9
- package/dist/babelDebugOutputs.d.ts.map +0 -1
- package/dist/babelDebugOutputs.js +0 -34
- package/dist/babelDebugOutputs.js.map +0 -1
- package/dist/babelTransformRpc.d.ts +0 -19
- package/dist/babelTransformRpc.d.ts.map +0 -1
- package/dist/babelTransformRpc.js +0 -285
- package/dist/babelTransformRpc.js.map +0 -1
- package/dist/browser.d.ts +0 -8
- package/dist/browser.d.ts.map +0 -1
- package/dist/browser.js +0 -126
- package/dist/browser.js.map +0 -1
- package/dist/build.d.ts +0 -13
- package/dist/build.d.ts.map +0 -1
- package/dist/build.js +0 -230
- package/dist/build.js.map +0 -1
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -111
- package/dist/cli.js.map +0 -1
- package/dist/context-internal.d.ts +0 -20
- package/dist/context-internal.d.ts.map +0 -1
- package/dist/context-internal.js +0 -16
- package/dist/context-internal.js.map +0 -1
- package/dist/context.d.ts +0 -2
- package/dist/context.d.ts.map +0 -1
- package/dist/context.js +0 -2
- package/dist/context.js.map +0 -1
- package/dist/expose.d.ts +0 -6
- package/dist/expose.d.ts.map +0 -1
- package/dist/expose.js +0 -32
- package/dist/expose.js.map +0 -1
- package/dist/headers.d.ts +0 -2
- package/dist/headers.d.ts.map +0 -1
- package/dist/headers.js +0 -18
- package/dist/headers.js.map +0 -1
- package/dist/index.d.ts +0 -8
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -23
- package/dist/index.js.map +0 -1
- package/dist/jsonRpc.d.ts +0 -32
- package/dist/jsonRpc.d.ts.map +0 -1
- package/dist/jsonRpc.js +0 -3
- package/dist/jsonRpc.js.map +0 -1
- package/dist/server.d.ts +0 -32
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -292
- package/dist/server.js.map +0 -1
- package/headers.d.ts +0 -2
- package/headers.js +0 -1
- package/sdk-template/package.json +0 -22
- package/sdk-template/src/index.ts +0 -2
- package/sdk-template/src/v1/example.ts +0 -5
- package/sdk-template/src/v1/generator.ts +0 -12
- package/sdk-template/tsconfig.json +0 -16
- package/src/babel.test.ts +0 -35
- package/src/babelDebugOutputs.ts +0 -56
- package/src/babelTransformRpc.ts +0 -394
- package/src/browser.ts +0 -141
- package/src/build.ts +0 -298
- package/src/cli.ts +0 -132
- package/src/context-internal.ts +0 -36
- package/src/context.ts +0 -5
- package/src/expose.ts +0 -34
- package/src/headers.ts +0 -19
- package/src/index.ts +0 -34
- package/src/jsonRpc.ts +0 -43
- package/src/server.ts +0 -384
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest'
|
|
2
|
+
|
|
3
|
+
import { createParser } from 'eventsource-parser'
|
|
4
|
+
|
|
5
|
+
import { Elysia } from './spiceflow'
|
|
6
|
+
|
|
7
|
+
import { req, sleep } from './utils'
|
|
8
|
+
|
|
9
|
+
function textEventStream(items: string[]) {
|
|
10
|
+
return items
|
|
11
|
+
.map((item) => `event: message\ndata: ${JSON.stringify(item)}\n\n`)
|
|
12
|
+
.join('')
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function parseTextEventStreamItem(item: string) {
|
|
16
|
+
const data = item.split('data: ')[1].split('\n')[0]
|
|
17
|
+
return JSON.parse(data)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
describe('Stream', () => {
|
|
21
|
+
it('handle stream', async () => {
|
|
22
|
+
const expected = ['a', 'b', 'c']
|
|
23
|
+
|
|
24
|
+
const app = new Elysia().get('/', async function* () {
|
|
25
|
+
yield 'a'
|
|
26
|
+
await sleep(10)
|
|
27
|
+
|
|
28
|
+
yield 'b'
|
|
29
|
+
await sleep(10)
|
|
30
|
+
|
|
31
|
+
yield 'c'
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
const response = await app
|
|
35
|
+
.handle(req('/'))
|
|
36
|
+
.then((x) => x.body)
|
|
37
|
+
.then((x) => {
|
|
38
|
+
if (!x) return
|
|
39
|
+
|
|
40
|
+
const reader = x?.getReader()
|
|
41
|
+
|
|
42
|
+
let acc = ''
|
|
43
|
+
const { promise, resolve } = Promise.withResolvers()
|
|
44
|
+
|
|
45
|
+
reader.read().then(function pump({ done, value }): unknown {
|
|
46
|
+
if (done) return resolve(acc)
|
|
47
|
+
|
|
48
|
+
expect(parseTextEventStreamItem(value.toString())).toBe(
|
|
49
|
+
expected.shift()!
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
acc += value.toString()
|
|
53
|
+
return reader.read().then(pump)
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
return promise
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
expect(expected).toHaveLength(0)
|
|
60
|
+
expect(response).toBe(textEventStream(['a', 'b', 'c']))
|
|
61
|
+
})
|
|
62
|
+
it('handle errors after yield', async () => {
|
|
63
|
+
const app = new Elysia().get('/', async function* () {
|
|
64
|
+
yield 'a'
|
|
65
|
+
await sleep(10)
|
|
66
|
+
|
|
67
|
+
throw new Error('an error')
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
const response = await app.handle(req('/')).then((x) => x.text())
|
|
71
|
+
|
|
72
|
+
expect(response).toBe(
|
|
73
|
+
'event: message\ndata: "a"\n\nevent: error\ndata: "an error"\n\n'
|
|
74
|
+
)
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
it('handle errors before yield when aot is false', async () => {
|
|
78
|
+
const app = new Elysia()
|
|
79
|
+
.onError(({ error }) => {
|
|
80
|
+
return new Response(error.message)
|
|
81
|
+
})
|
|
82
|
+
.get('/', async function* () {
|
|
83
|
+
throw new Error('an error xxxx')
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
const response = await app.handle(req('/')).then((x) => x.text())
|
|
87
|
+
|
|
88
|
+
expect(response).toContain('an error')
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
it.todo('handle errors before yield when aot is true', async () => {
|
|
92
|
+
const app = new Elysia()
|
|
93
|
+
.onError(({ error }) => {
|
|
94
|
+
return new Response(error.message)
|
|
95
|
+
})
|
|
96
|
+
.get('/', async function* () {
|
|
97
|
+
throw new Error('an error')
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
const response = await app.handle(req('/')).then((x) => x.text())
|
|
101
|
+
|
|
102
|
+
expect(response).toContain('an error')
|
|
103
|
+
})
|
|
104
|
+
|
|
105
|
+
it.todo('handle errors before yield with onError', async () => {
|
|
106
|
+
const expected = 'error expected'
|
|
107
|
+
const app = new Elysia()
|
|
108
|
+
.onError(({}) => {
|
|
109
|
+
return new Response(expected)
|
|
110
|
+
})
|
|
111
|
+
.get('/', async function* () {
|
|
112
|
+
throw new Error('an error')
|
|
113
|
+
})
|
|
114
|
+
|
|
115
|
+
const response = await app.handle(req('/')).then((x) => x.text())
|
|
116
|
+
|
|
117
|
+
expect(response).toBe(expected)
|
|
118
|
+
})
|
|
119
|
+
|
|
120
|
+
it('stop stream on canceled request', async () => {
|
|
121
|
+
const expected = ['a', 'b']
|
|
122
|
+
|
|
123
|
+
const app = new Elysia().get('/', async function* () {
|
|
124
|
+
yield 'a'
|
|
125
|
+
await sleep(10)
|
|
126
|
+
|
|
127
|
+
yield 'b'
|
|
128
|
+
await sleep(10)
|
|
129
|
+
|
|
130
|
+
yield 'c'
|
|
131
|
+
})
|
|
132
|
+
|
|
133
|
+
const controller = new AbortController()
|
|
134
|
+
|
|
135
|
+
setTimeout(() => {
|
|
136
|
+
controller.abort()
|
|
137
|
+
}, 15)
|
|
138
|
+
|
|
139
|
+
const response = await app
|
|
140
|
+
.handle(
|
|
141
|
+
new Request('http://e.ly', {
|
|
142
|
+
signal: controller.signal
|
|
143
|
+
})
|
|
144
|
+
)
|
|
145
|
+
.then((x) => x.body)
|
|
146
|
+
.then((x) => {
|
|
147
|
+
if (!x) return
|
|
148
|
+
|
|
149
|
+
const reader = x?.getReader()
|
|
150
|
+
|
|
151
|
+
let acc = ''
|
|
152
|
+
const { promise, resolve } = Promise.withResolvers()
|
|
153
|
+
|
|
154
|
+
reader.read().then(function pump({ done, value }): unknown {
|
|
155
|
+
if (done) {
|
|
156
|
+
return resolve(acc)
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
expect(parseTextEventStreamItem(value.toString())).toBe(
|
|
160
|
+
expected.shift()!
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
acc += value.toString()
|
|
164
|
+
return reader.read().then(pump)
|
|
165
|
+
})
|
|
166
|
+
|
|
167
|
+
return promise
|
|
168
|
+
})
|
|
169
|
+
|
|
170
|
+
expect(expected).toHaveLength(0)
|
|
171
|
+
expect(response).toBe(textEventStream(['a', 'b']))
|
|
172
|
+
})
|
|
173
|
+
|
|
174
|
+
// it('mutate set before yield is called', async () => {
|
|
175
|
+
// const expected = ['a', 'b', 'c']
|
|
176
|
+
|
|
177
|
+
// const app = new Elysia().get('/', function* () {
|
|
178
|
+
// set.headers['access-control-allow-origin'] = 'http://saltyaom.com'
|
|
179
|
+
|
|
180
|
+
// yield 'a'
|
|
181
|
+
// yield 'b'
|
|
182
|
+
// yield 'c'
|
|
183
|
+
// })
|
|
184
|
+
|
|
185
|
+
// const response = await app.handle(req('/')).then((x) => x.headers)
|
|
186
|
+
|
|
187
|
+
// expect(response.get('access-control-allow-origin')).toBe(
|
|
188
|
+
// 'http://saltyaom.com'
|
|
189
|
+
// )
|
|
190
|
+
// })
|
|
191
|
+
it('handle stream with objects', async () => {
|
|
192
|
+
const objects = [
|
|
193
|
+
{ message: 'hello' },
|
|
194
|
+
{ response: 'world' },
|
|
195
|
+
{ data: [1, 2, 3] },
|
|
196
|
+
{ result: [4, 5, 6] }
|
|
197
|
+
]
|
|
198
|
+
const app = new Elysia().get('/', async function* ({}) {
|
|
199
|
+
for (const obj of objects) {
|
|
200
|
+
yield obj
|
|
201
|
+
}
|
|
202
|
+
})
|
|
203
|
+
|
|
204
|
+
const body = await app.handle(req('/')).then((x) => x.body)
|
|
205
|
+
|
|
206
|
+
let events = [] as any[]
|
|
207
|
+
const parser = createParser((event) => {
|
|
208
|
+
events.push(event)
|
|
209
|
+
})
|
|
210
|
+
const { promise, resolve } = Promise.withResolvers<void>()
|
|
211
|
+
const reader = body?.getReader()!
|
|
212
|
+
|
|
213
|
+
reader.read().then(function pump({ done, value }): unknown {
|
|
214
|
+
if (done) {
|
|
215
|
+
return resolve()
|
|
216
|
+
}
|
|
217
|
+
const text = value.toString()
|
|
218
|
+
parser.feed(text)
|
|
219
|
+
return reader.read().then(pump)
|
|
220
|
+
})
|
|
221
|
+
await promise
|
|
222
|
+
|
|
223
|
+
expect(events.map((x) => x.data)).toEqual(
|
|
224
|
+
objects.map((x) => JSON.stringify(x))
|
|
225
|
+
)
|
|
226
|
+
})
|
|
227
|
+
|
|
228
|
+
// it('mutate set before yield is called', async () => {
|
|
229
|
+
// const expected = ['a', 'b', 'c']
|
|
230
|
+
|
|
231
|
+
// const app = new Elysia().get('/', function* () {
|
|
232
|
+
// set.headers['access-control-allow-origin'] = 'http://saltyaom.com'
|
|
233
|
+
|
|
234
|
+
// yield 'a'
|
|
235
|
+
// yield 'b'
|
|
236
|
+
// yield 'c'
|
|
237
|
+
// })
|
|
238
|
+
|
|
239
|
+
// const response = await app.handle(req('/')).then((x) => x.headers)
|
|
240
|
+
|
|
241
|
+
// expect(response.get('access-control-allow-origin')).toBe(
|
|
242
|
+
// 'http://saltyaom.com'
|
|
243
|
+
// )
|
|
244
|
+
// })
|
|
245
|
+
|
|
246
|
+
// it('async mutate set before yield is called', async () => {
|
|
247
|
+
// const expected = ['a', 'b', 'c']
|
|
248
|
+
|
|
249
|
+
// const app = new Elysia().get('/', async function* () {
|
|
250
|
+
// set.headers['access-control-allow-origin'] = 'http://saltyaom.com'
|
|
251
|
+
|
|
252
|
+
// yield 'a'
|
|
253
|
+
// yield 'b'
|
|
254
|
+
// yield 'c'
|
|
255
|
+
// })
|
|
256
|
+
|
|
257
|
+
// const response = await app.handle(req('/')).then((x) => x.headers)
|
|
258
|
+
|
|
259
|
+
// expect(response.get('access-control-allow-origin')).toBe(
|
|
260
|
+
// 'http://saltyaom.com'
|
|
261
|
+
// )
|
|
262
|
+
// })
|
|
263
|
+
|
|
264
|
+
it('return value if not yield', async () => {
|
|
265
|
+
const app = new Elysia()
|
|
266
|
+
.get('/', function* () {
|
|
267
|
+
return 'hello'
|
|
268
|
+
})
|
|
269
|
+
.get('/json', function* () {
|
|
270
|
+
return { hello: 'world' }
|
|
271
|
+
})
|
|
272
|
+
|
|
273
|
+
const response = await Promise.all([
|
|
274
|
+
app.handle(req('/')),
|
|
275
|
+
app.handle(req('/json'))
|
|
276
|
+
])
|
|
277
|
+
|
|
278
|
+
expect(await response[0].text()).toBe('"hello"')
|
|
279
|
+
expect(await response[1].json()).toEqual({
|
|
280
|
+
hello: 'world'
|
|
281
|
+
})
|
|
282
|
+
})
|
|
283
|
+
|
|
284
|
+
it('return async value if not yield', async () => {
|
|
285
|
+
const app = new Elysia()
|
|
286
|
+
.get('/', function* () {
|
|
287
|
+
return 'hello'
|
|
288
|
+
})
|
|
289
|
+
.get('/json', function* () {
|
|
290
|
+
return { hello: 'world' }
|
|
291
|
+
})
|
|
292
|
+
|
|
293
|
+
const response = await Promise.all([
|
|
294
|
+
app.handle(req('/')),
|
|
295
|
+
app.handle(req('/json'))
|
|
296
|
+
])
|
|
297
|
+
|
|
298
|
+
expect(await response[0].text()).toBe('"hello"')
|
|
299
|
+
expect(await response[1].json()).toEqual({
|
|
300
|
+
hello: 'world'
|
|
301
|
+
})
|
|
302
|
+
})
|
|
303
|
+
|
|
304
|
+
it('handle object and array', async () => {
|
|
305
|
+
const expected = [{ a: 'b' }, ['a'], ['a', 1, { a: 'b' }]]
|
|
306
|
+
const expectedResponse = JSON.stringify([...expected])
|
|
307
|
+
let i = 0
|
|
308
|
+
|
|
309
|
+
const app = new Elysia().get('/', async function* () {
|
|
310
|
+
yield expected[0]
|
|
311
|
+
await sleep(10)
|
|
312
|
+
|
|
313
|
+
yield expected[1]
|
|
314
|
+
await sleep(10)
|
|
315
|
+
|
|
316
|
+
yield expected[2]
|
|
317
|
+
})
|
|
318
|
+
|
|
319
|
+
const response = await app
|
|
320
|
+
.handle(req('/'))
|
|
321
|
+
.then((x) => x.body)
|
|
322
|
+
.then((x) => {
|
|
323
|
+
if (!x) return
|
|
324
|
+
|
|
325
|
+
const reader = x?.getReader()
|
|
326
|
+
|
|
327
|
+
const { promise, resolve } = Promise.withResolvers<void>()
|
|
328
|
+
|
|
329
|
+
reader.read().then(function pump({ done, value }): unknown {
|
|
330
|
+
if (done) return resolve()
|
|
331
|
+
|
|
332
|
+
expect(parseTextEventStreamItem(value.toString())).toEqual(
|
|
333
|
+
expected[i++]
|
|
334
|
+
)
|
|
335
|
+
|
|
336
|
+
return reader.read().then(pump)
|
|
337
|
+
})
|
|
338
|
+
|
|
339
|
+
return promise
|
|
340
|
+
})
|
|
341
|
+
})
|
|
342
|
+
})
|
package/src/types.ts
ADDED
|
File without changes
|
package/src/utils.ts
CHANGED
|
@@ -1,75 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
t.addComment(node, 'leading', PURE_ANNOTATION);
|
|
10
|
-
return node;
|
|
1
|
+
// deno-lint-ignore no-explicit-any
|
|
2
|
+
export const deepFreeze = (value: any) => {
|
|
3
|
+
for (const key of Reflect.ownKeys(value)) {
|
|
4
|
+
if (value[key] && typeof value[key] === 'object') {
|
|
5
|
+
deepFreeze(value[key])
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
return Object.freeze(value)
|
|
11
9
|
}
|
|
12
10
|
|
|
13
|
-
export
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
},
|
|
25
|
-
error(...args) {
|
|
26
|
-
enabled && console.log('[actions]:', ...args);
|
|
27
|
-
},
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
export function getFileName(state: PluginPass) {
|
|
31
|
-
const { filename, cwd } = state;
|
|
32
|
-
|
|
33
|
-
if (!filename) {
|
|
34
|
-
return undefined;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
if (cwd && filename.startsWith(cwd)) {
|
|
38
|
-
return filename.slice(cwd.length + 1);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
return filename;
|
|
42
|
-
}
|
|
43
|
-
export const directive = 'use spiceflow';
|
|
44
|
-
|
|
45
|
-
export function jsonRpcError({
|
|
46
|
-
id = null,
|
|
47
|
-
message,
|
|
48
|
-
code = 1,
|
|
49
|
-
}): JsonRpcErrorResponse {
|
|
50
|
-
return {
|
|
51
|
-
jsonrpc: '2.0',
|
|
52
|
-
id,
|
|
53
|
-
error: {
|
|
54
|
-
code,
|
|
55
|
-
message,
|
|
56
|
-
data: null,
|
|
57
|
-
},
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
export function camelCaseCapitalized(str: string) {
|
|
62
|
-
// functionName -> FunctionName
|
|
63
|
-
// CamelCase -> CamelCase
|
|
64
|
-
// camelCase -> CamelCase
|
|
65
|
-
|
|
66
|
-
if (str.length === 0) {
|
|
67
|
-
return str;
|
|
68
|
-
}
|
|
69
|
-
const first = str[0].toUpperCase();
|
|
70
|
-
return first + str.slice(1);
|
|
11
|
+
export const req = (path: string, options?: RequestInit) =>
|
|
12
|
+
new Request(`http://localhost${path}`, options)
|
|
13
|
+
|
|
14
|
+
export function isAsyncIterable(obj: any): obj is AsyncGenerator<any> {
|
|
15
|
+
return (
|
|
16
|
+
typeof obj === 'object' &&
|
|
17
|
+
typeof obj.next === 'function' &&
|
|
18
|
+
typeof obj.return === 'function' &&
|
|
19
|
+
typeof obj.throw === 'function' &&
|
|
20
|
+
typeof obj.return === 'function'
|
|
21
|
+
)
|
|
71
22
|
}
|
|
72
23
|
|
|
73
|
-
export function
|
|
74
|
-
|
|
24
|
+
export function sleep(ms: number) {
|
|
25
|
+
return new Promise((resolve) => setTimeout(resolve, ms))
|
|
75
26
|
}
|
package/context.d.ts
DELETED
package/context.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './dist/context';
|
package/dist/babel.test.d.ts
DELETED
package/dist/babel.test.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"babel.test.d.ts","sourceRoot":"","sources":["../src/babel.test.ts"],"names":[],"mappings":""}
|
package/dist/babel.test.js
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { test, expect } from 'vitest';
|
|
2
|
-
import { parseExpression } from '@babel/parser';
|
|
3
|
-
import generate from '@babel/generator';
|
|
4
|
-
// import { parseExpression } from './utils';
|
|
5
|
-
test('parseExpression', () => {
|
|
6
|
-
{
|
|
7
|
-
const parsed = parseExpression('{ "type": "StringLiteral", "value": "/api/actions-node" }');
|
|
8
|
-
const code = generate(parsed).code;
|
|
9
|
-
expect(code).toMatchInlineSnapshot(`
|
|
10
|
-
"{
|
|
11
|
-
"type": "StringLiteral",
|
|
12
|
-
"value": "/api/actions-node"
|
|
13
|
-
}"
|
|
14
|
-
`);
|
|
15
|
-
}
|
|
16
|
-
{
|
|
17
|
-
const parsed = parseExpression('null');
|
|
18
|
-
const code = generate(parsed).code;
|
|
19
|
-
expect(code).toMatchInlineSnapshot(`"null"`);
|
|
20
|
-
}
|
|
21
|
-
{
|
|
22
|
-
const parsed = parseExpression(`typeof wrapMethod === 'function' ? wrapMethod : undefined`);
|
|
23
|
-
const code = generate(parsed).code;
|
|
24
|
-
expect(code).toMatchInlineSnapshot(`"typeof wrapMethod === 'function' ? wrapMethod : undefined"`);
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
//# sourceMappingURL=babel.test.js.map
|
package/dist/babel.test.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"babel.test.js","sourceRoot":"","sources":["../src/babel.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAY,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,QAAQ,MAAM,kBAAkB,CAAC;AAGxC,6CAA6C;AAE7C,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC3B,CAAC;QACC,MAAM,MAAM,GAAG,eAAe,CAC5B,2DAA2D,CAC5D,CAAC;QACF,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC;;;;;KAKlC,CAAC,CAAC;IACL,CAAC;IACD,CAAC;QACC,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IACD,CAAC;QACC,MAAM,MAAM,GAAG,eAAe,CAC5B,2DAA2D,CAC5D,CAAC;QACF,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAChC,6DAA6D,CAC9D,CAAC;IACJ,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import * as babel from '@babel/core';
|
|
2
|
-
import * as types from '@babel/types';
|
|
3
|
-
import { PluginOptions } from './babelTransformRpc.js';
|
|
4
|
-
type Babel = {
|
|
5
|
-
types: typeof types;
|
|
6
|
-
};
|
|
7
|
-
export default function debugOutputsPlugin({ types: t }: Babel, { isServer }: PluginOptions): babel.PluginObj | undefined;
|
|
8
|
-
export {};
|
|
9
|
-
//# sourceMappingURL=babelDebugOutputs.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"babelDebugOutputs.d.ts","sourceRoot":"","sources":["../src/babelDebugOutputs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,aAAa,CAAC;AAErC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAKvD,KAAK,KAAK,GAAG;IAAE,KAAK,EAAE,OAAO,KAAK,CAAA;CAAE,CAAC;AAIrC,MAAM,CAAC,OAAO,UAAU,kBAAkB,CACxC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EACnB,EAAE,QAAQ,EAAE,EAAE,aAAa,GAC1B,KAAK,CAAC,SAAS,GAAG,SAAS,CAuC7B"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import generate from '@babel/generator';
|
|
2
|
-
import fs from 'fs';
|
|
3
|
-
import { default as nodePath, default as path } from 'path';
|
|
4
|
-
import { getFileName, logger } from './utils.js';
|
|
5
|
-
let deletedDir = false;
|
|
6
|
-
export default function debugOutputsPlugin({ types: t }, { isServer }) {
|
|
7
|
-
const cwd = process.cwd();
|
|
8
|
-
if (!deletedDir) {
|
|
9
|
-
deletedDir = true;
|
|
10
|
-
fs.mkdirSync('./actions-outputs', { recursive: true });
|
|
11
|
-
}
|
|
12
|
-
return {
|
|
13
|
-
visitor: {
|
|
14
|
-
Program: {
|
|
15
|
-
exit(program, state) {
|
|
16
|
-
var _a;
|
|
17
|
-
const filePath = (_a = getFileName(state)) !== null && _a !== void 0 ? _a : nodePath.join('pages', 'Default.js');
|
|
18
|
-
if (!process.env.DEBUG_ACTIONS) {
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
// stringify the AST and print it
|
|
22
|
-
const output = generate(program.node, {
|
|
23
|
-
/* options */
|
|
24
|
-
}, this.file.code);
|
|
25
|
-
let p = path.resolve('./actions-outputs', isServer ? 'server/' : 'client/', path.relative(cwd, path.resolve(filePath)));
|
|
26
|
-
logger.log(`${isServer ? 'server' : 'client'} plugin output:`, p);
|
|
27
|
-
fs.mkdirSync(path.dirname(p), { recursive: true });
|
|
28
|
-
fs.writeFileSync(p, output.code);
|
|
29
|
-
},
|
|
30
|
-
},
|
|
31
|
-
},
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
//# sourceMappingURL=babelDebugOutputs.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"babelDebugOutputs.js","sourceRoot":"","sources":["../src/babelDebugOutputs.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,kBAAkB,CAAC;AAExC,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAIjD,IAAI,UAAU,GAAG,KAAK,CAAC;AAEvB,MAAM,CAAC,OAAO,UAAU,kBAAkB,CACxC,EAAE,KAAK,EAAE,CAAC,EAAS,EACnB,EAAE,QAAQ,EAAiB;IAE3B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,UAAU,GAAG,IAAI,CAAC;QAElB,EAAE,CAAC,SAAS,CAAC,mBAAmB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,OAAO;QACL,OAAO,EAAE;YACP,OAAO,EAAE;gBACP,IAAI,CAAC,OAAO,EAAE,KAAK;;oBACjB,MAAM,QAAQ,GACZ,MAAA,WAAW,CAAC,KAAK,CAAC,mCAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;oBAE7D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;wBAC/B,OAAO;oBACT,CAAC;oBAED,iCAAiC;oBACjC,MAAM,MAAM,GAAG,QAAQ,CACrB,OAAO,CAAC,IAAI,EACZ;oBACE,aAAa;qBACd,EACD,IAAI,CAAC,IAAI,CAAC,IAAI,CACf,CAAC;oBACF,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAClB,mBAAmB,EACnB,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAChC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAC3C,CAAC;oBACF,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,iBAAiB,EAAE,CAAC,CAAC,CAAC;oBAClE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBACnD,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;gBACnC,CAAC;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import * as babel from '@babel/core';
|
|
2
|
-
import type * as types from '@babel/types';
|
|
3
|
-
import { WrapMethodMeta } from './server.js';
|
|
4
|
-
type Babel = {
|
|
5
|
-
types: typeof types;
|
|
6
|
-
};
|
|
7
|
-
export declare function getConfigObject(program: babel.NodePath<babel.types.Program>): {
|
|
8
|
-
isEdge: boolean;
|
|
9
|
-
} | undefined;
|
|
10
|
-
export declare function isEdgeInConfig(configObject?: babel.NodePath<babel.types.ObjectExpression>): boolean;
|
|
11
|
-
export interface PluginOptions {
|
|
12
|
-
isServer: boolean;
|
|
13
|
-
rootDir: string;
|
|
14
|
-
onMethod?: (method: WrapMethodMeta) => void;
|
|
15
|
-
url?: string;
|
|
16
|
-
}
|
|
17
|
-
export default function ({ types: t }: Babel, { rootDir, onMethod, isServer, url: rpcUrl }: PluginOptions): babel.PluginObj;
|
|
18
|
-
export {};
|
|
19
|
-
//# sourceMappingURL=babelTransformRpc.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"babelTransformRpc.d.ts","sourceRoot":"","sources":["../src/babelTransformRpc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,aAAa,CAAC;AAGrC,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAG3C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,KAAK,KAAK,GAAG;IAAE,KAAK,EAAE,OAAO,KAAK,CAAA;CAAE,CAAC;AA+CrC,wBAAgB,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;;cAe3E;AAmDD,wBAAgB,cAAc,CAC5B,YAAY,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAC1D,OAAO,CAoBT;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IAC5C,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,CAAC,OAAO,WACZ,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EACnB,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,aAAa,GAC1D,KAAK,CAAC,SAAS,CA6OjB"}
|