@pact-toolbox/script
Version:
74 lines (72 loc) • 2.68 kB
JavaScript
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