@effect-app/infra 0.133.0-next.9 → 0.133.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.
Files changed (132) hide show
  1. package/CHANGELOG.md +494 -0
  2. package/_cjs/RequestContext.cjs +8 -9
  3. package/_cjs/RequestContext.cjs.map +1 -1
  4. package/_cjs/_ext/Array.cjs +4 -3
  5. package/_cjs/_ext/Array.cjs.map +1 -1
  6. package/_cjs/_global.ext.cjs +0 -25
  7. package/_cjs/_global.ext.cjs.map +1 -1
  8. package/_cjs/api/codec.cjs +1 -1
  9. package/_cjs/api/codec.cjs.map +1 -1
  10. package/_cjs/api/http.cjs +42 -0
  11. package/_cjs/api/http.cjs.map +1 -0
  12. package/_cjs/api/routing/base.cjs +169 -0
  13. package/_cjs/api/routing/base.cjs.map +1 -0
  14. package/_cjs/api/routing/defaultErrorHandler.cjs +50 -0
  15. package/_cjs/api/routing/defaultErrorHandler.cjs.map +1 -0
  16. package/_cjs/api/routing/makeRequestHandler.cjs +134 -0
  17. package/_cjs/api/routing/makeRequestHandler.cjs.map +1 -0
  18. package/_cjs/api/routing/match.cjs +45 -0
  19. package/_cjs/api/routing/match.cjs.map +1 -0
  20. package/_cjs/api/routing.cjs +50 -0
  21. package/_cjs/api/routing.cjs.map +1 -0
  22. package/_cjs/api/setupRequest.cjs +31 -30
  23. package/_cjs/api/setupRequest.cjs.map +1 -1
  24. package/_cjs/errorReporter.cjs +4 -2
  25. package/_cjs/errorReporter.cjs.map +1 -1
  26. package/_cjs/errors.cjs +18 -66
  27. package/_cjs/errors.cjs.map +1 -1
  28. package/_cjs/services/Operations/live.cjs +11 -12
  29. package/_cjs/services/Operations/live.cjs.map +1 -1
  30. package/_cjs/services/QueueMaker/memQueue.cjs +9 -10
  31. package/_cjs/services/QueueMaker/memQueue.cjs.map +1 -1
  32. package/_cjs/services/QueueMaker/sbqueue.cjs +4 -4
  33. package/_cjs/services/QueueMaker/sbqueue.cjs.map +1 -1
  34. package/_cjs/services/Repository.cjs +3 -3
  35. package/_cjs/services/Repository.cjs.map +1 -1
  36. package/_cjs/services/RepositoryBase.cjs +14 -6
  37. package/_cjs/services/RepositoryBase.cjs.map +1 -1
  38. package/_cjs/services/RequestContextContainer.cjs +3 -3
  39. package/_cjs/services/RequestContextContainer.cjs.map +1 -1
  40. package/_cjs/services/Store/Redis.cjs.map +1 -1
  41. package/_cjs/test.arbs.cjs +24 -1
  42. package/_cjs/test.arbs.cjs.map +1 -1
  43. package/_src/RequestContext.ts +9 -12
  44. package/_src/_ext/Array.ts +4 -4
  45. package/_src/_global.ext.ts +0 -23
  46. package/_src/api/codec.ts +1 -1
  47. package/_src/api/http.ts +26 -0
  48. package/_src/api/routing/base.ts +476 -0
  49. package/_src/api/routing/defaultErrorHandler.ts +83 -0
  50. package/_src/api/routing/makeRequestHandler.ts +278 -0
  51. package/_src/api/routing/match.ts +119 -0
  52. package/_src/api/routing.ts +11 -0
  53. package/_src/api/setupRequest.ts +39 -34
  54. package/_src/errorReporter.ts +4 -2
  55. package/_src/errors.ts +1 -58
  56. package/_src/services/QueueMaker/memQueue.ts +3 -3
  57. package/_src/services/QueueMaker/sbqueue.ts +3 -3
  58. package/_src/services/Repository.ts +40 -43
  59. package/_src/services/RepositoryBase.ts +26 -20
  60. package/_src/services/Store/Redis.ts +1 -1
  61. package/_src/services/Store/service.ts +4 -4
  62. package/_src/test.arbs.ts +17 -14
  63. package/dist/RequestContext.d.ts +72 -24
  64. package/dist/RequestContext.d.ts.map +1 -1
  65. package/dist/RequestContext.js +10 -11
  66. package/dist/_ext/Array.d.ts +2 -2
  67. package/dist/_ext/Array.d.ts.map +1 -1
  68. package/dist/_ext/Array.js +5 -4
  69. package/dist/_global.ext.d.ts +0 -22
  70. package/dist/_global.ext.d.ts.map +1 -1
  71. package/dist/_global.ext.js +1 -18
  72. package/dist/api/codec.d.ts +1 -1
  73. package/dist/api/codec.d.ts.map +1 -1
  74. package/dist/api/codec.js +2 -2
  75. package/dist/api/http.d.ts +16 -0
  76. package/dist/api/http.d.ts.map +1 -0
  77. package/dist/api/http.js +12 -0
  78. package/dist/api/routing/base.d.ts +117 -0
  79. package/dist/api/routing/base.d.ts.map +1 -0
  80. package/dist/api/routing/base.js +137 -0
  81. package/dist/api/routing/defaultErrorHandler.d.ts +16 -0
  82. package/dist/api/routing/defaultErrorHandler.d.ts.map +1 -0
  83. package/dist/api/routing/defaultErrorHandler.js +42 -0
  84. package/dist/api/routing/makeRequestHandler.d.ts +20 -0
  85. package/dist/api/routing/makeRequestHandler.d.ts.map +1 -0
  86. package/dist/api/routing/makeRequestHandler.js +121 -0
  87. package/dist/api/routing/match.d.ts +12 -0
  88. package/dist/api/routing/match.d.ts.map +1 -0
  89. package/dist/api/routing/match.js +31 -0
  90. package/dist/api/routing.d.ts +5 -0
  91. package/dist/api/routing.d.ts.map +1 -0
  92. package/dist/api/routing.js +8 -0
  93. package/dist/api/setupRequest.d.ts +4 -4
  94. package/dist/api/setupRequest.d.ts.map +1 -1
  95. package/dist/api/setupRequest.js +31 -37
  96. package/dist/errorReporter.d.ts.map +1 -1
  97. package/dist/errorReporter.js +5 -3
  98. package/dist/errors.d.ts +1 -81
  99. package/dist/errors.d.ts.map +1 -1
  100. package/dist/errors.js +4 -46
  101. package/dist/services/Operations/live.js +16 -17
  102. package/dist/services/QueueMaker/memQueue.d.ts +3 -3
  103. package/dist/services/QueueMaker/memQueue.d.ts.map +1 -1
  104. package/dist/services/QueueMaker/memQueue.js +9 -10
  105. package/dist/services/QueueMaker/sbqueue.d.ts +3 -3
  106. package/dist/services/QueueMaker/sbqueue.d.ts.map +1 -1
  107. package/dist/services/QueueMaker/sbqueue.js +4 -4
  108. package/dist/services/QueueMaker/service.d.ts +1 -1
  109. package/dist/services/Repository.d.ts +37 -38
  110. package/dist/services/Repository.d.ts.map +1 -1
  111. package/dist/services/Repository.js +4 -4
  112. package/dist/services/RepositoryBase.d.ts +16 -16
  113. package/dist/services/RepositoryBase.d.ts.map +1 -1
  114. package/dist/services/RepositoryBase.js +12 -7
  115. package/dist/services/RequestContextContainer.d.ts +1 -1
  116. package/dist/services/RequestContextContainer.js +3 -3
  117. package/dist/services/Store/Redis.js +1 -1
  118. package/dist/services/Store/service.d.ts +4 -4
  119. package/dist/services/Store/service.d.ts.map +1 -1
  120. package/dist/services/simpledb/cosmosdb.d.ts +2 -2
  121. package/dist/services/simpledb/diskdb.d.ts +2 -2
  122. package/dist/services/simpledb/memdb.d.ts +2 -2
  123. package/dist/services/simpledb/mongodb.d.ts +2 -2
  124. package/dist/services/simpledb/redisdb.d.ts +10 -6
  125. package/dist/services/simpledb/redisdb.d.ts.map +1 -1
  126. package/dist/services/simpledb/shared.d.ts +10 -6
  127. package/dist/services/simpledb/shared.d.ts.map +1 -1
  128. package/dist/services/simpledb/simpledb.d.ts +3 -3
  129. package/dist/test.arbs.d.ts +12 -1
  130. package/dist/test.arbs.d.ts.map +1 -1
  131. package/dist/test.arbs.js +18 -2
  132. package/package.json +73 -11
