Files
2026-07-13 13:34:48 +08:00

76 lines
1.9 KiB
TypeScript

import { llm } from '@botpress/common'
import { z } from '@botpress/sdk'
import esbuild from 'esbuild'
import { writeFileSync } from 'fs'
import { format, resolveConfig } from 'prettier'
import { devDependencies } from './package.json'
const common: esbuild.BuildOptions = {
bundle: true,
minify: true,
sourcemap: true,
}
async function generateTypes() {
const code =
`export type GenerateContentInput = ${llm.schemas.GenerateContentInputSchema(z.any()).toTypescriptType({ treatDefaultAsOptional: true })};
export type GenerateContentOutput = ${llm.schemas.GenerateContentOutputSchema.toTypescriptType({ treatDefaultAsOptional: true })};
export type Model = ${llm.schemas.ModelSchema.toTypescriptType({ treatDefaultAsOptional: true })};
`.trim()
const filePath = './src/schemas.gen.ts'
const prettierConfig = await resolveConfig(filePath)
const formattedCode = await format(code, { ...prettierConfig!, filepath: filePath })
writeFileSync(filePath, formattedCode)
}
const external = Object.keys(devDependencies)
const buildCjs = () =>
esbuild.build({
...common,
platform: 'node',
minify: false,
format: 'cjs',
external,
outfile: 'dist/index.cjs',
entryPoints: ['src/index.ts'],
allowOverwrite: true,
})
const buildEsm = () =>
esbuild.build({
...common,
platform: 'browser',
format: 'esm',
minify: false,
external,
outfile: 'dist/index.mjs',
entryPoints: ['src/index.ts'],
allowOverwrite: true,
})
const main = async (argv: string[]) => {
await generateTypes()
if (argv.includes('--neutral')) {
await buildCjs()
await buildEsm()
} else {
throw new Error('you must specify a build target (--neutral)')
}
}
void main(process.argv.slice(2))
.then(() => {
console.info('Done')
process.exit(0)
})
.catch((error) => {
console.error(error)
process.exit(1)
})