@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
JavaScript
;
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