dvWebWorkerMain function

void dvWebWorkerMain()

Answers requests from the page. Call it from the worker script's main after registering the same tasks the page registered.

void main() {
  DVWorkerTasks.register('parseLedger', parseLedger);
  dvWebWorkerMain();
}

Implementation

void dvWebWorkerMain() {
  final JSObject scope = globalContext;
  void post(Map<String, Object?> message) =>
      scope.callMethod<JSAny?>('postMessage'.toJS, message.jsify());

  scope['onmessage'] = ((JSObject event) {
    final Object? data = event['data'].dartify();
    if (data is Map) {
      // dvWorkerHandle always posts a final answer, so nothing is awaited.
      dvWorkerHandle(data, post).ignore();
    } else {
      post(<String, Object?>{
        'id': -1,
        'kind': 'failed',
        'failure': 'crashed',
        'error': 'the worker was sent something that is not a request',
      });
    }
  }).toJS;
}