sprint-es 0.0.163 → 0.0.164

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.
@@ -468,25 +468,38 @@ class Sprint {
468
468
  for (const layer of router.stack) {
469
469
  if (!layer.route) continue;
470
470
  for (const routeLayer of layer.route.stack) {
471
- const handler = routeLayer.handle;
472
- const handlerSchema = handler.__sprintRouteSchema;
473
- if (handlerSchema?.files && typeof handlerSchema.files === "object" && !Array.isArray(handlerSchema.files)) {
474
- const fileFields = Object.keys(handlerSchema.files);
475
- if (fileFields.length > 0) {
476
- fileUploadMiddleware = this.uploadFiles(fileFields);
477
- break;
471
+ const handlers = Array.isArray(routeLayer.handle) ? routeLayer.handle : [routeLayer.handle];
472
+ for (const handler of handlers) {
473
+ const handlerSchema = handler.__sprintRouteSchema;
474
+ if (handlerSchema?.files && typeof handlerSchema.files === "object" && !Array.isArray(handlerSchema.files)) {
475
+ const fileFields = Object.keys(handlerSchema.files);
476
+ const hasStreaming = handler?.hasStreamingFiles ? handler.hasStreamingFiles() : false;
477
+ if (hasStreaming) {
478
+ fileUploadMiddleware = this.streamUpload();
479
+ break;
480
+ } else if (fileFields.length > 0) {
481
+ fileUploadMiddleware = this.uploadFiles(fileFields);
482
+ break;
483
+ }
478
484
  }
479
485
  }
486
+ if (fileUploadMiddleware) break;
480
487
  }
481
488
  if (fileUploadMiddleware) break;
482
489
  }
483
490
  if (routeMiddlewares.length > 0) {
484
- if (fileUploadMiddleware) this.app.use(finalRoute, fileUploadMiddleware, ...routeMiddlewares, router);
485
- else this.app.use(finalRoute, ...routeMiddlewares, router);
491
+ if (fileUploadMiddleware) {
492
+ this.app.use(finalRoute, fileUploadMiddleware, ...routeMiddlewares, router);
493
+ } else {
494
+ this.app.use(finalRoute, ...routeMiddlewares, router);
495
+ }
486
496
  if (isVerbose) console.log(`[Sprint] Loaded route: ${finalRoute} -> ${filePath} (with ${routeMiddlewares.length} middleware(s))`);
487
497
  } else {
488
- if (fileUploadMiddleware) this.app.use(finalRoute, fileUploadMiddleware, router);
489
- else this.app.use(finalRoute, router);
498
+ if (fileUploadMiddleware) {
499
+ this.app.use(finalRoute, fileUploadMiddleware, router);
500
+ } else {
501
+ this.app.use(finalRoute, router);
502
+ }
490
503
  if (isVerbose) console.log(`[Sprint] Loaded route: ${finalRoute} -> ${filePath}`);
491
504
  }
492
505
  this.counters.routes += router.stack.length;
@@ -859,34 +872,36 @@ class Sprint {
859
872
  return this.memoryUpload.array(fieldNames);
860
873
  }
861
874
  streamUpload(options) {
862
- return (req, res) => {
863
- return new Promise((resolve, reject) => {
864
- const bb = busboy({
865
- headers: req.headers,
866
- limits: options?.limits
867
- });
868
- const files = [];
869
- const fields = {};
870
- bb.on("file", (fieldName, file, info) => {
871
- files.push({
872
- fieldName,
873
- file,
874
- filename: info.filename,
875
- encoding: info.encoding,
876
- mimeType: info.mimeType
877
- });
878
- });
879
- bb.on("field", (fieldName, val) => {
880
- fields[fieldName] = val;
881
- });
882
- bb.on("finish", () => {
883
- resolve({ files, fields });
884
- });
885
- bb.on("error", (err) => {
886
- reject(err);
875
+ return (req, res, next) => {
876
+ const bb = busboy({
877
+ headers: req.headers,
878
+ limits: options?.limits
879
+ });
880
+ const files = {};
881
+ bb.on("file", (fieldName, file, info) => {
882
+ if (!files[fieldName]) files[fieldName] = [];
883
+ files[fieldName].push({
884
+ fieldname: fieldName,
885
+ originalname: info.filename,
886
+ encoding: info.encoding,
887
+ mimetype: info.mimeType,
888
+ size: 0,
889
+ buffer: void 0,
890
+ file
887
891
  });
888
- req.pipe(bb);
889
892
  });
893
+ bb.on("field", (fieldName, val) => {
894
+ if (!req.body) req.body = {};
895
+ req.body[fieldName] = val;
896
+ });
897
+ bb.on("finish", () => {
898
+ req.files = files;
899
+ next();
900
+ });
901
+ bb.on("error", (err) => {
902
+ next(err);
903
+ });
904
+ req.pipe(bb);
890
905
  };
891
906
  }
892
907
  }
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const stream = require("stream");
3
4
  const zod = require("zod");
4
5
  function normalizeExtensions(ext) {
5
6
  if (!ext) return [];
@@ -53,6 +54,25 @@ function createFileSchema(options = {}) {
53
54
  chainedSchema.minSize = (size) => createFileSchema({ ...options, minSize: size });
54
55
  return chainedSchema;
55
56
  }
57
+ function createStreamFileSchema(options = {}) {
58
+ normalizeExtensions(options.ext);
59
+ normalizeMimeTypes(options.mimeType);
60
+ const streamFileSchema = zod.z.object({
61
+ fieldName: zod.z.string(),
62
+ file: zod.z.instanceof(stream.Readable),
63
+ filename: zod.z.string(),
64
+ encoding: zod.z.string(),
65
+ mimeType: zod.z.string()
66
+ });
67
+ const streamSchemaWithValidations = streamFileSchema;
68
+ const chainedSchema = Object.create(streamSchemaWithValidations);
69
+ chainedSchema.format = (ext) => createStreamFileSchema({ ...options, ext: normalizeExtensions(ext) });
70
+ chainedSchema.mimeType = (mime) => createStreamFileSchema({ ...options, mimeType: normalizeMimeTypes(mime) });
71
+ chainedSchema.maxSize = (size) => createStreamFileSchema({ ...options, maxSize: size });
72
+ chainedSchema.minSize = (size) => createStreamFileSchema({ ...options, minSize: size });
73
+ chainedSchema.stream = () => createStreamFileSchema({ ...options });
74
+ return chainedSchema;
75
+ }
56
76
  function createFilesArraySchema(fieldName, options = {}) {
57
77
  const fileSchema = createFileSchema({ ...options, required: false });
58
78
  return zod.z.array(fileSchema).min(options.required === false ? 0 : 1, {
@@ -74,6 +94,9 @@ const fileValidators = {
74
94
  minSize: (minSize) => {
75
95
  return createFileSchema({ minSize });
76
96
  },
97
+ stream: () => {
98
+ return createStreamFileSchema({});
99
+ },
77
100
  image: () => {
78
101
  return createFileSchema({
79
102
  mimeType: ["image/jpeg", "image/png", "image/gif", "image/webp", "image/svg+xml"],
@@ -155,6 +178,7 @@ function parseSchema(schema, data) {
155
178
  function defineRouteSchema(schema) {
156
179
  const headersSchema = schema.headers ? normalizeHeadersSchema(schema.headers) : null;
157
180
  const fileFields = schema.files ? Object.keys(schema.files) : [];
181
+ const hasStreaming = !!(schema.files && typeof schema.files === "object" && Object.values(schema.files).some((f) => f.stream || f._isStreamSchema));
158
182
  const middleware = (req, res, next) => {
159
183
  const errors = [];
160
184
  const method = req.method.toUpperCase();
@@ -229,6 +253,7 @@ function defineRouteSchema(schema) {
229
253
  };
230
254
  middleware.__sprintRouteSchema = schema;
231
255
  middleware.getFileFields = () => fileFields;
256
+ middleware.hasStreamingFiles = () => hasStreaming || false;
232
257
  return middleware;
233
258
  }
234
259
  exports.createFileSchema = createFileSchema;
package/dist/esm/index.js CHANGED
@@ -443,25 +443,38 @@ class Sprint {
443
443
  for (const layer of router.stack) {
444
444
  if (!layer.route) continue;
445
445
  for (const routeLayer of layer.route.stack) {
446
- const handler = routeLayer.handle;
447
- const handlerSchema = handler.__sprintRouteSchema;
448
- if (handlerSchema?.files && typeof handlerSchema.files === "object" && !Array.isArray(handlerSchema.files)) {
449
- const fileFields = Object.keys(handlerSchema.files);
450
- if (fileFields.length > 0) {
451
- fileUploadMiddleware = this.uploadFiles(fileFields);
452
- break;
446
+ const handlers = Array.isArray(routeLayer.handle) ? routeLayer.handle : [routeLayer.handle];
447
+ for (const handler of handlers) {
448
+ const handlerSchema = handler.__sprintRouteSchema;
449
+ if (handlerSchema?.files && typeof handlerSchema.files === "object" && !Array.isArray(handlerSchema.files)) {
450
+ const fileFields = Object.keys(handlerSchema.files);
451
+ const hasStreaming = handler?.hasStreamingFiles ? handler.hasStreamingFiles() : false;
452
+ if (hasStreaming) {
453
+ fileUploadMiddleware = this.streamUpload();
454
+ break;
455
+ } else if (fileFields.length > 0) {
456
+ fileUploadMiddleware = this.uploadFiles(fileFields);
457
+ break;
458
+ }
453
459
  }
454
460
  }
461
+ if (fileUploadMiddleware) break;
455
462
  }
456
463
  if (fileUploadMiddleware) break;
457
464
  }
458
465
  if (routeMiddlewares.length > 0) {
459
- if (fileUploadMiddleware) this.app.use(finalRoute, fileUploadMiddleware, ...routeMiddlewares, router);
460
- else this.app.use(finalRoute, ...routeMiddlewares, router);
466
+ if (fileUploadMiddleware) {
467
+ this.app.use(finalRoute, fileUploadMiddleware, ...routeMiddlewares, router);
468
+ } else {
469
+ this.app.use(finalRoute, ...routeMiddlewares, router);
470
+ }
461
471
  if (isVerbose) console.log(`[Sprint] Loaded route: ${finalRoute} -> ${filePath} (with ${routeMiddlewares.length} middleware(s))`);
462
472
  } else {
463
- if (fileUploadMiddleware) this.app.use(finalRoute, fileUploadMiddleware, router);
464
- else this.app.use(finalRoute, router);
473
+ if (fileUploadMiddleware) {
474
+ this.app.use(finalRoute, fileUploadMiddleware, router);
475
+ } else {
476
+ this.app.use(finalRoute, router);
477
+ }
465
478
  if (isVerbose) console.log(`[Sprint] Loaded route: ${finalRoute} -> ${filePath}`);
466
479
  }
467
480
  this.counters.routes += router.stack.length;
@@ -834,34 +847,36 @@ class Sprint {
834
847
  return this.memoryUpload.array(fieldNames);
835
848
  }
836
849
  streamUpload(options) {
837
- return (req, res) => {
838
- return new Promise((resolve, reject) => {
839
- const bb = busboy({
840
- headers: req.headers,
841
- limits: options?.limits
842
- });
843
- const files = [];
844
- const fields = {};
845
- bb.on("file", (fieldName, file, info) => {
846
- files.push({
847
- fieldName,
848
- file,
849
- filename: info.filename,
850
- encoding: info.encoding,
851
- mimeType: info.mimeType
852
- });
853
- });
854
- bb.on("field", (fieldName, val) => {
855
- fields[fieldName] = val;
856
- });
857
- bb.on("finish", () => {
858
- resolve({ files, fields });
859
- });
860
- bb.on("error", (err) => {
861
- reject(err);
850
+ return (req, res, next) => {
851
+ const bb = busboy({
852
+ headers: req.headers,
853
+ limits: options?.limits
854
+ });
855
+ const files = {};
856
+ bb.on("file", (fieldName, file, info) => {
857
+ if (!files[fieldName]) files[fieldName] = [];
858
+ files[fieldName].push({
859
+ fieldname: fieldName,
860
+ originalname: info.filename,
861
+ encoding: info.encoding,
862
+ mimetype: info.mimeType,
863
+ size: 0,
864
+ buffer: void 0,
865
+ file
862
866
  });
863
- req.pipe(bb);
864
867
  });
868
+ bb.on("field", (fieldName, val) => {
869
+ if (!req.body) req.body = {};
870
+ req.body[fieldName] = val;
871
+ });
872
+ bb.on("finish", () => {
873
+ req.files = files;
874
+ next();
875
+ });
876
+ bb.on("error", (err) => {
877
+ next(err);
878
+ });
879
+ req.pipe(bb);
865
880
  };
866
881
  }
867
882
  }
@@ -1,3 +1,4 @@
1
+ import { Readable } from "stream";
1
2
  import { z } from "zod";
2
3
  function normalizeExtensions(ext) {
3
4
  if (!ext) return [];
@@ -51,6 +52,25 @@ function createFileSchema(options = {}) {
51
52
  chainedSchema.minSize = (size) => createFileSchema({ ...options, minSize: size });
52
53
  return chainedSchema;
53
54
  }
55
+ function createStreamFileSchema(options = {}) {
56
+ normalizeExtensions(options.ext);
57
+ normalizeMimeTypes(options.mimeType);
58
+ const streamFileSchema = z.object({
59
+ fieldName: z.string(),
60
+ file: z.instanceof(Readable),
61
+ filename: z.string(),
62
+ encoding: z.string(),
63
+ mimeType: z.string()
64
+ });
65
+ const streamSchemaWithValidations = streamFileSchema;
66
+ const chainedSchema = Object.create(streamSchemaWithValidations);
67
+ chainedSchema.format = (ext) => createStreamFileSchema({ ...options, ext: normalizeExtensions(ext) });
68
+ chainedSchema.mimeType = (mime) => createStreamFileSchema({ ...options, mimeType: normalizeMimeTypes(mime) });
69
+ chainedSchema.maxSize = (size) => createStreamFileSchema({ ...options, maxSize: size });
70
+ chainedSchema.minSize = (size) => createStreamFileSchema({ ...options, minSize: size });
71
+ chainedSchema.stream = () => createStreamFileSchema({ ...options });
72
+ return chainedSchema;
73
+ }
54
74
  function createFilesArraySchema(fieldName, options = {}) {
55
75
  const fileSchema = createFileSchema({ ...options, required: false });
56
76
  return z.array(fileSchema).min(options.required === false ? 0 : 1, {
@@ -72,6 +92,9 @@ const fileValidators = {
72
92
  minSize: (minSize) => {
73
93
  return createFileSchema({ minSize });
74
94
  },
95
+ stream: () => {
96
+ return createStreamFileSchema({});
97
+ },
75
98
  image: () => {
76
99
  return createFileSchema({
77
100
  mimeType: ["image/jpeg", "image/png", "image/gif", "image/webp", "image/svg+xml"],
@@ -153,6 +176,7 @@ function parseSchema(schema, data) {
153
176
  function defineRouteSchema(schema) {
154
177
  const headersSchema = schema.headers ? normalizeHeadersSchema(schema.headers) : null;
155
178
  const fileFields = schema.files ? Object.keys(schema.files) : [];
179
+ const hasStreaming = !!(schema.files && typeof schema.files === "object" && Object.values(schema.files).some((f) => f.stream || f._isStreamSchema));
156
180
  const middleware = (req, res, next) => {
157
181
  const errors = [];
158
182
  const method = req.method.toUpperCase();
@@ -227,6 +251,7 @@ function defineRouteSchema(schema) {
227
251
  };
228
252
  middleware.__sprintRouteSchema = schema;
229
253
  middleware.getFileFields = () => fileFields;
254
+ middleware.hasStreamingFiles = () => hasStreaming || false;
230
255
  return middleware;
231
256
  }
232
257
  export {
@@ -1,6 +1,6 @@
1
1
  import { RequestHandler } from 'express';
2
2
  import { z, ZodSchema as ZodSchemaType, ZodTypeDef } from 'zod';
3
- import { FileObject, FileSchemaType } from './types';
3
+ import { FileObject, FileSchemaType, StreamFileSchemaType } from './types';
4
4
  export type AuthorizationSource = `query:${string}` | `headers:${string}`;
5
5
  export interface SprintAuthorizationOptions {
6
6
  sources?: AuthorizationSource | AuthorizationSource[];
@@ -14,16 +14,20 @@ export interface FileValidationOptions {
14
14
  }
15
15
  declare function createFileSchema(options?: FileValidationOptions): FileSchemaType;
16
16
  declare function createFilesArraySchema(fieldName: string, options?: FileValidationOptions): ZodSchemaType<FileObject[], ZodTypeDef, FileObject[]>;
17
- type FileValidatorsType = FileSchemaType & {
17
+ declare const fileValidators: {
18
+ format: (ext: string | string[]) => FileSchemaType;
19
+ mimeType: (mimeType: string | string[]) => FileSchemaType;
20
+ maxSize: (maxSize: number) => FileSchemaType;
21
+ minSize: (minSize: number) => FileSchemaType;
22
+ stream: () => StreamFileSchemaType;
18
23
  image: () => FileSchemaType;
19
24
  document: () => FileSchemaType;
20
25
  video: () => FileSchemaType;
21
26
  audio: () => FileSchemaType;
22
27
  archive: () => FileSchemaType;
23
28
  any: () => FileSchemaType;
24
- field: (fieldName: string, options?: FileValidationOptions) => ZodSchemaType<FileObject[], ZodTypeDef, FileObject[]>;
29
+ field: (fieldName: string, options?: FileValidationOptions) => z.ZodType<FileObject[], z.ZodTypeDef, FileObject[]>;
25
30
  };
26
- declare const fileValidators: FileValidatorsType;
27
31
  export declare function normalizeHeadersSchema(schema: any): any;
28
32
  declare function createSprintAuthorizationSchema(options?: SprintAuthorizationOptions): ZodSchemaType<string, ZodTypeDef, string>;
29
33
  declare const sprintBuilder: {
@@ -57,6 +61,7 @@ export interface RouteSchemaOptions {
57
61
  }
58
62
  export declare function defineRouteSchema<T extends RouteSchemaOptions>(schema: T): RequestHandler & {
59
63
  getFileFields?: () => string[];
64
+ hasStreamingFiles?: () => boolean;
60
65
  };
61
66
  export type { ZodSchema, ZodMiddlewareOptions } from './types';
62
67
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modules/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,SAAS,IAAI,aAAa,EAAE,UAAU,EAAsD,MAAM,KAAK,CAAC;AACpH,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAErD,MAAM,MAAM,mBAAmB,GAAG,SAAS,MAAM,EAAE,GAAG,WAAW,MAAM,EAAE,CAAC;AAE1E,MAAM,WAAW,0BAA0B;IACvC,OAAO,CAAC,EAAE,mBAAmB,GAAG,mBAAmB,EAAE,CAAC;CACzD;AAED,MAAM,WAAW,qBAAqB;IAClC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAYD,iBAAS,gBAAgB,CAAC,OAAO,GAAE,qBAA0B,GAAG,cAAc,CAmD7E;AAED,iBAAS,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,GAAG,aAAa,CAAC,UAAU,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAK7I;AAED,KAAK,kBAAkB,GAAG,cAAc,GAAG;IACvC,KAAK,EAAE,MAAM,cAAc,CAAC;IAC5B,QAAQ,EAAE,MAAM,cAAc,CAAC;IAC/B,KAAK,EAAE,MAAM,cAAc,CAAC;IAC5B,KAAK,EAAE,MAAM,cAAc,CAAC;IAC5B,OAAO,EAAE,MAAM,cAAc,CAAC;IAC9B,GAAG,EAAE,MAAM,cAAc,CAAC;IAC1B,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,KAAK,aAAa,CAAC,UAAU,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;CACxH,CAAC;AAEF,QAAA,MAAM,cAAc,EAAE,kBAmDrB,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,CAKvD;AAED,iBAAS,+BAA+B,CAAC,OAAO,CAAC,EAAE,0BAA0B,GAAG,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAKxH;AAED,QAAA,MAAM,aAAa;;CAElB,CAAC;AAEF,QAAA,MAAM,UAAU;;CAEf,CAAC;AAEF,KAAK,cAAc,GAAG,OAAO,UAAU,GAAG,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAQpE,KAAK,aAAa,GAAG,OAAO,CAAC,GAAG;IAC5B,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,OAAO,cAAc,CAAC;CAChC,CAAC;AAEF,QAAA,MAAM,MAAM,EAMN,aAAa,CAAC;AAEpB,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;AACvB,OAAO,EAAE,aAAa,IAAI,MAAM,EAAE,CAAC;AACnC,OAAO,EAAE,cAAc,IAAI,KAAK,EAAE,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,CAAC;AAEpD,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,WAAW,kBAAkB;IAC/B,IAAI,CAAC,EAAE,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IAC3C,WAAW,CAAC,EAAE,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IAClD,MAAM,CAAC,EAAE,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IAC7C,OAAO,CAAC,EAAE,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IAC9C,KAAK,CAAC,EAAE;QACJ,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;KAC5D,CAAC;IACF,MAAM,CAAC,EAAE;QACL,aAAa,CAAC,EAAE,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;KAC7D,CAAC;CACL;AAqBD,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,kBAAkB,EAAE,MAAM,EAAE,CAAC,GAAG,cAAc,GAAG;IACzF,aAAa,CAAC,EAAE,MAAM,MAAM,EAAE,CAAC;CAClC,CAiGA;AAED,YAAY,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modules/schemas/index.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z, ZodType, ZodTypeDef } from 'zod';
2
2
  export type ZodSchema = z.ZodType<any>;
3
3
  export interface ZodMiddlewareOptions {
4
4
  body?: ZodSchema;
@@ -25,10 +25,25 @@ export type FileObject = {
25
25
  size: number;
26
26
  buffer?: Buffer;
27
27
  };
28
- export interface FileSchemaType {
28
+ export type StreamFileObject = {
29
+ fieldName: string;
30
+ file: NodeJS.ReadableStream;
31
+ filename: string;
32
+ encoding: string;
33
+ mimeType: string;
34
+ };
35
+ export type FileSchemaType = ZodType<FileObject, ZodTypeDef, FileObject> & {
29
36
  format(ext: string | string[]): FileSchemaType;
30
37
  mimeType(mimeType: string | string[]): FileSchemaType;
31
38
  maxSize(maxSize: number): FileSchemaType;
32
39
  minSize(minSize: number): FileSchemaType;
33
- }
40
+ stream(): StreamFileSchemaType;
41
+ };
42
+ export type StreamFileSchemaType = ZodType<StreamFileObject, ZodTypeDef, StreamFileObject> & {
43
+ format(ext: string | string[]): StreamFileSchemaType;
44
+ mimeType(mimeType: string | string[]): StreamFileSchemaType;
45
+ maxSize(maxSize: number): StreamFileSchemaType;
46
+ minSize(minSize: number): StreamFileSchemaType;
47
+ stream(): StreamFileSchemaType;
48
+ };
34
49
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/modules/schemas/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAEvC,MAAM,WAAW,oBAAoB;IACjC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE;QACL,aAAa,CAAC,EAAE,SAAS,CAAC;KAC7B,CAAC;CACL;AAED,MAAM,WAAW,qBAAqB;IAClC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,MAAM,UAAU,GAAG;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,WAAW,cAAc;IAC3B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,cAAc,CAAC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,cAAc,CAAC;IACtD,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC;IACzC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC;CAC5C"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/modules/schemas/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAE7C,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAEvC,MAAM,WAAW,oBAAoB;IACjC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE;QACL,aAAa,CAAC,EAAE,SAAS,CAAC;KAC7B,CAAC;CACL;AAED,MAAM,WAAW,qBAAqB;IAClC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,MAAM,UAAU,GAAG;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,cAAc,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,GAAG;IACvE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,cAAc,CAAC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,cAAc,CAAC;IACtD,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC;IACzC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC;IACzC,MAAM,IAAI,oBAAoB,CAAC;CAClC,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,CAAC,GAAG;IACzF,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,oBAAoB,CAAC;IACrD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,oBAAoB,CAAC;IAC5D,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB,CAAC;IAC/C,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB,CAAC;IAC/C,MAAM,IAAI,oBAAoB,CAAC;CAClC,CAAA"}
@@ -58,15 +58,6 @@ export declare class Sprint {
58
58
  files?: number;
59
59
  };
60
60
  headers?: Record<string, string>;
61
- }): (req: Request, res: Response) => Promise<{
62
- files: Array<{
63
- fieldName: string;
64
- file: NodeJS.ReadableStream;
65
- filename: string;
66
- encoding: string;
67
- mimeType: string;
68
- }>;
69
- fields: Record<string, string>;
70
- }>;
61
+ }): (req: Request, res: Response, next: (err?: any) => void) => void;
71
62
  }
72
63
  //# sourceMappingURL=sprint.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sprint.d.ts","sourceRoot":"","sources":["../../src/sprint.ts"],"names":[],"mappings":"AAYA,OAAO,OAAO,EAAE,EAAE,WAAW,EAA2C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC3G,OAAO,EAAE,OAAO,EAA+B,gBAAgB,EAAsC,MAAM,SAAS,CAAC;AAcrH,eAAO,MAAM,aAAa,SAAQ,CAAC;AACnC,eAAO,MAAM,YAAY,SAAS,CAAC;AA0CnC,qBAAa,MAAM;IACR,GAAG,EAAE,WAAW,CAAC;IACxB,OAAO,CAAC,IAAI,CAAwD;IACpE,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,eAAe,CAA2B;IAClD,OAAO,CAAC,YAAY,CAAwB;IAC5C,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,YAAY,CAAiB;IACrC,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,iBAAiB,CAA4C;IACrE,OAAO,CAAC,QAAQ,CAA8C;IAC9D,OAAO,CAAC,OAAO,CAcT;IACN,OAAO,CAAC,OAAO,CAcT;IACN,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,gBAAgB,CAIhB;IACD,uBAAuB,EAAE,MAAM,CAAmB;IAClD,YAAY,EAAE,GAAG,CAAC;;YA6JX,IAAI;IAkDlB,OAAO,CAAC,YAAY;IAiDpB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA4B9B;;OAEG;YACW,eAAe;IAkC7B,OAAO,CAAC,eAAe;YAeT,UAAU;YAuGV,YAAY;IAqB1B,OAAO,CAAC,YAAY;IAgCpB,+BAA+B;IAC/B,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,mBAAmB;IA+K3B,OAAO,CAAC,kBAAkB;IAqC1B,OAAO,CAAC,kBAAkB;IA8B1B,OAAO,CAAC,mBAAmB;IA+BpB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAClC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IACnC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAClC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IACrC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IACpC,GAAG,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,GAAG,gBAAgB,EAAE,YAAY,CAAC,EAAE,OAAO;IAY9E,gBAAgB,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI;IAInC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI;IAgEnC,UAAU,CAAC,SAAS,GAAE,MAAe;IAIrC,WAAW,CAAC,UAAU,GAAE,MAAM,GAAG,MAAM,EAAY;IAKnD,YAAY,CAAC,OAAO,CAAC,EAAE;QAC1B,MAAM,CAAC,EAAE;YACL,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,KAAK,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACpC,IACW,KAAK,OAAO,EAAE,KAAK,QAAQ,KAAG,OAAO,CAAC;QAC1C,KAAK,EAAE,KAAK,CAAC;YACT,SAAS,EAAE,MAAM,CAAC;YAClB,IAAI,EAAE,MAAM,CAAC,cAAc,CAAC;YAC5B,QAAQ,EAAE,MAAM,CAAC;YACjB,QAAQ,EAAE,MAAM,CAAC;YACjB,QAAQ,EAAE,MAAM,CAAC;SACpB,CAAC,CAAC;QACH,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClC,CAAC;CA0CT"}
1
+ {"version":3,"file":"sprint.d.ts","sourceRoot":"","sources":["../../src/sprint.ts"],"names":[],"mappings":"AAYA,OAAO,OAAO,EAAE,EAAE,WAAW,EAA2C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC3G,OAAO,EAAE,OAAO,EAA+B,gBAAgB,EAAsC,MAAM,SAAS,CAAC;AAcrH,eAAO,MAAM,aAAa,SAAQ,CAAC;AACnC,eAAO,MAAM,YAAY,SAAS,CAAC;AA0CnC,qBAAa,MAAM;IACR,GAAG,EAAE,WAAW,CAAC;IACxB,OAAO,CAAC,IAAI,CAAwD;IACpE,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,eAAe,CAA2B;IAClD,OAAO,CAAC,YAAY,CAAwB;IAC5C,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,YAAY,CAAiB;IACrC,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,iBAAiB,CAA4C;IACrE,OAAO,CAAC,QAAQ,CAA8C;IAC9D,OAAO,CAAC,OAAO,CAcT;IACN,OAAO,CAAC,OAAO,CAcT;IACN,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,gBAAgB,CAIhB;IACD,uBAAuB,EAAE,MAAM,CAAmB;IAClD,YAAY,EAAE,GAAG,CAAC;;YA6JX,IAAI;IAkDlB,OAAO,CAAC,YAAY;IAiDpB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA4B9B;;OAEG;YACW,eAAe;IAkC7B,OAAO,CAAC,eAAe;YAeT,UAAU;YAsHV,YAAY;IAqB1B,OAAO,CAAC,YAAY;IAgCpB,+BAA+B;IAC/B,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,mBAAmB;IA+K3B,OAAO,CAAC,kBAAkB;IAqC1B,OAAO,CAAC,kBAAkB;IA8B1B,OAAO,CAAC,mBAAmB;IA+BpB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAClC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IACnC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAClC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IACrC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IACpC,GAAG,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,GAAG,gBAAgB,EAAE,YAAY,CAAC,EAAE,OAAO;IAY9E,gBAAgB,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI;IAInC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI;IAgEnC,UAAU,CAAC,SAAS,GAAE,MAAe;IAIrC,WAAW,CAAC,UAAU,GAAE,MAAM,GAAG,MAAM,EAAY;IAKnD,YAAY,CAAC,OAAO,CAAC,EAAE;QAC1B,MAAM,CAAC,EAAE;YACL,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,KAAK,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACpC,IACW,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,IAAI,KAAG,IAAI;CAsC5E"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sprint-es",
3
- "version": "0.0.163",
3
+ "version": "0.0.164",
4
4
  "description": "Sprint - Quickly API",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",