| 546 | } |
| 547 | |
| 548 | async function doneStep(ctx: Context) { |
| 549 | let projectDir = path.relative(process.cwd(), ctx.cwd); |
| 550 | |
| 551 | let max = process.stdout.columns; |
| 552 | let prefix = max < 80 ? " " : " ".repeat(9); |
| 553 | await sleep(200); |
| 554 | |
| 555 | log(`\n ${color.bgWhite(color.black(" done "))} That's it!`); |
| 556 | await sleep(100); |
| 557 | if (projectDir !== "") { |
| 558 | let enter = [ |
| 559 | `\n${prefix}Enter your project directory using`, |
| 560 | color.cyan(`cd .${path.sep}${projectDir}`), |
| 561 | ]; |
| 562 | let len = enter[0].length + stripVTControlCharacters(enter[1]).length; |
| 563 | log(enter.join(len > max ? "\n" + prefix : " ")); |
| 564 | } |
| 565 | log( |
| 566 | `${prefix}Check out ${color.bold( |
| 567 | "README.md", |
| 568 | )} for development and deploy instructions.`, |
| 569 | ); |
| 570 | await sleep(100); |
| 571 | log( |
| 572 | `\n${prefix}Join the community at ${color.cyan(`https://remix.run/discord`)}\n`, |
| 573 | ); |
| 574 | await sleep(200); |
| 575 | } |
| 576 | |
| 577 | const validPackageManagers = ["npm", "yarn", "pnpm", "bun", "deno"] as const; |
| 578 | type PackageManager = (typeof validPackageManagers)[number]; |