import { versionForProject } from '../scripts/git-version.mjs' import pkg from './package.json' import path from 'path' import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' import postCssImport from 'postcss-import' import postCssApply from 'postcss-apply' import postColorModFunction from 'postcss-color-mod-function' import postCssPresetEnv from 'postcss-preset-env' import lostCss from 'lost' import type { UserConfig } from 'vite' export default defineConfig( async (): Promise => { const project = process.env.OPENTRONS_PROJECT ?? 'robot-stack' const version = await versionForProject(project) return { publicDir: false, build: { // Relative to the root ssr: 'src/index.ts', outDir: 'lib', commonjsOptions: { transformMixedEsModules: true, esmExternals: true, }, }, plugins: [ react({ include: '**/*.tsx', babel: { // Use babel.config.js files configFile: true, }, }), ], optimizeDeps: { esbuildOptions: { target: 'CommonJs', }, }, css: { postcss: { plugins: [ postCssImport({ root: 'src/' }), postCssApply(), postColorModFunction(), postCssPresetEnv({ stage: 0 }), lostCss(), ], }, }, define: { 'process.env': process.env, global: 'globalThis', _PKG_VERSION_: JSON.stringify(version), _PKG_BUGS_URL_: JSON.stringify(pkg.bugs.url), _OPENTRONS_PROJECT_: JSON.stringify(project), }, resolve: { alias: { '@opentrons/components/styles': path.resolve( '../components/src/index.module.css' ), '@opentrons/components': path.resolve('../components/src/index.ts'), '@opentrons/shared-data': path.resolve('../shared-data/js/index.ts'), '@opentrons/step-generation': path.resolve( '../step-generation/src/index.ts' ), '@opentrons/discovery-client': path.resolve( '../discovery-client/src/index.ts' ), '@opentrons/usb-bridge/node-client': path.resolve( '../usb-bridge/node-client/src/index.ts' ), }, }, } } )