import { Locklift, LockliftConfig } from "../../index"; import { ConfigState, loadConfig } from "../../internal/config"; import { Extender } from "../types"; import { from, lastValueFrom, mergeMap, tap } from "rxjs"; import commander, { Command, Option } from "commander"; import { buildStep } from "../../internal/cli/steps/build"; import { initLockliftStep } from "../../internal/cli/steps/initLocklift"; export const initializeExtenders = (params: { locklift: Locklift; config: LockliftConfig; network?: keyof LockliftConfig["networks"]; }): Promise => { const extenders = global.extenders.filter((extender): extender is Required => !!extender.initializer); if (extenders.length === 0) { return Promise.resolve(); } return lastValueFrom( from(extenders).pipe( mergeMap(extender => from(extender.initializer(params)).pipe( tap(extenderObject => { (params.locklift as any)[extender.pluginName] = extenderObject; }), ), ), ), ); }; export const commandInjector = (rootProgram: commander.Command) => { if (global.extenders.length === 0) { return; } global.extenders .filter((extender): extender is Required => !!extender.commandBuilders) .forEach(({ commandBuilders }) => commandBuilders.forEach(({ commandCreator, skipSteps }) => { const command = new Command(); command .option("-c, --contracts ", "Path to the contracts folder", "contracts") .option("-b, --build ", "Path to the build folder", "build") .option( "--disable-include-path", "Disables including node_modules. Use this with old compiler versions", false, ) .option("-n, --network ", "Network to use, choose from configuration") .addOption( new Option("--config ", "Path to the config file") .default(() => loadConfig("locklift.config.ts")) .argParser(config => () => loadConfig(config)), ) .option("-s, --script