diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index f76b11f..1ab2509 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,39 +1,64 @@ -// For format details, see https://aka.ms/devcontainer.json. For config options, see the -// README at: https://github.com/devcontainers/templates/tree/main/src/typescript-node +// For format details, see https://aka.ms/devcontainer.json +// This container standardizes the local development environment for the Monorepo. { - "name": "Node.js & TypeScript", - // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile + "name": "FE Monorepo Template", + + // Base image providing Node.js v24, TypeScript, and a Debian Bookworm environment. "image": "mcr.microsoft.com/devcontainers/typescript-node:24-bookworm", - // Features to add to the dev container. More info: https://containers.dev/features. + + // DevContainer Features: Pre-installed tools needed for our workflow. "features": { "ghcr.io/devcontainers/features/git:1": {}, "ghcr.io/devcontainers-extra/features/pnpm:2": {}, "ghcr.io/devcontainers/features/sshd:1": {} }, - // Use 'forwardPorts' to make a list of ports inside the container available locally. - "forwardPorts": [6006, 5173, 5174, 5175], + + // ─── Port Topology ────────────────────────────────────────────────────────── + // 6006: Storybook (Docs) + // 5173: Web App (Must be strictly 5173 for Electron IPC compatibility) + // 3000: Landing App (Isolated from Vite's default 517x blast radius) + "forwardPorts": [6006, 5173, 3000], + "portsAttributes": { "6006": { "label": "Storybook", "onAutoForward": "notify" }, "5173": { - "label": "Vites Application 1", + "label": "Web App (Electron Target)", "onAutoForward": "notify" }, - "5174": { - "label": "Vites Application 2", - "onAutoForward": "notify" - }, - "5175": { - "label": "Vites Application 3", + "3000": { + "label": "Landing App (Public)", "onAutoForward": "notify" } - } - // Use 'postCreateCommand' to run commands after the container is created. - // "postCreateCommand": "yarn install", - // Configure tool-specific properties. - // "customizations": {}, - // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. - // "remoteUser": "root" + }, + + // ─── Lifecycle Hooks ──────────────────────────────────────────────────────── + // Automatically install all workspace dependencies once the container is built. + "postCreateCommand": "pnpm install", + + // ─── Editor Standardization ───────────────────────────────────────────────── + // Enforces code style and tooling across all developers' machines. + "customizations": { + "vscode": { + "settings": { + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "extensions": [ + "dbaeumer.vscode-eslint", // Linting + "esbenp.prettier-vscode", // Formatting + "bradlc.vscode-tailwindcss", // Tailwind v4 IntelliSense + "yoavbls.pretty-ts-errors", // Human-readable TypeScript errors + "editorconfig.editorconfig" // Standardized indentation + ] + } + }, + + // ─── Security & Permissions ───────────────────────────────────────────────── + // CRITICAL: Run the container as 'node' instead of 'root'. + // This prevents 'Permission Denied' errors on the host OS when trying to + // delete or modify the 'node_modules' folder created inside the container. + "remoteUser": "node" } diff --git a/.gitignore b/.gitignore index 6f3de28..25e38e8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,20 +1,43 @@ +# OS & Editor .DS_Store +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +# Dependencies node_modules +.pnpm-store + +# Turborepo & Cache .turbo +.cache + +# Environment Variables (Security) +.env +.env.local +.env.*.local +*.local + +# Logs *.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Standard Web Build Outputs dist dist-ssr -*.local -.env -.cache server/dist public/dist -# storybook +# Storybook Build Outputs *storybook.log storybook-static -# Electron +# Electron Build Outputs out/ release/ web-dist/ \ No newline at end of file diff --git a/README.md b/README.md index 6e417a1..dd2c1de 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,7 @@ The monorepo is organized into **Apps** (deployable applications) and **Packages . ├── apps/ │ ├── web/ # Main React Application (Vite + TypeScript) +│ ├── landing/ # Public Promotional SPA (Vite + TypeScript) │ ├── desktop/ # Electron Desktop Wrapper (electron-vite) │ └── docs-dev/ # Component Documentation & Playground (Storybook) │ @@ -71,12 +72,16 @@ This repository uses **Turborepo** to orchestrate tasks efficiently. All command ### Development -| Command | Description | -| -------------------- | --------------------------------------------------------------------------- | -| `pnpm dev` | Start **all applications** (`web` and `docs-dev`) in parallel | -| `pnpm dev:web` | Start only the **Main Web App** (usually at `http://localhost:5173`) | -| `pnpm dev:docs-dev` | Start **Storybook** for UI development (usually at `http://localhost:6006`) | -| `pnpm dev:desktop` | Start the **Web App + Electron** in parallel for desktop development | +| Command | Description | +| -------------------- | ---------------------------------------------------------------------------------- | +| `pnpm dev` | Start **all applications** (`web` and `docs-dev`) in parallel | +| `pnpm dev:web` | Start only the **Main Web App** (strictly at `http://localhost:5173`) | +| `pnpm dev:landing` | Start the **Public Landing App** (strictly at `http://localhost:3000`) | +| `pnpm dev:docs-dev` | Start **Storybook** for UI development (strictly at `http://localhost:6006`) | +| `pnpm dev:desktop` | Start the **Web App + Electron** in parallel for desktop development | + +> [!NOTE] +> **Port Topology**: `electron-vite` dynamically allocates a background port (usually `5174`) for its internal renderer shell during `pnpm dev:desktop`. We strictly isolate `web` (`5173`) and `landing` (`3000`) onto separate port ranges to prevent race conditions during parallel execution. ### Building & Quality @@ -84,6 +89,7 @@ This repository uses **Turborepo** to orchestrate tasks efficiently. All command | --------------------- | ------------------------------------------------------- | | `pnpm build` | Build all apps and packages using Turbo cache | | `pnpm build:web` | Build only the web application | +| `pnpm build:landing` | Build only the landing page | | `pnpm build:docs-dev` | Build only the docs-dev application | | `pnpm build:desktop` | Build the web app, then compile the Electron app | | `pnpm test` | Run unit tests (Vitest) across all packages | @@ -172,7 +178,24 @@ The **Electron desktop wrapper** that embeds `apps/web` for native desktop exper --- -### 3. `apps/docs-dev` (Storybook) +### 3. `apps/landing` + +The **public promotional website** — a standalone SPA for the company profile and marketing pages. + +* Deployed independently to the web (e.g., Vercel) — no interaction with Electron +* Consumes shared UI components from `@repo/ui` and utilities from `@repo/utils` +* Locked to port **3000** (`strictPort: true`) — evacuated from the `517x` range to avoid `electron-vite` port collisions + +**Tech Stack**: + +* React +* Vite +* TypeScript +* Tailwind CSS v4 + +--- + +### 4. `apps/docs-dev` (Storybook) An isolated environment for developing and documenting UI components. @@ -181,7 +204,7 @@ An isolated environment for developing and documenting UI components. --- -### 4. `packages/utils` +### 5. `packages/utils` Shared business logic and reusable utility modules that can be consumed across multiple applications. Fully tested using Vitest. @@ -189,7 +212,7 @@ This package is intended to hold non-UI, cross-cutting logic such as date/time h --- -### 5. `packages/ui` +### 6. `packages/ui` Shared UI component library (Buttons, Inputs, Cards, Layouts). @@ -198,7 +221,7 @@ Shared UI component library (Buttons, Inputs, Cards, Layouts). --- -### 6. `packages/configs` +### 7. `packages/configs` Single source of truth for tooling configuration. diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 39b0bf4..43c79c0 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -11,7 +11,8 @@ "package": "pnpm run build && electron-builder --config electron-builder.yml", "package:win": "pnpm run build && electron-builder --win --config electron-builder.yml", "package:mac": "pnpm run build && electron-builder --mac --config electron-builder.yml", - "package:linux": "pnpm run build && electron-builder --linux --config electron-builder.yml" + "package:linux": "pnpm run build && electron-builder --linux --config electron-builder.yml", + "typecheck": "tsc --noEmit" }, "dependencies": { "electron-updater": "^6.3.9" @@ -26,4 +27,4 @@ "tsx": "^4.19.0", "typescript": "5.5.4" } -} +} \ No newline at end of file diff --git a/apps/desktop/tsconfig.tsbuildinfo b/apps/desktop/tsconfig.tsbuildinfo new file mode 100644 index 0000000..e552c0a --- /dev/null +++ b/apps/desktop/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"program":{"fileNames":[],"fileInfos":[],"root":[],"options":{"composite":true}},"version":"5.5.4"} \ No newline at end of file diff --git a/apps/landing/.eslintrc.cjs b/apps/landing/.eslintrc.cjs new file mode 100644 index 0000000..a779c57 --- /dev/null +++ b/apps/landing/.eslintrc.cjs @@ -0,0 +1,5 @@ +/** @type {import("eslint").Linter.Config} */ +module.exports = { + root: true, + extends: ['@repo/eslint-config/react.js'], +}; diff --git a/apps/landing/index.html b/apps/landing/index.html new file mode 100644 index 0000000..ceabddf --- /dev/null +++ b/apps/landing/index.html @@ -0,0 +1,14 @@ + + + + + + + Eigen — Company Profile + + + +
+ + + diff --git a/apps/landing/package.json b/apps/landing/package.json new file mode 100644 index 0000000..e6ad75c --- /dev/null +++ b/apps/landing/package.json @@ -0,0 +1,31 @@ +{ + "name": "landing", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite --clearScreen false", + "build": "tsc && vite build", + "preview": "vite preview", + "lint": "eslint \"src/**/*.ts\"", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@repo/ui": "workspace:*", + "@repo/utils": "workspace:*", + "@tailwindcss/vite": "^4.1.18", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "tailwindcss": "^4.1.18" + }, + "devDependencies": { + "@repo/eslint-config": "workspace:*", + "@repo/typescript-config": "workspace:*", + "@types/react": "^19.2.7", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^5.1.2", + "eslint": "^8.57.1", + "typescript": "5.5.4", + "vite": "^5.1.4" + } +} \ No newline at end of file diff --git a/apps/landing/src/app.tsx b/apps/landing/src/app.tsx new file mode 100644 index 0000000..c7f05fb --- /dev/null +++ b/apps/landing/src/app.tsx @@ -0,0 +1,37 @@ +import { ThemeProvider } from '@repo/ui/provider'; +import { Button } from '@repo/ui/components'; + +export default function App() { + return ( + +
+
+

+ Hello from{' '} + + Landing Page + +

+ +

+ Enterprise-grade solutions for modern businesses. + This page is served from{' '} + + apps/landing + {' '} + on port 5174. +

+ +
+ + +
+ +

+ ✅ @repo/ui workspace link verified — Button component rendered successfully. +

+
+
+
+ ); +} diff --git a/apps/landing/src/main.css b/apps/landing/src/main.css new file mode 100644 index 0000000..1a6a0b5 --- /dev/null +++ b/apps/landing/src/main.css @@ -0,0 +1,3 @@ +@import 'tailwindcss'; +@import '@repo/ui/theme.css'; +@source "../../../packages/ui/src"; diff --git a/apps/landing/src/main.tsx b/apps/landing/src/main.tsx new file mode 100644 index 0000000..4c1a5be --- /dev/null +++ b/apps/landing/src/main.tsx @@ -0,0 +1,10 @@ +import './main.css'; +import { StrictMode } from 'react'; +import { createRoot } from 'react-dom/client'; +import App from './app'; + +createRoot(document.getElementById('app')!).render( + + + , +); diff --git a/apps/landing/tsconfig.json b/apps/landing/tsconfig.json new file mode 100644 index 0000000..697b3f5 --- /dev/null +++ b/apps/landing/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "@repo/typescript-config/react-app.json", + "include": ["src"], + "compilerOptions": { + "jsx": "react-jsx" + } +} diff --git a/apps/landing/vite.config.ts b/apps/landing/vite.config.ts new file mode 100644 index 0000000..4e53ad4 --- /dev/null +++ b/apps/landing/vite.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; +import tailwindcss from '@tailwindcss/vite'; + +export default defineConfig({ + plugins: [react(), tailwindcss()], + server: { + port: 3000, + strictPort: true, // Evacuated from 517x range to avoid electron-vite port collision. + }, +}); diff --git a/apps/web/package.json b/apps/web/package.json index 59fbe2e..c12910c 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -9,7 +9,8 @@ "preview": "vite preview", "lint": "eslint \"src/**/*.ts\"", "test": "vitest run", - "test:watch": "vitest --watch" + "test:watch": "vitest --watch", + "typecheck": "tsc --noEmit" }, "dependencies": { "@repo/ui": "workspace:*", diff --git a/apps/web/src/hooks/use-electron-printer.ts b/apps/web/src/hooks/use-electron-printer.ts index 0c98661..bf732b4 100644 --- a/apps/web/src/hooks/use-electron-printer.ts +++ b/apps/web/src/hooks/use-electron-printer.ts @@ -1,4 +1,5 @@ import { useState, useCallback } from 'react'; +import { useIsElectron } from './use-is-electron'; // ─── Types ────────────────────────────────────────────────────── @@ -50,7 +51,7 @@ export function useElectronPrinter(): UseElectronPrinterReturn { const [loading, setLoading] = useState(false); const [error, setError] = useState(null); - const isElectron = typeof window !== 'undefined' && !!window.electronAPI; + const isElectron = useIsElectron(); const refreshPrinters = useCallback(async (): Promise => { if (!window.electronAPI) { diff --git a/apps/web/src/hooks/use-electron-updater.ts b/apps/web/src/hooks/use-electron-updater.ts index dbf6b09..1fa8cf5 100644 --- a/apps/web/src/hooks/use-electron-updater.ts +++ b/apps/web/src/hooks/use-electron-updater.ts @@ -1,4 +1,5 @@ import { useState, useEffect, useCallback } from 'react'; +import { useIsElectron } from './use-is-electron'; // ─── Types ────────────────────────────────────────────────────── @@ -64,7 +65,7 @@ export function useElectronUpdater(): UseElectronUpdaterReturn { const [updateInfo, setUpdateInfo] = useState(null); const [errorMessage, setErrorMessage] = useState(null); - const isElectron = typeof window !== 'undefined' && !!window.electronAPI; + const isElectron = useIsElectron(); useEffect(() => { if (!window.electronAPI) return; diff --git a/apps/web/src/hooks/use-is-electron.ts b/apps/web/src/hooks/use-is-electron.ts new file mode 100644 index 0000000..7f8bbb9 --- /dev/null +++ b/apps/web/src/hooks/use-is-electron.ts @@ -0,0 +1,7 @@ +/** + * A utility hook to determine if the React application is running + * inside the Electron desktop wrapper or a standard web browser. + */ +export function useIsElectron(): boolean { + return typeof window !== 'undefined' && !!window.electronAPI; +} diff --git a/apps/web/vite.config.ts b/apps/web/vite.config.ts index da17daf..f43e137 100644 --- a/apps/web/vite.config.ts +++ b/apps/web/vite.config.ts @@ -4,4 +4,8 @@ import tailwindcss from '@tailwindcss/vite'; export default defineConfig({ plugins: [react(), tailwindcss()], + server: { + port: 5173, + strictPort: true, // Fail if 5173 is in use. Electron NEEDS this exact port. + }, }); diff --git a/package.json b/package.json index 9a1fe6e..4cec90d 100644 --- a/package.json +++ b/package.json @@ -5,19 +5,28 @@ "scripts": { "build": "turbo run build", "build:web": "turbo run build --filter=web", + "build:landing": "turbo run build --filter=landing", "build:docs-dev": "turbo run build --filter=docs-dev", - "build:desktop": "turbo run build --filter=web && turbo run build --filter=desktop", + "build:desktop": "turbo run build --filter=desktop", "dev": "turbo run dev", "dev:web": "turbo run dev --filter=web", + "dev:landing": "turbo run dev --filter=landing", "dev:docs-dev": "turbo run dev --filter=docs-dev", "dev:desktop": "turbo run dev --filter=web --filter=desktop --parallel", - "package:desktop": "pnpm run build:desktop && cd apps/desktop && pnpm run package", - "package:mac": "pnpm run build:desktop && cd apps/desktop && pnpm run package:mac", - "package:win": "pnpm run build:desktop && cd apps/desktop && pnpm run package:win", - "package:linux": "pnpm run build:desktop && cd apps/desktop && pnpm run package:linux", + "package:desktop": "pnpm run build:desktop && pnpm --filter desktop run package", + "package:mac": "pnpm run build:desktop && pnpm --filter desktop run package:mac", + "package:win": "pnpm run build:desktop && pnpm --filter desktop run package:win", + "package:linux": "pnpm run build:desktop && pnpm --filter desktop run package:linux", "lint": "turbo run lint", "format": "prettier --write \"**/*.{ts,tsx,md}\"", - "test": "turbo run test" + "test": "turbo run test", + "typecheck": "turbo run typecheck", + "typecheck:web": "turbo run typecheck --filter=web", + "typecheck:landing": "turbo run typecheck --filter=landing", + "typecheck:desktop": "turbo run typecheck --filter=desktop", + "check:all": "turbo run lint typecheck test", + "clean:workspaces": "rm -rf node_modules **/*/node_modules .turbo **/*/.turbo dist **/*/dist out **/*/out web-dist **/*/web-dist release **/*/release", + "nuke": "pnpm run clean:workspaces && pnpm install && pnpm build" }, "devDependencies": { "prettier": "^3.2.5", diff --git a/packages/utils/package.json b/packages/utils/package.json index b6331bb..b9b2a8f 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -8,7 +8,8 @@ "scripts": { "lint": "eslint \"**/*.ts\"", "test": "vitest run", - "test:watch": "vitest --watch" + "test:watch": "vitest --watch", + "typecheck": "tsc --noEmit" }, "dependencies": { "crypto-js": "^4.2.0", diff --git a/packages/utils/src/encryption/encryption.utils.test.ts b/packages/utils/src/encryption/encryption.utils.test.ts index 1a5ea62..998e7c0 100644 --- a/packages/utils/src/encryption/encryption.utils.test.ts +++ b/packages/utils/src/encryption/encryption.utils.test.ts @@ -84,7 +84,8 @@ describe('EncryptionUtils', () => { it('should return an empty string if input is malformed (Graceful Fail)', () => { // eslint-disable-next-line @typescript-eslint/no-unused-vars - const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => {}); + // const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => {}); + vi.spyOn(console, 'error').mockImplementation(() => {}); const malformedData = 'invalid-base64-string-@@@'; const result = service.decrypt(malformedData); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f2b06ff..61667a2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -96,7 +96,53 @@ importers: version: 5.5.4 vite: specifier: ^5.1.4 - version: 5.4.17(@types/node@22.19.3) + version: 5.4.17 + + apps/landing: + dependencies: + '@repo/ui': + specifier: workspace:* + version: link:../../packages/ui + '@repo/utils': + specifier: workspace:* + version: link:../../packages/utils + '@tailwindcss/vite': + specifier: ^4.1.18 + version: 4.1.18(vite@5.4.17) + react: + specifier: ^19.2.3 + version: 19.2.3 + react-dom: + specifier: ^19.2.3 + version: 19.2.3(react@19.2.3) + tailwindcss: + specifier: ^4.1.18 + version: 4.1.18 + devDependencies: + '@repo/eslint-config': + specifier: workspace:* + version: link:../../packages/configs/eslint + '@repo/typescript-config': + specifier: workspace:* + version: link:../../packages/configs/typescript + '@types/react': + specifier: ^19.2.7 + version: 19.2.7 + '@types/react-dom': + specifier: ^19.2.3 + version: 19.2.3(@types/react@19.2.7) + '@vitejs/plugin-react': + specifier: ^5.1.2 + version: 5.1.2(vite@5.4.17) + eslint: + specifier: ^8.57.1 + version: 8.57.1 + typescript: + specifier: 5.5.4 + version: 5.5.4 + vite: + specifier: ^5.1.4 + version: 5.4.17 apps/web: dependencies: @@ -148,7 +194,7 @@ importers: version: 5.5.4 vite: specifier: ^5.1.4 - version: 5.4.17(@types/node@22.19.3) + version: 5.4.17 vitest: specifier: ^4.0.17 version: 4.0.17 @@ -246,7 +292,7 @@ importers: version: 5.5.4 vite: specifier: ^5.1.4 - version: 5.4.17(@types/node@22.19.3) + version: 5.4.17 vitest: specifier: ^4.0.17 version: 4.0.17 @@ -1151,7 +1197,7 @@ packages: magic-string: 0.27.0 react-docgen-typescript: 2.4.0(typescript@5.5.4) typescript: 5.5.4 - vite: 5.4.17(@types/node@22.19.3) + vite: 5.4.17 dev: true /@jridgewell/gen-mapping@0.3.13: @@ -1958,7 +2004,7 @@ packages: browser-assert: 1.2.1 storybook: 8.6.15(prettier@3.5.3) ts-dedent: 2.2.0 - vite: 5.4.17(@types/node@22.19.3) + vite: 5.4.17 dev: true /@storybook/components@8.6.15(storybook@8.6.15): @@ -2100,7 +2146,7 @@ packages: resolve: 1.22.11 storybook: 8.6.15(prettier@3.5.3) tsconfig-paths: 4.2.0 - vite: 5.4.17(@types/node@22.19.3) + vite: 5.4.17 transitivePeerDependencies: - rollup - supports-color @@ -2287,7 +2333,7 @@ packages: '@tailwindcss/node': 4.1.18 '@tailwindcss/oxide': 4.1.18 tailwindcss: 4.1.18 - vite: 5.4.17(@types/node@22.19.3) + vite: 5.4.17 /@tootallnate/once@2.0.0: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} @@ -3048,7 +3094,7 @@ packages: '@rolldown/pluginutils': 1.0.0-beta.53 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: 5.4.17(@types/node@22.19.3) + vite: 5.4.17 transitivePeerDependencies: - supports-color dev: true @@ -9411,6 +9457,43 @@ packages: vfile-message: 4.0.3 dev: false + /vite@5.4.17: + resolution: {integrity: sha512-5+VqZryDj4wgCs55o9Lp+p8GE78TLVg0lasCH5xFZ4jacZjtqZa6JUw9/p0WeAojaOfncSM6v77InkFPGnvPvg==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.21.5 + postcss: 8.5.3 + rollup: 4.39.0 + optionalDependencies: + fsevents: 2.3.3 + /vite@5.4.17(@types/node@22.19.3): resolution: {integrity: sha512-5+VqZryDj4wgCs55o9Lp+p8GE78TLVg0lasCH5xFZ4jacZjtqZa6JUw9/p0WeAojaOfncSM6v77InkFPGnvPvg==} engines: {node: ^18.0.0 || >=20.0.0} @@ -9444,10 +9527,11 @@ packages: dependencies: '@types/node': 22.19.3 esbuild: 0.21.5 - postcss: 8.5.3 - rollup: 4.39.0 + postcss: 8.5.6 + rollup: 4.55.1 optionalDependencies: fsevents: 2.3.3 + dev: true /vite@7.3.1: resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} diff --git a/turbo.json b/turbo.json index b786523..669fa55 100644 --- a/turbo.json +++ b/turbo.json @@ -24,9 +24,9 @@ "^lint" ] }, - "check-types": { + "typecheck": { "dependsOn": [ - "^check-types" + "^typecheck" ] }, "dev": {