diff --git a/src/lang/wasm.ts b/src/lang/wasm.ts index 32653b2b0..3555daac2 100644 --- a/src/lang/wasm.ts +++ b/src/lang/wasm.ts @@ -25,6 +25,7 @@ import { AppInfo } from 'wasm-lib/kcl/bindings/AppInfo' import { CoreDumpManager } from 'lib/coredump' import openWindow from 'lib/openWindow' import { DefaultPlanes } from 'wasm-lib/kcl/bindings/DefaultPlanes' +import { rangeTypeFix } from 'lang/workers/types' export type { Program } from '../wasm-lib/kcl/bindings/Program' export type { Value } from '../wasm-lib/kcl/bindings/Value' @@ -103,9 +104,6 @@ const initialise = async () => { export const initPromise = initialise() -export const rangeTypeFix = (ranges: number[][]): [number, number][] => - ranges.map(([start, end]) => [start, end]) - export const parse = (code: string): Program => { try { const program: Program = parse_wasm(code) diff --git a/src/lang/workers/parser.ts b/src/lang/workers/parser.ts index e5e139bb0..e8370d6fc 100644 --- a/src/lang/workers/parser.ts +++ b/src/lang/workers/parser.ts @@ -1,11 +1,14 @@ -import { fileSystemManager } from 'lang/std/fileSystemManager' -import init, {parse_wasm -} from 'wasm-lib/pkg/wasm_lib' -import * as jsrpc from 'json-rpc-2.0' +import init, { parse_wasm } from 'wasm-lib/pkg/wasm_lib' import { Program } from 'lang/wasm' import { KclError as RustKclError } from 'wasm-lib/kcl/bindings/KclError' import { KCLError } from 'lang/errors' -import { WasmWorkerEventType, WasmWorkerEvent, WasmWorkerOptions } from './types' +import { + WasmWorkerEventType, + WasmWorkerEvent, + WasmWorkerOptions, + ParserWorkerCall, + rangeTypeFix, +} from 'lang/workers/types' // Initialise the wasm module. const initialise = async (wasmUrl: string) => { @@ -14,25 +17,6 @@ const initialise = async (wasmUrl: string) => { return init(buffer) } -export const rangeTypeFix = (ranges: number[][]): [number, number][] => - ranges.map(([start, end]) => [start, end]) - -export const parse = (code: string): Program => { - try { - const program: Program = parse_wasm(code) - return program - } catch (e: any) { - const parsed: RustKclError = JSON.parse(e.toString()) - const kclError = new KCLError( - parsed.kind, - parsed.msg, - rangeTypeFix(parsed.sourceRanges) - ) - - console.log(kclError) - throw kclError - } -} onmessage = function (event) { const { worker, eventType, eventData }: WasmWorkerEvent = event.data @@ -48,19 +32,22 @@ onmessage = function (event) { }) break case WasmWorkerEventType.Call: - const data = eventData as Uint8Array - intoServer.enqueue(data) - const json: jsrpc.JSONRPCRequest = Codec.decode(data) - if (null != json.id) { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - fromServer.responses.get(json.id)!.then((response) => { - const encoded = Codec.encode(response as jsrpc.JSONRPCResponse) - postMessage(encoded) - }) + const data = eventData as ParserWorkerCall + try { + const program: Program = parse_wasm(data.code) + postMessage(program) + } catch (e: any) { + const parsed: RustKclError = JSON.parse(e.toString()) + const kclError = new KCLError( + parsed.kind, + parsed.msg, + rangeTypeFix(parsed.sourceRanges) + ) + + postMessage(kclError) } break default: console.error('Worker: Unknown message type', worker, eventType) } } - diff --git a/src/lang/workers/types.ts b/src/lang/workers/types.ts index 374edd7f6..46a21b5c3 100644 --- a/src/lang/workers/types.ts +++ b/src/lang/workers/types.ts @@ -1,7 +1,8 @@ - +import { KCLError } from 'lang/errors' +import { Program } from 'lang/wasm' export enum WasmWorker { - Parser = 'parser', + Parser = 'parser', } export enum WasmWorkerEventType { Init = 'init', @@ -13,10 +14,10 @@ export interface WasmWorkerOptions { } export interface ParserWorkerCall { - code: string + code: string } - +export type ParserWorkerResponse = Program | KCLError export interface WasmWorkerEvent { eventType: WasmWorkerEventType @@ -24,4 +25,5 @@ export interface WasmWorkerEvent { worker: WasmWorker } - +export const rangeTypeFix = (ranges: number[][]): [number, number][] => + ranges.map(([start, end]) => [start, end])