{ "name": "evcc", "description": "evcc UI", "author": "evcc-io", "scripts": { "build": "vite build", "test": "cross-env TZ=Europe/Berlin vitest", "lint": "npm run lint:prettier && npm run lint:eslint && npm run lint:tsc && npm run lint:i18n", "lint:prettier": "prettier assets tests **/*.{yaml,sh} i18n/*.json --write", "lint:eslint": "eslint --fix --max-warnings=0", "lint:tsc": "vue-tsc --noEmit", "lint:i18n": "tsx i18n/check.ts", "dev": "vite", "playwright": "playwright test --ui", "playwright:ci": "cross-env CI=true playwright test", "simulator": "vite tests/simulator", "storybook": "storybook dev -p 6006", "license": "license-compliance --production --report detailed --allow \"MIT;Apache-2.0;ISC;BSD-2-Clause;BSD-3-Clause;0BSD\"" }, "type": "module", "main": "index.js", "dependencies": { "@codemirror/commands": "^6.8.1", "@codemirror/lang-yaml": "^6.1.2", "@codemirror/language": "^6.11.0", "@codemirror/state": "^6.5.2", "@codemirror/view": "^6.36.5", "@formkit/drag-and-drop": "^0.6.0", "@h2d2/shopicons": "^1.9.1", "@lezer/highlight": "^1.2.1", "@popperjs/core": "^2.11.8", "@unhead/vue": "^2.1.15", "axios": "^1.17.0", "bootstrap": "^5.3.8", "canvas-confetti": "^1.9.4", "chart.js": "^4.5.1", "chartjs-adapter-dayjs-4": "^1.0.4", "chartjs-plugin-datalabels": "^2.2.0", "countup.js": "^2.10.0", "dayjs": "^1.11.21", "echarts": "^6.1.0", "qrcode": "^1.5.4", "smoothscroll-polyfill": "^0.4.4", "snarkdown": "^2.0.0", "vue": "^3.5.38", "vue-chartjs": "^5.3.3", "vue-i18n": "^11.4.5", "vue-router": "^5.1.0" }, "engines": { "npm": ">=10.0.0", "node": ">=24.0.0" }, "license": "MIT", "repository": "github:evcc-io/evcc", "devDependencies": { "@eslint/eslintrc": "^3.3.5", "@eslint/js": "^9.39.4", "@jest/types": "^30.4.1", "@playwright/test": "^1.60.0", "@storybook/vue3": "^10.4.4", "@storybook/vue3-vite": "^10.4.4", "@types/body-parser": "^1.19.6", "@types/bootstrap": "^5.2.11", "@types/canvas-confetti": "^1.9.0", "@types/kill-port": "^2.0.3", "@types/qrcode": "^1.5.6", "@types/smoothscroll-polyfill": "^0.3.4", "@types/wait-on": "^5.3.4", "@types/ws": "^8.18.1", "@vitejs/plugin-legacy": "^8.0.2", "@vitejs/plugin-vue": "^6.0.7", "@vue/compiler-sfc": "^3.5.38", "@vue/eslint-config-prettier": "^10.2.0", "@vue/eslint-config-typescript": "^14.8.0", "@vue/test-utils": "^2.4.11", "@vue/tsconfig": "^0.9.1", "body-parser": "^2.2.2", "cross-env": "^10.1.0", "eslint": "^9.39.4", "eslint-config-prettier": "^10.1.8", "eslint-plugin-import": "^2.32.0", "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^5.5.6", "eslint-plugin-promise": "^7.3.0", "eslint-plugin-vue": "^10.9.2", "globals": "^17.6.0", "happy-dom": "^20.10.3", "jiti": "^2.7.0", "kill-port": "^2.0.1", "license-compliance": "^3.0.1", "mqtt": "^5.15.1", "prettier": "^3.8.4", "prettier-plugin-sh": "^0.18.1", "prettier-plugin-sort-json": "^4.2.0", "rollup-plugin-visualizer": "^7.0.1", "storybook": "^10.4.6", "terser": "^5.48.0", "tsx": "^4.22.4", "typescript": "^5.9.3", "typescript-eslint-language-service": "^5.0.5", "vite": "^8.0.16", "vitest": "^4.1.8", "vue-eslint-parser": "^10.4.1", "vue-hot-reload-api": "^2.3.4", "vue-tsc": "^3.3.5", "wait-on": "^9.0.10", "ws": "^8.21.0" } }