UNPKG

@nx/workspace

Version:

The Workspace plugin contains executors and generators that are useful for any Nx workspace. It should be present in every Nx workspace and other plugins build on it.

355 lines (354 loc) • 14.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.presetGenerator = presetGenerator; const devkit_1 = require("@nx/devkit"); const presets_1 = require("../utils/presets"); const path_1 = require("path"); async function presetGenerator(tree, options) { const presetTask = await createPreset(tree, options); return async () => { (0, devkit_1.installPackagesTask)(tree); if (presetTask) await presetTask(); }; } exports.default = presetGenerator; async function createPreset(tree, options) { const nxJson = (0, devkit_1.readNxJson)(tree); const addPlugin = process.env.NX_ADD_PLUGINS !== 'false' && nxJson.useInferencePlugins !== false; if (options.preset === presets_1.Preset.Apps) { return; } else if (options.preset === presets_1.Preset.AngularMonorepo) { const { applicationGenerator: angularApplicationGenerator, } = require('@nx' + '/angular/generators'); return angularApplicationGenerator(tree, { name: options.name, directory: (0, path_1.join)('apps', options.name), style: options.style, linter: options.linter, standalone: options.standaloneApi, routing: options.routing, e2eTestRunner: options.e2eTestRunner ?? 'playwright', unitTestRunner: options.unitTestRunner, bundler: options.bundler, ssr: options.ssr, serverRouting: options.serverRouting, prefix: options.prefix, nxCloudToken: options.nxCloudToken, }); } else if (options.preset === presets_1.Preset.AngularStandalone) { const { applicationGenerator: angularApplicationGenerator, } = require('@nx' + '/angular/generators'); return angularApplicationGenerator(tree, { name: options.name, directory: '.', style: options.style, linter: options.linter, routing: options.routing, rootProject: true, standalone: options.standaloneApi, e2eTestRunner: options.e2eTestRunner ?? 'playwright', unitTestRunner: options.unitTestRunner, bundler: options.bundler, ssr: options.ssr, serverRouting: options.serverRouting, prefix: options.prefix, nxCloudToken: options.nxCloudToken, }); } else if (options.preset === presets_1.Preset.ReactMonorepo) { const { applicationGenerator: reactApplicationGenerator } = require('@nx' + '/react'); return reactApplicationGenerator(tree, { name: options.name, directory: (0, path_1.join)('apps', options.name), style: options.style, linter: options.linter, bundler: options.bundler ?? 'webpack', e2eTestRunner: options.e2eTestRunner ?? 'playwright', unitTestRunner: options.unitTestRunner ?? (options.bundler === 'vite' ? 'vitest' : 'jest'), addPlugin, nxCloudToken: options.nxCloudToken, useTsSolution: options.workspaces, formatter: options.formatter, }); } else if (options.preset === presets_1.Preset.ReactStandalone) { const { applicationGenerator: reactApplicationGenerator } = require('@nx' + '/react'); const bundler = options.bundler ?? 'vite'; return reactApplicationGenerator(tree, { name: options.name, directory: '.', style: options.style, linter: options.linter, rootProject: true, bundler, e2eTestRunner: options.e2eTestRunner ?? 'playwright', unitTestRunner: options.unitTestRunner ?? (bundler === 'vite' ? 'vitest' : 'jest'), addPlugin, nxCloudToken: options.nxCloudToken, formatter: options.formatter, }); } else if (options.preset === presets_1.Preset.RemixMonorepo) { const { applicationGenerator: remixApplicationGenerator } = require('@nx' + '/remix/generators'); return remixApplicationGenerator(tree, { name: options.name, directory: (0, path_1.join)('apps', options.name), linter: options.linter, e2eTestRunner: options.e2eTestRunner ?? 'playwright', unitTestRunner: options.unitTestRunner ?? 'vitest', addPlugin, nxCloudToken: options.nxCloudToken, useTsSolution: options.workspaces, formatter: options.formatter, }); } else if (options.preset === presets_1.Preset.RemixStandalone) { const { applicationGenerator: remixApplicationGenerator } = require('@nx' + '/remix/generators'); return remixApplicationGenerator(tree, { name: options.name, directory: '.', linter: options.linter, e2eTestRunner: options.e2eTestRunner ?? 'playwright', rootProject: true, unitTestRunner: options.unitTestRunner ?? 'vitest', addPlugin, nxCloudToken: options.nxCloudToken, formatter: options.formatter, }); } else if (options.preset === presets_1.Preset.VueMonorepo) { const { applicationGenerator: vueApplicationGenerator } = require('@nx' + '/vue'); return vueApplicationGenerator(tree, { name: options.name, directory: (0, path_1.join)('apps', options.name), style: options.style, linter: options.linter, e2eTestRunner: options.e2eTestRunner ?? 'playwright', unitTestRunner: options.unitTestRunner, addPlugin, nxCloudToken: options.nxCloudToken, useTsSolution: options.workspaces, formatter: options.formatter, }); } else if (options.preset === presets_1.Preset.VueStandalone) { const { applicationGenerator: vueApplicationGenerator } = require('@nx' + '/vue'); return vueApplicationGenerator(tree, { name: options.name, directory: '.', style: options.style, linter: options.linter, rootProject: true, e2eTestRunner: options.e2eTestRunner ?? 'playwright', unitTestRunner: options.unitTestRunner ?? 'vitest', addPlugin, nxCloudToken: options.nxCloudToken, }); } else if (options.preset === presets_1.Preset.Nuxt) { const { applicationGenerator: nuxtApplicationGenerator } = require('@nx' + '/nuxt'); return nuxtApplicationGenerator(tree, { name: options.name, directory: (0, path_1.join)('apps', options.name), style: options.style, linter: options.linter, e2eTestRunner: options.e2eTestRunner ?? 'playwright', unitTestRunner: options.unitTestRunner, addPlugin, nxCloudToken: options.nxCloudToken, useTsSolution: options.workspaces, formatter: options.formatter, }); } else if (options.preset === presets_1.Preset.NuxtStandalone) { const { applicationGenerator: nuxtApplicationGenerator } = require('@nx' + '/nuxt'); return nuxtApplicationGenerator(tree, { name: options.name, directory: '.', style: options.style, linter: options.linter, rootProject: true, e2eTestRunner: options.e2eTestRunner ?? 'playwright', unitTestRunner: options.unitTestRunner ?? 'vitest', addPlugin, nxCloudToken: options.nxCloudToken, }); } else if (options.preset === presets_1.Preset.NextJs) { const { applicationGenerator: nextApplicationGenerator } = require('@nx' + '/next'); return nextApplicationGenerator(tree, { name: options.name, directory: (0, path_1.join)('apps', options.name), style: options.style, linter: options.linter, appDir: options.nextAppDir, src: options.nextSrcDir, e2eTestRunner: options.e2eTestRunner ?? 'playwright', unitTestRunner: options.unitTestRunner, addPlugin, useTsSolution: options.workspaces, formatter: options.formatter, }); } else if (options.preset === presets_1.Preset.NextJsStandalone) { const { applicationGenerator: nextApplicationGenerator } = require('@nx' + '/next'); return nextApplicationGenerator(tree, { name: options.name, directory: '.', style: options.style, linter: options.linter, appDir: options.nextAppDir, src: options.nextSrcDir, e2eTestRunner: options.e2eTestRunner ?? 'playwright', unitTestRunner: options.unitTestRunner, rootProject: true, addPlugin, formatter: options.formatter, }); } else if (options.preset === presets_1.Preset.WebComponents) { const { applicationGenerator: webApplicationGenerator } = require('@nx' + '/web'); return webApplicationGenerator(tree, { name: options.name, directory: (0, path_1.join)('apps', options.name), style: options.style, linter: options.linter, bundler: 'vite', e2eTestRunner: options.e2eTestRunner ?? 'playwright', addPlugin, nxCloudToken: options.nxCloudToken, }); } else if (options.preset === presets_1.Preset.Nest) { const { applicationGenerator: nestApplicationGenerator } = require('@nx' + '/nest'); return nestApplicationGenerator(tree, { name: options.name, directory: (0, path_1.join)('apps', options.name), linter: options.linter, e2eTestRunner: options.e2eTestRunner ?? 'jest', unitTestRunner: options.unitTestRunner, addPlugin, useTsSolution: options.workspaces, formatter: options.formatter, }); } else if (options.preset === presets_1.Preset.Express) { const { applicationGenerator: expressApplicationGenerator, } = require('@nx' + '/express'); return expressApplicationGenerator(tree, { name: options.name, directory: (0, path_1.join)('apps', options.name), linter: options.linter, e2eTestRunner: options.e2eTestRunner ?? 'jest', unitTestRunner: options.unitTestRunner, addPlugin, useTsSolution: options.workspaces, formatter: options.formatter, }); } else if (options.preset === presets_1.Preset.ReactNative) { const { reactNativeApplicationGenerator } = require('@nx' + '/react-native'); return reactNativeApplicationGenerator(tree, { name: options.name, directory: (0, path_1.join)('apps', options.name), linter: options.linter, e2eTestRunner: options.e2eTestRunner ?? 'detox', unitTestRunner: options.unitTestRunner, addPlugin, nxCloudToken: options.nxCloudToken, bundler: options.bundler ?? 'webpack', useTsSolution: options.workspaces, formatter: options.formatter, }); } else if (options.preset === presets_1.Preset.Expo) { const { expoApplicationGenerator } = require('@nx' + '/expo'); return expoApplicationGenerator(tree, { name: options.name, directory: (0, path_1.join)('apps', options.name), linter: options.linter, e2eTestRunner: options.e2eTestRunner ?? 'detox', unitTestRunner: options.unitTestRunner, addPlugin, nxCloudToken: options.nxCloudToken, useTsSolution: options.workspaces, formatter: options.formatter, }); } else if (options.preset === presets_1.Preset.TS) { const { initGenerator } = require('@nx' + '/js'); return initGenerator(tree, { formatter: options.formatter, addTsPlugin: process.env.NX_ADD_PLUGINS !== 'false' && process.env.NX_ADD_TS_PLUGIN !== 'false', }); } else if (options.preset === presets_1.Preset.TsStandalone) { const { libraryGenerator } = require('@nx' + '/js'); return libraryGenerator(tree, { name: options.name, directory: '.', bundler: 'tsc', unitTestRunner: 'vitest', testEnvironment: 'node', js: options.js, rootProject: true, addPlugin, }); } else if (options.preset === presets_1.Preset.NodeStandalone) { const { applicationGenerator: nodeApplicationGenerator } = require('@nx' + '/node'); const bundler = options.bundler === 'webpack' ? 'webpack' : 'esbuild'; return nodeApplicationGenerator(tree, { bundler, name: options.name, directory: '.', linter: options.linter, standaloneConfig: options.standaloneConfig, framework: options.framework, docker: options.docker, rootProject: true, e2eTestRunner: options.e2eTestRunner ?? 'jest', unitTestRunner: options.unitTestRunner, addPlugin, }); } else if (options.preset === presets_1.Preset.NodeMonorepo) { const { applicationGenerator: nodeApplicationGenerator } = require('@nx' + '/node'); const bundler = options.bundler === 'webpack' ? 'webpack' : 'esbuild'; return nodeApplicationGenerator(tree, { bundler, name: options.name, directory: (0, path_1.join)('apps', options.name), linter: options.linter, framework: options.framework, docker: options.docker, rootProject: false, e2eTestRunner: options.e2eTestRunner ?? 'jest', unitTestRunner: options.unitTestRunner, addPlugin, useTsSolution: options.workspaces, formatter: options.formatter, }); } else { throw new Error(`Invalid preset ${options.preset}`); } }