getRenderContext.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import * as path from "node:path";
  2. import {
  3. Client,
  4. Inputs,
  5. allClients,
  6. getDefaultInputs,
  7. getInputs,
  8. } from "./getInputs";
  9. import { Language, getLanguage } from "./getLanguage";
  10. import {
  11. PackageManager,
  12. getPackageManager,
  13. getPackageManagerCommand,
  14. } from "./getPackageManager";
  15. export type RenderContext = Inputs & {
  16. clientDirectory: string;
  17. clients: Client[];
  18. currentDirectory: string;
  19. getNpmCommand: (scriptName: string, args?: string) => string;
  20. hasCustomProgramAddress: boolean;
  21. language: Language;
  22. programDirectory: string;
  23. packageManager: PackageManager;
  24. targetDirectory: string;
  25. templateDirectory: string;
  26. };
  27. export async function getRenderContext(): Promise<RenderContext> {
  28. const language = getLanguage();
  29. const packageManager = getPackageManager();
  30. const inputs = await getInputs(language);
  31. const clients = allClients.flatMap((client) =>
  32. inputs[`${client}Client`] ? [client] : []
  33. );
  34. const hasCustomProgramAddress =
  35. inputs.programAddress !== getDefaultInputs({}).programAddress;
  36. const getNpmCommand: RenderContext["getNpmCommand"] = (...args) =>
  37. getPackageManagerCommand(packageManager, ...args);
  38. // Directories.
  39. const templateDirectory = path.resolve(__dirname, "template");
  40. const currentDirectory = process.cwd();
  41. const targetDirectory = path.join(
  42. currentDirectory,
  43. inputs.targetDirectoryName
  44. );
  45. const programDirectory = path.join(targetDirectory, "program");
  46. const clientDirectory = path.join(targetDirectory, "client");
  47. return {
  48. ...inputs,
  49. clientDirectory,
  50. clients,
  51. currentDirectory,
  52. getNpmCommand,
  53. hasCustomProgramAddress,
  54. language,
  55. packageManager,
  56. programDirectory,
  57. targetDirectory,
  58. templateDirectory,
  59. };
  60. }