@effect-app/infra 2.87.1 → 2.88.0
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.
- package/CHANGELOG.md +19 -1
- package/dist/api/routing/middleware/RouterMiddleware.d.ts +4 -22
- package/dist/api/routing/middleware/RouterMiddleware.d.ts.map +1 -1
- package/dist/api/routing/middleware/RouterMiddleware.js +1 -1
- package/dist/api/routing/middleware/RpcMiddleware.d.ts +13 -13
- package/dist/api/routing/middleware/RpcMiddleware.d.ts.map +1 -1
- package/dist/api/routing/middleware/RpcMiddleware.js +1 -1
- package/dist/api/routing/middleware/dynamic-middleware.d.ts +1 -9
- package/dist/api/routing/middleware/dynamic-middleware.d.ts.map +1 -1
- package/dist/api/routing/middleware/generic-middleware.d.ts +8 -8
- package/dist/api/routing/middleware/generic-middleware.d.ts.map +1 -1
- package/dist/api/routing/middleware/generic-middleware.js +23 -7
- package/dist/api/routing/middleware/middleware-api.d.ts +59 -30
- package/dist/api/routing/middleware/middleware-api.d.ts.map +1 -1
- package/dist/api/routing/middleware/middleware-api.js +44 -35
- package/dist/api/routing/middleware/middleware.d.ts +7 -7
- package/dist/api/routing/middleware/middleware.d.ts.map +1 -1
- package/dist/api/routing/middleware/middleware.js +5 -5
- package/dist/api/routing.d.ts +28 -22
- package/dist/api/routing.d.ts.map +1 -1
- package/dist/api/routing.js +1 -1
- package/package.json +2 -2
- package/src/api/routing/middleware/RouterMiddleware.ts +8 -86
- package/src/api/routing/middleware/RpcMiddleware.ts +13 -12
- package/src/api/routing/middleware/dynamic-middleware.ts +0 -47
- package/src/api/routing/middleware/generic-middleware.ts +45 -14
- package/src/api/routing/middleware/middleware-api.ts +147 -101
- package/src/api/routing/middleware/middleware.ts +5 -5
- package/src/api/routing.ts +50 -35
- package/test/contextProvider.test.ts +27 -24
- package/test/controller.test.ts +45 -23
- package/test/dist/contextProvider.test.d.ts.map +1 -1
- package/test/dist/controller.test.d.ts.map +1 -1
- package/test/dist/fixtures.d.ts +38 -44
- package/test/dist/fixtures.d.ts.map +1 -1
- package/test/dist/fixtures.js +21 -9
- package/test/dist/requires.test.d.ts.map +1 -1
- package/test/fixtures.ts +22 -13
- package/test/layerUtils.test.ts +4 -2
- package/test/requires.test.ts +119 -97
package/test/requires.test.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { expect, expectTypeOf, it } from "@effect/vitest"
|
|
1
|
+
import { describe, expect, expectTypeOf, it } from "@effect/vitest"
|
|
2
2
|
import { Effect, Either, Layer, S } from "effect-app"
|
|
3
3
|
import { NotLoggedInError, UnauthorizedError } from "effect-app/client"
|
|
4
4
|
import { makeMiddleware, Middleware } from "../src/api/routing.js"
|
|
5
|
-
import { AllowAnonymous,
|
|
5
|
+
import { AllowAnonymous, RequestContextMap, RequireRoles, Some, SomeElse, SomeService, Test } from "./fixtures.js"
|
|
6
6
|
|
|
7
7
|
export class SomeMiddleware extends Middleware.Tag<SomeMiddleware>()("SomeMiddleware", {
|
|
8
8
|
provides: Some
|
|
@@ -17,6 +17,18 @@ export class SomeMiddleware extends Middleware.Tag<SomeMiddleware>()("SomeMiddle
|
|
|
17
17
|
}) {
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
+
// functionally equivalent to the one above
|
|
21
|
+
export class SomeMiddlewareWrap extends Middleware.Tag<SomeMiddlewareWrap>()("SomeMiddlewareWrap", {
|
|
22
|
+
provides: Some,
|
|
23
|
+
wrap: true
|
|
24
|
+
})({
|
|
25
|
+
effect: Effect.gen(function*() {
|
|
26
|
+
// yield* Effect.context<"test-dep">()
|
|
27
|
+
return ({ next }) => next.pipe(Effect.provideService(Some, new Some({ a: 1 })))
|
|
28
|
+
})
|
|
29
|
+
}) {
|
|
30
|
+
}
|
|
31
|
+
|
|
20
32
|
export class SomeElseMiddleware extends Middleware.Tag<SomeElseMiddleware>()("SomeElseMiddleware", {
|
|
21
33
|
provides: SomeElse,
|
|
22
34
|
wrap: true
|
|
@@ -48,109 +60,119 @@ export class RequiresSomeMiddleware extends Middleware.Tag<RequiresSomeMiddlewar
|
|
|
48
60
|
}) {
|
|
49
61
|
}
|
|
50
62
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
.middleware(SomeElseMiddleware)
|
|
63
|
+
const middleware3 = makeMiddleware(RequestContextMap)
|
|
64
|
+
.middleware(RequiresSomeMiddleware)
|
|
65
|
+
.middleware(SomeMiddleware)
|
|
66
|
+
.middleware(RequireRoles)
|
|
67
|
+
.middleware(AllowAnonymous, Test)
|
|
68
|
+
.middleware(SomeElseMiddleware)
|
|
58
69
|
|
|
59
|
-
|
|
70
|
+
const _middlewareSideways = makeMiddleware(RequestContextMap)
|
|
71
|
+
.middleware(RequiresSomeMiddleware)
|
|
72
|
+
.middleware(SomeMiddleware)
|
|
73
|
+
.middleware(RequireRoles, AllowAnonymous, Test)
|
|
74
|
+
.middleware(SomeElseMiddleware)
|
|
60
75
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
expectTypeOf({} as LayerContext).toEqualTypeOf<Some>()
|
|
76
|
+
const _middlewareSidewaysFully = makeMiddleware(RequestContextMap)
|
|
77
|
+
.middleware(RequiresSomeMiddleware, SomeMiddleware, RequireRoles, AllowAnonymous, Test, SomeElseMiddleware)
|
|
64
78
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
"some-module"
|
|
72
|
-
)
|
|
73
|
-
yield* mwM({}, { "x-user": "test-user", "x-is-manager": "true" })
|
|
74
|
-
})
|
|
75
|
-
.pipe(
|
|
76
|
-
Effect.scoped,
|
|
77
|
-
Effect.provide(layer),
|
|
78
|
-
Effect.runPromise
|
|
79
|
-
)
|
|
79
|
+
const _middleware3Bis = makeMiddleware(RequestContextMap)
|
|
80
|
+
.middleware(RequiresSomeMiddleware)
|
|
81
|
+
.middleware(SomeMiddlewareWrap)
|
|
82
|
+
.middleware(RequireRoles)
|
|
83
|
+
.middleware(AllowAnonymous, Test)
|
|
84
|
+
.middleware(SomeElseMiddleware)
|
|
80
85
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
)
|
|
89
|
-
yield* mwM({}, {})
|
|
90
|
-
})
|
|
91
|
-
.pipe(
|
|
92
|
-
Effect.scoped,
|
|
93
|
-
Effect.provide(layer),
|
|
94
|
-
Effect.runPromise
|
|
95
|
-
)
|
|
86
|
+
expectTypeOf(_middlewareSideways).toEqualTypeOf<typeof middleware3>()
|
|
87
|
+
expectTypeOf(_middlewareSidewaysFully).toEqualTypeOf<typeof _middlewareSideways>()
|
|
88
|
+
expectTypeOf(_middleware3Bis).toEqualTypeOf<typeof middleware3>()
|
|
89
|
+
|
|
90
|
+
type Default = typeof middleware3["Default"]
|
|
91
|
+
type LayerContext = Layer.Layer.Context<Default>
|
|
92
|
+
expectTypeOf({} as LayerContext).toEqualTypeOf<SomeService>()
|
|
96
93
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
94
|
+
const testSuite = (_mw: typeof middleware3) =>
|
|
95
|
+
describe("middleware" + _mw, () => {
|
|
96
|
+
it.effect(
|
|
97
|
+
"works",
|
|
98
|
+
Effect.fn(function*() {
|
|
99
|
+
const layer = _mw.Default.pipe(Layer.provide(SomeService.toLayer()))
|
|
100
|
+
yield* Effect
|
|
101
|
+
.gen(function*() {
|
|
102
|
+
const mw = yield* _mw
|
|
103
|
+
const mwM = mw.effect(
|
|
104
|
+
Object.assign({}, S.Any, { config: { requireRoles: ["manager"] } }),
|
|
105
|
+
(_req) => Effect.void,
|
|
106
|
+
"some-module"
|
|
107
|
+
)
|
|
108
|
+
yield* mwM({}, { "x-user": "test-user", "x-is-manager": "true" })
|
|
109
|
+
})
|
|
110
|
+
.pipe(
|
|
111
|
+
Effect.scoped,
|
|
112
|
+
Effect.provide(layer)
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
expect(
|
|
116
|
+
yield* Effect
|
|
117
|
+
.gen(function*() {
|
|
118
|
+
const mw = yield* _mw
|
|
119
|
+
const mwM = mw.effect(
|
|
120
|
+
Object.assign({}, S.Any, { config: {} }),
|
|
121
|
+
(_req) => Effect.void,
|
|
122
|
+
"some-module"
|
|
123
|
+
)
|
|
124
|
+
yield* mwM({}, {})
|
|
125
|
+
})
|
|
126
|
+
.pipe(
|
|
127
|
+
Effect.scoped,
|
|
128
|
+
Effect.provide(layer),
|
|
129
|
+
Effect.either
|
|
130
|
+
)
|
|
105
131
|
)
|
|
106
|
-
|
|
107
|
-
})
|
|
108
|
-
.pipe(
|
|
109
|
-
Effect.scoped,
|
|
110
|
-
Effect.provide(layer),
|
|
111
|
-
Effect.either,
|
|
112
|
-
Effect.runPromise
|
|
113
|
-
)
|
|
114
|
-
)
|
|
115
|
-
.toEqual(Either.left(new NotLoggedInError()))
|
|
132
|
+
.toEqual(Either.left(new NotLoggedInError()))
|
|
116
133
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
134
|
+
expect(
|
|
135
|
+
yield* Effect
|
|
136
|
+
.gen(function*() {
|
|
137
|
+
const mw = yield* _mw
|
|
138
|
+
const mwM = mw.effect(
|
|
139
|
+
Object.assign({}, S.Any, { config: { requireRoles: ["manager"] } }),
|
|
140
|
+
(_req) => Effect.void,
|
|
141
|
+
"some-module"
|
|
142
|
+
)
|
|
143
|
+
yield* mwM({}, {})
|
|
144
|
+
})
|
|
145
|
+
.pipe(
|
|
146
|
+
Effect.scoped,
|
|
147
|
+
Effect.provide(layer),
|
|
148
|
+
Effect.either
|
|
149
|
+
)
|
|
125
150
|
)
|
|
126
|
-
|
|
127
|
-
})
|
|
128
|
-
.pipe(
|
|
129
|
-
Effect.scoped,
|
|
130
|
-
Effect.provide(layer),
|
|
131
|
-
Effect.either,
|
|
132
|
-
Effect.runPromise
|
|
133
|
-
)
|
|
134
|
-
)
|
|
135
|
-
.toEqual(Either.left(new NotLoggedInError()))
|
|
151
|
+
.toEqual(Either.left(new NotLoggedInError()))
|
|
136
152
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
153
|
+
expect(
|
|
154
|
+
yield* Effect
|
|
155
|
+
.gen(function*() {
|
|
156
|
+
const mw = yield* _mw
|
|
157
|
+
const mwM = mw.effect(
|
|
158
|
+
Object.assign({}, S.Any, { config: { requireRoles: ["manager"] } }),
|
|
159
|
+
(_req) => Effect.void,
|
|
160
|
+
"some-module"
|
|
161
|
+
)
|
|
162
|
+
yield* mwM({}, { "x-user": "test-user" })
|
|
163
|
+
})
|
|
164
|
+
.pipe(
|
|
165
|
+
Effect.scoped,
|
|
166
|
+
Effect.provide(layer),
|
|
167
|
+
Effect.either
|
|
168
|
+
)
|
|
145
169
|
)
|
|
146
|
-
|
|
170
|
+
.toEqual(Either.left(new UnauthorizedError({ message: "don't have the right roles" })))
|
|
147
171
|
})
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
.toEqual(Either.left(new UnauthorizedError({ message: "don't have the right roles" })))
|
|
156
|
-
})
|
|
172
|
+
)
|
|
173
|
+
})
|
|
174
|
+
|
|
175
|
+
testSuite(middleware3)
|
|
176
|
+
testSuite(_middleware3Bis)
|
|
177
|
+
testSuite(_middlewareSideways)
|
|
178
|
+
testSuite(_middlewareSidewaysFully)
|