summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Hunteman <huntemanmt@gmail.com>2025-01-24 10:39:16 -0600
committerMichael Hunteman <huntemanmt@gmail.com>2025-01-24 10:39:16 -0600
commit5713d1f4f04563fb96cbea8907cc1d8cdd3edbc2 (patch)
tree4d885dbb9f0b994e69c7aa845e9efbb95934189d
parent30529536ee5137635a9efc483baa05dac198dd0d (diff)
Update npm packages
-rw-r--r--client/package.json59
-rw-r--r--client/public/mockServiceWorker.js54
-rw-r--r--client/src/setup.ts11
3 files changed, 79 insertions, 45 deletions
diff --git a/client/package.json b/client/package.json
index 0849953..4452646 100644
--- a/client/package.json
+++ b/client/package.json
@@ -11,34 +11,39 @@
"test": "vitest"
},
"dependencies": {
- "@emotion/react": "^11.13.3",
- "@emotion/styled": "^11.13.0",
- "@mui/icons-material": "^5.16.7",
- "@mui/material": "^5.16.7",
- "@mui/x-date-pickers": "^7.14.0",
- "@reduxjs/toolkit": "^2.2.1",
+ "@emotion/react": "^11.14.0",
+ "@emotion/styled": "^11.14.0",
+ "@mui/icons-material": "^5.16.14",
+ "@mui/material": "^5.16.14",
+ "@mui/x-date-pickers": "^7.24.0",
+ "@reduxjs/toolkit": "^2.5.0",
"export-to-csv": "^1.4.0",
- "framer-motion": "^11.17.0",
- "material-react-table": "^2.13.1",
- "react": "^18.2.0",
- "react-dom": "^18.2.0",
- "react-hook-form": "^7.50.1",
- "react-redux": "^9.1.0",
- "react-router-dom": "^6.22.0"
+ "framer-motion": "^11.18.2",
+ "material-react-table": "^2.13.3",
+ "react": "^18.3.1",
+ "react-dom": "^18.3.1",
+ "react-hook-form": "^7.54.2",
+ "react-redux": "^9.2.0",
+ "react-router-dom": "^6.28.2"
},
"devDependencies": {
- "@testing-library/jest-dom": "^6.5.0",
- "@testing-library/react": "^16.0.1",
- "@testing-library/user-event": "^14.5.2",
- "@typescript-eslint/eslint-plugin": "^6.21.0",
- "@typescript-eslint/parser": "^6.21.0",
- "eslint": "^8.56.0",
- "eslint-plugin-react-hooks": "^4.6.0",
- "eslint-plugin-react-refresh": "^0.4.5",
- "jsdom": "^25.0.0",
- "msw": "^2.2.1",
- "typescript": "^5.6.2",
- "vite": "^5.4.8",
- "vitest": "^2.1.1"
+ "@testing-library/jest-dom": "^6.6.3",
+ "@testing-library/react": "^16.2.0",
+ "@testing-library/user-event": "^14.6.1",
+ "@typescript-eslint/eslint-plugin": "^8.21.0",
+ "@typescript-eslint/parser": "^8.21.0",
+ "eslint": "^9.18.0",
+ "eslint-plugin-react-hooks": "^5.1.0",
+ "eslint-plugin-react-refresh": "^0.4.18",
+ "jsdom": "^26.0.0",
+ "msw": "^2.7.0",
+ "typescript": "^5.7.3",
+ "vite": "^6.0.11",
+ "vitest": "^3.0.3"
+ },
+ "msw": {
+ "workerDirectory": [
+ "public"
+ ]
}
-}
+} \ No newline at end of file
diff --git a/client/public/mockServiceWorker.js b/client/public/mockServiceWorker.js
index 919d3e1..ec47a9a 100644
--- a/client/public/mockServiceWorker.js
+++ b/client/public/mockServiceWorker.js
@@ -2,13 +2,14 @@
/* tslint:disable */
/**
- * Mock Service Worker (2.2.1).
+ * Mock Service Worker.
* @see https://github.com/mswjs/msw
* - Please do NOT modify this file.
* - Please do NOT serve this file on production.
*/
-const INTEGRITY_CHECKSUM = '223d191a56023cd36aa88c802961b911'
+const PACKAGE_VERSION = '2.7.0'
+const INTEGRITY_CHECKSUM = '00729d72e3b82faf54ca8b9621dbb96f'
const IS_MOCKED_RESPONSE = Symbol('isMockedResponse')
const activeClientIds = new Set()
@@ -48,7 +49,10 @@ self.addEventListener('message', async function (event) {
case 'INTEGRITY_CHECK_REQUEST': {
sendToClient(client, {
type: 'INTEGRITY_CHECK_RESPONSE',
- payload: INTEGRITY_CHECKSUM,
+ payload: {
+ packageVersion: PACKAGE_VERSION,
+ checksum: INTEGRITY_CHECKSUM,
+ },
})
break
}
@@ -58,7 +62,12 @@ self.addEventListener('message', async function (event) {
sendToClient(client, {
type: 'MOCKING_ENABLED',
- payload: true,
+ payload: {
+ client: {
+ id: client.id,
+ frameType: client.frameType,
+ },
+ },
})
break
}
@@ -151,6 +160,10 @@ async function handleRequest(event, requestId) {
async function resolveMainClient(event) {
const client = await self.clients.get(event.clientId)
+ if (activeClientIds.has(event.clientId)) {
+ return client
+ }
+
if (client?.frameType === 'top-level') {
return client
}
@@ -179,12 +192,26 @@ async function getResponse(event, client, requestId) {
const requestClone = request.clone()
function passthrough() {
- const headers = Object.fromEntries(requestClone.headers.entries())
+ // Cast the request headers to a new Headers instance
+ // so the headers can be manipulated with.
+ const headers = new Headers(requestClone.headers)
+
+ // Remove the "accept" header value that marked this request as passthrough.
+ // This prevents request alteration and also keeps it compliant with the
+ // user-defined CORS policies.
+ const acceptHeader = headers.get('accept')
+ if (acceptHeader) {
+ const values = acceptHeader.split(',').map((value) => value.trim())
+ const filteredValues = values.filter(
+ (value) => value !== 'msw/passthrough',
+ )
- // Remove internal MSW request header so the passthrough request
- // complies with any potential CORS preflight checks on the server.
- // Some servers forbid unknown request headers.
- delete headers['x-msw-intention']
+ if (filteredValues.length > 0) {
+ headers.set('accept', filteredValues.join(', '))
+ } else {
+ headers.delete('accept')
+ }
+ }
return fetch(requestClone, { headers })
}
@@ -202,13 +229,6 @@ async function getResponse(event, client, requestId) {
return passthrough()
}
- // Bypass requests with the explicit bypass header.
- // Such requests can be issued by "ctx.fetch()".
- const mswIntention = request.headers.get('x-msw-intention')
- if (['bypass', 'passthrough'].includes(mswIntention)) {
- return passthrough()
- }
-
// Notify the client that a request has been intercepted.
const requestBuffer = await request.arrayBuffer()
const clientMessage = await sendToClient(
@@ -240,7 +260,7 @@ async function getResponse(event, client, requestId) {
return respondWithMock(clientMessage.data)
}
- case 'MOCK_NOT_FOUND': {
+ case 'PASSTHROUGH': {
return passthrough()
}
}
diff --git a/client/src/setup.ts b/client/src/setup.ts
index 0abb5f3..d72d646 100644
--- a/client/src/setup.ts
+++ b/client/src/setup.ts
@@ -1,6 +1,15 @@
-import { afterAll, afterEach, beforeAll } from 'vitest';
+import { afterAll, afterEach, beforeAll, beforeEach, vitest } from 'vitest';
import { server } from './mocks/server';
beforeAll(() => server.listen({ onUnhandledRequest: 'error' }));
+beforeEach(() => {
+ const mockIntersectionObserver = vitest.fn();
+ mockIntersectionObserver.mockReturnValue({
+ observe: () => this,
+ unobserve: () => this,
+ disconnect: () => this,
+ });
+ window.IntersectionObserver = mockIntersectionObserver;
+})
afterAll(() => server.close());
afterEach(() => server.resetHandlers());