FsaNodeSyncAdapterWorker.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.FsaNodeSyncAdapterWorker = void 0;
  4. const Defer_1 = require("../../thingies/Defer");
  5. const SyncMessenger_1 = require("./SyncMessenger");
  6. const json_1 = require("../json");
  7. let rootId = 0;
  8. class FsaNodeSyncAdapterWorker {
  9. static async start(url, dir) {
  10. const worker = new Worker(url);
  11. const future = new Defer_1.Defer();
  12. let id = rootId++;
  13. let messenger = undefined;
  14. const _dir = await dir;
  15. worker.onmessage = e => {
  16. const data = e.data;
  17. if (!Array.isArray(data))
  18. return;
  19. const msg = data;
  20. const code = msg[0];
  21. switch (code) {
  22. case 0 /* FsaNodeWorkerMessageCode.Init */: {
  23. const [, sab] = msg;
  24. messenger = new SyncMessenger_1.SyncMessenger(sab);
  25. const setRootMessage = [1 /* FsaNodeWorkerMessageCode.SetRoot */, id, _dir];
  26. worker.postMessage(setRootMessage);
  27. break;
  28. }
  29. case 2 /* FsaNodeWorkerMessageCode.RootSet */: {
  30. const [, rootId] = msg;
  31. if (id !== rootId)
  32. return;
  33. const adapter = new FsaNodeSyncAdapterWorker(messenger, _dir);
  34. future.resolve(adapter);
  35. break;
  36. }
  37. }
  38. };
  39. return await future.promise;
  40. }
  41. constructor(messenger, root) {
  42. this.messenger = messenger;
  43. this.root = root;
  44. }
  45. call(method, payload) {
  46. const request = [3 /* FsaNodeWorkerMessageCode.Request */, method, payload];
  47. const encoded = json_1.encoder.encode(request);
  48. const encodedResponse = this.messenger.callSync(encoded);
  49. const [code, data] = json_1.decoder.decode(encodedResponse);
  50. switch (code) {
  51. case 4 /* FsaNodeWorkerMessageCode.Response */:
  52. return data;
  53. case 5 /* FsaNodeWorkerMessageCode.ResponseError */:
  54. throw data;
  55. default: {
  56. throw new Error('Invalid response message code');
  57. }
  58. }
  59. }
  60. }
  61. exports.FsaNodeSyncAdapterWorker = FsaNodeSyncAdapterWorker;
  62. //# sourceMappingURL=FsaNodeSyncAdapterWorker.js.map