{ "private": true, "scripts": { "start": "concurrently -n w: npm:start:*", "start:back": "nodemon", "start:front": "max dev", "build:front": "max build", "build:back": "tsc -p back/tsconfig.json", "panel": "npm run build:back && node static/build/app.js", "gen:proto": "protoc --experimental_allow_proto3_optional --plugin=./node_modules/.bin/protoc-gen-ts_proto ./back/protos/*.proto --ts_proto_out=./ --ts_proto_opt=outputServices=grpc-js,env=node,esModuleInterop=true,snakeToCamel=false", "gen:api": "python3 -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. ./back/protos/api.proto", "prettier": "prettier --write '**/*.{js,jsx,tsx,ts,less,md,json}'", "postinstall": "max setup 2>/dev/null || true", "test": "umi-test", "test:coverage": "umi-test --coverage" }, "gitHooks": { "pre-commit": "lint-staged" }, "lint-staged": { "*.{js,jsx,less,md,json}": [ "prettier --write" ], "*.ts?(x)": [ "prettier --parser=typescript --write" ] }, "pnpm": { "peerDependencyRules": { "ignoreMissing": [ "react", "react-dom", "antd", "dva", "postcss", "webpack", "eslint", "stylelint", "redux", "@babel/core", "monaco-editor", "rc-field-form", "@types/lodash.merge", "rollup", "styled-components" ], "allowedVersions": { "react": "18", "react-dom": "18", "dva-core": "2" } }, "overrides": { "sqlite3": "git+https://github.com/whyour/node-sqlite3.git#v1.0.3" } }, "dependencies": { "@grpc/grpc-js": "^1.12.3", "@grpc/proto-loader": "^0.7.13", "@otplib/preset-default": "^12.0.1", "body-parser": "^1.20.3", "celebrate": "^15.0.3", "chokidar": "^4.0.1", "cors": "^2.8.5", "cron-parser": "^4.9.0", "cross-spawn": "^7.0.6", "dayjs": "^1.11.13", "dotenv": "^16.4.6", "express": "^4.21.2", "express-jwt": "^8.4.1", "express-rate-limit": "^7.4.1", "express-urlrewrite": "^2.0.3", "undici": "^7.9.0", "hpagent": "^1.2.0", "http-proxy-middleware": "^3.0.3", "iconv-lite": "^0.6.3", "js-yaml": "^4.1.0", "jsonwebtoken": "^9.0.2", "lodash": "^4.17.21", "multer": "1.4.5-lts.1", "node-schedule": "^2.1.0", "nodemailer": "^6.9.16", "p-queue-cjs": "7.3.4", "@bufbuild/protobuf": "^2.2.3", "ps-tree": "^1.2.0", "reflect-metadata": "^0.2.2", "sequelize": "^6.37.5", "serve-handler": "^6.1.6", "sockjs": "^0.3.24", "sqlite3": "git+https://github.com/whyour/node-sqlite3.git#v1.0.3", "toad-scheduler": "^3.0.1", "typedi": "^0.10.0", "uuid": "^11.0.3", "winston": "^3.17.0", "winston-daily-rotate-file": "^5.0.0", "request-ip": "3.3.0", "ip2region": "2.3.0", "keyv": "^5.2.3", "@keyv/sqlite": "^4.0.1", "proper-lockfile": "^4.1.2", "compression": "^1.7.4", "helmet": "^6.0.1" }, "devDependencies": { "moment": "2.30.1", "@ant-design/icons": "^5.0.1", "@ant-design/pro-layout": "6.38.22", "@codemirror/view": "^6.34.1", "@codemirror/state": "^6.4.1", "@monaco-editor/react": "4.2.1", "@react-hook/resize-observer": "^2.0.2", "react-router-dom": "6.26.1", "@types/body-parser": "^1.19.2", "@types/cors": "^2.8.12", "@types/cross-spawn": "^6.0.2", "@types/express": "^4.17.13", "@types/express-jwt": "^6.0.4", "@types/file-saver": "2.0.2", "@types/js-yaml": "^4.0.5", "@types/jsonwebtoken": "^8.5.8", "@types/lodash": "^4.14.185", "@types/multer": "^1.4.7", "@types/node": "^17.0.21", "@types/node-schedule": "^1.3.2", "@types/nodemailer": "^6.4.4", "@types/qrcode.react": "^1.0.2", "@types/react": "^18.0.20", "@types/react-copy-to-clipboard": "^5.0.4", "@types/react-dom": "^18.0.6", "@types/serve-handler": "^6.1.1", "@types/sockjs": "^0.3.33", "@types/sockjs-client": "^1.5.1", "@types/uuid": "^8.3.4", "@types/request-ip": "0.0.41", "@types/proper-lockfile": "^4.1.4", "@types/ps-tree": "^1.1.6", "@uiw/codemirror-extensions-langs": "^4.21.9", "@uiw/react-codemirror": "^4.21.9", "@umijs/max": "^4.4.4", "@umijs/ssr-darkreader": "^4.9.45", "ahooks": "^3.7.8", "ansi-to-react": "^6.1.6", "antd": "^4.24.16", "antd-img-crop": "^4.23.0", "axios": "^1.4.0", "compression-webpack-plugin": "9.2.0", "concurrently": "^7.0.0", "react-hotkeys-hook": "^4.6.1", "file-saver": "2.0.2", "lint-staged": "^13.0.3", "monaco-editor": "0.33.0", "nodemon": "^3.0.1", "prettier": "^2.5.1", "pretty-bytes": "6.1.1", "qiniu": "^7.4.0", "qrcode.react": "^1.0.1", "query-string": "^7.1.1", "rc-tween-one": "^3.0.6", "rc-virtual-list": "3.15.0", "react": "18.3.1", "react-copy-to-clipboard": "^5.1.0", "react-diff-viewer": "^3.1.1", "react-dnd": "^16.0.1", "react-dnd-html5-backend": "^16.0.1", "react-dom": "18.3.1", "react-intl-universal": "^2.12.0", "react-split-pane": "^0.1.92", "sockjs-client": "^1.6.0", "ts-node": "^10.9.2", "ts-proto": "^2.6.1", "tslib": "^2.4.0", "typescript": "5.2.2", "vh-check": "^2.0.5", "virtualizedtableforantd4": "1.3.0", "@types/compression": "^1.7.2", "@types/helmet": "^4.0.0" } }