@xylabs/express 4.3.14

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 (198) hide show
  1. package/LICENSE +165 -0
  2. package/README.md +62 -0
  3. package/dist/node/AWS/getEnvFromAws.d.ts +2 -0
  4. package/dist/node/AWS/getEnvFromAws.d.ts.map +1 -0
  5. package/dist/node/AWS/index.d.ts +2 -0
  6. package/dist/node/AWS/index.d.ts.map +1 -0
  7. package/dist/node/Handler/StatusCodeHandlers/index.d.ts +2 -0
  8. package/dist/node/Handler/StatusCodeHandlers/index.d.ts.map +1 -0
  9. package/dist/node/Handler/StatusCodeHandlers/notImplemented.d.ts +3 -0
  10. package/dist/node/Handler/StatusCodeHandlers/notImplemented.d.ts.map +1 -0
  11. package/dist/node/Handler/asyncHandler.d.ts +11 -0
  12. package/dist/node/Handler/asyncHandler.d.ts.map +1 -0
  13. package/dist/node/Handler/errorToJsonHandler.d.ts +4 -0
  14. package/dist/node/Handler/errorToJsonHandler.d.ts.map +1 -0
  15. package/dist/node/Handler/index.d.ts +4 -0
  16. package/dist/node/Handler/index.d.ts.map +1 -0
  17. package/dist/node/HttpUtil/getHttpHeader.d.ts +12 -0
  18. package/dist/node/HttpUtil/getHttpHeader.d.ts.map +1 -0
  19. package/dist/node/HttpUtil/index.d.ts +2 -0
  20. package/dist/node/HttpUtil/index.d.ts.map +1 -0
  21. package/dist/node/Logger/LogFormats/LocalDev/index.d.ts +2 -0
  22. package/dist/node/Logger/LogFormats/LocalDev/index.d.ts.map +1 -0
  23. package/dist/node/Logger/LogFormats/LocalDev/logFormatLocalDev.d.ts +2 -0
  24. package/dist/node/Logger/LogFormats/LocalDev/logFormatLocalDev.d.ts.map +1 -0
  25. package/dist/node/Logger/LogFormats/Rollbar/index.d.ts +2 -0
  26. package/dist/node/Logger/LogFormats/Rollbar/index.d.ts.map +1 -0
  27. package/dist/node/Logger/LogFormats/Rollbar/logFormatRollbar.d.ts +2 -0
  28. package/dist/node/Logger/LogFormats/Rollbar/logFormatRollbar.d.ts.map +1 -0
  29. package/dist/node/Logger/LogFormats/Structured/index.d.ts +2 -0
  30. package/dist/node/Logger/LogFormats/Structured/index.d.ts.map +1 -0
  31. package/dist/node/Logger/LogFormats/Structured/logFormatStructured.d.ts +2 -0
  32. package/dist/node/Logger/LogFormats/Structured/logFormatStructured.d.ts.map +1 -0
  33. package/dist/node/Logger/LogFormats/index.d.ts +4 -0
  34. package/dist/node/Logger/LogFormats/index.d.ts.map +1 -0
  35. package/dist/node/Logger/Logger.d.ts +13 -0
  36. package/dist/node/Logger/Logger.d.ts.map +1 -0
  37. package/dist/node/Logger/LoggerMeta.d.ts +2 -0
  38. package/dist/node/Logger/LoggerMeta.d.ts.map +1 -0
  39. package/dist/node/Logger/LoggerOptions.d.ts +7 -0
  40. package/dist/node/Logger/LoggerOptions.d.ts.map +1 -0
  41. package/dist/node/Logger/LoggerVerbosity.d.ts +2 -0
  42. package/dist/node/Logger/LoggerVerbosity.d.ts.map +1 -0
  43. package/dist/node/Logger/Transports/Rollbar/RollbarTransport.d.ts +11 -0
  44. package/dist/node/Logger/Transports/Rollbar/RollbarTransport.d.ts.map +1 -0
  45. package/dist/node/Logger/Transports/Rollbar/canGetDefaultRollbarTransport.d.ts +4 -0
  46. package/dist/node/Logger/Transports/Rollbar/canGetDefaultRollbarTransport.d.ts.map +1 -0
  47. package/dist/node/Logger/Transports/Rollbar/getDefaultRollbarTransport.d.ts +5 -0
  48. package/dist/node/Logger/Transports/Rollbar/getDefaultRollbarTransport.d.ts.map +1 -0
  49. package/dist/node/Logger/Transports/Rollbar/index.d.ts +4 -0
  50. package/dist/node/Logger/Transports/Rollbar/index.d.ts.map +1 -0
  51. package/dist/node/Logger/Transports/index.d.ts +2 -0
  52. package/dist/node/Logger/Transports/index.d.ts.map +1 -0
  53. package/dist/node/Logger/WinstonVerbosity.d.ts +6 -0
  54. package/dist/node/Logger/WinstonVerbosity.d.ts.map +1 -0
  55. package/dist/node/Logger/WrappedWinstonLogger.d.ts +16 -0
  56. package/dist/node/Logger/WrappedWinstonLogger.d.ts.map +1 -0
  57. package/dist/node/Logger/getDefaultLogger.d.ts +3 -0
  58. package/dist/node/Logger/getDefaultLogger.d.ts.map +1 -0
  59. package/dist/node/Logger/getLogger.d.ts +4 -0
  60. package/dist/node/Logger/getLogger.d.ts.map +1 -0
  61. package/dist/node/Logger/index.d.ts +7 -0
  62. package/dist/node/Logger/index.d.ts.map +1 -0
  63. package/dist/node/Logger/toWinstonVerbosity.d.ts +4 -0
  64. package/dist/node/Logger/toWinstonVerbosity.d.ts.map +1 -0
  65. package/dist/node/Model/ExpressError.d.ts +4 -0
  66. package/dist/node/Model/ExpressError.d.ts.map +1 -0
  67. package/dist/node/Model/index.d.ts +2 -0
  68. package/dist/node/Model/index.d.ts.map +1 -0
  69. package/dist/node/Performance/Counters.d.ts +8 -0
  70. package/dist/node/Performance/Counters.d.ts.map +1 -0
  71. package/dist/node/Performance/Profiler.d.ts +5 -0
  72. package/dist/node/Performance/Profiler.d.ts.map +1 -0
  73. package/dist/node/Performance/index.d.ts +3 -0
  74. package/dist/node/Performance/index.d.ts.map +1 -0
  75. package/dist/node/Util/compactObject.d.ts +2 -0
  76. package/dist/node/Util/compactObject.d.ts.map +1 -0
  77. package/dist/node/Util/index.d.ts +3 -0
  78. package/dist/node/Util/index.d.ts.map +1 -0
  79. package/dist/node/Util/tryParse.d.ts +5 -0
  80. package/dist/node/Util/tryParse.d.ts.map +1 -0
  81. package/dist/node/index.d.ts +9 -0
  82. package/dist/node/index.d.ts.map +1 -0
  83. package/dist/node/index.mjs +408 -0
  84. package/dist/node/index.mjs.map +1 -0
  85. package/dist/node/middleware/caseInsensitiveRouting/caseInsensitiveRouting.d.ts +14 -0
  86. package/dist/node/middleware/caseInsensitiveRouting/caseInsensitiveRouting.d.ts.map +1 -0
  87. package/dist/node/middleware/caseInsensitiveRouting/index.d.ts +2 -0
  88. package/dist/node/middleware/caseInsensitiveRouting/index.d.ts.map +1 -0
  89. package/dist/node/middleware/customPoweredByHeader/customPoweredByHeader.d.ts +15 -0
  90. package/dist/node/middleware/customPoweredByHeader/customPoweredByHeader.d.ts.map +1 -0
  91. package/dist/node/middleware/customPoweredByHeader/index.d.ts +2 -0
  92. package/dist/node/middleware/customPoweredByHeader/index.d.ts.map +1 -0
  93. package/dist/node/middleware/index.d.ts +6 -0
  94. package/dist/node/middleware/index.d.ts.map +1 -0
  95. package/dist/node/middleware/jsonBodyParser/index.d.ts +2 -0
  96. package/dist/node/middleware/jsonBodyParser/index.d.ts.map +1 -0
  97. package/dist/node/middleware/jsonBodyParser/jsonBodyParser.d.ts +33 -0
  98. package/dist/node/middleware/jsonBodyParser/jsonBodyParser.d.ts.map +1 -0
  99. package/dist/node/middleware/metrics/counters.d.ts +3 -0
  100. package/dist/node/middleware/metrics/counters.d.ts.map +1 -0
  101. package/dist/node/middleware/metrics/index.d.ts +3 -0
  102. package/dist/node/middleware/metrics/index.d.ts.map +1 -0
  103. package/dist/node/middleware/metrics/responseProfiler.d.ts +15 -0
  104. package/dist/node/middleware/metrics/responseProfiler.d.ts.map +1 -0
  105. package/dist/node/middleware/standardResponses/getResponseMetadata.d.ts +3 -0
  106. package/dist/node/middleware/standardResponses/getResponseMetadata.d.ts.map +1 -0
  107. package/dist/node/middleware/standardResponses/index.d.ts +5 -0
  108. package/dist/node/middleware/standardResponses/index.d.ts.map +1 -0
  109. package/dist/node/middleware/standardResponses/jsonApi/error.d.ts +51 -0
  110. package/dist/node/middleware/standardResponses/jsonApi/error.d.ts.map +1 -0
  111. package/dist/node/middleware/standardResponses/jsonApi/index.d.ts +6 -0
  112. package/dist/node/middleware/standardResponses/jsonApi/index.d.ts.map +1 -0
  113. package/dist/node/middleware/standardResponses/jsonApi/links.d.ts +7 -0
  114. package/dist/node/middleware/standardResponses/jsonApi/links.d.ts.map +1 -0
  115. package/dist/node/middleware/standardResponses/jsonApi/relationship.d.ts +38 -0
  116. package/dist/node/middleware/standardResponses/jsonApi/relationship.d.ts.map +1 -0
  117. package/dist/node/middleware/standardResponses/jsonApi/resourceIdentifier.d.ts +16 -0
  118. package/dist/node/middleware/standardResponses/jsonApi/resourceIdentifier.d.ts.map +1 -0
  119. package/dist/node/middleware/standardResponses/jsonApi/response.d.ts +44 -0
  120. package/dist/node/middleware/standardResponses/jsonApi/response.d.ts.map +1 -0
  121. package/dist/node/middleware/standardResponses/standardErrors.d.ts +4 -0
  122. package/dist/node/middleware/standardResponses/standardErrors.d.ts.map +1 -0
  123. package/dist/node/middleware/standardResponses/standardResponses.d.ts +18 -0
  124. package/dist/node/middleware/standardResponses/standardResponses.d.ts.map +1 -0
  125. package/package.json +101 -0
  126. package/src/AWS/getEnvFromAws.ts +24 -0
  127. package/src/AWS/index.ts +1 -0
  128. package/src/AWS/spec/getEnvFromAws.spec.ts +16 -0
  129. package/src/Handler/StatusCodeHandlers/index.ts +1 -0
  130. package/src/Handler/StatusCodeHandlers/notImplemented.ts +6 -0
  131. package/src/Handler/asyncHandler.ts +21 -0
  132. package/src/Handler/errorToJsonHandler.ts +14 -0
  133. package/src/Handler/index.ts +3 -0
  134. package/src/HttpUtil/getHttpHeader.ts +26 -0
  135. package/src/HttpUtil/index.ts +1 -0
  136. package/src/Logger/LogFormats/LocalDev/index.ts +1 -0
  137. package/src/Logger/LogFormats/LocalDev/logFormatLocalDev.ts +11 -0
  138. package/src/Logger/LogFormats/LocalDev/spec/logFormatLocalDev.spec.ts +13 -0
  139. package/src/Logger/LogFormats/Rollbar/index.ts +1 -0
  140. package/src/Logger/LogFormats/Rollbar/logFormatRollbar.ts +5 -0
  141. package/src/Logger/LogFormats/Rollbar/spec/logFormatRollbar.spec.ts +13 -0
  142. package/src/Logger/LogFormats/Structured/index.ts +1 -0
  143. package/src/Logger/LogFormats/Structured/logFormatStructured.ts +7 -0
  144. package/src/Logger/LogFormats/Structured/spec/logFormatStructured.spec.ts +13 -0
  145. package/src/Logger/LogFormats/index.ts +3 -0
  146. package/src/Logger/Logger.ts +15 -0
  147. package/src/Logger/LoggerMeta.ts +1 -0
  148. package/src/Logger/LoggerOptions.ts +7 -0
  149. package/src/Logger/LoggerVerbosity.ts +1 -0
  150. package/src/Logger/Transports/Rollbar/RollbarTransport.ts +22 -0
  151. package/src/Logger/Transports/Rollbar/canGetDefaultRollbarTransport.ts +3 -0
  152. package/src/Logger/Transports/Rollbar/getDefaultRollbarTransport.ts +10 -0
  153. package/src/Logger/Transports/Rollbar/index.ts +3 -0
  154. package/src/Logger/Transports/Rollbar/spec/RollbarTransport.spec.ts +30 -0
  155. package/src/Logger/Transports/Rollbar/spec/canGetDefaultRollbarTransport.spec.ts +18 -0
  156. package/src/Logger/Transports/Rollbar/spec/getDefaultRollbarTransport.spec.ts +16 -0
  157. package/src/Logger/Transports/index.ts +1 -0
  158. package/src/Logger/WinstonVerbosity.ts +5 -0
  159. package/src/Logger/WrappedWinstonLogger.ts +16 -0
  160. package/src/Logger/getDefaultLogger.ts +13 -0
  161. package/src/Logger/getLogger.ts +55 -0
  162. package/src/Logger/index.ts +6 -0
  163. package/src/Logger/spec/getDefaultLogger.spec.ts +14 -0
  164. package/src/Logger/spec/getLogger.spec.ts +25 -0
  165. package/src/Logger/spec/toWinstonVerbosity.spec.ts +17 -0
  166. package/src/Logger/toWinstonVerbosity.ts +6 -0
  167. package/src/Model/ExpressError.ts +3 -0
  168. package/src/Model/index.ts +1 -0
  169. package/src/Performance/Counters.ts +36 -0
  170. package/src/Performance/Profiler.ts +10 -0
  171. package/src/Performance/index.ts +2 -0
  172. package/src/Util/compactObject.ts +9 -0
  173. package/src/Util/index.ts +2 -0
  174. package/src/Util/tryParse.ts +21 -0
  175. package/src/index.ts +8 -0
  176. package/src/middleware/caseInsensitiveRouting/caseInsensitiveRouting.ts +21 -0
  177. package/src/middleware/caseInsensitiveRouting/index.ts +1 -0
  178. package/src/middleware/customPoweredByHeader/customPoweredByHeader.ts +29 -0
  179. package/src/middleware/customPoweredByHeader/index.ts +1 -0
  180. package/src/middleware/index.ts +5 -0
  181. package/src/middleware/jsonBodyParser/index.ts +1 -0
  182. package/src/middleware/jsonBodyParser/jsonBodyParser.ts +57 -0
  183. package/src/middleware/jsonBodyParser/spec/jsonBodyParser.spec.ts +26 -0
  184. package/src/middleware/metrics/counters.ts +25 -0
  185. package/src/middleware/metrics/index.ts +2 -0
  186. package/src/middleware/metrics/responseProfiler.ts +23 -0
  187. package/src/middleware/standardResponses/getResponseMetadata.ts +18 -0
  188. package/src/middleware/standardResponses/index.ts +4 -0
  189. package/src/middleware/standardResponses/jsonApi/README.md +4 -0
  190. package/src/middleware/standardResponses/jsonApi/error.ts +52 -0
  191. package/src/middleware/standardResponses/jsonApi/index.ts +5 -0
  192. package/src/middleware/standardResponses/jsonApi/links.ts +6 -0
  193. package/src/middleware/standardResponses/jsonApi/relationship.ts +43 -0
  194. package/src/middleware/standardResponses/jsonApi/resourceIdentifier.ts +15 -0
  195. package/src/middleware/standardResponses/jsonApi/response.ts +49 -0
  196. package/src/middleware/standardResponses/standardErrors.ts +25 -0
  197. package/src/middleware/standardResponses/standardResponses.ts +23 -0
  198. package/xy.config.ts +10 -0
