runmat 0.2.7

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/README.md +228 -0
  2. package/dist/fs/default.d.ts +7 -0
  3. package/dist/fs/default.d.ts.map +1 -0
  4. package/dist/fs/default.js +21 -0
  5. package/dist/fs/default.js.map +1 -0
  6. package/dist/fs/index.d.ts +6 -0
  7. package/dist/fs/index.d.ts.map +1 -0
  8. package/dist/fs/index.js +5 -0
  9. package/dist/fs/index.js.map +1 -0
  10. package/dist/fs/indexeddb.d.ts +16 -0
  11. package/dist/fs/indexeddb.d.ts.map +1 -0
  12. package/dist/fs/indexeddb.js +186 -0
  13. package/dist/fs/indexeddb.js.map +1 -0
  14. package/dist/fs/memory.d.ts +41 -0
  15. package/dist/fs/memory.d.ts.map +1 -0
  16. package/dist/fs/memory.js +429 -0
  17. package/dist/fs/memory.js.map +1 -0
  18. package/dist/fs/path.d.ts +5 -0
  19. package/dist/fs/path.d.ts.map +1 -0
  20. package/dist/fs/path.js +56 -0
  21. package/dist/fs/path.js.map +1 -0
  22. package/dist/fs/provider-types.d.ts +28 -0
  23. package/dist/fs/provider-types.d.ts.map +1 -0
  24. package/dist/fs/provider-types.js +2 -0
  25. package/dist/fs/provider-types.js.map +1 -0
  26. package/dist/fs/remote.d.ts +10 -0
  27. package/dist/fs/remote.d.ts.map +1 -0
  28. package/dist/fs/remote.js +200 -0
  29. package/dist/fs/remote.js.map +1 -0
  30. package/dist/fusion-plan.d.ts +15 -0
  31. package/dist/fusion-plan.d.ts.map +1 -0
  32. package/dist/fusion-plan.js +59 -0
  33. package/dist/fusion-plan.js.map +1 -0
  34. package/dist/index.d.ts +434 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +619 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/test/node-sync-xhr.d.ts +2 -0
  39. package/dist/test/node-sync-xhr.d.ts.map +1 -0
  40. package/dist/test/node-sync-xhr.js +163 -0
  41. package/dist/test/node-sync-xhr.js.map +1 -0
  42. package/dist/test/setup.d.ts +2 -0
  43. package/dist/test/setup.d.ts.map +1 -0
  44. package/dist/test/setup.js +6 -0
  45. package/dist/test/setup.js.map +1 -0
  46. package/dist/webgpu-shims.d.ts +14 -0
  47. package/dist/webgpu-shims.d.ts.map +1 -0
  48. package/dist/webgpu-shims.js +85 -0
  49. package/dist/webgpu-shims.js.map +1 -0
  50. package/dist/workspace-hover.d.ts +69 -0
  51. package/dist/workspace-hover.d.ts.map +1 -0
  52. package/dist/workspace-hover.js +168 -0
  53. package/dist/workspace-hover.js.map +1 -0
  54. package/package.json +62 -0