@@ -0,0 +1,137 @@
1
+ import * as tsplus_module_1 from "effect/Effect";
2
+ import * as tsplus_module_2 from "effect/Exit";
3
+ import * as tsplus_module_3 from "effect/Cause";
4
+ import * as tsplus_module_4 from "@effect-app/core/Function";
5
+ import * as tsplus_module_5 from "effect/Option";
6
+ import * as tsplus_module_6 from "@effect-app/core/Effect";
7
+ /* eslint-disable @typescript-eslint/no-explicit-any */
8
+ /* eslint-disable @typescript-eslint/ban-types */
9
+ import * as S from "@effect-app/schema";
10
+ import { ValidationError } from "@effect-app/infra/errors";
11
+ // function getErrorMessage(current: ContextEntry) {
12
+ // switch (current.type.name) {
13
+ // case "NonEmptyString":
14
+ // return "Must not be empty"
15
+ // }
16
+ // if (current.type.name?.startsWith("NonEmptyReadonlyArray<")) {
17
+ // return "Must not be empty"
18
+ // }
19
+ // return `Invalid value specified`
20
+ // }
21
+ export function decodeErrors(x) {
22
+ return [x];
23
+ }
24
+ // const ValidationApplicative = Effect.getValidationApplicative(
25
+ // makeAssociative<ReadonlyArray<{ type: string; errors: ReturnType<typeof decodeErrors> }>>(
26
+ // (l, r) => l.concat(r)
27
+ // )
28
+ // )
29
+ // const structValidation = DSL.structF(ValidationApplicative)
30
+ export function parseRequestParams(parsers) {
31
+ return ({ body, cookies, headers, params, query }) => tsplus_module_1.flatMap(tsplus_module_1.all({
32
+ body: tsplus_module_1.flatMap(tsplus_module_1.exit(parsers
33
+ .parseBody(body)), (_) => tsplus_module_2.isFailure(_) && !tsplus_module_3.isFailure(_.cause)
34
+ ? tsplus_module_1.failCauseSync(() => _.cause)
35
+ : tsplus_module_1.sync(() => tsplus_module_2.isSuccess(_)
36
+ ? { _tag: "Success", value: _.value }
37
+ : { _tag: "Failure", errors: tsplus_module_3.failures(_.cause) })),
38
+ cookie: tsplus_module_1.flatMap(tsplus_module_1.exit(parsers
39
+ .parseCookie(cookies)), (_) => tsplus_module_2.isFailure(_) && !tsplus_module_3.isFailure(_.cause)
40
+ ? tsplus_module_1.failCauseSync(() => _.cause)
41
+ : tsplus_module_1.sync(() => tsplus_module_2.isSuccess(_)
42
+ ? { _tag: "Success", value: _.value }
43
+ : { _tag: "Failure", errors: tsplus_module_3.failures(_.cause) })),
44
+ headers: tsplus_module_1.flatMap(tsplus_module_1.exit(parsers
45
+ .parseHeaders(headers)), (_) => tsplus_module_2.isFailure(_) && !tsplus_module_3.isFailure(_.cause)
46
+ ? tsplus_module_1.failCauseSync(() => _.cause)
47
+ : tsplus_module_1.sync(() => tsplus_module_2.isSuccess(_)
48
+ ? { _tag: "Success", value: _.value }
49
+ : { _tag: "Failure", errors: tsplus_module_3.failures(_.cause) })),
50
+ query: tsplus_module_1.flatMap(tsplus_module_1.exit(parsers
51
+ .parseQuery(query)), (_) => tsplus_module_2.isFailure(_) && !tsplus_module_3.isFailure(_.cause)
52
+ ? tsplus_module_1.failCauseSync(() => _.cause)
53
+ : tsplus_module_1.sync(() => tsplus_module_2.isSuccess(_)
54
+ ? { _tag: "Success", value: _.value }
55
+ : { _tag: "Failure", errors: tsplus_module_3.failures(_.cause) })),
56
+ path: tsplus_module_1.flatMap(tsplus_module_1.exit(parsers
57
+ .parsePath(params)), (_) => tsplus_module_2.isFailure(_) && !tsplus_module_3.isFailure(_.cause)
58
+ ? tsplus_module_1.failCauseSync(() => _.cause)
59
+ : tsplus_module_1.sync(() => tsplus_module_2.isSuccess(_)
60
+ ? { _tag: "Success", value: _.value }
61
+ : { _tag: "Failure", errors: tsplus_module_3.failures(_.cause) }))
62
+ }), ({ body, cookie, headers, path, query }) => {
63
+ const errors = [];
64
+ if (body._tag === "Failure") {
65
+ errors.push(makeError("body")(body.errors));
66
+ }
67
+ if (cookie._tag === "Failure") {
68
+ errors.push(makeError("cookie")(cookie.errors));
69
+ }
70
+ if (headers._tag === "Failure") {
71
+ errors.push(makeError("headers")(headers.errors));
72
+ }
73
+ if (path._tag === "Failure") {
74
+ errors.push(makeError("path")(path.errors));
75
+ }
76
+ if (query._tag === "Failure") {
77
+ errors.push(makeError("query")(query.errors));
78
+ }
79
+ if (errors.length) {
80
+ return new ValidationError({ errors });
81
+ }
82
+ return tsplus_module_1.sync(() => ({
83
+ body: body.value,
84
+ cookie: cookie.value,
85
+ headers: headers.value,
86
+ path: path.value,
87
+ query: query.value
88
+ }));
89
+ });
90
+ }
91
+ // // eslint-disable-next-line @typescript-eslint/no-explicit-any
92
+ // function mapErrors_<E, NE, NER extends Record<string, Effect<any, E, any>>>(
93
+ // t: NER, // TODO: enforce non empty
94
+ // mapErrors: (k: keyof NER) => (err: E) => NE
95
+ // ): {
96
+ // [K in keyof NER]: Effect<_R<NER[K]>, NE, Effect.Success<NER[K]>>
97
+ // } {
98
+ // return typedKeysOf(t).reduce(
99
+ // (prev, cur) => {
100
+ // prev[cur] = t[cur].mapError(mapErrors(cur))
101
+ // return prev
102
+ // },
103
+ // {} as {
104
+ // [K in keyof NER]: Effect<_R<NER[K]>, NE, Effect.Success<NER[K]>>
105
+ // }
106
+ // )
107
+ // }
108
+ function makeError(type) {
109
+ return (e) => [{ type, errors: decodeErrors(e) }];
110
+ }
111
+ export function respondSuccess(encodeResponse) {
112
+ return (req, res) => tsplus_module_4.flow(encodeResponse(req), tsplus_module_1.succeed, (_) => tsplus_module_1.flatMap(_, (r) => tsplus_module_1.sync(() => {
113
+ r === undefined
114
+ ? res.status(204).send()
115
+ : res.status(200).send(JSON.stringify(r));
116
+ })));
117
+ }
118
+ export function makeRequestParsers(Request) {
119
+ const ph = tsplus_module_1.sync(() => tsplus_module_5.map(tsplus_module_5.map(tsplus_module_5.fromNullable(Request.Headers), (s) => s), S.parse));
120
+ const parseHeaders = (u) => tsplus_module_6.flatMapOption(ph, (d) => d(u));
121
+ const pq = tsplus_module_1.sync(() => tsplus_module_5.map(tsplus_module_5.map(tsplus_module_5.fromNullable(Request.Query), (s) => s), S.parse));
122
+ const parseQuery = (u) => tsplus_module_6.flatMapOption(pq, (d) => d(u));
123
+ const pb = tsplus_module_1.sync(() => tsplus_module_5.map(tsplus_module_5.map(tsplus_module_5.fromNullable(Request.Body), (s) => s), S.parse));
124
+ const parseBody = (u) => tsplus_module_6.flatMapOption(pb, (d) => d(u));
125
+ const pp = tsplus_module_1.sync(() => tsplus_module_5.map(tsplus_module_5.map(tsplus_module_5.fromNullable(Request.Path), (s) => s), S.parse));
126
+ const parsePath = (u) => tsplus_module_6.flatMapOption(pp, (d) => d(u));
127
+ const pc = tsplus_module_1.sync(() => tsplus_module_5.map(tsplus_module_5.map(tsplus_module_5.fromNullable(Request.Cookie), (s) => s), S.parse));
128
+ const parseCookie = (u) => tsplus_module_6.flatMapOption(pc, (d) => d(u));
129
+ return {
130
+ parseBody,
131
+ parseCookie,
132
+ parseHeaders,
133
+ parsePath,
134
+ parseQuery
135
+ };
136
+ }
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL19zcmMvYXBpL3JvdXRpbmcvYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSx1REFBdUQ7QUFFdkQsaURBQWlEO0FBQ2pELE9BQU8sS0FBSyxDQUFDLE1BQU0sb0JBQW9CLENBQUE7QUFHdkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBb0cxRCxvREFBb0Q7QUFDcEQsaUNBQWlDO0FBQ2pDLDZCQUE2QjtBQUM3QixtQ0FBbUM7QUFDbkMsTUFBTTtBQUNOLG1FQUFtRTtBQUNuRSxpQ0FBaUM7QUFDakMsTUFBTTtBQUNOLHFDQUFxQztBQUNyQyxJQUFJO0FBQ0osTUFBTSxVQUFVLFlBQVksQ0FBQyxDQUFVO0lBQ3JDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNaLENBQUM7QUFFRCxpRUFBaUU7QUFDakUsK0ZBQStGO0FBQy9GLDRCQUE0QjtBQUM1QixNQUFNO0FBQ04sSUFBSTtBQUVKLDhEQUE4RDtBQUM5RCxNQUFNLFVBQVUsa0JBQWtCLENBT2hDLE9BQStEO0lBRS9ELE9BQU8sQ0FDTCxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBTXRDLEVBQ0QsRUFBRSxDQUNGLHdCQUFBLG9CQUNPO1FBQ0gsSUFBSSxFQUFFLDZDQUFBLE9BQU87YUFDVixTQUFTLENBQUMsSUFBSSxDQUFDLEdBRVAsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNiLDBCQUFBLENBQUMsQ0FBWSxJQUFJLENBQUMsMEJBQUEsQ0FBQyxDQUFDLEtBQUssQ0FBWTtZQUNuQyxDQUFDLENBQUUsOEJBQXFCLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQTJDO1lBQ2hGLENBQUMsQ0FBQywyQkFDQSwwQkFBQSxDQUFDLENBQVk7Z0JBQ1gsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQWtCLEVBQUUs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QyxPQWVZO0lBRVosTUFBTSxFQUFFLEdBQUcsMkJBQ1Qsb0JBQUEsb0JBQUEsNkJBQ2dCLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFDekIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQWdDLENBQUMsRUFDeEMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUNoQixDQUFBO0lBQ0QsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFVLEVBQUUsRUFBRSxDQUFDLDhCQUFBLEVBQUUsRUFBWSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFL0QsTUFBTSxFQUFFLEdBQUcsMkJBQ1Qsb0JBQUEsb0JBQUEsNkJBQ2dCLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFDdkIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQWdDLENBQUMsRUFDeEMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUNoQixDQUFBO0lBQ0QsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFVLEVBQUUsRUFBRSxDQUFDLDhCQUFBLEVBQUUsRUFBWSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFN0QsTUFBTSxFQUFFLEdBQUcsMkJBQ1Qsb0JBQUEsb0JBQUEsNkJBQ2dCLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFDdEIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQWdDLENBQUMsRUFDeEMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUNoQixDQUFBO0lBQ0QsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFVLEVBQUUsRUFBRSxDQUFDLDhCQUFBLEVBQUUsRUFBWSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFNUQsTUFBTSxFQUFFLEdBQUcsMkJBQ1Qsb0JBQUEsb0JBQUEsNkJBQ2dCLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFDdEIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQWdDLENBQUMsRUFDeEMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUNoQixDQUFBO0lBQ0QsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFVLEVBQUUsRUFBRSxDQUFDLDhCQUFBLEVBQUUsRUFBWSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFNUQsTUFBTSxFQUFFLEdBQUcsMkJBQ1Qsb0JBQUEsb0JBQUEsNkJBQ2dCLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFDeEIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQWdDLENBQUMsRUFDeEMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUNoQixDQUFBO0lBQ0QsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFVLEVBQUUsRUFBRSxDQUFDLDhCQUFBLEVBQUUsRUFBWSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFOUQsT0FBTztRQUNMLFNBQVM7UUFDVCxXQUFXO1FBQ1gsWUFBWTtRQUNaLFNBQVM7UUFDVCxVQUFVO0tBQ1gsQ0FBQTtBQUNILENBQUMifQ==
@@ -0,0 +1,16 @@
1
+ import { Data } from "effect/Data";
2
+ import { Effect } from "effect/Effect";
3
+ import type { SupportedErrors, ValidationError } from "@effect-app/prelude/client/errors";
4
+ import { type HttpServerRequest, type HttpServerResponse } from "../http.js";
5
+ import type { InsufficientScopeError, InvalidRequestError, InvalidTokenError, UnauthorizedError as JWTUnauthorizedError } from "express-oauth2-jwt-bearer";
6
+ declare const JWTError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<Omit<A, keyof import("effect/Equal").Equal>, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" | keyof import("effect/Equal").Equal ? never : P]: A[P]; }) => import("effect/Data").Data<Readonly<A> & {
7
+ readonly _tag: "JWTError";
8
+ }>;
9
+ export declare class JWTError extends JWTError_base<{
10
+ error: InsufficientScopeError | InvalidRequestError | InvalidTokenError | JWTUnauthorizedError;
11
+ }> {
12
+ }
13
+ export declare function defaultBasicErrorHandler<R>(_req: HttpServerRequest, res: HttpServerResponse, r2: Effect<R, ValidationError, HttpServerResponse>): import("effect/Effect").Effect<R, never, HttpServerResponse>;
14
+ export declare function defaultErrorHandler<R>(req: HttpServerRequest, res: HttpServerResponse, r2: Effect<R, SupportedErrors | JWTError, HttpServerResponse>): import("effect/Effect").Effect<R, never, HttpServerResponse>;
15
+ export {};
16
+ //# sourceMappingURL=defaultErrorHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultErrorHandler.d.ts","sourceRoot":"","sources":["../../../_src/api/routing/defaultErrorHandler.ts"],"names":[],"mappings":";;AACA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AACzF,OAAO,EAAyB,KAAK,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAEnG,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,IAAI,oBAAoB,EAC1C,MAAM,2BAA2B,CAAA;;;;AAElC,qBAAa,QAAS,SAAQ,cAA6B;IACzD,KAAK,EACD,sBAAsB,GACtB,mBAAmB,GACnB,iBAAiB,GACjB,oBAAoB,CAAA;CACzB,CAAC;CAAG;AAIL,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,IAAI,EAAE,iBAAiB,EACvB,GAAG,EAAE,kBAAkB,EACvB,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,eAAe,EAAE,kBAAkB,CAAC,gEAenD;AAKD,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,GAAG,EAAE,iBAAiB,EACtB,GAAG,EAAE,kBAAkB,EACvB,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,eAAe,GAAG,QAAQ,EAAE,kBAAkB,CAAC,gEAmC9D"}
@@ -0,0 +1,42 @@
1
+ import * as tsplus_module_1 from "effect/Data";
2
+ import * as tsplus_module_2 from "@effect/platform/Http/Body";
3
+ import * as tsplus_module_3 from "@effect/platform/Http/ServerResponse";
4
+ import * as tsplus_module_4 from "effect/Effect";
5
+ import * as tsplus_module_5 from "effect/Cause";
6
+ import * as tsplus_module_6 from "effect/Schedule";
7
+ import { logError } from "@effect-app/infra/errorReporter";
8
+ import { HttpHeaders } from "../http.js";
9
+ export class JWTError extends tsplus_module_1.TaggedClass("JWTError") {
10
+ }
11
+ const logRequestError = logError("Request");
12
+ export function defaultBasicErrorHandler(_req, res, r2) {
13
+ const sendError = (code) => (body) => tsplus_module_4.sync(() => tsplus_module_3.setStatus(code)(tsplus_module_3.setBody(res, tsplus_module_2.unsafeJson(body))));
14
+ return tsplus_module_4.catchAll(tsplus_module_4.catchTag(tsplus_module_4.tapErrorCause(r2, (cause) => tsplus_module_5.isFailure(cause) ? logRequestError(cause) : tsplus_module_4.unit), "ValidationError", (err) => sendError(400)(err.errors))
15
+ // final catch all; expecting never so that unhandled known errors will show up
16
+ , (err) => tsplus_module_4.flatMap(tsplus_module_4.map(tsplus_module_4.logError("Program error, compiler probably silenced, got an unsupported Error in Error Channel of Effect" + err), () => err), tsplus_module_4.die));
17
+ }
18
+ const optimisticConcurrencySchedule = tsplus_module_6.intersect(tsplus_module_6.recurWhile((a) => a._tag === "OptimisticConcurrencyException"))(tsplus_module_6.once);
19
+ export function defaultErrorHandler(req, res, r2) {
20
+ const r3 = req.method === "PATCH"
21
+ ? tsplus_module_4.retry(r2, optimisticConcurrencySchedule)
22
+ : r2;
23
+ const sendError = (code) => (body) => tsplus_module_4.sync(() => tsplus_module_3.setBody(tsplus_module_3.setStatus(code)(res), tsplus_module_2.unsafeJson(body)));
24
+ return tsplus_module_4.catchAll(tsplus_module_4.catchTags(tsplus_module_4.tapErrorCause(r3, (cause) => tsplus_module_5.isFailure(cause) ? logRequestError(cause) : tsplus_module_4.unit), {
25
+ "JWTError": (err) => tsplus_module_4.succeed(tsplus_module_3.unsafeJson({ message: err.error.message }, {
26
+ status: err
27
+ .error
28
+ .status,
29
+ headers: HttpHeaders.fromInput(err.error.headers)
30
+ })),
31
+ "ValidationError": (err) => sendError(400)(err.errors),
32
+ "NotFoundError": sendError(404),
33
+ "NotLoggedInError": sendError(401),
34
+ "UnauthorizedError": sendError(403),
35
+ "InvalidStateError": sendError(422),
36
+ // 412 or 409.. https://stackoverflow.com/questions/19122088/which-http-status-code-to-use-to-reject-a-put-due-to-optimistic-locking-failure
37
+ "OptimisticConcurrencyException": sendError(412)
38
+ })
39
+ // final catch all; expecting never so that unhandled known errors will show up
40
+ , (err) => tsplus_module_4.flatMap(tsplus_module_4.map(tsplus_module_4.logError("Program error, compiler probably silenced, got an unsupported Error in Error Channel of Effect" + err), () => err), tsplus_module_4.die));
41
+ }
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdEVycm9ySGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL19zcmMvYXBpL3JvdXRpbmcvZGVmYXVsdEVycm9ySGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFFMUQsT0FBTyxFQUFZLFdBQVcsRUFBbUQsTUFBTSxZQUFZLENBQUE7QUFTbkcsTUFBTSxPQUFPLFFBQVMsU0FBUSw0QkFBaUIsVUFBVSxDQU12RDtDQUFHO0FBRUwsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0FBRTNDLE1BQU0sVUFBVSx3QkFBd0IsQ0FDdEMsSUFBdUIsRUFDdkIsR0FBdUIsRUFDdkIsRUFBa0Q7SUFFbEQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBYSxFQUFFLEVBQUUsQ0FBQywyQkFBTywwQkFBaUQsSUFBSSxFQUFyRCx3QkFBQSxHQUFHLEVBQVMsMkJBQW9CLElBQUksQ0FBQyxDQUFDLENBQWdCLENBQUMsQ0FBQTtJQUNySCxPQUFPLHlCQUFBLHlCQUFBLDhCQUFBLEVBQUUsRUFDUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsMEJBQUEsS0FBSyxDQUFZLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHFCQUFZLENBQUMsRUFDekUsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakUsK0VBQStFO01BQ3JFLENBQUMsR0FBVSxFQUFFLEVBQUUsQ0FDdkIsd0JBQUEsb0JBQUEseUJBRUksZ0dBQWdHLEdBQUcsR0FBRyxDQUN2RyxFQUNJLEdBQUcsRUFBRSxDQUFDLEdBQWMsQ0FBQyxzQkFDTixDQUN2QixDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sNkJBQTZCLDZCQUM5QiwyQkFBZ0QsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssZ0NBQWdDLENBQUMsdUJBQUEsQ0FBQTtBQUV4RyxNQUFNLFVBQVUsbUJBQW1CLENBQ2pDLEdBQXNCLEVBQ3RCLEdBQXVCLEVBQ3ZCLEVBQTZEO0lBRTdELE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEtBQUssT0FBTztRQUMvQixDQUFDLENBQUMsc0JBQUEsRUFBRSxFQUFPLDZCQUE2QixDQUFDO1FBQ3pDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDTixNQUFNLFNBQVMsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFhLEVBQUUsRUFBRSxDQUFDLDJCQUFPLHdCQUFBLDBCQUFjLElBQUksRUFBbEIsR0FBRyxDQUFnQixFQUFTLDJCQUFvQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDckgsT0FBTyx5QkFBQSwwQkFBQSw4QkFBQSxFQUFFLEVBQ1EsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLDBCQUFBLEtBQUssQ0FBWSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxxQkFBWSxDQUFDLEVBQ3hFO1FBQ1QsVUFBVSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDbEIsd0JBQ0UsMkJBQThCLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDNUQsTUFBTSxFQUFFLEdBQUc7aUJBQ1IsS0FBSztpQkFDTCxNQUFNO1lBQ1QsT0FBTyxFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7U0FDbEQsQ0FBQyxDQUNIO1FBQ0gsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO1FBQ3RELGVBQWUsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQy9CLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUM7UUFDbEMsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQztRQUNuQyxtQkFBbUIsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQ25DLDRJQUE0STtRQUM1SSxnQ0FBZ0MsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDO0tBQ2pELENBQUM7SUFDRiwrRUFBK0U7TUFDckUsQ0FBQyxHQUFVLEVBQUUsRUFBRSxDQUN2Qix3QkFBQSxvQkFBQSx5QkFFSSxnR0FBZ0csR0FBRyxHQUFHLENBQ3ZHLEVBQ0ksR0FBRyxFQUFFLENBQUMsR0FBYyxDQUFDLHNCQUNOLENBQ3ZCLENBQUE7QUFDTCxDQUFDIn0=
@@ -0,0 +1,20 @@
1
+ import { Layer } from "effect/Layer";
2
+ import { Effect } from "effect/Effect";
3
+ import { Schema } from "@effect-app/schema";
4
+ import type { EnforceNonEmptyRecord } from "@effect-app/core/utils";
5
+ import type { ValidationError } from "@effect-app/infra/errors";
6
+ import type { RequestContextContainer } from "@effect-app/infra/services/RequestContextContainer";
7
+ import type { ContextMapContainer } from "@effect-app/infra/services/Store/ContextMapContainer";
8
+ import type { StructFields } from "@effect-app/schema";
9
+ import type { HttpRequestError } from "../http.js";
10
+ import { HttpRouteContext, HttpServerRequest, HttpServerResponse } from "../http.js";
11
+ import type { RequestHandler, RequestHandlerBase } from "./base.js";
12
+ export declare const RequestSettings: import("effect/FiberRef").FiberRef<{
13
+ verbose: boolean;
14
+ }>;
15
+ export type Middleware<R, M, PathA extends StructFields, CookieA extends StructFields, QueryA extends StructFields, BodyA extends StructFields, HeaderA extends StructFields, ReqA extends PathA & QueryA & BodyA, ResA extends StructFields, ResE, MiddlewareE, PPath extends `/${string}`, R2, PR, CTX, Context, Config> = (handler: RequestHandler<R, M, PathA, CookieA, QueryA, BodyA, HeaderA, ReqA, ResA, ResE, PPath, CTX, Context, Config>) => {
16
+ handler: RequestHandler<Exclude<R2, HttpServerRequest> | PR | RequestContextContainer | ContextMapContainer, M, PathA, CookieA, QueryA, BodyA, HeaderA, ReqA, ResA, ResE, PPath, CTX, Context, Config>;
17
+ makeRequestLayer: Layer<R2, MiddlewareE, PR>;
18
+ };
19
+ export declare function makeRequestHandler<R, M, PathA extends StructFields, CookieA extends StructFields, QueryA extends StructFields, BodyA extends StructFields, HeaderA extends StructFields, ReqA extends PathA & QueryA & BodyA, ResA extends StructFields, ResE, MiddlewareE, R2, PR, RErr, PPath extends `/${string}`, Config>(handler: RequestHandlerBase<R, M, PathA, CookieA, QueryA, BodyA, HeaderA, ReqA, ResA, ResE, PPath, Config>, errorHandler: <R>(req: HttpServerRequest, res: HttpServerResponse, r2: Effect<R, ValidationError | ResE | MiddlewareE, HttpServerResponse>) => Effect<RErr | R, never, HttpServerResponse>, middlewareLayer?: Layer<R2, MiddlewareE, PR>): Effect<HttpRouteContext | HttpServerRequest | RequestContextContainer | ContextMapContainer | RErr | Exclude<Exclude<R, EnforceNonEmptyRecord<M>>, PR> | R2, HttpRequestError, HttpServerResponse>;
20
+ //# sourceMappingURL=makeRequestHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"makeRequestHandler.d.ts","sourceRoot":"","sources":["../../../_src/api/routing/makeRequestHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ import * as tsplus_module_1 from "effect/FiberRef";
2
+ import * as tsplus_module_2 from "@effect-app/schema";
3
+ import * as tsplus_module_3 from "@effect/schema/Parser";
4
+ import * as tsplus_module_4 from "effect/Effect";
5
+ import * as tsplus_module_5 from "@effect-app/core/Option";
6
+ import * as tsplus_module_6 from "@effect-app/prelude/utils";
7
+ import * as tsplus_module_7 from "@effect/platform/Http/ServerResponse";
8
+ import * as tsplus_module_8 from "@effect/platform/Http/Body";
9
+ import * as tsplus_module_9 from "@effect-app/infra/api/setupRequest";
10
+ import { pretty } from "@effect-app/core/utils";
11
+ import { snipString } from "@effect-app/infra/api/util";
12
+ import { reportError } from "@effect-app/infra/errorReporter";
13
+ import { AST } from "@effect-app/schema";
14
+ import { HttpRouteContext, HttpServerRequest } from "../http.js";
15
+ import { makeRequestParsers, parseRequestParams } from "./base.js";
16
+ export const RequestSettings = tsplus_module_1.unsafeMake({
17
+ verbose: false
18
+ });
19
+ export function makeRequestHandler(handler, errorHandler, middlewareLayer) {
20
+ const { Request, Response, h: handle } = handler;
21
+ const response = Response ? Response : tsplus_module_2.Void;
22
+ const resp = response;
23
+ // TODO: consider if the alternative of using the struct schema is perhaps just better.
24
+ const encoder = "struct" in resp && resp.struct
25
+ ? tsplus_module_3.encodeSync(resp.struct)
26
+ // ? (i: any) => {
27
+ // if (i instanceof (response as any)) return response.encodeSync(i)
28
+ // else return response.encodeSync(new (response as any)(i))
29
+ // }
30
+ : tsplus_module_3.encodeSync(resp);
31
+ // const encodeResponse = adaptResponse
32
+ // ? (req: ReqA) => Encoder.for(adaptResponse(req))
33
+ // : () => encoder
34
+ const requestParsers = makeRequestParsers(Request);
35
+ const parseRequest = parseRequestParams(requestParsers);
36
+ const getParams = tsplus_module_4.map(tsplus_module_4.all({
37
+ rcx: HttpRouteContext,
38
+ req: tsplus_module_4.flatMap(HttpServerRequest, (req) => tsplus_module_4.map(req.json, (body) => ({ body, headers: req.headers })))
39
+ }), ({ rcx, req }) => ({
40
+ params: rcx.params,
41
+ query: rcx.searchParams,
42
+ body: req.body,
43
+ headers: req.headers,
44
+ cookies: {} // req.cookies
45
+ }));
46
+ return tsplus_module_9.updateRequestContext(tsplus_module_4.gen(function* ($) {
47
+ const req = yield* $(HttpServerRequest);
48
+ const res = tsplus_module_7.empty()
49
+ .pipe((_) => req.method === "GET" ? tsplus_module_7.setHeader(_, "Cache-Control", "no-store") : _);
50
+ const pars = yield* $(getParams);
51
+ const settings = yield* $(tsplus_module_1.get(RequestSettings));
52
+ const eff =
53
+ // TODO: we don;t have access to user id here cause context is not yet created
54
+ tsplus_module_4.tap(tsplus_module_4.catchAllCause(tsplus_module_4.andThen(tsplus_module_4.annotateLogs(tsplus_module_4.logInfo("Incoming request"), {
55
+ method: req.method,
56
+ path: req.originalUrl,
57
+ ...settings.verbose
58
+ ? {
59
+ reqPath: tsplus_module_6.RecordPretty(tsplus_module_6.object$(pars.params)),
60
+ reqQuery: tsplus_module_6.RecordPretty(tsplus_module_6.object$(pars.query)),
61
+ reqBody: pretty(pars.body),
62
+ reqCookies: pretty(pars.cookies),
63
+ reqHeaders: pretty(pars.headers)
64
+ }
65
+ : undefined
66
+ }), tsplus_module_4.suspend(() => {
67
+ const handleRequest = tsplus_module_4.flatMap(tsplus_module_4.map(parseRequest(pars), ({ body, path, query }) => {
68
+ const hn = {
69
+ ...tsplus_module_5.getOrUndefined(body),
70
+ ...tsplus_module_5.getOrUndefined(query),
71
+ ...tsplus_module_5.getOrUndefined(path)
72
+ };
73
+ return hn;
74
+ }), (parsedReq) => tsplus_module_4.map(tsplus_module_4.map(tsplus_module_4.provideService(handle(parsedReq), handler.Request.Tag, parsedReq), encoder), (r) => tsplus_module_7.setStatus(r === undefined ? 204 : 200)(tsplus_module_7.setBody(res, tsplus_module_8.unsafeJson(r)))));
75
+ // Commands should not be interruptable.
76
+ const r = req.method !== "GET" ? tsplus_module_4.uninterruptible(handleRequest) : handleRequest; // .instrument("Performance.RequestResponse")
77
+ const r2 = middlewareLayer
78
+ ? tsplus_module_4.provide(r, middlewareLayer)
79
+ // PR is not relevant here
80
+ : r;
81
+ return errorHandler(req, res, r2);
82
+ })), (cause) => tsplus_module_4.tapErrorCause(tsplus_module_4.tap(tsplus_module_4.sync(() => tsplus_module_7.setStatus(500)(res)), (res) => tsplus_module_4.all([
83
+ reportError("request")(cause, {
84
+ path: req.originalUrl,
85
+ method: req.method
86
+ }),
87
+ tsplus_module_4.suspend(() => {
88
+ const headers = res.headers;
89
+ return tsplus_module_4.annotateLogs(tsplus_module_4.logError("Finished request", cause), {
90
+ method: req.method,
91
+ path: req.originalUrl,
92
+ statusCode: res.status.toString(),
93
+ reqPath: tsplus_module_6.RecordPretty(tsplus_module_6.object$(pars.params)),
94
+ reqQuery: tsplus_module_6.RecordPretty(tsplus_module_6.object$(pars.query)),
95
+ reqBody: pretty(pars.body),
96
+ reqCookies: pretty(pars.cookies),
97
+ reqHeaders: pretty(pars.headers),
98
+ resHeaders: tsplus_module_6.RecordPretty(tsplus_module_6.object$(Object
99
+ .entries(headers)
100
+ .reduce((prev, [key, value]) => {
101
+ prev[key] = value && typeof value === "string" ? snipString(value) : value;
102
+ return prev;
103
+ }, {})))
104
+ });
105
+ })
106
+ ], { concurrency: "inherit" })), (cause) => tsplus_module_4.sync(() => console.error("Error occurred while reporting error", cause)))), tsplus_module_4.annotateLogs(tsplus_module_4.logInfo("Finished request"), {
107
+ method: req.method,
108
+ path: req.originalUrl,
109
+ statusCode: res.status.toString(),
110
+ ...settings.verbose
111
+ ? {
112
+ resHeaders: pretty(res.headers)
113
+ }
114
+ : undefined
115
+ }));
116
+ return yield* $(eff);
117
+ }), (_) => tsplus_module_6.$copy(tsplus_module_6.object$(_), {
118
+ name: tsplus_module_2.NonEmptyString255(tsplus_module_5.getOrUndefined(AST.getTitleAnnotation(Request.ast)) ?? "TODO")
119
+ }));
120
+ }
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFrZVJlcXVlc3RIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vX3NyYy9hcGkvcm91dGluZy9tYWtlUmVxdWVzdEhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBR0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFLN0QsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBRXhDLE9BQU8sRUFBWSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBc0IsTUFBTSxZQUFZLENBQUE7QUFDOUYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sV0FBVyxDQUFBO0FBR2xFLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywyQkFBb0I7SUFDakQsT0FBTyxFQUFFLEtBQUs7Q0FDZixDQUFDLENBQUE7QUEwQ0YsTUFBTSxVQUFVLGtCQUFrQixDQWtCaEMsT0FhQyxFQUNELFlBSWdELEVBQ2hELGVBQTRDO0lBWTVDLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUE7SUFFaEQsTUFBTSxRQUFRLEdBQTBCLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsaUJBQUMsSUFBSSxDQUFBO0lBQ2xFLE1BQU0sSUFBSSxHQUFHLFFBQTJELENBQUE7SUFDeEUsdUZBQXVGO0lBQ3ZGLE1BQU0sT0FBTyxHQUFHLFFBQVEsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU07UUFDN0MsQ0FBQyw0QkFBQyxJQUFJLENBQUMsTUFBTTtJQUNiLGtCQUFrQjtJQUNsQixzRUFBc0U7SUFDdEUsOERBQThEO0lBQzlELElBQUk7SUFDSixD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
@@ -0,0 +1,12 @@
1
+ import { Ref } from "effect/Ref";
2
+ import { Effect } from "effect/Effect";
3
+ import { Layer } from "effect/Layer";
4
+ import { type RouteDescriptorAny } from "@effect-app/infra/api/express/schema/routing";
5
+ import type { ValidationError } from "@effect-app/infra/errors";
6
+ import type { StructFields } from "@effect-app/schema";
7
+ import { type HttpServerRequest, type HttpServerResponse } from "../http.js";
8
+ import type { RequestHandler } from "./base.js";
9
+ import type { Middleware } from "./makeRequestHandler.js";
10
+ export declare const RouteDescriptors: import("effect/Context").Tag<import("effect/Ref").Ref<RouteDescriptorAny[]>, import("effect/Ref").Ref<RouteDescriptorAny[]>>;
11
+ export declare function match<R, M, PathA extends StructFields, CookieA extends StructFields, QueryA extends StructFields, BodyA extends StructFields, HeaderA extends StructFields, ReqA extends PathA & QueryA & BodyA, ResA extends StructFields, ResE, MiddlewareE, PPath extends `/${string}`, R2, PR, RErr, CTX, Context, Config>(requestHandler: RequestHandler<R, M, PathA, CookieA, QueryA, BodyA, HeaderA, ReqA, ResA, ResE, PPath, CTX, Context, Config>, errorHandler: <R>(req: HttpServerRequest, res: HttpServerResponse, r2: Effect<R, ValidationError | MiddlewareE | ResE, HttpServerResponse>) => Effect<RErr | R, never, HttpServerResponse>, middleware?: Middleware<R, M, PathA, CookieA, QueryA, BodyA, HeaderA, ReqA, ResA, ResE, MiddlewareE, PPath, R2, PR, CTX, Context, Config>): import("effect/Effect").Effect<never, never, import("@effect/platform/Http/Router").Route<import("../../services/RequestContextContainer.js").RequestContextContainer | import("../../services/Store/ContextMapContainer.js").ContextMapContainer | Exclude<R2, import("effect/Scope").Scope | HttpServerRequest | import("@effect/platform/Http/Router").RouteContext> | Exclude<RErr, import("effect/Scope").Scope | HttpServerRequest | import("@effect/platform/Http/Router").RouteContext> | Exclude<Exclude<Exclude<R, import("@effect-app/core/utils").EnforceNonEmptyRecord<M>>, PR>, import("effect/Scope").Scope | HttpServerRequest | import("@effect/platform/Http/Router").RouteContext>, import("@effect/platform/Http/ServerError").RequestError>>;
12
+ //# sourceMappingURL=match.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"match.d.ts","sourceRoot":"","sources":["../../../_src/api/routing/match.ts"],"names":[],"mappings":";;;AAEA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,8CAA8C,CAAA;AACtF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAc,KAAK,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAA;AACxF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAE/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEzD,eAAO,MAAM,gBAAgB,8HAAmC,CAAA;AAEhE,wBAAgB,KAAK,CACnB,CAAC,EACD,CAAC,EACD,KAAK,SAAS,YAAY,EAC1B,OAAO,SAAS,YAAY,EAC5B,MAAM,SAAS,YAAY,EAC3B,KAAK,SAAS,YAAY,EAC1B,OAAO,SAAS,YAAY,EAC5B,IAAI,SAAS,KAAK,GAAG,MAAM,GAAG,KAAK,EACnC,IAAI,SAAS,YAAY,EACzB,IAAI,EACJ,WAAW,EACX,KAAK,SAAS,IAAI,MAAM,EAAE,EAC1B,EAAE,EACF,EAAE,EACF,IAAI,EACJ,GAAG,EACH,OAAO,EACP,MAAM,EAEN,cAAc,EAAE,cAAc,CAC5B,CAAC,EACD,CAAC,EACD,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,EACL,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,GAAG,EACH,OAAO,EACP,MAAM,CACP,EACD,YAAY,EAAE,CAAC,CAAC,EACd,GAAG,EAAE,iBAAiB,EACtB,GAAG,EAAE,kBAAkB,EACvB,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,eAAe,GAAG,WAAW,GAAG,IAAI,EAAE,kBAAkB,CAAC,KACpE,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,kBAAkB,CAAC,EAChD,UAAU,CAAC,EAAE,UAAU,CACrB,CAAC,EACD,CAAC,EACD,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,EACL,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,WAAW,EACX,KAAK,EACL,EAAE,EACF,EAAE,EACF,GAAG,EACH,OAAO,EACP,MAAM,CACP,quBA+CF"}
@@ -0,0 +1,31 @@
1
+ import * as tsplus_module_1 from "effect/Context";
2
+ import * as tsplus_module_2 from "@effect/platform/Http/Router";
3
+ import * as tsplus_module_3 from "effect/Effect";
4
+ /* eslint-disable @typescript-eslint/no-explicit-any */
5
+ /* eslint-disable @typescript-eslint/ban-types */
6
+ import "@effect-app/infra/api/express/schema/routing";
7
+ import "../http.js";
8
+ import { makeRequestHandler } from "./makeRequestHandler.js";
9
+ export const RouteDescriptors = tsplus_module_1.Tag();
10
+ export function match(requestHandler, errorHandler, middleware) {
11
+ let middlewareLayer = undefined;
12
+ if (middleware) {
13
+ const { handler, makeRequestLayer } = middleware(requestHandler);
14
+ requestHandler = handler; // todo
15
+ middlewareLayer = makeRequestLayer;
16
+ }
17
+ return tsplus_module_3.gen(function* () {
18
+ // const rdesc = yield* $(RouteDescriptors.flatMap((_) => _.get))
19
+ const handler = makeRequestHandler(requestHandler, // one argument if no middleware, 2 if has middleware. TODO: clean this shit up
20
+ errorHandler, middlewareLayer);
21
+ const route = tsplus_module_2.makeRoute(requestHandler.Request.method, requestHandler.Request.path, handler);
22
+ // TODO
23
+ // rdesc.push(makeRouteDescriptor(
24
+ // requestHandler.Request.path,
25
+ // requestHandler.Request.method,
26
+ // requestHandler
27
+ // ))
28
+ return route;
29
+ });
30
+ }
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9fc3JjL2FwaS9yb3V0aW5nL21hdGNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVEQUF1RDtBQUN2RCxpREFBaUQ7QUFDakQsT0FBd0MsOENBQThDLENBQUE7QUFHdEYsT0FBNEUsWUFBWSxDQUFBO0FBRXhGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBRzVELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLGdCQUFBLEdBQUcsRUFBNkIsQ0FBQTtBQUVoRSxNQUFNLFVBQVUsS0FBSyxDQW9CbkIsY0FlQyxFQUNELFlBSWdELEVBQ2hELFVBa0JDO0lBRUQsSUFBSSxlQUFlLEdBQTJDLFNBQVMsQ0FBQTtJQUN2RSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2YsTUFBTSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUNoRSxjQUFjLEdBQUcsT0FBYyxDQUFBLENBQUMsT0FBTztRQUN2QyxlQUFlLEdBQUcsZ0JBQWdCLENBQUE7SUFDcEMsQ0FBQztJQUNELE9BQU8sb0JBQVcsUUFBUSxDQUFDO1FBQ3pCLGlFQUFpRTtRQUVqRSxNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FrQmhDLGNBQXFCLEVBQUUsK0VBQStFO1FBQ3RHLFlBQVksRUFDWixlQUFlLENBQ2hCLENBQUE7UUFFRCxNQUFNLEtBQUssR0FBRywwQkFDWixjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFDN0IsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQzNCLE9BQU8sQ0FDUixDQUFBO1FBQ0QsT0FBTztRQUNQLGtDQUFrQztRQUNsQyxpQ0FBaUM7UUFDakMsbUNBQW1DO1FBQ25DLG1CQUFtQjtRQUNuQixLQUFLO1FBQ0wsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMifQ==
@@ -0,0 +1,5 @@
1
+ export * from "./routing/base.js";
2
+ export * from "./routing/defaultErrorHandler.js";
3
+ export * from "./routing/makeRequestHandler.js";
4
+ export * from "./routing/match.js";
5
+ //# sourceMappingURL=routing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../_src/api/routing.ts"],"names":[],"mappings":"AAIA,cAAc,mBAAmB,CAAA;AACjC,cAAc,kCAAkC,CAAA;AAChD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,oBAAoB,CAAA"}
@@ -0,0 +1,8 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ /* eslint-disable @typescript-eslint/ban-types */
3
+ // codegen:start {preset: barrel, include: routing/*.ts }
4
+ export * from "./routing/base.js";
5
+ export * from "./routing/defaultErrorHandler.js";
6
+ export * from "./routing/makeRequestHandler.js";
7
+ export * from "./routing/match.js";
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL19zcmMvYXBpL3JvdXRpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELGlEQUFpRDtBQUVqRCx5REFBeUQ7QUFDekQsY0FBYyxtQkFBbUIsQ0FBQTtBQUNqQyxjQUFjLGtDQUFrQyxDQUFBO0FBQ2hELGNBQWMsaUNBQWlDLENBQUE7QUFDL0MsY0FBYyxvQkFBb0IsQ0FBQSJ9
@@ -3,13 +3,13 @@ import { RequestContext } from "../RequestContext.js";
3
3
  import { RequestContextContainer } from "../services/RequestContextContainer.js";
