msw 2.6.8 → 2.7.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.
Files changed (52) hide show
  1. package/cli/init.js +9 -9
  2. package/cli/invariant.js +2 -2
  3. package/lib/core/{GraphQLHandler-Cjm7JNGi.d.ts → GraphQLHandler-C5CUIS_N.d.ts} +1 -1
  4. package/lib/core/{GraphQLHandler-B6uni-E_.d.mts → GraphQLHandler-CLv2BIIm.d.mts} +1 -1
  5. package/lib/core/{HttpResponse-DzhqZzTK.d.ts → HttpResponse-5Sn2vNaJ.d.ts} +1 -1
  6. package/lib/core/{HttpResponse-63H9vVoL.d.mts → HttpResponse-CFPhtDH3.d.mts} +1 -1
  7. package/lib/core/HttpResponse.d.mts +1 -1
  8. package/lib/core/HttpResponse.d.ts +1 -1
  9. package/lib/core/HttpResponse.js +3 -0
  10. package/lib/core/HttpResponse.js.map +1 -1
  11. package/lib/core/HttpResponse.mjs +3 -0
  12. package/lib/core/HttpResponse.mjs.map +1 -1
  13. package/lib/core/SetupApi.d.mts +1 -1
  14. package/lib/core/SetupApi.d.ts +1 -1
  15. package/lib/core/getResponse.d.mts +1 -1
  16. package/lib/core/getResponse.d.ts +1 -1
  17. package/lib/core/graphql.d.mts +2 -2
  18. package/lib/core/graphql.d.ts +2 -2
  19. package/lib/core/handlers/GraphQLHandler.d.mts +2 -2
  20. package/lib/core/handlers/GraphQLHandler.d.ts +2 -2
  21. package/lib/core/handlers/HttpHandler.d.mts +1 -1
  22. package/lib/core/handlers/HttpHandler.d.ts +1 -1
  23. package/lib/core/handlers/RequestHandler.d.mts +1 -1
  24. package/lib/core/handlers/RequestHandler.d.ts +1 -1
  25. package/lib/core/http.d.mts +1 -1
  26. package/lib/core/http.d.ts +1 -1
  27. package/lib/core/index.d.mts +2 -2
  28. package/lib/core/index.d.ts +2 -2
  29. package/lib/core/passthrough.d.mts +1 -1
  30. package/lib/core/passthrough.d.ts +1 -1
  31. package/lib/core/utils/HttpResponse/decorators.d.mts +1 -1
  32. package/lib/core/utils/HttpResponse/decorators.d.ts +1 -1
  33. package/lib/core/utils/executeHandlers.d.mts +1 -1
  34. package/lib/core/utils/executeHandlers.d.ts +1 -1
  35. package/lib/core/utils/handleRequest.d.mts +1 -1
  36. package/lib/core/utils/handleRequest.d.ts +1 -1
  37. package/lib/core/utils/internal/isHandlerKind.d.mts +1 -1
  38. package/lib/core/utils/internal/isHandlerKind.d.ts +1 -1
  39. package/lib/core/utils/internal/parseGraphQLRequest.d.mts +2 -2
  40. package/lib/core/utils/internal/parseGraphQLRequest.d.ts +2 -2
  41. package/lib/core/utils/internal/parseMultipartData.d.mts +1 -1
  42. package/lib/core/utils/internal/parseMultipartData.d.ts +1 -1
  43. package/lib/core/utils/internal/requestHandlerUtils.d.mts +1 -1
  44. package/lib/core/utils/internal/requestHandlerUtils.d.ts +1 -1
  45. package/lib/core/ws/handleWebSocketEvent.d.mts +1 -1
  46. package/lib/core/ws/handleWebSocketEvent.d.ts +1 -1
  47. package/lib/iife/index.js +3 -0
  48. package/lib/iife/index.js.map +1 -1
  49. package/lib/mockServiceWorker.js +1 -1
  50. package/package.json +4 -3
  51. package/src/core/HttpResponse.test.ts +81 -10
  52. package/src/core/HttpResponse.ts +8 -1
