| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- 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));
- }
- export function getExternalAccountAddresses() {
- const addresses = getProgramFolders().flatMap(
- (folder) =>
- getCargo(folder).package?.metadata?.solana?.["account-dependencies"] ?? []
- );
- return Array.from(new Set(addresses));
- }
- let didWarnAboutMissingPrograms = false;
- export function getProgramFolders() {
- let programs;
- if (process.env.PROGRAMS) {
- try {
- programs = JSON.parse(process.env.PROGRAMS);
- } catch (error) {
- programs = process.env.PROGRAMS.split(/\s+/);
- }
- } else {
- programs = 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"
- )
- );
- }
|