1
0
Fork 0
freesewing/sites/shared/prebuild/designs.mjs

62 lines
1.7 KiB
JavaScript
Raw Normal View History

2023-04-30 13:46:47 +02:00
import fs_ from 'fs'
import path from 'path'
import { designsByType } from '../../../config/software/index.mjs'
import { capitalize } from '../../../sites/shared/utils.mjs'
const fs = fs_.promises
// async import
async function loadDesign(design) {
let result
try {
result = await import(`../../../designs/${design}/src/index.mjs`)
} catch (err) {
console.log(`Failed to load design ${design}:`, err)
}
return result
}
export const prebuildDesigns = async () => {
const promises = []
const designs = []
// Compile list of designs
for (const type in designsByType) {
if (type !== 'utilities') {
for (const design in designsByType[type]) designs.push(design)
}
}
const measurements = {}
const options = {}
for (const design of designs) {
const bundle = await loadDesign(design)
const Instance = new bundle[capitalize(design)]()
const config = Instance.getConfig()
measurements[design] = config.measurements
options[design] = config.options
}
// Write out prebuild files
const header =
'// This file is auto-generated by the prebuild script | Any changes will be overwritten\n'
const nl = '\n'
promises.push(
fs.writeFile(
path.resolve('..', 'org', 'prebuild', 'designs.mjs'),
`${header}export const designs = ${JSON.stringify(designs)}${nl}`
),
fs.writeFile(
path.resolve('..', 'org', 'prebuild', 'design-measurements.mjs'),
`${header}export const measurements = ${JSON.stringify(measurements)}${nl}`
),
fs.writeFile(
path.resolve('..', 'org', 'prebuild', 'design-options.mjs'),
`${header}export const options = ${JSON.stringify(options)}${nl}`
)
)
await Promise.all(promises)
}