UNPKG

create-w3-app

Version:
120 lines (102 loc) 3.12 kB
#!/usr/bin/env node import path from "path"; import { execa } from "execa"; import fs from "fs-extra"; import { type PackageJson } from "type-fest"; import { runCli } from "~/cli/index.js"; import { createProject } from "~/helpers/createProject.js"; import { initializeGit } from "~/helpers/git.js"; import { logNextSteps } from "~/helpers/logNextSteps.js"; import { setImportAlias } from "~/helpers/setImportAlias.js"; import { buildPkgInstallerMap } from "~/installers/index.js"; import { getVersion } from "~/utils/getKitVersion.js"; import { getUserPkgManager } from "~/utils/getUserPkgManager.js"; import { logger } from "~/utils/logger.js"; import { parseNameAndPath } from "~/utils/parseNameAndPath.js"; import { renderTitle } from "~/utils/renderTitle.js"; import { formatProject } from "./helpers/format.js"; import { installDependencies } from "./helpers/installDependencies.js"; import { getNpmVersion, renderVersionWarning, } from "./utils/renderVersionWarning.js"; type CWeb3APackageJSON = PackageJson & { cweb3aMetadata?: { initVersion: string; }; }; const main = async () => { const npmVersion = await getNpmVersion(); const pkgManager = getUserPkgManager(); renderTitle(); if (npmVersion) { renderVersionWarning(npmVersion); } const { appName, packages, flags: { noGit, noInstall, importAlias, appRouter }, } = await runCli(); const usePackages = buildPkgInstallerMap(packages); // e.g. dir/@mono/app returns ["@mono/app", "dir/app"] const [scopedAppName, appDir] = parseNameAndPath(appName); const projectDir = await createProject({ projectName: appDir, scopedAppName, packages: usePackages, importAlias, noInstall, appRouter, }); // Write name to package.json const pkgJson = fs.readJSONSync( path.join(projectDir, "package.json") ) as CWeb3APackageJSON; pkgJson.name = scopedAppName; pkgJson.cweb3aMetadata = { initVersion: getVersion() }; // ? Bun doesn't support this field (yet) if (pkgManager !== "bun") { const { stdout } = await execa(pkgManager, ["-v"], { cwd: projectDir, }); pkgJson.packageManager = `${pkgManager}@${stdout.trim()}`; } fs.writeJSONSync(path.join(projectDir, "package.json"), pkgJson, { spaces: 2, }); // update import alias in any generated files if not using the default if (importAlias !== "~/") { setImportAlias(projectDir, importAlias); } if (!noInstall) { await installDependencies({ projectDir }); await formatProject({ pkgManager, projectDir, eslint: packages.includes("eslint"), }); } if (!noGit) { await initializeGit(projectDir); } await logNextSteps({ projectName: appDir, packages: usePackages, appRouter, noInstall, projectDir, }); process.exit(0); }; main().catch((err) => { logger.error("Aborting installation..."); if (err instanceof Error) { logger.error(err); } else { logger.error( "An unknown error has occurred. Please open an issue on github with the below:" ); console.log(err); } process.exit(1); });