diff --git a/Tiltfile b/Tiltfile index c4c75965b..306fc0427 100644 --- a/Tiltfile +++ b/Tiltfile @@ -26,10 +26,10 @@ local_resource( local_resource( "frontend-serve", labels=["frontend"], - deps=["frontend/src"], + deps=["studio/src"], resource_deps=["node_modules", "api-dist"], serve_cmd="npm run dev", - serve_dir="frontend", + serve_dir="studio", trigger_mode=TRIGGER_MODE_MANUAL, ) @@ -57,4 +57,4 @@ local_resource( resource_deps=["node_modules", "db-generate", "db-migrate"], serve_cmd="npm run dev", serve_dir="api", -) \ No newline at end of file +) diff --git a/api/src/serve-frontend-build.ts b/api/src/serve-frontend-build.ts index 75b25b033..f1da78a1a 100644 --- a/api/src/serve-frontend-build.ts +++ b/api/src/serve-frontend-build.ts @@ -17,10 +17,10 @@ const __dirname = dirname(__filename); */ const POSSIBLE_FRONTEND_BUILD_PATHS = [ /* For when we `npm run dev` from the api folder */ - path.resolve(__dirname, "..", "..", "frontend", "dist"), + path.resolve(__dirname, "..", "..", "studio", "dist"), /* For when we run via `npx` **NOTE** - This path assumes we are running from the `dist` folder in a compiled version of the api, + This path assumes we are running from the `dist` folder in a compiled version of the api, and that the frontend build has been copy pasted into the selfsame `dist` folder. */ path.resolve(__dirname, "..", "..", "dist"), diff --git a/biome.jsonc b/biome.jsonc index 1d8f5f795..361172bf1 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -41,9 +41,16 @@ } }, { - "include": ["frontend"], + "include": ["studio"], "linter": { - "enabled": false + "enabled": true, + "rules": { + "suspicious": { + "noArrayIndexKey": { + "level": "off" + } + } + } } }, { diff --git a/package.json b/package.json index 79c3b19e7..b6ce1d152 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "dev:frontend": "pnpm --filter @fiberplane/studio-frontend dev", "clean:fpx-studio": "pnpm run clean:api && pnpm run clean:frontend", "clean:api": "rimraf api/dist", - "clean:frontend": "rimraf frontend/dist", + "clean:frontend": "rimraf studio/dist", "format": "biome check . --write", "lint": "pnpm --recursive lint" }, diff --git a/packages/client-library-otel/src/async-hooks/AbstractAsyncHooksContextManager.ts b/packages/client-library-otel/src/async-hooks/AbstractAsyncHooksContextManager.ts index a77bb9a40..2ad03b63a 100644 --- a/packages/client-library-otel/src/async-hooks/AbstractAsyncHooksContextManager.ts +++ b/packages/client-library-otel/src/async-hooks/AbstractAsyncHooksContextManager.ts @@ -101,13 +101,17 @@ export abstract class AbstractAsyncHooksContextManager ee: T, ): T { const map = this._getPatchMap(ee); - if (map !== undefined) return ee; + if (map !== undefined) { + return ee; + } this._createPatchMap(ee); // patch methods that add a listener to propagate context // biome-ignore lint/complexity/noForEach: this is from the original code ADD_LISTENER_METHODS.forEach((methodName) => { - if (ee[methodName] === undefined) return; + if (ee[methodName] === undefined) { + return; + } ee[methodName] = this._patchAddListener(ee, ee[methodName], context); }); // patch methods that remove a listener diff --git a/studio/.eslintrc.cjs b/studio/.eslintrc.cjs deleted file mode 100644 index 6e8698b72..000000000 --- a/studio/.eslintrc.cjs +++ /dev/null @@ -1,18 +0,0 @@ -module.exports = { - root: true, - env: { browser: true, es2020: true }, - extends: [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "plugin:react-hooks/recommended", - ], - ignorePatterns: ["dist", ".eslintrc.cjs"], - parser: "@typescript-eslint/parser", - plugins: ["react-refresh"], - rules: { - "react-refresh/only-export-components": [ - "warn", - { allowConstantExport: true }, - ], - }, -}; diff --git a/studio/biome.jsonc b/studio/biome.jsonc new file mode 100644 index 000000000..873f0a7eb --- /dev/null +++ b/studio/biome.jsonc @@ -0,0 +1,22 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.8.3/schema.json", + "extends": ["../biome.jsonc"], + "files": { + "ignore": ["dist", "node_modules"] + }, + "overrides": [ + { + "include": ["src"], + "linter": { + "enabled": true, + "rules": { + "suspicious": { + "noArrayIndexKey": { + "level": "off" + } + } + } + } + } + ] +} diff --git a/studio/package.json b/studio/package.json index 9335d37e4..50d8d86bd 100644 --- a/studio/package.json +++ b/studio/package.json @@ -7,9 +7,8 @@ "dev": "vite", "build": "tsc && vite build", "typecheck": "tsc --noEmit", - "lint": "biome lint . && eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0 && tsc", - "lint:ci": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0 && tsc", "format": "biome check . --write", + "lint": "biome lint . && pnpm run typecheck", "preview": "vite preview", "deploy": "pnpm run build && wrangler pages deploy dist", "test": "vitest --run" diff --git a/studio/src/App.tsx b/studio/src/App.tsx index b3480877d..14c903af3 100644 --- a/studio/src/App.tsx +++ b/studio/src/App.tsx @@ -1,6 +1,6 @@ import { QueryClientProvider, queryClient } from "@/queries"; import { TooltipProvider } from "@radix-ui/react-tooltip"; -import { ReactNode, useEffect } from "react"; +import { type ReactNode, useEffect } from "react"; import { Route, BrowserRouter as Router, diff --git a/studio/src/Layout.tsx b/studio/src/Layout.tsx index 004e30b67..0b708174e 100644 --- a/studio/src/Layout.tsx +++ b/studio/src/Layout.tsx @@ -1,6 +1,6 @@ import { DiscordLogoIcon, GitHubLogoIcon } from "@radix-ui/react-icons"; import type React from "react"; -import { ComponentProps } from "react"; +import type { ComponentProps } from "react"; import { NavLink } from "react-router-dom"; import FpxIcon from "./assets/fpx.svg"; import { WebhoncBadge } from "./components/WebhoncBadge"; diff --git a/studio/src/components/Ping.tsx b/studio/src/components/Ping.tsx index 2409cdbb1..e136d17e2 100644 --- a/studio/src/components/Ping.tsx +++ b/studio/src/components/Ping.tsx @@ -4,8 +4,8 @@ const Ping: React.FC<{ className?: string }> = ({ className }) => { return (
- {lines}
-
- {shouldShowExpandButton && (
- Validating OpenAPI spec...
} {errors.openApiSpec && (Invalid OpenAPI spec
diff --git a/studio/src/pages/RequestorPage/routes/hooks.ts b/studio/src/pages/RequestorPage/routes/hooks.ts index ba4c4d3e8..946d29383 100644 --- a/studio/src/pages/RequestorPage/routes/hooks.ts +++ b/studio/src/pages/RequestorPage/routes/hooks.ts @@ -1,5 +1,5 @@ import { useEffect, useMemo } from "react"; -import { ProbedRoute, useProbedRoutes } from "../queries"; +import { type ProbedRoute, useProbedRoutes } from "../queries"; import { WEBSOCKETS_ENABLED } from "../webSocketFeatureFlag"; type UseRoutesOptions = { diff --git a/studio/src/pages/RequestorPage/routes/match.test.ts b/studio/src/pages/RequestorPage/routes/match.test.ts index dd5b15929..246380ec7 100644 --- a/studio/src/pages/RequestorPage/routes/match.test.ts +++ b/studio/src/pages/RequestorPage/routes/match.test.ts @@ -1,5 +1,5 @@ -import { ProbedRoute } from "../queries"; -import { RequestMethod, RequestType } from "../types"; +import type { ProbedRoute } from "../queries"; +import type { RequestMethod, RequestType } from "../types"; import { findSmartRouterMatches } from "./match"; const toRoute = ( diff --git a/studio/src/pages/RequestorPage/routes/match.ts b/studio/src/pages/RequestorPage/routes/match.ts index e8d11f131..02f49888b 100644 --- a/studio/src/pages/RequestorPage/routes/match.ts +++ b/studio/src/pages/RequestorPage/routes/match.ts @@ -1,7 +1,7 @@ import { RegExpRouter } from "hono/router/reg-exp-router"; import { SmartRouter } from "hono/router/smart-router"; import { TrieRouter } from "hono/router/trie-router"; -import { ProbedRoute } from "../queries"; +import type { ProbedRoute } from "../queries"; type MatchedRouteResult = { route: ProbedRoute; diff --git a/studio/src/pages/RequestorPage/useMakeWebsocketRequest.ts b/studio/src/pages/RequestorPage/useMakeWebsocketRequest.ts index e16c6b30c..1c08baab2 100644 --- a/studio/src/pages/RequestorPage/useMakeWebsocketRequest.ts +++ b/studio/src/pages/RequestorPage/useMakeWebsocketRequest.ts @@ -1,3 +1,4 @@ +import { useHandler } from "@fiberplane/hooks"; import { useCallback, useReducer, useRef } from "react"; // Define action types @@ -67,44 +68,41 @@ export function useMakeWebsocketRequest() { const [state, dispatch] = useReducer(websocketReducer, initialState); const socket = useRef