msw 2.14.4 → 2.14.6
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/lib/core/experimental/define-network.js +16 -6
- package/lib/core/experimental/define-network.js.map +1 -1
- package/lib/core/experimental/define-network.mjs +16 -6
- package/lib/core/experimental/define-network.mjs.map +1 -1
- package/lib/core/experimental/sources/interceptor-source.js +9 -0
- package/lib/core/experimental/sources/interceptor-source.js.map +1 -1
- package/lib/core/experimental/sources/interceptor-source.mjs +9 -0
- package/lib/core/experimental/sources/interceptor-source.mjs.map +1 -1
- package/lib/core/utils/internal/Disposable.js +19 -1
- package/lib/core/utils/internal/Disposable.js.map +1 -1
- package/lib/core/utils/internal/Disposable.mjs +19 -1
- package/lib/core/utils/internal/Disposable.mjs.map +1 -1
- package/lib/iife/index.js +42 -7
- package/lib/iife/index.js.map +1 -1
- package/lib/mockServiceWorker.js +1 -1
- package/package.json +2 -2
- package/src/core/experimental/define-network.ts +30 -6
- package/src/core/experimental/sources/interceptor-source.ts +14 -0
- package/src/core/utils/internal/Disposable.ts +22 -1
package/lib/mockServiceWorker.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* - Please do NOT modify this file.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
const PACKAGE_VERSION = '2.14.
|
|
10
|
+
const PACKAGE_VERSION = '2.14.6'
|
|
11
11
|
const INTEGRITY_CHECKSUM = '4db4a41e972cec1b64cc569c66952d82'
|
|
12
12
|
const IS_MOCKED_RESPONSE = Symbol('isMockedResponse')
|
|
13
13
|
const activeClientIds = new Set()
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "msw",
|
|
3
|
-
"version": "2.14.
|
|
3
|
+
"version": "2.14.6",
|
|
4
4
|
"description": "Seamless REST/GraphQL API mocking library for browser and Node.js.",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "./lib/core/index.js",
|
|
@@ -286,7 +286,7 @@
|
|
|
286
286
|
"vitest-environment-miniflare": "^2.14.4",
|
|
287
287
|
"webpack": "^5.106.2",
|
|
288
288
|
"webpack-http-server": "^0.5.0",
|
|
289
|
-
"msw": "^2.14.
|
|
289
|
+
"msw": "^2.14.6"
|
|
290
290
|
},
|
|
291
291
|
"peerDependencies": {
|
|
292
292
|
"typescript": ">= 4.8.x"
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
type AnyHandler,
|
|
13
13
|
} from './handlers-controller'
|
|
14
14
|
import { toReadonlyArray } from '../utils/internal/toReadonlyArray'
|
|
15
|
+
import { Disposable } from '../utils/internal/Disposable'
|
|
15
16
|
|
|
16
17
|
type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (
|
|
17
18
|
k: infer I,
|
|
@@ -112,6 +113,7 @@ export function defineNetwork<Sources extends Array<NetworkSource<any>>>(
|
|
|
112
113
|
): NetworkApi<Sources> {
|
|
113
114
|
let readyState: NetworkReadyState = NetworkReadyState.DISABLED
|
|
114
115
|
const events = new Emitter<MergeEventMaps<Sources>>()
|
|
116
|
+
const disposable = new Disposable()
|
|
115
117
|
|
|
116
118
|
const deriveHandlersController = (
|
|
117
119
|
handlers: DefineNetworkOptions<Sources>['handlers'],
|
|
@@ -130,7 +132,6 @@ export function defineNetwork<Sources extends Array<NetworkSource<any>>>(
|
|
|
130
132
|
* certain setup APIs, like `setupServer`, don't await `.enable` (`.listen`).
|
|
131
133
|
*/
|
|
132
134
|
let handlersController = deriveHandlersController(resolvedOptions.handlers)
|
|
133
|
-
let listenersController: AbortController
|
|
134
135
|
|
|
135
136
|
return {
|
|
136
137
|
get readyState() {
|
|
@@ -138,7 +139,10 @@ export function defineNetwork<Sources extends Array<NetworkSource<any>>>(
|
|
|
138
139
|
},
|
|
139
140
|
events,
|
|
140
141
|
configure(options) {
|
|
141
|
-
invariant(
|
|
142
|
+
invariant(
|
|
143
|
+
readyState === NetworkReadyState.DISABLED,
|
|
144
|
+
'Failed to call "configure()" on the network: cannot configure an already enabled network.',
|
|
145
|
+
)
|
|
142
146
|
|
|
143
147
|
if (
|
|
144
148
|
options.handlers &&
|
|
@@ -158,9 +162,18 @@ export function defineNetwork<Sources extends Array<NetworkSource<any>>>(
|
|
|
158
162
|
'Failed to call "enable" on the network: already enabled',
|
|
159
163
|
)
|
|
160
164
|
|
|
161
|
-
listenersController = new AbortController()
|
|
162
165
|
readyState = NetworkReadyState.ENABLED
|
|
163
166
|
|
|
167
|
+
/**
|
|
168
|
+
* @note Use a session object scoped to the current "enable()"
|
|
169
|
+
* to prevent "frame.events" listeners from surviving across enable/disable cycles.
|
|
170
|
+
* @see The note about `AbortController` below.
|
|
171
|
+
*/
|
|
172
|
+
const session = { active: true }
|
|
173
|
+
disposable['subscriptions'].push(() => {
|
|
174
|
+
session.active = false
|
|
175
|
+
})
|
|
176
|
+
|
|
164
177
|
const result = resolvedOptions.sources.map((source) => {
|
|
165
178
|
/**
|
|
166
179
|
* @note Preemptively disable the network source before enabling.
|
|
@@ -171,8 +184,19 @@ export function defineNetwork<Sources extends Array<NetworkSource<any>>>(
|
|
|
171
184
|
NetworkSource.prototype.disable.call(source)
|
|
172
185
|
|
|
173
186
|
source.on('frame', async ({ frame }) => {
|
|
174
|
-
frame.events.on('*', (event) =>
|
|
175
|
-
|
|
187
|
+
frame.events.on('*', (event) => {
|
|
188
|
+
/**
|
|
189
|
+
* @note Prevent event forwarding manually and not via an AbortController
|
|
190
|
+
* because certain runtimes, like Cloudflare, throw when referencing an
|
|
191
|
+
* AbortController created in a different context. Bear in mind that the frame
|
|
192
|
+
* events run in the patched request client context while the AbortController
|
|
193
|
+
* is created outside, in the "defineNetwork" closure, which is a test context.
|
|
194
|
+
*/
|
|
195
|
+
if (!session.active) {
|
|
196
|
+
return
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
events.emit(event)
|
|
176
200
|
})
|
|
177
201
|
|
|
178
202
|
const handlers = frame.getHandlers(handlersController)
|
|
@@ -197,8 +221,8 @@ export function defineNetwork<Sources extends Array<NetworkSource<any>>>(
|
|
|
197
221
|
'Failed to call "disable" on the network: already disabled',
|
|
198
222
|
)
|
|
199
223
|
|
|
200
|
-
listenersController.abort()
|
|
201
224
|
readyState = NetworkReadyState.DISABLED
|
|
225
|
+
disposable.dispose()
|
|
202
226
|
|
|
203
227
|
return colorlessPromiseAll(
|
|
204
228
|
resolvedOptions.sources.map((source) => source.disable()),
|
|
@@ -163,6 +163,20 @@ class InterceptorHttpNetworkFrame extends HttpNetworkFrame {
|
|
|
163
163
|
class InterceptorWebSocketNetworkFrame extends WebSocketNetworkFrame {
|
|
164
164
|
constructor(args: { connection: WebSocketConnectionData }) {
|
|
165
165
|
super({ connection: args.connection })
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* @note Provide a similar frame listener cleanup as for HTTP.
|
|
169
|
+
* When the client connection closes, the handler can no longer be used.
|
|
170
|
+
*/
|
|
171
|
+
args.connection.client.addEventListener(
|
|
172
|
+
'close',
|
|
173
|
+
() => {
|
|
174
|
+
this.events.removeAllListeners()
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
once: true,
|
|
178
|
+
},
|
|
179
|
+
)
|
|
166
180
|
}
|
|
167
181
|
|
|
168
182
|
public errorWith(reason?: unknown): void {
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { devUtils } from './devUtils'
|
|
2
|
+
|
|
1
3
|
export type DisposableSubscription = () => void
|
|
2
4
|
|
|
3
5
|
export class Disposable {
|
|
@@ -5,8 +7,27 @@ export class Disposable {
|
|
|
5
7
|
|
|
6
8
|
public dispose() {
|
|
7
9
|
let subscription: DisposableSubscription | undefined
|
|
10
|
+
const errors: Array<Error> = []
|
|
11
|
+
|
|
8
12
|
while ((subscription = this.subscriptions.shift())) {
|
|
9
|
-
|
|
13
|
+
try {
|
|
14
|
+
subscription()
|
|
15
|
+
} catch (error) {
|
|
16
|
+
if (error instanceof Error) {
|
|
17
|
+
errors.push(error)
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
if (errors.length > 0) {
|
|
23
|
+
console.error(
|
|
24
|
+
new AggregateError(
|
|
25
|
+
errors,
|
|
26
|
+
devUtils.formatMessage(
|
|
27
|
+
'Failed to dispose of some side effects. This is likely an issue with MSW, please report it on GitHub: https://github.com/mswjs/msw/issues',
|
|
28
|
+
),
|
|
29
|
+
),
|
|
30
|
+
)
|
|
10
31
|
}
|
|
11
32
|
}
|
|
12
33
|
}
|