@breautek/storm 9.0.1 → 9.0.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.
Files changed (103) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/docs/assets/hierarchy.js +1 -1
  3. package/docs/assets/navigation.js +1 -1
  4. package/docs/assets/search.js +1 -1
  5. package/docs/classes/Application.html +17 -17
  6. package/docs/classes/ConfigLoader.html +3 -3
  7. package/docs/classes/Database.html +2 -2
  8. package/docs/classes/DatabaseCastObject.html +2 -2
  9. package/docs/classes/DatabaseConnection.html +21 -21
  10. package/docs/classes/DatabaseQueryError.html +6 -6
  11. package/docs/classes/DeadLockError.html +6 -6
  12. package/docs/classes/DiskSpaceError.html +5 -5
  13. package/docs/classes/DropTemporaryTableQuery.html +7 -7
  14. package/docs/classes/DuplicateEntryError.html +5 -5
  15. package/docs/classes/EntityNotFoundError.html +5 -5
  16. package/docs/classes/ExpiredTokenError.html +5 -5
  17. package/docs/classes/Handler.html +2 -2
  18. package/docs/classes/InternalError.html +5 -5
  19. package/docs/classes/InvalidCredentialsError.html +5 -5
  20. package/docs/classes/InvalidValueError.html +5 -5
  21. package/docs/classes/LineString.html +2 -2
  22. package/docs/classes/LockWaitTimeoutError.html +6 -6
  23. package/docs/classes/ManagedDatabaseConnection.html +5 -5
  24. package/docs/classes/Middleware.html +2 -2
  25. package/docs/classes/MissingConfigError.html +5 -5
  26. package/docs/classes/MissingParameterError.html +5 -5
  27. package/docs/classes/MySQLConnection.html +25 -25
  28. package/docs/classes/MySQLDatabase.html +2 -2
  29. package/docs/classes/NotImplementedError.html +5 -5
  30. package/docs/classes/Point.html +2 -2
  31. package/docs/classes/Polygon.html +2 -2
  32. package/docs/classes/Query.html +7 -7
  33. package/docs/classes/RawError.html +5 -5
  34. package/docs/classes/RawQuery.html +7 -7
  35. package/docs/classes/Request.html +2 -2
  36. package/docs/classes/Response.html +2 -2
  37. package/docs/classes/ResponseData.html +2 -2
  38. package/docs/classes/ServiceProvider.html +2 -2
  39. package/docs/classes/ServiceResponse.html +2 -2
  40. package/docs/classes/SetSessionVariableQuery.html +7 -7
  41. package/docs/classes/StormError.html +5 -5
  42. package/docs/classes/TemporaryTableQuery.html +7 -7
  43. package/docs/classes/TimeoutError.html +5 -5
  44. package/docs/classes/Token.html +2 -2
  45. package/docs/classes/TokenManager.html +2 -2
  46. package/docs/classes/Transaction.html +2 -2
  47. package/docs/classes/UnauthorizedAccessError.html +5 -5
  48. package/docs/enums/ErrorCode.html +2 -2
  49. package/docs/enums/ExitCode.html +2 -2
  50. package/docs/enums/HTTPMethod.html +2 -2
  51. package/docs/enums/IsolationLevel.html +2 -2
  52. package/docs/enums/JWTError.html +2 -2
  53. package/docs/enums/StatusCode.html +2 -2
  54. package/docs/enums/TransactionAccessLevel.html +2 -2
  55. package/docs/functions/getInstance.html +1 -1
  56. package/docs/hierarchy.html +1 -1
  57. package/docs/index.html +1 -1
  58. package/docs/interfaces/IAdditionalErrorDetails.html +1 -1
  59. package/docs/interfaces/ICloudwatchConfig.html +2 -2
  60. package/docs/interfaces/ICloudwatchCredentials.html +2 -2
  61. package/docs/interfaces/ICloudwatchStreamConfig.html +2 -2
  62. package/docs/interfaces/IConfig.html +2 -2
  63. package/docs/interfaces/IDatabaseConfig.html +2 -2
  64. package/docs/interfaces/IDatabaseConnection.html +5 -5
  65. package/docs/interfaces/IDatabasePosition.html +2 -2
  66. package/docs/interfaces/IErrorResponse.html +2 -2
  67. package/docs/interfaces/IFormData.html +2 -2
  68. package/docs/interfaces/IInsertQueryResult.html +2 -2
  69. package/docs/interfaces/IJWTVerifyOptions.html +2 -2
  70. package/docs/interfaces/IOKPacket.html +2 -2
  71. package/docs/interfaces/IParameterMap.html +1 -1
  72. package/docs/interfaces/IQueryable.html +2 -2
  73. package/docs/interfaces/IRequestResponse.html +2 -2
  74. package/docs/interfaces/ISetSessionVariableQueryInput.html +2 -2
  75. package/docs/interfaces/IStormCLIArgs.html +2 -2
  76. package/docs/interfaces/ITemporaryTableQueryInput.html +2 -2
  77. package/docs/interfaces/IUpdateQueryResult.html +2 -2
  78. package/docs/interfaces/formidable.FileJSON.html +1 -1
  79. package/docs/interfaces/formidable.Part.html +1 -1
  80. package/docs/types/IDeleteQueryResult.html +1 -1
  81. package/docs/types/IStoredProcedureResult.html +1 -1
  82. package/docs/types/TCoordinate.html +1 -1
  83. package/docs/types/TSerializableResponse.html +13 -0
  84. package/docs/types/TSupportedResponsePrimitives.html +1 -0
  85. package/docs/types/TSupportedResponseTypes.html +1 -0
  86. package/lib/Handler.d.ts +3 -3
  87. package/lib/Handler.js.map +1 -1
  88. package/lib/IRequestResponse.d.ts +2 -2
  89. package/lib/Middleware.d.ts +4 -4
  90. package/lib/Middleware.js.map +1 -1
  91. package/lib/Response.d.ts +30 -12
  92. package/lib/Response.js +0 -2
  93. package/lib/Response.js.map +1 -1
  94. package/lib/api.d.ts +1 -1
  95. package/lib/api.js.map +1 -1
  96. package/package.json +1 -1
  97. package/src/Handler.ts +17 -17
  98. package/src/IRequestResponse.ts +2 -2
  99. package/src/Middleware.ts +4 -4
  100. package/src/Response.ts +45 -21
  101. package/src/api.ts +1 -1
  102. package/docs/interfaces/IStormSendable.html +0 -1
  103. package/docs/types/SendableData.html +0 -1
