* refactor(codegen): share syntax-tree code generation between exporters dom-css printed Tailwind JSX with its own esrap JSX builders and kept TypeScript template helpers under its Storybook export. The OpenPencil JSX exporter needs the same JSX builders, and design-jsx and dom-css may not depend on each other. @open-pencil/codegen holds both: es for ESTree templates and modules (moved from dom-css) and jsx for JSX elements, attributes, text, and printing, including the literal rules that keep exported strings from being reinterpreted. dom-css no longer depends on acorn and esrap directly. * refactor(design-jsx): print JSX export as syntax trees sceneNodeToJSX concatenated strings with hand-written escaping and indentation. It now collects typed props (moved to export/props.ts) and prints them with @open-pencil/codegen's JSX builders. Output is unchanged except for text: special characters print as a string expression instead of entities, and multi-line text keeps its line breaks, which the old line-splitting lost on render. * docs(codegen): fix package metadata and dependency rules codegen's repository.directory still named design-jsx, the README mentioned es without showing it, and the design-jsx and dom-css guides still said they depend only on scene-graph. * test(core): move the JSX export round-trips to the design-jsx test home Covers tabs in layer names and text, which JSX keeps as written.
39 lines
871 B
TypeScript
39 lines
871 B
TypeScript
import { defineConfig } from 'tsdown'
|
|
|
|
export default defineConfig({
|
|
entry: {
|
|
index: './src/index.ts'
|
|
},
|
|
platform: 'neutral',
|
|
format: ['esm'],
|
|
dts: true,
|
|
sourcemap: true,
|
|
hash: false,
|
|
clean: true,
|
|
outDir: './dist',
|
|
treeshake: {
|
|
moduleSideEffects: false
|
|
},
|
|
deps: {
|
|
neverBundle: [/^node:/],
|
|
onlyBundle: false
|
|
},
|
|
outputOptions: {
|
|
minifyInternalExports: false,
|
|
codeSplitting: {
|
|
groups: [
|
|
{
|
|
test: /(?<!\.d\.c?ts)$/,
|
|
name: (id) => {
|
|
const cleanId = id.split('?')[0]
|
|
const parts = cleanId.split(/[\\/]/g)
|
|
const srcIndex = parts.lastIndexOf('src')
|
|
const file = srcIndex >= 0 ? parts.slice(srcIndex + 1).join('/') : parts.at(-1) ?? 'chunk'
|
|
return `chunks/${file.replace(/\.(ts|tsx)$/, '')}`
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
})
|