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.
- package/README.md +228 -0
- package/dist/fs/default.d.ts +7 -0
- package/dist/fs/default.d.ts.map +1 -0
- package/dist/fs/default.js +21 -0
- package/dist/fs/default.js.map +1 -0
- package/dist/fs/index.d.ts +6 -0
- package/dist/fs/index.d.ts.map +1 -0
- package/dist/fs/index.js +5 -0
- package/dist/fs/index.js.map +1 -0
- package/dist/fs/indexeddb.d.ts +16 -0
- package/dist/fs/indexeddb.d.ts.map +1 -0
- package/dist/fs/indexeddb.js +186 -0
- package/dist/fs/indexeddb.js.map +1 -0
- package/dist/fs/memory.d.ts +41 -0
- package/dist/fs/memory.d.ts.map +1 -0
- package/dist/fs/memory.js +429 -0
- package/dist/fs/memory.js.map +1 -0
- package/dist/fs/path.d.ts +5 -0
- package/dist/fs/path.d.ts.map +1 -0
- package/dist/fs/path.js +56 -0
- package/dist/fs/path.js.map +1 -0
- package/dist/fs/provider-types.d.ts +28 -0
- package/dist/fs/provider-types.d.ts.map +1 -0
- package/dist/fs/provider-types.js +2 -0
- package/dist/fs/provider-types.js.map +1 -0
- package/dist/fs/remote.d.ts +10 -0
- package/dist/fs/remote.d.ts.map +1 -0
- package/dist/fs/remote.js +200 -0
- package/dist/fs/remote.js.map +1 -0
- package/dist/fusion-plan.d.ts +15 -0
- package/dist/fusion-plan.d.ts.map +1 -0
- package/dist/fusion-plan.js +59 -0
- package/dist/fusion-plan.js.map +1 -0
- package/dist/index.d.ts +434 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +619 -0
- package/dist/index.js.map +1 -0
- package/dist/test/node-sync-xhr.d.ts +2 -0
- package/dist/test/node-sync-xhr.d.ts.map +1 -0
- package/dist/test/node-sync-xhr.js +163 -0
- package/dist/test/node-sync-xhr.js.map +1 -0
- package/dist/test/setup.d.ts +2 -0
- package/dist/test/setup.d.ts.map +1 -0
- package/dist/test/setup.js +6 -0
- package/dist/test/setup.js.map +1 -0
- package/dist/webgpu-shims.d.ts +14 -0
- package/dist/webgpu-shims.d.ts.map +1 -0
- package/dist/webgpu-shims.js +85 -0
- package/dist/webgpu-shims.js.map +1 -0
- package/dist/workspace-hover.d.ts +69 -0
- package/dist/workspace-hover.d.ts.map +1 -0
- package/dist/workspace-hover.js +168 -0
- package/dist/workspace-hover.js.map +1 -0
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC"}
|
|
@@ -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
|
+
}
|