@joinezco/codeblock 0.0.8 → 0.0.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.
Files changed (54) hide show
  1. package/dist/assets/fs.worker-DfanUHpQ.js +21 -0
  2. package/dist/assets/{index-MGle_v2x.js → index-BAnLzvMk.js} +1 -1
  3. package/dist/assets/{index-as7ELo0J.js → index-BBC9WDX6.js} +1 -1
  4. package/dist/assets/{index-Dx_VuNNd.js → index-BEXYxRro.js} +1 -1
  5. package/dist/assets/{index-pGm0qkrJ.js → index-BfYmUKH9.js} +1 -1
  6. package/dist/assets/{index-CXFONXS8.js → index-BhaTNAWE.js} +1 -1
  7. package/dist/assets/{index-D5Z27j1C.js → index-CCbYDSng.js} +1 -1
  8. package/dist/assets/{index-Dvu-FFzd.js → index-CIi8tLT6.js} +1 -1
  9. package/dist/assets/{index-C-QhPFHP.js → index-CaANcgI2.js} +1 -1
  10. package/dist/assets/index-CkWzFNzm.js +208 -0
  11. package/dist/assets/{index-N-GE7HTU.js → index-D_XGv9QZ.js} +1 -1
  12. package/dist/assets/{index-DWOBdRjn.js → index-DkmiPfkD.js} +1 -1
  13. package/dist/assets/{index-CGx5MZO7.js → index-DmNlLMQ4.js} +1 -1
  14. package/dist/assets/{index-I0dlv-r3.js → index-DmX_vI7D.js} +1 -1
  15. package/dist/assets/{index-9HdhmM_Y.js → index-DogEEevD.js} +1 -1
  16. package/dist/assets/{index-aEsF5o-7.js → index-DsDl5qZV.js} +1 -1
  17. package/dist/assets/{index-gUUzXNuP.js → index-gAy5mDg-.js} +1 -1
  18. package/dist/assets/{index-CIuq3uTk.js → index-i5qJLB2h.js} +1 -1
  19. package/dist/assets/javascript.worker-ClsyHOLi.js +552 -0
  20. package/dist/e2e/editor.spec.d.ts +1 -0
  21. package/dist/e2e/editor.spec.js +309 -0
  22. package/dist/editor.d.ts +9 -3
  23. package/dist/editor.js +83 -15
  24. package/dist/index.d.ts +3 -0
  25. package/dist/index.html +2 -3
  26. package/dist/index.js +3 -0
  27. package/dist/lsps/typescript.d.ts +3 -1
  28. package/dist/lsps/typescript.js +8 -17
  29. package/dist/panels/footer.d.ts +16 -0
  30. package/dist/panels/footer.js +258 -0
  31. package/dist/panels/toolbar.d.ts +15 -2
  32. package/dist/panels/toolbar.js +528 -115
  33. package/dist/panels/toolbar.test.js +20 -14
  34. package/dist/rpc/transport.d.ts +2 -11
  35. package/dist/rpc/transport.js +19 -35
  36. package/dist/themes/index.js +181 -14
  37. package/dist/themes/vscode.js +3 -2
  38. package/dist/utils/fs.d.ts +15 -3
  39. package/dist/utils/fs.js +85 -6
  40. package/dist/utils/lsp.d.ts +26 -15
  41. package/dist/utils/lsp.js +79 -44
  42. package/dist/utils/search.d.ts +2 -0
  43. package/dist/utils/search.js +13 -4
  44. package/dist/utils/typescript-defaults.d.ts +57 -0
  45. package/dist/utils/typescript-defaults.js +208 -0
  46. package/dist/utils/typescript-defaults.test.d.ts +1 -0
  47. package/dist/utils/typescript-defaults.test.js +197 -0
  48. package/dist/workers/fs.worker.js +14 -18
  49. package/dist/workers/javascript.worker.js +11 -9
  50. package/package.json +4 -3
  51. package/dist/assets/fs.worker-BwEqZcql.ts +0 -109
  52. package/dist/assets/index-C3BnE2cG.js +0 -222
  53. package/dist/assets/javascript.worker-C1zGArKk.js +0 -527
  54. package/dist/snapshot.bin +0 -0
@@ -1,46 +1,43 @@
1
1
  import * as Comlink from "comlink";
