UNPKG

@nx/detox

Version:

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

86 lines (85 loc) 3.46 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createNodesV2 = exports.createNodes = void 0; const internal_1 = require("@nx/devkit/internal"); const devkit_1 = require("@nx/devkit"); const path_1 = require("path"); const js_1 = require("@nx/js"); const cache_directory_1 = require("nx/src/utils/cache-directory"); const devkit_internals_1 = require("nx/src/devkit-internals"); const internal_2 = require("@nx/js/internal"); exports.createNodes = [ '**/{detox.config,.detoxrc}.{json,js}', async (configFiles, options, context) => { const optionsHash = (0, devkit_internals_1.hashObject)(options); const cachePath = (0, path_1.join)(cache_directory_1.workspaceDataDirectory, `detox-${optionsHash}.hash`); const targetsCache = new internal_1.PluginCache(cachePath); const packageManager = (0, devkit_1.detectPackageManager)(context.workspaceRoot); const pmc = (0, devkit_1.getPackageManagerCommand)(packageManager); const lockFileName = (0, js_1.getLockFileName)(packageManager); const normalizedOptions = normalizeOptions(options); try { const projectRoots = configFiles.map((f) => (0, path_1.dirname)(f)); const projectHashes = await (0, internal_1.calculateHashesForCreateNodes)(projectRoots, normalizedOptions, context, projectRoots.map(() => [lockFileName])); return await (0, devkit_1.createNodesFromFiles)((configFile, _, ctx, idx) => createNodesInternal(configFile, normalizedOptions, ctx, targetsCache, pmc, projectHashes[idx]), configFiles, options, context); } finally { targetsCache.writeToDisk(); } }, ]; exports.createNodesV2 = exports.createNodes; async function createNodesInternal(configFile, options, context, targetsCache, pmc, hash) { const projectRoot = (0, path_1.dirname)(configFile); if (!targetsCache.has(hash)) { targetsCache.set(hash, buildDetoxTargets(projectRoot, options, context, pmc)); } return { projects: { [projectRoot]: { targets: targetsCache.get(hash), }, }, }; } function buildDetoxTargets(projectRoot, options, context, pmc) { const namedInputs = (0, internal_1.getNamedInputs)(projectRoot, context); const targets = { [options.buildTargetName]: { command: `detox build`, options: { cwd: projectRoot }, cache: true, inputs: getInputs(namedInputs), }, [options.startTargetName]: { command: `detox start`, continuous: true, options: { cwd: projectRoot }, }, [options.testTargetName]: { command: `detox test`, options: { cwd: projectRoot }, cache: true, inputs: getInputs(namedInputs), }, }; (0, internal_2.addBuildAndWatchDepsTargets)(context.workspaceRoot, projectRoot, targets, options, pmc); return targets; } function getInputs(namedInputs) { return [ ...('production' in namedInputs ? ['default', '^production'] : ['default', '^default']), { externalDependencies: ['detox'], }, ]; } function normalizeOptions(options) { options ??= {}; options.buildTargetName ??= 'build'; options.startTargetName ??= 'start'; options.testTargetName ??= 'test'; return options; }