@boba-cli/machine 0.1.0-alpha.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.
@@ -0,0 +1,686 @@
1
+ // src/style/index.ts
2
+ var ESC = "\x1B[";
3
+ var CODES = {
4
+ // Modifiers (open, close)
5
+ bold: ["1", "22"],
6
+ dim: ["2", "22"],
7
+ italic: ["3", "23"],
8
+ underline: ["4", "24"],
9
+ inverse: ["7", "27"],
10
+ hidden: ["8", "28"],
11
+ strikethrough: ["9", "29"],
12
+ // Basic foreground colors (30-37)
13
+ black: ["30", "39"],
14
+ red: ["31", "39"],
15
+ green: ["32", "39"],
16
+ yellow: ["33", "39"],
17
+ blue: ["34", "39"],
18
+ magenta: ["35", "39"],
19
+ cyan: ["36", "39"],
20
+ white: ["37", "39"],
21
+ // Bright foreground colors (90-97)
22
+ blackBright: ["90", "39"],
23
+ redBright: ["91", "39"],
24
+ greenBright: ["92", "39"],
25
+ yellowBright: ["93", "39"],
26
+ blueBright: ["94", "39"],
27
+ magentaBright: ["95", "39"],
28
+ cyanBright: ["96", "39"],
29
+ whiteBright: ["97", "39"],
30
+ // Basic background colors (40-47)
31
+ bgBlack: ["40", "49"],
32
+ bgRed: ["41", "49"],
33
+ bgGreen: ["42", "49"],
34
+ bgYellow: ["43", "49"],
35
+ bgBlue: ["44", "49"],
36
+ bgMagenta: ["45", "49"],
37
+ bgCyan: ["46", "49"],
38
+ bgWhite: ["47", "49"],
39
+ // Bright background colors (100-107)
40
+ bgBlackBright: ["100", "49"],
41
+ bgRedBright: ["101", "49"],
42
+ bgGreenBright: ["102", "49"],
43
+ bgYellowBright: ["103", "49"],
44
+ bgBlueBright: ["104", "49"],
45
+ bgMagentaBright: ["105", "49"],
46
+ bgCyanBright: ["106", "49"],
47
+ bgWhiteBright: ["107", "49"]
48
+ };
49
+ function applyStyle(text, open, close) {
50
+ const openSeq = `${ESC}${open}m`;
51
+ const closeSeq = `${ESC}${close}m`;
52
+ const replaced = text.replace(
53
+ new RegExp(closeSeq.replace(/[[\](){}|^$+*?.\\]/g, "\\$&"), "g"),
54
+ closeSeq + openSeq
55
+ );
56
+ return openSeq + replaced + closeSeq;
57
+ }
58
+ function hexToRgb(hex) {
59
+ const clean = hex.replace(/^#/, "");
60
+ const num = parseInt(clean, 16);
61
+ if (clean.length === 3) {
62
+ const r2 = (num >> 8 & 15) * 17;
63
+ const g2 = (num >> 4 & 15) * 17;
64
+ const b2 = (num & 15) * 17;
65
+ return [r2, g2, b2];
66
+ }
67
+ const r = num >> 16 & 255;
68
+ const g = num >> 8 & 255;
69
+ const b = num & 255;
70
+ return [r, g, b];
71
+ }
72
+ function createStyle(colorSupport) {
73
+ function build(stack) {
74
+ const fn = (text) => {
75
+ if (stack.length === 0) {
76
+ return text;
77
+ }
78
+ let result = text;
79
+ for (let i = stack.length - 1; i >= 0; i--) {
80
+ const [open, close] = stack[i];
81
+ result = applyStyle(result, open, close);
82
+ }
83
+ return result;
84
+ };
85
+ const codeNames = Object.keys(CODES);
86
+ for (const name of codeNames) {
87
+ const [open, close] = CODES[name];
88
+ Object.defineProperty(fn, name, {
89
+ get() {
90
+ return build([...stack, [open, close]]);
91
+ }
92
+ });
93
+ }
94
+ Object.defineProperty(fn, "gray", {
95
+ get() {
96
+ const [open, close] = CODES.blackBright;
97
+ return build([...stack, [open, close]]);
98
+ }
99
+ });
100
+ Object.defineProperty(fn, "grey", {
101
+ get() {
102
+ const [open, close] = CODES.blackBright;
103
+ return build([...stack, [open, close]]);
104
+ }
105
+ });
106
+ Object.defineProperty(fn, "hex", {
107
+ value: (color) => {
108
+ const [r, g, b] = hexToRgb(color);
109
+ return build([...stack, [`38;2;${r};${g};${b}`, "39"]]);
110
+ },
111
+ writable: true
112
+ });
113
+ Object.defineProperty(fn, "rgb", {
114
+ value: (r, g, b) => {
115
+ return build([...stack, [`38;2;${r};${g};${b}`, "39"]]);
116
+ },
117
+ writable: true
118
+ });
119
+ Object.defineProperty(fn, "bgHex", {
120
+ value: (color) => {
121
+ const [r, g, b] = hexToRgb(color);
122
+ return build([...stack, [`48;2;${r};${g};${b}`, "49"]]);
123
+ },
124
+ writable: true
125
+ });
126
+ Object.defineProperty(fn, "bgRgb", {
127
+ value: (r, g, b) => {
128
+ return build([...stack, [`48;2;${r};${g};${b}`, "49"]]);
129
+ },
130
+ writable: true
131
+ });
132
+ Object.defineProperty(fn, "ansi256", {
133
+ value: (code) => {
134
+ return build([...stack, [`38;5;${code}`, "39"]]);
135
+ },
136
+ writable: true
137
+ });
138
+ Object.defineProperty(fn, "bgAnsi256", {
139
+ value: (code) => {
140
+ return build([...stack, [`48;5;${code}`, "49"]]);
141
+ },
142
+ writable: true
143
+ });
144
+ return fn;
145
+ }
146
+ return build([]);
147
+ }
148
+ function createAlwaysEnabledStyle() {
149
+ return createStyle();
150
+ }
151
+
152
+ // src/browser/archive.ts
153
+ var BrowserArchiveAdapter = class {
154
+ /**
155
+ * Check if archive operations are available.
156
+ * @returns Always false in browser environments
157
+ */
158
+ isAvailable() {
159
+ return false;
160
+ }
161
+ /**
162
+ * Create a zip archive from a directory.
163
+ * @param _sourceDir - Source directory to archive
164
+ * @param _destPath - Destination path for the zip file
165
+ * @throws Error - Always throws as archiving is not available in browser
166
+ */
167
+ async zip(_sourceDir, _destPath) {
168
+ throw new Error("Archive operations not available in browser environment");
169
+ }
170
+ /**
171
+ * Extract a zip archive to a directory.
172
+ * @param _archivePath - Path to the zip file
173
+ * @param _destDir - Destination directory for extraction
174
+ * @throws Error - Always throws as archiving is not available in browser
175
+ */
176
+ async unzip(_archivePath, _destDir) {
177
+ throw new Error("Archive operations not available in browser environment");
178
+ }
179
+ };
180
+
181
+ // src/browser/clipboard.ts
182
+ var BrowserClipboardAdapter = class {
183
+ async read() {
184
+ if (!this.isAvailable()) {
185
+ throw new Error("Clipboard API not available");
186
+ }
187
+ try {
188
+ return await navigator.clipboard.readText();
189
+ } catch (error) {
190
+ throw new Error(
191
+ `Failed to read from clipboard: ${error instanceof Error ? error.message : String(error)}`
192
+ );
193
+ }
194
+ }
195
+ async write(text) {
196
+ if (!this.isAvailable()) {
197
+ throw new Error("Clipboard API not available");
198
+ }
199
+ try {
200
+ await navigator.clipboard.writeText(text);
201
+ } catch (error) {
202
+ throw new Error(
203
+ `Failed to write to clipboard: ${error instanceof Error ? error.message : String(error)}`
204
+ );
205
+ }
206
+ }
207
+ isAvailable() {
208
+ return typeof navigator !== "undefined" && typeof navigator.clipboard !== "undefined" && typeof navigator.clipboard.readText === "function" && typeof navigator.clipboard.writeText === "function";
209
+ }
210
+ };
211
+
212
+ // src/browser/environment.ts
213
+ var BrowserEnvironmentAdapter = class {
214
+ envOverrides;
215
+ colorSupportCached = null;
216
+ backgroundCached = null;
217
+ /**
218
+ * Create a new browser environment adapter.
219
+ * @param envOverrides - Optional environment variable overrides
220
+ */
221
+ constructor(envOverrides = {}) {
222
+ this.envOverrides = new Map(Object.entries(envOverrides));
223
+ }
224
+ get(name) {
225
+ if (this.envOverrides.has(name)) {
226
+ return this.envOverrides.get(name);
227
+ }
228
+ return void 0;
229
+ }
230
+ /**
231
+ * Set an environment variable override.
232
+ * @param name - Variable name
233
+ * @param value - Variable value
234
+ */
235
+ set(name, value) {
236
+ this.envOverrides.set(name, value);
237
+ this.colorSupportCached = null;
238
+ this.backgroundCached = null;
239
+ }
240
+ getColorSupport() {
241
+ if (this.colorSupportCached) {
242
+ return this.colorSupportCached;
243
+ }
244
+ const support = {
245
+ level: 3,
246
+ hasBasic: true,
247
+ has256: true,
248
+ has16m: true
249
+ };
250
+ this.colorSupportCached = support;
251
+ return support;
252
+ }
253
+ getTerminalBackground() {
254
+ if (this.backgroundCached) {
255
+ return this.backgroundCached;
256
+ }
257
+ const override = this.envOverrides.get("TERM_BACKGROUND")?.toLowerCase();
258
+ if (override === "dark" || override === "light") {
259
+ this.backgroundCached = override;
260
+ return override;
261
+ }
262
+ if (typeof window !== "undefined" && window.matchMedia) {
263
+ const darkQuery = window.matchMedia("(prefers-color-scheme: dark)");
264
+ if (darkQuery.matches) {
265
+ this.backgroundCached = "dark";
266
+ return "dark";
267
+ }
268
+ const lightQuery = window.matchMedia("(prefers-color-scheme: light)");
269
+ if (lightQuery.matches) {
270
+ this.backgroundCached = "light";
271
+ return "light";
272
+ }
273
+ }
274
+ this.backgroundCached = "unknown";
275
+ return "unknown";
276
+ }
277
+ };
278
+
279
+ // src/browser/filesystem.ts
280
+ var BrowserFileSystemAdapter = class {
281
+ async readdir(_path, _options) {
282
+ throw new Error("FileSystem operations are not available in browser environments");
283
+ }
284
+ async stat(_path) {
285
+ throw new Error("FileSystem operations are not available in browser environments");
286
+ }
287
+ async readFile(_path, _encoding) {
288
+ throw new Error("FileSystem operations are not available in browser environments");
289
+ }
290
+ async writeFile(_path, _content) {
291
+ throw new Error("FileSystem operations are not available in browser environments");
292
+ }
293
+ async exists(_path) {
294
+ throw new Error("FileSystem operations are not available in browser environments");
295
+ }
296
+ async mkdir(_path, _options) {
297
+ throw new Error("FileSystem operations are not available in browser environments");
298
+ }
299
+ async unlink(_path) {
300
+ throw new Error("FileSystem operations are not available in browser environments");
301
+ }
302
+ async rmdir(_path, _options) {
303
+ throw new Error("FileSystem operations are not available in browser environments");
304
+ }
305
+ async rename(_src, _dst) {
306
+ throw new Error("FileSystem operations are not available in browser environments");
307
+ }
308
+ async copyFile(_src, _dst) {
309
+ throw new Error("FileSystem operations are not available in browser environments");
310
+ }
311
+ cwd() {
312
+ throw new Error("FileSystem operations are not available in browser environments");
313
+ }
314
+ homedir() {
315
+ throw new Error("FileSystem operations are not available in browser environments");
316
+ }
317
+ };
318
+
319
+ // src/browser/path.ts
320
+ var BrowserPathAdapter = class {
321
+ sep = "/";
322
+ join(...segments) {
323
+ if (segments.length === 0) {
324
+ return ".";
325
+ }
326
+ const filtered = segments.filter((seg) => seg.length > 0);
327
+ if (filtered.length === 0) {
328
+ return ".";
329
+ }
330
+ const joined = filtered.join("/");
331
+ return this.normalizeForResolve(joined);
332
+ }
333
+ dirname(path) {
334
+ if (path.length === 0) {
335
+ return ".";
336
+ }
337
+ const trimmed = path.replace(/\/+$/, "");
338
+ if (trimmed.length === 0) {
339
+ return "/";
340
+ }
341
+ const lastSlash = trimmed.lastIndexOf("/");
342
+ if (lastSlash === -1) {
343
+ return ".";
344
+ }
345
+ if (lastSlash === 0) {
346
+ return "/";
347
+ }
348
+ return trimmed.slice(0, lastSlash);
349
+ }
350
+ basename(path, ext) {
351
+ if (path.length === 0) {
352
+ return "";
353
+ }
354
+ const trimmed = path.replace(/\/+$/, "");
355
+ if (trimmed.length === 0) {
356
+ return "";
357
+ }
358
+ const lastSlash = trimmed.lastIndexOf("/");
359
+ let base = lastSlash === -1 ? trimmed : trimmed.slice(lastSlash + 1);
360
+ if (ext && base.endsWith(ext)) {
361
+ base = base.slice(0, -ext.length);
362
+ }
363
+ return base;
364
+ }
365
+ extname(path) {
366
+ if (path.length === 0) {
367
+ return "";
368
+ }
369
+ const base = this.basename(path);
370
+ const lastDot = base.lastIndexOf(".");
371
+ if (lastDot === -1 || lastDot === 0 || lastDot === base.length - 1) {
372
+ return "";
373
+ }
374
+ return base.slice(lastDot);
375
+ }
376
+ resolve(...segments) {
377
+ let resolvedPath = "";
378
+ let resolvedAbsolute = false;
379
+ for (let i = segments.length - 1; i >= 0 && !resolvedAbsolute; i--) {
380
+ const segment = segments[i];
381
+ if (!segment || segment.length === 0) {
382
+ continue;
383
+ }
384
+ resolvedPath = resolvedPath.length > 0 ? `${segment}/${resolvedPath}` : segment;
385
+ resolvedAbsolute = segment[0] === "/";
386
+ }
387
+ if (!resolvedAbsolute) {
388
+ resolvedPath = resolvedPath.length > 0 ? `/${resolvedPath}` : "/";
389
+ }
390
+ const normalized = this.normalizeForResolve(resolvedPath);
391
+ return normalized === "" ? "/" : normalized;
392
+ }
393
+ /**
394
+ * Normalize path specifically for resolve (never preserves trailing slash).
395
+ * @param path - Path to normalize
396
+ * @returns Normalized path without trailing slash
397
+ */
398
+ normalizeForResolve(path) {
399
+ if (path.length === 0) {
400
+ return "/";
401
+ }
402
+ const isAbsolute = path[0] === "/";
403
+ const segments = path.split("/").filter((seg) => seg.length > 0 && seg !== ".");
404
+ const normalized = [];
405
+ for (const segment of segments) {
406
+ if (segment === "..") {
407
+ if (normalized.length > 0 && normalized[normalized.length - 1] !== "..") {
408
+ normalized.pop();
409
+ } else if (!isAbsolute) {
410
+ normalized.push("..");
411
+ }
412
+ } else {
413
+ normalized.push(segment);
414
+ }
415
+ }
416
+ let result = normalized.join("/");
417
+ if (isAbsolute) {
418
+ result = `/${result}`;
419
+ } else if (result.length === 0) {
420
+ result = ".";
421
+ }
422
+ return result;
423
+ }
424
+ isAbsolute(path) {
425
+ return path.length > 0 && path[0] === "/";
426
+ }
427
+ normalize(path) {
428
+ if (path.length === 0) {
429
+ return ".";
430
+ }
431
+ const isAbsolute = path[0] === "/";
432
+ const trailingSlash = path[path.length - 1] === "/";
433
+ const segments = path.split("/").filter((seg) => seg.length > 0 && seg !== ".");
434
+ const normalized = [];
435
+ for (const segment of segments) {
436
+ if (segment === "..") {
437
+ if (normalized.length > 0 && normalized[normalized.length - 1] !== "..") {
438
+ normalized.pop();
439
+ } else if (!isAbsolute) {
440
+ normalized.push("..");
441
+ }
442
+ } else {
443
+ normalized.push(segment);
444
+ }
445
+ }
446
+ let result = normalized.join("/");
447
+ if (isAbsolute) {
448
+ result = `/${result}`;
449
+ } else if (result.length === 0) {
450
+ result = ".";
451
+ }
452
+ if (trailingSlash && result !== "/" && result.length > 0) {
453
+ result += "/";
454
+ }
455
+ return result;
456
+ }
457
+ };
458
+
459
+ // src/browser/signals.ts
460
+ var BrowserSignalAdapter = class {
461
+ interruptHandlers = /* @__PURE__ */ new Set();
462
+ terminateHandlers = /* @__PURE__ */ new Set();
463
+ disposed = false;
464
+ boundBeforeUnload = null;
465
+ boundPageHide = null;
466
+ handleBeforeUnload = (e) => {
467
+ for (const handler of this.interruptHandlers) {
468
+ handler();
469
+ }
470
+ if (this.interruptHandlers.size > 0) {
471
+ e.preventDefault();
472
+ }
473
+ };
474
+ handlePageHide = () => {
475
+ for (const handler of this.terminateHandlers) {
476
+ handler();
477
+ }
478
+ };
479
+ onInterrupt(handler) {
480
+ if (this.interruptHandlers.size === 0 && typeof window !== "undefined") {
481
+ this.boundBeforeUnload = this.handleBeforeUnload;
482
+ window.addEventListener("beforeunload", this.boundBeforeUnload);
483
+ }
484
+ this.interruptHandlers.add(handler);
485
+ return {
486
+ dispose: () => {
487
+ this.interruptHandlers.delete(handler);
488
+ if (this.interruptHandlers.size === 0 && this.boundBeforeUnload && typeof window !== "undefined") {
489
+ window.removeEventListener("beforeunload", this.boundBeforeUnload);
490
+ this.boundBeforeUnload = null;
491
+ }
492
+ }
493
+ };
494
+ }
495
+ onTerminate(handler) {
496
+ if (this.terminateHandlers.size === 0 && typeof window !== "undefined") {
497
+ this.boundPageHide = this.handlePageHide;
498
+ window.addEventListener("pagehide", this.boundPageHide);
499
+ }
500
+ this.terminateHandlers.add(handler);
501
+ return {
502
+ dispose: () => {
503
+ this.terminateHandlers.delete(handler);
504
+ if (this.terminateHandlers.size === 0 && this.boundPageHide && typeof window !== "undefined") {
505
+ window.removeEventListener("pagehide", this.boundPageHide);
506
+ this.boundPageHide = null;
507
+ }
508
+ }
509
+ };
510
+ }
511
+ dispose() {
512
+ if (this.disposed) {
513
+ return;
514
+ }
515
+ this.disposed = true;
516
+ if (typeof window !== "undefined") {
517
+ if (this.boundBeforeUnload) {
518
+ window.removeEventListener("beforeunload", this.boundBeforeUnload);
519
+ }
520
+ if (this.boundPageHide) {
521
+ window.removeEventListener("pagehide", this.boundPageHide);
522
+ }
523
+ }
524
+ this.interruptHandlers.clear();
525
+ this.terminateHandlers.clear();
526
+ }
527
+ };
528
+
529
+ // src/bytes.ts
530
+ var encoder = new TextEncoder();
531
+ new TextDecoder("utf-8");
532
+ function encodeString(text) {
533
+ return encoder.encode(text);
534
+ }
535
+
536
+ // src/browser/terminal.ts
537
+ var XtermTerminalAdapter = class {
538
+ /**
539
+ * Create a new xterm.js terminal adapter.
540
+ * @param terminal - xterm.js Terminal instance
541
+ */
542
+ constructor(terminal) {
543
+ this.terminal = terminal;
544
+ }
545
+ disposed = false;
546
+ inputHandlers = /* @__PURE__ */ new Set();
547
+ resizeHandlers = /* @__PURE__ */ new Set();
548
+ dataDisposable = null;
549
+ resizeDisposable = null;
550
+ onInput(handler) {
551
+ if (this.inputHandlers.size === 0) {
552
+ this.dataDisposable = this.terminal.onData((data) => {
553
+ const bytes = encodeString(data);
554
+ for (const h of this.inputHandlers) {
555
+ h(bytes);
556
+ }
557
+ });
558
+ }
559
+ this.inputHandlers.add(handler);
560
+ return {
561
+ dispose: () => {
562
+ this.inputHandlers.delete(handler);
563
+ if (this.inputHandlers.size === 0 && this.dataDisposable) {
564
+ this.dataDisposable.dispose();
565
+ this.dataDisposable = null;
566
+ }
567
+ }
568
+ };
569
+ }
570
+ onResize(handler) {
571
+ if (this.resizeHandlers.size === 0) {
572
+ this.resizeDisposable = this.terminal.onResize((size) => {
573
+ const terminalSize = {
574
+ columns: size.cols,
575
+ rows: size.rows
576
+ };
577
+ for (const h of this.resizeHandlers) {
578
+ h(terminalSize);
579
+ }
580
+ });
581
+ }
582
+ this.resizeHandlers.add(handler);
583
+ return {
584
+ dispose: () => {
585
+ this.resizeHandlers.delete(handler);
586
+ if (this.resizeHandlers.size === 0 && this.resizeDisposable) {
587
+ this.resizeDisposable.dispose();
588
+ this.resizeDisposable = null;
589
+ }
590
+ }
591
+ };
592
+ }
593
+ write(data) {
594
+ if (data.length === 0) {
595
+ return;
596
+ }
597
+ const normalized = data.replace(/(?<!\r)\n/g, "\r\n");
598
+ this.terminal.write(normalized);
599
+ }
600
+ getSize() {
601
+ return {
602
+ columns: this.terminal.cols,
603
+ rows: this.terminal.rows
604
+ };
605
+ }
606
+ enableRawMode() {
607
+ }
608
+ disableRawMode() {
609
+ }
610
+ isTTY() {
611
+ return true;
612
+ }
613
+ dispose() {
614
+ if (this.disposed) {
615
+ return;
616
+ }
617
+ this.disposed = true;
618
+ if (this.dataDisposable) {
619
+ this.dataDisposable.dispose();
620
+ this.dataDisposable = null;
621
+ }
622
+ if (this.resizeDisposable) {
623
+ this.resizeDisposable.dispose();
624
+ this.resizeDisposable = null;
625
+ }
626
+ this.inputHandlers.clear();
627
+ this.resizeHandlers.clear();
628
+ }
629
+ };
630
+
631
+ // src/browser/index.ts
632
+ var BrowserPlatformAdapter = class {
633
+ terminal;
634
+ signals;
635
+ clipboard;
636
+ environment;
637
+ filesystem;
638
+ path;
639
+ archive;
640
+ style;
641
+ disposed = false;
642
+ disposables = [];
643
+ /**
644
+ * Create a new browser platform adapter.
645
+ * @param options - Configuration options (requires xterm.js Terminal)
646
+ */
647
+ constructor(options) {
648
+ const terminalAdapter = new XtermTerminalAdapter(options.terminal);
649
+ const signalAdapter = new BrowserSignalAdapter();
650
+ const clipboardAdapter = new BrowserClipboardAdapter();
651
+ const environmentAdapter = new BrowserEnvironmentAdapter(options.env);
652
+ const filesystemAdapter = new BrowserFileSystemAdapter();
653
+ const pathAdapter = new BrowserPathAdapter();
654
+ const archiveAdapter = new BrowserArchiveAdapter();
655
+ const styleAdapter = {
656
+ style: createAlwaysEnabledStyle(),
657
+ enabled: true,
658
+ level: 3
659
+ };
660
+ this.terminal = terminalAdapter;
661
+ this.signals = signalAdapter;
662
+ this.clipboard = clipboardAdapter;
663
+ this.environment = environmentAdapter;
664
+ this.filesystem = filesystemAdapter;
665
+ this.path = pathAdapter;
666
+ this.archive = archiveAdapter;
667
+ this.style = styleAdapter;
668
+ this.disposables.push(terminalAdapter, signalAdapter);
669
+ }
670
+ dispose() {
671
+ if (this.disposed) {
672
+ return;
673
+ }
674
+ this.disposed = true;
675
+ for (const disposable of this.disposables) {
676
+ disposable.dispose();
677
+ }
678
+ }
679
+ };
680
+ function createBrowserPlatform(options) {
681
+ return new BrowserPlatformAdapter(options);
682
+ }
683
+
684
+ export { BrowserArchiveAdapter, BrowserClipboardAdapter, BrowserEnvironmentAdapter, BrowserFileSystemAdapter, BrowserPathAdapter, BrowserPlatformAdapter, BrowserSignalAdapter, XtermTerminalAdapter, createBrowserPlatform };
685
+ //# sourceMappingURL=index.js.map
686
+ //# sourceMappingURL=index.js.map