| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- import 'zx/globals';
- import { JsonMap, 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 getCargo(folder?: string): JsonMap {
- return parseToml(
- fs.readFileSync(
- path.resolve(
- workingDirectory,
- path.join(folder ? folder : '.', 'Cargo.toml')
- ),
- 'utf8'
- )
- );
- }
- export function getCargoMetadata(folder?: string) {
- const cargo = getCargo(folder);
- return folder ? cargo?.package?.['metadata'] : cargo?.workspace?.['metadata'];
- }
- export function getSolanaVersion(): string {
- return getCargoMetadata()?.cli?.solana;
- }
- export function getToolchain(operation): string {
- return getCargoMetadata()?.toolchains?.[operation];
- }
- export function getToolchainArgument(operation): string {
- const channel = getToolchain(operation);
- return channel ? `+${channel}` : '';
- }
- export function cliArguments(): string[] {
- return process.argv.slice(2);
- }
- export function popArgument(args: string[], arg: string) {
- const index = args.indexOf(arg);
- if (index >= 0) {
- args.splice(index, 1);
- }
- return index >= 0;
- }
- export function partitionArguments(
- args: string[],
- delimiter: string,
- defaultArgs?: string[]
- ): [string[], string[]] {
- const index = args.indexOf(delimiter);
- const [providedCargoArgs, providedCommandArgs] =
- index >= 0 ? [args.slice(0, index), args.slice(index + 1)] : [args, []];
- if (defaultArgs) {
- const [defaultCargoArgs, defaultCommandArgs] = partitionArguments(
- defaultArgs,
- delimiter
- );
- return [
- [...defaultCargoArgs, ...providedCargoArgs],
- [...defaultCommandArgs, ...providedCommandArgs],
- ];
- }
- return [providedCargoArgs, providedCommandArgs];
- }
- export async function getInstalledSolanaVersion(): Promise<string | undefined> {
- try {
- const { stdout } = await $`solana --version`.quiet();
- return stdout.match(/(\d+\.\d+\.\d+)/)?.[1];
- } catch (error) {
- return '';
- }
- }
- export function parseCliArguments(): {
- command: string;
- libraryPath: string;
- args: string[];
- } {
- const command = process.argv[2];
- const args = process.argv.slice(3);
- // Extract the relative crate directory from the command-line arguments. This
- // is the only required argument.
- const relativePath = args.shift();
- if (!relativePath) {
- throw new Error('Missing relative manifest path');
- }
- return {
- command,
- libraryPath: path.join(workingDirectory, relativePath),
- args,
- };
- }
|