@wterm/core 0.2.1 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/terminal-core.d.ts +48 -0
- package/dist/terminal-core.d.ts.map +1 -0
- package/dist/terminal-core.js +2 -0
- package/dist/terminal-core.js.map +1 -0
- package/dist/wasm-bridge.d.ts +4 -18
- package/dist/wasm-bridge.d.ts.map +1 -1
- package/dist/wasm-bridge.js +11 -4
- package/dist/wasm-bridge.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -9,6 +9,7 @@ Headless terminal emulator core for [wterm](https://github.com/vercel-labs/wterm
|
|
|
9
9
|
| [`@wterm/dom`](https://www.npmjs.com/package/@wterm/dom) | DOM renderer, input handler — vanilla JS terminal |
|
|
10
10
|
| [`@wterm/react`](https://www.npmjs.com/package/@wterm/react) | React component + `useTerminal` hook |
|
|
11
11
|
| [`@wterm/vue`](https://www.npmjs.com/package/@wterm/vue) | Vue 3 component + template ref API |
|
|
12
|
+
| [`@wterm/ghostty`](https://www.npmjs.com/package/@wterm/ghostty) | Full-featured VT emulation core powered by libghostty |
|
|
12
13
|
| [`@wterm/just-bash`](https://www.npmjs.com/package/@wterm/just-bash) | In-browser Bash shell powered by just-bash |
|
|
13
14
|
| [`@wterm/markdown`](https://www.npmjs.com/package/@wterm/markdown) | Streaming Markdown-to-ANSI renderer for terminals |
|
|
14
15
|
|
|
@@ -18,11 +19,27 @@ Headless terminal emulator core for [wterm](https://github.com/vercel-labs/wterm
|
|
|
18
19
|
npm install @wterm/core
|
|
19
20
|
```
|
|
20
21
|
|
|
22
|
+
## Pluggable Cores
|
|
23
|
+
|
|
24
|
+
`@wterm/core` defines a `TerminalCore` interface that any terminal emulation backend can implement. The built-in `WasmBridge` implements it using wterm's lightweight Zig WASM binary (~12 KB). For full-featured emulation (Kitty protocols, proper grapheme handling, mouse tracking, etc.), use [`@wterm/ghostty`](https://www.npmjs.com/package/@wterm/ghostty) which implements the same interface using libghostty (~400 KB).
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
import { WTerm } from "@wterm/dom";
|
|
28
|
+
import { GhosttyCore } from "@wterm/ghostty";
|
|
29
|
+
|
|
30
|
+
// Default — uses built-in lightweight core
|
|
31
|
+
const term = new WTerm(el);
|
|
32
|
+
|
|
33
|
+
// Opt-in — uses libghostty for full VT emulation
|
|
34
|
+
const core = await GhosttyCore.load();
|
|
35
|
+
const term = new WTerm(el, { core });
|
|
36
|
+
```
|
|
37
|
+
|
|
21
38
|
## API
|
|
22
39
|
|
|
23
40
|
### `WasmBridge`
|
|
24
41
|
|
|
25
|
-
Low-level interface to the Zig/WASM terminal state machine.
|
|
42
|
+
Low-level interface to the Zig/WASM terminal state machine. Implements the `TerminalCore` interface.
|
|
26
43
|
|
|
27
44
|
```ts
|
|
28
45
|
import { WasmBridge } from "@wterm/core";
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
export type { CellData, CursorState, UnhandledSequence, TerminalCore, } from "./terminal-core.js";
|
|
1
2
|
export { WasmBridge } from "./wasm-bridge.js";
|
|
2
|
-
export type { CellData, CursorState, UnhandledSequence, } from "./wasm-bridge.js";
|
|
3
3
|
export { WebSocketTransport } from "./transport.js";
|
|
4
4
|
export type { WebSocketTransportOptions } from "./transport.js";
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,YAAY,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export interface CellData {
|
|
2
|
+
char: number;
|
|
3
|
+
fg: number;
|
|
4
|
+
bg: number;
|
|
5
|
+
flags: number;
|
|
6
|
+
/** Resolved 24-bit foreground color (0xRRGGBB). Present when the core provides true color. */
|
|
7
|
+
fgRgb?: number;
|
|
8
|
+
/** Resolved 24-bit background color (0xRRGGBB). Present when the core provides true color. */
|
|
9
|
+
bgRgb?: number;
|
|
10
|
+
}
|
|
11
|
+
export interface CursorState {
|
|
12
|
+
row: number;
|
|
13
|
+
col: number;
|
|
14
|
+
visible: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface UnhandledSequence {
|
|
17
|
+
final: string;
|
|
18
|
+
private: string;
|
|
19
|
+
paramCount: number;
|
|
20
|
+
params: number[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Abstract terminal emulation core. Both the built-in Zig WASM core
|
|
24
|
+
* (`WasmBridge`) and alternative backends (e.g. `@wterm/ghostty`) implement
|
|
25
|
+
* this interface so that `@wterm/dom` can render any core interchangeably.
|
|
26
|
+
*/
|
|
27
|
+
export interface TerminalCore {
|
|
28
|
+
init(cols: number, rows: number): void;
|
|
29
|
+
resize(cols: number, rows: number): void;
|
|
30
|
+
writeString(str: string): void;
|
|
31
|
+
writeRaw(data: Uint8Array): void;
|
|
32
|
+
getCell(row: number, col: number): CellData;
|
|
33
|
+
isDirtyRow(row: number): boolean;
|
|
34
|
+
clearDirty(): void;
|
|
35
|
+
getCols(): number;
|
|
36
|
+
getRows(): number;
|
|
37
|
+
getCursor(): CursorState;
|
|
38
|
+
cursorKeysApp(): boolean;
|
|
39
|
+
bracketedPaste(): boolean;
|
|
40
|
+
usingAltScreen(): boolean;
|
|
41
|
+
getTitle(): string | null;
|
|
42
|
+
getResponse(): string | null;
|
|
43
|
+
getScrollbackCount(): number;
|
|
44
|
+
getScrollbackCell(offset: number, col: number): CellData;
|
|
45
|
+
getScrollbackLineLen(offset: number): number;
|
|
46
|
+
getUnhandledSequences(): UnhandledSequence[];
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=terminal-core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-core.d.ts","sourceRoot":"","sources":["../src/terminal-core.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,8FAA8F;IAC9F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8FAA8F;IAC9F,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAE3B,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAGzC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IAGjC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC5C,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,UAAU,IAAI,IAAI,CAAC;IACnB,OAAO,IAAI,MAAM,CAAC;IAClB,OAAO,IAAI,MAAM,CAAC;IAGlB,SAAS,IAAI,WAAW,CAAC;IAGzB,aAAa,IAAI,OAAO,CAAC;IACzB,cAAc,IAAI,OAAO,CAAC;IAC1B,cAAc,IAAI,OAAO,CAAC;IAG1B,QAAQ,IAAI,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,IAAI,MAAM,GAAG,IAAI,CAAC;IAG7B,kBAAkB,IAAI,MAAM,CAAC;IAC7B,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAC;IACzD,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAG7C,qBAAqB,IAAI,iBAAiB,EAAE,CAAC;CAC9C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-core.js","sourceRoot":"","sources":["../src/terminal-core.ts"],"names":[],"mappings":""}
|
package/dist/wasm-bridge.d.ts
CHANGED
|
@@ -1,21 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
fg: number;
|
|
4
|
-
bg: number;
|
|
5
|
-
flags: number;
|
|
6
|
-
}
|
|
7
|
-
export interface CursorState {
|
|
8
|
-
row: number;
|
|
9
|
-
col: number;
|
|
10
|
-
visible: boolean;
|
|
11
|
-
}
|
|
12
|
-
export interface UnhandledSequence {
|
|
13
|
-
final: string;
|
|
14
|
-
private: string;
|
|
15
|
-
paramCount: number;
|
|
16
|
-
params: number[];
|
|
17
|
-
}
|
|
18
|
-
export declare class WasmBridge {
|
|
1
|
+
import type { CellData, CursorState, UnhandledSequence, TerminalCore } from "./terminal-core.js";
|
|
2
|
+
export declare class WasmBridge implements TerminalCore {
|
|
19
3
|
private exports;
|
|
20
4
|
private memory;
|
|
21
5
|
private gridPtr;
|
|
@@ -26,6 +10,8 @@ export declare class WasmBridge {
|
|
|
26
10
|
private encoder;
|
|
27
11
|
private decoder;
|
|
28
12
|
private _dv;
|
|
13
|
+
private _dvBuffer;
|
|
14
|
+
private get dv();
|
|
29
15
|
constructor(instance: WebAssembly.Instance);
|
|
30
16
|
static load(url?: string): Promise<WasmBridge>;
|
|
31
17
|
init(cols: number, rows: number): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wasm-bridge.d.ts","sourceRoot":"","sources":["../src/wasm-bridge.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"wasm-bridge.d.ts","sourceRoot":"","sources":["../src/wasm-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,YAAY,EACb,MAAM,oBAAoB,CAAC;AA6C5B,qBAAa,UAAW,YAAW,YAAY;IAC7C,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,OAAO,CAAO;IACtB,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,GAAG,CAAY;IACvB,OAAO,CAAC,SAAS,CAA4B;IAE7C,OAAO,KAAK,EAAE,GAMb;gBAEW,QAAQ,EAAE,WAAW,CAAC,QAAQ;WAK7B,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAiBpD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAKtC,OAAO,CAAC,eAAe;IAQvB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAK9B,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAWhC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ;IAW3C,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIhC,UAAU,IAAI,IAAI;IAIlB,SAAS,IAAI,WAAW;IAQxB,OAAO,IAAI,MAAM;IAGjB,OAAO,IAAI,MAAM;IAIjB,aAAa,IAAI,OAAO;IAGxB,cAAc,IAAI,OAAO;IAGzB,cAAc,IAAI,OAAO;IAIzB,QAAQ,IAAI,MAAM,GAAG,IAAI;IAQzB,WAAW,IAAI,MAAM,GAAG,IAAI;IAU5B,kBAAkB,IAAI,MAAM;IAI5B,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ;IAYxD,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAI5C,qBAAqB,IAAI,iBAAiB,EAAE;IA+B5C,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;CAIzC"}
|
package/dist/wasm-bridge.js
CHANGED
|
@@ -7,6 +7,13 @@ function decodeBase64(base64) {
|
|
|
7
7
|
return bytes.buffer;
|
|
8
8
|
}
|
|
9
9
|
export class WasmBridge {
|
|
10
|
+
get dv() {
|
|
11
|
+
if (this._dvBuffer !== this.memory.buffer) {
|
|
12
|
+
this._dvBuffer = this.memory.buffer;
|
|
13
|
+
this._dv = new DataView(this.memory.buffer);
|
|
14
|
+
}
|
|
15
|
+
return this._dv;
|
|
16
|
+
}
|
|
10
17
|
constructor(instance) {
|
|
11
18
|
this.gridPtr = 0;
|
|
12
19
|
this.dirtyPtr = 0;
|
|
@@ -15,6 +22,7 @@ export class WasmBridge {
|
|
|
15
22
|
this.maxCols = 256;
|
|
16
23
|
this.encoder = new TextEncoder();
|
|
17
24
|
this.decoder = new TextDecoder();
|
|
25
|
+
this._dvBuffer = null;
|
|
18
26
|
this.exports = instance.exports;
|
|
19
27
|
this.memory = this.exports.memory;
|
|
20
28
|
}
|
|
@@ -43,17 +51,16 @@ export class WasmBridge {
|
|
|
43
51
|
this.writeBufferPtr = this.exports.getWriteBuffer();
|
|
44
52
|
this.cellSize = this.exports.getCellSize();
|
|
45
53
|
this.maxCols = this.exports.getMaxCols();
|
|
46
|
-
this._dv = new DataView(this.memory.buffer);
|
|
47
54
|
}
|
|
48
55
|
writeString(str) {
|
|
49
56
|
const encoded = this.encoder.encode(str);
|
|
50
57
|
this.writeRaw(encoded);
|
|
51
58
|
}
|
|
52
59
|
writeRaw(data) {
|
|
53
|
-
const buf = new Uint8Array(this.memory.buffer, this.writeBufferPtr, 8192);
|
|
54
60
|
let offset = 0;
|
|
55
61
|
while (offset < data.length) {
|
|
56
62
|
const chunk = Math.min(data.length - offset, 8192);
|
|
63
|
+
const buf = new Uint8Array(this.memory.buffer, this.writeBufferPtr, 8192);
|
|
57
64
|
buf.set(data.subarray(offset, offset + chunk));
|
|
58
65
|
this.exports.writeBytes(chunk);
|
|
59
66
|
offset += chunk;
|
|
@@ -61,7 +68,7 @@ export class WasmBridge {
|
|
|
61
68
|
}
|
|
62
69
|
getCell(row, col) {
|
|
63
70
|
const offset = this.gridPtr + (row * this.maxCols + col) * this.cellSize;
|
|
64
|
-
const dv = this.
|
|
71
|
+
const dv = this.dv;
|
|
65
72
|
return {
|
|
66
73
|
char: dv.getUint32(offset, true),
|
|
67
74
|
fg: dv.getUint16(offset + 4, true),
|
|
@@ -121,7 +128,7 @@ export class WasmBridge {
|
|
|
121
128
|
getScrollbackCell(offset, col) {
|
|
122
129
|
const ptr = this.exports.getScrollbackLine(offset);
|
|
123
130
|
const off = ptr + col * this.cellSize;
|
|
124
|
-
const dv = this.
|
|
131
|
+
const dv = this.dv;
|
|
125
132
|
return {
|
|
126
133
|
char: dv.getUint32(off, true),
|
|
127
134
|
fg: dv.getUint16(off + 4, true),
|
package/dist/wasm-bridge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wasm-bridge.js","sourceRoot":"","sources":["../src/wasm-bridge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wasm-bridge.js","sourceRoot":"","sources":["../src/wasm-bridge.ts"],"names":[],"mappings":"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"}
|