UNPKG

@nx/playwright

Version:

The Nx Plugin for Playwright contains executors and generators allowing your workspace to use the powerful Playwright integration testing capabilities.

89 lines (88 loc) 4.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = addE2eCiTargetDefaults; const devkit_1 = require("@nx/devkit"); const target_defaults_utils_1 = require("@nx/devkit/src/generators/target-defaults-utils"); const loaded_nx_plugin_1 = require("nx/src/project-graph/plugins/loaded-nx-plugin"); const devkit_internals_1 = require("nx/src/devkit-internals"); const tsquery_1 = require("@phenomnomnominal/tsquery"); const path_1 = require("path"); async function addE2eCiTargetDefaults(tree) { const pluginName = '@nx/playwright/plugin'; const graph = await (0, devkit_1.createProjectGraphAsync)(); const nxJson = (0, devkit_1.readNxJson)(tree); const matchingPluginRegistrations = nxJson.plugins?.filter((p) => typeof p === 'string' ? p === pluginName : p.plugin === pluginName); if (!matchingPluginRegistrations) { return; } const { createNodesV2, } = await Promise.resolve(`${pluginName}`).then(s => require(s)); for (const plugin of matchingPluginRegistrations) { let projectConfigs; try { const loadedPlugin = new loaded_nx_plugin_1.LoadedNxPlugin({ createNodesV2, name: pluginName }, plugin); projectConfigs = await (0, devkit_internals_1.retrieveProjectConfigurations)([loadedPlugin], tree.root, nxJson); } catch (e) { if (e instanceof devkit_internals_1.ProjectConfigurationsError) { projectConfigs = e.partialProjectConfigurationsResult; } else { throw e; } } for (const configFile of projectConfigs.matchingProjectFiles) { const configFileContents = tree.read(configFile, 'utf-8'); const ast = tsquery_1.tsquery.ast(configFileContents); const CI_WEBSERVER_COMMAND_SELECTOR = 'PropertyAssignment:has(Identifier[name=webServer]) PropertyAssignment:has(Identifier[name=command]) > StringLiteral'; const nodes = (0, tsquery_1.tsquery)(ast, CI_WEBSERVER_COMMAND_SELECTOR, { visitAllChildren: true, }); if (!nodes.length) { continue; } const ciWebServerCommand = nodes[0].getText().replace(/['"]/g, ''); let serveStaticProject; let serveStaticTarget; let serveStaticConfiguration; if (ciWebServerCommand.includes('nx run')) { const NX_TARGET_REGEX = "(?<=nx run )[^']+"; const matches = ciWebServerCommand.match(NX_TARGET_REGEX); if (!matches) { continue; } const targetString = matches[0]; const { project, target, configuration } = (0, devkit_1.parseTargetString)(targetString, graph); serveStaticProject = project; serveStaticTarget = target; serveStaticConfiguration = configuration; } else { const NX_PROJECT_REGEX = 'nx\\s+([^ ]+)\\s+([^ ]+)'; const matches = ciWebServerCommand.match(NX_PROJECT_REGEX); if (!matches) { return; } serveStaticTarget = matches[1]; serveStaticProject = matches[2]; } const resolvedServeStaticTarget = graph.nodes[serveStaticProject]?.data?.targets?.[serveStaticTarget]; if (!resolvedServeStaticTarget) { continue; } let resolvedBuildTarget; if (resolvedServeStaticTarget.dependsOn) { resolvedBuildTarget = resolvedServeStaticTarget.dependsOn.join(','); } else { resolvedBuildTarget = (serveStaticConfiguration ? resolvedServeStaticTarget.configurations[serveStaticConfiguration] .buildTarget : resolvedServeStaticTarget.options.buildTarget) ?? 'build'; } const targetDependsOnSelf = graph.nodes[serveStaticProject].data.root === (0, path_1.dirname)(configFile); const buildTarget = `${targetDependsOnSelf ? '' : '^'}${resolvedBuildTarget}`; await (0, target_defaults_utils_1.addE2eCiTargetDefaults)(tree, pluginName, buildTarget, configFile); } } }