Signed-off-by: Jess Frazelle <github@jessfraz.com>
This commit is contained in:
Jess Frazelle
2024-04-19 13:47:38 -07:00
parent 8549bd9486
commit ed5e276377
3 changed files with 29 additions and 42 deletions

View File

@ -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)

View File

@ -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)
}
}

View File

@ -1,4 +1,5 @@
import { KCLError } from 'lang/errors'
import { Program } from 'lang/wasm'
export enum WasmWorker {
Parser = 'parser',
@ -16,7 +17,7 @@ export interface ParserWorkerCall {
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])