{"_id":"@aliyun-obv/dashboard-validator","_rev":"4-2e9ff0dfad05d3195e1eaf2ea177291a","name":"@aliyun-obv/dashboard-validator","dist-tags":{"latest":"0.0.3"},"versions":{"0.0.1":{"name":"@aliyun-obv/dashboard-validator","version":"0.0.1","license":"Apache-2.0","_id":"@aliyun-obv/dashboard-validator@0.0.1","maintainers":[{"name":"yuecjnadt","email":"yuecjn@gmail.com"},{"name":"yangling1996","email":"yl260087@alibaba-inc.com"},{"name":"7678tqh","email":"qinghaotu@126.com"}],"bin":{"dashboard-validator":"bin/cli.js"},"dist":{"shasum":"1e41c71e781d0a67f30f1b0c3233f1b9f2905e45","tarball":"https://registry.npmjs.org/@aliyun-obv/dashboard-validator/-/dashboard-validator-0.0.1.tgz","fileCount":4,"integrity":"sha512-EThfK6ir2jHnXn3OSSDCYS3IJG/r1lozszbQAWC7aRAYRvi1422JN/2zGoIHS/qwPHdlpEns71OOM56xs+q9rw==","signatures":[{"sig":"MEQCIEIk/U+4aIK6Pl9ngSc+/viesVZtp2iHeioJsEwl+3IAAiAnNy4NQM53Dffs9tsVOZ5OQV5XL0CgcVBfKL7p+19nvA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17616},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"8a8afb778391aa09f99014d1cdc8c0bcbcc80cd2","scripts":{"pb":"npm run build && npm publish --access public --registry=https://registry.npmjs.org/ && tnpm sync @aliyun-obv/dashboard-validator","build":"rimraf dist && rollup --config rollup.config.js --bundleConfigAsCjs","clean":"rimraf dist","prepublishOnly":"pnpm build","validate:dashboard":"pnpm dashboard-validator --dashboard --json","dashboard-validator":"tsx --tsconfig ../../tsconfig.json src/validator/cli.ts"},"_npmUser":{"name":"7678tqh","email":"qinghaotu@126.com"},"_npmVersion":"10.7.0","description":"Dashboard/Chart validator for obviz-explorer","directories":{},"_nodeVersion":"18.20.3","dependencies":{"tsx":"^4.19.0","tslib":"^2.6.2","rimraf":"^5.0.7","rollup":"^4.0.0","fs-extra":"^11.2.0","commander":"^12.1.0","typescript":"^5.2.2","rollup-plugin-esbuild":"^6.0.0","@rollup/plugin-typescript":"^11.1.5","@aliyun-obv/rollup-plugin-dts":"1.0.4"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.7","typescript":"^5.6.3","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dashboard-validator_0.0.1_1777267784478_0.3496272856416549","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@aliyun-obv/dashboard-validator","version":"0.0.2","license":"Apache-2.0","_id":"@aliyun-obv/dashboard-validator@0.0.2","maintainers":[{"name":"yuecjnadt","email":"yuecjn@gmail.com"},{"name":"yangling1996","email":"yl260087@alibaba-inc.com"},{"name":"7678tqh","email":"qinghaotu@126.com"}],"bin":{"dashboard-validator":"bin/cli.js"},"dist":{"shasum":"862dc16ac9f62411e29e76c99338d13a2d6ceccd","tarball":"https://registry.npmjs.org/@aliyun-obv/dashboard-validator/-/dashboard-validator-0.0.2.tgz","fileCount":4,"integrity":"sha512-Ae2IXvy8dJGDcSszA+EYNu3I4CcaYRS/Azifd7Z+Eyzsz9RvHAhPAjF9O5A4yVMs16LM3UUBhbNyb1DZNt0nwg==","signatures":[{"sig":"MEUCIEHy5aZ7dOtUvtrWlbOzEdlx8id43iy1oIlneVEHAY2dAiEA2jbL5hPnWh96FYNgorcNpQ4JsxLj1aJWlLwLFTJV+KY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":212678},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"b2df4d121a88cd1ac534df226f786b0eeea62842","scripts":{"pb":"npm run build && npm publish --access public --registry=https://registry.npmjs.org/ && tnpm sync @aliyun-obv/dashboard-validator","build":"rimraf dist && pnpm extract:chart-resources && rollup --config rollup.config.js --bundleConfigAsCjs","clean":"rimraf dist","prepublishOnly":"pnpm build","validate:dashboard":"pnpm dashboard-validator --dashboard --json","dashboard-validator":"tsx --tsconfig ../../tsconfig.json src/validator/cli.ts","extract:chart-resources":"node scripts/extract-chart-resources.mjs"},"_npmUser":{"name":"7678tqh","email":"qinghaotu@126.com"},"_npmVersion":"10.7.0","description":"Dashboard/Chart validator for obviz-explorer","directories":{},"_nodeVersion":"18.20.3","dependencies":{"tsx":"^4.19.0","tslib":"^2.6.2","rimraf":"^5.0.7","rollup":"^4.0.0","fs-extra":"^11.2.0","commander":"^12.1.0","typescript":"^5.2.2","@rollup/plugin-json":"^6.1.0","rollup-plugin-esbuild":"^6.0.0","@rollup/plugin-typescript":"^11.1.5","@aliyun-obv/rollup-plugin-dts":"1.0.4"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.7","typescript":"^5.6.3","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dashboard-validator_0.0.2_1778069381291_0.339146256573732","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@aliyun-obv/dashboard-validator","version":"0.0.3","license":"Apache-2.0","_id":"@aliyun-obv/dashboard-validator@0.0.3","maintainers":[{"name":"yuecjnadt","email":"yuecjn@gmail.com"},{"name":"yangling1996","email":"yl260087@alibaba-inc.com"},{"name":"7678tqh","email":"qinghaotu@126.com"}],"bin":{"dashboard-validator":"bin/cli.js"},"dist":{"shasum":"605e7458f2da71a7169223809ec695ca30933eae","tarball":"https://registry.npmjs.org/@aliyun-obv/dashboard-validator/-/dashboard-validator-0.0.3.tgz","fileCount":5,"integrity":"sha512-HhLiG1seerh9II+SaCtBFdlLJlhoI3HJXe3TGwMaZ9N7fRz/3FPIhenc32Gg+DxyhDeRh+KPO9A+NeiYd3wc9w==","signatures":[{"sig":"MEYCIQCLo4eUHpY8JiksS8RwuW2MqVPH/MIxL/PDVkLygCE5RwIhAJHjdFQ/WUQFgKtw5hbR0e+SgSdSIQcXqBFrxkHY2tts","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":98747},"main":"./dist/index.js","type":"module","gitHead":"6d33659148e1da3fd28dd1f6989e8c67851897a0","scripts":{"pb":"npm run build && npm publish --access public --registry=https://registry.npmjs.org/ && tnpm sync @aliyun-obv/dashboard-validator","build":"rimraf dist && pnpm extract:chart-resources && pnpm extract:dashboard-resources && rollup --config rollup.config.js --bundleConfigAsCjs","clean":"rimraf dist","check:package":"node scripts/check-package.mjs","prepublishOnly":"pnpm build","validate:dashboard":"pnpm dashboard-validator --dashboard --json","dashboard-validator":"tsx --tsconfig ../../tsconfig.json src/validator/cli.ts","extract:chart-resources":"node scripts/extract-chart-resources.mjs","extract:dashboard-resources":"node scripts/extract-dashboard-resources.mjs"},"_npmUser":{"name":"7678tqh","email":"qinghaotu@126.com"},"_npmVersion":"10.7.0","description":"Dashboard/Chart validator for obviz-explorer","directories":{},"_nodeVersion":"18.20.3","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","tslib":"^2.6.2","rimraf":"^5.0.7","rollup":"^4.0.0","typescript":"^5.6.3","@types/node":"^18.0.0","@rollup/plugin-json":"^6.1.0","rollup-plugin-esbuild":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dashboard-validator_0.0.3_1778139238650_0.20998128065500166","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-04-27T05:29:44.368Z","modified":"2026-05-28T03:23:18.858Z","0.0.1":"2026-04-27T05:29:44.620Z","0.0.2":"2026-05-06T12:09:41.446Z","0.0.3":"2026-05-07T07:33:58.858Z"},"license":"Apache-2.0","description":"Dashboard/Chart validator for obviz-explorer","maintainers":[{"email":"yuecjn@gmail.com","name":"yuecjnadt"},{"email":"yl260087@alibaba-inc.com","name":"yangling1996"},{"email":"ly403664@alibaba-inc.com","name":"yunyi-alibaba"},{"email":"qinghaotu@126.com","name":"7678tqh"}],"readme":"# dashboard-validator\n\n用于校验仪表盘 JSON / 图表 JSON 的命令行工具。\n\n## 安装后直接使用\n\n全局安装：\n\n```bash\nnpm i -g @aliyun-obv/dashboard-validator\ndashboard-validator --help\n```\n\n或不全局安装，使用 npx：\n\n```bash\nnpx @aliyun-obv/dashboard-validator --help\n```\n\n## 用法\n\n在仓库根目录执行：\n\n```bash\npnpm dashboard-validator --dashboard --json ./dashboard.json\n```\n\n或校验单图：\n\n```bash\npnpm dashboard-validator --chart --string '{\"type\":\"linepro\",\"title\":\"test\",\"display\":{\"queryOptionMap\":{\"A\":{\"xAxisKey\":\"__time__\",\"name\":\"A\",\"yAxisKeys\":[\"pv\"]}},\"graphOptions\":{\"lineWidth\":2},\"basicOptions\":{\"displayName\":\"test\"}}}'\n```\n\n## 校验来源\n\n工具在构建阶段从真实实现抽取 compact resource：\n\n- 从 `packages/dashboard/src/allCharts/registerForValidator.ts` 和各图表的 `getOptionBuilder` 提取图表 `display` 配置结构，生成 `src/validator/chart-resources.json`\n- 从 `packages/interface/src/dashboard/core/dashboardChart.ts`、`packages/dashboard/src/NewDashboard/util.tsx`、`packages/dashboard/src/NewDashboard/constant.ts` 和默认 chart model 提取 dashboard / chart 顶层字段、`ChartDisplay` 通用字段、布局常量和保存前清理策略，生成 `src/validator/dashboard-resources.json`\n\n发布后的 CLI 运行时只读取包内已打包的图表资源，不依赖业务仓库里的 dashboard 源码文件。\n\n完整 dashboard 校验会额外检查：\n\n- dashboard 根字段：`displayName`、`dashboardName`、`description`、`attribute`、`charts`\n- `attribute.type`：仅允许 `free` 或 `grid`\n- 图表顶层字段：`type`、`title`、`display`、`search`、`action`\n- 布局字段：`xPos`、`yPos`、`width`、`height`、`zIndex`、`version`\n- dashboard 级关系：图表 `title` 唯一，`connect` / 容器类引用的 chart title 必须存在\n\n未知图表类型会作为错误处理；`attribute` 中未知扩展字段只会产生 warning。\n\n`display` 的结构会按真实保存结构校验，例如 linepro 的字段在分组下：\n\n```json\n{\n\t\"queryOptionMap\": {\n\t\t\"A\": {\n\t\t\t\"xAxisKey\": \"__time__\",\n\t\t\t\"name\": \"A\",\n\t\t\t\"yAxisKeys\": [\"pv\", \"uv\"]\n\t\t}\n\t},\n\t\"standardOption\": {\n\t\t\"format\": \"none\",\n\t\t\"unit\": { \"unit\": \"none\" }\n\t},\n\t\"yAxisOption\": { \"show\": true, \"position\": 3, \"stackingMode\": \"none\" },\n\t\"graphOptions\": { \"lineWidth\": 2, \"fillOpacity\": 40 },\n\t\"tooltipOption\": { \"mode\": \"all\", \"sortOrder\": \"none\", \"labelFormat\": \"\" },\n\t\"basicOptions\": { \"displayName\": \"test\" }\n}\n```\n","readmeFilename":"README.md"}