@@ -8,7 +8,7 @@
8
8
  * - Please do NOT serve this file on production.
9
9
  */
10
10
 
11
- const PACKAGE_VERSION = '2.6.8'
11
+ const PACKAGE_VERSION = '2.7.0'
12
12
  const INTEGRITY_CHECKSUM = '00729d72e3b82faf54ca8b9621dbb96f'
13
13
  const IS_MOCKED_RESPONSE = Symbol('isMockedResponse')
14
14
  const activeClientIds = new Set()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "msw",
3
- "version": "2.6.8",
3
+ "version": "2.7.0",
4
4
  "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.",
5
5
  "main": "./lib/core/index.js",
6
6
  "module": "./lib/core/index.mjs",
@@ -127,12 +127,12 @@
127
127
  "@open-draft/until": "^2.1.0",
128
128
  "@types/cookie": "^0.6.0",
129
129
  "@types/statuses": "^2.0.4",
130
- "chalk": "^4.1.2",
131
130
  "graphql": "^16.8.1",
132
131
  "headers-polyfill": "^4.0.2",
133
132
  "is-node-process": "^1.2.0",
134
133
  "outvariant": "^1.4.3",
135
134
  "path-to-regexp": "^6.3.0",
135
+ "picocolors": "^1.1.1",
136
136
  "strict-event-emitter": "^0.5.1",
137
137
  "type-fest": "^4.26.1",
138
138
  "yargs": "^17.7.2"
@@ -213,11 +213,12 @@
213
213
  "check:exports": "node \"./config/scripts/validate-esm.js\"",
214
214
  "test": "pnpm test:unit && pnpm test:node && pnpm test:browser && pnpm test:native",
215
215
  "test:unit": "vitest",
216
- "test:node": "vitest run --config=./test/node/vitest.config.mts",
216
+ "test:node": "vitest --config=./test/node/vitest.config.mts",
217
217
  "test:native": "vitest --config=./test/native/vitest.config.mts",
218
218
  "test:browser": "playwright test -c ./test/browser/playwright.config.ts",
219
219
  "test:modules:node": "vitest --config=./test/modules/node/vitest.config.mts",
220
220
  "test:modules:browser": "playwright test -c ./test/modules/browser/playwright.config.ts",
221
+ "test:e2e": "vitest run --config=./test/e2e/vitest.config.mts",
221
222
  "test:ts": "vitest --typecheck --config=./test/typings/vitest.config.mts",
222
223
  "release": "release publish",
223
224
  "postinstall": "node -e \"try{require('./config/scripts/postinstall')}catch(e){}\""
@@ -253,18 +253,89 @@ describe('HttpResponse.html()', () => {
253
253
  })
254
254
  })
255
255
 