4
4
  import { ContextMapContainer } from "../services/Store/ContextMapContainer.js";
5
5
  /**
6
- * @tsplus fluent effect/io/Effect setupRequestContextFromName
6
+ * @tsplus fluent effect/io/Effect setupRequestContext
7
7
  * @tsplus location "@effect-app/infra/api/setupRequest"
8
8
  */
9
- export declare function setupRequestContextFromName<R, E, A>(self: Effect<R, E, A>, name: string): import("effect/Effect").Effect<RequestContextContainer | ContextMapContainer | Exclude<R, import("effect/Tracer").ParentSpan>, E, A>;
9
+ export declare function setupRequestContext<R, E, A>(self: Effect<R, E, A>, requestContext: RequestContext | string): import("effect/Effect").Effect<RequestContextContainer | ContextMapContainer | Exclude<Exclude<R, import("effect/Tracer").ParentSpan>, never>, E, A>;
10
10
  /**
11
- * @tsplus fluent effect/io/Effect setupRequestContext
11
+ * @tsplus fluent effect/io/Effect updateRequestContext
12
12
  * @tsplus location "@effect-app/infra/api/setupRequest"
13
13
  */
14
- export declare function setupRequestContext<R, E, A>(self: Effect<R, E, A>, requestContext: RequestContext): import("effect/Effect").Effect<RequestContextContainer | ContextMapContainer | Exclude<R, import("effect/Tracer").ParentSpan>, E, A>;
14
+ export declare function updateRequestContext<R, E, A>(self: Effect<R, E, A>, f: (rc: RequestContext) => RequestContext): import("effect/Effect").Effect<RequestContextContainer | Exclude<R, never>, E, A>;
15
15
  //# sourceMappingURL=setupRequest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"setupRequest.d.ts","sourceRoot":"","sources":["../../_src/api/setupRequest.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAA;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAA;;;;;AAK9E,wBAAgB,2BAA2B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,wIAEvF;;;;;AAkDD,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,EAAE,cAAc,wIAGjG"}
