bible-strong-avatar-lab/packages/avatar-core/vite.config.ts
Eric Cappannelli 99300b3b30 feat(runtime): ship semantic avatar packages and Studio export
- add the v1 AvatarDefinition schema, bounded parser, strict validation, semantic catalog, pure geometry, scene generation, and deterministic playback to @bible-strong/avatar-core
- add the React 19 renderer with semantic controls, SSR-safe embedded/floating layouts, direct frame updates, pointer and keyboard movement, constraints, callbacks, and accessible controls
- add real tarball packaging and a clean React/Vite consumer using the exported Strobi definition
- add Studio semantic-key authoring, runtime readiness, JSON download/copy, bundled-key recovery, concise errors, targeted local-project clearing, npm guidance, syntax highlighting, and a runnable package preview
- preserve the historical ZIP and Studio project exports, regenerate the standalone engine, and synchronize English, French, and Simplified Chinese copy
- add focused contract, playback, renderer, interaction, persistence, export, and localization coverage
- archive the completed runtime and semantic-curation specs, retain the Vite performance draft, and record the engineering session in TIMELOG.md

Validation:
- pnpm check: 19 test files, 162 tests, typecheck, engine freshness, package builds, and Studio production build passed
- npm pack dry runs: 30 core files and 10 React files
- package smoke: real tarballs installed, typechecked, and built outside the workspace
- browser checks: semantic playback, embedded/floating render, drag, mobile overflow, runtime export recovery, formatted copy, syntax colors, and live package preview

Publication remains disabled: both packages stay private and AGPL-3.0-only pending licensing and repository metadata approval. Vue and Angular adapters remain deferred.
2026-08-16 10:18:39 +02:00

36 lines
1.1 KiB
TypeScript

import { fileURLToPath } from 'node:url'
import { defineConfig } from 'vite'
export default defineConfig({
build: {
lib: {
entry: {
index: fileURLToPath(new URL('./src/index.ts', import.meta.url)),
geometry: fileURLToPath(new URL('./src/geometry.ts', import.meta.url)),
body: fileURLToPath(new URL('./src/body.ts', import.meta.url)),
surfaces: fileURLToPath(new URL('./src/surfaces.ts', import.meta.url)),
ambientMotion: fileURLToPath(new URL('./src/ambientMotion.ts', import.meta.url)),
},
formats: ['es'],
},
sourcemap: true,
rollupOptions: {
external: ['ajv/dist/2020.js'],
output: { entryFileNames: '[name].js', chunkFileNames: 'chunks/[name]-[hash].js' },
},
},
plugins: [
{
name: 'copy-avatar-schema',
closeBundle: async () => {
const { copyFile } = await import('node:fs/promises')
await copyFile(
fileURLToPath(new URL('./src/avatarDefinition.schema.json', import.meta.url)),
fileURLToPath(new URL('./dist/avatarDefinition.schema.json', import.meta.url))
)
},
},
],
})