{ "name": "multiforum", "version": "0.2.0", "private": true, "license": "MIT", "type": "module", "packageManager": "pnpm@10.28.2", "engines": { "node": ">=24.13.0 <27" }, "scripts": { "build": "nuxt build", "dev": "nuxt dev --host localhost --port 3000", "dev:mocked": "VITE_E2E_MOCK_MODE=true nuxt dev --host localhost --port 3000", "generate": "nuxt generate", "preview": "nuxt preview", "postinstall": "nuxt prepare", "graphql:validate": "node scripts/validate-graphql-operations.mjs", "graphql:inventory": "node scripts/validate-graphql-operations.mjs --report-only --report artifacts/graphql/operations.json", "graphql:check": "node scripts/validate-graphql-operations.mjs --report artifacts/graphql/operations.json", "graphql:test": "node --test scripts/graphql-operations.test.mjs scripts/graphql-typed-operations.test.mjs scripts/typed-operation-consumers.test.mjs scripts/create-issue-contract.test.mjs", "schema:check": "node scripts/check-graphql-schema.mjs", "schema:update": "node scripts/update-graphql-schema.mjs", "schema:test": "node --test scripts/graphql-schema-contract.test.mjs", "compile": "node scripts/generate-graphql-types.mjs && pnpm operations:generate", "lint": "eslint --cache --cache-location node_modules/.cache/eslint/", "lint:a11y": "pnpm exec eslint \"components/**/*.vue\" --quiet --cache --cache-location node_modules/.cache/eslint/", "prepare": "husky install", "prettier:check": "prettier --check .", "start": "nuxt start", "test": "playwright test", "test:playwright": "playwright test tests/playwright/mocked", "test:playwright:mocked": "playwright test tests/playwright/mocked", "test:playwright:stateful:admin": "PLAYWRIGHT_STATEFUL=true playwright test tests/playwright/stateful/adminModeration", "playwright:neo4j:up": "docker compose -f docker-compose.playwright.yml up -d --wait", "playwright:neo4j:down": "docker compose -f docker-compose.playwright.yml down -v", "build:playwright:mocked": "NITRO_PRESET=node-server VITE_E2E_MOCK_MODE=true VITE_GRAPHQL_URL=http://127.0.0.1:4100/graphql VITE_SERVER_NAME='Playwright Test Server' VITE_SENTRY_AUTH_TOKEN='' nuxt build", "test:playwright:mocked:build": "playwright test --config playwright.build.config.ts", "test:unit": "NODE_OPTIONS=--no-experimental-webstorage vitest", "test:unit:run": "NODE_OPTIONS=--no-experimental-webstorage vitest run", "coverage": "NODE_OPTIONS=--no-experimental-webstorage vitest run --coverage", "coverage:ui": "NODE_OPTIONS=--no-experimental-webstorage vitest --coverage --ui", "coverage:open": "pnpm run coverage && open coverage/index.html", "coverage:e2e:build": "E2E_COVERAGE=true pnpm run build:playwright:mocked", "coverage:e2e:collect": "E2E_COVERAGE=true playwright test --config playwright.build.config.ts", "coverage:e2e:report": "node --max-old-space-size=6144 tests/playwright/coverage/report.mjs", "coverage:audit": "node scripts/coverage-audit.mjs", "perf:budget": "node scripts/check-route-budgets.mjs", "test:performance-budgets": "node --test scripts/check-route-budgets.test.mjs", "knip": "knip", "tsc": "vue-tsc --noEmit", "verify": "pnpm run tsc && pnpm run test:unit:run", "lint-verify": "pnpm run test:unit:run && pnpm run lint:a11y", "operations:generate": "node scripts/generate-graphql-operations.mjs", "operations:check": "node scripts/generate-graphql-operations.mjs --check && node scripts/typed-operation-consumers.mjs --report artifacts/graphql/typed-consumers.json", "schema:types:check": "node scripts/generate-graphql-types.mjs --check", "fix:contracts": "pnpm compile && pnpm operations:contract:generate", "operations:contract:generate": "node scripts/frontend-operation-contract.mjs --generate", "operations:contract:check": "node scripts/frontend-operation-contract.mjs --check", "operations:export": "node scripts/frontend-operation-contract.mjs --export", "compatibility:test": "node --test scripts/frontend-operation-contract.test.mjs", "compatibility:check": "node scripts/check-backend-compatibility.mjs" }, "dependencies": { "@apollo/client": "^3.13.5", "@auth0/auth0-nuxt": "^1.1.0", "@codemirror/lang-yaml": "^6.1.3", "@codemirror/theme-one-dark": "^6.1.3", "@codemirror/view": "^6.43.8", "@floating-ui/vue": "^2.0.1", "@fortawesome/fontawesome-free": "^7.3.1", "@fortawesome/fontawesome-svg-core": "7.3.1", "@fortawesome/free-regular-svg-icons": "7.3.1", "@fortawesome/free-solid-svg-icons": "7.3.0", "@fortawesome/vue-fontawesome": "^3.3.0", "@google/model-viewer": "^4.4.0", "@googlemaps/js-api-loader": "^2.1.3", "@googlemaps/markerclusterer": "^2.6.2", "@graphql-typed-document-node/core": "3.2.0", "@headlessui/vue": "^1.7.23", "@sentry/nuxt": "^10.62.0", "@tailwindcss/forms": "^0.5.11", "@tailwindcss/typography": "^0.5.20", "@upstash/redis": "^1.38.0", "@vue/apollo-composable": "^4.2.2", "axios": "^1.20.0", "chart.js": "^4.5.1", "codemirror": "^6.0.2", "crypto-js": "^4.2.0", "diff-match-patch": "^1.0.5", "dotenv": "^18.0.8", "emoji-picker-element": "^1.29.1", "graphql": "^16.14.2", "graphql-tag": "^2.12.7", "h3": "^1.15.11", "highlight.js": "^11.12.0", "identicon.js": "^2.3.3", "js-yaml": "^5.4.2", "lucide-vue-next": "^1.0.0", "luxon": "^3.6.0", "markdown-it": "^14.3.1", "md-editor-v3": "^6.5.6", "nuxt": "~4.5.1", "pinia": "^3.0.2", "remove-markdown": "^0.8.0", "sanitize-html": "^2.18.1", "three": "^0.183.2", "tslib": "^2.8.1", "unstorage": "^1.17.5", "vue": "^3.5.44", "vue-chartjs": "^5.3.4", "vue-codemirror": "^6.1.1", "vue-easy-lightbox": "^1.19.0", "vue-router": "^5.3.1", "vue3-popper": "^1.5.0", "vuedraggable": "^4.1.0" }, "devDependencies": { "@axe-core/playwright": "^4.12.1", "@graphql-codegen/cli": "7.4.6", "@graphql-codegen/client-preset": "^6.2.3", "@graphql-codegen/typed-document-node": "7.1.1", "@graphql-codegen/typescript": "6.1.2", "@graphql-codegen/typescript-operations": "6.1.10", "@nuxt/eslint-config": "^1.17.0", "@nuxt/image": "^2.1.0", "@nuxt/schema": "~4.5.1", "@nuxt/types": "^2.18.1", "@nuxtjs/apollo": "^5.0.0-alpha.15", "@nuxtjs/google-fonts": "^3.2.0", "@pinia/testing": "^1.0.1", "@playwright/test": "^1.64.1", "@tailwindcss/vite": "^4.3.3", "@types/crypto-js": "^4.2.2", "@types/diff-match-patch": "^1.0.36", "@types/google.maps": "^3.66.7", "@types/identicon.js": "^2.3.5", "@types/luxon": "^3.7.2", "@types/markdown-it": "^14.1.2", "@types/node": "^26.1.0", "@types/sanitize-html": "^2.16.1", "@types/webpack-env": "^1.18.8", "@vitejs/plugin-vue": "^6.0.10", "@vitest/coverage-v8": "^4.1.11", "@vitest/ui": "^4.1.11", "@vue/test-utils": "^2.4.11", "accented": "^1.6.0", "eslint": "^10.6.0", "eslint-plugin-vuejs-accessibility": "^2.5.0", "globals": "^17.13.0", "happy-dom": "^20.14.5", "husky": "^9.1.7", "jsdom": "^30.1.1", "knip": "^6.41.0", "lint-staged": "^17.2.0", "monocart-coverage-reports": "^2.12.12", "prettier": "^3.9.10", "prettier-plugin-tailwindcss": "^0.8.1", "sass": "^1.101.0", "tailwindcss": "^4.3.3", "typescript": "^6.0.3", "vite": "^8.3.4", "vitest": "^4.1.11", "vue-tsc": "^3.3.11" }, "lint-staged": { "*.ts": [ "eslint --fix --cache --cache-location node_modules/.cache/eslint/" ], "*.vue": [ "eslint --fix --cache --cache-location node_modules/.cache/eslint/" ] } }