getRenderContext.ts 1.9 KB

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