From 2612bb6ea322f90f6148ca6ffa873b7758a524bd Mon Sep 17 00:00:00 2001 From: Chris Leveille Date: Tue, 22 Oct 2024 17:10:43 -0400 Subject: [PATCH] stricter linting config --- bun.lockb | Bin 308060 -> 308881 bytes eslint.config.js | 16 +++++++++++----- package.json | 6 ++++-- processes/watch.ts | 7 +++---- src/client/hooks/useApi.ts | 5 ++++- src/client/sw.ts | 18 +++++++++--------- src/client/utils/browser.ts | 4 ++-- src/server/index.ts | 2 +- src/server/services/socket.ts | 9 ++++----- tsconfig.json | 3 ++- 10 files changed, 40 insertions(+), 30 deletions(-) diff --git a/bun.lockb b/bun.lockb index 707cd465324d0aebda6af6bcf3b9f49c3e814a57..4a890e319431bf48e570674467d728466bb15549 100755 GIT binary patch delta 45182 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
  • tk@%_CPsk6Xt>rN1VA?3lDC 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 delta 43834 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 diff --git a/eslint.config.js b/eslint.config.js index a5d494e..d5969ad 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -6,15 +6,21 @@ export default [ { ignores: ["node_modules/", "public/"] }, - ...tseslint.config(eslint.configs.recommended, ...tseslint.configs.recommended, { + ...tseslint.config(eslint.configs.recommended, ...tseslint.configs.recommendedTypeChecked, { languageOptions: { - ecmaVersion: "latest", - sourceType: "module" + parserOptions: { + projectService: true, + tsconfigRootDir: import.meta.dirname + } }, rules: { "@typescript-eslint/ban-ts-comment": "off", - "@typescript-eslint/no-var-requires": "off", - "@typescript-eslint/no-require-imports": "off" + "@typescript-eslint/no-misused-promises": [ + "error", + { + checksVoidReturn: false + } + ] } }) ]; diff --git a/package.json b/package.json index dc3d4d2..36ed92e 100644 --- a/package.json +++ b/package.json @@ -7,16 +7,18 @@ "type": "module", "scripts": { "compose": "docker compose -f \"./.fullstack-bun-dev-container/docker-compose.yml\" up -d --build", - "lint": "bunx eslint . && bunx prettier --check .", - "fix": "bunx eslint --fix . && bunx prettier --write .", + "lint": "eslint . && prettier --check .", + "fix": "eslint --fix . && prettier --write .", "build": "bun ./scripts/build.ts", "build:prod": "bun ./scripts/build.ts BUN_ENV=production && workbox injectManifest workbox-config.json", "dev": "bun --watch ./src/server/index.ts", "start": "bun ./src/server/index.ts" }, "devDependencies": { + "@eslint/js": "^9.13.0", "@types/compression": "^1.7.5", "@types/cors": "^2.8.17", + "@types/eslint__js": "^8.42.3", "@types/express": "^5.0.0", "@types/react": "^18.3.11", "@types/react-dom": "^18.3.1", diff --git a/processes/watch.ts b/processes/watch.ts index 8acdf96..1670aaa 100644 --- a/processes/watch.ts +++ b/processes/watch.ts @@ -15,10 +15,9 @@ const stopWatching = async () => { process.on("exit", () => stopWatching); process.on("SIGINT", () => stopWatching); -export const initWatch = async (emitReload: () => void) => { - const buildAndReloadClient = async () => { +export const initWatch = (emitReload: () => void) => { + watcher.on("change", async () => { await buildClient(); emitReload(); - }; - watcher.on("change", buildAndReloadClient); + }); }; diff --git a/src/client/hooks/useApi.ts b/src/client/hooks/useApi.ts index 9c50f04..499f493 100644 --- a/src/client/hooks/useApi.ts +++ b/src/client/hooks/useApi.ts @@ -25,7 +25,10 @@ export const useApi = () => { const toAndFrom = useCallback( async ({ event, data, callback }: TReqParams) => { return new Promise((resolve, reject) => { - const timeout = setTimeout(() => reject(`Request timed out after ${TIMEOUT_MS}ms.`), TIMEOUT_MS); + const timeout = setTimeout( + () => reject(new Error(`Request timed out after ${TIMEOUT_MS}ms.`)), + TIMEOUT_MS + ); const onRes = (res: T) => { socket.off(event, onRes); clearTimeout(timeout); diff --git a/src/client/sw.ts b/src/client/sw.ts index c315c1a..8a801e3 100644 --- a/src/client/sw.ts +++ b/src/client/sw.ts @@ -22,15 +22,15 @@ const isCacheFirstWithoutHash = (filename: string) => { return false; }; +const onInstall = async () => { + const urlsToPrecache = ["/", ...(manifest?.length > 0 ? manifest.map(({ url }) => url) : [])]; + const cache = await caches.open(cacheName); + await cache.addAll([...urlsToPrecache.map(url => url)]); +}; + self.addEventListener("install", event => { - self.skipWaiting(); - event.waitUntil( - (async () => { - const urlsToPrecache = ["/", ...(manifest?.length > 0 ? manifest.map(({ url }) => url) : [])]; - const cache = await caches.open(cacheName); - await cache.addAll([...urlsToPrecache.map(url => url)]); - })() - ); + void self.skipWaiting(); + event.waitUntil(onInstall()); }); self.addEventListener("activate", event => { @@ -57,7 +57,7 @@ const trimCache = (url: URL) => { const hash = url.href.split(cacheFirstHashPrefix)[1]; const urlSuffixSplit = url.href.split("."); const urlSuffix = urlSuffixSplit[urlSuffixSplit.length - 1]; - (async () => { + void (async () => { const cache = await caches.open(cacheName); const requests = await cache.keys(); for (const request of requests) { diff --git a/src/client/utils/browser.ts b/src/client/utils/browser.ts index c9f24ad..c4de1df 100644 --- a/src/client/utils/browser.ts +++ b/src/client/utils/browser.ts @@ -1,8 +1,8 @@ const accessStorage = (storage: Storage) => ({ setItem: (key: string, data: unknown) => storage.setItem(key, JSON.stringify(data)), - getItem: (key: string): T | null => { + getItem: (key: string) => { const data = storage.getItem(key); - if (data !== null) return JSON.parse(data); + if (data !== null) return JSON.parse(data) as T; return null; }, removeItem: (key: string) => storage.removeItem(key) diff --git a/src/server/index.ts b/src/server/index.ts index 53d8211..25b2201 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -26,7 +26,7 @@ app.disable("x-powered-by"); app.use(express.static(path.resolve(Path.Public))); const httpServer = createServer(app); -initSocket(httpServer); +await initSocket(httpServer); initRoutes(app); diff --git a/src/server/services/socket.ts b/src/server/services/socket.ts index 61262f1..dbdf577 100644 --- a/src/server/services/socket.ts +++ b/src/server/services/socket.ts @@ -5,15 +5,14 @@ import { GREETINGS, SocketEvent } from "@constants"; import { Config } from "@helpers"; import { log } from "@services"; -export const initSocket = (httpServer: HttpServer) => { +export const initSocket = async (httpServer: HttpServer) => { const io = new Server(httpServer); - (async () => { - if (Config.IS_PROD) return; + if (!Config.IS_PROD) { const { initWatch } = await import("@processes"); const emitReload = () => io.emit(SocketEvent.Reload); - await initWatch(emitReload); - })(); + initWatch(emitReload); + } io.on("connect", socket => { socket.on(SocketEvent.Hello, (message: string) => { diff --git a/tsconfig.json b/tsconfig.json index 31cb20b..cc02e9e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -11,6 +11,7 @@ "allowImportingTsExtensions": true, "resolveJsonModule": true, "allowJs": true, + "checkJs": true, "esModuleInterop": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, @@ -35,5 +36,5 @@ "@utils": ["./src/client/utils"] } }, - "include": ["./**/*.ts", "./**/*.tsx", "./**/*.json"] + "include": ["./**/*.ts", "./**/*.tsx", "./**/*.js", "./**/*.jsx", "./**/*.json"] }