UNPKG

@pact-toolbox/unplugin

Version:
130 lines (128 loc) 4.4 kB
const require_chunk = require('./chunk-CUT6urMc.cjs'); const __pact_toolbox_config = require_chunk.__toESM(require("@pact-toolbox/config")); const __pact_toolbox_network = require_chunk.__toESM(require("@pact-toolbox/network")); const __pact_toolbox_runtime = require_chunk.__toESM(require("@pact-toolbox/runtime")); const __pact_toolbox_utils = require_chunk.__toESM(require("@pact-toolbox/utils")); //#region src/plugin/utils.ts const RUNNING_NETWORKS_KEY = Symbol.for("__PACT_TOOLBOX_RUNNING_NETWORKS__"); function getRunningNetworksRegistry() { if (!globalThis[RUNNING_NETWORKS_KEY]) globalThis[RUNNING_NETWORKS_KEY] = /* @__PURE__ */ new Map(); return globalThis[RUNNING_NETWORKS_KEY]; } async function isNetworkRunning(networkConfig) { const registry = getRunningNetworksRegistry(); const registryKey = `${networkConfig.name || "unknown"}-${networkConfig.type}`; const registeredNetwork = registry.get(registryKey); if (registeredNetwork) { const portInUse = await (0, __pact_toolbox_utils.isPortTaken)(registeredNetwork.port); if (portInUse) return true; else { registry.delete(registryKey); return false; } } try { const port = (0, __pact_toolbox_config.getNetworkPort)(networkConfig); return await (0, __pact_toolbox_utils.isPortTaken)(port); } catch { return false; } } function registerRunningNetwork(networkConfig, client, network) { const registry = getRunningNetworksRegistry(); const registryKey = `${networkConfig.name || "unknown"}-${networkConfig.type}`; const port = (0, __pact_toolbox_config.getNetworkPort)(networkConfig); registry.set(registryKey, { networkName: networkConfig.name || "unknown", port, startTime: Date.now(), client, network }); } async function createPactToolboxNetwork({ isServe, isTest, client, networkConfig }, toolboxConfig, { startNetwork = true, onReady } = {}) { if (!isServe || isTest || !(0, __pact_toolbox_config.isLocalNetwork)(networkConfig) || !startNetwork) { if (isServe && !isTest && onReady) await onReady(client); return { network: null, client }; } const isRunning = await isNetworkRunning(networkConfig); if (isRunning) { if (onReady) await onReady(client); return { network: null, client }; } let network; try { network = await (0, __pact_toolbox_network.createPactToolboxNetwork)(toolboxConfig, { client, logAccounts: true, conflictStrategy: "ignore", isDetached: true, autoStart: startNetwork, cleanup: true }); registerRunningNetwork(networkConfig, client, network); } catch (error) { if (error instanceof Error && error.message.includes("already running")) registerRunningNetwork(networkConfig, client, null); else { __pact_toolbox_utils.logger.error(`[startToolboxNetwork] Failed to start network ${networkConfig.name}:`, error); throw error; } } if (onReady) try { await onReady(client); } catch (error) { __pact_toolbox_utils.logger.error(`[startToolboxNetwork] onReady callback failed for ${networkConfig.name}:`, error); } return { network, client }; } const PLUGIN_NAME = "pact-toolbox"; function isAggregateError(e) { return e instanceof AggregateError; } function prettyPrintError(label, error) { console.error(`\n\x1b[31m[${label}]\x1b[0m`); if (isAggregateError(error)) { console.error("\x1B[31mMultiple errors occurred:\x1B[0m"); error.errors.forEach((err, index) => { console.error(`\x1b[31m[${index + 1}]\x1b[0m ${err instanceof Error ? err.message : String(err)}`); if (err instanceof Error && err.stack) console.error(`\x1b[90m${err.stack.split("\n").slice(1).join("\n")}\x1b[0m`); }); } else if (error instanceof Error) { console.error(`\x1b[31m${error.message}\x1b[0m`); if (error.stack) console.error(`\x1b[90m${error.stack.split("\n").slice(1).join("\n")}\x1b[0m`); } else console.error(`\x1b[31m${String(error)}\x1b[0m`); } //#endregion Object.defineProperty(exports, 'PLUGIN_NAME', { enumerable: true, get: function () { return PLUGIN_NAME; } }); Object.defineProperty(exports, 'createPactToolboxNetwork', { enumerable: true, get: function () { return createPactToolboxNetwork; } }); Object.defineProperty(exports, 'isAggregateError', { enumerable: true, get: function () { return isAggregateError; } }); Object.defineProperty(exports, 'prettyPrintError', { enumerable: true, get: function () { return prettyPrintError; } });