2
2
  import { watchOptionsTransferHandler, asyncGeneratorTransferHandler } from '../rpc/serde';
3
3
  import { Snapshot } from "../utils";
4
+ import { fs } from '@joinezco/memfs';
4
5
  Comlink.transferHandlers.set('asyncGenerator', asyncGeneratorTransferHandler);
5
6
  Comlink.transferHandlers.set('watchOptions', watchOptionsTransferHandler);
6
7
  let filesystems = [];
7
8
  export const mount = async ({ buffer, mountPoint = '/' }) => {
8
9
  let filesystem;
9
10
  try {
10
- console.log('Importing memfs after FS mount...');
11
- const { fs } = await import('@joinezco/memfs');
12
- console.log("FS imported");
13
11
  try {
14
12
  if (buffer) {
15
- console.log(`Mounting filesystem snapshot at [${mountPoint}]...`, buffer);
13
+ console.debug(`Mounting filesystem snapshot at [${mountPoint}]...`, buffer);
16
14
  // Convert Node Buffer to ArrayBuffer if needed
17
15
  const uint8 = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);
18
16
  const aligned = uint8.byteOffset === 0 && uint8.byteLength === uint8.buffer.byteLength
19
17
  ? uint8.buffer
20
18
  : uint8.buffer.slice(uint8.byteOffset, uint8.byteOffset + uint8.byteLength);
21
- console.log('Aligned ArrayBuffer:', aligned);
22
19
  await Snapshot.mount(new Uint8Array(aligned), {
23
20
  // @ts-ignore
24
21
  fs,
25
22
  });
26
23
  }
27
24
  else {
28
- console.log('Getting storage directory...');
25
+ console.debug('Getting storage directory...');
29
26
  // const handle = await navigator.storage.getDirectory();
30
- console.log('Got storage directory');
31
- console.log('Attempting to remove directory...');
27
+ console.debug('Got storage directory');
28
+ console.debug('Attempting to remove directory...');
32
29
  try {
33
30
  // TODO: clear storage button
34
31
  // @ts-ignore
35
32
  // await handle.remove({ recursive: true });
36
- console.log('Successfully removed directory');
33
+ console.debug('Successfully removed directory');
37
34
  }
38
35
  catch (removeErr) {
39
36
  console.error('Error removing directory:', removeErr);
40
37
  // Continue anyway, this might not be critical
41
38
  }
42
39
  }
43
- console.log('Returning proxy from worker', fs);
40
+ console.debug('Returning proxy from worker', fs);
44
41
  filesystem = Comlink.proxy({ fs });
45
42
  filesystems.push(filesystem);
46
43
  }
@@ -50,9 +47,9 @@ export const mount = async ({ buffer, mountPoint = '/' }) => {
50
47
  }
51
48
  }
52
49
  catch (e) {
53
- console.error('Error importing memfs:', e);
50
+ console.error('Error using memfs:', e);
54
51
  }
55
- console.log('mounting fs', { buffer, mountPoint });
52
+ console.debug('mounting fs', { buffer, mountPoint });
56
53
  return filesystem;
57
54
  };
