diff --git a/.githooks/pre-commit b/.githooks/pre-commit index 1664da5..bae6b61 100755 --- a/.githooks/pre-commit +++ b/.githooks/pre-commit @@ -16,11 +16,11 @@ run_in_dir() { } if echo "$STAGED" | grep -q '^apps/with-lingui/'; then - run_in_dir apps/with-lingui vp staged + run_in_dir apps/with-lingui pnpm exec vp staged fi if echo "$STAGED" | grep -q '^apps/basic/'; then - run_in_dir apps/basic vp staged + run_in_dir apps/basic pnpm exec vp staged fi if echo "$STAGED" | grep -q '^packages/create/'; then diff --git a/apps/basic/public/mockServiceWorker.js b/apps/basic/public/mockServiceWorker.js index 0c970ef..04919bb 100644 --- a/apps/basic/public/mockServiceWorker.js +++ b/apps/basic/public/mockServiceWorker.js @@ -7,114 +7,111 @@ * - Please do NOT modify this file. */ -const PACKAGE_VERSION = '2.15.0' -const INTEGRITY_CHECKSUM = '03cb67ac84128e63d7cd722a6e5b7f1e' -const IS_MOCKED_RESPONSE = Symbol('isMockedResponse') -const activeClientIds = new Set() +const PACKAGE_VERSION = "2.15.0"; +const INTEGRITY_CHECKSUM = "03cb67ac84128e63d7cd722a6e5b7f1e"; +const IS_MOCKED_RESPONSE = Symbol("isMockedResponse"); +const activeClientIds = new Set(); -addEventListener('install', function () { - self.skipWaiting() -}) +addEventListener("install", function () { + self.skipWaiting(); +}); -addEventListener('activate', function (event) { - event.waitUntil(self.clients.claim()) -}) +addEventListener("activate", function (event) { + event.waitUntil(self.clients.claim()); +}); -addEventListener('message', async function (event) { - const clientId = Reflect.get(event.source || {}, 'id') +addEventListener("message", async function (event) { + const clientId = Reflect.get(event.source || {}, "id"); if (!clientId || !self.clients) { - return + return; } - const client = await self.clients.get(clientId) + const client = await self.clients.get(clientId); if (!client) { - return + return; } const allClients = await self.clients.matchAll({ - type: 'window', - }) + type: "window", + }); switch (event.data) { - case 'KEEPALIVE_REQUEST': { + case "KEEPALIVE_REQUEST": { sendToClient(client, { - type: 'KEEPALIVE_RESPONSE', - }) - break + type: "KEEPALIVE_RESPONSE", + }); + break; } - case 'INTEGRITY_CHECK_REQUEST': { + case "INTEGRITY_CHECK_REQUEST": { sendToClient(client, { - type: 'INTEGRITY_CHECK_RESPONSE', + type: "INTEGRITY_CHECK_RESPONSE", payload: { packageVersion: PACKAGE_VERSION, checksum: INTEGRITY_CHECKSUM, }, - }) - break + }); + break; } - case 'MOCK_ACTIVATE': { - activeClientIds.add(clientId) + case "MOCK_ACTIVATE": { + activeClientIds.add(clientId); sendToClient(client, { - type: 'MOCKING_ENABLED', + type: "MOCKING_ENABLED", payload: { client: { id: client.id, frameType: client.frameType, }, }, - }) - break + }); + break; } - case 'CLIENT_CLOSED': { - activeClientIds.delete(clientId) + case "CLIENT_CLOSED": { + activeClientIds.delete(clientId); const remainingClients = allClients.filter((client) => { - return client.id !== clientId - }) + return client.id !== clientId; + }); // Unregister itself when there are no more clients if (remainingClients.length === 0) { - self.registration.unregister() + self.registration.unregister(); } - break + break; } } -}) +}); -addEventListener('fetch', function (event) { - const requestInterceptedAt = Date.now() +addEventListener("fetch", function (event) { + const requestInterceptedAt = Date.now(); // Bypass navigation requests. - if (event.request.mode === 'navigate') { - return + if (event.request.mode === "navigate") { + return; } // Opening the DevTools triggers the "only-if-cached" request // that cannot be handled by the worker. Bypass such requests. - if ( - event.request.cache === 'only-if-cached' && - event.request.mode !== 'same-origin' - ) { - return + if (event.request.cache === "only-if-cached" && event.request.mode !== "same-origin") { + return; } // Bypass all requests when there are no active clients. // Prevents the self-unregistered worked from handling requests // after it's been terminated (still remains active until the next reload). if (activeClientIds.size === 0) { - return + return; } - const requestId = crypto.randomUUID() - event.respondWith(handleRequest(event, requestId, requestInterceptedAt)) -}) + const requestId = crypto.randomUUID(); + event.respondWith(handleRequest(event, requestId, requestInterceptedAt)); +}); /** * @param {FetchEvent} event @@ -122,20 +119,15 @@ addEventListener('fetch', function (event) { * @param {number} requestInterceptedAt */ async function handleRequest(event, requestId, requestInterceptedAt) { - const client = await resolveMainClient(event) - const requestCloneForEvents = event.request.clone() - const response = await getResponse( - event, - client, - requestId, - requestInterceptedAt, - ) + const client = await resolveMainClient(event); + const requestCloneForEvents = event.request.clone(); + const response = await getResponse(event, client, requestId, requestInterceptedAt); // Send back the response clone for the "response:*" life-cycle events. // Ensure MSW is active and ready to handle the message, otherwise // this message will pend indefinitely. if (client && activeClientIds.has(client.id)) { - const serializedRequest = await serializeRequest(requestCloneForEvents) + const serializedRequest = await serializeRequest(requestCloneForEvents); // Omit the body of server-sent event stream responses. // Cloning such responses would prevent client-side stream cancelations @@ -143,17 +135,17 @@ async function handleRequest(event, requestId, requestInterceptedAt) { // source once both of its branches cancel) and would buffer the // entire stream into the unconsumed clone indefinitely. const isEventStreamResponse = response.headers - .get('content-type') + .get("content-type") ?.toLowerCase() - .startsWith('text/event-stream') + .startsWith("text/event-stream"); // Clone the response so both the client and the library could consume it. - const responseClone = isEventStreamResponse ? null : response.clone() + const responseClone = isEventStreamResponse ? null : response.clone(); sendToClient( client, { - type: 'RESPONSE', + type: "RESPONSE", payload: { isMockedResponse: IS_MOCKED_RESPONSE in response, request: { @@ -169,13 +161,11 @@ async function handleRequest(event, requestId, requestInterceptedAt) { }, }, }, - responseClone && responseClone.body - ? [serializedRequest.body, responseClone.body] - : [], - ) + responseClone && responseClone.body ? [serializedRequest.body, responseClone.body] : [], + ); } - return response + return response; } /** @@ -187,30 +177,30 @@ async function handleRequest(event, requestId, requestInterceptedAt) { * @returns {Promise} */ async function resolveMainClient(event) { - const client = await self.clients.get(event.clientId) + const client = await self.clients.get(event.clientId); if (activeClientIds.has(event.clientId)) { - return client + return client; } - if (client?.frameType === 'top-level') { - return client + if (client?.frameType === "top-level") { + return client; } const allClients = await self.clients.matchAll({ - type: 'window', - }) + type: "window", + }); return allClients .filter((client) => { // Get only those clients that are currently visible. - return client.visibilityState === 'visible' + return client.visibilityState === "visible"; }) .find((client) => { // Find the client ID that's recorded in the // set of clients that have registered the worker. - return activeClientIds.has(client.id) - }) + return activeClientIds.has(client.id); + }); } /** @@ -223,36 +213,34 @@ async function resolveMainClient(event) { async function getResponse(event, client, requestId, requestInterceptedAt) { // Clone the request because it might've been already used // (i.e. its body has been read and sent to the client). - const requestClone = event.request.clone() + const requestClone = event.request.clone(); function passthrough() { // Cast the request headers to a new Headers instance // so the headers can be manipulated with. - const headers = new Headers(requestClone.headers) + 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') + const acceptHeader = headers.get("accept"); if (acceptHeader) { - const values = acceptHeader.split(',').map((value) => value.trim()) - const filteredValues = values.filter( - (value) => value !== 'msw/passthrough', - ) + const values = acceptHeader.split(",").map((value) => value.trim()); + const filteredValues = values.filter((value) => value !== "msw/passthrough"); if (filteredValues.length > 0) { - headers.set('accept', filteredValues.join(', ')) + headers.set("accept", filteredValues.join(", ")); } else { - headers.delete('accept') + headers.delete("accept"); } } - return fetch(requestClone, { headers }) + return fetch(requestClone, { headers }); } // Bypass mocking when the client is not active. if (!client) { - return passthrough() + return passthrough(); } // Bypass initial page load requests (i.e. static assets). @@ -260,15 +248,15 @@ async function getResponse(event, client, requestId, requestInterceptedAt) { // means that MSW hasn't dispatched the "MOCK_ACTIVATE" event yet // and is not ready to handle requests. if (!activeClientIds.has(client.id)) { - return passthrough() + return passthrough(); } // Notify the client that a request has been intercepted. - const serializedRequest = await serializeRequest(event.request) + const serializedRequest = await serializeRequest(event.request); const clientMessage = await sendToClient( client, { - type: 'REQUEST', + type: "REQUEST", payload: { id: requestId, interceptedAt: requestInterceptedAt, @@ -276,19 +264,19 @@ async function getResponse(event, client, requestId, requestInterceptedAt) { }, }, [serializedRequest.body], - ) + ); switch (clientMessage.type) { - case 'MOCK_RESPONSE': { - return respondWithMock(clientMessage.data) + case "MOCK_RESPONSE": { + return respondWithMock(clientMessage.data); } - case 'PASSTHROUGH': { - return passthrough() + case "PASSTHROUGH": { + return passthrough(); } } - return passthrough() + return passthrough(); } /** @@ -299,21 +287,18 @@ async function getResponse(event, client, requestId, requestInterceptedAt) { */ function sendToClient(client, message, transferrables = []) { return new Promise((resolve, reject) => { - const channel = new MessageChannel() + const channel = new MessageChannel(); channel.port1.onmessage = (event) => { if (event.data && event.data.error) { - return reject(event.data.error) + return reject(event.data.error); } - resolve(event.data) - } + resolve(event.data); + }; - client.postMessage(message, [ - channel.port2, - ...transferrables.filter(Boolean), - ]) - }) + client.postMessage(message, [channel.port2, ...transferrables.filter(Boolean)]); + }); } /** @@ -326,17 +311,17 @@ function respondWithMock(response) { // instance will have status code set to 0. Since it's not possible to create // a Response instance with status code 0, handle that use-case separately. if (response.status === 0) { - return Response.error() + return Response.error(); } - const mockedResponse = new Response(response.body, response) + const mockedResponse = new Response(response.body, response); Reflect.defineProperty(mockedResponse, IS_MOCKED_RESPONSE, { value: true, enumerable: true, - }) + }); - return mockedResponse + return mockedResponse; } /** @@ -357,5 +342,5 @@ async function serializeRequest(request) { referrerPolicy: request.referrerPolicy, body: await request.arrayBuffer(), keepalive: request.keepalive, - } + }; } diff --git a/apps/basic/src/api/request.ts b/apps/basic/src/api/request.ts index 0c425e1..692a940 100644 --- a/apps/basic/src/api/request.ts +++ b/apps/basic/src/api/request.ts @@ -60,9 +60,7 @@ type Envelope = { message?: string; }; -function cleanParams( - params?: Record, -): Record | undefined { +function cleanParams(params?: Record): Record | undefined { if (!params) return undefined; const out: Record = {}; for (const [key, value] of Object.entries(params)) { @@ -163,10 +161,7 @@ client.interceptors.response.use( } if (status != null) { - throw new HttpError( - status, - `HTTP ${status}: ${error.response?.statusText ?? "Error"}`, - ); + throw new HttpError(status, `HTTP ${status}: ${error.response?.statusText ?? "Error"}`); } throw error; @@ -248,8 +243,7 @@ export function defineApi< : [args: CallArgs, options?: CallOptions] ) => Promise> { const method: HttpMethod = def.method ?? "GET"; - const segmentCount = - (def.params ? 1 : 0) + (def.query ? 1 : 0) + (def.body ? 1 : 0); + const segmentCount = (def.params ? 1 : 0) + (def.query ? 1 : 0) + (def.body ? 1 : 0); return async (...allArgs: unknown[]): Promise> => { let callArgs: unknown; diff --git a/apps/basic/src/api/schemas.ts b/apps/basic/src/api/schemas.ts index 90c1978..b2245d5 100644 --- a/apps/basic/src/api/schemas.ts +++ b/apps/basic/src/api/schemas.ts @@ -148,7 +148,6 @@ export const IdParamsSchema = z.object({ export type IdParams = z.infer; - export const SearchParamsSchema = z.object({ page: z.number().int().positive().catch(1), pageSize: z.number().int().positive().catch(10), diff --git a/apps/basic/src/api/user.ts b/apps/basic/src/api/user.ts index 77ccd51..d71f2d8 100644 --- a/apps/basic/src/api/user.ts +++ b/apps/basic/src/api/user.ts @@ -8,12 +8,7 @@ import { UpdateUserRequestSchema, UserSchema, } from "@/api/schemas"; -import type { - CreateUserRequest, - ListUsersQuery, - UpdateUserRequest, - User, -} from "@/api/schemas"; +import type { CreateUserRequest, ListUsersQuery, UpdateUserRequest, User } from "@/api/schemas"; export const USER_ENDPOINTS = { list: "/api/users", diff --git a/apps/basic/src/routes/_auth/users/index.tsx b/apps/basic/src/routes/_auth/users/index.tsx index 1cd95b1..d4ad497 100644 --- a/apps/basic/src/routes/_auth/users/index.tsx +++ b/apps/basic/src/routes/_auth/users/index.tsx @@ -2,13 +2,7 @@ import { createFileRoute, useNavigate } from "@tanstack/react-router"; import { Avatar, Button, Space, Form, App, Dropdown, theme, Tag, Flex } from "antd"; import type { TablePaginationConfig } from "antd/es/table/interface"; import { useMemo, useRef, useState } from "react"; -import { - createUser, - deleteUser, - listUsers, - updateUser, - userQueryKeys, -} from "@/api/user"; +import { createUser, deleteUser, listUsers, updateUser, userQueryKeys } from "@/api/user"; import type { User, CreateUserRequest } from "@/api/schemas"; import { z } from "zod/v4"; import { MoreVertical, Pencil, Trash2 } from "lucide-react"; diff --git a/apps/with-lingui/public/mockServiceWorker.js b/apps/with-lingui/public/mockServiceWorker.js index 0c970ef..04919bb 100644 --- a/apps/with-lingui/public/mockServiceWorker.js +++ b/apps/with-lingui/public/mockServiceWorker.js @@ -7,114 +7,111 @@ * - Please do NOT modify this file. */ -const PACKAGE_VERSION = '2.15.0' -const INTEGRITY_CHECKSUM = '03cb67ac84128e63d7cd722a6e5b7f1e' -const IS_MOCKED_RESPONSE = Symbol('isMockedResponse') -const activeClientIds = new Set() +const PACKAGE_VERSION = "2.15.0"; +const INTEGRITY_CHECKSUM = "03cb67ac84128e63d7cd722a6e5b7f1e"; +const IS_MOCKED_RESPONSE = Symbol("isMockedResponse"); +const activeClientIds = new Set(); -addEventListener('install', function () { - self.skipWaiting() -}) +addEventListener("install", function () { + self.skipWaiting(); +}); -addEventListener('activate', function (event) { - event.waitUntil(self.clients.claim()) -}) +addEventListener("activate", function (event) { + event.waitUntil(self.clients.claim()); +}); -addEventListener('message', async function (event) { - const clientId = Reflect.get(event.source || {}, 'id') +addEventListener("message", async function (event) { + const clientId = Reflect.get(event.source || {}, "id"); if (!clientId || !self.clients) { - return + return; } - const client = await self.clients.get(clientId) + const client = await self.clients.get(clientId); if (!client) { - return + return; } const allClients = await self.clients.matchAll({ - type: 'window', - }) + type: "window", + }); switch (event.data) { - case 'KEEPALIVE_REQUEST': { + case "KEEPALIVE_REQUEST": { sendToClient(client, { - type: 'KEEPALIVE_RESPONSE', - }) - break + type: "KEEPALIVE_RESPONSE", + }); + break; } - case 'INTEGRITY_CHECK_REQUEST': { + case "INTEGRITY_CHECK_REQUEST": { sendToClient(client, { - type: 'INTEGRITY_CHECK_RESPONSE', + type: "INTEGRITY_CHECK_RESPONSE", payload: { packageVersion: PACKAGE_VERSION, checksum: INTEGRITY_CHECKSUM, }, - }) - break + }); + break; } - case 'MOCK_ACTIVATE': { - activeClientIds.add(clientId) + case "MOCK_ACTIVATE": { + activeClientIds.add(clientId); sendToClient(client, { - type: 'MOCKING_ENABLED', + type: "MOCKING_ENABLED", payload: { client: { id: client.id, frameType: client.frameType, }, }, - }) - break + }); + break; } - case 'CLIENT_CLOSED': { - activeClientIds.delete(clientId) + case "CLIENT_CLOSED": { + activeClientIds.delete(clientId); const remainingClients = allClients.filter((client) => { - return client.id !== clientId - }) + return client.id !== clientId; + }); // Unregister itself when there are no more clients if (remainingClients.length === 0) { - self.registration.unregister() + self.registration.unregister(); } - break + break; } } -}) +}); -addEventListener('fetch', function (event) { - const requestInterceptedAt = Date.now() +addEventListener("fetch", function (event) { + const requestInterceptedAt = Date.now(); // Bypass navigation requests. - if (event.request.mode === 'navigate') { - return + if (event.request.mode === "navigate") { + return; } // Opening the DevTools triggers the "only-if-cached" request // that cannot be handled by the worker. Bypass such requests. - if ( - event.request.cache === 'only-if-cached' && - event.request.mode !== 'same-origin' - ) { - return + if (event.request.cache === "only-if-cached" && event.request.mode !== "same-origin") { + return; } // Bypass all requests when there are no active clients. // Prevents the self-unregistered worked from handling requests // after it's been terminated (still remains active until the next reload). if (activeClientIds.size === 0) { - return + return; } - const requestId = crypto.randomUUID() - event.respondWith(handleRequest(event, requestId, requestInterceptedAt)) -}) + const requestId = crypto.randomUUID(); + event.respondWith(handleRequest(event, requestId, requestInterceptedAt)); +}); /** * @param {FetchEvent} event @@ -122,20 +119,15 @@ addEventListener('fetch', function (event) { * @param {number} requestInterceptedAt */ async function handleRequest(event, requestId, requestInterceptedAt) { - const client = await resolveMainClient(event) - const requestCloneForEvents = event.request.clone() - const response = await getResponse( - event, - client, - requestId, - requestInterceptedAt, - ) + const client = await resolveMainClient(event); + const requestCloneForEvents = event.request.clone(); + const response = await getResponse(event, client, requestId, requestInterceptedAt); // Send back the response clone for the "response:*" life-cycle events. // Ensure MSW is active and ready to handle the message, otherwise // this message will pend indefinitely. if (client && activeClientIds.has(client.id)) { - const serializedRequest = await serializeRequest(requestCloneForEvents) + const serializedRequest = await serializeRequest(requestCloneForEvents); // Omit the body of server-sent event stream responses. // Cloning such responses would prevent client-side stream cancelations @@ -143,17 +135,17 @@ async function handleRequest(event, requestId, requestInterceptedAt) { // source once both of its branches cancel) and would buffer the // entire stream into the unconsumed clone indefinitely. const isEventStreamResponse = response.headers - .get('content-type') + .get("content-type") ?.toLowerCase() - .startsWith('text/event-stream') + .startsWith("text/event-stream"); // Clone the response so both the client and the library could consume it. - const responseClone = isEventStreamResponse ? null : response.clone() + const responseClone = isEventStreamResponse ? null : response.clone(); sendToClient( client, { - type: 'RESPONSE', + type: "RESPONSE", payload: { isMockedResponse: IS_MOCKED_RESPONSE in response, request: { @@ -169,13 +161,11 @@ async function handleRequest(event, requestId, requestInterceptedAt) { }, }, }, - responseClone && responseClone.body - ? [serializedRequest.body, responseClone.body] - : [], - ) + responseClone && responseClone.body ? [serializedRequest.body, responseClone.body] : [], + ); } - return response + return response; } /** @@ -187,30 +177,30 @@ async function handleRequest(event, requestId, requestInterceptedAt) { * @returns {Promise} */ async function resolveMainClient(event) { - const client = await self.clients.get(event.clientId) + const client = await self.clients.get(event.clientId); if (activeClientIds.has(event.clientId)) { - return client + return client; } - if (client?.frameType === 'top-level') { - return client + if (client?.frameType === "top-level") { + return client; } const allClients = await self.clients.matchAll({ - type: 'window', - }) + type: "window", + }); return allClients .filter((client) => { // Get only those clients that are currently visible. - return client.visibilityState === 'visible' + return client.visibilityState === "visible"; }) .find((client) => { // Find the client ID that's recorded in the // set of clients that have registered the worker. - return activeClientIds.has(client.id) - }) + return activeClientIds.has(client.id); + }); } /** @@ -223,36 +213,34 @@ async function resolveMainClient(event) { async function getResponse(event, client, requestId, requestInterceptedAt) { // Clone the request because it might've been already used // (i.e. its body has been read and sent to the client). - const requestClone = event.request.clone() + const requestClone = event.request.clone(); function passthrough() { // Cast the request headers to a new Headers instance // so the headers can be manipulated with. - const headers = new Headers(requestClone.headers) + 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') + const acceptHeader = headers.get("accept"); if (acceptHeader) { - const values = acceptHeader.split(',').map((value) => value.trim()) - const filteredValues = values.filter( - (value) => value !== 'msw/passthrough', - ) + const values = acceptHeader.split(",").map((value) => value.trim()); + const filteredValues = values.filter((value) => value !== "msw/passthrough"); if (filteredValues.length > 0) { - headers.set('accept', filteredValues.join(', ')) + headers.set("accept", filteredValues.join(", ")); } else { - headers.delete('accept') + headers.delete("accept"); } } - return fetch(requestClone, { headers }) + return fetch(requestClone, { headers }); } // Bypass mocking when the client is not active. if (!client) { - return passthrough() + return passthrough(); } // Bypass initial page load requests (i.e. static assets). @@ -260,15 +248,15 @@ async function getResponse(event, client, requestId, requestInterceptedAt) { // means that MSW hasn't dispatched the "MOCK_ACTIVATE" event yet // and is not ready to handle requests. if (!activeClientIds.has(client.id)) { - return passthrough() + return passthrough(); } // Notify the client that a request has been intercepted. - const serializedRequest = await serializeRequest(event.request) + const serializedRequest = await serializeRequest(event.request); const clientMessage = await sendToClient( client, { - type: 'REQUEST', + type: "REQUEST", payload: { id: requestId, interceptedAt: requestInterceptedAt, @@ -276,19 +264,19 @@ async function getResponse(event, client, requestId, requestInterceptedAt) { }, }, [serializedRequest.body], - ) + ); switch (clientMessage.type) { - case 'MOCK_RESPONSE': { - return respondWithMock(clientMessage.data) + case "MOCK_RESPONSE": { + return respondWithMock(clientMessage.data); } - case 'PASSTHROUGH': { - return passthrough() + case "PASSTHROUGH": { + return passthrough(); } } - return passthrough() + return passthrough(); } /** @@ -299,21 +287,18 @@ async function getResponse(event, client, requestId, requestInterceptedAt) { */ function sendToClient(client, message, transferrables = []) { return new Promise((resolve, reject) => { - const channel = new MessageChannel() + const channel = new MessageChannel(); channel.port1.onmessage = (event) => { if (event.data && event.data.error) { - return reject(event.data.error) + return reject(event.data.error); } - resolve(event.data) - } + resolve(event.data); + }; - client.postMessage(message, [ - channel.port2, - ...transferrables.filter(Boolean), - ]) - }) + client.postMessage(message, [channel.port2, ...transferrables.filter(Boolean)]); + }); } /** @@ -326,17 +311,17 @@ function respondWithMock(response) { // instance will have status code set to 0. Since it's not possible to create // a Response instance with status code 0, handle that use-case separately. if (response.status === 0) { - return Response.error() + return Response.error(); } - const mockedResponse = new Response(response.body, response) + const mockedResponse = new Response(response.body, response); Reflect.defineProperty(mockedResponse, IS_MOCKED_RESPONSE, { value: true, enumerable: true, - }) + }); - return mockedResponse + return mockedResponse; } /** @@ -357,5 +342,5 @@ async function serializeRequest(request) { referrerPolicy: request.referrerPolicy, body: await request.arrayBuffer(), keepalive: request.keepalive, - } + }; } diff --git a/apps/with-lingui/src/api/request.ts b/apps/with-lingui/src/api/request.ts index 0c425e1..692a940 100644 --- a/apps/with-lingui/src/api/request.ts +++ b/apps/with-lingui/src/api/request.ts @@ -60,9 +60,7 @@ type Envelope = { message?: string; }; -function cleanParams( - params?: Record, -): Record | undefined { +function cleanParams(params?: Record): Record | undefined { if (!params) return undefined; const out: Record = {}; for (const [key, value] of Object.entries(params)) { @@ -163,10 +161,7 @@ client.interceptors.response.use( } if (status != null) { - throw new HttpError( - status, - `HTTP ${status}: ${error.response?.statusText ?? "Error"}`, - ); + throw new HttpError(status, `HTTP ${status}: ${error.response?.statusText ?? "Error"}`); } throw error; @@ -248,8 +243,7 @@ export function defineApi< : [args: CallArgs, options?: CallOptions] ) => Promise> { const method: HttpMethod = def.method ?? "GET"; - const segmentCount = - (def.params ? 1 : 0) + (def.query ? 1 : 0) + (def.body ? 1 : 0); + const segmentCount = (def.params ? 1 : 0) + (def.query ? 1 : 0) + (def.body ? 1 : 0); return async (...allArgs: unknown[]): Promise> => { let callArgs: unknown; diff --git a/apps/with-lingui/src/api/schemas.ts b/apps/with-lingui/src/api/schemas.ts index c736e48..f21f607 100644 --- a/apps/with-lingui/src/api/schemas.ts +++ b/apps/with-lingui/src/api/schemas.ts @@ -147,7 +147,6 @@ export const IdParamsSchema = z.object({ export type IdParams = z.infer; - export const SearchParamsSchema = z.object({ page: z.number().int().positive().catch(1), pageSize: z.number().int().positive().catch(10), diff --git a/apps/with-lingui/src/api/user.ts b/apps/with-lingui/src/api/user.ts index 77ccd51..d71f2d8 100644 --- a/apps/with-lingui/src/api/user.ts +++ b/apps/with-lingui/src/api/user.ts @@ -8,12 +8,7 @@ import { UpdateUserRequestSchema, UserSchema, } from "@/api/schemas"; -import type { - CreateUserRequest, - ListUsersQuery, - UpdateUserRequest, - User, -} from "@/api/schemas"; +import type { CreateUserRequest, ListUsersQuery, UpdateUserRequest, User } from "@/api/schemas"; export const USER_ENDPOINTS = { list: "/api/users", diff --git a/apps/with-lingui/src/routes/_auth/users/index.tsx b/apps/with-lingui/src/routes/_auth/users/index.tsx index e417151..3f061fa 100644 --- a/apps/with-lingui/src/routes/_auth/users/index.tsx +++ b/apps/with-lingui/src/routes/_auth/users/index.tsx @@ -3,13 +3,7 @@ import { Avatar, Button, Space, Form, App, Dropdown, theme, Tag, Flex } from "an import type { TablePaginationConfig } from "antd/es/table/interface"; import { useLingui } from "@lingui/react/macro"; import { useMemo, useRef, useState } from "react"; -import { - createUser, - deleteUser, - listUsers, - updateUser, - userQueryKeys, -} from "@/api/user"; +import { createUser, deleteUser, listUsers, updateUser, userQueryKeys } from "@/api/user"; import type { User, CreateUserRequest } from "@/api/schemas"; import { z } from "zod/v4"; import { MoreVertical, Pencil, Trash2 } from "lucide-react"; diff --git a/package.json b/package.json index 6b42895..39d343c 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "scripts": { "build": "turbo run build", "dev": "turbo run dev", + "fmt": "turbo run fmt", "lint": "turbo run lint", "format": "prettier --write \"**/*.{ts,tsx,md}\"", "preinstall": "git config core.hooksPath .githooks && git config --local vp.hooks.disabled true", diff --git a/turbo.json b/turbo.json index 1e88ed3..0c8e698 100644 --- a/turbo.json +++ b/turbo.json @@ -16,6 +16,7 @@ ] }, "lint": {}, + "fmt": {}, "dev": { "cache": false, "persistent": true