mtcute/.config/vite.deno.mts

101 lines
3.4 KiB
TypeScript
Raw Normal View History

import { defineConfig } from 'vite'
import { resolve, join } from 'path'
import { fixupCjs } from './vite-utils/fixup-cjs'
import { testSetup } from './vite-utils/test-setup-plugin'
import { collectTestEntrypoints } from './vite-utils/collect-test-entrypoints'
const FIXUP_TEST = resolve(__dirname, 'vite-utils/fixup-deno-test.ts')
export default defineConfig({
build: {
lib: {
entry: process.env.ENTRYPOINT ? [process.env.ENTRYPOINT] : collectTestEntrypoints({
// these packages rely on node apis and are not meant to be run under deno
skipPackages: ['create-bot', 'crypto-node', 'bun', 'node', 'http-proxy', 'socks-proxy', 'mtproxy'],
skipTests: [
// uses timers
'core/src/network/config-manager.test.ts',
'core/src/network/persistent-connection.test.ts',
// https://github.com/denoland/deno/issues/22470
'wasm/tests/gunzip.test.ts',
'wasm/tests/zlib.test.ts',
],
}),
formats: ['es'],
},
rollupOptions: {
external: [
// todo which of these are actually needed?
'zlib',
'vitest',
'stream',
'net',
'crypto',
'module',
'fs',
'fs/promises',
'readline',
'worker_threads',
'events',
'path',
'util',
'os',
//
/^(jsr|npm|node|https?):/,
],
output: {
chunkFileNames: 'chunk-[hash].js',
entryFileNames: '[name]-[hash].test.js',
minifyInternalExports: false,
},
treeshake: false,
},
commonjsOptions: {
ignoreDynamicRequires: true,
},
outDir: process.env.OUT_DIR || 'dist/tests',
emptyOutDir: true,
target: 'esnext',
minify: false,
},
plugins: [
fixupCjs(),
{
name: 'fix-vitest',
transform(code) {
if (!code.includes('vitest')) return code
code = code.replace(/^import {(.+?)} from ['"]vitest['"]/gms, (_, names) => {
const namesParsed = names.split(',').map((name) => name.trim())
return `import {${namesParsed.join(', ')}} from '${FIXUP_TEST}'`
})
return code
},
},
{
name: 'fix-events',
transform(code) {
if (!code.includes('events')) return code
return code.replace(/^import (.+?) from ['"]events['"]/gms, (_, name) => {
return `import ${name} from 'node:events'`
})
},
},
// todo
// {
// name: 'fix-wasm-load',
// async transform(code, id) {
// if (code.includes('@mtcute/wasm/mtcute.wasm')) {
// return code.replace('@mtcute/wasm/mtcute.wasm', resolve(__dirname, '../packages/wasm/mtcute.wasm'))
// }
// return code
// }
// },
testSetup(),
],
define: {
'import.meta.env.TEST_ENV': '"deno"',
},
})