Initial commit: backend, storefront, vendor-panel added
This commit is contained in:
64
vendor-panel/scripts/i18n/generate-schema.js
Normal file
64
vendor-panel/scripts/i18n/generate-schema.js
Normal file
@@ -0,0 +1,64 @@
|
||||
const fs = require("fs/promises")
|
||||
const path = require("path")
|
||||
const prettier = require("prettier")
|
||||
|
||||
const translationsDir = path.join(__dirname, "../../src/i18n/translations")
|
||||
const enPath = path.join(translationsDir, "en.json")
|
||||
const schemaPath = path.join(translationsDir, "$schema.json")
|
||||
|
||||
function generateSchemaFromObject(obj) {
|
||||
if (typeof obj !== "object" || obj === null) {
|
||||
return { type: typeof obj }
|
||||
}
|
||||
|
||||
if (Array.isArray(obj)) {
|
||||
return {
|
||||
type: "array",
|
||||
items: generateSchemaFromObject(obj[0] || "string"),
|
||||
}
|
||||
}
|
||||
|
||||
const properties = {}
|
||||
const required = []
|
||||
|
||||
Object.entries(obj).forEach(([key, value]) => {
|
||||
properties[key] = generateSchemaFromObject(value)
|
||||
required.push(key)
|
||||
})
|
||||
|
||||
return {
|
||||
type: "object",
|
||||
properties,
|
||||
required,
|
||||
additionalProperties: false,
|
||||
}
|
||||
}
|
||||
|
||||
async function outputSchema() {
|
||||
const enContent = await fs.readFile(enPath, "utf-8")
|
||||
const enJson = JSON.parse(enContent)
|
||||
|
||||
const schema = {
|
||||
$schema: "http://json-schema.org/draft-07/schema#",
|
||||
...generateSchemaFromObject(enJson),
|
||||
}
|
||||
|
||||
const formattedSchema = await prettier.format(
|
||||
JSON.stringify(schema, null, 2),
|
||||
{
|
||||
parser: "json",
|
||||
}
|
||||
)
|
||||
|
||||
await fs
|
||||
.writeFile(schemaPath, formattedSchema)
|
||||
.then(() => {
|
||||
console.log("Schema generated successfully at:", schemaPath)
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error("Error generating schema:", error.message)
|
||||
process.exit(1)
|
||||
})
|
||||
}
|
||||
|
||||
outputSchema()
|
||||
Reference in New Issue
Block a user