{ "name": "twenty-front", "$schema": "../../node_modules/nx/schemas/project-schema.json", "projectType": "application", "tags": [ "scope:frontend" ], "targets": { "build": { "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "{projectRoot}/build" }, "dependsOn": [ "^build" ] }, "build:sourcemaps": { "outputs": [ "{options.outputPath}" ], "options": { "outputPath": "{projectRoot}/build" }, "dependsOn": [ "^build" ] }, "serve": { "executor": "nx:run-commands", "options": { "command": "npx serve -s {projectRoot}/build" } }, "start": { "executor": "@nx/vite:dev-server", "options": { "buildTarget": "twenty-front:build", "hmr": true } }, "preview": { "executor": "@nx/vite:preview-server", "options": { "buildTarget": "twenty-front:build", "port": 3001, "open": true } }, "reset:env": { "executor": "nx:run-commands", "inputs": [ "{projectRoot}/.env.example" ], "outputs": [ "{projectRoot}/.env" ], "cache": true, "options": { "cwd": "{projectRoot}", "command": "cp .env.example .env" } }, "typecheck": {}, "lint": { "executor": "nx:run-commands", "cache": true, "dependsOn": ["twenty-oxlint-rules:build", "twenty-shared:build"], "inputs": [ "{projectRoot}/src/**/*.{ts,tsx}", "{projectRoot}/tsconfig*.json", "{workspaceRoot}/tsconfig.base.json", "{projectRoot}/.oxlintrc.json", "{workspaceRoot}/packages/twenty-oxlint-rules/dist/oxlint-plugin.mjs" ], "options": { "cwd": "{projectRoot}", "command": "npx oxlint --type-aware -c .oxlintrc.json src/ && (prettier src/ --check --cache --cache-location ../../.cache/prettier/{projectRoot} --cache-strategy metadata || (echo 'ERROR: Prettier formatting check failed! Fix with: npx nx lint twenty-front --configuration=fix' && false))" }, "configurations": { "fix": { "command": "npx oxlint --type-aware --fix -c .oxlintrc.json src/ && prettier src/ --write --cache --cache-location ../../.cache/prettier/{projectRoot} --cache-strategy metadata" } } }, "lint:diff-with-main": { "executor": "nx:run-commands", "dependsOn": ["twenty-oxlint-rules:build"], "options": { "cwd": "{projectRoot}", "command": "FILES=$(git diff --name-only --relative --diff-filter=d main...HEAD -- src/ | grep -E '\\.(ts|tsx)$'); [ -z \"$FILES\" ] && echo 'No changed files.' || (npx oxlint --type-aware -c .oxlintrc.json $FILES && (prettier --check $FILES || (echo 'ERROR: Prettier formatting check failed! Fix with: npx nx lint:diff-with-main twenty-front --configuration=fix' && false)))" }, "configurations": { "fix": { "command": "FILES=$(git diff --name-only --relative --diff-filter=d main...HEAD -- src/ | grep -E '\\.(ts|tsx)$'); [ -z \"$FILES\" ] && echo 'No changed files.' || (npx oxlint --type-aware --fix -c .oxlintrc.json $FILES && prettier --write $FILES)" } } }, "fmt": { "options": { "files": "src" }, "configurations": { "fix": {} } }, "test": {}, "storybook:build": { "options": { "env": { "NODE_OPTIONS": "--max_old_space_size=8000" } }, "configurations": { "docs": { "env": { "STORYBOOK_SCOPE": "ui-docs" } }, "modules": { "env": { "STORYBOOK_SCOPE": "modules" } }, "pages": { "env": { "STORYBOOK_SCOPE": "pages" } }, "performance": { "env": { "STORYBOOK_SCOPE": "performance" } } } }, "storybook:serve:dev": { "options": { "port": 6006 }, "configurations": { "docs": { "env": { "STORYBOOK_SCOPE": "ui-docs" } }, "modules": { "env": { "STORYBOOK_SCOPE": "modules" } }, "pages": { "env": { "STORYBOOK_SCOPE": "pages" } }, "performance": { "env": { "STORYBOOK_SCOPE": "performance" } } } }, "storybook:serve:static": { "options": { "port": 6006 }, "configurations": { "docs": { "env": { "STORYBOOK_SCOPE": "ui-docs" } }, "modules": { "env": { "STORYBOOK_SCOPE": "modules" } }, "pages": { "env": { "STORYBOOK_SCOPE": "pages" } }, "performance": { "env": { "STORYBOOK_SCOPE": "performance" } } } }, "storybook:coverage": { "configurations": { "text": {}, "docs": { "env": { "STORYBOOK_SCOPE": "ui-docs" } }, "modules": { "env": { "STORYBOOK_SCOPE": "modules" } }, "pages": { "env": { "STORYBOOK_SCOPE": "pages" } }, "performance": { "env": { "STORYBOOK_SCOPE": "performance" } } } }, "storybook:test": { "configurations": { "docs": { "env": { "STORYBOOK_SCOPE": "ui-docs" } }, "modules": { "env": { "STORYBOOK_SCOPE": "modules" } }, "pages": { "env": { "STORYBOOK_SCOPE": "pages" } }, "performance": { "env": { "STORYBOOK_SCOPE": "performance" } } } }, "storybook:test:no-coverage": { "configurations": { "docs": { "env": { "STORYBOOK_SCOPE": "ui-docs" } }, "modules": { "env": { "STORYBOOK_SCOPE": "modules" } }, "pages": { "env": { "STORYBOOK_SCOPE": "pages" } }, "performance": { "env": { "STORYBOOK_SCOPE": "performance" } } } }, "graphql:generate": { "executor": "nx:run-commands", "defaultConfiguration": "data", "options": { "cwd": "{projectRoot}", "command": "dotenv graphql-codegen -- --config={args.config}" }, "configurations": { "data": { "config": "codegen.cjs" }, "metadata": { "config": "codegen-metadata.cjs" }, "admin": { "config": "codegen-admin.cjs" } } }, "mock:generate": { "executor": "nx:run-commands", "options": { "cwd": "{projectRoot}", "command": "dotenv npx vite-node scripts/generate-mock-data.ts" } }, "chromatic": { "configurations": { "ci": {} } }, "lingui:extract": { "executor": "nx:run-commands", "dependsOn": ["^build"], "options": { "cwd": "{projectRoot}", "command": "lingui extract --overwrite --clean" } }, "lingui:compile": { "executor": "nx:run-commands", "dependsOn": ["^build"], "options": { "cwd": "{projectRoot}", "command": "lingui compile --typescript" } } } }