123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- import 'zx/globals';
- import { parse as parseToml } from '@iarna/toml';
- process.env.FORCE_COLOR = 3;
- process.env.CARGO_TERM_COLOR = 'always';
- export const workingDirectory = (await $`pwd`.quiet()).toString().trim();
- export function getAllProgramIdls() {
- return getAllProgramFolders().map((folder) =>
- path.join(workingDirectory, folder, 'idl.json')
- );
- }
- export function getExternalProgramOutputDir() {
- const config =
- getCargo().workspace?.metadata?.solana?.['external-programs-output'];
- return path.join(workingDirectory, config ?? 'target/deploy');
- }
- export function getExternalProgramAddresses() {
- const addresses = getProgramFolders().flatMap(
- (folder) =>
- getCargo(folder).package?.metadata?.solana?.['program-dependencies'] ?? []
- );
- return Array.from(new Set(addresses));
- }
- let didWarnAboutMissingPrograms = false;
- export function getProgramFolders() {
- const programs = process.env.PROGRAMS
- ? process.env.PROGRAMS.split(/\s+/)
- : getAllProgramFolders();
- const filteredPrograms = programs.filter((program) =>
- fs.existsSync(path.join(workingDirectory, program))
- );
- if (
- filteredPrograms.length !== programs.length &&
- !didWarnAboutMissingPrograms
- ) {
- didWarnAboutMissingPrograms = true;
- programs
- .filter((program) => !filteredPrograms.includes(program))
- .forEach((program) => {
- echo(chalk.yellow(`Program not found: ${workingDirectory}/${program}`));
- });
- }
- return filteredPrograms;
- }
- export function getAllProgramFolders() {
- return getCargo().workspace.members.filter((member) =>
- (getCargo(member).lib?.['crate-type'] ?? []).includes('cdylib')
- );
- }
- export function getCargo(folder) {
- return parseToml(
- fs.readFileSync(
- path.join(workingDirectory, folder ? folder : '.', 'Cargo.toml'),
- 'utf8'
- )
- );
- }
|