@ox-content/code-play 3.0.0-alpha.7 → 3.0.0-alpha.9

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 CHANGED
@@ -72,9 +72,10 @@ run.timing;
72
72
  visitor-supplied snippets as `play`.
73
73
 
74
74
  - No sample is executed during Markdown transform or SSG.
75
- - JavaScript and TypeScript run in `node:vm` on Node, or in
76
- `<iframe sandbox="allow-scripts">` in the browser (no `allow-same-origin`).
77
- They are never run with page-origin `Function`.
75
+ - JavaScript and TypeScript run in `node:vm` on Node, or in a Web Worker in the
76
+ browser. Browsers without Worker support fall back to
77
+ `<iframe sandbox="allow-scripts">` with no `allow-same-origin`. Snippets are
78
+ never run with page-origin `Function`.
78
79
  - Published widgets hide **Typecheck** unless `endpoints.typecheck` is set.
79
80
  **Cancel** appears while a run is in flight.
80
81
  - Framework previews use the same iframe flags and load runtimes from esm.sh.
package/dist/browser.mjs CHANGED
@@ -692,10 +692,115 @@ function buildJavaScriptSandboxDocument(code, messageId) {
692
692
  })();
693
693
  <\/script></body></html>`;
694
694
  }
695
+ function buildJavaScriptWorkerSource() {
696
+ return `
697
+ (function () {
698
+ function format(args) {
699
+ return Array.prototype.map.call(args, function (value) {
700
+ if (typeof value === "string") return value;
701
+ if (value === undefined) return "undefined";
702
+ if (value === null) return "null";
703
+ try { return JSON.stringify(value); } catch (error) { return String(value); }
704
+ }).join(" ") + "\\n";
705
+ }
706
+ self.onmessage = function (event) {
707
+ var data = event.data || {};
708
+ if (!data.id) return;
709
+ var stdout = [];
710
+ var stderr = [];
711
+ var consoleLike = {
712
+ log: function () { stdout.push(format(arguments)); },
713
+ info: function () { stdout.push(format(arguments)); },
714
+ warn: function () { stderr.push(format(arguments)); },
715
+ error: function () { stderr.push(format(arguments)); }
716
+ };
717
+ try {
718
+ var run = new Function("console", '"use strict";\\n' + String(data.code || ""));
719
+ var value = run(consoleLike);
720
+ self.postMessage({
721
+ id: data.id,
722
+ stdout: stdout,
723
+ stderr: stderr,
724
+ value: value === undefined ? undefined : String(value)
725
+ });
726
+ } catch (error) {
727
+ var message = error && error.message ? String(error.message) : String(error);
728
+ self.postMessage({ id: data.id, stdout: stdout, stderr: stderr, error: message });
729
+ }
730
+ };
731
+ })();
732
+ `;
733
+ }
695
734
  function applySandboxStreams(stdio, message) {
696
735
  for (const text of message.stdout ?? []) stdio.push("stdout", text);
697
736
  for (const text of message.stderr ?? []) stdio.push("stderr", text);
698
737
  }
738
+ var WORKER_UNAVAILABLE_CODE = "ERR_SCRIPT_WORKER_UNAVAILABLE";
739
+ function workerUnavailableError(error) {
740
+ const message = error instanceof Error && error.message ? error.message : "JavaScript worker sandbox is unavailable.";
741
+ return Object.assign(new Error(message), { code: WORKER_UNAVAILABLE_CODE });
742
+ }
743
+ function isSandboxWorkerUnavailable(error) {
744
+ return Boolean(error && typeof error === "object" && "code" in error && error.code === WORKER_UNAVAILABLE_CODE);
745
+ }
746
+ function canUseSandboxWorker() {
747
+ return typeof Worker !== "undefined" && typeof Blob !== "undefined" && typeof URL !== "undefined" && typeof URL.createObjectURL === "function" && typeof URL.revokeObjectURL === "function";
748
+ }
749
+ async function executeInSandboxWorker(code, timeoutMs, stdio, signal) {
750
+ if (!canUseSandboxWorker()) throw workerUnavailableError(/* @__PURE__ */ new Error("JavaScript worker sandbox needs Worker, Blob, and object URLs."));
751
+ if (signal?.aborted) throw abortError();
752
+ const messageId = `ox-code-play-${Math.random().toString(36).slice(2)}`;
753
+ const url = URL.createObjectURL(new Blob([buildJavaScriptWorkerSource()], { type: "text/javascript" }));
754
+ let worker;
755
+ try {
756
+ worker = new Worker(url);
757
+ } catch (error) {
758
+ URL.revokeObjectURL(url);
759
+ throw workerUnavailableError(error);
760
+ }
761
+ return new Promise((resolve, reject) => {
762
+ let settled = false;
763
+ const cleanup = () => {
764
+ if (settled) return;
765
+ settled = true;
766
+ clearTimeout(timer);
767
+ signal?.removeEventListener("abort", onAbort);
768
+ worker.onmessage = null;
769
+ worker.onerror = null;
770
+ worker.terminate();
771
+ URL.revokeObjectURL(url);
772
+ };
773
+ const onAbort = () => {
774
+ cleanup();
775
+ reject(abortError());
776
+ };
777
+ const onMessage = (event) => {
778
+ if (event.data?.id !== messageId) return;
779
+ cleanup();
780
+ applySandboxStreams(stdio, event.data);
781
+ if (event.data.error) {
782
+ reject(new Error(event.data.error));
783
+ return;
784
+ }
785
+ resolve(event.data.value);
786
+ };
787
+ const onError = (event) => {
788
+ cleanup();
789
+ reject(workerUnavailableError(new Error(event.message || "JavaScript worker sandbox failed.")));
790
+ };
791
+ const timer = setTimeout(() => {
792
+ cleanup();
793
+ reject(Object.assign(/* @__PURE__ */ new Error("JavaScript execution timed out."), { code: "ERR_SCRIPT_EXECUTION_TIMEOUT" }));
794
+ }, timeoutMs);
795
+ worker.onmessage = onMessage;
796
+ worker.onerror = onError;
797
+ signal?.addEventListener("abort", onAbort, { once: true });
798
+ worker.postMessage({
799
+ id: messageId,
800
+ code
801
+ });
802
+ });
803
+ }
699
804
  async function executeInSandboxIframe(code, timeoutMs, stdio, signal) {
700
805
  if (typeof document === "undefined" || typeof window === "undefined") throw new Error("JavaScript sandbox iframe needs a document.");
701
806
  if (signal?.aborted) throw abortError();
@@ -747,24 +852,23 @@ async function runJavaScript(request) {
747
852
  const tracker = new PhaseTracker();
748
853
  tracker.start("execute", "Execute");
749
854
  const stdio = new StdioBuffer(tracker.startedAt);
750
- const provenance = { execute: {
751
- host: "local",
752
- runtime: hasNodeVm() ? "node:vm" : "iframe",
753
- sandbox: hasNodeVm() ? "vm" : "srcdoc"
754
- } };
855
+ const runtime = currentJavaScriptRuntime();
856
+ let executedRuntime = runtime;
755
857
  try {
756
- const value = await executeScript(request.code, request.timeoutMs, stdio, request.signal);
858
+ const result = await executeScriptWithRuntime(request.code, request.timeoutMs, stdio, request.signal, runtime);
859
+ executedRuntime = result.runtime;
757
860
  tracker.stop();
758
861
  return {
759
862
  status: "ok",
760
863
  stdio: stdio.snapshot(),
761
864
  diagnostics: [],
762
- provenance,
865
+ provenance: { execute: javascriptRuntimeProvenance(executedRuntime) },
763
866
  timing: tracker.report(),
764
- value: value === void 0 ? void 0 : String(value)
867
+ value: result.value === void 0 ? void 0 : String(result.value)
765
868
  };
766
869
  } catch (error) {
767
870
  if (isAbortError(error) || request.signal?.aborted) throw error;
871
+ executedRuntime = executionRuntimeFromError(error) ?? executedRuntime;
768
872
  tracker.stop();
769
873
  const diagnostic = toDiagnostic(error);
770
874
  stdio.push("stderr", `${diagnostic.message}\n`);
@@ -772,12 +876,30 @@ async function runJavaScript(request) {
772
876
  status: isTimeout(error) ? "timeout" : "error",
773
877
  stdio: stdio.snapshot(),
774
878
  diagnostics: [diagnostic],
775
- provenance,
879
+ provenance: { execute: javascriptRuntimeProvenance(executedRuntime) },
776
880
  timing: tracker.report()
777
881
  };
778
882
  }
779
883
  }
780
- async function executeScript(code, timeoutMs, stdio, signal) {
884
+ async function executeScriptWithRuntime(code, timeoutMs, stdio, signal, runtime = currentJavaScriptRuntime()) {
885
+ try {
886
+ return {
887
+ value: await executeScriptInRuntime(code, timeoutMs, stdio, signal, runtime),
888
+ runtime
889
+ };
890
+ } catch (error) {
891
+ if (runtime === "worker" && isSandboxWorkerUnavailable(error) && typeof document !== "undefined") try {
892
+ return {
893
+ value: await executeScriptInRuntime(code, timeoutMs, stdio, signal, "iframe"),
894
+ runtime: "iframe"
895
+ };
896
+ } catch (fallbackError) {
897
+ throw withExecutionRuntime(fallbackError, "iframe");
898
+ }
899
+ throw withExecutionRuntime(error, runtime);
900
+ }
901
+ }
902
+ async function executeScriptInRuntime(code, timeoutMs, stdio, signal, runtime) {
781
903
  const consoleLike = {
782
904
  log: (...args) => stdio.push("stdout", formatConsoleArgs(args)),
783
905
  info: (...args) => stdio.push("stdout", formatConsoleArgs(args)),
@@ -785,7 +907,7 @@ async function executeScript(code, timeoutMs, stdio, signal) {
785
907
  error: (...args) => stdio.push("stderr", formatConsoleArgs(args))
786
908
  };
787
909
  if (signal?.aborted) throw abortError();
788
- if (javascriptExecuteRuntime(hasNodeVm(), typeof document !== "undefined") === "vm") {
910
+ if (runtime === "vm") {
789
911
  const vm = await import("node:vm");
790
912
  const context = vm.createContext({ console: consoleLike });
791
913
  return vm.runInContext(code, context, {
@@ -793,12 +915,45 @@ async function executeScript(code, timeoutMs, stdio, signal) {
793
915
  displayErrors: true
794
916
  });
795
917
  }
918
+ if (runtime === "worker") return executeInSandboxWorker(code, timeoutMs, stdio, signal);
796
919
  return executeInSandboxIframe(code, timeoutMs, stdio, signal);
797
920
  }
798
- function javascriptExecuteRuntime(hasVm, hasDocument) {
921
+ function currentJavaScriptRuntime() {
922
+ return javascriptExecuteRuntime(hasNodeVm(), canUseSandboxWorker(), typeof document !== "undefined");
923
+ }
924
+ function javascriptExecuteRuntime(hasVm, hasWorker, hasDocument) {
799
925
  if (hasVm) return "vm";
926
+ if (hasWorker) return "worker";
800
927
  if (hasDocument) return "iframe";
801
- throw new Error("JavaScript execute needs node:vm or a document for the sandbox iframe.");
928
+ throw new Error("JavaScript execute needs node:vm, a browser worker sandbox, or a document for the sandbox iframe.");
929
+ }
930
+ function javascriptRuntimeProvenance(runtime) {
931
+ if (runtime === "vm") return {
932
+ host: "local",
933
+ runtime: "node:vm",
934
+ sandbox: "vm"
935
+ };
936
+ if (runtime === "worker") return {
937
+ host: "local",
938
+ runtime: "web-worker",
939
+ sandbox: "worker"
940
+ };
941
+ return {
942
+ host: "local",
943
+ runtime: "iframe",
944
+ sandbox: "srcdoc"
945
+ };
946
+ }
947
+ function withExecutionRuntime(error, runtime) {
948
+ if (error instanceof Error) return Object.assign(error, { executionRuntime: runtime });
949
+ if (isErrorLike(error)) return Object.assign(error, { executionRuntime: runtime });
950
+ return Object.assign(new Error(String(error)), { executionRuntime: runtime });
951
+ }
952
+ function executionRuntimeFromError(error) {
953
+ if (error && typeof error === "object" && "executionRuntime" in error && isJavaScriptExecutionRuntime(error.executionRuntime)) return error.executionRuntime;
954
+ }
955
+ function isJavaScriptExecutionRuntime(value) {
956
+ return value === "vm" || value === "worker" || value === "iframe";
802
957
  }
803
958
  function isTimeout(error) {
804
959
  return Boolean(error && typeof error === "object" && "code" in error && error.code === "ERR_SCRIPT_EXECUTION_TIMEOUT");
@@ -1042,6 +1197,7 @@ async function typecheckTypeScript(request) {
1042
1197
  };
1043
1198
  } catch (error) {
1044
1199
  if (isAbortError(error) || request.signal?.aborted) throw error;
1200
+ executedRuntime = executionRuntimeFromError(error) ?? executedRuntime;
1045
1201
  tracker.stop();
1046
1202
  const message = error instanceof Error ? error.message : String(error);
1047
1203
  return {
@@ -1065,9 +1221,12 @@ async function runTypeScript(request) {
1065
1221
  const stdio = new StdioBuffer(tracker.startedAt);
1066
1222
  tracker.start("compile", "Strip types");
1067
1223
  const javascript = stripTypeScript(request.code);
1224
+ const runtime = currentJavaScriptRuntime();
1225
+ let executedRuntime = runtime;
1068
1226
  tracker.start("execute", "Execute");
1069
1227
  try {
1070
- const value = await executeScript(javascript, request.timeoutMs, stdio, request.signal);
1228
+ const result = await executeScriptWithRuntime(javascript, request.timeoutMs, stdio, request.signal, runtime);
1229
+ executedRuntime = result.runtime;
1071
1230
  tracker.stop();
1072
1231
  return {
1073
1232
  status: "ok",
@@ -1078,14 +1237,10 @@ async function runTypeScript(request) {
1078
1237
  host: "local",
1079
1238
  runtime: "strip-types"
1080
1239
  },
1081
- execute: {
1082
- host: "local",
1083
- runtime: hasNodeVm() ? "node:vm" : "iframe",
1084
- sandbox: hasNodeVm() ? "vm" : "srcdoc"
1085
- }
1240
+ execute: javascriptRuntimeProvenance(executedRuntime)
1086
1241
  },
1087
1242
  timing: tracker.report(),
1088
- value: value === void 0 ? void 0 : String(value)
1243
+ value: result.value === void 0 ? void 0 : String(result.value)
1089
1244
  };
1090
1245
  } catch (error) {
1091
1246
  if (isAbortError(error) || request.signal?.aborted) throw error;
@@ -1105,11 +1260,7 @@ async function runTypeScript(request) {
1105
1260
  host: "local",
1106
1261
  runtime: "strip-types"
1107
1262
  },
1108
- execute: {
1109
- host: "local",
1110
- runtime: hasNodeVm() ? "node:vm" : "iframe",
1111
- sandbox: hasNodeVm() ? "vm" : "srcdoc"
1112
- }
1263
+ execute: javascriptRuntimeProvenance(executedRuntime)
1113
1264
  },
1114
1265
  timing: tracker.report()
1115
1266
  };
package/dist/client.mjs CHANGED
@@ -336,10 +336,115 @@ function buildJavaScriptSandboxDocument(code, messageId) {
336
336
  })();
337
337
  <\/script></body></html>`;
338
338
  }
