UNPKG

@nxextensions/firebase-cypress

Version:

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

87 lines 3.49 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.detectFirebase = detectFirebase; exports.startFirebaseEmulators = startFirebaseEmulators; exports.terminateEmulatorsIfStarted = terminateEmulatorsIfStarted; const tslib_1 = require("tslib"); const devkit_1 = require("@nx/devkit"); const fs_1 = require("fs"); const path_1 = require("path"); const target_string_to_target_1 = require("./target-string-to-target"); // @ts-expect-error This is the only way to import this const killPort = tslib_1.__importStar(require("kill-port")); const run_cypress_1 = tslib_1.__importDefault(require("./run-cypress")); function detectFirebase(context) { const dependency = getE2EProjectDependency(context); const siblingFiles = (0, fs_1.readdirSync)((0, path_1.join)(context.root, dependency.root)); if (!siblingFiles.includes('firebase.json')) { return { isPresent: false }; } const { hasEmulators } = getPortForFirebaseEmulator((0, path_1.join)(context.root, dependency.root, 'firebase.json')); return hasEmulators ? { isPresent: true } : { isPresent: false }; } function getPortForFirebaseEmulator(firebaseJsonPath) { const firebaseConfig = (0, devkit_1.readJsonFile)(firebaseJsonPath); if (!(firebaseConfig === null || firebaseConfig === void 0 ? void 0 : firebaseConfig.emulators)) { return { hasEmulators: false }; } let port; Object.keys(firebaseConfig.emulators).forEach((key) => { var _a; if (!port) { port = (_a = firebaseConfig.emulators[key]) === null || _a === void 0 ? void 0 : _a.port; } }); if (!port) { return { hasEmulators: false }; } return { hasEmulators: true }; } async function* startFirebaseEmulators(watch, command, options, context) { const target = (0, target_string_to_target_1.targetStringToTarget)(command); for await (const _s of await (0, devkit_1.runExecutor)(target, {}, context)) { if (!_s.success) { yield { success: false }; break; } const result = await (0, run_cypress_1.default)(options, context); yield result; if (!watch) { break; } } } async function terminateEmulatorsIfStarted(context) { const dependency = getE2EProjectDependency(context); const portsArray = getPortsForEmulators((0, path_1.join)(context.root, dependency.root, 'firebase.json')); try { for (const port of portsArray) { await killPort(+port); } } catch (e) { console.error(e); } } function getE2EProjectDependency(context) { const projectName = context.projectName; const projects = (0, devkit_1.readProjectsConfigurationFromProjectGraph)(context.projectGraph); const dependencyName = projects.projects[projectName].implicitDependencies[0]; return projects.projects[dependencyName]; } function getPortsForEmulators(firebaseJsonPath) { const firebaseConfig = (0, devkit_1.readJsonFile)(firebaseJsonPath); if (!(firebaseConfig === null || firebaseConfig === void 0 ? void 0 : firebaseConfig.emulators)) { return []; } const res = []; Object.keys(firebaseConfig.emulators).forEach((key) => { if (!!firebaseConfig.emulators[key].port && !res.includes(firebaseConfig.emulators[key].port)) { res.push(firebaseConfig.emulators[key].port); } }); return res; } //# sourceMappingURL=firebase.js.map