Comparing version 0.11.5 to 0.12.0
@@ -10,3 +10,3 @@ /** | ||
const INTEGRITY_CHECKSUM = '2579d4c0118e1d20d98165a260d9134e' | ||
const INTEGRITY_CHECKSUM = 'ea757fe0ea4a3107c2559092a72c7b14' | ||
const bannerStyle = 'color:orangered;font-weight:bold;' | ||
@@ -29,3 +29,3 @@ const bypassHeaderName = 'x-msw-bypass' | ||
case 'INTEGRITY_CHECK_REQUEST': { | ||
messageClient(client, { | ||
sendToClient(client, { | ||
type: 'INTEGRITY_CHECK_RESPONSE', | ||
@@ -39,3 +39,3 @@ payload: INTEGRITY_CHECKSUM, | ||
self.__isMswEnabled = true | ||
messageClient(client, { | ||
sendToClient(client, { | ||
type: 'MOCKING_ENABLED', | ||
@@ -72,3 +72,3 @@ payload: true, | ||
function messageClient(client, message) { | ||
function sendToClient(client, message) { | ||
return new Promise((resolve, reject) => { | ||
@@ -89,2 +89,9 @@ const channel = new MessageChannel() | ||
function createResponse(clientMessage) { | ||
return new Response(clientMessage.payload.body, { | ||
...clientMessage.payload, | ||
headers: clientMessage.payload.headers, | ||
}) | ||
} | ||
self.addEventListener('fetch', async function(event) { | ||
@@ -127,3 +134,3 @@ const { clientId, request } = event | ||
const clientResponse = await messageClient(client, { | ||
const rawClientMessage = await sendToClient(client, { | ||
type: 'REQUEST', | ||
@@ -148,14 +155,34 @@ payload: { | ||
if (clientResponse === 'MOCK_NOT_FOUND') { | ||
const clientMessage = JSON.parse(rawClientMessage) | ||
if (clientMessage.type === 'MOCK_NOT_FOUND') { | ||
return resolve(getOriginalResponse()) | ||
} | ||
const mockedResponse = JSON.parse(clientResponse, (key, value) => { | ||
return key === 'headers' ? new Headers(value) : value | ||
}) | ||
if (clientMessage.type === 'INTERNAL_ERROR') { | ||
const parsedBody = JSON.parse(clientMessage.payload.body) | ||
setTimeout( | ||
resolve.bind(this, new Response(mockedResponse.body, mockedResponse)), | ||
mockedResponse.delay, | ||
) | ||
console.error( | ||
`\ | ||
[MSW] Request handler function for "%s %s" has thrown the following exception: | ||
${parsedBody.errorType}: ${parsedBody.message} | ||
(see more detailed error stack trace in the mocked response body) | ||
This exception has been gracefully handled as a 500 response, however, it's strongly recommended to resolve this error. | ||
If you wish to mock an error response, please refer to this guide: https://redd.gitbook.io/msw/recipes/mocking-error-responses\ | ||
`, | ||
request.method, | ||
request.url, | ||
) | ||
return resolve(createResponse(clientMessage)) | ||
} | ||
if (clientMessage.type === 'MOCK_SUCCESS') { | ||
setTimeout( | ||
resolve.bind(this, createResponse(clientMessage)), | ||
clientMessage.delay, | ||
) | ||
} | ||
}).catch((error) => { | ||
@@ -162,0 +189,0 @@ console.error( |
@@ -5,2 +5,3 @@ export interface ServiceWorkerMessage<T> { | ||
} | ||
export declare type ClientMessageTypes = 'MOCK_NOT_FOUND' | 'MOCK_SUCCESS' | 'INTERNAL_ERROR'; | ||
/** | ||
@@ -14,5 +15,8 @@ * Creates a communication channel between the client | ||
*/ | ||
send(message: string): void; | ||
send(message: { | ||
type: ClientMessageTypes; | ||
payload?: string | Record<string, any>; | ||
}): void; | ||
}; | ||
export declare type ServiceWorkerMessageHandler<T> = (message: ServiceWorkerMessage<T>, event: MessageEvent) => void; | ||
export declare const addMessageListener: <T>(type: string, handler: ServiceWorkerMessageHandler<T>, errorHandler?: () => void) => void; |
{ | ||
"name": "msw", | ||
"version": "0.11.5", | ||
"version": "0.12.0", | ||
"description": "Client-side API mocking using Service Workers.", | ||
@@ -35,10 +35,10 @@ "main": "lib/index.js", | ||
"graphql": "^14.6.0", | ||
"node-match-path": "^0.3.0", | ||
"node-match-path": "^0.3.1", | ||
"ramda": "^0.27.0", | ||
"statuses": "^1.5.0", | ||
"yargs": "^15.1.0" | ||
"yargs": "^15.3.1" | ||
}, | ||
"devDependencies": { | ||
"@babel/core": "^7.8.4", | ||
"@babel/preset-env": "^7.8.4", | ||
"@babel/core": "^7.9.0", | ||
"@babel/preset-env": "^7.9.0", | ||
"@types/jest": "^25.1.2", | ||
@@ -48,5 +48,4 @@ "@types/node": "^13.7.7", | ||
"@types/ramda": "^0.26.41", | ||
"@types/webpack-dev-server": "^3.10.0", | ||
"awesome-typescript-loader": "^5.2.1", | ||
"babel-loader": "8.0.6", | ||
"@types/webpack-dev-server": "^3.10.1", | ||
"babel-loader": "^8.1.0", | ||
"babel-minify": "^0.5.1", | ||
@@ -57,11 +56,12 @@ "babel-plugin-ramda": "2.0.0", | ||
"ignore-loader": "^0.1.2", | ||
"jest": "^25.1.0", | ||
"jest": "^25.2.4", | ||
"node-fetch": "^2.6.0", | ||
"prettier": "^1.19.1", | ||
"prettier": "^2.0.2", | ||
"puppeteer": "^2.1.1", | ||
"regenerator-runtime": "0.13.3", | ||
"ts-jest": "^25.2.0", | ||
"ts-node": "^8.6.2", | ||
"regenerator-runtime": "^0.13.5", | ||
"ts-jest": "^25.3.0", | ||
"ts-loader": "^6.2.2", | ||
"ts-node": "^8.8.1", | ||
"typescript": "^3.7.5", | ||
"webpack": "^4.41.6", | ||
"webpack": "^4.42.1", | ||
"webpack-cli": "^3.3.11", | ||
@@ -68,0 +68,0 @@ "webpack-dev-server": "^3.10.3" |
Sorry, the diff of this file is too big to display
189521
42
5105
Updatednode-match-path@^0.3.1
Updatedyargs@^15.3.1