@floegence/floeterm-terminal-web 0.5.24 → 0.6.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 +20 -0
- package/dist/core/PagedTerminalOutputCoordinator.js +3 -4
- package/dist/core/PagedTerminalOutputCoordinator.js.map +1 -1
- package/dist/core/TerminalCore.d.ts +4 -0
- package/dist/core/TerminalCore.d.ts.map +1 -1
- package/dist/core/TerminalCore.js +109 -22
- package/dist/core/TerminalCore.js.map +1 -1
- package/dist/core/TerminalOutputPipeline.js +2 -2
- package/dist/core/TerminalOutputPipeline.js.map +1 -1
- package/dist/entries/live.d.ts +7 -0
- package/dist/entries/live.d.ts.map +1 -0
- package/dist/entries/live.js +4 -0
- package/dist/entries/live.js.map +1 -0
- package/dist/fabric/BeamtermFabricRenderer.d.ts +11 -4
- package/dist/fabric/BeamtermFabricRenderer.d.ts.map +1 -1
- package/dist/fabric/BeamtermFabricRenderer.js +259 -47
- package/dist/fabric/BeamtermFabricRenderer.js.map +1 -1
- package/dist/fabric/TerminalFabricCoordinator.d.ts +1 -1
- package/dist/fabric/TerminalFabricCoordinator.d.ts.map +1 -1
- package/dist/fabric/TerminalFabricCoordinator.js +4 -7
- package/dist/fabric/TerminalFabricCoordinator.js.map +1 -1
- package/dist/fabric/TerminalLiveFabric.d.ts +3 -43
- package/dist/fabric/TerminalLiveFabric.d.ts.map +1 -1
- package/dist/fabric/TerminalLiveFabric.js +3 -97
- package/dist/fabric/TerminalLiveFabric.js.map +1 -1
- package/dist/fabric/types.d.ts +41 -3
- package/dist/fabric/types.d.ts.map +1 -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/internal/BeamtermResourceLoader.d.ts +1 -1
- package/dist/internal/BeamtermResourceLoader.d.ts.map +1 -1
- package/dist/internal/BeamtermResourceLoader.js +1 -1
- package/dist/internal/BeamtermResourceLoader.js.map +1 -1
- package/dist/internal/SequenceBuffer.d.ts +7 -11
- package/dist/internal/SequenceBuffer.d.ts.map +1 -1
- package/dist/internal/SequenceBuffer.js +52 -103
- package/dist/internal/SequenceBuffer.js.map +1 -1
- package/dist/internal/TerminalResourceLoader.d.ts +8 -0
- package/dist/internal/TerminalResourceLoader.d.ts.map +1 -1
- package/dist/internal/TerminalResourceLoader.js +44 -5
- package/dist/internal/TerminalResourceLoader.js.map +1 -1
- package/dist/internal/UnicodeSafeUrlProvider.d.ts +17 -0
- package/dist/internal/UnicodeSafeUrlProvider.d.ts.map +1 -0
- package/dist/internal/UnicodeSafeUrlProvider.js +32 -0
- package/dist/internal/UnicodeSafeUrlProvider.js.map +1 -0
- package/dist/live/client.d.ts +62 -0
- package/dist/live/client.d.ts.map +1 -0
- package/dist/live/client.js +326 -0
- package/dist/live/client.js.map +1 -0
- package/dist/live/codec.d.ts +97 -0
- package/dist/live/codec.d.ts.map +1 -0
- package/dist/live/codec.js +386 -0
- package/dist/live/codec.js.map +1 -0
- package/dist/live/transport.d.ts +37 -0
- package/dist/live/transport.d.ts.map +1 -0
- package/dist/live/transport.js +194 -0
- package/dist/live/transport.js.map +1 -0
- package/dist/manager/TerminalInstanceController.d.ts +11 -0
- package/dist/manager/TerminalInstanceController.d.ts.map +1 -1
- package/dist/manager/TerminalInstanceController.js +265 -38
- package/dist/manager/TerminalInstanceController.js.map +1 -1
- package/dist/types.d.ts +41 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +6 -2
|
@@ -1,134 +1,83 @@
|
|
|
1
1
|
const defaultConfig = {
|
|
2
|
-
maxPendingChunks:
|
|
3
|
-
|
|
4
|
-
cleanupIntervalMs: 5000,
|
|
5
|
-
forceCleanupThreshold: 60,
|
|
6
|
-
// If we keep seeing chunks ahead of the expected sequence for too long, assume a missing
|
|
7
|
-
// chunk was dropped (e.g. transient websocket loss) and advance to keep the UI responsive.
|
|
8
|
-
maxStallMs: 500
|
|
2
|
+
maxPendingChunks: 4096,
|
|
3
|
+
maxPendingBytes: 8 * 1024 * 1024,
|
|
9
4
|
};
|
|
10
|
-
|
|
5
|
+
const normalizePositiveInteger = (value, fallback) => (typeof value === 'number' && Number.isSafeInteger(value) && value > 0 ? value : fallback);
|
|
6
|
+
// Reliable transports may reorder delivery across the history/live handoff, but
|
|
7
|
+
// they must never infer or skip a missing sequence. Recovery owns gap resolution.
|
|
11
8
|
export class SequenceBuffer {
|
|
12
9
|
constructor(config = {}) {
|
|
13
10
|
this.expectedSequence = 1;
|
|
14
11
|
this.pending = new Map();
|
|
15
|
-
this.
|
|
16
|
-
this.
|
|
17
|
-
|
|
12
|
+
this.pendingBytes = 0;
|
|
13
|
+
this.config = {
|
|
14
|
+
maxPendingChunks: normalizePositiveInteger(config.maxPendingChunks, defaultConfig.maxPendingChunks),
|
|
15
|
+
maxPendingBytes: normalizePositiveInteger(config.maxPendingBytes, defaultConfig.maxPendingBytes),
|
|
16
|
+
};
|
|
18
17
|
}
|
|
19
18
|
reset(startSequence) {
|
|
20
|
-
this.expectedSequence =
|
|
19
|
+
this.expectedSequence = Number.isSafeInteger(startSequence) && startSequence > 0
|
|
20
|
+
? startSequence
|
|
21
|
+
: 1;
|
|
21
22
|
this.pending.clear();
|
|
22
|
-
this.
|
|
23
|
-
this.lastCleanupMs = Date.now();
|
|
23
|
+
this.pendingBytes = 0;
|
|
24
24
|
}
|
|
25
25
|
flushPending() {
|
|
26
|
-
if (this.pending.size === 0) {
|
|
27
|
-
return [];
|
|
28
|
-
}
|
|
29
26
|
const ready = [];
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
this.
|
|
34
|
-
this.pendingInsertedAt.delete(sequence);
|
|
35
|
-
if (!chunk || sequence < this.expectedSequence) {
|
|
36
|
-
continue;
|
|
37
|
-
}
|
|
27
|
+
while (this.pending.has(this.expectedSequence)) {
|
|
28
|
+
const chunk = this.pending.get(this.expectedSequence);
|
|
29
|
+
this.pending.delete(this.expectedSequence);
|
|
30
|
+
this.pendingBytes -= chunk.data.byteLength;
|
|
38
31
|
ready.push(chunk);
|
|
39
|
-
this.expectedSequence
|
|
32
|
+
this.expectedSequence += 1;
|
|
40
33
|
}
|
|
41
34
|
return ready;
|
|
42
35
|
}
|
|
43
|
-
push(chunk,
|
|
36
|
+
push(chunk, _now = Date.now()) {
|
|
44
37
|
const sequence = chunk.sequence;
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
38
|
+
if (!Number.isSafeInteger(sequence) || sequence < 1) {
|
|
39
|
+
return [chunk];
|
|
40
|
+
}
|
|
41
|
+
if (sequence < this.expectedSequence || this.pending.has(sequence)) {
|
|
42
|
+
return [];
|
|
49
43
|
}
|
|
50
|
-
this.cleanupIfNeeded(now);
|
|
51
|
-
ready.push(...this.flushIfStalled(now));
|
|
52
44
|
if (sequence === this.expectedSequence) {
|
|
53
|
-
ready.push(chunk);
|
|
54
45
|
this.expectedSequence += 1;
|
|
55
|
-
|
|
56
|
-
const next = this.pending.get(this.expectedSequence);
|
|
57
|
-
if (next) {
|
|
58
|
-
ready.push(next);
|
|
59
|
-
}
|
|
60
|
-
this.pending.delete(this.expectedSequence);
|
|
61
|
-
this.pendingInsertedAt.delete(this.expectedSequence);
|
|
62
|
-
this.expectedSequence += 1;
|
|
63
|
-
}
|
|
64
|
-
return ready;
|
|
46
|
+
return [chunk, ...this.flushPending()];
|
|
65
47
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
if (!this.pendingInsertedAt.has(sequence)) {
|
|
70
|
-
this.pendingInsertedAt.set(sequence, now);
|
|
71
|
-
}
|
|
72
|
-
return ready;
|
|
48
|
+
if (this.pending.size + 1 > this.config.maxPendingChunks
|
|
49
|
+
|| this.pendingBytes + chunk.data.byteLength > this.config.maxPendingBytes) {
|
|
50
|
+
throw new Error('terminal output reorder queue limit exceeded');
|
|
73
51
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
this.pendingInsertedAt.clear();
|
|
78
|
-
}
|
|
79
|
-
ready.push(chunk);
|
|
80
|
-
return ready;
|
|
52
|
+
this.pending.set(sequence, chunk);
|
|
53
|
+
this.pendingBytes += chunk.data.byteLength;
|
|
54
|
+
return [];
|
|
81
55
|
}
|
|
82
|
-
|
|
83
|
-
if (
|
|
84
|
-
|
|
56
|
+
assertCoveredThrough(sequence) {
|
|
57
|
+
if (!Number.isSafeInteger(sequence) || sequence < 0) {
|
|
58
|
+
throw new Error('terminal output replay boundary is invalid');
|
|
85
59
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
for (const seq of this.pending.keys()) {
|
|
89
|
-
if (seq < minPendingSeq) {
|
|
90
|
-
minPendingSeq = seq;
|
|
91
|
-
minPendingInsertedAt = this.pendingInsertedAt.get(seq) ?? now;
|
|
92
|
-
}
|
|
60
|
+
if (this.expectedSequence <= sequence) {
|
|
61
|
+
throw new Error(`missing terminal output sequence ${this.expectedSequence} before replay boundary ${sequence}`);
|
|
93
62
|
}
|
|
94
|
-
if (!Number.isFinite(minPendingSeq) || minPendingSeq <= this.expectedSequence) {
|
|
95
|
-
return [];
|
|
96
|
-
}
|
|
97
|
-
const ageMs = now - minPendingInsertedAt;
|
|
98
|
-
if (ageMs < this.config.maxStallMs) {
|
|
99
|
-
return [];
|
|
100
|
-
}
|
|
101
|
-
this.expectedSequence = minPendingSeq;
|
|
102
|
-
const ready = [];
|
|
103
|
-
while (this.pending.has(this.expectedSequence)) {
|
|
104
|
-
const next = this.pending.get(this.expectedSequence);
|
|
105
|
-
if (next) {
|
|
106
|
-
ready.push(next);
|
|
107
|
-
}
|
|
108
|
-
this.pending.delete(this.expectedSequence);
|
|
109
|
-
this.pendingInsertedAt.delete(this.expectedSequence);
|
|
110
|
-
this.expectedSequence += 1;
|
|
111
|
-
}
|
|
112
|
-
return ready;
|
|
113
63
|
}
|
|
114
|
-
|
|
115
|
-
if (
|
|
116
|
-
|
|
117
|
-
this.pendingInsertedAt.clear();
|
|
118
|
-
this.lastCleanupMs = now;
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
121
|
-
if (now - this.lastCleanupMs < this.config.cleanupIntervalMs) {
|
|
122
|
-
return;
|
|
64
|
+
coverThrough(sequence) {
|
|
65
|
+
if (!Number.isSafeInteger(sequence) || sequence < 0) {
|
|
66
|
+
throw new Error('terminal output replay coverage is invalid');
|
|
123
67
|
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
if (seq < this.expectedSequence || seq > cutoff) {
|
|
127
|
-
this.pending.delete(seq);
|
|
128
|
-
this.pendingInsertedAt.delete(seq);
|
|
129
|
-
}
|
|
68
|
+
if (sequence < this.expectedSequence - 1) {
|
|
69
|
+
return [];
|
|
130
70
|
}
|
|
131
|
-
|
|
71
|
+
const covered = [...this.pending.entries()]
|
|
72
|
+
.filter(([pendingSequence]) => pendingSequence <= sequence)
|
|
73
|
+
.sort(([left], [right]) => left - right)
|
|
74
|
+
.map(([pendingSequence, chunk]) => {
|
|
75
|
+
this.pending.delete(pendingSequence);
|
|
76
|
+
this.pendingBytes -= chunk.data.byteLength;
|
|
77
|
+
return chunk;
|
|
78
|
+
});
|
|
79
|
+
this.expectedSequence = sequence + 1;
|
|
80
|
+
return [...covered, ...this.flushPending()];
|
|
132
81
|
}
|
|
133
82
|
}
|
|
134
83
|
//# sourceMappingURL=SequenceBuffer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SequenceBuffer.js","sourceRoot":"","sources":["../../src/internal/SequenceBuffer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SequenceBuffer.js","sourceRoot":"","sources":["../../src/internal/SequenceBuffer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
import type { Logger, TerminalResourcePreloadOptions } from '../types.js';
|
|
2
|
+
type GhosttyRuntime = Pick<typeof import('ghostty-web'), 'Terminal' | 'FitAddon' | 'LinkDetector' | 'OSC8LinkProvider' | 'UrlRegexProvider' | 'init'>;
|
|
3
|
+
export declare const resolveGhosttyRuntime: (module: typeof import("ghostty-web")) => GhosttyRuntime;
|
|
2
4
|
export declare const waitWithAbort: <T>(promise: Promise<T>, signal?: AbortSignal) => Promise<T>;
|
|
3
5
|
export declare const loadGhosttyModules: (logger: Logger, signal?: AbortSignal) => Promise<void>;
|
|
4
6
|
export declare const getGhosttyTerminalConstructor: () => typeof import("ghostty-web").Terminal | null;
|
|
5
7
|
export declare const getGhosttyFitAddonConstructor: () => typeof import("ghostty-web").FitAddon | null;
|
|
8
|
+
export declare const getGhosttyLinkConstructors: () => {
|
|
9
|
+
LinkDetector: typeof import("ghostty-web").LinkDetector;
|
|
10
|
+
OSC8LinkProvider: typeof import("ghostty-web").OSC8LinkProvider;
|
|
11
|
+
UrlRegexProvider: typeof import("ghostty-web").UrlRegexProvider;
|
|
12
|
+
};
|
|
6
13
|
export declare const preloadTerminalResources: (options?: TerminalResourcePreloadOptions) => Promise<void>;
|
|
14
|
+
export {};
|
|
7
15
|
//# sourceMappingURL=TerminalResourceLoader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TerminalResourceLoader.d.ts","sourceRoot":"","sources":["../../src/internal/TerminalResourceLoader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"TerminalResourceLoader.d.ts","sourceRoot":"","sources":["../../src/internal/TerminalResourceLoader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAW1E,KAAK,cAAc,GAAG,IAAI,CACxB,cAAc,aAAa,CAAC,EAC5B,UAAU,GAAG,UAAU,GAAG,cAAc,GAAG,kBAAkB,GAAG,kBAAkB,GAAG,MAAM,CAC5F,CAAC;AAWF,eAAO,MAAM,qBAAqB,GAAI,QAAQ,cAAc,aAAa,CAAC,KAAG,cAO5E,CAAC;AASF,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,SAAS,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,WAAW,KAAG,OAAO,CAAC,CAAC,CAiBrF,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAU,QAAQ,MAAM,EAAE,SAAS,WAAW,KAAG,OAAO,CAAC,IAAI,CAmC3F,CAAC;AAEF,eAAO,MAAM,6BAA6B,QAAO,cAAc,aAAa,EAAE,QAAQ,GAAG,IAAoB,CAAC;AAE9G,eAAO,MAAM,6BAA6B,QAAO,cAAc,aAAa,EAAE,QAAQ,GAAG,IAAoB,CAAC;AAE9G,eAAO,MAAM,0BAA0B;;;;CAUtC,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,UAAS,8BAAmC,KAC3C,OAAO,CAAC,IAAI,CAMd,CAAC"}
|
|
@@ -2,7 +2,26 @@ import { noopLogger } from '../utils/logger.js';
|
|
|
2
2
|
import { loadBeamtermModule } from './BeamtermResourceLoader.js';
|
|
3
3
|
let TerminalCtor = null;
|
|
4
4
|
let FitAddonCtor = null;
|
|
5
|
+
let LinkDetectorCtor = null;
|
|
6
|
+
let OSC8LinkProviderCtor = null;
|
|
7
|
+
let UrlRegexProviderCtor = null;
|
|
5
8
|
let ghosttyResourcesPromise = null;
|
|
9
|
+
const REQUIRED_GHOSTTY_EXPORTS = [
|
|
10
|
+
'Terminal',
|
|
11
|
+
'FitAddon',
|
|
12
|
+
'LinkDetector',
|
|
13
|
+
'OSC8LinkProvider',
|
|
14
|
+
'UrlRegexProvider',
|
|
15
|
+
'init',
|
|
16
|
+
];
|
|
17
|
+
export const resolveGhosttyRuntime = (module) => {
|
|
18
|
+
for (const exportName of REQUIRED_GHOSTTY_EXPORTS) {
|
|
19
|
+
if (typeof module[exportName] !== 'function') {
|
|
20
|
+
throw new Error(`ghostty-web is missing the required ${exportName} export`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return module;
|
|
24
|
+
};
|
|
6
25
|
const abortError = () => {
|
|
7
26
|
if (typeof DOMException !== 'undefined')
|
|
8
27
|
return new DOMException('Operation aborted', 'AbortError');
|
|
@@ -31,18 +50,28 @@ export const loadGhosttyModules = async (logger, signal) => {
|
|
|
31
50
|
if (typeof window === 'undefined') {
|
|
32
51
|
throw new Error('ghostty-web can only be loaded in a browser environment');
|
|
33
52
|
}
|
|
34
|
-
if (TerminalCtor
|
|
53
|
+
if (TerminalCtor
|
|
54
|
+
&& FitAddonCtor
|
|
55
|
+
&& LinkDetectorCtor
|
|
56
|
+
&& OSC8LinkProviderCtor
|
|
57
|
+
&& UrlRegexProviderCtor)
|
|
35
58
|
return;
|
|
36
59
|
if (!ghosttyResourcesPromise) {
|
|
37
60
|
logger.debug('[TerminalCore] Initializing ghostty-web WASM');
|
|
38
61
|
ghosttyResourcesPromise = (async () => {
|
|
39
|
-
const
|
|
40
|
-
await init();
|
|
41
|
-
TerminalCtor = Terminal;
|
|
42
|
-
FitAddonCtor = FitAddon;
|
|
62
|
+
const runtime = resolveGhosttyRuntime(await import('ghostty-web'));
|
|
63
|
+
await runtime.init();
|
|
64
|
+
TerminalCtor = runtime.Terminal;
|
|
65
|
+
FitAddonCtor = runtime.FitAddon;
|
|
66
|
+
LinkDetectorCtor = runtime.LinkDetector;
|
|
67
|
+
OSC8LinkProviderCtor = runtime.OSC8LinkProvider;
|
|
68
|
+
UrlRegexProviderCtor = runtime.UrlRegexProvider;
|
|
43
69
|
})().catch((error) => {
|
|
44
70
|
TerminalCtor = null;
|
|
45
71
|
FitAddonCtor = null;
|
|
72
|
+
LinkDetectorCtor = null;
|
|
73
|
+
OSC8LinkProviderCtor = null;
|
|
74
|
+
UrlRegexProviderCtor = null;
|
|
46
75
|
ghosttyResourcesPromise = null;
|
|
47
76
|
throw error;
|
|
48
77
|
});
|
|
@@ -51,6 +80,16 @@ export const loadGhosttyModules = async (logger, signal) => {
|
|
|
51
80
|
};
|
|
52
81
|
export const getGhosttyTerminalConstructor = () => TerminalCtor;
|
|
53
82
|
export const getGhosttyFitAddonConstructor = () => FitAddonCtor;
|
|
83
|
+
export const getGhosttyLinkConstructors = () => {
|
|
84
|
+
if (!LinkDetectorCtor || !OSC8LinkProviderCtor || !UrlRegexProviderCtor) {
|
|
85
|
+
throw new Error('Required ghostty-web link providers not loaded');
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
LinkDetector: LinkDetectorCtor,
|
|
89
|
+
OSC8LinkProvider: OSC8LinkProviderCtor,
|
|
90
|
+
UrlRegexProvider: UrlRegexProviderCtor,
|
|
91
|
+
};
|
|
92
|
+
};
|
|
54
93
|
export const preloadTerminalResources = async (options = {}) => {
|
|
55
94
|
const resources = Promise.all([
|
|
56
95
|
loadGhosttyModules(options.logger ?? noopLogger),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TerminalResourceLoader.js","sourceRoot":"","sources":["../../src/internal/TerminalResourceLoader.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEjE,IAAI,YAAY,GAAiD,IAAI,CAAC;AACtE,IAAI,YAAY,GAAiD,IAAI,CAAC;AACtE,IAAI,uBAAuB,GAAyB,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"TerminalResourceLoader.js","sourceRoot":"","sources":["../../src/internal/TerminalResourceLoader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
type UrlProviderCell = {
|
|
2
|
+
getCodepoint(): number;
|
|
3
|
+
};
|
|
4
|
+
type UrlProviderLine = {
|
|
5
|
+
readonly length: number;
|
|
6
|
+
getCell(column: number): UrlProviderCell | undefined;
|
|
7
|
+
};
|
|
8
|
+
export type UrlProviderTerminal = {
|
|
9
|
+
readonly buffer: {
|
|
10
|
+
readonly active: {
|
|
11
|
+
getLine(row: number): UrlProviderLine | undefined;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
export declare const createUnicodeSafeUrlProviderTerminal: (terminal: UrlProviderTerminal) => UrlProviderTerminal;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=UnicodeSafeUrlProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnicodeSafeUrlProvider.d.ts","sourceRoot":"","sources":["../../src/internal/UnicodeSafeUrlProvider.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,GAAG;IACrB,YAAY,IAAI,MAAM,CAAC;CACxB,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAAC;CACtD,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,MAAM,EAAE;YACf,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAAC;SACnD,CAAC;KACH,CAAC;CACH,CAAC;AASF,eAAO,MAAM,oCAAoC,GAC/C,UAAU,mBAAmB,KAC5B,mBAyBD,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
const isUnicodeScalar = (codepoint) => (Number.isInteger(codepoint)
|
|
2
|
+
&& codepoint >= 0
|
|
3
|
+
&& codepoint <= 0x10ffff
|
|
4
|
+
&& (codepoint < 0xd800 || codepoint > 0xdfff));
|
|
5
|
+
export const createUnicodeSafeUrlProviderTerminal = (terminal) => ({
|
|
6
|
+
buffer: {
|
|
7
|
+
active: {
|
|
8
|
+
getLine(row) {
|
|
9
|
+
const line = terminal.buffer.active.getLine(row);
|
|
10
|
+
if (!line)
|
|
11
|
+
return undefined;
|
|
12
|
+
return {
|
|
13
|
+
length: line.length,
|
|
14
|
+
getCell(column) {
|
|
15
|
+
const cell = line.getCell(column);
|
|
16
|
+
if (!cell)
|
|
17
|
+
return undefined;
|
|
18
|
+
return {
|
|
19
|
+
getCodepoint() {
|
|
20
|
+
const codepoint = cell.getCodepoint();
|
|
21
|
+
if (!isUnicodeScalar(codepoint))
|
|
22
|
+
return 0;
|
|
23
|
+
return codepoint <= 0xffff ? codepoint : 0xfffd;
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=UnicodeSafeUrlProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnicodeSafeUrlProvider.js","sourceRoot":"","sources":["../../src/internal/UnicodeSafeUrlProvider.ts"],"names":[],"mappings":"AAiBA,MAAM,eAAe,GAAG,CAAC,SAAiB,EAAW,EAAE,CAAC,CACtD,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC;OACxB,SAAS,IAAI,CAAC;OACd,SAAS,IAAI,QAAQ;OACrB,CAAC,SAAS,GAAG,MAAM,IAAI,SAAS,GAAG,MAAM,CAAC,CAC9C,CAAC;AAEF,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAClD,QAA6B,EACR,EAAE,CAAC,CAAC;IACzB,MAAM,EAAE;QACN,MAAM,EAAE;YACN,OAAO,CAAC,GAAG;gBACT,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACjD,IAAI,CAAC,IAAI;oBAAE,OAAO,SAAS,CAAC;gBAE5B,OAAO;oBACL,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,OAAO,CAAC,MAAM;wBACZ,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;wBAClC,IAAI,CAAC,IAAI;4BAAE,OAAO,SAAS,CAAC;wBAE5B,OAAO;4BACL,YAAY;gCACV,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;gCACtC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;oCAAE,OAAO,CAAC,CAAC;gCAC1C,OAAO,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;4BAClD,CAAC;yBACF,CAAC;oBACJ,CAAC;iBACF,CAAC;YACJ,CAAC;SACF;KACF;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { StreamKind, type OutputRecord } from './codec.js';
|
|
2
|
+
export declare const MAX_QUEUED_INPUT_BYTES: number;
|
|
3
|
+
export declare enum TerminalLiveErrorCode {
|
|
4
|
+
ProtocolViolation = 1,
|
|
5
|
+
PermissionDenied = 2,
|
|
6
|
+
SessionNotFound = 3,
|
|
7
|
+
ActivationFailed = 4,
|
|
8
|
+
SlowConsumer = 5,
|
|
9
|
+
Internal = 6
|
|
10
|
+
}
|
|
11
|
+
export declare class TerminalLiveServerError extends Error {
|
|
12
|
+
readonly code: number;
|
|
13
|
+
readonly serverMessage: string;
|
|
14
|
+
constructor(code: number, serverMessage: string);
|
|
15
|
+
}
|
|
16
|
+
export type TerminalLiveCloseReason = 'stream_ended' | 'session_closed';
|
|
17
|
+
export interface TerminalByteStream {
|
|
18
|
+
read(): Promise<Uint8Array | null>;
|
|
19
|
+
write(data: Uint8Array): Promise<void>;
|
|
20
|
+
close(): Promise<void> | void;
|
|
21
|
+
reset?(error?: Error): Promise<void> | void;
|
|
22
|
+
}
|
|
23
|
+
export type TerminalLiveAttachRequest = Readonly<{
|
|
24
|
+
sessionId: string;
|
|
25
|
+
connectionId: string;
|
|
26
|
+
attachGeneration: number;
|
|
27
|
+
cols: number;
|
|
28
|
+
rows: number;
|
|
29
|
+
}>;
|
|
30
|
+
export type TerminalLiveAttached = Readonly<{
|
|
31
|
+
historyBoundarySequence: number;
|
|
32
|
+
historyGeneration: number;
|
|
33
|
+
historyStartSequence: number;
|
|
34
|
+
geometryGeneration: number;
|
|
35
|
+
cols: number;
|
|
36
|
+
rows: number;
|
|
37
|
+
}>;
|
|
38
|
+
export type TerminalLiveGeometry = Readonly<{
|
|
39
|
+
generation: number;
|
|
40
|
+
outputSequenceBoundary: number;
|
|
41
|
+
cols: number;
|
|
42
|
+
rows: number;
|
|
43
|
+
}>;
|
|
44
|
+
export type TerminalLiveConnection = Readonly<{
|
|
45
|
+
attached: TerminalLiveAttached;
|
|
46
|
+
sendInput(data: Uint8Array): Promise<void>;
|
|
47
|
+
resize(cols: number, rows: number): Promise<void>;
|
|
48
|
+
close(): Promise<void>;
|
|
49
|
+
}>;
|
|
50
|
+
export type ConnectTerminalLiveOptions = Readonly<{
|
|
51
|
+
openStream: (kind: typeof StreamKind, options?: Readonly<{
|
|
52
|
+
signal?: AbortSignal;
|
|
53
|
+
}>) => Promise<TerminalByteStream>;
|
|
54
|
+
attach: TerminalLiveAttachRequest;
|
|
55
|
+
onOutputBatch: (records: readonly OutputRecord[]) => void;
|
|
56
|
+
onGeometry?: (geometry: TerminalLiveGeometry) => void;
|
|
57
|
+
onClosed?: (reason: TerminalLiveCloseReason) => void;
|
|
58
|
+
onError?: (error: Error) => void;
|
|
59
|
+
signal?: AbortSignal;
|
|
60
|
+
}>;
|
|
61
|
+
export declare const connectTerminalLive: (options: ConnectTerminalLiveOptions) => Promise<TerminalLiveConnection>;
|
|
62
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/live/client.ts"],"names":[],"mappings":"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"}
|