339
+ function buildJavaScriptWorkerSource() {
340
+ return `
341
+ (function () {
342
+ function format(args) {
343
+ return Array.prototype.map.call(args, function (value) {
344
+ if (typeof value === "string") return value;
345
+ if (value === undefined) return "undefined";
346
+ if (value === null) return "null";
347
+ try { return JSON.stringify(value); } catch (error) { return String(value); }
348
+ }).join(" ") + "\\n";
349
+ }
350
+ self.onmessage = function (event) {
351
+ var data = event.data || {};
352
+ if (!data.id) return;
353
+ var stdout = [];
354
+ var stderr = [];
355
+ var consoleLike = {
356
+ log: function () { stdout.push(format(arguments)); },
357
+ info: function () { stdout.push(format(arguments)); },
358
+ warn: function () { stderr.push(format(arguments)); },
359
+ error: function () { stderr.push(format(arguments)); }
360
+ };
361
+ try {
362
+ var run = new Function("console", '"use strict";\\n' + String(data.code || ""));
363
+ var value = run(consoleLike);
364
+ self.postMessage({
365
+ id: data.id,
366
+ stdout: stdout,
367
+ stderr: stderr,
368
+ value: value === undefined ? undefined : String(value)
369
+ });
370
+ } catch (error) {
371
+ var message = error && error.message ? String(error.message) : String(error);
372
+ self.postMessage({ id: data.id, stdout: stdout, stderr: stderr, error: message });
373
+ }
374
+ };
375
+ })();
376
+ `;
377
+ }
339
378
  function applySandboxStreams(stdio, message) {
340
379
  for (const text of message.stdout ?? []) stdio.push("stdout", text);
341
380
  for (const text of message.stderr ?? []) stdio.push("stderr", text);
342
381
  }
