import { PlataFs } from '../libs/fs' import path from 'node:path' type packageJson = Dictionary const doSetup = async (plataDir: string, projectDir: string, projectPackageJson: packageJson, plataPackageJson: packageJson) => { if (projectPackageJson.plata_no_setup !== undefined) { return } const templatesDir = path.resolve(plataDir, 'templates', 'postinstall') projectPackageJson.plata_type = projectPackageJson.plata_type ?? 'api' projectPackageJson.plata_name = plataPackageJson.name projectPackageJson['my-scripts'] = projectPackageJson['my-scripts'] ?? Object.create(null) // https://developer.mozilla.org/en-US/docs/Glossary/Deep_copy projectPackageJson.scripts = JSON.parse(JSON.stringify(projectPackageJson['my-scripts'])) const templateDir = path.join(templatesDir, `${projectPackageJson.plata_type}`) const { install } = await import(`./post-install/${projectPackageJson.plata_type}`.replace(/\\/g, '/')) projectPackageJson = await install( new PlataFs.CliTools(templateDir, projectDir), projectPackageJson ) await PlataFs.fs.writeFile(path.join(projectDir, 'package.json'), JSON.stringify(projectPackageJson, null, 4)) } const readPackageJson = async (folder: string) => PlataFs.fs.readFile(path.join(folder, 'package.json')).then( b => JSON.parse(b.toString()), err => { console.error(err) process.exit(1) } ) const main = async () => { const plataDir = path.resolve('.') if (path.basename(path.dirname(plataDir)) !== 'node_modules') return let projectDir = process.env.INIT_CWD ?? path.resolve(plataDir, '..', '..') const [ projectPackageJson, plataPackageJson ] = await Promise.all([ readPackageJson(projectDir), readPackageJson(plataDir), ]) // Array com os caminhos onde as APIs ficam no monorepo if (Array.isArray(projectPackageJson.plata_mono_repo)) { const promises = new Array(projectPackageJson.plata_mono_repo.length) for (let i = 0; i < projectPackageJson.plata_mono_repo.length; i++) { const pathProject = path.join( projectDir, projectPackageJson.plata_mono_repo[i] ) const projetJson = await readPackageJson(pathProject) promises[i] = (Promise.resolve().then(() => doSetup( plataDir, pathProject, projetJson, plataPackageJson, ))) } await Promise.all(promises) return } return doSetup(plataDir, projectDir, projectPackageJson, plataPackageJson) } main()