UNPKG

@pact-toolbox/script

Version:
74 lines (72 loc) 2.68 kB
import defu from "defu"; import { createJiti } from "jiti"; import { fileURLToPath } from "mlly"; import { resolve } from "pathe"; import { resolveConfig } from "@pact-toolbox/config"; import { createPactToolboxNetwork } from "@pact-toolbox/network"; import { PactToolboxClient } from "@pact-toolbox/runtime"; import { logger } from "@pact-toolbox/utils"; //#region src/runner.ts function createScript(options) { return options; } const SUPPORTED_EXTENSIONS = [ ".js", ".mjs", ".cjs", ".ts", ".mts", ".cts", ".json" ]; const NPM_PACKAGE_RE = /^(@[\da-z~-][\d._a-z~-]*\/)?[\da-z~-][\d._a-z~-]*($|\/.*)/; async function runScript(source, options) { options.cwd = resolve(process.cwd(), options.cwd || "."); options.scriptOptions = options.scriptOptions || {}; if (!options.config) options.config = await resolveConfig(); const scriptsDir = options.config.scriptsDir ?? "scripts"; const jiti = createJiti(resolve(options.cwd, scriptsDir), { interopDefault: true, moduleCache: false, extensions: [...SUPPORTED_EXTENSIONS] }); const tryResolve = (id) => { const resolved = jiti.esmResolve(id, { try: true }); return resolved ? fileURLToPath(resolved) : void 0; }; if (NPM_PACKAGE_RE.test(source)) source = tryResolve(source) || source; const scriptPath = tryResolve(resolve(options.cwd, scriptsDir, source)) || tryResolve(resolve(options.cwd, source)) || tryResolve(resolve(options.cwd, ".scripts", source)); if (!scriptPath) throw new Error(`Script ${source} not found`); const scriptObject = await jiti.import(scriptPath); if (typeof scriptObject !== "object") throw new Error(`Script ${source} should export an object with run method`); const scriptInstance = defu(options.scriptOptions, scriptObject); if (scriptInstance.configOverrides) options.config = defu(scriptInstance.configOverrides, options.config); options.network = options.network ?? scriptInstance.network ?? options.config.defaultNetwork; if (!options.client) options.client = new PactToolboxClient(options.config, options.network); options.client.setConfig(options.config); try { let n; if (scriptInstance.autoStartNetwork) n = await createPactToolboxNetwork(options.config, { ...scriptInstance.startNetworkOptions, network: options.network, client: options.client }); const context = { logger, client: options.client, args: options.args, network: options.network, config: options.config }; await scriptInstance.run(context); if (!scriptInstance.persist) { if (n) await n.stop(); } } catch (error) { logger.error(error); throw error; } } //#endregion export { createScript, runScript }; //# sourceMappingURL=index.node.mjs.map