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