{ "name": "runtipi", "version": "1.6.0", "description": "A homeserver for everyone", "scripts": { "knip": "knip", "prepare": "mkdir -p state && echo \"{}\" > state/system-info.json && echo \"random-seed\" > state/seed", "copy:migrations": "mkdir -p dist/migrations && cp -r ./src/server/migrations dist", "test": "dotenv -e .env.test -- jest --colors", "test:e2e": "NODE_ENV=test dotenv -e .env -e .env.e2e -- playwright test", "test:e2e:ui": "NODE_ENV=test dotenv -e .env -e .env.e2e -- playwright test --ui", "test:client": "jest --colors --selectProjects client --", "test:server": "jest --colors --selectProjects server --", "test:vite": "dotenv -e .env.test -- vitest run --coverage", "dev": "npm run copy:migrations && npm run db:migrate && nodemon", "dev:watcher": "pnpm -r --filter cli dev", "db:migrate": "NODE_ENV=development dotenv -e .env -- tsx ./src/server/run-migrations-dev.ts", "start": "NODE_ENV=production node index.js", "lint": "next lint", "lint:fix": "next lint --fix", "build": "npm run copy:migrations && node ./esbuild.js build", "build:server": "node ./esbuild.js build", "build:next": "next build", "start:dev-container": "./.devcontainer/filewatcher.sh && npm run start:dev", "start:rc": "docker compose -f docker-compose.rc.yml --env-file .env up --build", "start:dev": "npm run prepare && docker compose -f docker-compose.dev.yml up --build", "start:e2e": "./scripts/start-e2e.sh latest", "start:pg": "docker run --name test-db -p 5433:5432 -d --rm -e POSTGRES_PASSWORD=postgres postgres:14", "version": "echo $npm_package_version", "release:rc": "./scripts/deploy/release-rc.sh", "test:build": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t meienberger/runtipi:test .", "test:build:arm64": "docker buildx build --platform linux/arm64 -t meienberger/runtipi:test .", "test:build:arm7": "docker buildx build --platform linux/arm/v7 -t meienberger/runtipi:test .", "test:build:amd64": "docker buildx build --platform linux/amd64 -t meienberger/runtipi:test .", "tsc": "tsc" }, "dependencies": { "@hookform/resolvers": "^3.1.1", "@otplib/core": "^12.0.1", "@otplib/plugin-crypto": "^12.0.1", "@otplib/plugin-thirty-two": "^12.0.1", "@radix-ui/react-dialog": "^1.0.4", "@radix-ui/react-dropdown-menu": "^2.0.5", "@radix-ui/react-select": "^1.2.2", "@radix-ui/react-switch": "^1.0.3", "@radix-ui/react-tabs": "^1.0.4", "@runtipi/postgres-migrations": "^5.3.0", "@runtipi/shared": "workspace:^", "@tabler/core": "1.0.0-beta19", "@tabler/icons-react": "^2.23.0", "@tanstack/react-query": "^4.29.7", "@tanstack/react-query-devtools": "^4.29.7", "@trpc/client": "^10.27.1", "@trpc/next": "^10.27.1", "@trpc/react-query": "^10.27.1", "@trpc/server": "^10.27.1", "argon2": "^0.30.3", "bullmq": "^4.5.0", "clsx": "^1.1.1", "connect-redis": "^7.1.0", "cookies-next": "^2.1.2", "drizzle-orm": "^0.27.0", "express": "^4.17.3", "express-session": "^1.17.3", "fs-extra": "^11.1.1", "isomorphic-fetch": "^3.0.0", "lodash.merge": "^4.6.2", "next": "13.4.7", "next-intl": "^2.15.1", "pg": "^8.11.1", "qrcode.react": "^3.1.0", "react": "18.2.0", "react-dom": "18.2.0", "react-hook-form": "^7.45.1", "react-hot-toast": "^2.4.1", "react-markdown": "^8.0.7", "react-select": "^5.7.3", "react-tooltip": "^5.16.1", "redaxios": "^0.5.1", "redis": "^4.6.7", "remark-breaks": "^3.0.3", "remark-gfm": "^3.0.1", "sass": "^1.63.6", "semver": "^7.5.3", "sharp": "0.32.1", "superjson": "^1.12.3", "tslib": "^2.5.3", "uuid": "^9.0.0", "validator": "^13.7.0", "winston": "^3.9.0", "zod": "^3.21.4", "zustand": "^4.3.8" }, "devDependencies": { "@babel/core": "^7.22.5", "@faker-js/faker": "^8.0.2", "@playwright/test": "^1.35.1", "@testing-library/dom": "^9.3.1", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.4.3", "@total-typescript/shoehorn": "^0.1.1", "@total-typescript/ts-reset": "^0.4.2", "@types/express": "^4.17.13", "@types/express-session": "^1.17.7", "@types/fs-extra": "^11.0.1", "@types/isomorphic-fetch": "^0.0.36", "@types/jest": "^29.5.2", "@types/lodash.merge": "^4.6.7", "@types/node": "20.3.2", "@types/pg": "^8.10.2", "@types/react": "18.2.14", "@types/react-dom": "18.2.6", "@types/semver": "^7.5.0", "@types/supertest": "^2.0.12", "@types/testing-library__jest-dom": "^5.14.6", "@types/uuid": "^9.0.2", "@types/validator": "^13.7.17", "@typescript-eslint/eslint-plugin": "^5.60.1", "@typescript-eslint/parser": "^5.60.1", "@vitejs/plugin-react": "^4.0.1", "@vitest/coverage-v8": "^0.32.2", "dotenv-cli": "^7.2.1", "esbuild": "^0.16.17", "eslint": "8.43.0", "eslint-config-airbnb": "^19.0.4", "eslint-config-airbnb-typescript": "^17.0.0", "eslint-config-next": "13.4.7", "eslint-config-prettier": "^8.8.0", "eslint-import-resolver-typescript": "^3.5.5", "eslint-plugin-import": "^2.27.5", "eslint-plugin-jest": "^27.2.2", "eslint-plugin-jest-dom": "^5.0.1", "eslint-plugin-jsdoc": "^46.3.0", "eslint-plugin-jsx-a11y": "^6.6.1", "eslint-plugin-react": "^7.31.10", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-testing-library": "^5.11.0", "jest": "^29.5.0", "jest-environment-jsdom": "^29.5.0", "knip": "^2.19.4", "memfs": "^4.2.0", "msw": "^1.2.2", "next-router-mock": "^0.9.7", "nodemon": "^2.0.22", "prettier": "^2.8.8", "supertest": "^6.3.3", "ts-jest": "^29.1.0", "ts-node": "^10.9.1", "tsx": "^3.12.7", "typescript": "5.1.5", "vite-tsconfig-paths": "^4.2.0", "vitest": "^0.32.2", "wait-for-expect": "^3.0.2" }, "msw": { "workerDirectory": "public" }, "repository": { "type": "git", "url": "git+https://github.com/meienberger/runtipi.git" }, "author": "", "license": "GNU General Public License v3.0", "bugs": { "url": "https://github.com/meienberger/runtipi/issues" }, "homepage": "https://github.com/meienberger/runtipi#readme" }