256
- it('creates an array buffer response', async () => {
257
- const buffer = new TextEncoder().encode('hello world')
258
- const response = HttpResponse.arrayBuffer(buffer)
256
+ describe('HttpResponse.arrayBuffer()', () => {
257
+ it('creates an array buffer response', async () => {
258
+ const buffer = new TextEncoder().encode('hello world')
259
+ const response = HttpResponse.arrayBuffer(buffer)
259
260
 
260
- expect(response.status).toBe(200)
261
- expect(response.statusText).toBe('OK')
262
- expect(response.body).toBeInstanceOf(ReadableStream)
261
+ expect(response.status).toBe(200)
262
+ expect(response.statusText).toBe('OK')
263
+ expect(response.body).toBeInstanceOf(ReadableStream)
263
264
 
264
- const responseData = await response.arrayBuffer()
265
- expect(responseData).toEqual(buffer.buffer)
266
- expect(Object.fromEntries(response.headers.entries())).toEqual({
267
- 'content-length': '11',
265
+ const responseData = await response.arrayBuffer()
266
+ expect(responseData).toEqual(buffer.buffer)
267
+ expect(Object.fromEntries(response.headers.entries())).toEqual({
268
+ 'content-length': '11',
269
+ 'content-type': 'application/octet-stream',
270
+ })
271
+ })
272
+
273
+ it('allows overriding the "Content-Type" response header', async () => {
274
+ const buffer = new TextEncoder().encode('hello world')
275
+ const response = HttpResponse.arrayBuffer(buffer, {
276
+ headers: {
277
+ 'Content-Type': 'text/plain; charset=utf-8',
278
+ },
279
+ })
280
+
281
+ expect(response.status).toBe(200)
282
+ expect(response.statusText).toBe('OK')
283
+ expect(response.body).toBeInstanceOf(ReadableStream)
284
+
285
+ const responseData = await response.arrayBuffer()
286
+ expect(responseData).toEqual(buffer.buffer)
287
+ expect(Object.fromEntries(response.headers.entries())).toEqual({
288
+ 'content-length': '11',
289
+ 'content-type': 'text/plain; charset=utf-8',
290
+ })
291
+ })
292
+
293
+ it('creates an array buffer response from a shared array buffer', async () => {
294
+ const arrayBuffer = new TextEncoder().encode('hello world')
295
+
296
+ // Copy the data from the array buffer to a shared array buffer
297
+ const sharedBuffer = new SharedArrayBuffer(11)
298
+ const sharedView = new Uint8Array(sharedBuffer)
299
+ sharedView.set(arrayBuffer)
300
+
301
+ const response = HttpResponse.arrayBuffer(sharedBuffer)
302
+
303
+ expect(response.status).toBe(200)
304
+ expect(response.statusText).toBe('OK')
305
+ expect(response.body).toBeInstanceOf(ReadableStream)
306
+
307
+ const responseData = await response.arrayBuffer()
308
+ expect(responseData).toEqual(arrayBuffer.buffer)
309
+ expect(Object.fromEntries(response.headers.entries())).toEqual({
310
+ 'content-length': '11',
311
+ 'content-type': 'application/octet-stream',
312
+ })
313
+ })
314
+
315
+ it('allows overriding the "Content-Type" response header for shared array buffers', async () => {
316
+ const arrayBuffer = new TextEncoder().encode('hello world')
317
+
318
+ // Copy the data from the array buffer to a shared array buffer
319
+ const sharedBuffer = new SharedArrayBuffer(11)
320
+ const sharedView = new Uint8Array(sharedBuffer)
321
+ sharedView.set(arrayBuffer)
322
+
323
+ const response = HttpResponse.arrayBuffer(sharedBuffer, {
324
+ headers: {
325
+ 'Content-Type': 'text/plain; charset=utf-8',
326
+ },
327
+ })
328
+
329
+ expect(response.status).toBe(200)
330
+ expect(response.statusText).toBe('OK')
331
+ expect(response.body).toBeInstanceOf(ReadableStream)
332
+
333
+ const responseData = await response.arrayBuffer()
334
+ expect(responseData).toEqual(arrayBuffer.buffer)
335
+ expect(Object.fromEntries(response.headers.entries())).toEqual({
336
+ 'content-length': '11',
337
+ 'content-type': 'text/plain; charset=utf-8',
338
+ })
268
339
  })
269
340
  })
270
341
 
@@ -153,9 +153,16 @@ export class HttpResponse extends Response {
153
153
  *
154
154
  * HttpResponse.arrayBuffer(buffer)
155
155
  */
156
- static arrayBuffer(body?: ArrayBuffer, init?: HttpResponseInit): Response {
156
+ static arrayBuffer(
157
+ body?: ArrayBuffer | SharedArrayBuffer,
158
+ init?: HttpResponseInit,
159
+ ): Response {
157
160
  const responseInit = normalizeResponseInit(init)
158
161
 
162
+ if (!responseInit.headers.has('Content-Type')) {
163
+ responseInit.headers.set('Content-Type', 'application/octet-stream')
164
+ }
165
+
159
166
  if (body && !responseInit.headers.has('Content-Length')) {
160
167
  responseInit.headers.set('Content-Length', body.byteLength.toString())
161
168
  }