@@ -1,6 +1,6 @@
1
1
  import { Request } from './Request';
2
- import { Response, SendableData } from './Response';
3
- export interface IRequestResponse<TRequest = any, TResponse extends SendableData = SendableData> {
2
+ import { Response, TSupportedResponseTypes } from './Response';
3
+ export interface IRequestResponse<TRequest = any, TResponse extends TSupportedResponseTypes = TSupportedResponseTypes> {
4
4
  request: Request<TRequest>;
5
5
  response: Response<TResponse>;
6
6
  }
@@ -1,14 +1,14 @@
1
1
  import { Request } from './Request';
2
- import { Response } from './Response';
2
+ import { Response, TSupportedResponseTypes } from './Response';
3
3
  import { IRequestResponse } from './IRequestResponse';
4
4
  import { Application } from './Application';
5
5
  /**
6
6
  * @deprecated
7
7
  */
8
- export declare abstract class Middleware<TApplication extends Application = Application> {
8
+ export declare abstract class Middleware<TApplication extends Application = Application, TResponse extends TSupportedResponseTypes = TSupportedResponseTypes> {
9
9
  private $app;
10
10
  constructor(app: TApplication);
11
11
  getApplication(): TApplication;
12
- protected abstract _execute(request: Request, response: Response): Promise<IRequestResponse>;
13
- execute(request: Request, response: Response): Promise<IRequestResponse>;
12
+ protected abstract _execute(request: Request, response: Response<TResponse>): Promise<IRequestResponse>;
13
+ execute(request: Request, response: Response<TResponse>): Promise<IRequestResponse>;
14
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Middleware.js","sourceRoot":"","sources":["../src/Middleware.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;EAcE;;;AAOF;;GAEG;AACH,MAAsB,UAAU;IAG5B,YAAmB,GAAiB;QAChC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IACpB,CAAC;IAEM,cAAc;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAIM,OAAO,CAAC,OAAgB,EAAE,QAAkB;QAC/C,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;CACJ;AAhBD,gCAgBC"}
1
+ {"version":3,"file":"Middleware.js","sourceRoot":"","sources":["../src/Middleware.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;EAcE;;;AAOF;;GAEG;AACH,MAAsB,UAAU;IAG5B,YAAmB,GAAiB;QAChC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IACpB,CAAC;IAEM,cAAc;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAIM,OAAO,CAAC,OAAgB,EAAE,QAA6B;QAC1D,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;CACJ;AAhBD,gCAgBC"}
package/lib/Response.d.ts CHANGED
@@ -1,34 +1,52 @@
1
1
  import { StatusCode } from './StatusCode';
2
2
  import { ResponseData } from './ResponseData';
3
- import { IErrorResponse } from './StormError';
3
+ import { StormError, IErrorResponse } from './StormError';
4
4
  import * as express from 'express';
5
5
  import { Stream } from 'stream';
6
6
  import { Application } from './Application';
7
- type SendableDataPrimitives = Error | IErrorResponse | Buffer | string | number | void | ReadableStream | Stream.Readable | SendableDataPrimitives[];
8
- type _SendableData = SendableDataPrimitives | Record<string, SendableDataPrimitives>;
9
- export interface IStormSendable {
10
- [key: string]: _SendableData;
11
- }
12
- export type SendableData = IStormSendable | _SendableData | ResponseData<SendableData> | void;
7
+ export type TSupportedResponsePrimitives = number | boolean | string | Date | IErrorResponse | void | TSupportedResponsePrimitives[] | TSerializableResponse<object>;
8
+ /**
9
+ * Utility type wrap, useful if you have a concrete interface of TSupportedResponsePrimitives properties.
10
+ * Use this to declare that your interface is Response Serializable.
11
+ *
12
+ * e.g.
13
+ *
14
+ * ```typescript
15
+ * interface MyInterface {...}
16
+ * type TMyInterface = TSerializableResponse<MyInterface>;
17
+ * ```
18
+ *
19
+ * OR
20
+ *
21
+ * ```typescript
22
+ * type MyInterface = TSerializableResponse<{...}>;
23
+ * ```
24
+ *
25
+ * NOTE: This actually will allow more than what is within the `TSupportedResponsePrimitives` union type.
26
+ * TypeScript doesn't offer a way to properly restrict or infer the type.
27
+ */
28
+ export type TSerializableResponse<T extends object> = {
29
+ [k in keyof T]: TSupportedResponsePrimitives;
30
+ };
31
+ export type TSupportedResponseTypes = TSupportedResponsePrimitives | Error | StormError | Buffer | ReadableStream | Stream.Readable;
13
32
  export interface IHeaderKeyValuePair {
14
33
  [key: string]: string;
15
34
  }
16
- export declare class Response<TResponse extends SendableData = SendableData, TErrorResponse extends SendableData = SendableData> {
35
+ export declare class Response<TResponse extends TSupportedResponseTypes> {
17
36
  private $app;
18
37
  private $response;
19
38
  private $created;
20
39
  private $requestURL;
21
40
  constructor(app: Application, response: express.Response, requestURL: string);
22
- setStatus(status: StatusCode): Response<TResponse, TErrorResponse>;
41
+ setStatus(status: StatusCode): Response<TResponse>;
23
42
  getStatus(): StatusCode;
24
43
  redirect(url: string): void;
25
44
  private $send;
26
- send(data?: SendableData): void;
45
+ send(data?: TResponse | ResponseData<TResponse> | ResponseData<StormError> | StormError | IErrorResponse): void;
27
46
  pipe(stream: NodeJS.ReadableStream): void;
28
47
  success(data?: TResponse): void;
29
48
  setHeader(key: string, value: string): void;
30
49
  setHeaders(keyValuePair: IHeaderKeyValuePair): void;
31
50
  isHeadersSent(): boolean;
32
- error(error?: TErrorResponse | ResponseData<TErrorResponse>): void;
51
+ error(error?: StormError | IErrorResponse | ResponseData<StormError> | unknown): void;
33
52
  }
34
- export {};
package/lib/Response.js CHANGED
@@ -113,8 +113,6 @@ class Response {
113
113
  for (let header of headers) {
114
114
  this.setHeader(header[0], header[1]);
115
115
  }
116
- // If it was not ResponseData<TResponse> then
117
- // the method signature should have caught it
118
116
  this.send(error);
119
117
  }
120
118
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"Response.js","sourceRoot":"","sources":["../src/Response.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Response.js","sourceRoot":"","sources":["../src/Response.ts"],"names":[],"mappings":"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"}
package/lib/api.d.ts CHANGED
@@ -41,7 +41,7 @@ export { LockWaitTimeoutError } from './LockWaitTimeoutError';
41
41
  export { StatusCode } from './StatusCode';
42
42
  export { Middleware } from './Middleware';
43
43
  export { Request, IParameterMap } from './Request';
44
- export { Response, IStormSendable, SendableData } from './Response';
44
+ export { Response, TSerializableResponse, TSupportedResponseTypes, TSupportedResponsePrimitives } from './Response';
45
45
  export { ResponseData } from './ResponseData';
46
46
  export { Handler } from './Handler';
47
47
  export { ServiceProvider } from './ServiceProvider';
package/lib/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;EAcE;;;;;AAEF,cAAc;AACd,uCAAuC;AAA/B,uGAAA,WAAW,OAAA;AACnB,6CAGuB;AAFnB,0GAAA,WAAW,OAAA;AAIf,SAAS;AACT,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AAEpB,WAAW;AACX,uCAAoC;AAA5B,oGAAA,QAAQ,OAAA;AAChB,2DAAwD;AAAhD,wHAAA,kBAAkB,OAAA;AAC1B,iDAA8C;AAAtC,8GAAA,aAAa,OAAA;AACrB,qDAAkD;AAA1C,kHAAA,eAAe,OAAA;AACvB,yEAAsE;AAA9D,sIAAA,yBAAyB,OAAA;AACjC,iCAA8B;AAAtB,8FAAA,KAAK,OAAA;AACb,6DAAqF;AAA7E,0HAAA,mBAAmB,OAAA;AAC3B,qEAAkE;AAA1D,kIAAA,uBAAuB,OAAA;AAC/B,uCAAoC;AAA5B,oGAAA,QAAQ,OAAA;AAIhB,qEAAiG;AAAzF,kIAAA,uBAAuB,OAAA;AAC/B,mDAAgD;AAAxC,gHAAA,cAAc,OAAA;AACtB,6CAA0C;AAAlC,0GAAA,WAAW,OAAA;AAGnB,mEAAgE;AAAxD,gIAAA,sBAAsB,OAAA;AAE9B,SAAS;AACT,yCAAsC;AAA9B,sGAAA,SAAS,OAAA;AACjB,uCAAoC;AAA5B,oGAAA,QAAQ,OAAA;AAChB,2CAIsB;AAHlB,wGAAA,UAAU,OAAA;AAId,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AACpB,uCAAoC;AAA5B,oGAAA,QAAQ,OAAA;AAChB,iEAA8D;AAAtD,8HAAA,qBAAqB,OAAA;AAC7B,qEAAkE;AAA1D,kIAAA,uBAAuB,OAAA;AAC/B,iDAA8C;AAAtC,8GAAA,aAAa,OAAA;AACrB,yDAAsD;AAA9C,sHAAA,iBAAiB,OAAA;AACzB,yDAAsD;AAA9C,sHAAA,iBAAiB,OAAA;AACzB,qEAAkE;AAA1D,kIAAA,uBAAuB,OAAA;AAC/B,6DAA0D;AAAlD,0HAAA,mBAAmB,OAAA;AAC3B,mDAAgD;AAAxC,gHAAA,cAAc,OAAA;AACtB,6DAA0D;AAAlD,0HAAA,mBAAmB,OAAA;AAC3B,2DAAwD;AAAhD,wHAAA,kBAAkB,OAAA;AAC1B,2DAAwD;AAAhD,wHAAA,kBAAkB,OAAA;AAC1B,6DAA0D;AAAlD,0HAAA,mBAAmB,OAAA;AAC3B,iDAA8C;AAAtC,8GAAA,aAAa,OAAA;AACrB,+DAA4D;AAApD,4HAAA,oBAAoB,OAAA;AAE5B,OAAO;AACP,2CAAwC;AAAhC,wGAAA,UAAU,OAAA;AAClB,2CAAwC;AAAhC,wGAAA,UAAU,OAAA;AAClB,qCAAiD;AAAzC,kGAAA,OAAO,OAAA;AACf,uCAAkE;AAA1D,oGAAA,QAAQ,OAAA;AAChB,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AACpB,qCAAkC;AAA1B,kGAAA,OAAO,OAAA;AACf,qDAAkD;AAA1C,kHAAA,eAAe,OAAA;AACvB,2CAAwC;AAAhC,wGAAA,UAAU,OAAA;AAClB,qDAAkD;AAA1C,kHAAA,eAAe,OAAA;AAkBvB,QAAQ;AACR,iCAA8B;AAAtB,8FAAA,KAAK,OAAA;AACb,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AAEpB,QAAQ;AACR,uCAAoC;AAA5B,oGAAA,QAAQ,OAAA;AAIhB,2DAAwD;AAAhD,wHAAA,kBAAkB,OAAA;AAC1B,iCAA8B;AAAtB,8FAAA,KAAK,OAAA;AACb,2CAAwC;AAAhC,wGAAA,UAAU,OAAA;AAClB,qCAAkC;AAA1B,kGAAA,OAAO,OAAA;AAEf,cAAc;AACd,+DAAyC;AACjC,gCAAU"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;EAcE;;;;;AAEF,cAAc;AACd,uCAAuC;AAA/B,uGAAA,WAAW,OAAA;AACnB,6CAGuB;AAFnB,0GAAA,WAAW,OAAA;AAIf,SAAS;AACT,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AAEpB,WAAW;AACX,uCAAoC;AAA5B,oGAAA,QAAQ,OAAA;AAChB,2DAAwD;AAAhD,wHAAA,kBAAkB,OAAA;AAC1B,iDAA8C;AAAtC,8GAAA,aAAa,OAAA;AACrB,qDAAkD;AAA1C,kHAAA,eAAe,OAAA;AACvB,yEAAsE;AAA9D,sIAAA,yBAAyB,OAAA;AACjC,iCAA8B;AAAtB,8FAAA,KAAK,OAAA;AACb,6DAAqF;AAA7E,0HAAA,mBAAmB,OAAA;AAC3B,qEAAkE;AAA1D,kIAAA,uBAAuB,OAAA;AAC/B,uCAAoC;AAA5B,oGAAA,QAAQ,OAAA;AAIhB,qEAAiG;AAAzF,kIAAA,uBAAuB,OAAA;AAC/B,mDAAgD;AAAxC,gHAAA,cAAc,OAAA;AACtB,6CAA0C;AAAlC,0GAAA,WAAW,OAAA;AAGnB,mEAAgE;AAAxD,gIAAA,sBAAsB,OAAA;AAE9B,SAAS;AACT,yCAAsC;AAA9B,sGAAA,SAAS,OAAA;AACjB,uCAAoC;AAA5B,oGAAA,QAAQ,OAAA;AAChB,2CAIsB;AAHlB,wGAAA,UAAU,OAAA;AAId,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AACpB,uCAAoC;AAA5B,oGAAA,QAAQ,OAAA;AAChB,iEAA8D;AAAtD,8HAAA,qBAAqB,OAAA;AAC7B,qEAAkE;AAA1D,kIAAA,uBAAuB,OAAA;AAC/B,iDAA8C;AAAtC,8GAAA,aAAa,OAAA;AACrB,yDAAsD;AAA9C,sHAAA,iBAAiB,OAAA;AACzB,yDAAsD;AAA9C,sHAAA,iBAAiB,OAAA;AACzB,qEAAkE;AAA1D,kIAAA,uBAAuB,OAAA;AAC/B,6DAA0D;AAAlD,0HAAA,mBAAmB,OAAA;AAC3B,mDAAgD;AAAxC,gHAAA,cAAc,OAAA;AACtB,6DAA0D;AAAlD,0HAAA,mBAAmB,OAAA;AAC3B,2DAAwD;AAAhD,wHAAA,kBAAkB,OAAA;AAC1B,2DAAwD;AAAhD,wHAAA,kBAAkB,OAAA;AAC1B,6DAA0D;AAAlD,0HAAA,mBAAmB,OAAA;AAC3B,iDAA8C;AAAtC,8GAAA,aAAa,OAAA;AACrB,+DAA4D;AAApD,4HAAA,oBAAoB,OAAA;AAE5B,OAAO;AACP,2CAAwC;AAAhC,wGAAA,UAAU,OAAA;AAClB,2CAAwC;AAAhC,wGAAA,UAAU,OAAA;AAClB,qCAAiD;AAAzC,kGAAA,OAAO,OAAA;AACf,uCAAkH;AAA1G,oGAAA,QAAQ,OAAA;AAChB,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AACpB,qCAAkC;AAA1B,kGAAA,OAAO,OAAA;AACf,qDAAkD;AAA1C,kHAAA,eAAe,OAAA;AACvB,2CAAwC;AAAhC,wGAAA,UAAU,OAAA;AAClB,qDAAkD;AAA1C,kHAAA,eAAe,OAAA;AAkBvB,QAAQ;AACR,iCAA8B;AAAtB,8FAAA,KAAK,OAAA;AACb,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AAEpB,QAAQ;AACR,uCAAoC;AAA5B,oGAAA,QAAQ,OAAA;AAIhB,2DAAwD;AAAhD,wHAAA,kBAAkB,OAAA;AAC1B,iCAA8B;AAAtB,8FAAA,KAAK,OAAA;AACb,2CAAwC;AAAhC,wGAAA,UAAU,OAAA;AAClB,qCAAkC;AAA1B,kGAAA,OAAO,OAAA;AAEf,cAAc;AACd,+DAAyC;AACjC,gCAAU"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@breautek/storm",
3
- "version": "9.0.1",
3
+ "version": "9.0.3",
4
4
  "description": "Object-Oriented REST API framework",
5
5
  "main": "lib/api.js",
6
6
  "types": "lib/api.d.ts",
package/src/Handler.ts CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  import {Application} from './Application';
18
18
  import {Request} from './Request';
19
- import {Response, SendableData} from './Response';
19
+ import {Response, TSupportedResponseTypes} from './Response';
20
20
  import {Middleware} from './Middleware';
21
21
  import {StormError} from './StormError';
22
22
  import {IConfig} from './IConfig';
@@ -31,14 +31,14 @@ const TAG: string = 'Handler';
31
31
 
32
32
  export class Handler<
33
33
  TApplication extends Application = Application,
34
- TGetRequest extends SendableData = void | SendableData,
35
- TGetResponse extends SendableData = void | SendableData,
36
- TPostRequest extends SendableData = void | SendableData,
37
- TPostResponse extends SendableData = void | SendableData,
38
- TPutRequest extends SendableData = void | SendableData,
39
- TPutResponse extends SendableData = void | SendableData,
40
- TDeleteRequest extends SendableData = void | SendableData,
41
- TDeleteResponse extends SendableData = void | SendableData
34
+ TGetRequest = void,
35
+ TGetResponse extends TSupportedResponseTypes = TSupportedResponseTypes,
36
+ TPostRequest = void,
37
+ TPostResponse extends TSupportedResponseTypes = TSupportedResponseTypes,
38
+ TPutRequest = void,
39
+ TPutResponse extends TSupportedResponseTypes = TSupportedResponseTypes,
40
+ TDeleteRequest = void,
41
+ TDeleteResponse extends TSupportedResponseTypes = TSupportedResponseTypes
42
42
  > {
43
43
 
44
44
  private $app: TApplication;
@@ -76,7 +76,7 @@ export class Handler<
76
76
  * @param response
77
77
  * @returns
78
78
  */
79
- private async $executeMiddlewares(request: Request, response: Response): Promise<IRequestResponse> {
79
+ private async $executeMiddlewares(request: Request, response: Response<any>): Promise<IRequestResponse> {
80
80
  let result: IRequestResponse = {
81
81
  request,
82
82
  response
@@ -128,13 +128,13 @@ export class Handler<
128
128
  * @param response
129
129
  * @param error
130
130
  */
131
- protected _onMiddlewareReject(request: Request, response: Response, error: StormError): void {}
131
+ protected _onMiddlewareReject(request: Request, response: Response<any>, error: StormError): void {}
132
132
 
133
- private $handleResponse<TResponse extends SendableData>(response: Response<TResponse>, data: TResponse | ResponseData<TResponse>): void {
133
+ private $handleResponse<TResponse extends TGetResponse | TPostResponse | TPutResponse | TDeleteResponse>(response: Response<TResponse>, data: TResponse | ResponseData<TResponse>): void {
134
134
  response.send(data);
135
135
  }
136
136
 
137
- private $handleResponseError<TResponse extends SendableData>(response: Response<TResponse>, error: any): void {
137
+ private $handleResponseError(response: Response<StormError>, error: StormError | unknown): void {
138
138
  response.error(error);
139
139
  }
140
140
 
@@ -147,7 +147,7 @@ export class Handler<
147
147
  this.$handleResponse(response, req);
148
148
  }
149
149
  catch (ex) {
150
- this.$handleResponseError(response, ex);
150
+ this.$handleResponseError(response as Response<StormError>, ex);
151
151
  }
152
152
  }
153
153
 
@@ -160,7 +160,7 @@ export class Handler<
160
160
  this.$handleResponse(response, req);
161
161
  }
162
162
  catch (ex) {
163
- this.$handleResponseError(response, ex);
163
+ this.$handleResponseError(response as Response<StormError>, ex);
164
164
  }
165
165
  }
166
166
 
@@ -173,7 +173,7 @@ export class Handler<
173
173
  this.$handleResponse(response, req);
174
174
  }
175
175
  catch (ex) {
176
- this.$handleResponseError(response, ex);
176
+ this.$handleResponseError(response as Response<StormError>, ex);
177
177
  }
178
178
  }
179
179
 
@@ -186,7 +186,7 @@ export class Handler<
186
186
  this.$handleResponse(response, req);
187
187
  }
188
188
  catch (ex) {
189
- this.$handleResponseError(response, ex);
189
+ this.$handleResponseError(response as Response<StormError>, ex);
190
190
  }
191
191
  }
192
192
 
@@ -15,9 +15,9 @@
15
15
  */
16
16
 
17
17
  import {Request} from './Request';
18
- import {Response, SendableData} from './Response';
18
+ import {Response, TSupportedResponseTypes} from './Response';
19
19
 
20
- export interface IRequestResponse<TRequest = any, TResponse extends SendableData = SendableData> {
20
+ export interface IRequestResponse<TRequest = any, TResponse extends TSupportedResponseTypes = TSupportedResponseTypes> {
21
21
  request: Request<TRequest>;
22
22
  response: Response<TResponse>;
23
23
  }
package/src/Middleware.ts CHANGED
@@ -15,14 +15,14 @@
15
15
  */
16
16
 
17
17
  import {Request} from './Request';
18
- import {Response} from './Response';
18
+ import {Response, TSupportedResponseTypes} from './Response';
19
19
  import {IRequestResponse} from './IRequestResponse';
20
20
  import { Application } from './Application';
21
21
 
22
22
  /**
23
23
  * @deprecated
24
24
  */
25
- export abstract class Middleware<TApplication extends Application = Application> {
25
+ export abstract class Middleware<TApplication extends Application = Application, TResponse extends TSupportedResponseTypes = TSupportedResponseTypes> {
26
26
  private $app: TApplication;
27
27
 
28
28
  public constructor(app: TApplication) {
@@ -33,9 +33,9 @@ export abstract class Middleware<TApplication extends Application = Application>
33
33
  return this.$app;
34
34
  }
35
35
 
36
- protected abstract _execute(request: Request, response: Response): Promise<IRequestResponse>;
36
+ protected abstract _execute(request: Request, response: Response<TResponse>): Promise<IRequestResponse>;
37
37
 
38
- public execute(request: Request, response: Response): Promise<IRequestResponse> {
38
+ public execute(request: Request, response: Response<TResponse>): Promise<IRequestResponse> {
39
39
  return this._execute(request, response);
40
40
  }
41
41
  }
package/src/Response.ts CHANGED
@@ -24,29 +24,54 @@ import { Application } from './Application';
24
24
 
25
25
  const TAG: string = 'Response';
26
26
 
27
- type SendableDataPrimitives =
28
- Error |
29
- IErrorResponse |
30
- Buffer |
31
- string |
27
+ export type TSupportedResponsePrimitives =
32
28
  number |
29
+ boolean |
30
+ string |
31
+ Date |
32
+ IErrorResponse |
33
33
  void |
34
- ReadableStream |
35
- Stream.Readable |
36
- SendableDataPrimitives[];
37
- type _SendableData = SendableDataPrimitives | Record<string, SendableDataPrimitives>;
38
-
39
- export interface IStormSendable {
40
- [key: string]: _SendableData;
34
+ TSupportedResponsePrimitives[] |
35
+ TSerializableResponse<object>
36
+ ;
37
+
38
+ /**
39
+ * Utility type wrap, useful if you have a concrete interface of TSupportedResponsePrimitives properties.
40
+ * Use this to declare that your interface is Response Serializable.
41
+ *
42
+ * e.g.
43
+ *
44
+ * ```typescript
45
+ * interface MyInterface {...}
46
+ * type TMyInterface = TSerializableResponse<MyInterface>;
47
+ * ```
48
+ *
49
+ * OR
50
+ *
51
+ * ```typescript
52
+ * type MyInterface = TSerializableResponse<{...}>;
53
+ * ```
54
+ *
55
+ * NOTE: This actually will allow more than what is within the `TSupportedResponsePrimitives` union type.
56
+ * TypeScript doesn't offer a way to properly restrict or infer the type.
57
+ */
58
+ export type TSerializableResponse<T extends object> = {
59
+ [k in keyof T]: TSupportedResponsePrimitives;
41
60
  }
42
61
 
43
- export type SendableData = IStormSendable | _SendableData | ResponseData<SendableData> | void;
62
+ export type TSupportedResponseTypes =
63
+ TSupportedResponsePrimitives |
64
+ Error |
65
+ StormError |
66
+ Buffer |
67
+ ReadableStream |
68
+ Stream.Readable;
44
69
 
45
70
  export interface IHeaderKeyValuePair {
46
71
  [key: string]: string;
47
72
  }
48
73
 
49
- export class Response<TResponse extends SendableData = SendableData, TErrorResponse extends SendableData = SendableData> {
74
+ export class Response<TResponse extends TSupportedResponseTypes> {
50
75
  private $app: Application;
51
76
  private $response: express.Response;
52
77
  private $created: Date;
@@ -59,7 +84,7 @@ export class Response<TResponse extends SendableData = SendableData, TErrorRespo
59
84
  this.$requestURL = requestURL;
60
85
  }
61
86
 
62
- public setStatus(status: StatusCode): Response<TResponse, TErrorResponse> {
87
+ public setStatus(status: StatusCode): Response<TResponse> {
63
88
  this.$response.status(status);
64
89
  return this;
65
90
  }
@@ -72,7 +97,7 @@ export class Response<TResponse extends SendableData = SendableData, TErrorRespo
72
97
  this.$response.redirect(url);
73
98
  }
74
99
 
75
- private $send(data?: SendableData, statusOverride?: StatusCode): void {
100
+ private $send(data?: TResponse | ResponseData<TResponse> | ResponseData<StormError> | StormError | IErrorResponse, statusOverride?: StatusCode): void {
76
101
  if (data === null || data === undefined) {
77
102
  this.setStatus(statusOverride || StatusCode.OK_NO_CONTENT);
78
103
  this.$response.send()
@@ -111,7 +136,7 @@ export class Response<TResponse extends SendableData = SendableData, TErrorRespo
111
136
  }
112
137
 
113
138
  // public send(data?: TResponse | TErrorResponse | StormError | IErrorResponse | Buffer): void {
114
- public send(data?: SendableData): void {
139
+ public send(data?: TResponse | ResponseData<TResponse> | ResponseData<StormError> | StormError | IErrorResponse): void {
115
140
  this.$send(data);
116
141
  this.$app.getLogger().info(TAG, `API ${this.$requestURL} (${this.getStatus()}) responded in ${new Date().getTime() - this.$created.getTime()}ms`);
117
142
  }
@@ -147,7 +172,7 @@ export class Response<TResponse extends SendableData = SendableData, TErrorRespo
147
172
  return this.$response.headersSent;
148
173
  }
149
174
 
150
- public error(error?: TErrorResponse | ResponseData<TErrorResponse>): void {
175
+ public error(error?: StormError | IErrorResponse | ResponseData<StormError> | unknown): void {
151
176
  if (error) {
152
177
  if (error instanceof StormError) {
153
178
  this.send(error);
@@ -157,9 +182,8 @@ export class Response<TResponse extends SendableData = SendableData, TErrorRespo
157
182
  for (let header of headers) {
158
183
  this.setHeader(header[0], header[1]);
159
184
  }
160
- // If it was not ResponseData<TResponse> then
161
- // the method signature should have caught it
162
- this.send((error as unknown as TErrorResponse));
185
+
186
+ this.send(error);
163
187
  }
164
188
  else {
165
189
  this.send(new InternalError(error));
package/src/api.ts CHANGED
@@ -73,7 +73,7 @@ export {LockWaitTimeoutError} from './LockWaitTimeoutError';
73
73
  export {StatusCode} from './StatusCode';
74
74
  export {Middleware} from './Middleware';
75
75
  export {Request, IParameterMap} from './Request';
76
- export {Response, IStormSendable, SendableData} from './Response';
76
+ export {Response, TSerializableResponse, TSupportedResponseTypes, TSupportedResponsePrimitives} from './Response';
77
77
  export {ResponseData} from './ResponseData';
78
78
  export {Handler} from './Handler';
79
79
  export {ServiceProvider} from './ServiceProvider';
@@ -1 +0,0 @@
1
- <!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>IStormSendable | @breautek/storm</title><meta name="description" content="Documentation for @breautek/storm"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">@breautek/storm</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">IStormSendable</a></li></ul><h1>Interface IStormSendable</h1></div><section class="tsd-panel"><h4 class="tsd-before-signature">Indexable</h4><ul class="tsd-signatures"><li class="tsd-index-signature"><div class="tsd-signature"><span class="tsd-signature-symbol">[</span><span class="tsd-kind-parameter">key</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">]:</span> <span class="tsd-signature-type">_SendableData</span></div></li></ul></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/breautek/storm/blob/116a19169c53804507f1c0478f8ff8c46abc7497/src/Response.ts#L39">src/Response.ts:39</a></li></ul></aside></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../index.html">@breautek/storm</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
@@ -1 +0,0 @@
1
- <!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>SendableData | @breautek/storm</title><meta name="description" content="Documentation for @breautek/storm"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">@breautek/storm</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">SendableData</a></li></ul><h1>Type Alias SendableData</h1></div><div class="tsd-signature"><span class="tsd-kind-type-alias">SendableData</span><span class="tsd-signature-symbol">:</span> <a href="../interfaces/IStormSendable.html" class="tsd-signature-type tsd-kind-interface">IStormSendable</a> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">_SendableData</span> <span class="tsd-signature-symbol">|</span> <a href="../classes/ResponseData.html" class="tsd-signature-type tsd-kind-class">ResponseData</a><span class="tsd-signature-symbol">&lt;</span><a href="" class="tsd-signature-type tsd-kind-type-alias">SendableData</a><span class="tsd-signature-symbol">&gt;</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">void</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/breautek/storm/blob/116a19169c53804507f1c0478f8ff8c46abc7497/src/Response.ts#L43">src/Response.ts:43</a></li></ul></aside></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../index.html">@breautek/storm</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>