1
+ {"version":3,"file":"setupRequest.d.ts","sourceRoot":"","sources":["../../_src/api/setupRequest.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAA;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAA;;;;;AAiD9E,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,EAAE,cAAc,GAAG,MAAM,wJAI1G;;;;;AAQD,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,cAAc,KAAK,cAAc,qFAI7G"}
@@ -1,56 +1,50 @@
1
- import * as tsplus_module_1 from "effect/Effect";
2
- import * as tsplus_module_2 from "@effect-app/infra/_global.ext";
3
- export const setupRequestContext = setupRequestContext_1;
1
+ import * as tsplus_module_1 from "@effect-app/schema";
2
+ import * as tsplus_module_2 from "effect/Effect";
3
+ import * as tsplus_module_3 from "@effect-app/infra/services/RequestContextContainer";
4
+ import * as tsplus_module_4 from "effect/Layer";
4
5
  import { RequestId } from "@effect-app/prelude/ids";
5
6
  import { RequestContext } from "../RequestContext.js";
6
7
  import { RequestContextContainer } from "../services/RequestContextContainer.js";
7
8
  import { ContextMapContainer } from "../services/Store/ContextMapContainer.js";
8
- /**
9
- * @tsplus fluent effect/io/Effect setupRequestContextFromName
10
- */
11
- export function setupRequestContextFromName(self, name) {
12
- return tsplus_module_1.flatMap(makeInternalRequestContext(name), (rc) => setupRequestContext_1(self, rc));
13
- }
14
9
  function makeInternalRequestContext(name) {
15
- return tsplus_module_1.sync(() => {
10
+ return tsplus_module_2.sync(() => {
16
11
  const id = RequestId.make();
17
12
  return new RequestContext({
18
13
  id,
19
14
  rootId: id,
20
15
  locale: "en",
21
- name: tsplus_module_2.parseSync(tsplus_module_3.NonEmptyString255, name)
16
+ name: tsplus_module_1.NonEmptyString255(name)
22
17
  });
23
18
  });
24
19
  }
25
- const withRequestSpan = (f) => tsplus_module_1.flatMap(RequestContextContainer
26
- .get, (ctx) => tsplus_module_1.withLogSpan(tsplus_module_1.withSpan(f, "request", {
27
- attributes: {
28
- "request.id": ctx.id,
29
- "request.name": ctx.name,
30
- "request.locale": ctx.locale,
31
- "request.namespace": ctx.namespace,
32
- ...ctx.userProfile?.sub
33
- ? {
34
- "request.user.sub": ctx
35
- .userProfile
36
- .sub,
37
- "request.user.roles": "roles" in ctx
38
- .userProfile
39
- ? ctx.userProfile.roles
40
- : undefined
41
- }
42
- : {}
43
- }
44
- })
20
+ const withRequestSpan = (f) => tsplus_module_2.andThen(RequestContextContainer
21
+ .get, (ctx) => tsplus_module_2.withLogSpan(tsplus_module_2.withSpan(f, "request", { attributes: tsplus_module_3.spanAttributes(ctx) })
45
22
  // request context info is picked up directly in the logger for annotations.
46
23
  , "request"));
47
- function setupContextMap(self) {
48
- return (tsplus_module_1.zipRight(self)(tsplus_module_1.flatMap(ContextMapContainer, (_) => _.start)));
49
- }
24
+ const setupContextMap = tsplus_module_4.effectDiscard(tsplus_module_2.andThen(ContextMapContainer, (_) => _.start));
25
+ // const RequestContextLiveFromRequestContext = (requestContext: RequestContext) =>
26
+ // RequestContext.Tag.makeLayer(requestContext)
27
+ // memoization problem
28
+ // const RequestContextLive = RequestContextContainer.get.toLayer(RequestContext.Tag)
29
+ const RequestContextStartLiveFromRequestContext = (requestContext) => tsplus_module_4.provideMerge(setupContextMap
30
+ // .provideMerge(RequestContextLiveFromRequestContext(requestContext))
31
+ , tsplus_module_4.effectDiscard(tsplus_module_2.andThen(RequestContextContainer, (_) => _.start(requestContext))));
32
+ const RequestContextStartLive = (requestContext) => typeof requestContext === "string"
33
+ ? tsplus_module_4.unwrapEffect(tsplus_module_2.andThen(makeInternalRequestContext(requestContext), RequestContextStartLiveFromRequestContext)) : RequestContextStartLiveFromRequestContext(requestContext);
50
34
  /**
51
35
  * @tsplus fluent effect/io/Effect setupRequestContext
52
36
  */
53
- function setupRequestContext_1(self, requestContext) {
54
- return tsplus_module_1.zipRight(withRequestSpan(setupContextMap(self)))(tsplus_module_1.flatMap(RequestContextContainer, (_) => _.start(requestContext)));
37
+ export function setupRequestContext(self, requestContext) {
38
+ return tsplus_module_2.provide(self
39
+ .pipe(withRequestSpan), RequestContextStartLive(requestContext));
40
+ }
41
+ const UpdateRequestContextLive = (f) => tsplus_module_4.effectDiscard(tsplus_module_2.andThen(RequestContextContainer, (rcc) => rcc.update(f)));
42
+ /**
43
+ * @tsplus fluent effect/io/Effect updateRequestContext
44
+ */
45
+ export function updateRequestContext(self, f) {
46
+ return tsplus_module_2.provide(self
47
+ // .provideServiceEffect(RequestContext.Tag, RequestContextContainer.get)
48
+ , UpdateRequestContextLive(f));
55
49
  }
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBSZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vX3NyYy9hcGkvc2V0dXBSZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O2FBNERnQixtQkFBbUI7QUE1RG5DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDckQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0NBQXdDLENBQUE7QUFDaEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMENBQTBDLENBQUE7QUFFOUU7O0dBRUc7QUFDSCxNQUFNLFVBQVUsMkJBQTJCLENBQVUsSUFBcUIsRUFBRSxJQUFZO0lBQ3RGLE9BQU8sd0JBQUEsMEJBQTBCLENBQUMsSUFBSSxDQUFDLEVBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLHNCQUFvQixJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUN4RixDQUFDO0FBRUQsU0FBUywwQkFBMEIsQ0FBQyxJQUFZO0lBQzlDLE9BQU8scUJBQVksR0FBRyxFQUFFO1FBQ3RCLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUMzQixPQUFPLElBQUksY0FBYyxDQUFDO1lBQ3hCLEVBQUU7WUFDRixNQUFNLEVBQUUsRUFBRTtZQUNWLE1BQU0sRUFBRSxJQUFJO1lBQ1osSUFBSSxFQUFFLDBDQUFBLGlCQUFpQixFQUFDLElBQUksQ0FBQztTQUM5QixDQUFDLENBQUE7SUFDSixDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRCxNQUFNLGVBQWUsR0FBRyxDQUFVLENBQWtCLEVBQUUsRUFBRSxDQUN0RCx3QkFBQSx1QkFBdUI7S0FDcEIsR0FBRyxFQUNLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDZiw0QkFBQSx5QkFBQSxDQUFDLEVBQ1csU0FBUyxFQUFFO0lBQ25CLFVBQVUsRUFBRTtRQUNWLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRTtRQUNwQixjQUFjLEVBQUUsR0FBRyxDQUFDLElBQUk7UUFDeEIsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLE1BQU07UUFDNUIsbUJBQW1CLEVBQUUsR0FBRyxDQUFDLFNBQVM7UUFDbEMsR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLEdBQUc7WUFDckIsQ0FBQyxDQUFDO2dCQUNBLGtCQUFrQixFQUFFLEdBQUc7cUJBQ3BCLFdBQVc7cUJBQ1gsR0FBRztnQkFDTixvQkFBb0IsRUFBRSxPQUFPLElBQUksR0FBRztxQkFDL0IsV0FBVztvQkFDZCxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxLQUFLO29CQUN2QixDQUFDLENBQUMsU0FBUzthQUNkO1lBQ0QsQ0FBQyxDQUFDLEVBQUU7S0FDUDtDQUNGLENBQUM7QUFDRiw0RUFBNEU7RUFDL0QsU0FBUyxDQUFDLENBQzFCLENBQUE7QUFFTCxTQUFTLGVBQWUsQ0FBVSxJQUFxQjtJQUNyRCxPQUFPLDBCQUNILElBQUksRUFEQSx3QkFBQSxtQkFBbUIsRUFBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUMxQyxDQUFBO0FBQ1gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsK0JBQTZDLElBQXFCLEVBQUUsY0FBOEI7SUFDaEcsZ0NBQ0ksZUFBZSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQURuQyx3QkFBQSx1QkFBdUIsRUFBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUM1QjtBQUM1QyxDQUFDIn0=
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBSZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vX3NyYy9hcGkvc2V0dXBSZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQ3JELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFBO0FBQ2hGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFBO0FBRTlFLFNBQVMsMEJBQTBCLENBQUMsSUFBWTtJQUM5QyxPQUFPLHFCQUFZLEdBQUcsRUFBRTtRQUN0QixNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDM0IsT0FBTyxJQUFJLGNBQWMsQ0FBQztZQUN4QixFQUFFO1lBQ0YsTUFBTSxFQUFFLEVBQUU7WUFDVixNQUFNLEVBQUUsSUFBSTtZQUNaLElBQUksRUFBRSxnQkFBQSxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7U0FDOUIsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQsTUFBTSxlQUFlLEdBQUcsQ0FBVSxDQUFrQixFQUFFLEVBQUUsQ0FDdEQsd0JBQUEsdUJBQXVCO0tBQ3BCLEdBQUcsRUFDSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ2YsNEJBQUEseUJBQUEsQ0FBQyxFQUNXLFNBQVMsRUFBRSxFQUFFLFVBQVUsaUNBQUUsR0FBRyxDQUFlLEVBQUUsQ0FBQztBQUN4RCw0RUFBNEU7RUFDL0QsU0FBUyxDQUFDLENBQzFCLENBQUE7QUFFTCxNQUFNLGVBQWUsaUNBQUcsd0JBQUEsbUJBQW1CLEVBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBZSxDQUFBO0FBRWxGLG1GQUFtRjtBQUNuRixpREFBaUQ7QUFDakQsc0JBQXNCO0FBQ3RCLHFGQUFxRjtBQUNyRixNQUFNLHlDQUF5QyxHQUFHLENBQUMsY0FBOEIsRUFBRSxFQUFFLENBQ25GLDZCQUFBLGVBQWU7QUFDYixzRUFBc0U7Z0NBRXBFLHdCQUFBLHVCQUF1QixFQUNaLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBRTNDLENBQUE7QUFFTCxNQUFNLHVCQUF1QixHQUFHLENBQUMsY0FBdUMsRUFBRSxFQUFFLENBQzFFLE9BQU8sY0FBYyxLQUFLLFFBQVE7SUFDaEMsQ0FBQyw4QkFBQyx3QkFBQSwwQkFBMEIsQ0FBQyxjQUFjLENBQUMsRUFDakMseUNBQXlDLENBQUMsRUFFckQsQ0FBQyxDQUFDLHlDQUF5QyxDQUFDLGNBQWMsQ0FBQyxDQUFBO0FBRS9EOztHQUVHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFVLElBQXFCLEVBQUUsY0FBdUM7SUFDekcsT0FBTyx3QkFBQSxJQUFJO1NBQ1IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUNiLHVCQUF1QixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUE7QUFDckQsQ0FBQztBQUVELE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxDQUF5QyxFQUFFLEVBQUUsK0JBQzdFLHdCQUFBLHVCQUF1QixFQUFTLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWUsQ0FBQTtBQUV4RTs7R0FFRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBVSxJQUFxQixFQUFFLENBQXlDO0lBQzVHLE9BQU8sd0JBQUEsSUFBSTtJQUNULHlFQUF5RTtNQUNoRSx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3pDLENBQUMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"errorReporter.d.ts","sourceRoot":"","sources":["../_src/errorReporter.ts"],"names":[],"mappings":";AAKA,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,WAEG,MAAM,OAAO,CAAC,WAAW,OAAO,MAAM,EAAE,OAAO,CAAC,wDAiBhE;AAkBD,wBAAgB,QAAQ,CAAC,CAAC,EACxB,IAAI,EAAE,MAAM,WAEG,MAAM,CAAC,CAAC,WAAW,OAAO,MAAM,EAAE,OAAO,CAAC,wDAgB1D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,QAG9C;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,QAI5C;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,sDAE7C"}
1
+ {"version":3,"file":"errorReporter.d.ts","sourceRoot":"","sources":["../_src/errorReporter.ts"],"names":[],"mappings":";AAKA,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,WAEG,MAAM,OAAO,CAAC,WAAW,OAAO,MAAM,EAAE,OAAO,CAAC,wDAkBhE;AAkBD,wBAAgB,QAAQ,CAAC,CAAC,EACxB,IAAI,EAAE,MAAM,WAEG,MAAM,CAAC,CAAC,WAAW,OAAO,MAAM,EAAE,OAAO,CAAC,wDAiB1D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,QAG9C;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,QAI5C;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,sDAE7C"}