382
+ const WORKER_UNAVAILABLE_CODE = "ERR_SCRIPT_WORKER_UNAVAILABLE";
383
+ function workerUnavailableError(error) {
384
+ const message = error instanceof Error && error.message ? error.message : "JavaScript worker sandbox is unavailable.";
385
+ return Object.assign(new Error(message), { code: WORKER_UNAVAILABLE_CODE });
386
+ }
387
+ function isSandboxWorkerUnavailable(error) {
388
+ return Boolean(error && typeof error === "object" && "code" in error && error.code === WORKER_UNAVAILABLE_CODE);
389
+ }
390
+ function canUseSandboxWorker() {
391
+ return typeof Worker !== "undefined" && typeof Blob !== "undefined" && typeof URL !== "undefined" && typeof URL.createObjectURL === "function" && typeof URL.revokeObjectURL === "function";
392
+ }
393
+ async function executeInSandboxWorker(code, timeoutMs, stdio, signal) {
394
+ if (!canUseSandboxWorker()) throw workerUnavailableError(/* @__PURE__ */ new Error("JavaScript worker sandbox needs Worker, Blob, and object URLs."));
395
+ if (signal?.aborted) throw abortError();
396
+ const messageId = `ox-code-play-${Math.random().toString(36).slice(2)}`;
397
+ const url = URL.createObjectURL(new Blob([buildJavaScriptWorkerSource()], { type: "text/javascript" }));
398
+ let worker;
399
+ try {
400
+ worker = new Worker(url);
401
+ } catch (error) {
402
+ URL.revokeObjectURL(url);
403
+ throw workerUnavailableError(error);
404
+ }
405
+ return new Promise((resolve, reject) => {
406
+ let settled = false;
407
+ const cleanup = () => {
408
+ if (settled) return;
409
+ settled = true;
410
+ clearTimeout(timer);
411
+ signal?.removeEventListener("abort", onAbort);
412
+ worker.onmessage = null;
413
+ worker.onerror = null;
414
+ worker.terminate();
415
+ URL.revokeObjectURL(url);
416
+ };
417
+ const onAbort = () => {
418
+ cleanup();
419
+ reject(abortError());
420
+ };
421
+ const onMessage = (event) => {
422
+ if (event.data?.id !== messageId) return;
423
+ cleanup();
424
+ applySandboxStreams(stdio, event.data);
425
+ if (event.data.error) {
426
+ reject(new Error(event.data.error));
427
+ return;
428
+ }
429
+ resolve(event.data.value);
430
+ };
431
+ const onError = (event) => {
432
+ cleanup();
433
+ reject(workerUnavailableError(new Error(event.message || "JavaScript worker sandbox failed.")));
434
+ };
435
+ const timer = setTimeout(() => {
436
+ cleanup();
437
+ reject(Object.assign(/* @__PURE__ */ new Error("JavaScript execution timed out."), { code: "ERR_SCRIPT_EXECUTION_TIMEOUT" }));
438
+ }, timeoutMs);
439
+ worker.onmessage = onMessage;
440
+ worker.onerror = onError;
441
+ signal?.addEventListener("abort", onAbort, { once: true });
442
+ worker.postMessage({
443
+ id: messageId,
444
+ code
445
+ });
446
+ });
447
+ }
343
448
  async function executeInSandboxIframe(code, timeoutMs, stdio, signal) {
344
449
  if (typeof document === "undefined" || typeof window === "undefined") throw new Error("JavaScript sandbox iframe needs a document.");
345
450
  if (signal?.aborted) throw abortError();
@@ -391,24 +496,23 @@ async function runJavaScript(request) {
391
496
  const tracker = new PhaseTracker();
392
497
  tracker.start("execute", "Execute");
393
498
  const stdio = new StdioBuffer(tracker.startedAt);
394
- const provenance = { execute: {
395
- host: "local",
396
- runtime: hasNodeVm() ? "node:vm" : "iframe",
397
- sandbox: hasNodeVm() ? "vm" : "srcdoc"
398
- } };
499
+ const runtime = currentJavaScriptRuntime();
500
+ let executedRuntime = runtime;
399
501
  try {
400
- const value = await executeScript(request.code, request.timeoutMs, stdio, request.signal);
502
+ const result = await executeScriptWithRuntime(request.code, request.timeoutMs, stdio, request.signal, runtime);
503
+ executedRuntime = result.runtime;
401
504
  tracker.stop();
402
505
  return {
403
506
  status: "ok",
404
507
  stdio: stdio.snapshot(),
405
508
  diagnostics: [],
406
- provenance,
509
+ provenance: { execute: javascriptRuntimeProvenance(executedRuntime) },
407
510
  timing: tracker.report(),
408
- value: value === void 0 ? void 0 : String(value)
511
+ value: result.value === void 0 ? void 0 : String(result.value)
409
512
  };
410
513
  } catch (error) {
411
514
  if (isAbortError(error) || request.signal?.aborted) throw error;
515
+ executedRuntime = executionRuntimeFromError(error) ?? executedRuntime;
412
516
  tracker.stop();
413
517
  const diagnostic = toDiagnostic(error);
414
518
  stdio.push("stderr", `${diagnostic.message}\n`);
@@ -416,12 +520,30 @@ async function runJavaScript(request) {
416
520
  status: isTimeout(error) ? "timeout" : "error",
417
521
  stdio: stdio.snapshot(),
418
522
  diagnostics: [diagnostic],
419
- provenance,
523
+ provenance: { execute: javascriptRuntimeProvenance(executedRuntime) },
420
524
  timing: tracker.report()
421
525
  };
422
526
  }
423
527
  }
424
- async function executeScript(code, timeoutMs, stdio, signal) {
528
+ async function executeScriptWithRuntime(code, timeoutMs, stdio, signal, runtime = currentJavaScriptRuntime()) {
529
+ try {
530
+ return {
531
+ value: await executeScriptInRuntime(code, timeoutMs, stdio, signal, runtime),
532
+ runtime
533
+ };
534
+ } catch (error) {
535
+ if (runtime === "worker" && isSandboxWorkerUnavailable(error) && typeof document !== "undefined") try {
536
+ return {
537
+ value: await executeScriptInRuntime(code, timeoutMs, stdio, signal, "iframe"),
538
+ runtime: "iframe"
539
+ };
540
+ } catch (fallbackError) {
541
+ throw withExecutionRuntime(fallbackError, "iframe");
542
+ }
543
+ throw withExecutionRuntime(error, runtime);
544
+ }
545
+ }
546
+ async function executeScriptInRuntime(code, timeoutMs, stdio, signal, runtime) {
425
547
  const consoleLike = {
426
548
  log: (...args) => stdio.push("stdout", formatConsoleArgs(args)),
427
549
  info: (...args) => stdio.push("stdout", formatConsoleArgs(args)),
@@ -429,7 +551,7 @@ async function executeScript(code, timeoutMs, stdio, signal) {
429
551
  error: (...args) => stdio.push("stderr", formatConsoleArgs(args))
430
552
  };
431
553
  if (signal?.aborted) throw abortError();
432
- if (javascriptExecuteRuntime(hasNodeVm(), typeof document !== "undefined") === "vm") {
554
+ if (runtime === "vm") {
433
555
  const vm = await import("node:vm");
434
556
  const context = vm.createContext({ console: consoleLike });
435
557
  return vm.runInContext(code, context, {
@@ -437,12 +559,45 @@ async function executeScript(code, timeoutMs, stdio, signal) {
437
559
  displayErrors: true
438
560
  });
439
561
  }
562
+ if (runtime === "worker") return executeInSandboxWorker(code, timeoutMs, stdio, signal);
440
563
  return executeInSandboxIframe(code, timeoutMs, stdio, signal);
441
564
  }
442
- function javascriptExecuteRuntime(hasVm, hasDocument) {
565
+ function currentJavaScriptRuntime() {
566
+ return javascriptExecuteRuntime(hasNodeVm(), canUseSandboxWorker(), typeof document !== "undefined");
567
+ }
568
+ function javascriptExecuteRuntime(hasVm, hasWorker, hasDocument) {
443
569
  if (hasVm) return "vm";
570
+ if (hasWorker) return "worker";
444
571
  if (hasDocument) return "iframe";
445
- throw new Error("JavaScript execute needs node:vm or a document for the sandbox iframe.");
572
+ throw new Error("JavaScript execute needs node:vm, a browser worker sandbox, or a document for the sandbox iframe.");
573
+ }
574
+ function javascriptRuntimeProvenance(runtime) {
575
+ if (runtime === "vm") return {
576
+ host: "local",
577
+ runtime: "node:vm",
578
+ sandbox: "vm"
579
+ };
580
+ if (runtime === "worker") return {
581
+ host: "local",
582
+ runtime: "web-worker",
583
+ sandbox: "worker"
584
+ };
585
+ return {
586
+ host: "local",
587
+ runtime: "iframe",
588
+ sandbox: "srcdoc"
589
+ };
590
+ }
591
+ function withExecutionRuntime(error, runtime) {
592
+ if (error instanceof Error) return Object.assign(error, { executionRuntime: runtime });
593
+ if (isErrorLike(error)) return Object.assign(error, { executionRuntime: runtime });
594
+ return Object.assign(new Error(String(error)), { executionRuntime: runtime });
595
+ }
596
+ function executionRuntimeFromError(error) {
597
+ if (error && typeof error === "object" && "executionRuntime" in error && isJavaScriptExecutionRuntime(error.executionRuntime)) return error.executionRuntime;
598
+ }
599
+ function isJavaScriptExecutionRuntime(value) {
600
+ return value === "vm" || value === "worker" || value === "iframe";
446
601
  }
447
602
  function isTimeout(error) {
448
603
  return Boolean(error && typeof error === "object" && "code" in error && error.code === "ERR_SCRIPT_EXECUTION_TIMEOUT");
@@ -686,6 +841,7 @@ async function typecheckTypeScript(request) {
686
841
  };
687
842
  } catch (error) {
688
843
  if (isAbortError(error) || request.signal?.aborted) throw error;
844
+ executedRuntime = executionRuntimeFromError(error) ?? executedRuntime;
689
845
  tracker.stop();
690
846
  const message = error instanceof Error ? error.message : String(error);
691
847
  return {
@@ -709,9 +865,12 @@ async function runTypeScript(request) {
709
865
  const stdio = new StdioBuffer(tracker.startedAt);
710
866
  tracker.start("compile", "Strip types");
711
867
  const javascript = stripTypeScript(request.code);
868
+ const runtime = currentJavaScriptRuntime();
869
+ let executedRuntime = runtime;
712
870
  tracker.start("execute", "Execute");
713
871
  try {
714
- const value = await executeScript(javascript, request.timeoutMs, stdio, request.signal);
872
+ const result = await executeScriptWithRuntime(javascript, request.timeoutMs, stdio, request.signal, runtime);
873
+ executedRuntime = result.runtime;
715
874
  tracker.stop();
716
875
  return {
717
876
  status: "ok",
@@ -722,14 +881,10 @@ async function runTypeScript(request) {
722
881
  host: "local",
723
882
  runtime: "strip-types"
724
883
  },
725
- execute: {
726
- host: "local",
727
- runtime: hasNodeVm() ? "node:vm" : "iframe",
728
- sandbox: hasNodeVm() ? "vm" : "srcdoc"
729
- }
884
+ execute: javascriptRuntimeProvenance(executedRuntime)
730
885
  },
731
886
  timing: tracker.report(),
732
- value: value === void 0 ? void 0 : String(value)
887
+ value: result.value === void 0 ? void 0 : String(result.value)
733
888
  };
734
889
  } catch (error) {
735
890
  if (isAbortError(error) || request.signal?.aborted) throw error;
@@ -749,11 +904,7 @@ async function runTypeScript(request) {
749
904
  host: "local",
750
905
  runtime: "strip-types"
751
906
  },
752
- execute: {
753
- host: "local",
754
- runtime: hasNodeVm() ? "node:vm" : "iframe",
755
- sandbox: hasNodeVm() ? "vm" : "srcdoc"
756
- }
907
+ execute: javascriptRuntimeProvenance(executedRuntime)
757
908
  },
758
909
  timing: tracker.report()
759
910
  };
@@ -1 +1 @@
1
- {"version":3,"file":"client.mjs","names":["parseResponse","hostFromUrl","parseResponse","hostFromUrl","hostFromUrl"],"sources":["../src/timing.ts","../src/framework.ts","../src/stdio.ts","../src/go.ts","../src/transport.ts","../src/javascript-sandbox.ts","../src/runtime-host.ts","../src/javascript.ts","../src/remote.ts","../src/rust.ts","../src/strip-typescript.ts","../src/typescript.ts","../src/adapters.ts","../src/result.ts","../src/session.ts","../src/client.ts"],"sourcesContent":["import type { TimingPhase, TimingReport } from \"./types\";\n\nexport class PhaseTracker {\n readonly startedAt: number;\n private readonly phases: TimingPhase[] = [];\n private current: { id: string; label: string; startMs: number } | undefined;\n\n constructor(now: () => number = nowMs) {\n this.now = now;\n this.startedAt = now();\n }\n\n private readonly now: () => number;\n\n start(id: string, label: string): void {\n this.stop();\n this.current = { id, label, startMs: this.now() - this.startedAt };\n }\n\n stop(): void {\n if (!this.current) {\n return;\n }\n const durationMs = Math.max(0, this.now() - this.startedAt - this.current.startMs);\n this.phases.push({\n id: this.current.id,\n label: this.current.label,\n startMs: this.current.startMs,\n durationMs,\n });\n this.current = undefined;\n }\n\n report(): TimingReport {\n this.stop();\n return {\n totalMs: Math.max(0, this.now() - this.startedAt),\n phases: this.phases.slice(),\n };\n }\n}\n\nexport function nowMs(): number {\n return typeof performance !== \"undefined\" ? performance.now() : Date.now();\n}\n\nexport function emptyTiming(): TimingReport {\n return { totalMs: 0, phases: [] };\n}\n","import { escapeHtml } from \"./escape\";\nimport { PhaseTracker } from \"./timing\";\nimport type { AdapterRequest, AdapterResult, FrameworkId } from \"./types\";\n\nconst RUNTIMES: Record<FrameworkId, { specifier: string; cdn: string }> = {\n vue: { specifier: \"vue\", cdn: \"https://esm.sh/vue@3\" },\n react: { specifier: \"react\", cdn: \"https://esm.sh/react@19\" },\n svelte: { specifier: \"svelte\", cdn: \"https://esm.sh/svelte@5\" },\n solid: { specifier: \"solid-js\", cdn: \"https://esm.sh/solid-js@1\" },\n};\n\nexport async function runFramework(request: AdapterRequest): Promise<AdapterResult> {\n const tracker = new PhaseTracker();\n tracker.start(\"compile\", \"Compile preview\");\n const framework = request.definition.framework ?? \"vue\";\n const html = buildPreviewDocument(framework, request.code);\n tracker.stop();\n return {\n status: \"ok\",\n stdio: [],\n diagnostics: [],\n provenance: {\n compile: { host: \"local\", runtime: `${framework}-preview` },\n execute: { host: \"iframe\", runtime: framework, sandbox: \"srcdoc\" },\n },\n timing: tracker.report(),\n preview: { kind: \"html\", html },\n };\n}\n\nexport function buildPreviewDocument(framework: FrameworkId, code: string): string {\n const runtime = RUNTIMES[framework];\n return `<!doctype html>\n<html>\n<head>\n <meta charset=\"utf-8\">\n <title>${escapeHtml(framework)} preview</title>\n <script type=\"importmap\">${JSON.stringify({ imports: { [runtime.specifier]: runtime.cdn } })}</script>\n <style>html,body{margin:0;padding:1rem;font:14px/1.5 system-ui,sans-serif;}</style>\n</head>\n<body>\n <div id=\"app\"></div>\n <script type=\"module\">\n${indentPreview(code)}\n </script>\n</body>\n</html>\n`;\n}\n\nfunction indentPreview(code: string): string {\n return code\n .replace(/<\\/script/gi, \"<\\\\/script\")\n .split(\"\\n\")\n .map((line) => ` ${line}`)\n .join(\"\\n\");\n}\n","import type { StdioEvent, StdioStream } from \"./types\";\n\nexport class StdioBuffer {\n readonly events: StdioEvent[] = [];\n private readonly startedAt: number;\n\n constructor(startedAt = 0) {\n this.startedAt = startedAt;\n }\n\n push(stream: StdioStream, text: string, timestampMs = elapsed(this.startedAt)): StdioEvent {\n const event: StdioEvent = { stream, text, timestampMs };\n this.events.push(event);\n return event;\n }\n\n snapshot(): StdioEvent[] {\n return this.events.slice();\n }\n}\n\nexport function joinStream(events: StdioEvent[], stream: StdioStream): string {\n return events\n .filter((event) => event.stream === stream)\n .map((event) => event.text)\n .join(\"\");\n}\n\nexport function selectStream(events: StdioEvent[], stream: StdioStream): StdioEvent[] {\n return events.filter((event) => event.stream === stream);\n}\n\nexport function withStdioText<T extends { stdio: StdioEvent[] }>(\n result: T,\n): T & { stdout: string; stderr: string } {\n return {\n ...result,\n stdout: joinStream(result.stdio, \"stdout\"),\n stderr: joinStream(result.stdio, \"stderr\"),\n };\n}\n\nexport function formatConsoleArgs(args: unknown[]): string {\n return `${args.map(formatConsoleArg).join(\" \")}\\n`;\n}\n\nfunction formatConsoleArg(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\") {\n return String(value);\n }\n if (value === undefined) {\n return \"undefined\";\n }\n if (value === null) {\n return \"null\";\n }\n try {\n return JSON.stringify(value);\n } catch {\n return Object.prototype.toString.call(value);\n }\n}\n\nfunction elapsed(startedAt: number): number {\n const now = typeof performance !== \"undefined\" ? performance.now() : Date.now();\n return Math.max(0, now - startedAt);\n}\n","import { StdioBuffer } from \"./stdio\";\nimport { PhaseTracker } from \"./timing\";\nimport type { AdapterRequest, AdapterResult, Diagnostic } from \"./types\";\n\ninterface GoPlaygroundEvent {\n Message?: string;\n Kind?: string;\n Delay?: number;\n}\n\ninterface GoPlaygroundResponse {\n Errors?: string;\n Events?: GoPlaygroundEvent[];\n VetErrors?: string;\n}\n\nexport async function runGo(\n request: AdapterRequest,\n mode: \"execute\" | \"typecheck\",\n): Promise<AdapterResult> {\n const tracker = new PhaseTracker();\n const stdio = new StdioBuffer(tracker.startedAt);\n const params = new URLSearchParams({\n version: \"2\",\n body: request.code,\n withVet: request.config.withVet === false ? \"false\" : \"true\",\n });\n\n tracker.start(\n mode === \"typecheck\" ? \"typecheck\" : \"compile\",\n mode === \"typecheck\" ? \"Typecheck\" : \"Compile\",\n );\n const response = await request.transport.request({\n url: request.endpoints.go,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: params.toString(),\n signal: request.signal,\n });\n tracker.start(\"collect\", \"Collect output\");\n\n const parsed = parseResponse(response.text);\n const diagnostics = [\n ...parseGoErrors(parsed.Errors ?? \"\", \"go\"),\n ...parseGoErrors(parsed.VetErrors ?? \"\", \"vet\"),\n ];\n for (const event of parsed.Events ?? []) {\n const stream = event.Kind === \"stderr\" ? \"stderr\" : \"stdout\";\n stdio.push(stream, event.Message ?? \"\");\n }\n if (parsed.Errors) {\n stdio.push(\"stderr\", parsed.Errors);\n }\n\n tracker.stop();\n const failed = diagnostics.some((item) => item.severity === \"error\") || !response.ok;\n return {\n status: failed ? \"error\" : \"ok\",\n stdio: stdio.snapshot(),\n diagnostics,\n provenance: {\n compile: {\n host: hostFromUrl(request.endpoints.go),\n runtime: \"go\",\n },\n execute:\n mode === \"execute\"\n ? {\n host: hostFromUrl(request.endpoints.go),\n runtime: \"go-playground\",\n sandbox: \"playground\",\n }\n : undefined,\n },\n timing: tracker.report(),\n };\n}\n\nfunction parseResponse(text: string): GoPlaygroundResponse {\n try {\n return JSON.parse(text) as GoPlaygroundResponse;\n } catch {\n return { Errors: text };\n }\n}\n\nexport function parseGoErrors(output: string, source: string): Diagnostic[] {\n if (!output.trim()) {\n return [];\n }\n return output\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean)\n .map((line) => {\n const match = /^(?:prog\\.go:)?(\\d+)(?::(\\d+))?:\\s*(.*)$/.exec(line);\n return {\n message: match?.[3] ?? line,\n severity: \"error\" as const,\n line: match?.[1] ? Number(match[1]) : undefined,\n column: match?.[2] ? Number(match[2]) : undefined,\n source,\n };\n });\n}\n\nfunction hostFromUrl(url: string): string {\n try {\n return new URL(url, \"https://code-play.local\").host || url;\n } catch {\n return url;\n }\n}\n","import type { CodePlayTransport, TransportRequest, TransportResponse } from \"./types\";\n\nexport function createFetchTransport(fetchImpl: typeof fetch = fetch): CodePlayTransport {\n return {\n async request(input: TransportRequest): Promise<TransportResponse> {\n const response = await fetchImpl(input.url, {\n method: input.method,\n headers: input.headers,\n body: input.body,\n signal: input.signal,\n });\n return {\n ok: response.ok,\n status: response.status,\n text: await response.text(),\n };\n },\n };\n}\n\nexport function createMemoryTransport(\n handler: (input: TransportRequest) => TransportResponse | Promise<TransportResponse>,\n): CodePlayTransport {\n return {\n async request(input) {\n if (input.signal?.aborted) {\n throw abortError();\n }\n return handler(input);\n },\n };\n}\n\nexport class MissingTransportError extends Error {\n constructor(host: string) {\n super(`No Code Play transport is configured for ${host}.`);\n this.name = \"MissingTransportError\";\n }\n}\n\nexport function abortError(): Error {\n const error = new Error(\"The Code Play run was cancelled.\");\n error.name = \"AbortError\";\n return error;\n}\n\nexport function isAbortError(error: unknown): boolean {\n return Boolean(\n error && typeof error === \"object\" && \"name\" in error && error.name === \"AbortError\",\n );\n}\n\nexport function createUnavailableTransport(): CodePlayTransport {\n return {\n request(input) {\n if (input.signal?.aborted) {\n return Promise.reject(abortError());\n }\n return Promise.reject(new MissingTransportError(input.url));\n },\n };\n}\n","import type { StdioBuffer } from \"./stdio\";\nimport { abortError } from \"./transport\";\n\nexport const JS_SANDBOX_FLAGS = \"allow-scripts\";\n\nexport function embedJson(value: unknown): string {\n return JSON.stringify(value).replace(/</g, \"\\\\u003c\");\n}\n\nexport function buildJavaScriptSandboxDocument(code: string, messageId: string): string {\n return `<!doctype html><html><head><meta charset=\"utf-8\"></head><body><script>\n(function () {\n var id = ${embedJson(messageId)};\n var stdout = [];\n var stderr = [];\n function format(args) {\n return Array.prototype.map.call(args, function (value) {\n if (typeof value === \"string\") return value;\n if (value === undefined) return \"undefined\";\n if (value === null) return \"null\";\n try { return JSON.stringify(value); } catch (error) { return String(value); }\n }).join(\" \") + \"\\\\n\";\n }\n var consoleLike = {\n log: function () { stdout.push(format(arguments)); },\n info: function () { stdout.push(format(arguments)); },\n warn: function () { stderr.push(format(arguments)); },\n error: function () { stderr.push(format(arguments)); }\n };\n try {\n var run = new Function(\"console\", ${embedJson(`\"use strict\";\\n${code}`)});\n var value = run(consoleLike);\n parent.postMessage({\n id: id,\n stdout: stdout,\n stderr: stderr,\n value: value === undefined ? undefined : String(value)\n }, \"*\");\n } catch (error) {\n var message = error && error.message ? String(error.message) : String(error);\n parent.postMessage({ id: id, stdout: stdout, stderr: stderr, error: message }, \"*\");\n }\n})();\n</script></body></html>`;\n}\n\nexport interface SandboxMessage {\n id?: string;\n stdout?: string[];\n stderr?: string[];\n value?: string;\n error?: string;\n}\n\nexport function applySandboxStreams(stdio: StdioBuffer, message: SandboxMessage): void {\n for (const text of message.stdout ?? []) {\n stdio.push(\"stdout\", text);\n }\n for (const text of message.stderr ?? []) {\n stdio.push(\"stderr\", text);\n }\n}\n\nexport async function executeInSandboxIframe(\n code: string,\n timeoutMs: number,\n stdio: StdioBuffer,\n signal?: AbortSignal,\n): Promise<unknown> {\n if (typeof document === \"undefined\" || typeof window === \"undefined\") {\n throw new Error(\"JavaScript sandbox iframe needs a document.\");\n }\n if (signal?.aborted) {\n throw abortError();\n }\n const messageId = `ox-code-play-${Math.random().toString(36).slice(2)}`;\n return new Promise((resolve, reject) => {\n const frame = document.createElement(\"iframe\");\n frame.setAttribute(\"sandbox\", JS_SANDBOX_FLAGS);\n frame.setAttribute(\"title\", \"Code Play JavaScript sandbox\");\n frame.hidden = true;\n const cleanup = () => {\n window.clearTimeout(timer);\n window.removeEventListener(\"message\", onMessage);\n signal?.removeEventListener(\"abort\", onAbort);\n frame.remove();\n };\n const onAbort = () => {\n cleanup();\n reject(abortError());\n };\n const onMessage = (event: MessageEvent<SandboxMessage>) => {\n if (event.source !== frame.contentWindow || event.data?.id !== messageId) {\n return;\n }\n cleanup();\n applySandboxStreams(stdio, event.data);\n if (event.data.error) {\n reject(new Error(event.data.error));\n return;\n }\n resolve(event.data.value);\n };\n const timer = window.setTimeout(() => {\n cleanup();\n reject(\n Object.assign(new Error(\"JavaScript execution timed out.\"), {\n code: \"ERR_SCRIPT_EXECUTION_TIMEOUT\",\n }),\n );\n }, timeoutMs);\n window.addEventListener(\"message\", onMessage);\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n frame.srcdoc = buildJavaScriptSandboxDocument(code, messageId);\n document.body.append(frame);\n });\n}\n","/** True when the current isolate can load `node:vm`. */\nexport function hasNodeVm(): boolean {\n return typeof process !== \"undefined\" && Boolean(process.versions?.node);\n}\n","import { executeInSandboxIframe } from \"./javascript-sandbox\";\nimport { hasNodeVm } from \"./runtime-host\";\nimport { formatConsoleArgs, StdioBuffer } from \"./stdio\";\nimport { PhaseTracker } from \"./timing\";\nimport { abortError, isAbortError } from \"./transport\";\nimport type { AdapterRequest, AdapterResult, Diagnostic } from \"./types\";\n\nexport async function runJavaScript(request: AdapterRequest): Promise<AdapterResult> {\n const tracker = new PhaseTracker();\n tracker.start(\"execute\", \"Execute\");\n const stdio = new StdioBuffer(tracker.startedAt);\n const provenance = {\n execute: {\n host: \"local\",\n runtime: hasNodeVm() ? \"node:vm\" : \"iframe\",\n sandbox: hasNodeVm() ? \"vm\" : \"srcdoc\",\n },\n };\n\n try {\n const value = await executeScript(request.code, request.timeoutMs, stdio, request.signal);\n tracker.stop();\n return {\n status: \"ok\",\n stdio: stdio.snapshot(),\n diagnostics: [],\n provenance,\n timing: tracker.report(),\n value: value === undefined ? undefined : String(value),\n };\n } catch (error) {\n if (isAbortError(error) || request.signal?.aborted) {\n throw error;\n }\n tracker.stop();\n const diagnostic = toDiagnostic(error);\n stdio.push(\"stderr\", `${diagnostic.message}\\n`);\n return {\n status: isTimeout(error) ? \"timeout\" : \"error\",\n stdio: stdio.snapshot(),\n diagnostics: [diagnostic],\n provenance,\n timing: tracker.report(),\n };\n }\n}\n\nexport async function executeScript(\n code: string,\n timeoutMs: number,\n stdio: StdioBuffer,\n signal?: AbortSignal,\n): Promise<unknown> {\n const consoleLike = {\n log: (...args: unknown[]) => stdio.push(\"stdout\", formatConsoleArgs(args)),\n info: (...args: unknown[]) => stdio.push(\"stdout\", formatConsoleArgs(args)),\n warn: (...args: unknown[]) => stdio.push(\"stderr\", formatConsoleArgs(args)),\n error: (...args: unknown[]) => stdio.push(\"stderr\", formatConsoleArgs(args)),\n };\n\n if (signal?.aborted) {\n throw abortError();\n }\n\n const runtime = javascriptExecuteRuntime(hasNodeVm(), typeof document !== \"undefined\");\n if (runtime === \"vm\") {\n const vm = await import(\"node:vm\");\n const context = vm.createContext({ console: consoleLike });\n return vm.runInContext(code, context, { timeout: timeoutMs, displayErrors: true });\n }\n\n return executeInSandboxIframe(code, timeoutMs, stdio, signal);\n}\n\nexport function javascriptExecuteRuntime(hasVm: boolean, hasDocument: boolean): \"vm\" | \"iframe\" {\n if (hasVm) {\n return \"vm\";\n }\n if (hasDocument) {\n return \"iframe\";\n }\n throw new Error(\"JavaScript execute needs node:vm or a document for the sandbox iframe.\");\n}\n\nfunction isTimeout(error: unknown): boolean {\n return Boolean(\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ERR_SCRIPT_EXECUTION_TIMEOUT\",\n );\n}\n\nfunction toDiagnostic(error: unknown): Diagnostic {\n if (isErrorLike(error)) {\n return { message: error.message, severity: \"error\", source: \"javascript\" };\n }\n return { message: String(error), severity: \"error\", source: \"javascript\" };\n}\n\nfunction isErrorLike(error: unknown): error is { message: string } {\n return Boolean(\n error &&\n typeof error === \"object\" &&\n \"message\" in error &&\n typeof error.message === \"string\" &&\n error.message.length > 0,\n );\n}\n","import { StdioBuffer } from \"./stdio\";\nimport { PhaseTracker } from \"./timing\";\nimport type { AdapterRequest, AdapterResult } from \"./types\";\n\ninterface PistonExecuteResponse {\n compile?: { stdout?: string; stderr?: string; code?: number };\n run?: { stdout?: string; stderr?: string; code?: number; signal?: string | null };\n message?: string;\n}\n\nexport async function runRemote(request: AdapterRequest): Promise<AdapterResult> {\n const tracker = new PhaseTracker();\n const stdio = new StdioBuffer(tracker.startedAt);\n const endpoint = request.enabled.endpoint;\n const language = request.definition.remote?.pistonLanguage ?? request.definition.id;\n\n if (!endpoint) {\n tracker.stop();\n return {\n status: \"unsupported\",\n stdio: [],\n diagnostics: [\n {\n message:\n `${request.definition.name} execution needs a configured HTTP executor. ` +\n `Pass languages.${request.definition.id}.endpoint (Piston-compatible).`,\n severity: \"error\",\n source: \"code-play\",\n },\n ],\n provenance: {},\n timing: tracker.report(),\n };\n }\n\n tracker.start(\"queue\", \"Queue\");\n tracker.start(\"compile\", \"Compile / execute\");\n const response = await request.transport.request({\n url: joinEndpoint(endpoint, \"execute\"),\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n language,\n version: request.config.version ?? request.definition.remote?.pistonVersion ?? \"*\",\n files: [{ content: request.code }],\n }),\n signal: request.signal,\n });\n tracker.start(\"collect\", \"Collect output\");\n\n const parsed = parseResponse(response.text);\n if (parsed.compile?.stdout) {\n stdio.push(\"stdout\", parsed.compile.stdout);\n }\n if (parsed.compile?.stderr) {\n stdio.push(\"stderr\", parsed.compile.stderr);\n }\n if (parsed.run?.stdout) {\n stdio.push(\"stdout\", parsed.run.stdout);\n }\n if (parsed.run?.stderr) {\n stdio.push(\"stderr\", parsed.run.stderr);\n }\n if (parsed.message && !parsed.run && !parsed.compile) {\n stdio.push(\"stderr\", `${parsed.message}\\n`);\n }\n\n const compileFailed = (parsed.compile?.code ?? 0) !== 0;\n const runFailed = (parsed.run?.code ?? 0) !== 0 || Boolean(parsed.run?.signal);\n const failed =\n !response.ok || compileFailed || runFailed || Boolean(parsed.message && !parsed.run);\n tracker.stop();\n\n return {\n status: failed ? \"error\" : \"ok\",\n stdio: stdio.snapshot(),\n diagnostics: failed\n ? [\n {\n message:\n parsed.message ??\n parsed.run?.stderr ??\n parsed.compile?.stderr ??\n \"Remote execution failed.\",\n severity: \"error\",\n source: language,\n },\n ]\n : [],\n provenance: {\n compile: parsed.compile\n ? { host: hostFromUrl(endpoint), runtime: language, sandbox: \"piston\" }\n : undefined,\n execute: { host: hostFromUrl(endpoint), runtime: language, sandbox: \"piston\" },\n },\n timing: tracker.report(),\n };\n}\n\nfunction parseResponse(text: string): PistonExecuteResponse {\n try {\n return JSON.parse(text) as PistonExecuteResponse;\n } catch {\n return { message: text };\n }\n}\n\nfunction joinEndpoint(endpoint: string, action: string): string {\n const trimmed = endpoint.replace(/\\/+$/, \"\");\n return trimmed.endsWith(action) ? trimmed : `${trimmed}/${action}`;\n}\n\nfunction hostFromUrl(url: string): string {\n try {\n return new URL(url, \"https://code-play.local\").host || url;\n } catch {\n return url;\n }\n}\n","import { StdioBuffer } from \"./stdio\";\nimport { PhaseTracker } from \"./timing\";\nimport type { AdapterRequest, AdapterResult, Diagnostic } from \"./types\";\n\ninterface RustPlaygroundResponse {\n success?: boolean;\n stdout?: string;\n stderr?: string;\n error?: string;\n}\n\nexport async function runRust(\n request: AdapterRequest,\n mode: \"execute\" | \"typecheck\",\n): Promise<AdapterResult> {\n const tracker = new PhaseTracker();\n const stdio = new StdioBuffer(tracker.startedAt);\n const crateType = resolveCrateType(request.code, String(request.config.crateType ?? \"auto\"));\n const body = {\n channel: request.config.channel ?? \"stable\",\n mode: request.config.mode ?? \"debug\",\n edition: String(request.config.edition ?? \"2024\"),\n crateType,\n tests: false,\n code: request.code,\n backtrace: false,\n };\n\n tracker.start(\n mode === \"typecheck\" ? \"typecheck\" : \"compile\",\n mode === \"typecheck\" ? \"Typecheck\" : \"Compile\",\n );\n const response = await request.transport.request({\n url: request.endpoints.rust,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n signal: request.signal,\n });\n tracker.start(\"collect\", \"Collect output\");\n\n const parsed = parseResponse(response.text);\n const diagnostics = parseRustcDiagnostics(parsed.stderr ?? parsed.error ?? \"\");\n if (parsed.stdout) {\n stdio.push(\"stdout\", parsed.stdout);\n }\n if (parsed.stderr) {\n stdio.push(\"stderr\", parsed.stderr);\n }\n if (parsed.error && !parsed.stderr) {\n stdio.push(\"stderr\", parsed.error);\n }\n\n const success = parsed.success === true && response.ok;\n const compileFailed = diagnostics.some((item) => item.severity === \"error\") || !success;\n tracker.stop();\n\n return {\n status: compileFailed ? \"error\" : \"ok\",\n stdio: stdio.snapshot(),\n diagnostics,\n provenance: {\n compile: {\n host: hostFromUrl(request.endpoints.rust),\n runtime: \"rustc\",\n version: String(request.config.channel ?? \"stable\"),\n target: crateType,\n },\n execute:\n mode === \"execute\"\n ? {\n host: hostFromUrl(request.endpoints.rust),\n runtime: \"rust-playground\",\n sandbox: \"playground\",\n }\n : undefined,\n },\n timing: tracker.report(),\n };\n}\n\nfunction resolveCrateType(code: string, configured: string): \"bin\" | \"lib\" {\n if (configured === \"bin\" || configured === \"lib\") {\n return configured;\n }\n return /(?:^|\\b)(?:async\\s+)?fn\\s+main\\s*\\(/.test(code) ? \"bin\" : \"lib\";\n}\n\nfunction parseResponse(text: string): RustPlaygroundResponse {\n try {\n return JSON.parse(text) as RustPlaygroundResponse;\n } catch {\n return { success: false, error: text };\n }\n}\n\nexport function parseRustcDiagnostics(stderr: string): Diagnostic[] {\n const diagnostics: Diagnostic[] = [];\n const pattern = /^(error|warning|note)(?:\\[([^\\]]+)\\])?:\\s+(.*)$/gm;\n for (const match of stderr.matchAll(pattern)) {\n const severity = match[1] === \"warning\" ? \"warning\" : match[1] === \"note\" ? \"info\" : \"error\";\n diagnostics.push({\n message: match[3] ?? \"\",\n severity,\n source: match[2] ? `rustc ${match[2]}` : \"rustc\",\n });\n }\n return diagnostics;\n}\n\nfunction hostFromUrl(url: string): string {\n try {\n return new URL(url, \"https://code-play.local\").host || url;\n } catch {\n return url;\n }\n}\n","/**\n * Conservative TypeScript-to-JavaScript stripper for documentation samples.\n * Full checking goes through tsgo; this path only needs to run the snippet.\n */\nexport function stripTypeScript(code: string): string {\n return code\n .replace(/^\\s*import\\s+type\\s+.*$/gm, \"\")\n .replace(/^\\s*export\\s+type\\s+\\w[\\s\\S]*?;\\s*$/gm, \"\")\n .replace(/^\\s*type\\s+\\w[\\s\\S]*?;\\s*$/gm, \"\")\n .replace(/^\\s*(?:export\\s+)?interface\\s+\\w[\\s\\S]*?\\{[\\s\\S]*?\\n\\}\\s*$/gm, \"\")\n .replace(/\\s+as\\s+const\\b/g, \"\")\n .replace(/\\s+as\\s+[^=,;)\\n]+/g, \"\")\n .replace(/\\s+satisfies\\s+[^=,;)\\n]+/g, \"\")\n .replace(/\\)\\s*:\\s*[^{;=\\n]+/g, \")\")\n .replace(/([?]?)\\s*:\\s*[^,)=;{\\n]+/g, \"$1\");\n}\n","import { executeScript } from \"./javascript\";\nimport { hasNodeVm } from \"./runtime-host\";\nimport { isAbortError } from \"./transport\";\nimport { StdioBuffer } from \"./stdio\";\nimport { stripTypeScript } from \"./strip-typescript\";\nimport { PhaseTracker } from \"./timing\";\nimport type { AdapterRequest, AdapterResult, Diagnostic, TransportResponse } from \"./types\";\n\nexport type TypecheckBackend = \"endpoint\" | \"tsgo\" | \"unavailable\";\n\nexport function resolveTypecheckBackend(\n hasVm: boolean,\n typecheckUrl: string | undefined,\n): TypecheckBackend {\n if (typecheckUrl && !hasVm) {\n return \"endpoint\";\n }\n if (!hasVm) {\n return \"unavailable\";\n }\n return \"tsgo\";\n}\n\nexport async function typecheckTypeScript(request: AdapterRequest): Promise<AdapterResult> {\n const tracker = new PhaseTracker();\n tracker.start(\"typecheck\", \"Typecheck\");\n const backend = resolveTypecheckBackend(hasNodeVm(), request.endpoints.typecheck);\n\n if (backend === \"endpoint\") {\n return typecheckViaEndpoint(request, tracker);\n }\n if (backend === \"unavailable\") {\n tracker.stop();\n return {\n status: \"unsupported\",\n stdio: [],\n diagnostics: [\n {\n message:\n \"Typecheck needs a reachable endpoints.typecheck. The Vite /__ox-code-play/typecheck proxy exists only during vite dev.\",\n severity: \"error\",\n source: \"tsgo\",\n },\n ],\n provenance: { compile: { host: \"local\", runtime: \"tsgo\" } },\n timing: tracker.report(),\n };\n }\n\n try {\n const diagnostics = await typecheckWithTsgo(\n request.code,\n String(request.config.tsgoCommand ?? \"tsgo\"),\n );\n tracker.stop();\n return {\n status: diagnostics.some((item) => item.severity === \"error\") ? \"error\" : \"ok\",\n stdio: [],\n diagnostics,\n provenance: { compile: { host: \"local\", runtime: \"tsgo\" } },\n timing: tracker.report(),\n };\n } catch (error) {\n if (isAbortError(error) || request.signal?.aborted) {\n throw error;\n }\n tracker.stop();\n const message = error instanceof Error ? error.message : String(error);\n return {\n status: message.includes(\"ENOENT\") ? \"unsupported\" : \"error\",\n stdio: [],\n diagnostics: [\n {\n message: message.includes(\"ENOENT\")\n ? \"tsgo is not available. Install @typescript/native-preview or set languages.typescript.config.tsgoCommand.\"\n : message,\n severity: \"error\",\n source: \"tsgo\",\n },\n ],\n provenance: { compile: { host: \"local\", runtime: \"tsgo\" } },\n timing: tracker.report(),\n };\n }\n}\n\nexport async function runTypeScript(request: AdapterRequest): Promise<AdapterResult> {\n const tracker = new PhaseTracker();\n const stdio = new StdioBuffer(tracker.startedAt);\n tracker.start(\"compile\", \"Strip types\");\n const javascript = stripTypeScript(request.code);\n tracker.start(\"execute\", \"Execute\");\n try {\n const value = await executeScript(javascript, request.timeoutMs, stdio, request.signal);\n tracker.stop();\n return {\n status: \"ok\",\n stdio: stdio.snapshot(),\n diagnostics: [],\n provenance: {\n compile: { host: \"local\", runtime: \"strip-types\" },\n execute: {\n host: \"local\",\n runtime: hasNodeVm() ? \"node:vm\" : \"iframe\",\n sandbox: hasNodeVm() ? \"vm\" : \"srcdoc\",\n },\n },\n timing: tracker.report(),\n value: value === undefined ? undefined : String(value),\n };\n } catch (error) {\n if (isAbortError(error) || request.signal?.aborted) {\n throw error;\n }\n tracker.stop();\n const message = error instanceof Error ? error.message : String(error);\n stdio.push(\"stderr\", `${message}\\n`);\n return {\n status: \"error\",\n stdio: stdio.snapshot(),\n diagnostics: [{ message, severity: \"error\", source: \"javascript\" }],\n provenance: {\n compile: { host: \"local\", runtime: \"strip-types\" },\n execute: {\n host: \"local\",\n runtime: hasNodeVm() ? \"node:vm\" : \"iframe\",\n sandbox: hasNodeVm() ? \"vm\" : \"srcdoc\",\n },\n },\n timing: tracker.report(),\n };\n }\n}\n\nasync function typecheckViaEndpoint(\n request: AdapterRequest,\n tracker: PhaseTracker,\n): Promise<AdapterResult> {\n const url = request.endpoints.typecheck ?? \"\";\n const response = await request.transport.request({\n url,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ language: \"typescript\", code: request.code, config: request.config }),\n signal: request.signal,\n });\n tracker.stop();\n return adapterResultFromTypecheckResponse(response, url, tracker);\n}\n\nexport function typecheckEndpointFailureMessage(status: number, text: string): string {\n if (status === 404 || status === 405) {\n return \"Typecheck needs a reachable endpoints.typecheck. The Vite /__ox-code-play/typecheck proxy exists only during vite dev.\";\n }\n const trimmed = text.trim();\n return trimmed || \"Typecheck endpoint failed.\";\n}\n\nexport function adapterResultFromTypecheckResponse(\n response: TransportResponse,\n url: string,\n tracker: PhaseTracker,\n): AdapterResult {\n if (!response.ok) {\n return {\n status: \"error\",\n stdio: [],\n diagnostics: [\n {\n message: typecheckEndpointFailureMessage(response.status, response.text),\n severity: \"error\",\n source: \"tsgo\",\n },\n ],\n provenance: { compile: { host: hostFromUrl(url), runtime: \"tsgo\" } },\n timing: tracker.report(),\n };\n }\n try {\n return JSON.parse(response.text) as AdapterResult;\n } catch {\n return {\n status: \"error\",\n stdio: [],\n diagnostics: [\n {\n message: response.text || \"Typecheck endpoint failed.\",\n severity: \"error\",\n source: \"tsgo\",\n },\n ],\n provenance: { compile: { host: hostFromUrl(url), runtime: \"tsgo\" } },\n timing: tracker.report(),\n };\n }\n}\n\nexport async function typecheckWithTsgo(code: string, command = \"tsgo\"): Promise<Diagnostic[]> {\n const [{ mkdtemp, rm, writeFile }, { tmpdir }, { join }, { execFile }, { promisify }] =\n await Promise.all([\n import(\"node:fs/promises\"),\n import(\"node:os\"),\n import(\"node:path\"),\n import(\"node:child_process\"),\n import(\"node:util\"),\n ]);\n const execFileAsync = promisify(execFile);\n const dir = await mkdtemp(join(tmpdir(), \"ox-code-play-\"));\n const file = join(dir, \"snippet.ts\");\n await writeFile(file, code);\n try {\n await execFileAsync(command, [\"--noEmit\", \"--pretty\", \"false\", \"--strict\", file], {\n cwd: dir,\n maxBuffer: 1024 * 1024,\n });\n return [];\n } catch (error) {\n const output = commandOutput(error);\n if ((error as { code?: string }).code === \"ENOENT\") {\n throw error;\n }\n return parseTsgoOutput(output);\n } finally {\n await rm(dir, { recursive: true, force: true });\n }\n}\n\nexport function parseTsgoOutput(output: string): Diagnostic[] {\n const diagnostics: Diagnostic[] = [];\n const pattern =\n /^(?:.*[\\\\/])?snippet\\.ts\\((\\d+),(\\d+)\\):\\s+(error|warning|info)\\s+TS\\d+:\\s+(.*)$/gm;\n for (const match of output.matchAll(pattern)) {\n diagnostics.push({\n message: match[4] ?? output,\n severity: match[3] === \"warning\" ? \"warning\" : match[3] === \"info\" ? \"info\" : \"error\",\n line: Number(match[1]),\n column: Number(match[2]),\n source: \"tsgo\",\n });\n }\n if (diagnostics.length === 0 && output.trim()) {\n diagnostics.push({ message: output.trim(), severity: \"error\", source: \"tsgo\" });\n }\n return diagnostics;\n}\n\nfunction commandOutput(error: unknown): string {\n if (!error || typeof error !== \"object\") {\n return String(error);\n }\n const value = error as { stdout?: unknown; stderr?: unknown; message?: unknown };\n return [value.stdout, value.stderr, value.message]\n .filter((part): part is string => typeof part === \"string\" && part.trim().length > 0)\n .join(\"\\n\")\n .trim();\n}\n\nfunction hostFromUrl(url: string): string {\n try {\n return new URL(url, \"https://code-play.local\").host || url;\n } catch {\n return url;\n }\n}\n","import { runFramework } from \"./framework\";\nimport { runGo } from \"./go\";\nimport { runJavaScript } from \"./javascript\";\nimport { runRemote } from \"./remote\";\nimport { runRust } from \"./rust\";\nimport { runTypeScript, typecheckTypeScript } from \"./typescript\";\nimport type { AdapterRequest, AdapterResult } from \"./types\";\n\nexport async function executeAdapter(request: AdapterRequest): Promise<AdapterResult> {\n if (!request.enabled.execute) {\n return capabilityDisabled(request, \"execute\");\n }\n switch (request.definition.backend) {\n case \"javascript\":\n return runJavaScript(request);\n case \"typescript\":\n return runTypeScript(request);\n case \"framework\":\n return runFramework(request);\n case \"rust-playground\":\n return runRust(request, \"execute\");\n case \"go-playground\":\n return runGo(request, \"execute\");\n case \"remote\":\n return runRemote(request);\n default:\n return capabilityDisabled(request, \"execute\");\n }\n}\n\nexport async function typecheckAdapter(request: AdapterRequest): Promise<AdapterResult> {\n if (!request.enabled.typecheck || !request.definition.capabilities.typecheck) {\n return capabilityDisabled(request, \"typecheck\");\n }\n switch (request.definition.backend) {\n case \"typescript\":\n return typecheckTypeScript(request);\n case \"rust-playground\":\n return runRust(request, \"typecheck\");\n case \"go-playground\":\n return runGo(request, \"typecheck\");\n default:\n return capabilityDisabled(request, \"typecheck\");\n }\n}\n\nfunction capabilityDisabled(\n request: AdapterRequest,\n action: \"execute\" | \"typecheck\",\n): AdapterResult {\n return {\n status: \"unsupported\",\n stdio: [],\n diagnostics: [\n {\n message: `${request.definition.name} ${action} is not enabled.`,\n severity: \"error\",\n source: \"code-play\",\n },\n ],\n provenance: {},\n timing: { totalMs: 0, phases: [] },\n };\n}\n","import { withStdioText } from \"./stdio\";\nimport { emptyTiming } from \"./timing\";\nimport type { RunResult, RunStatus } from \"./types\";\n\nexport function errorMessage(error: unknown): string {\n return error instanceof Error && error.message ? error.message : String(error);\n}\n\nexport function friendlyTransportMessage(error: unknown): string {\n const message = errorMessage(error);\n const typeError =\n error instanceof TypeError || (error instanceof Error && error.name === \"TypeError\");\n if (\n typeError &&\n /failed to fetch|networkerror|load failed|network request failed/i.test(message)\n ) {\n return \"The executor could not be reached from this page (often CORS). Set endpoints to a host that allows browser POST, or use the Vite dev proxy.\";\n }\n return message;\n}\n\nexport function errorResult(\n message: string,\n source = \"code-play\",\n status: RunStatus = \"error\",\n): RunResult {\n return withStdioText({\n status,\n stdio: [],\n diagnostics: [\n {\n message,\n severity: status === \"cancelled\" ? \"info\" : \"error\",\n source,\n },\n ],\n provenance: {},\n timing: emptyTiming(),\n });\n}\n","import { executeAdapter, typecheckAdapter } from \"./adapters\";\nimport { mergeConfig } from \"./config\";\nimport { friendlyTransportMessage, errorResult } from \"./result\";\nimport { withStdioText } from \"./stdio\";\nimport { isAbortError } from \"./transport\";\nimport type {\n AdapterRequest,\n CodePlayTransport,\n PlaygroundEndpoints,\n ResolvedLanguageEnable,\n RunResult,\n SessionEventMap,\n SessionEventName,\n SessionInput,\n TypeScriptLike,\n} from \"./types\";\nimport type { LanguageDefinition } from \"./types\";\n\ntype Listener<T> = (value: T) => void;\n\nexport class CodePlaySession {\n readonly language: LanguageDefinition;\n code: string;\n config: Record<string, unknown>;\n lastResult: RunResult | undefined;\n\n /** Last run's concatenated stdout (same as `lastResult.stdout`). */\n get stdout(): string {\n return this.lastResult?.stdout ?? \"\";\n }\n\n /** Last run's concatenated stderr (same as `lastResult.stderr`). */\n get stderr(): string {\n return this.lastResult?.stderr ?? \"\";\n }\n\n private readonly enabled: ResolvedLanguageEnable;\n private readonly timeoutMs: number;\n private readonly transport: CodePlayTransport;\n private readonly endpoints: PlaygroundEndpoints;\n private readonly loadTypeScript?: () => Promise<TypeScriptLike | undefined>;\n private readonly listeners = new Map<SessionEventName, Set<Listener<unknown>>>();\n private abort: AbortController | undefined;\n\n constructor(input: SessionConstructorInput) {\n this.language = input.definition;\n this.enabled = input.enabled;\n this.code = input.code;\n this.config = mergeConfig(input.definition.id, input.enabled, input.config);\n this.timeoutMs = input.timeoutMs;\n this.transport = input.transport;\n this.endpoints = input.endpoints;\n this.loadTypeScript = input.loadTypeScript;\n }\n\n on<K extends SessionEventName>(event: K, listener: Listener<SessionEventMap[K]>): () => void {\n const bucket = this.listeners.get(event) ?? new Set();\n bucket.add(listener as Listener<unknown>);\n this.listeners.set(event, bucket);\n return () => bucket.delete(listener as Listener<unknown>);\n }\n\n setCode(code: string): void {\n this.code = code;\n }\n\n setConfig(config: Record<string, unknown>): void {\n this.config = { ...this.config, ...config };\n this.emit(\"config\", this.config);\n }\n\n async run(): Promise<RunResult> {\n return this.dispatch(\"execute\");\n }\n\n async typecheck(): Promise<RunResult> {\n return this.dispatch(\"typecheck\");\n }\n\n cancel(): void {\n this.abort?.abort();\n }\n\n private async dispatch(action: \"execute\" | \"typecheck\"): Promise<RunResult> {\n this.abort?.abort();\n this.abort = new AbortController();\n const { signal } = this.abort;\n const request: AdapterRequest = {\n definition: this.language,\n enabled: this.enabled,\n code: this.code,\n config: this.config,\n timeoutMs: this.timeoutMs,\n transport: this.transport,\n loadTypeScript: this.loadTypeScript,\n endpoints: this.endpoints,\n signal,\n };\n try {\n const result = withStdioText(\n action === \"typecheck\" ? await typecheckAdapter(request) : await executeAdapter(request),\n );\n return this.finish(result);\n } catch (error) {\n if (signal.aborted || isAbortError(error)) {\n return this.finish(errorResult(\"Run cancelled.\", \"code-play\", \"cancelled\"));\n }\n return this.finish(errorResult(friendlyTransportMessage(error)));\n }\n }\n\n private finish(result: RunResult): RunResult {\n this.lastResult = result;\n for (const event of result.stdio) {\n this.emit(\"stdio\", event);\n }\n this.emit(\"result\", result);\n return result;\n }\n\n private emit<K extends SessionEventName>(event: K, value: SessionEventMap[K]): void {\n for (const listener of this.listeners.get(event) ?? []) {\n listener(value);\n }\n }\n}\n\nexport interface SessionConstructorInput extends SessionInput {\n definition: LanguageDefinition;\n enabled: ResolvedLanguageEnable;\n timeoutMs: number;\n transport: CodePlayTransport;\n endpoints: PlaygroundEndpoints;\n loadTypeScript?: () => Promise<TypeScriptLike | undefined>;\n}\n","import { resolveLanguage } from \"./catalog\";\nimport {\n resolveCodePlayOptions,\n type RawCodePlayOptions,\n type ResolvedCodePlayOptions,\n} from \"./config\";\nimport { CodePlaySession } from \"./session\";\nimport { createFetchTransport, createUnavailableTransport } from \"./transport\";\nimport type { CodePlayTransport, SessionInput, TypeScriptLike } from \"./types\";\n\nexport interface CodePlayClientOptions extends RawCodePlayOptions {\n transport?: CodePlayTransport;\n loadTypeScript?: () => Promise<TypeScriptLike | undefined>;\n}\n\nexport interface CodePlayClient {\n readonly options: ResolvedCodePlayOptions;\n createSession(input: SessionInput): CodePlaySession;\n hasLanguage(language: string): boolean;\n}\n\nexport function createCodePlay(options: CodePlayClientOptions = {}): CodePlayClient {\n const resolved = resolveCodePlayOptions(options);\n const transport = options.transport ?? defaultTransport();\n return {\n options: resolved,\n hasLanguage(language: string) {\n const definition = resolveLanguage(language);\n return Boolean(definition && resolved.languages.has(definition.id));\n },\n createSession(input: SessionInput) {\n const definition = resolveLanguage(input.language);\n if (!definition) {\n throw new Error(`Unknown Code Play language: ${input.language}.`);\n }\n const enabled = resolved.languages.get(definition.id);\n if (!enabled) {\n throw new Error(\n `${definition.name} is not enabled. Pass languages.${definition.id}: true to createCodePlay().`,\n );\n }\n return new CodePlaySession({\n ...input,\n definition,\n enabled,\n timeoutMs: resolved.timeoutMs,\n transport,\n endpoints: resolved.endpoints,\n loadTypeScript: options.loadTypeScript,\n });\n },\n };\n}\n\nfunction defaultTransport(): CodePlayTransport {\n if (typeof fetch === \"function\") {\n return createFetchTransport();\n }\n return createUnavailableTransport();\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"client.mjs","names":["parseResponse","hostFromUrl","parseResponse","hostFromUrl","hostFromUrl"],"sources":["../src/timing.ts","../src/framework.ts","../src/stdio.ts","../src/go.ts","../src/transport.ts","../src/javascript-sandbox.ts","../src/runtime-host.ts","../src/javascript.ts","../src/remote.ts","../src/rust.ts","../src/strip-typescript.ts","../src/typescript.ts","../src/adapters.ts","../src/result.ts","../src/session.ts","../src/client.ts"],"sourcesContent":["import type { TimingPhase, TimingReport } from \"./types\";\n\nexport class PhaseTracker {\n readonly startedAt: number;\n private readonly phases: TimingPhase[] = [];\n private current: { id: string; label: string; startMs: number } | undefined;\n\n constructor(now: () => number = nowMs) {\n this.now = now;\n this.startedAt = now();\n }\n\n private readonly now: () => number;\n\n start(id: string, label: string): void {\n this.stop();\n this.current = { id, label, startMs: this.now() - this.startedAt };\n }\n\n stop(): void {\n if (!this.current) {\n return;\n }\n const durationMs = Math.max(0, this.now() - this.startedAt - this.current.startMs);\n this.phases.push({\n id: this.current.id,\n label: this.current.label,\n startMs: this.current.startMs,\n durationMs,\n });\n this.current = undefined;\n }\n\n report(): TimingReport {\n this.stop();\n return {\n totalMs: Math.max(0, this.now() - this.startedAt),\n phases: this.phases.slice(),\n };\n }\n}\n\nexport function nowMs(): number {\n return typeof performance !== \"undefined\" ? performance.now() : Date.now();\n}\n\nexport function emptyTiming(): TimingReport {\n return { totalMs: 0, phases: [] };\n}\n","import { escapeHtml } from \"./escape\";\nimport { PhaseTracker } from \"./timing\";\nimport type { AdapterRequest, AdapterResult, FrameworkId } from \"./types\";\n\nconst RUNTIMES: Record<FrameworkId, { specifier: string; cdn: string }> = {\n vue: { specifier: \"vue\", cdn: \"https://esm.sh/vue@3\" },\n react: { specifier: \"react\", cdn: \"https://esm.sh/react@19\" },\n svelte: { specifier: \"svelte\", cdn: \"https://esm.sh/svelte@5\" },\n solid: { specifier: \"solid-js\", cdn: \"https://esm.sh/solid-js@1\" },\n};\n\nexport async function runFramework(request: AdapterRequest): Promise<AdapterResult> {\n const tracker = new PhaseTracker();\n tracker.start(\"compile\", \"Compile preview\");\n const framework = request.definition.framework ?? \"vue\";\n const html = buildPreviewDocument(framework, request.code);\n tracker.stop();\n return {\n status: \"ok\",\n stdio: [],\n diagnostics: [],\n provenance: {\n compile: { host: \"local\", runtime: `${framework}-preview` },\n execute: { host: \"iframe\", runtime: framework, sandbox: \"srcdoc\" },\n },\n timing: tracker.report(),\n preview: { kind: \"html\", html },\n };\n}\n\nexport function buildPreviewDocument(framework: FrameworkId, code: string): string {\n const runtime = RUNTIMES[framework];\n return `<!doctype html>\n<html>\n<head>\n <meta charset=\"utf-8\">\n <title>${escapeHtml(framework)} preview</title>\n <script type=\"importmap\">${JSON.stringify({ imports: { [runtime.specifier]: runtime.cdn } })}</script>\n <style>html,body{margin:0;padding:1rem;font:14px/1.5 system-ui,sans-serif;}</style>\n</head>\n<body>\n <div id=\"app\"></div>\n <script type=\"module\">\n${indentPreview(code)}\n </script>\n</body>\n</html>\n`;\n}\n\nfunction indentPreview(code: string): string {\n return code\n .replace(/<\\/script/gi, \"<\\\\/script\")\n .split(\"\\n\")\n .map((line) => ` ${line}`)\n .join(\"\\n\");\n}\n","import type { StdioEvent, StdioStream } from \"./types\";\n\nexport class StdioBuffer {\n readonly events: StdioEvent[] = [];\n private readonly startedAt: number;\n\n constructor(startedAt = 0) {\n this.startedAt = startedAt;\n }\n\n push(stream: StdioStream, text: string, timestampMs = elapsed(this.startedAt)): StdioEvent {\n const event: StdioEvent = { stream, text, timestampMs };\n this.events.push(event);\n return event;\n }\n\n snapshot(): StdioEvent[] {\n return this.events.slice();\n }\n}\n\nexport function joinStream(events: StdioEvent[], stream: StdioStream): string {\n return events\n .filter((event) => event.stream === stream)\n .map((event) => event.text)\n .join(\"\");\n}\n\nexport function selectStream(events: StdioEvent[], stream: StdioStream): StdioEvent[] {\n return events.filter((event) => event.stream === stream);\n}\n\nexport function withStdioText<T extends { stdio: StdioEvent[] }>(\n result: T,\n): T & { stdout: string; stderr: string } {\n return {\n ...result,\n stdout: joinStream(result.stdio, \"stdout\"),\n stderr: joinStream(result.stdio, \"stderr\"),\n };\n}\n\nexport function formatConsoleArgs(args: unknown[]): string {\n return `${args.map(formatConsoleArg).join(\" \")}\\n`;\n}\n\nfunction formatConsoleArg(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\") {\n return String(value);\n }\n if (value === undefined) {\n return \"undefined\";\n }\n if (value === null) {\n return \"null\";\n }\n try {\n return JSON.stringify(value);\n } catch {\n return Object.prototype.toString.call(value);\n }\n}\n\nfunction elapsed(startedAt: number): number {\n const now = typeof performance !== \"undefined\" ? performance.now() : Date.now();\n return Math.max(0, now - startedAt);\n}\n","import { StdioBuffer } from \"./stdio\";\nimport { PhaseTracker } from \"./timing\";\nimport type { AdapterRequest, AdapterResult, Diagnostic } from \"./types\";\n\ninterface GoPlaygroundEvent {\n Message?: string;\n Kind?: string;\n Delay?: number;\n}\n\ninterface GoPlaygroundResponse {\n Errors?: string;\n Events?: GoPlaygroundEvent[];\n VetErrors?: string;\n}\n\nexport async function runGo(\n request: AdapterRequest,\n mode: \"execute\" | \"typecheck\",\n): Promise<AdapterResult> {\n const tracker = new PhaseTracker();\n const stdio = new StdioBuffer(tracker.startedAt);\n const params = new URLSearchParams({\n version: \"2\",\n body: request.code,\n withVet: request.config.withVet === false ? \"false\" : \"true\",\n });\n\n tracker.start(\n mode === \"typecheck\" ? \"typecheck\" : \"compile\",\n mode === \"typecheck\" ? \"Typecheck\" : \"Compile\",\n );\n const response = await request.transport.request({\n url: request.endpoints.go,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: params.toString(),\n signal: request.signal,\n });\n tracker.start(\"collect\", \"Collect output\");\n\n const parsed = parseResponse(response.text);\n const diagnostics = [\n ...parseGoErrors(parsed.Errors ?? \"\", \"go\"),\n ...parseGoErrors(parsed.VetErrors ?? \"\", \"vet\"),\n ];\n for (const event of parsed.Events ?? []) {\n const stream = event.Kind === \"stderr\" ? \"stderr\" : \"stdout\";\n stdio.push(stream, event.Message ?? \"\");\n }\n if (parsed.Errors) {\n stdio.push(\"stderr\", parsed.Errors);\n }\n\n tracker.stop();\n const failed = diagnostics.some((item) => item.severity === \"error\") || !response.ok;\n return {\n status: failed ? \"error\" : \"ok\",\n stdio: stdio.snapshot(),\n diagnostics,\n provenance: {\n compile: {\n host: hostFromUrl(request.endpoints.go),\n runtime: \"go\",\n },\n execute:\n mode === \"execute\"\n ? {\n host: hostFromUrl(request.endpoints.go),\n runtime: \"go-playground\",\n sandbox: \"playground\",\n }\n : undefined,\n },\n timing: tracker.report(),\n };\n}\n\nfunction parseResponse(text: string): GoPlaygroundResponse {\n try {\n return JSON.parse(text) as GoPlaygroundResponse;\n } catch {\n return { Errors: text };\n }\n}\n\nexport function parseGoErrors(output: string, source: string): Diagnostic[] {\n if (!output.trim()) {\n return [];\n }\n return output\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean)\n .map((line) => {\n const match = /^(?:prog\\.go:)?(\\d+)(?::(\\d+))?:\\s*(.*)$/.exec(line);\n return {\n message: match?.[3] ?? line,\n severity: \"error\" as const,\n line: match?.[1] ? Number(match[1]) : undefined,\n column: match?.[2] ? Number(match[2]) : undefined,\n source,\n };\n });\n}\n\nfunction hostFromUrl(url: string): string {\n try {\n return new URL(url, \"https://code-play.local\").host || url;\n } catch {\n return url;\n }\n}\n","import type { CodePlayTransport, TransportRequest, TransportResponse } from \"./types\";\n\nexport function createFetchTransport(fetchImpl: typeof fetch = fetch): CodePlayTransport {\n return {\n async request(input: TransportRequest): Promise<TransportResponse> {\n const response = await fetchImpl(input.url, {\n method: input.method,\n headers: input.headers,\n body: input.body,\n signal: input.signal,\n });\n return {\n ok: response.ok,\n status: response.status,\n text: await response.text(),\n };\n },\n };\n}\n\nexport function createMemoryTransport(\n handler: (input: TransportRequest) => TransportResponse | Promise<TransportResponse>,\n): CodePlayTransport {\n return {\n async request(input) {\n if (input.signal?.aborted) {\n throw abortError();\n }\n return handler(input);\n },\n };\n}\n\nexport class MissingTransportError extends Error {\n constructor(host: string) {\n super(`No Code Play transport is configured for ${host}.`);\n this.name = \"MissingTransportError\";\n }\n}\n\nexport function abortError(): Error {\n const error = new Error(\"The Code Play run was cancelled.\");\n error.name = \"AbortError\";\n return error;\n}\n\nexport function isAbortError(error: unknown): boolean {\n return Boolean(\n error && typeof error === \"object\" && \"name\" in error && error.name === \"AbortError\",\n );\n}\n\nexport function createUnavailableTransport(): CodePlayTransport {\n return {\n request(input) {\n if (input.signal?.aborted) {\n return Promise.reject(abortError());\n }\n return Promise.reject(new MissingTransportError(input.url));\n },\n };\n}\n","import type { StdioBuffer } from \"./stdio\";\nimport { abortError } from \"./transport\";\n\nexport const JS_SANDBOX_FLAGS = \"allow-scripts\";\n\nexport function embedJson(value: unknown): string {\n return JSON.stringify(value).replace(/</g, \"\\\\u003c\");\n}\n\nexport function buildJavaScriptSandboxDocument(code: string, messageId: string): string {\n return `<!doctype html><html><head><meta charset=\"utf-8\"></head><body><script>\n(function () {\n var id = ${embedJson(messageId)};\n var stdout = [];\n var stderr = [];\n function format(args) {\n return Array.prototype.map.call(args, function (value) {\n if (typeof value === \"string\") return value;\n if (value === undefined) return \"undefined\";\n if (value === null) return \"null\";\n try { return JSON.stringify(value); } catch (error) { return String(value); }\n }).join(\" \") + \"\\\\n\";\n }\n var consoleLike = {\n log: function () { stdout.push(format(arguments)); },\n info: function () { stdout.push(format(arguments)); },\n warn: function () { stderr.push(format(arguments)); },\n error: function () { stderr.push(format(arguments)); }\n };\n try {\n var run = new Function(\"console\", ${embedJson(`\"use strict\";\\n${code}`)});\n var value = run(consoleLike);\n parent.postMessage({\n id: id,\n stdout: stdout,\n stderr: stderr,\n value: value === undefined ? undefined : String(value)\n }, \"*\");\n } catch (error) {\n var message = error && error.message ? String(error.message) : String(error);\n parent.postMessage({ id: id, stdout: stdout, stderr: stderr, error: message }, \"*\");\n }\n})();\n</script></body></html>`;\n}\n\nexport function buildJavaScriptWorkerSource(): string {\n return `\n(function () {\n function format(args) {\n return Array.prototype.map.call(args, function (value) {\n if (typeof value === \"string\") return value;\n if (value === undefined) return \"undefined\";\n if (value === null) return \"null\";\n try { return JSON.stringify(value); } catch (error) { return String(value); }\n }).join(\" \") + \"\\\\n\";\n }\n self.onmessage = function (event) {\n var data = event.data || {};\n if (!data.id) return;\n var stdout = [];\n var stderr = [];\n var consoleLike = {\n log: function () { stdout.push(format(arguments)); },\n info: function () { stdout.push(format(arguments)); },\n warn: function () { stderr.push(format(arguments)); },\n error: function () { stderr.push(format(arguments)); }\n };\n try {\n var run = new Function(\"console\", '\"use strict\";\\\\n' + String(data.code || \"\"));\n var value = run(consoleLike);\n self.postMessage({\n id: data.id,\n stdout: stdout,\n stderr: stderr,\n value: value === undefined ? undefined : String(value)\n });\n } catch (error) {\n var message = error && error.message ? String(error.message) : String(error);\n self.postMessage({ id: data.id, stdout: stdout, stderr: stderr, error: message });\n }\n };\n})();\n`;\n}\n\nexport interface SandboxMessage {\n id?: string;\n stdout?: string[];\n stderr?: string[];\n value?: string;\n error?: string;\n}\n\nexport function applySandboxStreams(stdio: StdioBuffer, message: SandboxMessage): void {\n for (const text of message.stdout ?? []) {\n stdio.push(\"stdout\", text);\n }\n for (const text of message.stderr ?? []) {\n stdio.push(\"stderr\", text);\n }\n}\n\nconst WORKER_UNAVAILABLE_CODE = \"ERR_SCRIPT_WORKER_UNAVAILABLE\";\n\nfunction workerUnavailableError(error: unknown): Error {\n const message =\n error instanceof Error && error.message\n ? error.message\n : \"JavaScript worker sandbox is unavailable.\";\n return Object.assign(new Error(message), { code: WORKER_UNAVAILABLE_CODE });\n}\n\nexport function isSandboxWorkerUnavailable(error: unknown): boolean {\n return Boolean(\n error && typeof error === \"object\" && \"code\" in error && error.code === WORKER_UNAVAILABLE_CODE,\n );\n}\n\nexport function canUseSandboxWorker(): boolean {\n return (\n typeof Worker !== \"undefined\" &&\n typeof Blob !== \"undefined\" &&\n typeof URL !== \"undefined\" &&\n typeof URL.createObjectURL === \"function\" &&\n typeof URL.revokeObjectURL === \"function\"\n );\n}\n\nexport async function executeInSandboxWorker(\n code: string,\n timeoutMs: number,\n stdio: StdioBuffer,\n signal?: AbortSignal,\n): Promise<unknown> {\n if (!canUseSandboxWorker()) {\n throw workerUnavailableError(\n new Error(\"JavaScript worker sandbox needs Worker, Blob, and object URLs.\"),\n );\n }\n if (signal?.aborted) {\n throw abortError();\n }\n\n const messageId = `ox-code-play-${Math.random().toString(36).slice(2)}`;\n const url = URL.createObjectURL(\n new Blob([buildJavaScriptWorkerSource()], { type: \"text/javascript\" }),\n );\n\n let worker: Worker;\n try {\n worker = new Worker(url);\n } catch (error) {\n URL.revokeObjectURL(url);\n throw workerUnavailableError(error);\n }\n\n return new Promise((resolve, reject) => {\n let settled = false;\n const cleanup = () => {\n if (settled) {\n return;\n }\n settled = true;\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", onAbort);\n worker.onmessage = null;\n worker.onerror = null;\n worker.terminate();\n URL.revokeObjectURL(url);\n };\n const onAbort = () => {\n cleanup();\n reject(abortError());\n };\n const onMessage = (event: MessageEvent<SandboxMessage>) => {\n if (event.data?.id !== messageId) {\n return;\n }\n cleanup();\n applySandboxStreams(stdio, event.data);\n if (event.data.error) {\n reject(new Error(event.data.error));\n return;\n }\n resolve(event.data.value);\n };\n const onError = (event: ErrorEvent) => {\n cleanup();\n reject(\n workerUnavailableError(new Error(event.message || \"JavaScript worker sandbox failed.\")),\n );\n };\n const timer = setTimeout(() => {\n cleanup();\n reject(\n Object.assign(new Error(\"JavaScript execution timed out.\"), {\n code: \"ERR_SCRIPT_EXECUTION_TIMEOUT\",\n }),\n );\n }, timeoutMs);\n worker.onmessage = onMessage;\n worker.onerror = onError;\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n worker.postMessage({ id: messageId, code });\n });\n}\n\nexport async function executeInSandboxIframe(\n code: string,\n timeoutMs: number,\n stdio: StdioBuffer,\n signal?: AbortSignal,\n): Promise<unknown> {\n if (typeof document === \"undefined\" || typeof window === \"undefined\") {\n throw new Error(\"JavaScript sandbox iframe needs a document.\");\n }\n if (signal?.aborted) {\n throw abortError();\n }\n const messageId = `ox-code-play-${Math.random().toString(36).slice(2)}`;\n return new Promise((resolve, reject) => {\n const frame = document.createElement(\"iframe\");\n frame.setAttribute(\"sandbox\", JS_SANDBOX_FLAGS);\n frame.setAttribute(\"title\", \"Code Play JavaScript sandbox\");\n frame.hidden = true;\n const cleanup = () => {\n window.clearTimeout(timer);\n window.removeEventListener(\"message\", onMessage);\n signal?.removeEventListener(\"abort\", onAbort);\n frame.remove();\n };\n const onAbort = () => {\n cleanup();\n reject(abortError());\n };\n const onMessage = (event: MessageEvent<SandboxMessage>) => {\n if (event.source !== frame.contentWindow || event.data?.id !== messageId) {\n return;\n }\n cleanup();\n applySandboxStreams(stdio, event.data);\n if (event.data.error) {\n reject(new Error(event.data.error));\n return;\n }\n resolve(event.data.value);\n };\n const timer = window.setTimeout(() => {\n cleanup();\n reject(\n Object.assign(new Error(\"JavaScript execution timed out.\"), {\n code: \"ERR_SCRIPT_EXECUTION_TIMEOUT\",\n }),\n );\n }, timeoutMs);\n window.addEventListener(\"message\", onMessage);\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n frame.srcdoc = buildJavaScriptSandboxDocument(code, messageId);\n document.body.append(frame);\n });\n}\n","/** True when the current isolate can load `node:vm`. */\nexport function hasNodeVm(): boolean {\n return typeof process !== \"undefined\" && Boolean(process.versions?.node);\n}\n","import {\n canUseSandboxWorker,\n executeInSandboxIframe,\n executeInSandboxWorker,\n isSandboxWorkerUnavailable,\n} from \"./javascript-sandbox\";\nimport { hasNodeVm } from \"./runtime-host\";\nimport { formatConsoleArgs, StdioBuffer } from \"./stdio\";\nimport { PhaseTracker } from \"./timing\";\nimport { abortError, isAbortError } from \"./transport\";\nimport type { AdapterRequest, AdapterResult, Diagnostic, RuntimeLocation } from \"./types\";\n\nexport type JavaScriptExecutionRuntime = \"vm\" | \"worker\" | \"iframe\";\n\nexport interface JavaScriptExecutionResult {\n value: unknown;\n runtime: JavaScriptExecutionRuntime;\n}\n\nexport async function runJavaScript(request: AdapterRequest): Promise<AdapterResult> {\n const tracker = new PhaseTracker();\n tracker.start(\"execute\", \"Execute\");\n const stdio = new StdioBuffer(tracker.startedAt);\n const runtime = currentJavaScriptRuntime();\n let executedRuntime = runtime;\n\n try {\n const result = await executeScriptWithRuntime(\n request.code,\n request.timeoutMs,\n stdio,\n request.signal,\n runtime,\n );\n executedRuntime = result.runtime;\n tracker.stop();\n return {\n status: \"ok\",\n stdio: stdio.snapshot(),\n diagnostics: [],\n provenance: {\n execute: javascriptRuntimeProvenance(executedRuntime),\n },\n timing: tracker.report(),\n value: result.value === undefined ? undefined : String(result.value),\n };\n } catch (error) {\n if (isAbortError(error) || request.signal?.aborted) {\n throw error;\n }\n executedRuntime = executionRuntimeFromError(error) ?? executedRuntime;\n tracker.stop();\n const diagnostic = toDiagnostic(error);\n stdio.push(\"stderr\", `${diagnostic.message}\\n`);\n return {\n status: isTimeout(error) ? \"timeout\" : \"error\",\n stdio: stdio.snapshot(),\n diagnostics: [diagnostic],\n provenance: {\n execute: javascriptRuntimeProvenance(executedRuntime),\n },\n timing: tracker.report(),\n };\n }\n}\n\nexport async function executeScript(\n code: string,\n timeoutMs: number,\n stdio: StdioBuffer,\n signal?: AbortSignal,\n runtime = currentJavaScriptRuntime(),\n): Promise<unknown> {\n const result = await executeScriptWithRuntime(code, timeoutMs, stdio, signal, runtime);\n return result.value;\n}\n\nexport async function executeScriptWithRuntime(\n code: string,\n timeoutMs: number,\n stdio: StdioBuffer,\n signal?: AbortSignal,\n runtime = currentJavaScriptRuntime(),\n): Promise<JavaScriptExecutionResult> {\n try {\n return {\n value: await executeScriptInRuntime(code, timeoutMs, stdio, signal, runtime),\n runtime,\n };\n } catch (error) {\n if (\n runtime === \"worker\" &&\n isSandboxWorkerUnavailable(error) &&\n typeof document !== \"undefined\"\n ) {\n try {\n return {\n value: await executeScriptInRuntime(code, timeoutMs, stdio, signal, \"iframe\"),\n runtime: \"iframe\",\n };\n } catch (fallbackError) {\n throw withExecutionRuntime(fallbackError, \"iframe\");\n }\n }\n throw withExecutionRuntime(error, runtime);\n }\n}\n\nasync function executeScriptInRuntime(\n code: string,\n timeoutMs: number,\n stdio: StdioBuffer,\n signal: AbortSignal | undefined,\n runtime: JavaScriptExecutionRuntime,\n): Promise<unknown> {\n const consoleLike = {\n log: (...args: unknown[]) => stdio.push(\"stdout\", formatConsoleArgs(args)),\n info: (...args: unknown[]) => stdio.push(\"stdout\", formatConsoleArgs(args)),\n warn: (...args: unknown[]) => stdio.push(\"stderr\", formatConsoleArgs(args)),\n error: (...args: unknown[]) => stdio.push(\"stderr\", formatConsoleArgs(args)),\n };\n\n if (signal?.aborted) {\n throw abortError();\n }\n\n if (runtime === \"vm\") {\n const vm = await import(\"node:vm\");\n const context = vm.createContext({ console: consoleLike });\n return vm.runInContext(code, context, { timeout: timeoutMs, displayErrors: true });\n }\n if (runtime === \"worker\") {\n return executeInSandboxWorker(code, timeoutMs, stdio, signal);\n }\n\n return executeInSandboxIframe(code, timeoutMs, stdio, signal);\n}\n\nexport function currentJavaScriptRuntime(): JavaScriptExecutionRuntime {\n return javascriptExecuteRuntime(\n hasNodeVm(),\n canUseSandboxWorker(),\n typeof document !== \"undefined\",\n );\n}\n\nexport function javascriptExecuteRuntime(\n hasVm: boolean,\n hasWorker: boolean,\n hasDocument: boolean,\n): JavaScriptExecutionRuntime {\n if (hasVm) {\n return \"vm\";\n }\n if (hasWorker) {\n return \"worker\";\n }\n if (hasDocument) {\n return \"iframe\";\n }\n throw new Error(\n \"JavaScript execute needs node:vm, a browser worker sandbox, or a document for the sandbox iframe.\",\n );\n}\n\nexport function javascriptRuntimeProvenance(runtime: JavaScriptExecutionRuntime): RuntimeLocation {\n if (runtime === \"vm\") {\n return { host: \"local\", runtime: \"node:vm\", sandbox: \"vm\" };\n }\n if (runtime === \"worker\") {\n return { host: \"local\", runtime: \"web-worker\", sandbox: \"worker\" };\n }\n return { host: \"local\", runtime: \"iframe\", sandbox: \"srcdoc\" };\n}\n\nfunction withExecutionRuntime(\n error: unknown,\n runtime: JavaScriptExecutionRuntime,\n): Error & { executionRuntime: JavaScriptExecutionRuntime } {\n if (error instanceof Error) {\n return Object.assign(error, { executionRuntime: runtime });\n }\n if (isErrorLike(error)) {\n return Object.assign(error, { executionRuntime: runtime }) as Error & {\n executionRuntime: JavaScriptExecutionRuntime;\n };\n }\n return Object.assign(new Error(String(error)), { executionRuntime: runtime });\n}\n\nexport function executionRuntimeFromError(error: unknown): JavaScriptExecutionRuntime | undefined {\n if (\n error &&\n typeof error === \"object\" &&\n \"executionRuntime\" in error &&\n isJavaScriptExecutionRuntime(error.executionRuntime)\n ) {\n return error.executionRuntime;\n }\n return undefined;\n}\n\nfunction isJavaScriptExecutionRuntime(value: unknown): value is JavaScriptExecutionRuntime {\n return value === \"vm\" || value === \"worker\" || value === \"iframe\";\n}\n\nfunction isTimeout(error: unknown): boolean {\n return Boolean(\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ERR_SCRIPT_EXECUTION_TIMEOUT\",\n );\n}\n\nfunction toDiagnostic(error: unknown): Diagnostic {\n if (isErrorLike(error)) {\n return { message: error.message, severity: \"error\", source: \"javascript\" };\n }\n return { message: String(error), severity: \"error\", source: \"javascript\" };\n}\n\nfunction isErrorLike(error: unknown): error is { message: string } {\n return Boolean(\n error &&\n typeof error === \"object\" &&\n \"message\" in error &&\n typeof error.message === \"string\" &&\n error.message.length > 0,\n );\n}\n","import { StdioBuffer } from \"./stdio\";\nimport { PhaseTracker } from \"./timing\";\nimport type { AdapterRequest, AdapterResult } from \"./types\";\n\ninterface PistonExecuteResponse {\n compile?: { stdout?: string; stderr?: string; code?: number };\n run?: { stdout?: string; stderr?: string; code?: number; signal?: string | null };\n message?: string;\n}\n\nexport async function runRemote(request: AdapterRequest): Promise<AdapterResult> {\n const tracker = new PhaseTracker();\n const stdio = new StdioBuffer(tracker.startedAt);\n const endpoint = request.enabled.endpoint;\n const language = request.definition.remote?.pistonLanguage ?? request.definition.id;\n\n if (!endpoint) {\n tracker.stop();\n return {\n status: \"unsupported\",\n stdio: [],\n diagnostics: [\n {\n message:\n `${request.definition.name} execution needs a configured HTTP executor. ` +\n `Pass languages.${request.definition.id}.endpoint (Piston-compatible).`,\n severity: \"error\",\n source: \"code-play\",\n },\n ],\n provenance: {},\n timing: tracker.report(),\n };\n }\n\n tracker.start(\"queue\", \"Queue\");\n tracker.start(\"compile\", \"Compile / execute\");\n const response = await request.transport.request({\n url: joinEndpoint(endpoint, \"execute\"),\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n language,\n version: request.config.version ?? request.definition.remote?.pistonVersion ?? \"*\",\n files: [{ content: request.code }],\n }),\n signal: request.signal,\n });\n tracker.start(\"collect\", \"Collect output\");\n\n const parsed = parseResponse(response.text);\n if (parsed.compile?.stdout) {\n stdio.push(\"stdout\", parsed.compile.stdout);\n }\n if (parsed.compile?.stderr) {\n stdio.push(\"stderr\", parsed.compile.stderr);\n }\n if (parsed.run?.stdout) {\n stdio.push(\"stdout\", parsed.run.stdout);\n }\n if (parsed.run?.stderr) {\n stdio.push(\"stderr\", parsed.run.stderr);\n }\n if (parsed.message && !parsed.run && !parsed.compile) {\n stdio.push(\"stderr\", `${parsed.message}\\n`);\n }\n\n const compileFailed = (parsed.compile?.code ?? 0) !== 0;\n const runFailed = (parsed.run?.code ?? 0) !== 0 || Boolean(parsed.run?.signal);\n const failed =\n !response.ok || compileFailed || runFailed || Boolean(parsed.message && !parsed.run);\n tracker.stop();\n\n return {\n status: failed ? \"error\" : \"ok\",\n stdio: stdio.snapshot(),\n diagnostics: failed\n ? [\n {\n message:\n parsed.message ??\n parsed.run?.stderr ??\n parsed.compile?.stderr ??\n \"Remote execution failed.\",\n severity: \"error\",\n source: language,\n },\n ]\n : [],\n provenance: {\n compile: parsed.compile\n ? { host: hostFromUrl(endpoint), runtime: language, sandbox: \"piston\" }\n : undefined,\n execute: { host: hostFromUrl(endpoint), runtime: language, sandbox: \"piston\" },\n },\n timing: tracker.report(),\n };\n}\n\nfunction parseResponse(text: string): PistonExecuteResponse {\n try {\n return JSON.parse(text) as PistonExecuteResponse;\n } catch {\n return { message: text };\n }\n}\n\nfunction joinEndpoint(endpoint: string, action: string): string {\n const trimmed = endpoint.replace(/\\/+$/, \"\");\n return trimmed.endsWith(action) ? trimmed : `${trimmed}/${action}`;\n}\n\nfunction hostFromUrl(url: string): string {\n try {\n return new URL(url, \"https://code-play.local\").host || url;\n } catch {\n return url;\n }\n}\n","import { StdioBuffer } from \"./stdio\";\nimport { PhaseTracker } from \"./timing\";\nimport type { AdapterRequest, AdapterResult, Diagnostic } from \"./types\";\n\ninterface RustPlaygroundResponse {\n success?: boolean;\n stdout?: string;\n stderr?: string;\n error?: string;\n}\n\nexport async function runRust(\n request: AdapterRequest,\n mode: \"execute\" | \"typecheck\",\n): Promise<AdapterResult> {\n const tracker = new PhaseTracker();\n const stdio = new StdioBuffer(tracker.startedAt);\n const crateType = resolveCrateType(request.code, String(request.config.crateType ?? \"auto\"));\n const body = {\n channel: request.config.channel ?? \"stable\",\n mode: request.config.mode ?? \"debug\",\n edition: String(request.config.edition ?? \"2024\"),\n crateType,\n tests: false,\n code: request.code,\n backtrace: false,\n };\n\n tracker.start(\n mode === \"typecheck\" ? \"typecheck\" : \"compile\",\n mode === \"typecheck\" ? \"Typecheck\" : \"Compile\",\n );\n const response = await request.transport.request({\n url: request.endpoints.rust,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n signal: request.signal,\n });\n tracker.start(\"collect\", \"Collect output\");\n\n const parsed = parseResponse(response.text);\n const diagnostics = parseRustcDiagnostics(parsed.stderr ?? parsed.error ?? \"\");\n if (parsed.stdout) {\n stdio.push(\"stdout\", parsed.stdout);\n }\n if (parsed.stderr) {\n stdio.push(\"stderr\", parsed.stderr);\n }\n if (parsed.error && !parsed.stderr) {\n stdio.push(\"stderr\", parsed.error);\n }\n\n const success = parsed.success === true && response.ok;\n const compileFailed = diagnostics.some((item) => item.severity === \"error\") || !success;\n tracker.stop();\n\n return {\n status: compileFailed ? \"error\" : \"ok\",\n stdio: stdio.snapshot(),\n diagnostics,\n provenance: {\n compile: {\n host: hostFromUrl(request.endpoints.rust),\n runtime: \"rustc\",\n version: String(request.config.channel ?? \"stable\"),\n target: crateType,\n },\n execute:\n mode === \"execute\"\n ? {\n host: hostFromUrl(request.endpoints.rust),\n runtime: \"rust-playground\",\n sandbox: \"playground\",\n }\n : undefined,\n },\n timing: tracker.report(),\n };\n}\n\nfunction resolveCrateType(code: string, configured: string): \"bin\" | \"lib\" {\n if (configured === \"bin\" || configured === \"lib\") {\n return configured;\n }\n return /(?:^|\\b)(?:async\\s+)?fn\\s+main\\s*\\(/.test(code) ? \"bin\" : \"lib\";\n}\n\nfunction parseResponse(text: string): RustPlaygroundResponse {\n try {\n return JSON.parse(text) as RustPlaygroundResponse;\n } catch {\n return { success: false, error: text };\n }\n}\n\nexport function parseRustcDiagnostics(stderr: string): Diagnostic[] {\n const diagnostics: Diagnostic[] = [];\n const pattern = /^(error|warning|note)(?:\\[([^\\]]+)\\])?:\\s+(.*)$/gm;\n for (const match of stderr.matchAll(pattern)) {\n const severity = match[1] === \"warning\" ? \"warning\" : match[1] === \"note\" ? \"info\" : \"error\";\n diagnostics.push({\n message: match[3] ?? \"\",\n severity,\n source: match[2] ? `rustc ${match[2]}` : \"rustc\",\n });\n }\n return diagnostics;\n}\n\nfunction hostFromUrl(url: string): string {\n try {\n return new URL(url, \"https://code-play.local\").host || url;\n } catch {\n return url;\n }\n}\n","/**\n * Conservative TypeScript-to-JavaScript stripper for documentation samples.\n * Full checking goes through tsgo; this path only needs to run the snippet.\n */\nexport function stripTypeScript(code: string): string {\n return code\n .replace(/^\\s*import\\s+type\\s+.*$/gm, \"\")\n .replace(/^\\s*export\\s+type\\s+\\w[\\s\\S]*?;\\s*$/gm, \"\")\n .replace(/^\\s*type\\s+\\w[\\s\\S]*?;\\s*$/gm, \"\")\n .replace(/^\\s*(?:export\\s+)?interface\\s+\\w[\\s\\S]*?\\{[\\s\\S]*?\\n\\}\\s*$/gm, \"\")\n .replace(/\\s+as\\s+const\\b/g, \"\")\n .replace(/\\s+as\\s+[^=,;)\\n]+/g, \"\")\n .replace(/\\s+satisfies\\s+[^=,;)\\n]+/g, \"\")\n .replace(/\\)\\s*:\\s*[^{;=\\n]+/g, \")\")\n .replace(/([?]?)\\s*:\\s*[^,)=;{\\n]+/g, \"$1\");\n}\n","import {\n currentJavaScriptRuntime,\n executeScriptWithRuntime,\n executionRuntimeFromError,\n javascriptRuntimeProvenance,\n} from \"./javascript\";\nimport { hasNodeVm } from \"./runtime-host\";\nimport { isAbortError } from \"./transport\";\nimport { StdioBuffer } from \"./stdio\";\nimport { stripTypeScript } from \"./strip-typescript\";\nimport { PhaseTracker } from \"./timing\";\nimport type { AdapterRequest, AdapterResult, Diagnostic, TransportResponse } from \"./types\";\n\nexport type TypecheckBackend = \"endpoint\" | \"tsgo\" | \"unavailable\";\n\nexport function resolveTypecheckBackend(\n hasVm: boolean,\n typecheckUrl: string | undefined,\n): TypecheckBackend {\n if (typecheckUrl && !hasVm) {\n return \"endpoint\";\n }\n if (!hasVm) {\n return \"unavailable\";\n }\n return \"tsgo\";\n}\n\nexport async function typecheckTypeScript(request: AdapterRequest): Promise<AdapterResult> {\n const tracker = new PhaseTracker();\n tracker.start(\"typecheck\", \"Typecheck\");\n const backend = resolveTypecheckBackend(hasNodeVm(), request.endpoints.typecheck);\n\n if (backend === \"endpoint\") {\n return typecheckViaEndpoint(request, tracker);\n }\n if (backend === \"unavailable\") {\n tracker.stop();\n return {\n status: \"unsupported\",\n stdio: [],\n diagnostics: [\n {\n message:\n \"Typecheck needs a reachable endpoints.typecheck. The Vite /__ox-code-play/typecheck proxy exists only during vite dev.\",\n severity: \"error\",\n source: \"tsgo\",\n },\n ],\n provenance: { compile: { host: \"local\", runtime: \"tsgo\" } },\n timing: tracker.report(),\n };\n }\n\n try {\n const diagnostics = await typecheckWithTsgo(\n request.code,\n String(request.config.tsgoCommand ?? \"tsgo\"),\n );\n tracker.stop();\n return {\n status: diagnostics.some((item) => item.severity === \"error\") ? \"error\" : \"ok\",\n stdio: [],\n diagnostics,\n provenance: { compile: { host: \"local\", runtime: \"tsgo\" } },\n timing: tracker.report(),\n };\n } catch (error) {\n if (isAbortError(error) || request.signal?.aborted) {\n throw error;\n }\n executedRuntime = executionRuntimeFromError(error) ?? executedRuntime;\n tracker.stop();\n const message = error instanceof Error ? error.message : String(error);\n return {\n status: message.includes(\"ENOENT\") ? \"unsupported\" : \"error\",\n stdio: [],\n diagnostics: [\n {\n message: message.includes(\"ENOENT\")\n ? \"tsgo is not available. Install @typescript/native-preview or set languages.typescript.config.tsgoCommand.\"\n : message,\n severity: \"error\",\n source: \"tsgo\",\n },\n ],\n provenance: { compile: { host: \"local\", runtime: \"tsgo\" } },\n timing: tracker.report(),\n };\n }\n}\n\nexport async function runTypeScript(request: AdapterRequest): Promise<AdapterResult> {\n const tracker = new PhaseTracker();\n const stdio = new StdioBuffer(tracker.startedAt);\n tracker.start(\"compile\", \"Strip types\");\n const javascript = stripTypeScript(request.code);\n const runtime = currentJavaScriptRuntime();\n let executedRuntime = runtime;\n tracker.start(\"execute\", \"Execute\");\n try {\n const result = await executeScriptWithRuntime(\n javascript,\n request.timeoutMs,\n stdio,\n request.signal,\n runtime,\n );\n executedRuntime = result.runtime;\n tracker.stop();\n return {\n status: \"ok\",\n stdio: stdio.snapshot(),\n diagnostics: [],\n provenance: {\n compile: { host: \"local\", runtime: \"strip-types\" },\n execute: javascriptRuntimeProvenance(executedRuntime),\n },\n timing: tracker.report(),\n value: result.value === undefined ? undefined : String(result.value),\n };\n } catch (error) {\n if (isAbortError(error) || request.signal?.aborted) {\n throw error;\n }\n tracker.stop();\n const message = error instanceof Error ? error.message : String(error);\n stdio.push(\"stderr\", `${message}\\n`);\n return {\n status: \"error\",\n stdio: stdio.snapshot(),\n diagnostics: [{ message, severity: \"error\", source: \"javascript\" }],\n provenance: {\n compile: { host: \"local\", runtime: \"strip-types\" },\n execute: javascriptRuntimeProvenance(executedRuntime),\n },\n timing: tracker.report(),\n };\n }\n}\n\nasync function typecheckViaEndpoint(\n request: AdapterRequest,\n tracker: PhaseTracker,\n): Promise<AdapterResult> {\n const url = request.endpoints.typecheck ?? \"\";\n const response = await request.transport.request({\n url,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ language: \"typescript\", code: request.code, config: request.config }),\n signal: request.signal,\n });\n tracker.stop();\n return adapterResultFromTypecheckResponse(response, url, tracker);\n}\n\nexport function typecheckEndpointFailureMessage(status: number, text: string): string {\n if (status === 404 || status === 405) {\n return \"Typecheck needs a reachable endpoints.typecheck. The Vite /__ox-code-play/typecheck proxy exists only during vite dev.\";\n }\n const trimmed = text.trim();\n return trimmed || \"Typecheck endpoint failed.\";\n}\n\nexport function adapterResultFromTypecheckResponse(\n response: TransportResponse,\n url: string,\n tracker: PhaseTracker,\n): AdapterResult {\n if (!response.ok) {\n return {\n status: \"error\",\n stdio: [],\n diagnostics: [\n {\n message: typecheckEndpointFailureMessage(response.status, response.text),\n severity: \"error\",\n source: \"tsgo\",\n },\n ],\n provenance: { compile: { host: hostFromUrl(url), runtime: \"tsgo\" } },\n timing: tracker.report(),\n };\n }\n try {\n return JSON.parse(response.text) as AdapterResult;\n } catch {\n return {\n status: \"error\",\n stdio: [],\n diagnostics: [\n {\n message: response.text || \"Typecheck endpoint failed.\",\n severity: \"error\",\n source: \"tsgo\",\n },\n ],\n provenance: { compile: { host: hostFromUrl(url), runtime: \"tsgo\" } },\n timing: tracker.report(),\n };\n }\n}\n\nexport async function typecheckWithTsgo(code: string, command = \"tsgo\"): Promise<Diagnostic[]> {\n const [{ mkdtemp, rm, writeFile }, { tmpdir }, { join }, { execFile }, { promisify }] =\n await Promise.all([\n import(\"node:fs/promises\"),\n import(\"node:os\"),\n import(\"node:path\"),\n import(\"node:child_process\"),\n import(\"node:util\"),\n ]);\n const execFileAsync = promisify(execFile);\n const dir = await mkdtemp(join(tmpdir(), \"ox-code-play-\"));\n const file = join(dir, \"snippet.ts\");\n await writeFile(file, code);\n try {\n await execFileAsync(command, [\"--noEmit\", \"--pretty\", \"false\", \"--strict\", file], {\n cwd: dir,\n maxBuffer: 1024 * 1024,\n });\n return [];\n } catch (error) {\n const output = commandOutput(error);\n if ((error as { code?: string }).code === \"ENOENT\") {\n throw error;\n }\n return parseTsgoOutput(output);\n } finally {\n await rm(dir, { recursive: true, force: true });\n }\n}\n\nexport function parseTsgoOutput(output: string): Diagnostic[] {\n const diagnostics: Diagnostic[] = [];\n const pattern =\n /^(?:.*[\\\\/])?snippet\\.ts\\((\\d+),(\\d+)\\):\\s+(error|warning|info)\\s+TS\\d+:\\s+(.*)$/gm;\n for (const match of output.matchAll(pattern)) {\n diagnostics.push({\n message: match[4] ?? output,\n severity: match[3] === \"warning\" ? \"warning\" : match[3] === \"info\" ? \"info\" : \"error\",\n line: Number(match[1]),\n column: Number(match[2]),\n source: \"tsgo\",\n });\n }\n if (diagnostics.length === 0 && output.trim()) {\n diagnostics.push({ message: output.trim(), severity: \"error\", source: \"tsgo\" });\n }\n return diagnostics;\n}\n\nfunction commandOutput(error: unknown): string {\n if (!error || typeof error !== \"object\") {\n return String(error);\n }\n const value = error as { stdout?: unknown; stderr?: unknown; message?: unknown };\n return [value.stdout, value.stderr, value.message]\n .filter((part): part is string => typeof part === \"string\" && part.trim().length > 0)\n .join(\"\\n\")\n .trim();\n}\n\nfunction hostFromUrl(url: string): string {\n try {\n return new URL(url, \"https://code-play.local\").host || url;\n } catch {\n return url;\n }\n}\n","import { runFramework } from \"./framework\";\nimport { runGo } from \"./go\";\nimport { runJavaScript } from \"./javascript\";\nimport { runRemote } from \"./remote\";\nimport { runRust } from \"./rust\";\nimport { runTypeScript, typecheckTypeScript } from \"./typescript\";\nimport type { AdapterRequest, AdapterResult } from \"./types\";\n\nexport async function executeAdapter(request: AdapterRequest): Promise<AdapterResult> {\n if (!request.enabled.execute) {\n return capabilityDisabled(request, \"execute\");\n }\n switch (request.definition.backend) {\n case \"javascript\":\n return runJavaScript(request);\n case \"typescript\":\n return runTypeScript(request);\n case \"framework\":\n return runFramework(request);\n case \"rust-playground\":\n return runRust(request, \"execute\");\n case \"go-playground\":\n return runGo(request, \"execute\");\n case \"remote\":\n return runRemote(request);\n default:\n return capabilityDisabled(request, \"execute\");\n }\n}\n\nexport async function typecheckAdapter(request: AdapterRequest): Promise<AdapterResult> {\n if (!request.enabled.typecheck || !request.definition.capabilities.typecheck) {\n return capabilityDisabled(request, \"typecheck\");\n }\n switch (request.definition.backend) {\n case \"typescript\":\n return typecheckTypeScript(request);\n case \"rust-playground\":\n return runRust(request, \"typecheck\");\n case \"go-playground\":\n return runGo(request, \"typecheck\");\n default:\n return capabilityDisabled(request, \"typecheck\");\n }\n}\n\nfunction capabilityDisabled(\n request: AdapterRequest,\n action: \"execute\" | \"typecheck\",\n): AdapterResult {\n return {\n status: \"unsupported\",\n stdio: [],\n diagnostics: [\n {\n message: `${request.definition.name} ${action} is not enabled.`,\n severity: \"error\",\n source: \"code-play\",\n },\n ],\n provenance: {},\n timing: { totalMs: 0, phases: [] },\n };\n}\n","import { withStdioText } from \"./stdio\";\nimport { emptyTiming } from \"./timing\";\nimport type { RunResult, RunStatus } from \"./types\";\n\nexport function errorMessage(error: unknown): string {\n return error instanceof Error && error.message ? error.message : String(error);\n}\n\nexport function friendlyTransportMessage(error: unknown): string {\n const message = errorMessage(error);\n const typeError =\n error instanceof TypeError || (error instanceof Error && error.name === \"TypeError\");\n if (\n typeError &&\n /failed to fetch|networkerror|load failed|network request failed/i.test(message)\n ) {\n return \"The executor could not be reached from this page (often CORS). Set endpoints to a host that allows browser POST, or use the Vite dev proxy.\";\n }\n return message;\n}\n\nexport function errorResult(\n message: string,\n source = \"code-play\",\n status: RunStatus = \"error\",\n): RunResult {\n return withStdioText({\n status,\n stdio: [],\n diagnostics: [\n {\n message,\n severity: status === \"cancelled\" ? \"info\" : \"error\",\n source,\n },\n ],\n provenance: {},\n timing: emptyTiming(),\n });\n}\n","import { executeAdapter, typecheckAdapter } from \"./adapters\";\nimport { mergeConfig } from \"./config\";\nimport { friendlyTransportMessage, errorResult } from \"./result\";\nimport { withStdioText } from \"./stdio\";\nimport { isAbortError } from \"./transport\";\nimport type {\n AdapterRequest,\n CodePlayTransport,\n PlaygroundEndpoints,\n ResolvedLanguageEnable,\n RunResult,\n SessionEventMap,\n SessionEventName,\n SessionInput,\n TypeScriptLike,\n} from \"./types\";\nimport type { LanguageDefinition } from \"./types\";\n\ntype Listener<T> = (value: T) => void;\n\nexport class CodePlaySession {\n readonly language: LanguageDefinition;\n code: string;\n config: Record<string, unknown>;\n lastResult: RunResult | undefined;\n\n /** Last run's concatenated stdout (same as `lastResult.stdout`). */\n get stdout(): string {\n return this.lastResult?.stdout ?? \"\";\n }\n\n /** Last run's concatenated stderr (same as `lastResult.stderr`). */\n get stderr(): string {\n return this.lastResult?.stderr ?? \"\";\n }\n\n private readonly enabled: ResolvedLanguageEnable;\n private readonly timeoutMs: number;\n private readonly transport: CodePlayTransport;\n private readonly endpoints: PlaygroundEndpoints;\n private readonly loadTypeScript?: () => Promise<TypeScriptLike | undefined>;\n private readonly listeners = new Map<SessionEventName, Set<Listener<unknown>>>();\n private abort: AbortController | undefined;\n\n constructor(input: SessionConstructorInput) {\n this.language = input.definition;\n this.enabled = input.enabled;\n this.code = input.code;\n this.config = mergeConfig(input.definition.id, input.enabled, input.config);\n this.timeoutMs = input.timeoutMs;\n this.transport = input.transport;\n this.endpoints = input.endpoints;\n this.loadTypeScript = input.loadTypeScript;\n }\n\n on<K extends SessionEventName>(event: K, listener: Listener<SessionEventMap[K]>): () => void {\n const bucket = this.listeners.get(event) ?? new Set();\n bucket.add(listener as Listener<unknown>);\n this.listeners.set(event, bucket);\n return () => bucket.delete(listener as Listener<unknown>);\n }\n\n setCode(code: string): void {\n this.code = code;\n }\n\n setConfig(config: Record<string, unknown>): void {\n this.config = { ...this.config, ...config };\n this.emit(\"config\", this.config);\n }\n\n async run(): Promise<RunResult> {\n return this.dispatch(\"execute\");\n }\n\n async typecheck(): Promise<RunResult> {\n return this.dispatch(\"typecheck\");\n }\n\n cancel(): void {\n this.abort?.abort();\n }\n\n private async dispatch(action: \"execute\" | \"typecheck\"): Promise<RunResult> {\n this.abort?.abort();\n this.abort = new AbortController();\n const { signal } = this.abort;\n const request: AdapterRequest = {\n definition: this.language,\n enabled: this.enabled,\n code: this.code,\n config: this.config,\n timeoutMs: this.timeoutMs,\n transport: this.transport,\n loadTypeScript: this.loadTypeScript,\n endpoints: this.endpoints,\n signal,\n };\n try {\n const result = withStdioText(\n action === \"typecheck\" ? await typecheckAdapter(request) : await executeAdapter(request),\n );\n return this.finish(result);\n } catch (error) {\n if (signal.aborted || isAbortError(error)) {\n return this.finish(errorResult(\"Run cancelled.\", \"code-play\", \"cancelled\"));\n }\n return this.finish(errorResult(friendlyTransportMessage(error)));\n }\n }\n\n private finish(result: RunResult): RunResult {\n this.lastResult = result;\n for (const event of result.stdio) {\n this.emit(\"stdio\", event);\n }\n this.emit(\"result\", result);\n return result;\n }\n\n private emit<K extends SessionEventName>(event: K, value: SessionEventMap[K]): void {\n for (const listener of this.listeners.get(event) ?? []) {\n listener(value);\n }\n }\n}\n\nexport interface SessionConstructorInput extends SessionInput {\n definition: LanguageDefinition;\n enabled: ResolvedLanguageEnable;\n timeoutMs: number;\n transport: CodePlayTransport;\n endpoints: PlaygroundEndpoints;\n loadTypeScript?: () => Promise<TypeScriptLike | undefined>;\n}\n","import { resolveLanguage } from \"./catalog\";\nimport {\n resolveCodePlayOptions,\n type RawCodePlayOptions,\n type ResolvedCodePlayOptions,\n} from \"./config\";\nimport { CodePlaySession } from \"./session\";\nimport { createFetchTransport, createUnavailableTransport } from \"./transport\";\nimport type { CodePlayTransport, SessionInput, TypeScriptLike } from \"./types\";\n\nexport interface CodePlayClientOptions extends RawCodePlayOptions {\n transport?: CodePlayTransport;\n loadTypeScript?: () => Promise<TypeScriptLike | undefined>;\n}\n\nexport interface CodePlayClient {\n readonly options: ResolvedCodePlayOptions;\n createSession(input: SessionInput): CodePlaySession;\n hasLanguage(language: string): boolean;\n}\n\nexport function createCodePlay(options: CodePlayClientOptions = {}): CodePlayClient {\n const resolved = resolveCodePlayOptions(options);\n const transport = options.transport ?? defaultTransport();\n return {\n options: resolved,\n hasLanguage(language: string) {\n const definition = resolveLanguage(language);\n return Boolean(definition && resolved.languages.has(definition.id));\n },\n createSession(input: SessionInput) {\n const definition = resolveLanguage(input.language);\n if (!definition) {\n throw new Error(`Unknown Code Play language: ${input.language}.`);\n }\n const enabled = resolved.languages.get(definition.id);\n if (!enabled) {\n throw new Error(\n `${definition.name} is not enabled. Pass languages.${definition.id}: true to createCodePlay().`,\n );\n }\n return new CodePlaySession({\n ...input,\n definition,\n enabled,\n timeoutMs: resolved.timeoutMs,\n transport,\n endpoints: resolved.endpoints,\n loadTypeScript: options.loadTypeScript,\n });\n },\n };\n}\n\nfunction defaultTransport(): CodePlayTransport {\n if (typeof fetch === \"function\") {\n return createFetchTransport();\n }\n return createUnavailableTransport();\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ox-content/code-play",
3
- "version": "3.0.0-alpha.7",
3
+ "version": "3.0.0-alpha.9",
4
4
  "description": "Opt-in Code Play plugin for on-demand documentation sample execution",
5
5
  "keywords": [
6
6
  "code-play",