@@ -0,0 +1,5 @@
1
+ export * from './error.ts'
2
+ export * from './links.ts'
3
+ export * from './relationship.ts'
4
+ export * from './resourceIdentifier.ts'
5
+ export * from './response.ts'
@@ -0,0 +1,6 @@
1
+ export interface HrefWithMeta {
2
+ href: string
3
+ meta: Record<string, unknown>
4
+ }
5
+ export type ApiLink = string | HrefWithMeta
6
+ export type ApiLinks = Record<string, ApiLink>
@@ -0,0 +1,43 @@
1
+ import type { ApiResourceIdentifierObject } from './resourceIdentifier.ts'
2
+
3
+ export interface IRelationshipSelfLink {
4
+ /**
5
+ * A link for the relationship itself (a "relationship link"). This link allows the client to directly manipulate the relationship.
6
+ * For example, removing an author through an article’s relationship URL would disconnect the person from the article without
7
+ * deleting the people resource itself. When fetched successfully, this link returns the linkage for the related resources as its primary data.
8
+ */
9
+ self: string
10
+ }
11
+
12
+ export interface IRelationshipRelatedLink {
13
+ /**
14
+ * A related resource link
15
+ */
16
+ related: string
17
+ }
18
+
19
+ export interface IRelationshipLinks {
20
+ links: IRelationshipRelatedLink | IRelationshipSelfLink
21
+ }
22
+
23
+ /**
24
+ * Resource linkage in a compound document allows a client to link together all of the included resource objects without having to GET any URLs via links.
25
+ * Resource linkage MUST be represented as one of the following:
26
+ * • null for empty to-one relationships.
27
+ * • an empty array ([]) for empty to-many relationships.
28
+ * • a single resource identifier object for non-empty to-one relationships.
29
+ * • an array of resource identifier objects for non-empty to-many relationships.
30
+ */
31
+ export type ResourceLinkage = null | [] | ApiResourceIdentifierObject | ApiResourceIdentifierObject[]
32
+ export interface IRelationshipData {
33
+ data: ResourceLinkage
34
+ }
35
+
36
+ export type RelationshipMeta = Record<string, unknown>
37
+
38
+ /**
39
+ * The value of the relationships key MUST be an object (a "relationships object"). Members of the relationships object ("relationships")
40
+ * represent references from the resource object in which it’s defined to other resource objects.
41
+ * Relationships may be to-one or to-many.
42
+ */
43
+ export type Relationship = IRelationshipLinks | IRelationshipData | RelationshipMeta
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Within a given API, each resource object's type and id pair MUST identify a single, unique resource.
3
+ * (The set of URIs controlled by a server, or multiple servers acting as one, constitute an API.)
4
+ */
5
+ export interface ApiResourceIdentifierObject {
6
+ /**
7
+ * The id member is not required when the resource object originates at the client and represents a new resource to be created on the server.
8
+ */
9
+ id: string
10
+ /**
11
+ * The type member is used to describe resource objects that share common attributes and relationships.
12
+ * The values of type members MUST adhere to the same constraints as member names.
13
+ */
14
+ type: string
15
+ }
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Loosely following the JSON API 1.0 formats and conventions
3
+ * https://jsonapi.org/format/
4
+ */
5
+
6
+ import type { ApiError } from './error.ts'
7
+ import type { ApiLinks } from './links.ts'
8
+ import type { Relationship } from './relationship.ts'
9
+ import type { ApiResourceIdentifierObject } from './resourceIdentifier.ts'
10
+
11
+ export interface ApiResourceObject extends ApiResourceIdentifierObject {
12
+ /**
13
+ * An attributes object representing some of the resource's data.
14
+ */
15
+ attributes?: Record<string, unknown>
16
+ /**
17
+ * A links object containing links related to the resource.
18
+ */
19
+ links?: ApiLinks
20
+ /**
21
+ * A meta object containing non-standard meta-information about a resource that can not be represented as an attribute or relationship.
22
+ */
23
+ meta?: Record<string, unknown>
24
+ /**
25
+ * A relationships object describing relationships between the resource and other JSON:API resources.
26
+ */
27
+ relationships?: Record<string, Relationship>
28
+ }
29
+
30
+ export interface JsonApi {
31
+ meta?: Record<string, unknown>
32
+ version?: '1.0' | '1.1'
33
+ }
34
+
35
+ export interface ApiResponseBase {
36
+ jsonapi?: JsonApi
37
+ links?: ApiLinks
38
+ meta?: Record<string, unknown>
39
+ }
40
+
41
+ export interface ApiDataResponse<T extends ApiResourceIdentifierObject> extends ApiResponseBase {
42
+ data: T
43
+ included?: ApiResourceObject[]
44
+ }
45
+ export interface ApiErrorResponse extends ApiResponseBase {
46
+ errors: ApiError[]
47
+ }
48
+
49
+ export type ApiResponse<T extends ApiResourceIdentifierObject> = ApiDataResponse<T> | ApiErrorResponse
@@ -0,0 +1,25 @@
1
+ import type {
2
+ NextFunction, Request, Response,
3
+ } from 'express'
4
+
5
+ import type { ExpressError } from '../../Model/index.ts'
6
+ import type { ApiError } from './jsonApi/index.ts'
7
+
8
+ export const standardErrors = (err: ExpressError, req: Request, res: Response, next: NextFunction) => {
9
+ if (!err) {
10
+ next(err)
11
+ return
12
+ }
13
+ console.error(err.message)
14
+ if (!err.statusCode) err.statusCode = 500
15
+
16
+ const error: ApiError = {
17
+ detail: err.message,
18
+ status: `${err.statusCode}`,
19
+ title: err.name,
20
+ }
21
+
22
+ res.status(err.statusCode).json(error)
23
+
24
+ next(err)
25
+ }
@@ -0,0 +1,23 @@
1
+ import type { Request, Response } from 'express'
2
+ import mung from 'express-mung'
3
+
4
+ import { getResponseMetadata } from './getResponseMetadata.ts'
5
+
6
+ /**
7
+ * Transforms each response to conform to the standard response format (compatible with JSON API)
8
+ * @param body The original request body
9
+ * @param _req The request
10
+ * @param res The response
11
+ * @returns The transformed response body
12
+ */
13
+ export const transformResponse = (body: unknown, _req: Request, res: Response) => {
14
+ const meta = getResponseMetadata(res)
15
+ return { data: body, meta }
16
+ }
17
+
18
+ /**
19
+ * Connect middleware to enable the transform of all responses to match
20
+ * the standard response format (compatible with JSON API)
21
+ */
22
+
23
+ export const standardResponses = mung.json(transformResponse, { mungError: false })
package/xy.config.ts ADDED
@@ -0,0 +1,10 @@
1
+ import type { XyTsupConfig } from '@xylabs/ts-scripts-yarn3'
2
+ const config: XyTsupConfig = {
3
+ compile: {
4
+ browser: {},
5
+ neutral: {},
6
+ node: { src: true },
7
+ },
8
+ }
9
+
10
+ export default config