Full common split: composite tsconfigs and target-* modules

- Add composite TypeScript projects for common/primitives and common/runtime
- Decouple primitives from runtime (buffer service interfaces, UnicodeProperties, CellTypes, etc.)
- Move Types.ts to runtime; re-export primitive types from runtime/Types
- Rename src/browser -> src/target-browser, src/headless -> src/target-headless
- Update import paths (target-browser/*, target-headless/*) across repo
- Fix esbuild outbase so common/* and target-* resolve under out-esbuild/
- Point unicode addons at primitives for UnicodeTypes/UnicodeProperties
- Update ARCHITECTURE.md and AGENTS.md

Co-authored-by: Daniel Imms <Tyriar@users.noreply.github.com>
This commit is contained in:
Cursor Agent
2026-05-31 00:19:43 +00:00
co-authored by Daniel Imms
parent 9a65429a30
commit c569e5ab19
188 changed files with 879 additions and 729 deletions
+37 -15
View File
@@ -92,6 +92,9 @@ let outConfig = {
}
let skipOut = false;
/** @type {esbuild.BuildOptions[] | undefined} */
let outBuilds;
/** @type {esbuild.BuildOptions} */
let outTestConfig = {
format: 'cjs',
@@ -171,7 +174,7 @@ if (config.addon) {
} else if (config.isHeadless) {
bundleConfig = {
...bundleConfig,
entryPoints: [`src/headless/public/Terminal.ts`],
entryPoints: [`src/target-headless/public/Terminal.ts`],
outfile: `headless/lib-headless/xterm-headless.mjs`
};
outConfig = {
@@ -183,20 +186,35 @@ if (config.addon) {
} else {
bundleConfig = {
...bundleConfig,
entryPoints: [`src/browser/public/Terminal.ts`],
entryPoints: [`src/target-browser/public/Terminal.ts`],
outfile: `lib/xterm.mjs`
};
outConfig = {
...outConfig,
entryPoints: [
'src/browser/**/*.ts',
'src/common/primitives/**/*.ts',
'src/common/runtime/**/*.ts',
'src/common/*.ts',
'src/headless/**/*.ts'
],
outdir: 'out-esbuild/'
};
outBuilds = [
{
...outConfig,
entryPoints: ['src/common/primitives/**/*.ts'],
outbase: 'src/common/primitives',
outdir: 'out-esbuild/common',
},
{
...outConfig,
entryPoints: ['src/common/runtime/**/*.ts'],
outbase: 'src/common/runtime',
outdir: 'out-esbuild/common',
},
{
...outConfig,
entryPoints: ['src/target-browser/**/*.ts'],
outbase: 'src',
outdir: 'out-esbuild',
},
{
...outConfig,
entryPoints: ['src/target-headless/**/*.ts'],
outbase: 'src',
outdir: 'out-esbuild',
},
];
outTestConfig = {
...outConfig,
entryPoints: ['test/**/*.ts'],
@@ -207,7 +225,9 @@ if (config.addon) {
if (config.isWatch) {
context(bundleConfig).then(e => e.watch());
if (!skipOut) {
context(outConfig).then(e => e.watch());
for (const buildConfig of outBuilds ?? [outConfig]) {
context(buildConfig).then(e => e.watch());
}
}
if (!skipOutTest) {
context(outTestConfig).then(e => e.watch());
@@ -215,7 +235,9 @@ if (config.isWatch) {
} else {
await build(bundleConfig);
if (!skipOut) {
await build(outConfig);
for (const buildConfig of outBuilds ?? [outConfig]) {
await build(buildConfig);
}
}
if (!skipOutTest) {
await build(outTestConfig);
+1 -1
View File
@@ -38,4 +38,4 @@ function findUnusedSymbols(
}
// Example usage
findUnusedSymbols("./src/browser/tsconfig.json");
findUnusedSymbols("./src/target-browser/tsconfig.json");