@pact-toolbox/unplugin
Version:
107 lines (105 loc) • 3.7 kB
JavaScript
import { getNetworkPort, isLocalNetwork } from "@pact-toolbox/config";
import { PactToolboxNetwork, createPactToolboxNetwork } from "@pact-toolbox/network";
import { PactToolboxClient } from "@pact-toolbox/runtime";
import { isPortTaken, logger } from "@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 isPortTaken(registeredNetwork.port);
if (portInUse) return true;
else {
registry.delete(registryKey);
return false;
}
}
try {
const port = getNetworkPort(networkConfig);
return await isPortTaken(port);
} catch {
return false;
}
}
function registerRunningNetwork(networkConfig, client, network) {
const registry = getRunningNetworksRegistry();
const registryKey = `${networkConfig.name || "unknown"}-${networkConfig.type}`;
const port = getNetworkPort(networkConfig);
registry.set(registryKey, {
networkName: networkConfig.name || "unknown",
port,
startTime: Date.now(),
client,
network
});
}
async function createPactToolboxNetwork$1({ isServe, isTest, client, networkConfig }, toolboxConfig, { startNetwork = true, onReady } = {}) {
if (!isServe || isTest || !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 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 {
logger.error(`[startToolboxNetwork] Failed to start network ${networkConfig.name}:`, error);
throw error;
}
}
if (onReady) try {
await onReady(client);
} catch (error) {
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
export { PLUGIN_NAME, createPactToolboxNetwork$1 as createPactToolboxNetwork, isAggregateError, prettyPrintError };
//# sourceMappingURL=utils-caVmxe1_.js.map