getRenderContext.ts 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. anchorVersion: string;
  12. clientDirectory: string;
  13. clients: Client[];
  14. currentDirectory: string;
  15. getNpmCommand: (scriptName: string, args?: string) => string;
  16. language: Language;
  17. programAddress: string;
  18. programDirectory: string;
  19. packageManager: PackageManager;
  20. solanaVersion: string;
  21. solanaVersionDetected: string;
  22. targetDirectory: string;
  23. templateDirectory: string;
  24. };
  25. export function getRenderContext({
  26. inputs,
  27. language,
  28. programAddress,
  29. solanaVersionDetected,
  30. anchorVersionDetected,
  31. }: {
  32. inputs: Inputs;
  33. language: Language;
  34. programAddress: string;
  35. solanaVersionDetected: string;
  36. anchorVersionDetected?: string;
  37. }): RenderContext {
  38. const packageManager = getPackageManager();
  39. const clients = allClients.flatMap((client) =>
  40. inputs[`${client}Client`] ? [client] : []
  41. );
  42. const getNpmCommand: RenderContext['getNpmCommand'] = (...args) =>
  43. getPackageManagerCommand(packageManager, ...args);
  44. // Directories.
  45. const templateDirectory = path.resolve(__dirname, 'template');
  46. const currentDirectory = process.cwd();
  47. const targetDirectory = path.join(
  48. currentDirectory,
  49. inputs.targetDirectoryName
  50. );
  51. const programDirectory = path.join(targetDirectory, 'program');
  52. const clientDirectory = path.join(targetDirectory, 'client');
  53. return {
  54. ...inputs,
  55. anchorVersion: anchorVersionDetected ?? '',
  56. clientDirectory,
  57. clients,
  58. currentDirectory,
  59. getNpmCommand,
  60. language,
  61. packageManager,
  62. programAddress,
  63. programDirectory,
  64. solanaVersion:
  65. inputs.solanaVersion ??
  66. toMinorSolanaVersion(language, solanaVersionDetected),
  67. solanaVersionDetected,
  68. targetDirectory,
  69. templateDirectory,
  70. };
  71. }