UNPKG

@baseplate-dev/core-generators

Version:

Core generators for Baseplate

117 lines 5.56 kB
import { createConfigProviderTask, createGenerator, createGeneratorTask, } from '@baseplate-dev/sync'; import { z } from 'zod'; import { CORE_PACKAGES } from '#src/constants/index.js'; import { packageScope } from '#src/providers/scopes.js'; import { extractPackageVersions } from '#src/utils/extract-packages.js'; import { eslintConfigProvider } from '../eslint/index.js'; import { createNodePackagesTask, nodeProvider } from '../node/index.js'; import { typescriptFileProvider } from '../typescript/index.js'; const descriptorSchema = z.object({}); import { stringifyPrettyStable } from '@baseplate-dev/utils'; import { packageInfoProvider } from '#src/providers/project.js'; import { tsCodeFragment, TsCodeUtils, tsImportBuilder, } from '#src/renderers/index.js'; import { NODE_VITEST_GENERATED } from './generated/index.js'; const [setupTask, vitestConfigProvider, vitestConfigValuesProvider] = createConfigProviderTask((t) => ({ globalSetupOperations: t.map(), setupFiles: t.array(), }), { prefix: 'vitest', configScope: packageScope, }); export { vitestConfigProvider }; export const vitestGenerator = createGenerator({ name: 'node/vitest', generatorFileUrl: import.meta.url, descriptorSchema, buildTasks: () => ({ paths: createGeneratorTask({ dependencies: { node: nodeProvider, packageInfo: packageInfoProvider, }, exports: { paths: NODE_VITEST_GENERATED.paths.provider.export(), }, run: ({ node, packageInfo }) => { const srcRoot = packageInfo.getPackageSrcPath(); const packageRoot = packageInfo.getPackageRoot(); return { providers: { paths: { globalSetup: `${srcRoot}/tests/scripts/global-setup.ts`, vitestConfig: `${packageRoot}/${node.isEsm ? 'vitest.config.ts' : 'vitest.config.mts'}`, }, }, }; }, }), nodePackages: createNodePackagesTask({ dev: extractPackageVersions(CORE_PACKAGES, [ 'vitest', 'vite-tsconfig-paths', ]), }), setup: setupTask, main: createGeneratorTask({ dependencies: { node: nodeProvider, typescriptFile: typescriptFileProvider, eslintConfig: eslintConfigProvider, vitestConfigValues: vitestConfigValuesProvider, paths: NODE_VITEST_GENERATED.paths.provider, }, run({ node, typescriptFile, eslintConfig, vitestConfigValues: { globalSetupOperations, setupFiles }, paths, }) { const vitestConfigFilename = node.isEsm ? 'vitest.config.ts' : 'vitest.config.mts'; eslintConfig.tsDefaultProjectFiles.push(vitestConfigFilename); return { build: async (builder) => { const hasGlobalSetup = globalSetupOperations.size > 0; if (hasGlobalSetup) { await builder.apply(typescriptFile.renderTemplateFile({ template: NODE_VITEST_GENERATED.templates.globalSetup, destination: paths.globalSetup, variables: { TPL_OPERATIONS: TsCodeUtils.mergeFragments(globalSetupOperations), }, writeOptions: { alternateFullIds: [ '@baseplate-dev/core-generators#node/vitest:src/tests/scripts/globalSetup.ts', ], }, })); } const configValues = { clearMocks: true, passWithNoTests: true, root: './src', globalSetup: hasGlobalSetup ? `./${paths.globalSetup.replace('@/src/', '')}` : undefined, setupFiles: setupFiles.length > 0 ? setupFiles.toSorted() : undefined, }; const plugins = TsCodeUtils.mergeFragmentsAsArray({ tsconfigPaths: tsCodeFragment('tsconfigPaths()', [ tsImportBuilder() .default('tsconfigPaths') .from('vite-tsconfig-paths'), ]), }); await builder.apply(typescriptFile.renderTemplateFile({ template: NODE_VITEST_GENERATED.templates.vitestConfig, destination: vitestConfigFilename, variables: { TPL_CONFIG: TsCodeUtils.mergeFragmentsAsObject({ plugins, test: stringifyPrettyStable(configValues), }), }, })); }, }; }, }), }), }); //# sourceMappingURL=vitest.generator.js.map