UNPKG

@nxextensions/firebase-cypress

Version:

An NX Plugin for Firebase Applications that would like to use emulators for E2E testing with Cypress

70 lines 2.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.startFirebaseServer = startFirebaseServer; exports.terminateFirebaseServer = terminateFirebaseServer; const tslib_1 = require("tslib"); const server_1 = require("./server"); const devkit_1 = require("@nx/devkit"); const project_graph_1 = require("./project-graph"); const node_child_process_1 = require("node:child_process"); const process = tslib_1.__importStar(require("node:process")); const kill_port_1 = require("./kill-port"); async function startFirebaseServer(context) { var _a; const port = getFirstEmulatorPort(context); if (port && await (0, server_1.isServerUp)(port)) { return; } else if (!port) { return; } const cp = (0, node_child_process_1.exec)('npx firebase emulators:start', { cwd: (0, devkit_1.joinPathFragments)(context.root, (0, project_graph_1.getE2EProjectDependency)(context).root), }); (_a = cp.stdout) === null || _a === void 0 ? void 0 : _a.on('data', (data) => { process.stdout.write(data); }); cp.stderr.on('data', (data) => { process.stderr.write(data); }); await (0, server_1.waitForServer)(port); } function getFirstEmulatorPort(context) { const applicationProject = (0, project_graph_1.getE2EProjectDependency)(context); if (!applicationProject) { return; } if (!(0, project_graph_1.validateFirebaseProject)(applicationProject, context)) { return; } let port; for (const p of getPortsForEmulators((0, devkit_1.joinPathFragments)(context.root, applicationProject.root, 'firebase.json'))) { if (p && !isNaN(+p)) { port = p; break; } } return port; } function* getPortsForEmulators(firebaseJsonPath) { const firebaseConfig = (0, devkit_1.readJsonFile)(firebaseJsonPath); if (!(firebaseConfig === null || firebaseConfig === void 0 ? void 0 : firebaseConfig.emulators)) { return undefined; } const ports = []; Object.keys(firebaseConfig.emulators).forEach((key) => { if (firebaseConfig.emulators[key].port) { ports.push(firebaseConfig.emulators[key].port); } }); for (const port of ports) { yield port; } } async function terminateFirebaseServer(context) { const dependency = (0, project_graph_1.getE2EProjectDependency)(context); for (const port of getPortsForEmulators((0, devkit_1.joinPathFragments)(context.root, dependency.root, 'firebase.json'))) { await (0, kill_port_1.killPort)(+port); } } //# sourceMappingURL=firebase-v2.js.map