spiceflow 1.10.1 → 1.11.1

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.
@@ -133,166 +133,205 @@ function tryParsingSSEJson(data) {
133
133
  return null;
134
134
  }
135
135
  }
136
- const createProxy = (domain, config, paths = [], instance) => new Proxy(() => { }, {
137
- get(_, param) {
138
- // handle case where createClient returns a promise and await calls .then on it
139
- if ((!paths.length && param === 'then') || param === 'catch') {
140
- return _[param];
141
- }
142
- return createProxy(domain, config, param === 'index' ? paths : [...paths, param], instance);
143
- },
144
- apply(_, __, [body, options]) {
145
- if (!body ||
146
- options ||
147
- (typeof body === 'object' && Object.keys(body).length !== 1) ||
148
- method.includes(paths.at(-1))) {
149
- const methodPaths = [...paths];
150
- const method = methodPaths.pop();
151
- const path = '/' + methodPaths.join('/');
152
- let { fetch: fetcher = fetch, headers, onRequest, onResponse } = config;
153
- const isGetOrHead = method === 'get' || method === 'head' || method === 'subscribe';
154
- headers = processHeaders(headers, path, options);
155
- const query = isGetOrHead
156
- ? body?.query
157
- : options?.query;
158
- let q = '';
159
- if (query) {
160
- const append = (key, value) => {
161
- q +=
162
- (q ? '&' : '?') +
163
- `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
164
- };
165
- for (const [key, value] of Object.entries(query)) {
166
- if (Array.isArray(value)) {
167
- for (const v of value)
168
- append(key, v);
169
- continue;
170
- }
171
- if (typeof value === 'object') {
172
- append(key, JSON.stringify(value));
173
- continue;
174
- }
175
- append(key, `${value}`);
176
- }
136
+ const createProxy = (domain, config, paths = [], instance) => {
137
+ if (config.state && !instance) {
138
+ throw new Error(`State is only available when using a Spiceflow instance`);
139
+ }
140
+ return new Proxy(() => { }, {
141
+ get(_, param) {
142
+ // handle case where createClient returns a promise and await calls .then on it
143
+ if ((!paths.length && param === 'then') || param === 'catch') {
144
+ return _[param];
177
145
  }
178
- return Promise.resolve().then(async () => {
179
- let fetchInit = {
180
- method: method?.toUpperCase(),
181
- body,
182
- // ...conf,
183
- headers,
184
- // credentials: 'include',
185
- };
186
- fetchInit.headers = {
187
- ...headers,
188
- ...processHeaders(
189
- // For GET and HEAD, options is moved to body (1st param)
190
- isGetOrHead ? body?.headers : options?.headers, path, fetchInit),
191
- };
192
- const fetchOpts = isGetOrHead && typeof body === 'object'
193
- ? body.fetch
194
- : options?.fetch;
195
- fetchInit = {
196
- ...fetchInit,
197
- ...fetchOpts,
198
- };
199
- if (isGetOrHead)
200
- delete fetchInit.body;
201
- if (onRequest) {
202
- if (!Array.isArray(onRequest))
203
- onRequest = [onRequest];
204
- for (const value of onRequest) {
205
- const temp = await value(path, fetchInit);
206
- if (typeof temp === 'object')
207
- fetchInit = {
208
- ...fetchInit,
209
- ...temp,
210
- headers: {
211
- ...fetchInit.headers,
212
- ...processHeaders(temp.headers, path, fetchInit),
213
- },
214
- };
215
- }
216
- }
217
- // ? Duplicate because end-user might add a body in onRequest
218
- if (isGetOrHead)
219
- delete fetchInit.body;
220
- if (hasFile(body)) {
221
- const formData = new FormData();
222
- // FormData is 1 level deep
223
- for (const [key, field] of Object.entries(fetchInit.body)) {
224
- if (isServer) {
225
- formData.append(key, field);
146
+ return createProxy(domain, config, param === 'index' ? paths : [...paths, param], instance);
147
+ },
148
+ apply(_, __, [body, options]) {
149
+ if (!body ||
150
+ options ||
151
+ (typeof body === 'object' && Object.keys(body).length !== 1) ||
152
+ method.includes(paths.at(-1))) {
153
+ const methodPaths = [...paths];
154
+ const method = methodPaths.pop();
155
+ const path = '/' + methodPaths.join('/');
156
+ let { fetch: fetcher = fetch, headers, onRequest, onResponse } = config;
157
+ const isGetOrHead = method === 'get' || method === 'head' || method === 'subscribe';
158
+ headers = processHeaders(headers, path, options);
159
+ const query = isGetOrHead
160
+ ? body?.query
161
+ : options?.query;
162
+ let q = '';
163
+ if (query) {
164
+ const append = (key, value) => {
165
+ q +=
166
+ (q ? '&' : '?') +
167
+ `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
168
+ };
169
+ for (const [key, value] of Object.entries(query)) {
170
+ if (Array.isArray(value)) {
171
+ for (const v of value)
172
+ append(key, v);
226
173
  continue;
227
174
  }
228
- if (field instanceof File) {
229
- formData.append(key, await createNewFile(field));
175
+ if (typeof value === 'object') {
176
+ append(key, JSON.stringify(value));
230
177
  continue;
231
178
  }
232
- if (field instanceof FileList) {
233
- for (let i = 0; i < field.length; i++)
234
- formData.append(key, await createNewFile(field[i]));
235
- continue;
179
+ append(key, `${value}`);
180
+ }
181
+ }
182
+ return Promise.resolve().then(async () => {
183
+ let fetchInit = {
184
+ method: method?.toUpperCase(),
185
+ body,
186
+ // ...conf,
187
+ headers,
188
+ // credentials: 'include',
189
+ };
190
+ fetchInit.headers = {
191
+ ...headers,
192
+ ...processHeaders(
193
+ // For GET and HEAD, options is moved to body (1st param)
194
+ isGetOrHead ? body?.headers : options?.headers, path, fetchInit),
195
+ };
196
+ const fetchOpts = isGetOrHead && typeof body === 'object'
197
+ ? body.fetch
198
+ : options?.fetch;
199
+ fetchInit = {
200
+ ...fetchInit,
201
+ ...fetchOpts,
202
+ };
203
+ if (isGetOrHead)
204
+ delete fetchInit.body;
205
+ if (onRequest) {
206
+ if (!Array.isArray(onRequest))
207
+ onRequest = [onRequest];
208
+ for (const value of onRequest) {
209
+ const temp = await value(path, fetchInit);
210
+ if (typeof temp === 'object')
211
+ fetchInit = {
212
+ ...fetchInit,
213
+ ...temp,
214
+ headers: {
215
+ ...fetchInit.headers,
216
+ ...processHeaders(temp.headers, path, fetchInit),
217
+ },
218
+ };
236
219
  }
237
- if (Array.isArray(field)) {
238
- for (let i = 0; i < field.length; i++) {
239
- const value = field[i];
240
- formData.append(key, value instanceof File ? await createNewFile(value) : value);
220
+ }
221
+ // ? Duplicate because end-user might add a body in onRequest
222
+ if (isGetOrHead)
223
+ delete fetchInit.body;
224
+ if (hasFile(body)) {
225
+ const formData = new FormData();
226
+ // FormData is 1 level deep
227
+ for (const [key, field] of Object.entries(fetchInit.body)) {
228
+ if (isServer) {
229
+ formData.append(key, field);
230
+ continue;
241
231
  }
242
- continue;
232
+ if (field instanceof File) {
233
+ formData.append(key, await createNewFile(field));
234
+ continue;
235
+ }
236
+ if (field instanceof FileList) {
237
+ for (let i = 0; i < field.length; i++)
238
+ formData.append(key, await createNewFile(field[i]));
239
+ continue;
240
+ }
241
+ if (Array.isArray(field)) {
242
+ for (let i = 0; i < field.length; i++) {
243
+ const value = field[i];
244
+ formData.append(key, value instanceof File ? await createNewFile(value) : value);
245
+ }
246
+ continue;
247
+ }
248
+ formData.append(key, field);
243
249
  }
244
- formData.append(key, field);
250
+ // We don't do this because we need to let the browser set the content type with the correct boundary
251
+ // fetchInit.headers['content-type'] = 'multipart/form-data'
252
+ fetchInit.body = formData;
245
253
  }
246
- // We don't do this because we need to let the browser set the content type with the correct boundary
247
- // fetchInit.headers['content-type'] = 'multipart/form-data'
248
- fetchInit.body = formData;
249
- }
250
- else if (typeof body === 'object') {
251
- ;
252
- fetchInit.headers['content-type'] =
253
- 'application/json';
254
- fetchInit.body = JSON.stringify(body);
255
- }
256
- else if (body !== undefined && body !== null) {
257
- ;
258
- fetchInit.headers['content-type'] =
259
- 'text/plain';
260
- }
261
- if (isGetOrHead)
262
- delete fetchInit.body;
263
- if (onRequest) {
264
- if (!Array.isArray(onRequest))
265
- onRequest = [onRequest];
266
- for (const value of onRequest) {
267
- const temp = await value(path, fetchInit);
268
- if (typeof temp === 'object')
269
- fetchInit = {
270
- ...fetchInit,
271
- ...temp,
272
- headers: {
273
- ...fetchInit.headers,
274
- ...processHeaders(temp.headers, path, fetchInit),
275
- },
276
- };
254
+ else if (typeof body === 'object') {
255
+ ;
256
+ fetchInit.headers['content-type'] =
257
+ 'application/json';
258
+ fetchInit.body = JSON.stringify(body);
277
259
  }
278
- }
279
- const url = domain + path + q;
280
- // console.log({ url, fetchInit })
281
- const response = await (instance?.handle(new Request(url, fetchInit)) ?? fetcher(url, fetchInit));
282
- let data = null;
283
- let error = null;
284
- if (onResponse) {
285
- if (!Array.isArray(onResponse))
286
- onResponse = [onResponse];
287
- for (const value of onResponse) {
288
- const temp = await value(response.clone());
289
- // if (temp !== undefined && temp !== null) {
290
- // data = temp
291
- // break
292
- // }
260
+ else if (body !== undefined && body !== null) {
261
+ ;
262
+ fetchInit.headers['content-type'] =
263
+ 'text/plain';
264
+ }
265
+ if (isGetOrHead)
266
+ delete fetchInit.body;
267
+ if (onRequest) {
268
+ if (!Array.isArray(onRequest))
269
+ onRequest = [onRequest];
270
+ for (const value of onRequest) {
271
+ const temp = await value(path, fetchInit);
272
+ if (typeof temp === 'object')
273
+ fetchInit = {
274
+ ...fetchInit,
275
+ ...temp,
276
+ headers: {
277
+ ...fetchInit.headers,
278
+ ...processHeaders(temp.headers, path, fetchInit),
279
+ },
280
+ };
281
+ }
282
+ }
283
+ const url = domain + path + q;
284
+ // console.log({ url, fetchInit })
285
+ const response = await (instance?.handle(new Request(url, fetchInit), { state: config.state }) ?? fetcher(url, fetchInit));
286
+ let data = null;
287
+ let error = null;
288
+ if (onResponse) {
289
+ if (!Array.isArray(onResponse))
290
+ onResponse = [onResponse];
291
+ for (const value of onResponse) {
292
+ const temp = await value(response.clone());
293
+ // if (temp !== undefined && temp !== null) {
294
+ // data = temp
295
+ // break
296
+ // }
297
+ }
298
+ }
299
+ if (data !== null) {
300
+ return {
301
+ data,
302
+ error,
303
+ response,
304
+ status: response.status,
305
+ headers: response.headers,
306
+ };
307
+ }
308
+ switch (response.headers.get('Content-Type')?.split(';')[0]) {
309
+ case 'text/event-stream':
310
+ data = streamSSEResponse(response);
311
+ break;
312
+ case 'application/json':
313
+ data = await response.json();
314
+ data = superjsonDeserialize(data);
315
+ break;
316
+ case 'application/octet-stream':
317
+ data = await response.arrayBuffer();
318
+ break;
319
+ case 'multipart/form-data':
320
+ const temp = await response.formData();
321
+ data = {};
322
+ temp.forEach((value, key) => {
323
+ // @ts-ignore
324
+ data[key] = value;
325
+ });
326
+ break;
327
+ default:
328
+ data = await response.text().then(parseStringifiedValue);
329
+ }
330
+ if (response.status >= 300 || response.status < 200) {
331
+ error = new SpiceflowFetchError(response.status, data || 'Unknown error');
332
+ // console.trace({ error, data })
333
+ data = null;
293
334
  }
294
- }
295
- if (data !== null) {
296
335
  return {
297
336
  data,
298
337
  error,
@@ -300,57 +339,24 @@ const createProxy = (domain, config, paths = [], instance) => new Proxy(() => {
300
339
  status: response.status,
301
340
  headers: response.headers,
302
341
  };
303
- }
304
- switch (response.headers.get('Content-Type')?.split(';')[0]) {
305
- case 'text/event-stream':
306
- data = streamSSEResponse(response);
307
- break;
308
- case 'application/json':
309
- data = await response.json();
310
- data = superjsonDeserialize(data);
311
- break;
312
- case 'application/octet-stream':
313
- data = await response.arrayBuffer();
314
- break;
315
- case 'multipart/form-data':
316
- const temp = await response.formData();
317
- data = {};
318
- temp.forEach((value, key) => {
319
- // @ts-ignore
320
- data[key] = value;
321
- });
322
- break;
323
- default:
324
- data = await response.text().then(parseStringifiedValue);
325
- }
326
- if (response.status >= 300 || response.status < 200) {
327
- error = new SpiceflowFetchError(response.status, data || 'Unknown error');
328
- // console.trace({ error, data })
329
- data = null;
330
- }
331
- return {
332
- data,
333
- error,
334
- response,
335
- status: response.status,
336
- headers: response.headers,
337
- };
338
- });
339
- }
340
- if (typeof body === 'object')
341
- return createProxy(domain, config, [...paths, Object.values(body)[0]], instance);
342
- return createProxy(domain, config, paths);
343
- },
344
- });
345
- export const createSpiceflowClient = (domain, config = {}) => {
342
+ });
343
+ }
344
+ if (typeof body === 'object')
345
+ return createProxy(domain, config, [...paths, Object.values(body)[0]], instance);
346
+ return createProxy(domain, config, paths);
347
+ },
348
+ });
349
+ };
350
+ export const createSpiceflowClient = (domain, config) => {
346
351
  if (typeof domain === 'string') {
352
+ let domainStr = String(domain);
347
353
  if (domain.endsWith('/'))
348
- domain = domain.slice(0, -1);
349
- return createProxy(domain, config);
354
+ domainStr = domain.slice(0, -1);
355
+ return createProxy(domainStr, config || {});
350
356
  }
351
357
  if (typeof window !== 'undefined')
352
358
  console.warn('Spiceflow instance server found on client side, this is not recommended for security reason. Use generic type instead.');
353
- return createProxy('http://e.ly', config, [], domain);
359
+ return createProxy('http://e.ly', config || {}, [], domain);
354
360
  };
355
361
  function superjsonDeserialize(data) {
356
362
  if (data?.__superjsonMeta) {
@@ -1,4 +1,4 @@
1
- import type { Spiceflow } from '../spiceflow.ts';
1
+ import type { AnySpiceflow } from '../spiceflow.ts';
2
2
  import { SpiceflowFetchError } from './errors.ts';
3
3
  export type Prettify<T> = {
4
4
  [K in keyof T]: T[K];
@@ -20,12 +20,14 @@ export declare namespace SpiceflowClient {
20
20
  interface ClientParam {
21
21
  fetch?: RequestInit;
22
22
  }
23
- export type Create<App extends Spiceflow<any, any, any, any, any, any>> = App extends {
24
- _routes: infer Schema extends Record<string, any>;
25
- } ? Prettify<Sign<Schema>> : 'Please install Spiceflow before using the client';
23
+ export type Create<App extends AnySpiceflow> = App extends {
24
+ _types: {
25
+ ClientRoutes: infer Schema extends Record<string, any>;
26
+ };
27
+ } ? Prettify<Sign<Schema>> : 'Please install latest Spiceflow before using the client, also make sure both client and server use the same version';
26
28
  export type Sign<in out Route extends Record<string, any>> = {
27
29
  [K in keyof Route as K extends `:${string}` ? never : K]: Route[K] extends {
28
- body: infer Body;
30
+ request: infer Body;
29
31
  params: any;
30
32
  query: infer Query;
31
33
  response: infer Response extends Record<number, unknown>;
@@ -35,7 +37,7 @@ export declare namespace SpiceflowClient {
35
37
  query?: Record<string, unknown>;
36
38
  } : {
37
39
  query: Query;
38
- }) extends infer Param ? {} extends Param ? undefined extends Body ? K extends 'get' | 'head' ? (options?: Prettify<Param & ClientParam>) => Promise<ClientResponse<ReplaceGeneratorWithAsyncGenerator<Response>>> : (body?: Body, options?: Prettify<Param & ClientParam>) => Promise<ClientResponse<ReplaceGeneratorWithAsyncGenerator<Response>>> : (body: Body extends Record<string, unknown> ? ReplaceBlobWithFiles<Body> : Body, options?: Prettify<Param & ClientParam>) => Promise<ClientResponse<ReplaceGeneratorWithAsyncGenerator<Response>>> : K extends 'get' | 'head' ? (options: Prettify<Param & ClientParam>) => Promise<ClientResponse<ReplaceGeneratorWithAsyncGenerator<Response>>> : (body: Body extends Record<string, unknown> ? ReplaceBlobWithFiles<Body> : Body, options: Prettify<Param & ClientParam>) => Promise<ClientResponse<ReplaceGeneratorWithAsyncGenerator<Response>>> : never : CreateParams<Route[K]>;
40
+ }) extends infer Param ? {} extends Param ? undefined extends Body ? K extends 'get' | 'head' ? (options?: Prettify<Param & ClientParam>) => Promise<ClientResponse<ReplaceGeneratorWithAsyncGenerator<Response>>> : (request?: Body, options?: Prettify<Param & ClientParam>) => Promise<ClientResponse<ReplaceGeneratorWithAsyncGenerator<Response>>> : (request: Body extends Record<string, unknown> ? ReplaceBlobWithFiles<Body> : Body, options?: Prettify<Param & ClientParam>) => Promise<ClientResponse<ReplaceGeneratorWithAsyncGenerator<Response>>> : K extends 'get' | 'head' ? (options: Prettify<Param & ClientParam>) => Promise<ClientResponse<ReplaceGeneratorWithAsyncGenerator<Response>>> : (request: Body extends Record<string, unknown> ? ReplaceBlobWithFiles<Body> : Body, options: Prettify<Param & ClientParam>) => Promise<ClientResponse<ReplaceGeneratorWithAsyncGenerator<Response>>> : never : CreateParams<Route[K]>;
39
41
  };
40
42
  type CreateParams<Route extends Record<string, any>> = Extract<keyof Route, `:${string}`> extends infer Path extends string ? IsNever<Path> extends true ? Prettify<Sign<Route>> : // ! DO NOT USE PRETTIFY ON THIS LINE, OTHERWISE FUNCTION CALLING WILL BE OMITTED
41
43
  (((params: {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"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"}
@@ -3,9 +3,11 @@ import { createSpiceflowClient } from "./client/index.js";
3
3
  import { Spiceflow } from "./spiceflow.js";
4
4
  import { describe, expect, it } from 'vitest';
5
5
  const app = new Spiceflow()
6
+ .state('someState', 1)
6
7
  .get('/', () => 'a')
7
8
  .post('/', () => 'a')
8
9
  .get('/number', () => 1)
10
+ .get('/someState', ({ state }) => state.someState)
9
11
  .get('/true', () => true)
10
12
  .get('/false', () => false)
11
13
  .post('/array', async ({ request }) => await request.json(), {
@@ -95,6 +97,13 @@ const app = new Spiceflow()
95
97
  })
96
98
  .get('/id/:id?', ({ params: { id = 'unknown' } }) => id);
97
99
  const client = createSpiceflowClient(app);
100
+ describe('client can pass state to app', () => {
101
+ const client = createSpiceflowClient(app, { state: { someState: 3 } });
102
+ it('should return state value 3', async () => {
103
+ const { data } = await client.someState.get({});
104
+ expect(data).toBe(3);
105
+ });
106
+ });
98
107
  describe('client', () => {
99
108
  it('get index', async () => {
100
109
  const { data, error } = await client.index.get({});
package/dist/context.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { redirect as Redirect } from './utils.ts';
2
- import type { RouteSchema, Prettify, ResolvePath, SingletonBase } from './types.ts';
2
+ import type { RouteSchema, Prettify, ResolvePath, SingletonBase, GetRequestSchema } from './types.ts';
3
3
  import { SpiceflowRequest } from './spiceflow.ts';
4
4
  export type ErrorContext<in out Route extends RouteSchema = {}, in out Singleton extends SingletonBase = {
5
5
  state: {};
@@ -26,7 +26,7 @@ export type ErrorContext<in out Route extends RouteSchema = {}, in out Singleton
26
26
  *
27
27
  * @example '/id/:id'
28
28
  */
29
- request: SpiceflowRequest<Route['body']>;
29
+ request: SpiceflowRequest<GetRequestSchema<Route>>;
30
30
  state: Singleton['state'];
31
31
  }>;
32
32
  export type Context<in out Route extends RouteSchema = {}, in out Singleton extends SingletonBase = {
@@ -38,7 +38,7 @@ export type Context<in out Route extends RouteSchema = {}, in out Singleton exte
38
38
  params: undefined extends Route['params'] ? Path extends `${string}/${':' | '*'}${string}` ? ResolvePath<Path> : never : Route['params'];
39
39
  redirect: Redirect;
40
40
  path: string;
41
- request: SpiceflowRequest<Route['body']>;
41
+ request: SpiceflowRequest<GetRequestSchema<Route>>;
42
42
  state: Singleton['state'];
43
43
  }>;
44
44
  export type MiddlewareContext<in out Singleton extends SingletonBase = {
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cors.d.ts","sourceRoot":"","sources":["../src/cors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC9C;;;GAGG;AACH,KAAK,WAAW,GAAG;IACjB,6DAA6D;IAC7D,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACzB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,kEAAkE;IAClE,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IAClC,+GAA+G;IAC/G,QAAQ,CAAC,EAAE,MAAM,CAAA;CAElB,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,UAAU,WAAW,KAAG,iBAiH5C,CAAA"}
1
+ {"version":3,"file":"cors.d.ts","sourceRoot":"","sources":["../src/cors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC9C;;;GAGG;AACH,KAAK,WAAW,GAAG;IACjB,6DAA6D;IAC7D,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACzB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,kEAAkE;IAClE,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IAClC,+GAA+G;IAC/G,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,UAAU,WAAW,KAAG,iBAiH5C,CAAA"}
package/dist/error.d.ts CHANGED
@@ -6,12 +6,4 @@ export declare class ValidationError extends Error {
6
6
  code: string;
7
7
  status: number;
8
8
  }
9
- export declare class ParseError extends Error {
10
- code: string;
11
- status: number;
12
- }
13
- export declare class InternalServerError extends Error {
14
- code: string;
15
- status: number;
16
- }
17
9
  //# sourceMappingURL=error.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,eAA+B,CAAA;AACtD,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAA;AAE1C,eAAO,MAAM,kBAAkB,eAA8B,CAAA;AAC7D,MAAM,MAAM,kBAAkB,GAAG,OAAO,kBAAkB,CAAA;AAE1D,qBAAa,eAAgB,SAAQ,KAAK;IACxC,IAAI,SAAe;IACnB,MAAM,SAAM;CACb;AAED,qBAAa,UAAW,SAAQ,KAAK;IACnC,IAAI,SAAU;IACd,MAAM,SAAM;CACb;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,IAAI,SAA0B;IAC9B,MAAM,SAAM;CACb"}
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,eAA+B,CAAA;AACtD,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAA;AAE1C,eAAO,MAAM,kBAAkB,eAA8B,CAAA;AAC7D,MAAM,MAAM,kBAAkB,GAAG,OAAO,kBAAkB,CAAA;AAE1D,qBAAa,eAAgB,SAAQ,KAAK;IACxC,IAAI,SAAe;IACnB,MAAM,SAAM;CACb"}
package/dist/error.js CHANGED
@@ -4,11 +4,3 @@ export class ValidationError extends Error {
4
4
  code = 'VALIDATION';
5
5
  status = 422;
6
6
  }
7
- export class ParseError extends Error {
8
- code = 'PARSE';
9
- status = 400;
10
- }
11
- export class InternalServerError extends Error {
12
- code = 'INTERNAL_SERVER_ERROR';
13
- status = 500;
14
- }
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  export { Spiceflow } from './spiceflow.ts';
2
2
  export type { AnySpiceflow } from './spiceflow.ts';
3
- export { InternalServerError, ParseError, ValidationError } from './error.ts';
3
+ export { ValidationError } from './error.ts';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA"}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  export { Spiceflow } from "./spiceflow.js";
2
- export { InternalServerError, ParseError, ValidationError } from "./error.js";
2
+ export { ValidationError } from "./error.js";