@baseplate-dev/react-generators
Version:
React Generators for Baseplate
58 lines • 2.85 kB
JavaScript
import { createNodePackagesTask, extractPackageVersions, tsCodeFragment, } from '@baseplate-dev/core-generators';
import { createGenerator, createGeneratorTask, createProviderType, } from '@baseplate-dev/sync';
import { z } from 'zod';
import { REACT_PACKAGES } from '#src/constants/react-packages.js';
import { reactAppConfigProvider } from '../react-app/index.js';
import { CORE_REACT_COMPONENTS_GENERATED } from './generated/index.js';
import { reactComponentsImportsProvider } from './generated/ts-import-providers.js';
const descriptorSchema = z.object({});
export const reactComponentsProvider = createProviderType('react-components');
export const reactComponentsGenerator = createGenerator({
name: 'core/react-components',
generatorFileUrl: import.meta.url,
descriptorSchema,
buildTasks: () => ({
nodePackages: createNodePackagesTask({
prod: extractPackageVersions(REACT_PACKAGES, [
'@hookform/resolvers',
'clsx',
'react-hook-form',
'react-icons',
'zustand',
'radix-ui',
'class-variance-authority',
'cmdk',
'sonner',
'react-day-picker',
'date-fns',
]),
}),
paths: CORE_REACT_COMPONENTS_GENERATED.paths.task,
imports: CORE_REACT_COMPONENTS_GENERATED.imports.task,
renderers: CORE_REACT_COMPONENTS_GENERATED.renderers.task,
main: createGeneratorTask({
dependencies: {
renderers: CORE_REACT_COMPONENTS_GENERATED.renderers.provider,
reactAppConfig: reactAppConfigProvider,
reactComponentsImports: reactComponentsImportsProvider,
},
run({ renderers, reactAppConfig, reactComponentsImports }) {
// add toaster root sibling component
reactAppConfig.renderSiblings.set('toaster', tsCodeFragment('<Toaster />', reactComponentsImports.Toaster.declaration()));
// add confirm dialog root sibling component
reactAppConfig.renderSiblings.set('react-components', tsCodeFragment('<ConfirmDialog />', reactComponentsImports.ConfirmDialog.declaration()));
return {
providers: {
reactComponents: {
getComponentsFolder: () => `@/src/components`,
},
},
build: async (builder) => {
await builder.apply(renderers.componentsGroup.render({}), renderers.hooksGroup.render({}), renderers.stylesGroup.render({}), renderers.utilsGroup.render({}));
},
};
},
}),
}),
});
//# sourceMappingURL=react-components.generator.js.map