58
55
  /**
@@ -63,8 +60,7 @@ export const mount = async ({ buffer, mountPoint = '/' }) => {
63
60
  export const mountFromUrl = async ({ url, mountPoint = '/' }) => {
64
61
  let filesystem;
65
62
  try {
66
- const { fs } = await import('@joinezco/memfs');
67
- console.log(`Loading and mounting filesystem snapshot from URL: ${url} at [${mountPoint}]...`);
63
+ console.debug(`Loading and mounting filesystem snapshot from URL: ${url} at [${mountPoint}]...`);
68
64
  const startTime = performance.now();
69
65
  await Snapshot.loadAndMount(url, {
70
66
  // @ts-ignore
@@ -72,8 +68,8 @@ export const mountFromUrl = async ({ url, mountPoint = '/' }) => {
72
68
  path: mountPoint
73
69
  });
74
70
  const endTime = performance.now();
75
- console.log(`Snapshot loaded and mounted in ${Math.round(endTime - startTime)}ms`);
76
- console.log('Returning proxy from worker', fs);
71
+ console.debug(`Snapshot loaded and mounted in ${Math.round(endTime - startTime)}ms`);
72
+ console.debug('Returning proxy from worker', fs);
77
73
  filesystem = Comlink.proxy({ fs });
78
74
  filesystems.push(filesystem);
79
75
  }
@@ -85,9 +81,9 @@ export const mountFromUrl = async ({ url, mountPoint = '/' }) => {
85
81
  };
86
82
  onconnect = async function (event) {
87
83
  const [port] = event.ports;
88
- console.log('workers/fs connected on port: ', port);
84
+ console.debug('workers/fs connected on port: ', port);
89
85
  port.addEventListener('close', () => {
90
- console.log('fs port closed');
86
+ console.debug('fs port closed');
91
87
  });
92
88
  Comlink.expose({ mount, mountFromUrl }, port);
93
89
  };
@@ -2,19 +2,21 @@ import * as Comlink from 'comlink';
2
2
  import { createLanguageServer } from '../lsps/typescript';
3
3
  import { createConnection } from 'vscode-languageserver/browser';
4
4
  import { BrowserMessageReader, BrowserMessageWriter } from '@volar/language-server/browser';
5
- // TODO: get rid of this
6
- // instead, create language specific workers (with a smarter client)
7
- // i.e typescript.worker.ts / rust.worker.ts / ...
8
5
  onconnect = async (event) => {
9
6
  const [port] = event.ports;
10
- console.debug('LSP worker connected on port: ', port);
11
- const reader = new BrowserMessageReader(port);
12
- const writer = new BrowserMessageWriter(port);
7
+ // Use a MessageChannel to separate Comlink RPC from LSP protocol.
8
+ // Both Comlink and BrowserMessageReader listen on the same port's
9
+ // 'message' event, so Comlink messages get misinterpreted as LSP messages.
10
+ const { port1: lspPort, port2: clientLspPort } = new MessageChannel();
11
+ lspPort.start();
12
+ const reader = new BrowserMessageReader(lspPort);
13
+ const writer = new BrowserMessageWriter(lspPort);
13
14
  const connection = createConnection(reader, writer);
14
15
  connection.listen();
15
- const proxy = async ({ fs }) => {
16
- console.log('creating language server');
17
- await createLanguageServer({ fs, connection });
16
+ const proxy = async (fsProxy, libFiles) => {
17
+ await createLanguageServer({ fs: fsProxy, connection, libFiles });
18
+ // Return the LSP port for the client to use (separate from Comlink port)
19
+ return Comlink.transfer(clientLspPort, [clientLspPort]);
18
20
  };
19
21
  Comlink.expose({ createLanguageServer: proxy }, port);
20
22
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joinezco/codeblock",
3
- "version": "0.0.8",
3
+ "version": "0.0.9",
4
4
  "type": "module",
5
5
  "module": "dist/index.js",
6
6
  "main": "dist/index.js",
@@ -26,6 +26,7 @@
26
26
  "@types/sharedworker": "^0.0.181",
27
27
  "multimatch": "^7.0.0",
28
28
  "process": "^0.11.10",
29
+ "puppeteer-core": "^24.37.5",
29
30
  "tsx": "^4.19.4",
30
31
  "vite": "^7.0.6",
31
32
  "vitest": "^3.2.4"
@@ -58,7 +59,7 @@
58
59
  "@jsonjoy.com/json-pack": "^1.2.0",
59
60
  "@jsonjoy.com/util": "^1.6.0",
60
61
  "@lezer/highlight": "^1.2.1",
61
- "@open-rpc/client-js": "^1.8.1",
62
+ "@m234/nerd-fonts": "^0.5.0",
62
63
  "@typescript/vfs": "^1.6.1",
63
64
  "@uiw/codemirror-theme-vscode": "^4.23.12",
64
65
  "@volar/language-server": "2.4.13",
@@ -82,8 +83,8 @@
82
83
  "vscode-languageserver-protocol": "^3.17.5",
83
84
  "vscode-languageserver-textdocument": "^1.0.12",
84
85
  "vscode-uri": "^3.1.0",
85
- "@marimo-team/codemirror-languageserver": "1.16.0",
86
86
  "@joinezco/jswasi": "0.0.1",
87
+ "@codemirror/lsp-client": "6.2.2",
87
88
  "@joinezco/memfs": "4.23.0"
88
89
  },
89
90
  "scripts": {
@@ -1,109 +0,0 @@
1
- import * as Comlink from "comlink";
2
- import { watchOptionsTransferHandler, asyncGeneratorTransferHandler } from '../rpc/serde';
3
- import { MountArgs, MountResult } from "../types";
4
- import type { SnapshotNode } from '@ezdevlol/memfs/snapshot';
5
- import type { CborUint8Array } from "@jsonjoy.com/json-pack/lib/cbor/types";
6
- import { Snapshot } from "../utils";
7
-
8
- Comlink.transferHandlers.set('asyncGenerator', asyncGeneratorTransferHandler)
9
- Comlink.transferHandlers.set('watchOptions', watchOptionsTransferHandler)
10
-
11
- let filesystems = [];
12
-
13
- export const mount = async ({ buffer, mountPoint = '/' }: MountArgs): Promise<MountResult> => {
14
- let filesystem;
15
-
16
- try {
17
- console.log('Importing memfs after FS mount...');
18
- const { fs } = await import('@ezdevlol/memfs');
19
- console.log("FS imported")
20
-
21
- try {
22
- if (buffer) {
23
- console.log(`Mounting filesystem snapshot at [${mountPoint}]...`, buffer);
24
- // Convert Node Buffer to ArrayBuffer if needed
25
- const uint8 = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);
26
- const aligned = uint8.byteOffset === 0 && uint8.byteLength === uint8.buffer.byteLength
27
- ? uint8.buffer
28
- : uint8.buffer.slice(uint8.byteOffset, uint8.byteOffset + uint8.byteLength);
29
- console.log('Aligned ArrayBuffer:', aligned);
30
-
31
- await Snapshot.mount(new Uint8Array(aligned) as CborUint8Array<SnapshotNode>, {
32
- // @ts-ignore
33
- fs,
34
- });
35
- } else {
36
- console.log('Getting storage directory...');
37
- // const handle = await navigator.storage.getDirectory();
38
- console.log('Got storage directory');
39
-
40
- console.log('Attempting to remove directory...');
41
- try {
42
- // TODO: clear storage button
43
- // @ts-ignore
44
- // await handle.remove({ recursive: true });
45
- console.log('Successfully removed directory');
46
- } catch (removeErr) {
47
- console.error('Error removing directory:', removeErr);
48
- // Continue anyway, this might not be critical
49
- }
50
- }
51
- console.log('Returning proxy from worker', fs);
52
- filesystem = Comlink.proxy({ fs });
53
- filesystems.push(filesystem);
54
- } catch (e) {
55
- console.error('Worker initialization failed with error:', e);
56
- throw e; // Make sure error propagates
57
- }
58
- } catch (e) {
59
- console.error('Error importing memfs:', e);
60
- }
61
- console.log('mounting fs', { buffer, mountPoint });
62
- return filesystem;
63
- }
64
-
65
- /**
66
- * Optimized mount function that loads snapshots directly from URLs.
67
- * This is much more efficient for large snapshots as it avoids transferring
68
- * data through the main thread.
69
- */
70
- export const mountFromUrl = async ({ url, mountPoint = '/' }: {
71
- url: string;
72
- mountPoint?: string;
73
- }): Promise<MountResult> => {
74
- let filesystem;
75
-
76
- try {
77
- const { fs } = await import('@ezdevlol/memfs');
78
-
79
- console.log(`Loading and mounting filesystem snapshot from URL: ${url} at [${mountPoint}]...`);
80
- const startTime = performance.now();
81
- await Snapshot.loadAndMount(url, {
82
- // @ts-ignore
83
- fs,
84
- path: mountPoint
85
- });
86
-
87
- const endTime = performance.now();
88
- console.log(`Snapshot loaded and mounted in ${Math.round(endTime - startTime)}ms`);
89
-
90
- console.log('Returning proxy from worker', fs);
91
- filesystem = Comlink.proxy({ fs });
92
- filesystems.push(filesystem);
93
-
94
- } catch (e) {
95
- console.error('Error loading snapshot from URL:', e);
96
- throw e;
97
- }
98
-
99
- return filesystem;
100
- }
101
-
102
- onconnect = async function (event) {
103
- const [port] = event.ports;
104
- console.log('workers/fs connected on port: ', port);
105
- port.addEventListener('close', () => {
106
- console.log('fs port closed')
107
- });
108
- Comlink.expose({ mount, mountFromUrl }, port);
109
- }