Browse Source

Validate the YAML files

mcamou 1 năm trước cách đây
mục cha
commit
8cd2fb772c

+ 2 - 1
governance/xc_admin/packages/xc_admin_frontend/package.json

@@ -36,7 +36,8 @@
     "sharp": "^0.33.4",
     "use-debounce": "^9.0.2",
     "web3": "^4.8.0",
-    "yaml": "^2.1.1"
+    "yaml": "^2.1.1",
+    "zod": "^3.23.8"
   },
   "devDependencies": {
     "@svgr/webpack": "^6.3.1",

+ 8 - 3
governance/xc_admin/packages/xc_admin_frontend/pages/index.tsx

@@ -1,4 +1,5 @@
 import YAML from 'yaml'
+import { z } from 'zod'
 import { Tab } from '@headlessui/react'
 import * as fs from 'fs'
 import type { GetServerSideProps, NextPage } from 'next'
@@ -14,12 +15,16 @@ import { StatusFilterProvider } from '../contexts/StatusFilterContext'
 import { classNames } from '../utils/classNames'
 import '../mappings/signers.json'
 
+const keyToNameMappingSchema = z.array(
+  z.object({ key: z.string(), name: z.string() })
+)
+
 const readPublisherKeyToNameMapping = async (filename: string) => {
   try {
     await fs.promises.access(filename)
-    const arr = YAML.parse(await fs.promises.readFile(filename, 'utf8')).map(
-      (key: string, name: string) => [key, name]
-    )
+    const arr = keyToNameMappingSchema
+      .parse(YAML.parse(await fs.promises.readFile(filename, 'utf8')))
+      .map((key, name) => [key, name])
     return Object.fromEntries(arr)
   } catch {
     return {}

+ 3 - 0
pnpm-lock.yaml

@@ -677,6 +677,9 @@ importers:
       yaml:
         specifier: ^2.1.1
         version: 2.4.5
+      zod:
+        specifier: ^3.23.8
+        version: 3.23.8
     devDependencies:
       '@svgr/webpack':
         specifier: ^6.3.1