@nx/detox
Version:
86 lines (85 loc) • 3.46 kB
JavaScript
;
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;
}