@pikku/core 0.11.0 → 0.11.2
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 +35 -1
- package/dist/errors/error-handler.js +3 -3
- package/dist/errors/errors.d.ts +1 -1
- package/dist/errors/errors.js +3 -3
- package/dist/function/function-runner.d.ts +8 -8
- package/dist/function/function-runner.js +88 -23
- package/dist/function/functions.types.d.ts +104 -33
- package/dist/function/functions.types.js +50 -7
- package/dist/handle-error.d.ts +1 -1
- package/dist/handle-error.js +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.js +5 -2
- package/dist/middleware/auth-apikey.d.ts +1 -1
- package/dist/middleware/auth-apikey.js +3 -3
- package/dist/middleware/auth-bearer.d.ts +1 -1
- package/dist/middleware/auth-bearer.js +3 -3
- package/dist/middleware/auth-cookie.d.ts +1 -1
- package/dist/middleware/auth-cookie.js +5 -5
- package/dist/middleware/timeout.d.ts +1 -1
- package/dist/middleware/timeout.js +3 -2
- package/dist/middleware-runner.d.ts +6 -20
- package/dist/middleware-runner.js +19 -20
- package/dist/permissions.d.ts +6 -89
- package/dist/permissions.js +24 -81
- package/dist/pikku-state.d.ts +32 -104
- package/dist/pikku-state.js +140 -66
- package/dist/schema.d.ts +8 -6
- package/dist/schema.js +25 -13
- package/dist/services/user-session-service.d.ts +7 -3
- package/dist/services/user-session-service.js +8 -1
- package/dist/services/workflow-service.d.ts +38 -0
- package/dist/services/workflow-service.js +1 -0
- package/dist/types/core.types.d.ts +40 -41
- package/dist/types/core.types.js +4 -15
- package/dist/types/state.types.d.ts +135 -0
- package/dist/types/state.types.js +1 -0
- package/dist/utils.d.ts +9 -1
- package/dist/utils.js +48 -3
- package/dist/wirings/channel/channel-common.js +2 -3
- package/dist/wirings/channel/channel-handler.d.ts +3 -2
- package/dist/wirings/channel/channel-handler.js +7 -10
- package/dist/wirings/channel/channel-runner.d.ts +2 -2
- package/dist/wirings/channel/channel-runner.js +5 -5
- package/dist/wirings/channel/channel.types.d.ts +10 -5
- package/dist/wirings/channel/local/local-channel-runner.d.ts +1 -1
- package/dist/wirings/channel/local/local-channel-runner.js +19 -26
- package/dist/wirings/channel/log-channels.js +1 -1
- package/dist/wirings/channel/serverless/serverless-channel-runner.d.ts +1 -1
- package/dist/wirings/channel/serverless/serverless-channel-runner.js +43 -48
- package/dist/wirings/cli/channel/cli-channel-runner.js +3 -2
- package/dist/wirings/cli/cli-runner.d.ts +5 -5
- package/dist/wirings/cli/cli-runner.js +20 -38
- package/dist/wirings/cli/cli.types.d.ts +16 -11
- package/dist/wirings/forge-node/forge-node.types.d.ts +120 -0
- package/dist/wirings/forge-node/forge-node.types.js +38 -0
- package/dist/wirings/forge-node/index.d.ts +1 -0
- package/dist/wirings/forge-node/index.js +1 -0
- package/dist/wirings/http/http-runner.d.ts +8 -8
- package/dist/wirings/http/http-runner.js +46 -51
- package/dist/wirings/http/http.types.d.ts +19 -11
- package/dist/wirings/http/log-http-routes.js +1 -1
- package/dist/wirings/http/routers/path-to-regex.js +2 -2
- package/dist/wirings/mcp/mcp-runner.d.ts +2 -2
- package/dist/wirings/mcp/mcp-runner.js +33 -40
- package/dist/wirings/mcp/mcp.types.d.ts +6 -0
- package/dist/wirings/queue/queue-runner.d.ts +3 -3
- package/dist/wirings/queue/queue-runner.js +13 -23
- package/dist/wirings/queue/queue.types.d.ts +4 -11
- package/dist/wirings/rpc/index.d.ts +1 -1
- package/dist/wirings/rpc/index.js +1 -1
- package/dist/wirings/rpc/rpc-runner.d.ts +17 -16
- package/dist/wirings/rpc/rpc-runner.js +98 -61
- package/dist/wirings/rpc/rpc-types.d.ts +7 -0
- package/dist/wirings/scheduler/log-schedulers.js +1 -1
- package/dist/wirings/scheduler/scheduler-runner.d.ts +3 -3
- package/dist/wirings/scheduler/scheduler-runner.js +18 -29
- package/dist/wirings/scheduler/scheduler.types.d.ts +3 -8
- package/dist/wirings/trigger/index.d.ts +2 -0
- package/dist/wirings/trigger/index.js +2 -0
- package/dist/wirings/trigger/trigger-runner.d.ts +29 -0
- package/dist/wirings/trigger/trigger-runner.js +57 -0
- package/dist/wirings/trigger/trigger.types.d.ts +42 -0
- package/dist/wirings/trigger/trigger.types.js +1 -0
- package/dist/wirings/workflow/dsl/index.d.ts +5 -0
- package/dist/wirings/workflow/dsl/index.js +4 -0
- package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +286 -0
- package/dist/wirings/workflow/dsl/workflow-dsl.types.js +5 -0
- package/dist/wirings/workflow/dsl/workflow-runner.d.ts +5 -0
- package/dist/wirings/workflow/dsl/workflow-runner.js +22 -0
- package/dist/wirings/workflow/graph/graph-node.d.ts +122 -0
- package/dist/wirings/workflow/graph/graph-node.js +58 -0
- package/dist/wirings/workflow/graph/graph-runner.d.ts +35 -0
- package/dist/wirings/workflow/graph/graph-runner.js +452 -0
- package/dist/wirings/workflow/graph/index.d.ts +3 -0
- package/dist/wirings/workflow/graph/index.js +3 -0
- package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +95 -0
- package/dist/wirings/workflow/graph/workflow-graph.types.js +15 -0
- package/dist/wirings/workflow/index.d.ts +7 -3
- package/dist/wirings/workflow/index.js +6 -3
- package/dist/wirings/workflow/pikku-workflow-service.d.ts +108 -10
- package/dist/wirings/workflow/pikku-workflow-service.js +274 -165
- package/dist/wirings/workflow/wire-workflow.d.ts +42 -0
- package/dist/wirings/workflow/wire-workflow.js +53 -0
- package/dist/wirings/workflow/workflow-utils.d.ts +23 -0
- package/dist/wirings/workflow/workflow-utils.js +66 -0
- package/dist/wirings/workflow/workflow.types.d.ts +135 -128
- package/package.json +11 -2
- package/src/errors/error-handler.ts +3 -3
- package/src/errors/errors.ts +3 -3
- package/src/factory-functions.test.ts +9 -36
- package/src/function/function-runner.test.ts +58 -69
- package/src/function/function-runner.ts +130 -37
- package/src/function/functions.types.ts +193 -54
- package/src/handle-error.ts +1 -1
- package/src/index.ts +10 -5
- package/src/middleware/auth-apikey.test.ts +360 -0
- package/src/middleware/auth-apikey.ts +3 -7
- package/src/middleware/auth-bearer.test.ts +447 -0
- package/src/middleware/auth-bearer.ts +27 -33
- package/src/middleware/auth-cookie.test.ts +525 -0
- package/src/middleware/auth-cookie.ts +6 -6
- package/src/middleware/timeout.ts +4 -2
- package/src/middleware-runner.test.ts +58 -127
- package/src/middleware-runner.ts +29 -25
- package/src/permissions.test.ts +68 -130
- package/src/permissions.ts +41 -100
- package/src/pikku-state.ts +156 -201
- package/src/schema.ts +42 -13
- package/src/services/user-session-service.ts +14 -4
- package/src/services/workflow-service.ts +74 -0
- package/src/types/core.types.ts +79 -58
- package/src/types/state.types.ts +195 -0
- package/src/utils.ts +59 -4
- package/src/wirings/channel/channel-common.ts +4 -7
- package/src/wirings/channel/channel-handler.ts +17 -23
- package/src/wirings/channel/channel-runner.ts +7 -7
- package/src/wirings/channel/channel.types.ts +14 -11
- package/src/wirings/channel/local/local-channel-runner.test.ts +8 -4
- package/src/wirings/channel/local/local-channel-runner.ts +23 -38
- package/src/wirings/channel/log-channels.ts +1 -1
- package/src/wirings/channel/serverless/serverless-channel-runner.ts +53 -79
- package/src/wirings/cli/channel/cli-channel-runner.ts +4 -3
- package/src/wirings/cli/cli-runner.test.ts +26 -26
- package/src/wirings/cli/cli-runner.ts +34 -71
- package/src/wirings/cli/cli.types.ts +23 -16
- package/src/wirings/forge-node/forge-node.types.ts +135 -0
- package/src/wirings/forge-node/index.ts +1 -0
- package/src/wirings/http/http-runner.test.ts +10 -10
- package/src/wirings/http/http-runner.ts +56 -66
- package/src/wirings/http/http.types.ts +19 -14
- package/src/wirings/http/log-http-routes.ts +1 -1
- package/src/wirings/http/routers/path-to-regex.test.ts +30 -19
- package/src/wirings/http/routers/path-to-regex.ts +2 -2
- package/src/wirings/mcp/mcp-runner.ts +44 -69
- package/src/wirings/mcp/mcp.types.ts +6 -0
- package/src/wirings/queue/queue-runner.test.ts +641 -0
- package/src/wirings/queue/queue-runner.ts +16 -38
- package/src/wirings/queue/queue.types.ts +4 -11
- package/src/wirings/rpc/index.ts +1 -1
- package/src/wirings/rpc/rpc-runner.ts +129 -77
- package/src/wirings/rpc/rpc-types.ts +8 -0
- package/src/wirings/scheduler/log-schedulers.ts +1 -1
- package/src/wirings/scheduler/scheduler-runner.test.ts +627 -0
- package/src/wirings/scheduler/scheduler-runner.ts +29 -55
- package/src/wirings/scheduler/scheduler.types.ts +3 -9
- package/src/wirings/trigger/index.ts +2 -0
- package/src/wirings/trigger/trigger-runner.ts +96 -0
- package/src/wirings/trigger/trigger.types.ts +56 -0
- package/src/wirings/workflow/dsl/index.ts +30 -0
- package/src/wirings/workflow/dsl/workflow-dsl.types.ts +312 -0
- package/src/wirings/workflow/dsl/workflow-runner.ts +27 -0
- package/src/wirings/workflow/graph/graph-node.ts +227 -0
- package/src/wirings/workflow/graph/graph-runner.ts +694 -0
- package/src/wirings/workflow/graph/index.ts +3 -0
- package/src/wirings/workflow/graph/workflow-graph.types.ts +126 -0
- package/src/wirings/workflow/index.ts +60 -12
- package/src/wirings/workflow/pikku-workflow-service.ts +401 -195
- package/src/wirings/workflow/wire-workflow.ts +94 -0
- package/src/wirings/workflow/workflow-utils.ts +120 -0
- package/src/wirings/workflow/workflow.types.ts +167 -188
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/wirings/workflow/workflow-runner.d.ts +0 -35
- package/dist/wirings/workflow/workflow-runner.js +0 -68
- package/src/wirings/workflow/workflow-runner.ts +0 -85
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
runMiddleware,
|
|
7
7
|
} from './middleware-runner.js'
|
|
8
8
|
import { resetPikkuState } from './pikku-state.js'
|
|
9
|
-
import { CorePikkuMiddleware
|
|
9
|
+
import { CorePikkuMiddleware } from './types/core.types.js'
|
|
10
10
|
|
|
11
11
|
beforeEach(() => {
|
|
12
12
|
resetPikkuState()
|
|
@@ -14,50 +14,39 @@ beforeEach(() => {
|
|
|
14
14
|
|
|
15
15
|
describe('combineMiddleware', () => {
|
|
16
16
|
test('should return empty array when no parameters provided', () => {
|
|
17
|
-
const result = combineMiddleware(
|
|
18
|
-
PikkuWiringTypes.http,
|
|
19
|
-
Math.random().toString()
|
|
20
|
-
)
|
|
17
|
+
const result = combineMiddleware('http', Math.random().toString())
|
|
21
18
|
assert.deepEqual(result, [])
|
|
22
19
|
})
|
|
23
20
|
|
|
24
21
|
test('should return empty array when all parameters are undefined', () => {
|
|
25
|
-
const result = combineMiddleware(
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
funcMiddleware: undefined,
|
|
32
|
-
funcTags: undefined,
|
|
33
|
-
}
|
|
34
|
-
)
|
|
22
|
+
const result = combineMiddleware('http', Math.random().toString(), {
|
|
23
|
+
wiringMiddleware: undefined,
|
|
24
|
+
wiringTags: undefined,
|
|
25
|
+
funcMiddleware: undefined,
|
|
26
|
+
funcTags: undefined,
|
|
27
|
+
})
|
|
35
28
|
assert.deepEqual(result, [])
|
|
36
29
|
})
|
|
37
30
|
|
|
38
31
|
test('should combine wiring middleware only', () => {
|
|
39
32
|
const mockMiddleware1: CorePikkuMiddleware = async (
|
|
40
33
|
services,
|
|
41
|
-
|
|
34
|
+
wire,
|
|
42
35
|
next
|
|
43
36
|
) => {
|
|
44
37
|
await next()
|
|
45
38
|
}
|
|
46
39
|
const mockMiddleware2: CorePikkuMiddleware = async (
|
|
47
40
|
services,
|
|
48
|
-
|
|
41
|
+
wire,
|
|
49
42
|
next
|
|
50
43
|
) => {
|
|
51
44
|
await next()
|
|
52
45
|
}
|
|
53
46
|
|
|
54
|
-
const result = combineMiddleware(
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
{
|
|
58
|
-
wireMiddleware: [mockMiddleware1, mockMiddleware2],
|
|
59
|
-
}
|
|
60
|
-
)
|
|
47
|
+
const result = combineMiddleware('http', Math.random().toString(), {
|
|
48
|
+
wireMiddleware: [mockMiddleware1, mockMiddleware2],
|
|
49
|
+
})
|
|
61
50
|
|
|
62
51
|
assert.equal(result.length, 2)
|
|
63
52
|
assert.equal(result[0], mockMiddleware1)
|
|
@@ -67,26 +56,22 @@ describe('combineMiddleware', () => {
|
|
|
67
56
|
test('should combine function middleware only', () => {
|
|
68
57
|
const mockMiddleware1: CorePikkuMiddleware = async (
|
|
69
58
|
services,
|
|
70
|
-
|
|
59
|
+
wire,
|
|
71
60
|
next
|
|
72
61
|
) => {
|
|
73
62
|
await next()
|
|
74
63
|
}
|
|
75
64
|
const mockMiddleware2: CorePikkuMiddleware = async (
|
|
76
65
|
services,
|
|
77
|
-
|
|
66
|
+
wire,
|
|
78
67
|
next
|
|
79
68
|
) => {
|
|
80
69
|
await next()
|
|
81
70
|
}
|
|
82
71
|
|
|
83
|
-
const result = combineMiddleware(
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
{
|
|
87
|
-
funcMiddleware: [mockMiddleware1, mockMiddleware2],
|
|
88
|
-
}
|
|
89
|
-
)
|
|
72
|
+
const result = combineMiddleware('http', Math.random().toString(), {
|
|
73
|
+
funcMiddleware: [mockMiddleware1, mockMiddleware2],
|
|
74
|
+
})
|
|
90
75
|
|
|
91
76
|
assert.equal(result.length, 2)
|
|
92
77
|
assert.equal(result[0], mockMiddleware1)
|
|
@@ -97,14 +82,14 @@ describe('combineMiddleware', () => {
|
|
|
97
82
|
// Setup tagged middleware
|
|
98
83
|
const wiringTagMiddleware: CorePikkuMiddleware = async (
|
|
99
84
|
services,
|
|
100
|
-
|
|
85
|
+
wire,
|
|
101
86
|
next
|
|
102
87
|
) => {
|
|
103
88
|
await next()
|
|
104
89
|
}
|
|
105
90
|
const funcTagMiddleware: CorePikkuMiddleware = async (
|
|
106
91
|
services,
|
|
107
|
-
|
|
92
|
+
wire,
|
|
108
93
|
next
|
|
109
94
|
) => {
|
|
110
95
|
await next()
|
|
@@ -115,29 +100,25 @@ describe('combineMiddleware', () => {
|
|
|
115
100
|
|
|
116
101
|
const wiringMiddleware: CorePikkuMiddleware = async (
|
|
117
102
|
services,
|
|
118
|
-
|
|
103
|
+
wire,
|
|
119
104
|
next
|
|
120
105
|
) => {
|
|
121
106
|
await next()
|
|
122
107
|
}
|
|
123
108
|
const funcMiddleware: CorePikkuMiddleware = async (
|
|
124
109
|
services,
|
|
125
|
-
|
|
110
|
+
wire,
|
|
126
111
|
next
|
|
127
112
|
) => {
|
|
128
113
|
await next()
|
|
129
114
|
}
|
|
130
115
|
|
|
131
|
-
const result = combineMiddleware(
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
{
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
funcInheritedMiddleware: [{ type: 'tag', tag: 'funcTag' }],
|
|
138
|
-
funcMiddleware: [funcMiddleware],
|
|
139
|
-
}
|
|
140
|
-
)
|
|
116
|
+
const result = combineMiddleware('http', Math.random().toString(), {
|
|
117
|
+
wireInheritedMiddleware: [{ type: 'tag', tag: 'wiringTag' }],
|
|
118
|
+
wireMiddleware: [wiringMiddleware],
|
|
119
|
+
funcInheritedMiddleware: [{ type: 'tag', tag: 'funcTag' }],
|
|
120
|
+
funcMiddleware: [funcMiddleware],
|
|
121
|
+
})
|
|
141
122
|
|
|
142
123
|
assert.equal(result.length, 4)
|
|
143
124
|
// Order: wireInheritedMiddleware (tags), wireMiddleware, funcInheritedMiddleware (tags), funcMiddleware
|
|
@@ -150,7 +131,7 @@ describe('combineMiddleware', () => {
|
|
|
150
131
|
test('should handle wiring tags only', () => {
|
|
151
132
|
const taggedMiddleware: CorePikkuMiddleware = async (
|
|
152
133
|
services,
|
|
153
|
-
|
|
134
|
+
wire,
|
|
154
135
|
next
|
|
155
136
|
) => {
|
|
156
137
|
await next()
|
|
@@ -158,13 +139,9 @@ describe('combineMiddleware', () => {
|
|
|
158
139
|
|
|
159
140
|
addMiddleware('testTag', [taggedMiddleware])
|
|
160
141
|
|
|
161
|
-
const result = combineMiddleware(
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
{
|
|
165
|
-
wireInheritedMiddleware: [{ type: 'tag', tag: 'testTag' }],
|
|
166
|
-
}
|
|
167
|
-
)
|
|
142
|
+
const result = combineMiddleware('http', Math.random().toString(), {
|
|
143
|
+
wireInheritedMiddleware: [{ type: 'tag', tag: 'testTag' }],
|
|
144
|
+
})
|
|
168
145
|
|
|
169
146
|
assert.equal(result.length, 1)
|
|
170
147
|
assert.equal(result[0], taggedMiddleware)
|
|
@@ -173,7 +150,7 @@ describe('combineMiddleware', () => {
|
|
|
173
150
|
test('should handle function tags only', () => {
|
|
174
151
|
const taggedMiddleware: CorePikkuMiddleware = async (
|
|
175
152
|
services,
|
|
176
|
-
|
|
153
|
+
wire,
|
|
177
154
|
next
|
|
178
155
|
) => {
|
|
179
156
|
await next()
|
|
@@ -181,47 +158,31 @@ describe('combineMiddleware', () => {
|
|
|
181
158
|
|
|
182
159
|
addMiddleware('funcTestTag', [taggedMiddleware])
|
|
183
160
|
|
|
184
|
-
const result = combineMiddleware(
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
{
|
|
188
|
-
funcInheritedMiddleware: [{ type: 'tag', tag: 'funcTestTag' }],
|
|
189
|
-
}
|
|
190
|
-
)
|
|
161
|
+
const result = combineMiddleware('http', Math.random().toString(), {
|
|
162
|
+
funcInheritedMiddleware: [{ type: 'tag', tag: 'funcTestTag' }],
|
|
163
|
+
})
|
|
191
164
|
|
|
192
165
|
assert.equal(result.length, 1)
|
|
193
166
|
assert.equal(result[0], taggedMiddleware)
|
|
194
167
|
})
|
|
195
168
|
|
|
196
169
|
test('should handle multiple tags', () => {
|
|
197
|
-
const middleware1: CorePikkuMiddleware = async (
|
|
198
|
-
services,
|
|
199
|
-
interaction,
|
|
200
|
-
next
|
|
201
|
-
) => {
|
|
170
|
+
const middleware1: CorePikkuMiddleware = async (services, wire, next) => {
|
|
202
171
|
await next()
|
|
203
172
|
}
|
|
204
|
-
const middleware2: CorePikkuMiddleware = async (
|
|
205
|
-
services,
|
|
206
|
-
interaction,
|
|
207
|
-
next
|
|
208
|
-
) => {
|
|
173
|
+
const middleware2: CorePikkuMiddleware = async (services, wire, next) => {
|
|
209
174
|
await next()
|
|
210
175
|
}
|
|
211
176
|
|
|
212
177
|
addMiddleware('tag1', [middleware1])
|
|
213
178
|
addMiddleware('tag2', [middleware2])
|
|
214
179
|
|
|
215
|
-
const result = combineMiddleware(
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
{ type: 'tag', tag: 'tag2' },
|
|
222
|
-
],
|
|
223
|
-
}
|
|
224
|
-
)
|
|
180
|
+
const result = combineMiddleware('http', Math.random().toString(), {
|
|
181
|
+
wireInheritedMiddleware: [
|
|
182
|
+
{ type: 'tag', tag: 'tag1' },
|
|
183
|
+
{ type: 'tag', tag: 'tag2' },
|
|
184
|
+
],
|
|
185
|
+
})
|
|
225
186
|
|
|
226
187
|
assert.equal(result.length, 2)
|
|
227
188
|
assert.equal(result[0], middleware1)
|
|
@@ -229,29 +190,19 @@ describe('combineMiddleware', () => {
|
|
|
229
190
|
})
|
|
230
191
|
|
|
231
192
|
test('should ignore non-existent tags', () => {
|
|
232
|
-
const middleware: CorePikkuMiddleware = async (
|
|
233
|
-
services,
|
|
234
|
-
interaction,
|
|
235
|
-
next
|
|
236
|
-
) => {
|
|
193
|
+
const middleware: CorePikkuMiddleware = async (services, wire, next) => {
|
|
237
194
|
await next()
|
|
238
195
|
}
|
|
239
196
|
|
|
240
197
|
addMiddleware('existingTag', [middleware])
|
|
241
198
|
|
|
242
|
-
const result = combineMiddleware(
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
],
|
|
250
|
-
funcInheritedMiddleware: [
|
|
251
|
-
{ type: 'tag', tag: 'anotherNonExistentTag' },
|
|
252
|
-
],
|
|
253
|
-
}
|
|
254
|
-
)
|
|
199
|
+
const result = combineMiddleware('http', Math.random().toString(), {
|
|
200
|
+
wireInheritedMiddleware: [
|
|
201
|
+
{ type: 'tag', tag: 'existingTag' },
|
|
202
|
+
{ type: 'tag', tag: 'nonExistentTag' },
|
|
203
|
+
],
|
|
204
|
+
funcInheritedMiddleware: [{ type: 'tag', tag: 'anotherNonExistentTag' }],
|
|
205
|
+
})
|
|
255
206
|
|
|
256
207
|
assert.equal(result.length, 1)
|
|
257
208
|
assert.equal(result[0], middleware)
|
|
@@ -262,20 +213,12 @@ describe('runMiddleware', () => {
|
|
|
262
213
|
test('should deduplicate middleware using Set', async () => {
|
|
263
214
|
const executionOrder: string[] = []
|
|
264
215
|
|
|
265
|
-
const middleware1: CorePikkuMiddleware = async (
|
|
266
|
-
services,
|
|
267
|
-
interaction,
|
|
268
|
-
next
|
|
269
|
-
) => {
|
|
216
|
+
const middleware1: CorePikkuMiddleware = async (services, wire, next) => {
|
|
270
217
|
executionOrder.push('middleware1')
|
|
271
218
|
await next()
|
|
272
219
|
}
|
|
273
220
|
|
|
274
|
-
const middleware2: CorePikkuMiddleware = async (
|
|
275
|
-
services,
|
|
276
|
-
interaction,
|
|
277
|
-
next
|
|
278
|
-
) => {
|
|
221
|
+
const middleware2: CorePikkuMiddleware = async (services, wire, next) => {
|
|
279
222
|
executionOrder.push('middleware2')
|
|
280
223
|
await next()
|
|
281
224
|
}
|
|
@@ -283,7 +226,7 @@ describe('runMiddleware', () => {
|
|
|
283
226
|
await runMiddleware(
|
|
284
227
|
{} as any,
|
|
285
228
|
{} as any,
|
|
286
|
-
combineMiddleware(
|
|
229
|
+
combineMiddleware('rpc', Math.random().toString(), {
|
|
287
230
|
wireMiddleware: [middleware1, middleware2, middleware1, middleware2],
|
|
288
231
|
}),
|
|
289
232
|
async () => {
|
|
@@ -298,21 +241,13 @@ describe('runMiddleware', () => {
|
|
|
298
241
|
test('should execute middleware in correct order', async () => {
|
|
299
242
|
const executionOrder: string[] = []
|
|
300
243
|
|
|
301
|
-
const middleware1: CorePikkuMiddleware = async (
|
|
302
|
-
services,
|
|
303
|
-
interaction,
|
|
304
|
-
next
|
|
305
|
-
) => {
|
|
244
|
+
const middleware1: CorePikkuMiddleware = async (services, wire, next) => {
|
|
306
245
|
executionOrder.push('start1')
|
|
307
246
|
await next()
|
|
308
247
|
executionOrder.push('end1')
|
|
309
248
|
}
|
|
310
249
|
|
|
311
|
-
const middleware2: CorePikkuMiddleware = async (
|
|
312
|
-
services,
|
|
313
|
-
interaction,
|
|
314
|
-
next
|
|
315
|
-
) => {
|
|
250
|
+
const middleware2: CorePikkuMiddleware = async (services, wire, next) => {
|
|
316
251
|
executionOrder.push('start2')
|
|
317
252
|
await next()
|
|
318
253
|
executionOrder.push('end2')
|
|
@@ -349,11 +284,7 @@ describe('runMiddleware', () => {
|
|
|
349
284
|
test('should work without main function', async () => {
|
|
350
285
|
const executionOrder: string[] = []
|
|
351
286
|
|
|
352
|
-
const middleware: CorePikkuMiddleware = async (
|
|
353
|
-
services,
|
|
354
|
-
interaction,
|
|
355
|
-
next
|
|
356
|
-
) => {
|
|
287
|
+
const middleware: CorePikkuMiddleware = async (services, wire, next) => {
|
|
357
288
|
executionOrder.push('middleware')
|
|
358
289
|
await next()
|
|
359
290
|
}
|
package/src/middleware-runner.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { UserSessionService } from './services/user-session-service.js'
|
|
2
1
|
import {
|
|
3
2
|
CoreSingletonServices,
|
|
4
|
-
|
|
3
|
+
PikkuWire,
|
|
5
4
|
CorePikkuMiddleware,
|
|
6
5
|
CorePikkuMiddlewareGroup,
|
|
7
6
|
PikkuWiringTypes,
|
|
@@ -14,7 +13,7 @@ import { freezeDedupe } from './utils.js'
|
|
|
14
13
|
* Runs a chain of middleware functions in sequence before executing the main function.
|
|
15
14
|
*
|
|
16
15
|
* @param services - An object containing services (e.g., singletonServices, userSession, etc.)
|
|
17
|
-
* @param
|
|
16
|
+
* @param wire - The wire context, e.g., { http }.
|
|
18
17
|
* @param middlewares - An array of middleware functions to run.
|
|
19
18
|
* @param main - The main function to execute after all middleware have run.
|
|
20
19
|
* @returns A promise resolving to the result of the main function.
|
|
@@ -28,10 +27,8 @@ import { freezeDedupe } from './utils.js'
|
|
|
28
27
|
* );
|
|
29
28
|
*/
|
|
30
29
|
export const runMiddleware = async <Middleware extends CorePikkuMiddleware>(
|
|
31
|
-
services: CoreSingletonServices
|
|
32
|
-
|
|
33
|
-
},
|
|
34
|
-
interaction: PikkuInteraction,
|
|
30
|
+
services: CoreSingletonServices,
|
|
31
|
+
wire: PikkuWire,
|
|
35
32
|
middlewares: readonly Middleware[],
|
|
36
33
|
main?: () => Promise<unknown>
|
|
37
34
|
): Promise<unknown> => {
|
|
@@ -39,7 +36,7 @@ export const runMiddleware = async <Middleware extends CorePikkuMiddleware>(
|
|
|
39
36
|
let result: any
|
|
40
37
|
const dispatch = async (index: number): Promise<any> => {
|
|
41
38
|
if (middlewares && index < middlewares.length) {
|
|
42
|
-
return await middlewares[index]!(services as any,
|
|
39
|
+
return await middlewares[index]!(services as any, wire, () =>
|
|
43
40
|
dispatch(index + 1)
|
|
44
41
|
)
|
|
45
42
|
} else if (main) {
|
|
@@ -85,9 +82,10 @@ export const runMiddleware = async <Middleware extends CorePikkuMiddleware>(
|
|
|
85
82
|
*/
|
|
86
83
|
export const addMiddleware = <PikkuMiddleware extends CorePikkuMiddleware>(
|
|
87
84
|
tag: string,
|
|
88
|
-
middleware: CorePikkuMiddlewareGroup
|
|
85
|
+
middleware: CorePikkuMiddlewareGroup,
|
|
86
|
+
packageName: string | null = null
|
|
89
87
|
): CorePikkuMiddlewareGroup => {
|
|
90
|
-
const tagGroups = pikkuState('middleware', 'tagGroup')
|
|
88
|
+
const tagGroups = pikkuState(packageName, 'middleware', 'tagGroup')
|
|
91
89
|
tagGroups[tag] = middleware
|
|
92
90
|
return middleware
|
|
93
91
|
}
|
|
@@ -103,10 +101,8 @@ export const addMiddleware = <PikkuMiddleware extends CorePikkuMiddleware>(
|
|
|
103
101
|
*
|
|
104
102
|
* @internal
|
|
105
103
|
*/
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
): CorePikkuMiddleware | undefined => {
|
|
109
|
-
const middlewareStore = pikkuState('misc', 'middleware')
|
|
104
|
+
const getMiddlewareByName = (name: string): CorePikkuMiddleware | undefined => {
|
|
105
|
+
const middlewareStore = pikkuState(null, 'misc', 'middleware')
|
|
110
106
|
const middleware = middlewareStore[name]
|
|
111
107
|
return middleware?.[0]
|
|
112
108
|
}
|
|
@@ -115,14 +111,14 @@ const middlewareCache: Record<
|
|
|
115
111
|
PikkuWiringTypes,
|
|
116
112
|
Record<string, readonly CorePikkuMiddleware[]>
|
|
117
113
|
> = {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
114
|
+
http: {},
|
|
115
|
+
rpc: {},
|
|
116
|
+
channel: {},
|
|
117
|
+
queue: {},
|
|
118
|
+
scheduler: {},
|
|
119
|
+
mcp: {},
|
|
120
|
+
cli: {},
|
|
121
|
+
workflow: {},
|
|
126
122
|
}
|
|
127
123
|
|
|
128
124
|
/**
|
|
@@ -155,11 +151,13 @@ export const combineMiddleware = (
|
|
|
155
151
|
wireMiddleware,
|
|
156
152
|
funcInheritedMiddleware,
|
|
157
153
|
funcMiddleware,
|
|
154
|
+
packageName = null,
|
|
158
155
|
}: {
|
|
159
156
|
wireInheritedMiddleware?: MiddlewareMetadata[]
|
|
160
157
|
wireMiddleware?: CorePikkuMiddleware[]
|
|
161
158
|
funcInheritedMiddleware?: MiddlewareMetadata[]
|
|
162
159
|
funcMiddleware?: CorePikkuMiddleware[]
|
|
160
|
+
packageName?: string | null
|
|
163
161
|
} = {}
|
|
164
162
|
): readonly CorePikkuMiddleware[] => {
|
|
165
163
|
if (middlewareCache[wireType][uid]) {
|
|
@@ -173,14 +171,18 @@ export const combineMiddleware = (
|
|
|
173
171
|
for (const meta of wireInheritedMiddleware) {
|
|
174
172
|
if (meta.type === 'http') {
|
|
175
173
|
// Look up HTTP middleware group from pikkuState
|
|
176
|
-
const group = pikkuState('middleware', 'httpGroup')[
|
|
174
|
+
const group = pikkuState(packageName, 'middleware', 'httpGroup')[
|
|
175
|
+
meta.route
|
|
176
|
+
]
|
|
177
177
|
if (group) {
|
|
178
178
|
// At runtime, all factories should be resolved to middleware
|
|
179
179
|
resolved.push(...(group as CorePikkuMiddleware[]))
|
|
180
180
|
}
|
|
181
181
|
} else if (meta.type === 'tag') {
|
|
182
182
|
// Look up tag middleware group from pikkuState
|
|
183
|
-
const group = pikkuState('middleware', 'tagGroup')[
|
|
183
|
+
const group = pikkuState(packageName, 'middleware', 'tagGroup')[
|
|
184
|
+
meta.tag
|
|
185
|
+
]
|
|
184
186
|
if (group) {
|
|
185
187
|
// At runtime, all factories should be resolved to middleware
|
|
186
188
|
resolved.push(...(group as CorePikkuMiddleware[]))
|
|
@@ -205,7 +207,9 @@ export const combineMiddleware = (
|
|
|
205
207
|
for (const meta of funcInheritedMiddleware) {
|
|
206
208
|
if (meta.type === 'tag') {
|
|
207
209
|
// Look up tag middleware group from pikkuState
|
|
208
|
-
const group = pikkuState('middleware', 'tagGroup')[
|
|
210
|
+
const group = pikkuState(packageName, 'middleware', 'tagGroup')[
|
|
211
|
+
meta.tag
|
|
212
|
+
]
|
|
209
213
|
if (group) {
|
|
210
214
|
// At runtime, all factories should be resolved to middleware
|
|
211
215
|
resolved.push(...(group as CorePikkuMiddleware[]))
|