@@ -0,0 +1,163 @@
1
+ import { Buffer } from "node:buffer";
2
+ import { MessageChannel, receiveMessageOnPort, Worker } from "node:worker_threads";
3
+ export function installNodeSyncXhr() {
4
+ if (typeof globalThis.XMLHttpRequest !== "undefined") {
5
+ return;
6
+ }
7
+ globalThis.XMLHttpRequest = NodeSyncXmlHttpRequest;
8
+ }
9
+ class NodeSyncXmlHttpRequest {
10
+ responseType = "";
11
+ response = null;
12
+ responseText = "";
13
+ status = 0;
14
+ statusText = "";
15
+ timeout = 0;
16
+ method = "GET";
17
+ url = "";
18
+ headers = new Map();
19
+ open(method, url, async = true) {
20
+ if (async) {
21
+ throw new Error("NodeSyncXmlHttpRequest only supports synchronous requests");
22
+ }
23
+ this.method = method;
24
+ this.url = url;
25
+ }
26
+ setRequestHeader(name, value) {
27
+ this.headers.set(name, value);
28
+ }
29
+ abort() {
30
+ // Synchronous shim – abort is a no-op.
31
+ }
32
+ send(body) {
33
+ if (!this.url) {
34
+ throw new Error("XMLHttpRequest: open() must be called before send()");
35
+ }
36
+ const worker = ensureWorker();
37
+ const { port1, port2 } = new MessageChannel();
38
+ const flag = new Int32Array(new SharedArrayBuffer(4));
39
+ const payload = {
40
+ method: this.method,
41
+ url: this.url,
42
+ headers: Array.from(this.headers.entries()),
43
+ responseType: this.responseType,
44
+ timeout: this.timeout,
45
+ body: encodeBody(body)
46
+ };
47
+ worker.postMessage({
48
+ port: port2,
49
+ flag: flag.buffer,
50
+ request: payload
51
+ }, [port2]);
52
+ const waitMs = this.timeout && this.timeout > 0 ? this.timeout : undefined;
53
+ const waitResult = Atomics.wait(flag, 0, 0, waitMs);
54
+ if (waitResult === "timed-out") {
55
+ port1.close();
56
+ throw new Error("timeout");
57
+ }
58
+ const message = receiveMessageOnPort(port1);
59
+ port1.close();
60
+ if (!message?.message) {
61
+ throw new Error("sync xhr worker produced no response");
62
+ }
63
+ const result = message.message;
64
+ if (!result.ok) {
65
+ throw new Error(result.error || "remote fs http error");
66
+ }
67
+ this.status = result.status;
68
+ this.statusText = result.statusText;
69
+ const buffer = Buffer.from(result.body, "base64");
70
+ if (this.responseType === "arraybuffer") {
71
+ const slice = buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength);
72
+ this.response = slice;
73
+ this.responseText = "";
74
+ }
75
+ else if (this.responseType === "json") {
76
+ const text = buffer.toString("utf8");
77
+ this.responseText = text;
78
+ this.response = text.length ? JSON.parse(text) : null;
79
+ }
80
+ else {
81
+ this.responseText = buffer.toString("utf8");
82
+ this.response = this.responseText;
83
+ }
84
+ }
85
+ }
86
+ function encodeBody(body) {
87
+ if (!body) {
88
+ return "";
89
+ }
90
+ if (typeof body === "string") {
91
+ return Buffer.from(body, "utf8").toString("base64");
92
+ }
93
+ if (body instanceof ArrayBuffer) {
94
+ return Buffer.from(body).toString("base64");
95
+ }
96
+ return Buffer.from(body.buffer, body.byteOffset, body.byteLength).toString("base64");
97
+ }
98
+ let workerInstance = null;
99
+ function ensureWorker() {
100
+ if (workerInstance) {
101
+ return workerInstance;
102
+ }
103
+ workerInstance = new Worker(syncWorkerSource, { eval: true });
104
+ workerInstance.on("error", (err) => {
105
+ console.error("[runmat:test] sync xhr worker error:", err);
106
+ });
107
+ workerInstance.on("exit", (code) => {
108
+ if (code !== 0) {
109
+ console.error("[runmat:test] sync xhr worker exited with code", code);
110
+ }
111
+ });
112
+ workerInstance.unref();
113
+ return workerInstance;
114
+ }
115
+ const syncWorkerSource = `
116
+ const { parentPort } = require("node:worker_threads");
117
+ const { Buffer } = require("node:buffer");
118
+
119
+ const fetchImpl = globalThis.fetch || require("node-fetch");
120
+
121
+ parentPort.on("message", async (message) => {
122
+ const flag = new Int32Array(message.flag);
123
+ const port = message.port;
124
+ const req = message.request;
125
+ const headers = {};
126
+ for (const [key, value] of req.headers) {
127
+ headers[key] = value;
128
+ }
129
+ const controller = req.timeout ? new AbortController() : null;
130
+ const timer = req.timeout
131
+ ? setTimeout(() => controller.abort(), req.timeout)
132
+ : null;
133
+ try {
134
+ const response = await fetchImpl(req.url, {
135
+ method: req.method,
136
+ headers,
137
+ body: req.body ? Buffer.from(req.body, "base64") : undefined,
138
+ signal: controller ? controller.signal : undefined
139
+ });
140
+ const arrayBuffer = await response.arrayBuffer();
141
+ const buffer = Buffer.from(arrayBuffer);
142
+ port.postMessage({
143
+ ok: true,
144
+ status: response.status,
145
+ statusText: response.statusText,
146
+ body: buffer.toString("base64")
147
+ });
148
+ } catch (error) {
149
+ port.postMessage({
150
+ ok: false,
151
+ error: error && error.message ? error.message : String(error)
152
+ });
153
+ } finally {
154
+ if (timer) {
155
+ clearTimeout(timer);
156
+ }
157
+ Atomics.store(flag, 0, 1);
158
+ Atomics.notify(flag, 0);
159
+ port.close();
160
+ }
161
+ });
162
+ `;
163
+ //# sourceMappingURL=node-sync-xhr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-sync-xhr.js","sourceRoot":"","sources":["../../src/test/node-sync-xhr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import "fake-indexeddb/auto";
2
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import "fake-indexeddb/auto";
2
+ import { installNodeSyncXhr } from "./node-sync-xhr.js";
3
+ if (typeof process !== "undefined" && process.versions?.node) {
4
+ installNodeSyncXhr();
5
+ }
6
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC7D,kBAAkB,EAAE,CAAC;AACvB,CAAC"}
@@ -0,0 +1,14 @@
1
+ type AnyObject = Record<string, unknown>;
2
+ declare global {
3
+ interface AnyGPUAdapter extends AnyObject {
4
+ requestDevice(descriptor?: AnyObject): Promise<unknown>;
5
+ __runmatShimmed?: boolean;
6
+ }
7
+ }
8
+ export declare function installWebGpuCompatibilityShims(): void;
9
+ declare function patchDeviceDescriptor(descriptor?: AnyObject): AnyObject | undefined;
10
+ export declare const __internals: {
11
+ patchDeviceDescriptor: typeof patchDeviceDescriptor;
12
+ };
13
+ export {};
14
+ //# sourceMappingURL=webgpu-shims.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webgpu-shims.d.ts","sourceRoot":"","sources":["../src/webgpu-shims.ts"],"names":[],"mappings":"AAuBA,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEzC,OAAO,CAAC,MAAM,CAAC;IAEb,UAAU,aAAc,SAAQ,SAAS;QACvC,aAAa,CAAC,UAAU,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QACxD,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B;CACF;AAED,wBAAgB,+BAA+B,IAAI,IAAI,CAoBtD;AAgBD,iBAAS,qBAAqB,CAAC,UAAU,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAoB5E;AASD,eAAO,MAAM,WAAW;;CAEvB,CAAC"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Temporary WebGPU compatibility shim.
3
+ *
4
+ * Why: wgpu 0.19 now requests the spec-compliant limit
5
+ * `maxInterStageShaderComponents`, but Chrome/Safari stable (as of Dec 2025,
6
+ * Chrome M131 / Safari 18) still only accept the legacy Dawn limit name
7
+ * `maxInterStageShaderVariables`. When the new field is present, the browser
8
+ * rejects every `GPUAdapter.requestDevice` call and hardware acceleration
9
+ * fails entirely.
10
+ *
11
+ * What: we intercept `navigator.gpu.requestAdapter`, wrap the resulting
12
+ * adapters' `requestDevice`, and rewrite `requiredLimits` so the legacy field
13
+ * is populated and the new one is omitted. Once the host browsers accept the
14
+ * renamed limit, this shim becomes a no-op.
15
+ *
16
+ * Removal plan: delete this file (and its import in `index.ts`) after Chrome
17
+ * stable and Safari release builds ship support for
18
+ * `maxInterStageShaderComponents` (Chrome M132+ / a Safari build that includes
19
+ * the same Dawn roll). Track via browser release notes or by observing that
20
+ * production Chrome no longer throws during `requestDevice`.
21
+ */
22
+ let installed = false;
23
+ export function installWebGpuCompatibilityShims() {
24
+ if (installed) {
25
+ return;
26
+ }
27
+ installed = true;
28
+ if (typeof navigator === "undefined") {
29
+ return;
30
+ }
31
+ const gpu = navigator.gpu;
32
+ if (!gpu || typeof gpu.requestAdapter !== "function") {
33
+ return;
34
+ }
35
+ const originalRequestAdapter = gpu.requestAdapter.bind(gpu);
36
+ gpu.requestAdapter = async function (...args) {
37
+ const adapter = (await originalRequestAdapter(...args));
38
+ if (adapter && typeof adapter.requestDevice === "function" && !adapter.__runmatShimmed) {
39
+ shimAdapter(adapter);
40
+ }
41
+ return adapter;
42
+ };
43
+ }
44
+ function shimAdapter(adapter) {
45
+ const originalRequestDevice = adapter.requestDevice.bind(adapter);
46
+ adapter.requestDevice = function (descriptor) {
47
+ const patched = patchDeviceDescriptor(descriptor);
48
+ return originalRequestDevice(patched);
49
+ };
50
+ Object.defineProperty(adapter, "__runmatShimmed", {
51
+ value: true,
52
+ configurable: true,
53
+ enumerable: false,
54
+ writable: false
55
+ });
56
+ }
57
+ function patchDeviceDescriptor(descriptor) {
58
+ if (!descriptor || typeof descriptor !== "object") {
59
+ return descriptor;
60
+ }
61
+ const requiredLimits = cloneLimits(descriptor.requiredLimits);
62
+ if (!requiredLimits) {
63
+ return descriptor;
64
+ }
65
+ if (typeof requiredLimits.maxInterStageShaderComponents === "number" &&
66
+ typeof requiredLimits.maxInterStageShaderVariables === "undefined") {
67
+ requiredLimits.maxInterStageShaderVariables = requiredLimits.maxInterStageShaderComponents;
68
+ delete requiredLimits.maxInterStageShaderComponents;
69
+ return {
70
+ ...descriptor,
71
+ requiredLimits
72
+ };
73
+ }
74
+ return descriptor;
75
+ }
76
+ function cloneLimits(limits) {
77
+ if (!limits || typeof limits !== "object") {
78
+ return null;
79
+ }
80
+ return { ...limits };
81
+ }
82
+ export const __internals = {
83
+ patchDeviceDescriptor
84
+ };
85
+ //# sourceMappingURL=webgpu-shims.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webgpu-shims.js","sourceRoot":"","sources":["../src/webgpu-shims.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,IAAI,SAAS,GAAG,KAAK,CAAC;AAYtB,MAAM,UAAU,+BAA+B;IAC7C,IAAI,SAAS,EAAE,CAAC;QACd,OAAO;IACT,CAAC;IACD,SAAS,GAAG,IAAI,CAAC;IACjB,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE,CAAC;QACrC,OAAO;IACT,CAAC;IACD,MAAM,GAAG,GAAI,SAAkC,CAAC,GAA4B,CAAC;IAC7E,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,CAAC,cAAc,KAAK,UAAU,EAAE,CAAC;QACrD,OAAO;IACT,CAAC;IACD,MAAM,sBAAsB,GAAG,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5D,GAAG,CAAC,cAAc,GAAG,KAAK,WAAW,GAAG,IAAe;QACrD,MAAM,OAAO,GAAG,CAAC,MAAM,sBAAsB,CAAC,GAAG,IAAI,CAAC,CAAyB,CAAC;QAChF,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,aAAa,KAAK,UAAU,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;YACvF,WAAW,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,OAAsB;IACzC,MAAM,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClE,OAAO,CAAC,aAAa,GAAG,UAAU,UAAsB;QACtD,MAAM,OAAO,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;QAClD,OAAO,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC;IACF,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,iBAAiB,EAAE;QAChD,KAAK,EAAE,IAAI;QACX,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,KAAK;QACjB,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,qBAAqB,CAAC,UAAsB;IACnD,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QAClD,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,MAAM,cAAc,GAAG,WAAW,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IAC9D,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IACE,OAAO,cAAc,CAAC,6BAA6B,KAAK,QAAQ;QAChE,OAAO,cAAc,CAAC,4BAA4B,KAAK,WAAW,EAClE,CAAC;QACD,cAAc,CAAC,4BAA4B,GAAG,cAAc,CAAC,6BAA6B,CAAC;QAC3F,OAAO,cAAc,CAAC,6BAA6B,CAAC;QACpD,OAAO;YACL,GAAG,UAAU;YACb,cAAc;SACf,CAAC;IACJ,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,WAAW,CAAC,MAAe;IAClC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,EAAE,GAAI,MAAoB,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,qBAAqB;CACtB,CAAC"}
@@ -0,0 +1,69 @@
1
+ import type { MaterializedVariable, RunMatSessionHandle, WorkspaceEntry, WorkspaceSnapshot } from "./index.js";
2
+ type Disposable = {
3
+ dispose(): void;
4
+ };
5
+ type HoverContent = {
6
+ value: string;
7
+ };
8
+ type HoverResult = {
9
+ contents: HoverContent[];
10
+ } | null;
11
+ type HoverProvider = {
12
+ provideHover(model: TextModel, position: Position): HoverResult | Promise<HoverResult>;
13
+ };
14
+ type HoverRegistration = (languageId: string, provider: HoverProvider) => Disposable;
15
+ type WordInfo = {
16
+ word: string;
17
+ } | null;
18
+ type TextModel = {
19
+ getWordAtPosition(position: Position): WordInfo;
20
+ };
21
+ type Position = {
22
+ lineNumber: number;
23
+ column: number;
24
+ };
25
+ export interface WorkspaceHoverOptions {
26
+ monaco: {
27
+ languages: {
28
+ registerHoverProvider: HoverRegistration;
29
+ };
30
+ };
31
+ language?: string;
32
+ session?: RunMatSessionHandle;
33
+ previewLimit?: number;
34
+ formatter?: (state: HoverFormatState) => string;
35
+ }
36
+ export interface HoverFormatState {
37
+ name: string;
38
+ entry: WorkspaceEntry;
39
+ materialized?: MaterializedVariable;
40
+ previewFromMaterialize: boolean;
41
+ }
42
+ export interface WorkspaceHoverController {
43
+ updateWorkspace(snapshot: WorkspaceSnapshot): void;
44
+ dispose(): void;
45
+ }
46
+ declare class WorkspaceMetadataStore {
47
+ private entries;
48
+ private version;
49
+ private materializedByToken;
50
+ private pending;
51
+ applySnapshot(snapshot: WorkspaceSnapshot): void;
52
+ getEntry(name: string): WorkspaceEntry | undefined;
53
+ clear(): void;
54
+ ensureMaterialized(entry: WorkspaceEntry, session: RunMatSessionHandle, previewLimit: number | undefined): Promise<MaterializedVariable | undefined>;
55
+ }
56
+ declare function formatShape(shape: number[]): string;
57
+ declare function formatBytes(size: number): string;
58
+ declare function formatPreview(values: number[], truncated: boolean): string;
59
+ declare function formatNumber(value: number): string;
60
+ export declare function createWorkspaceHoverProvider(options: WorkspaceHoverOptions): WorkspaceHoverController;
61
+ export declare const __internals: {
62
+ WorkspaceMetadataStore: typeof WorkspaceMetadataStore;
63
+ formatShape: typeof formatShape;
64
+ formatBytes: typeof formatBytes;
65
+ formatPreview: typeof formatPreview;
66
+ formatNumber: typeof formatNumber;
67
+ };
68
+ export {};
69
+ //# sourceMappingURL=workspace-hover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-hover.d.ts","sourceRoot":"","sources":["../src/workspace-hover.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/G,KAAK,UAAU,GAAG;IAAE,OAAO,IAAI,IAAI,CAAA;CAAE,CAAC;AAEtC,KAAK,YAAY,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC,KAAK,WAAW,GAAG;IAAE,QAAQ,EAAE,YAAY,EAAE,CAAA;CAAE,GAAG,IAAI,CAAC;AAEvD,KAAK,aAAa,GAAG;IACnB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACxF,CAAC;AAEF,KAAK,iBAAiB,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,KAAK,UAAU,CAAC;AAErF,KAAK,QAAQ,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC;AAExC,KAAK,SAAS,GAAG;IACf,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAAC;CACjD,CAAC;AAEF,KAAK,QAAQ,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE;QAAE,SAAS,EAAE;YAAE,qBAAqB,EAAE,iBAAiB,CAAA;SAAE,CAAA;KAAE,CAAC;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,MAAM,CAAC;CACjD;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,CAAC;IACtB,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,sBAAsB,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,wBAAwB;IACvC,eAAe,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACnD,OAAO,IAAI,IAAI,CAAC;CACjB;AAYD,cAAM,sBAAsB;IAC1B,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,mBAAmB,CAAyC;IACpE,OAAO,CAAC,OAAO,CAAgE;IAE/E,aAAa,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAwBhD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAIlD,KAAK,IAAI,IAAI;IAMP,kBAAkB,CACtB,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,mBAAmB,EAC5B,YAAY,EAAE,MAAM,GAAG,SAAS,GAC/B,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;CA2B7C;AA2BD,iBAAS,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAK5C;AAED,iBAAS,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYzC;AAED,iBAAS,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,CAInE;AAED,iBAAS,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ3C;AAID,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,qBAAqB,GAAG,wBAAwB,CA4CrG;AAED,eAAO,MAAM,WAAW;;;;;;CAMvB,CAAC"}
@@ -0,0 +1,168 @@
1
+ class WorkspaceMetadataStore {
2
+ entries = new Map();
3
+ version = 0;
4
+ materializedByToken = new Map();
5
+ pending = new Map();
6
+ applySnapshot(snapshot) {
7
+ if (snapshot.full || snapshot.version > this.version) {
8
+ if (snapshot.full) {
9
+ this.entries.clear();
10
+ this.materializedByToken.clear();
11
+ this.pending.clear();
12
+ }
13
+ this.version = snapshot.version;
14
+ }
15
+ for (const value of snapshot.values) {
16
+ const existing = this.entries.get(value.name);
17
+ if (existing?.entry.previewToken && existing.entry.previewToken !== value.previewToken) {
18
+ this.materializedByToken.delete(existing.entry.previewToken);
19
+ this.pending.delete(existing.entry.previewToken);
20
+ }
21
+ if (!value.previewToken) {
22
+ this.materializedByToken.delete(value.name);
23
+ this.pending.delete(value.name);
24
+ }
25
+ this.entries.set(value.name, { entry: value });
26
+ }
27
+ }
28
+ getEntry(name) {
29
+ return this.entries.get(name)?.entry;
30
+ }
31
+ clear() {
32
+ this.entries.clear();
33
+ this.materializedByToken.clear();
34
+ this.pending.clear();
35
+ }
36
+ async ensureMaterialized(entry, session, previewLimit) {
37
+ const token = entry.previewToken ?? entry.name;
38
+ const cached = this.materializedByToken.get(token);
39
+ if (cached) {
40
+ return cached.value;
41
+ }
42
+ const pending = this.pending.get(token);
43
+ if (pending) {
44
+ return pending;
45
+ }
46
+ const selector = entry.previewToken ? { previewToken: entry.previewToken } : { name: entry.name };
47
+ const resolver = session
48
+ .materializeVariable(selector, previewLimit ? { limit: previewLimit } : undefined)
49
+ .then((value) => {
50
+ if (value) {
51
+ this.materializedByToken.set(token, { token: entry.previewToken, name: entry.name, value });
52
+ }
53
+ this.pending.delete(token);
54
+ return value;
55
+ })
56
+ .catch(() => {
57
+ this.pending.delete(token);
58
+ return undefined;
59
+ });
60
+ this.pending.set(token, resolver);
61
+ return resolver;
62
+ }
63
+ }
64
+ function defaultFormatter(state) {
65
+ const { name, entry, materialized, previewFromMaterialize } = state;
66
+ const lines = [];
67
+ lines.push(`**${name}**`);
68
+ const dtype = entry.dtype ? ` (${entry.dtype})` : "";
69
+ lines.push(`Class: \`${entry.className}\`${dtype}`);
70
+ if (entry.shape && entry.shape.length > 0) {
71
+ lines.push(`Shape: ${formatShape(entry.shape)}`);
72
+ }
73
+ else {
74
+ lines.push("Shape: 1×1");
75
+ }
76
+ lines.push(`Residency: ${entry.residency ?? (entry.isGpu ? "gpu" : "cpu")}`);
77
+ if (entry.sizeBytes != null) {
78
+ lines.push(`Size: ${formatBytes(entry.sizeBytes)}`);
79
+ }
80
+ const preview = materialized?.preview ?? entry.preview;
81
+ if (preview && preview.values.length > 0) {
82
+ const previewLabel = previewFromMaterialize ? "Preview (materialized)" : "Preview";
83
+ lines.push(`${previewLabel}: ${formatPreview(preview.values, preview.truncated)}`);
84
+ }
85
+ return lines.join("\n\n");
86
+ }
87
+ function formatShape(shape) {
88
+ if (!shape.length) {
89
+ return "1×1";
90
+ }
91
+ return shape.join("×");
92
+ }
93
+ function formatBytes(size) {
94
+ if (size < 1024) {
95
+ return `${size} B`;
96
+ }
97
+ const units = ["KB", "MB", "GB", "TB"];
98
+ let value = size / 1024;
99
+ let unitIndex = 0;
100
+ while (value >= 1024 && unitIndex < units.length - 1) {
101
+ value /= 1024;
102
+ unitIndex++;
103
+ }
104
+ return `${value.toFixed(1)} ${units[unitIndex]}`;
105
+ }
106
+ function formatPreview(values, truncated) {
107
+ const formatted = values.slice(0, 8).map((value) => formatNumber(value));
108
+ const suffix = truncated || values.length > 8 ? " …" : "";
109
+ return `[${formatted.join(", ")}${suffix}]`;
110
+ }
111
+ function formatNumber(value) {
112
+ if (!Number.isFinite(value)) {
113
+ return value.toString();
114
+ }
115
+ if (Math.abs(value) >= 1 || value === 0) {
116
+ return value.toFixed(4).replace(/0+$/, "").replace(/\.$/, "");
117
+ }
118
+ return value.toExponential(2);
119
+ }
120
+ const IDENTIFIER_REGEX = /^[A-Za-z_][A-Za-z0-9_]*$/;
121
+ export function createWorkspaceHoverProvider(options) {
122
+ const language = options.language ?? "matlab";
123
+ const formatter = options.formatter ?? defaultFormatter;
124
+ const previewLimit = options.previewLimit;
125
+ const store = new WorkspaceMetadataStore();
126
+ const disposable = options.monaco.languages.registerHoverProvider(language, {
127
+ provideHover: async (model, position) => {
128
+ const wordInfo = model.getWordAtPosition(position);
129
+ if (!wordInfo || !wordInfo.word || !IDENTIFIER_REGEX.test(wordInfo.word)) {
130
+ return null;
131
+ }
132
+ const entry = store.getEntry(wordInfo.word);
133
+ if (!entry) {
134
+ return null;
135
+ }
136
+ let materialized;
137
+ let previewFromMaterialize = false;
138
+ if (options.session && (!entry.preview || entry.preview.truncated)) {
139
+ materialized = await store.ensureMaterialized(entry, options.session, previewLimit);
140
+ previewFromMaterialize = Boolean(materialized);
141
+ }
142
+ const value = formatter({
143
+ name: wordInfo.word,
144
+ entry,
145
+ materialized,
146
+ previewFromMaterialize,
147
+ });
148
+ return { contents: [{ value }] };
149
+ },
150
+ });
151
+ return {
152
+ updateWorkspace(snapshot) {
153
+ store.applySnapshot(snapshot);
154
+ },
155
+ dispose() {
156
+ store.clear();
157
+ disposable.dispose();
158
+ },
159
+ };
160
+ }
161
+ export const __internals = {
162
+ WorkspaceMetadataStore,
163
+ formatShape,
164
+ formatBytes,
165
+ formatPreview,
166
+ formatNumber,
167
+ };
168
+ //# sourceMappingURL=workspace-hover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-hover.js","sourceRoot":"","sources":["../src/workspace-hover.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "runmat",
3
+ "version": "0.2.7",
4
+ "description": "Blazing fast runtime for math. Run MATLAB code on CPU or GPU.",
5
+ "type": "module",
6
+ "license": "SEE LICENSE IN ../../LICENSE.md",
7
+ "homepage": "https://runmat.org",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/runmat-org/runmat"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/runmat-org/runmat/issues"
14
+ },
15
+ "main": "./dist/index.js",
16
+ "module": "./dist/index.js",
17
+ "types": "./dist/index.d.ts",
18
+ "files": [
19
+ "dist",
20
+ "pkg",
21
+ "artifacts",
22
+ "README.md"
23
+ ],
24
+ "scripts": {
25
+ "clean": "rimraf dist pkg pkg-web ../../crates/runmat-wasm/pkg ../../crates/runmat-wasm/pkg-web",
26
+ "build:registry": "RUNMAT_GENERATE_WASM_REGISTRY=1 cargo check -p runmat-runtime --target wasm32-unknown-unknown",
27
+ "build:wasm": "wasm-pack build ../../crates/runmat-wasm --target bundler --out-dir ../../bindings/ts/pkg --out-name runmat_wasm --release",
28
+ "build:wasm:web": "wasm-pack build ../../crates/runmat-wasm --target web --out-dir ../../bindings/ts/pkg-web --out-name runmat_wasm_web --release",
29
+ "build:types": "tsc -p tsconfig.json",
30
+ "build": "npm run clean && npm run build:registry && npm run build:wasm && npm run build:wasm:web && npm run build:types",
31
+ "ci": "npm run build && npm run lint && npm test && cargo check -p runmat-wasm --target wasm32-unknown-unknown",
32
+ "lint": "tsc --noEmit",
33
+ "test": "vitest run",
34
+ "prepublishOnly": "npm run build"
35
+ },
36
+ "exports": {
37
+ ".": {
38
+ "types": "./dist/index.d.ts",
39
+ "import": "./dist/index.js"
40
+ },
41
+ "./fs": {
42
+ "types": "./dist/fs/index.d.ts",
43
+ "import": "./dist/fs/index.js"
44
+ },
45
+ "./fs/*": {
46
+ "types": "./dist/fs/*.d.ts",
47
+ "import": "./dist/fs/*.js"
48
+ },
49
+ "./pkg/*": "./pkg/*"
50
+ },
51
+ "sideEffects": false,
52
+ "engines": {
53
+ "node": ">=18"
54
+ },
55
+ "devDependencies": {
56
+ "@types/node": "^22.10.1",
57
+ "fake-indexeddb": "^6.0.1",
58
+ "rimraf": "^5.0.7",
59
+ "typescript": "^5.6.3",
60
+ "vitest": "^2.1.4"
61
+ }
62
+ }