Skip to content

Instantly share code, notes, and snippets.

@balazsorban44
Last active December 11, 2020 10:51
Show Gist options
  • Save balazsorban44/5ce8c50c3e0c8f06388a577e130ce269 to your computer and use it in GitHub Desktop.
Save balazsorban44/5ce8c50c3e0c8f06388a577e130ce269 to your computer and use it in GitHub Desktop.
import fs from "fs"
import path from "path"
import chalk from "chalk"
const getDirectories = (source ) => {
const dirents = fs.readdirSync(source, { withFileTypes: true })
return dirents
.filter(
(dirent) =>
dirent.isDirectory() && !["shared", "utils"].includes(dirent.name)
)
.map((dirent) => dirent.name)
}
const calculatorsPath = path.join(process.cwd(), "calculators")
const calculators = getDirectories(calculatorsPath)
const components = []
calculators.forEach((calculator) => {
const file = `import { NextPage } from "next/app"
import CalculatorComponent from "calculators/${calculator}"
const Calculator = CalculatorComponent as NextPage
Calculator.layout = "none"
export default Calculator`
const calculatorPath = path.join(process.cwd(), `pages/calculators`, `${calculator}.ts`)
fs.writeFileSync(calculatorPath, file)
components.push(` ${calculator}: dynamic(() => import("calculators/${calculator}")),`)
})
const file = `
import dynamic from "next/dynamic"
export const components = {
${components.join("\n")}
}`
fs.writeFileSync(path.join(calculatorsPath, "components.ts"), file)
console.log(`${chalk.cyan(chalk.bold("info"))} - generated calculator files`)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment