@ -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)
|
||||
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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])
|
||||
|
||||
Reference in New Issue
Block a user