48 lines
1.4 KiB
JavaScript
48 lines
1.4 KiB
JavaScript
const Ajv = require("ajv")
|
|
const fs = require("fs")
|
|
const path = require("path")
|
|
const schema = require("../../src/i18n/translations/$schema.json")
|
|
|
|
const ajv = new Ajv({ allErrors: true })
|
|
const validate = ajv.compile(schema)
|
|
|
|
// Get file name from command line arguments
|
|
const fileName = process.argv[2]
|
|
|
|
if (!fileName) {
|
|
console.error("Please provide a file name (e.g., en.json) as an argument.")
|
|
process.exit(1)
|
|
}
|
|
|
|
const filePath = path.join(__dirname, "../../src/i18n/translations", fileName)
|
|
|
|
try {
|
|
const translations = JSON.parse(fs.readFileSync(filePath, "utf-8"))
|
|
|
|
if (!validate(translations)) {
|
|
console.error(`\nValidation failed for ${fileName}:`)
|
|
validate.errors?.forEach((error) => {
|
|
if (error.keyword === "required") {
|
|
const missingKeys = error.params.missingProperty
|
|
console.error(
|
|
` Missing required key: "${missingKeys}" at ${error.instancePath}`
|
|
)
|
|
} else if (error.keyword === "additionalProperties") {
|
|
const extraKey = error.params.additionalProperty
|
|
console.error(
|
|
` Unexpected key: "${extraKey}" at ${error.instancePath}`
|
|
)
|
|
} else {
|
|
console.error(` Error: ${error.message} at ${error.instancePath}`)
|
|
}
|
|
})
|
|
process.exit(1)
|
|
} else {
|
|
console.log(`${fileName} matches the schema.`)
|
|
process.exit(0)
|
|
}
|
|
} catch (error) {
|
|
console.error(`Error reading or parsing file: ${error.message}`)
|
|
process.exit(1)
|
|
}
|