1
0
Fork 0
freesewing/sites/org/scripts/prebuild-step1.mjs

100 lines
2.5 KiB
JavaScript

import fs from 'fs'
import path from 'path'
import yaml from 'yaml'
import { about as designInfo } from '../../../packages/collection/src/index.mjs'
import { designs as designTranslations } from '../../../i18n/designs.mjs'
import { measurements as measurementsTranslations } from '@freesewing/i18n'
/*
* Load translations as there's no YAML loader
* We are loading this sync because NodeJS 20 does not support
* top-level await out of the box
*/
const optionGroupTranslations = loadYaml('../../i18n/optiongroups.yaml')
/*
* Write these translations as JS to disk
*/
function writeTranslations() {
const content = [
header,
`export const measurements = ${JSON.stringify(measurementsTranslations)}`,
'',
`export const optiongroups = ${JSON.stringify(optionGroupTranslations)}`,
'',
`export const designs = ${JSON.stringify(designTranslations)}`,
'',
]
fs.writeFileSync(`./src/lib/i18n.mjs`, content.join('\n'))
}
/*
* Write design info
*/
function writeDesignInfo() {
const content = [header, `export const designInfo = ${JSON.stringify(designInfo)}`, '']
fs.promises.writeFile(`./src/lib/designinfo.mjs`, content.join('\n'))
}
/*
* Simple and stupid YAML loader
*
* @arg {String} file - (relative) path to the file to load
* @return {object} yaml - The YAML data as a JS object
*/
function loadYaml(file) {
const raw = fs.readFileSync(path.resolve(file), 'utf8')
let content
try {
content = yaml.parse(raw)
} catch (err) {
console.log(err)
process.exit(1)
}
return content
}
/*
* Header to include in auto-generated files
*/
export const header = `/*
* This file is auto-generated.
* Any changes you make will be overwritten by the prebuild step.
*/`
/*
* Generate design imports file
*/
function generateDesignsLib() {
const content = [header, `import { designInfo } from './designinfo.mjs'`]
// Add designs
for (const [name, design] of Object.entries(designInfo)) {
if (design.org) content.push(`import * as ${name} from '@freesewing/${name}'`)
}
// Add the rest of the file
content.push(
'',
`const designs = {`,
...Object.keys(designInfo)
.filter((d) => designInfo[d].org)
.map((d) => ` ${d},`),
`}`,
'',
`const designList = Object.keys(designs)`,
'',
`export { designInfo, designList, designs }`,
''
)
// Write to disk
fs.promises.writeFile(`./src/lib/designs.mjs`, content.join('\n'))
}
function prebuild() {
generateDesignsLib()
writeTranslations()
writeDesignInfo()
}
prebuild()