@coherentglobal/wasm-runner 0.1.4 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/README.md +137 -222
  2. package/dist/CancellationToken.js +2 -0
  3. package/dist/CancellationToken.js.map +1 -1
  4. package/dist/browser/logger.js +6 -2
  5. package/dist/browser/logger.js.map +1 -1
  6. package/dist/browser/template/main.template.js +1 -1
  7. package/dist/browser/template/main.template.js.map +1 -1
  8. package/dist/browser/template/worker.template.js +117 -108
  9. package/dist/browser/template/worker.template.js.map +1 -1
  10. package/dist/browser/template.js +2 -2
  11. package/dist/browser/template.js.map +1 -1
  12. package/dist/browser.d.ts +5 -5
  13. package/dist/browser.js +242 -257
  14. package/dist/browser.js.map +1 -1
  15. package/dist/constants.d.ts +1 -0
  16. package/dist/constants.js +2 -0
  17. package/dist/constants.js.map +1 -1
  18. package/dist/defaultExternalResolver.js +6 -15
  19. package/dist/defaultExternalResolver.js.map +1 -1
  20. package/dist/error.d.ts +5 -0
  21. package/dist/error.js +23 -5
  22. package/dist/error.js.map +1 -1
  23. package/dist/node/logger.d.ts +2 -1
  24. package/dist/node/logger.js +2 -2
  25. package/dist/node/logger.js.map +1 -1
  26. package/dist/node/logger.ts +2 -2
  27. package/dist/node/mockLogger.d.ts +2 -1
  28. package/dist/node/template/main.template.ejs +108 -69
  29. package/dist/node/threads/mockWorkerThread.d.ts +1 -0
  30. package/dist/node/threads/mockWorkerThread.js +10 -3
  31. package/dist/node/threads/mockWorkerThread.js.map +1 -1
  32. package/dist/node/threads/workerPool.d.ts +4 -5
  33. package/dist/node/threads/workerPool.js +8 -11
  34. package/dist/node/threads/workerPool.js.map +1 -1
  35. package/dist/node/threads/workerPool.ts +15 -10
  36. package/dist/node/threads/workerThread.d.ts +2 -2
  37. package/dist/node/threads/workerThread.js +36 -35
  38. package/dist/node/threads/workerThread.js.map +1 -1
  39. package/dist/node/threads/workerThread.ts +28 -25
  40. package/dist/node.d.ts +32 -7
  41. package/dist/node.js +602 -331
  42. package/dist/node.js.map +1 -1
  43. package/dist/responseTimeMetric.d.ts +20 -0
  44. package/dist/responseTimeMetric.js +159 -0
  45. package/dist/responseTimeMetric.js.map +1 -0
  46. package/dist/serializer/columnarSerializer.d.ts +9 -0
  47. package/dist/serializer/columnarSerializer.js +59 -30
  48. package/dist/serializer/columnarSerializer.js.map +1 -1
  49. package/dist/types.d.ts +36 -2
  50. package/dist/types.js +8 -0
  51. package/dist/types.js.map +1 -1
  52. package/dist/utils.d.ts +3 -1
  53. package/dist/utils.js +53 -59
  54. package/dist/utils.js.map +1 -1
  55. package/package.json +74 -60
package/dist/browser.js CHANGED
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ /* istanbul ignore file */
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -15,69 +16,67 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
16
  }) : function(o, v) {
16
17
  o["default"] = v;
17
18
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
- return new (P || (P = Promise))(function (resolve, reject) {
28
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
- step((generator = generator.apply(thisArg, _arguments || [])).next());
32
- });
33
- };
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
34
36
  var __importDefault = (this && this.__importDefault) || function (mod) {
35
37
  return (mod && mod.__esModule) ? mod : { "default": mod };
36
38
  };
37
39
  Object.defineProperty(exports, "__esModule", { value: true });
38
40
  exports.WasmRunner = exports.ModelExecuteCancelled = exports.CancellationToken = exports.ColumnarSerializer = void 0;
39
- /* istanbul ignore file */
40
- /* eslint-disable no-undef */
41
- /* eslint-disable camelcase */
42
- /* eslint-disable prefer-destructuring */
43
- /* eslint-disable no-param-reassign */
44
- /* eslint-disable no-underscore-dangle */
45
- /* eslint-disable import/prefer-default-export */
46
41
  const cuid2_1 = require("@paralleldrive/cuid2");
47
- const path_1 = __importDefault(require("path"));
42
+ const is_buffer_1 = __importDefault(require("is-buffer"));
43
+ const unzipit = __importStar(require("unzipit"));
48
44
  const utils = __importStar(require("./utils"));
49
45
  const logger_1 = __importStar(require("./browser/logger"));
50
46
  const template_1 = __importDefault(require("./browser/template"));
51
- const is_buffer_1 = __importDefault(require("is-buffer"));
52
47
  const error_1 = __importDefault(require("./error"));
53
- const unzipit = __importStar(require("unzipit"));
48
+ // Browser-compatible path.extname replacement
49
+ const getExtname = (filePath) => {
50
+ const lastDot = filePath.lastIndexOf(".");
51
+ if (lastDot === -1 || lastDot === 0)
52
+ return "";
53
+ return filePath.substring(lastDot);
54
+ };
54
55
  var columnarSerializer_1 = require("./serializer/columnarSerializer");
55
56
  Object.defineProperty(exports, "ColumnarSerializer", { enumerable: true, get: function () { return columnarSerializer_1.ColumnarSerializer; } });
56
57
  var CancellationToken_1 = require("./CancellationToken");
57
58
  Object.defineProperty(exports, "CancellationToken", { enumerable: true, get: function () { return CancellationToken_1.CancellationToken; } });
58
59
  var error_2 = require("./error");
59
60
  Object.defineProperty(exports, "ModelExecuteCancelled", { enumerable: true, get: function () { return error_2.ModelExecuteCancelled; } });
60
- const unzipFile = (zipURL) => __awaiter(void 0, void 0, void 0, function* () {
61
+ const unzipFile = async (zipURL) => {
61
62
  try {
62
- let js;
63
63
  let jsPath;
64
- let wasm;
65
64
  let wasmPath;
66
65
  let dataPath;
67
66
  let data;
68
67
  let metadata;
69
68
  let metadataPath;
70
69
  // USING UNZIPIT PACKAGE
71
- const { entries } = yield unzipit.unzip(zipURL);
70
+ const { entries } = await unzipit.unzip(zipURL);
72
71
  Object.keys(entries).forEach((entry) => {
73
72
  if (entry.indexOf("__MACOSX") === -1) {
74
- if (path_1.default.extname(entry) === ".js") {
73
+ if (getExtname(entry) === ".js") {
75
74
  jsPath = entry;
76
75
  }
77
- if (path_1.default.extname(entry) === ".wasm") {
76
+ if (getExtname(entry) === ".wasm") {
78
77
  wasmPath = entry;
79
78
  }
80
- if (path_1.default.extname(entry) === ".data") {
79
+ if (getExtname(entry) === ".data") {
81
80
  dataPath = entry;
82
81
  }
83
82
  if (entry.toLowerCase().indexOf("_static.json") > -1) {
@@ -89,8 +88,8 @@ const unzipFile = (zipURL) => __awaiter(void 0, void 0, void 0, function* () {
89
88
  throw new Error("Missing runtime file");
90
89
  if (!wasmPath)
91
90
  throw new Error("Missing engine file");
92
- js = yield entries[jsPath].text();
93
- wasm = yield entries[wasmPath].arrayBuffer();
91
+ const js = await entries[jsPath].text();
92
+ const wasm = await entries[wasmPath].arrayBuffer();
94
93
  const response = {
95
94
  js: {
96
95
  url: URL.createObjectURL(new Blob([js], { type: "text/javascript" })),
@@ -102,14 +101,14 @@ const unzipFile = (zipURL) => __awaiter(void 0, void 0, void 0, function* () {
102
101
  },
103
102
  };
104
103
  if (dataPath) {
105
- data = yield entries[dataPath].arrayBuffer();
104
+ data = await entries[dataPath].arrayBuffer();
106
105
  response.data = {
107
106
  url: URL.createObjectURL(new Blob([data], { type: "application/octet-stream" })),
108
107
  path: dataPath,
109
108
  };
110
109
  }
111
110
  if (metadataPath) {
112
- metadata = yield entries[metadataPath].text();
111
+ metadata = await entries[metadataPath].text();
113
112
  response.metadata = {
114
113
  url: URL.createObjectURL(new Blob([metadata], { type: "application/json" })),
115
114
  path: metadataPath,
@@ -120,8 +119,8 @@ const unzipFile = (zipURL) => __awaiter(void 0, void 0, void 0, function* () {
120
119
  catch (err) {
121
120
  throw new Error(err);
122
121
  }
123
- });
124
- const unzipBuffer = (model) => __awaiter(void 0, void 0, void 0, function* () {
122
+ };
123
+ const unzipBuffer = async (model) => {
125
124
  let js;
126
125
  let jsPath;
127
126
  let wasm;
@@ -133,16 +132,16 @@ const unzipBuffer = (model) => __awaiter(void 0, void 0, void 0, function* () {
133
132
  const modelToBlob = new Blob([new Uint8Array(model)]);
134
133
  // USING UNZIPIT
135
134
  try {
136
- const { entries } = yield unzipit.unzip(modelToBlob);
135
+ const { entries } = await unzipit.unzip(modelToBlob);
137
136
  Object.keys(entries).forEach((entry) => {
138
137
  if (entry.indexOf("__MACOSX") === -1) {
139
- if (path_1.default.extname(entry) === ".js") {
138
+ if (getExtname(entry) === ".js") {
140
139
  jsPath = entry;
141
140
  }
142
- if (path_1.default.extname(entry) === ".wasm") {
141
+ if (getExtname(entry) === ".wasm") {
143
142
  wasmPath = entry;
144
143
  }
145
- if (path_1.default.extname(entry) === ".data") {
144
+ if (getExtname(entry) === ".data") {
146
145
  dataPath = entry;
147
146
  }
148
147
  if (entry.toLowerCase().indexOf("_static.json") > -1) {
@@ -154,8 +153,8 @@ const unzipBuffer = (model) => __awaiter(void 0, void 0, void 0, function* () {
154
153
  throw new Error("Missing runtime file");
155
154
  if (!wasmPath)
156
155
  throw new Error("Missing engine file");
157
- js = yield entries[jsPath].text();
158
- wasm = yield entries[wasmPath].arrayBuffer();
156
+ js = await entries[jsPath].text();
157
+ wasm = await entries[wasmPath].arrayBuffer();
159
158
  const response = {
160
159
  wasm: {
161
160
  url: URL.createObjectURL(new Blob([wasm], { type: "application/wasm" })),
@@ -167,14 +166,14 @@ const unzipBuffer = (model) => __awaiter(void 0, void 0, void 0, function* () {
167
166
  },
168
167
  };
169
168
  if (dataPath) {
170
- data = yield entries[dataPath].arrayBuffer();
169
+ data = await entries[dataPath].arrayBuffer();
171
170
  response.data = {
172
171
  url: URL.createObjectURL(new Blob([data], { type: "application/octet-stream" })),
173
172
  path: dataPath,
174
173
  };
175
174
  }
176
175
  if (metadataPath) {
177
- metadata = yield entries[metadataPath].text();
176
+ metadata = await entries[metadataPath].text();
178
177
  response.metadata = {
179
178
  url: URL.createObjectURL(new Blob([metadata], { type: "application/json" })),
180
179
  path: metadataPath,
@@ -185,8 +184,8 @@ const unzipBuffer = (model) => __awaiter(void 0, void 0, void 0, function* () {
185
184
  catch (err) {
186
185
  throw new Error(err);
187
186
  }
188
- });
189
- const unzipppedModel = (model) => __awaiter(void 0, void 0, void 0, function* () {
187
+ };
188
+ const unzipppedModel = async (model) => {
190
189
  const { servicename, wasm, js, data, metadata } = model;
191
190
  const response = {
192
191
  wasm: utils.isFilePath(wasm, "wasm")
@@ -231,11 +230,11 @@ const unzipppedModel = (model) => __awaiter(void 0, void 0, void 0, function* ()
231
230
  };
232
231
  }
233
232
  return response;
234
- });
235
- const getRuntimeContent = (js, wasm, data = undefined) => __awaiter(void 0, void 0, void 0, function* () {
233
+ };
234
+ const getRuntimeContent = async (js, wasm, data = undefined) => {
236
235
  if (data) {
237
- const runtime = yield fetch(js.url)
238
- .then((res) => __awaiter(void 0, void 0, void 0, function* () { return res.text(); }))
236
+ const runtime = await fetch(js.url)
237
+ .then(async (res) => res.text())
239
238
  .then((text) => text
240
239
  .replace(wasm.path, wasm.url)
241
240
  .replace(`"${data.path}"`, `"${data.url}"`)
@@ -244,14 +243,14 @@ const getRuntimeContent = (js, wasm, data = undefined) => __awaiter(void 0, void
244
243
  .replace(`'${data.path}'`, `'${data.url}'`));
245
244
  return runtime;
246
245
  }
247
- const runtime = yield fetch(js.url)
248
- .then((res) => __awaiter(void 0, void 0, void 0, function* () { return res.text(); }))
246
+ const runtime = await fetch(js.url)
247
+ .then(async (res) => res.text())
249
248
  .then((text) => text.replace(wasm.path, wasm.url));
250
249
  return runtime;
251
- });
252
- const defaultCallback = () => __awaiter(void 0, void 0, void 0, function* () {
250
+ };
251
+ const defaultCallback = async () => {
253
252
  logger_1.logger.info("CALLBACK NOT IMPLEMENTED");
254
- });
253
+ };
255
254
  const safeJsonParser = (data) => {
256
255
  try {
257
256
  const result = JSON.parse(data);
@@ -281,6 +280,10 @@ const safeJsonParser = (data) => {
281
280
  * @classdesc WasmRunner class, responsible for managing model and it's lifecycle
282
281
  */
283
282
  class WasmRunner {
283
+ license;
284
+ models;
285
+ callback;
286
+ _logger;
284
287
  /**
285
288
  * Create new Wasm Runner instance
286
289
  *
@@ -318,129 +321,123 @@ class WasmRunner {
318
321
  * @async
319
322
  * @function initialize
320
323
  */
321
- initialize(license = "") {
322
- return __awaiter(this, void 0, void 0, function* () {
323
- if (!utils.isEmpty(license)) {
324
- this.license = license;
325
- }
326
- yield Promise.all(this.models.map((m) => __awaiter(this, void 0, void 0, function* () { return this._initializeModelInstance(m, this.license); })));
327
- });
324
+ async initialize(license = "") {
325
+ if (!utils.isEmpty(license)) {
326
+ this.license = license;
327
+ }
328
+ await Promise.all(this.models.map(async (m) => this._initializeModelInstance(m, this.license)));
328
329
  }
329
- _initializeModelInstance(m, license) {
330
- return __awaiter(this, void 0, void 0, function* () {
331
- const start = Date.now();
332
- logger_1.logger.debug({ modelid: m.id, ts: start }, "_initializeModelInstance");
333
- const modelUrl = m.url;
334
- const isDataBuffer = (0, is_buffer_1.default)(modelUrl);
335
- const isObject = typeof modelUrl === "object";
336
- let js;
337
- let wasm;
338
- let data;
339
- let metadata;
340
- if (isDataBuffer) {
341
- const bufferModel = yield unzipBuffer(modelUrl);
342
- js = bufferModel.js;
343
- wasm = bufferModel.wasm;
344
- data = bufferModel.data;
345
- metadata = bufferModel.metadata;
346
- }
347
- else if (isObject) {
348
- const unzipModelFile = yield unzipppedModel(modelUrl);
349
- js = unzipModelFile.js;
350
- wasm = unzipModelFile.wasm;
351
- data = unzipModelFile.data;
352
- metadata = unzipModelFile.metadata;
353
- }
354
- else {
355
- const unzipped = yield unzipFile(modelUrl);
356
- js = unzipped.js;
357
- wasm = unzipped.wasm;
358
- data = unzipped.data;
359
- metadata = unzipped.metadata;
330
+ async _initializeModelInstance(m, license) {
331
+ const start = Date.now();
332
+ logger_1.logger.debug({ modelid: m.id, ts: start }, "_initializeModelInstance");
333
+ const modelUrl = m.url;
334
+ const isDataBuffer = (0, is_buffer_1.default)(modelUrl);
335
+ const isObject = typeof modelUrl === "object";
336
+ let js;
337
+ let wasm;
338
+ let data;
339
+ let metadata;
340
+ if (isDataBuffer) {
341
+ const bufferModel = await unzipBuffer(modelUrl);
342
+ js = bufferModel.js;
343
+ wasm = bufferModel.wasm;
344
+ data = bufferModel.data;
345
+ metadata = bufferModel.metadata;
346
+ }
347
+ else if (isObject) {
348
+ const unzipModelFile = await unzipppedModel(modelUrl);
349
+ js = unzipModelFile.js;
350
+ wasm = unzipModelFile.wasm;
351
+ data = unzipModelFile.data;
352
+ metadata = unzipModelFile.metadata;
353
+ }
354
+ else {
355
+ const unzipped = await unzipFile(modelUrl);
356
+ js = unzipped.js;
357
+ wasm = unzipped.wasm;
358
+ data = unzipped.data;
359
+ metadata = unzipped.metadata;
360
+ }
361
+ const metadataJSON = metadata
362
+ ? await fetch(metadata.url).then((response) => response.json())
363
+ : undefined;
364
+ const runtime = await getRuntimeContent(js, wasm, data);
365
+ logger_1.logger.debug({ modelid: m.id, timespent: Date.now() - start }, "_initializeModelInstance.createWorker");
366
+ logger_1.logger.debug({
367
+ message: utils.jsString2workerURL((0, template_1.default)(runtime, m.id, license, metadataJSON)),
368
+ });
369
+ m.parents = this;
370
+ m.worker = new Worker(utils.jsString2workerURL((0, template_1.default)(runtime, m.id, license, metadataJSON)));
371
+ const loggerInt = this._logger;
372
+ /* istanbul ignore next */
373
+ m.worker.onmessage = function (oEvent) {
374
+ if (!Array.isArray(oEvent.data) && oEvent.data === "Initialized") {
375
+ m.ready = true;
360
376
  }
361
- const metadataJSON = metadata
362
- ? yield fetch(metadata.url).then((response) => response.json())
363
- : undefined;
364
- const runtime = yield getRuntimeContent(js, wasm, data);
365
- logger_1.logger.debug({ modelid: m.id, timespent: Date.now() - start }, "_initializeModelInstance.createWorker");
366
- logger_1.logger.debug({
367
- message: utils.jsString2workerURL((0, template_1.default)(runtime, m.id, license, metadataJSON)),
368
- });
369
- m.parents = this;
370
- m.worker = new Worker(utils.jsString2workerURL((0, template_1.default)(runtime, m.id, license, metadataJSON)));
371
- const loggerInt = this._logger;
372
- /* istanbul ignore next */
373
- m.worker.onmessage = function (oEvent) {
374
- var _a;
375
- if (!Array.isArray(oEvent.data) && oEvent.data === "Initialized") {
376
- m.ready = true;
377
- }
378
- else if (!Array.isArray(oEvent.data) && ((_a = oEvent.data) === null || _a === void 0 ? void 0 : _a.type) === "stall") {
379
- const requestData = oEvent.data.requestData;
380
- const input = typeof requestData.request_body === "string"
381
- ? JSON.parse(requestData.request_body)
382
- : requestData.request_body;
383
- const serviceUri = requestData.service_uri;
384
- const folderName = requestData.folder_name;
385
- const serviceName = requestData.service_name;
386
- /* istanbul ignore next */
387
- const fn = () => __awaiter(this, void 0, void 0, function* () {
388
- try {
389
- const option = {
377
+ else if (!Array.isArray(oEvent.data) && oEvent.data?.type === "stall") {
378
+ const requestData = oEvent.data.requestData;
379
+ const input = typeof requestData.request_body === "string"
380
+ ? JSON.parse(requestData.request_body)
381
+ : requestData.request_body;
382
+ const serviceUri = requestData.service_uri;
383
+ const folderName = requestData.folder_name;
384
+ const serviceName = requestData.service_name;
385
+ /* istanbul ignore next */
386
+ const fn = async () => {
387
+ try {
388
+ const option = {
389
+ service_uri: serviceUri,
390
+ folder_name: folderName,
391
+ service_name: serviceName,
392
+ context: oEvent.data.context,
393
+ // version_id: versionId
394
+ };
395
+ const modelVersionId = await m.parents.callback(option);
396
+ if (!input.request_meta)
397
+ input.request_meta = {};
398
+ input.request_meta.version_id = modelVersionId;
399
+ const results = await m.parents.execute(input, modelVersionId);
400
+ m.worker.postMessage([
401
+ {
390
402
  service_uri: serviceUri,
391
403
  folder_name: folderName,
392
404
  service_name: serviceName,
393
- context: oEvent.data.context,
394
- // version_id: versionId
395
- };
396
- const modelVersionId = yield m.parents.callback(option);
397
- if (!input.request_meta)
398
- input.request_meta = {};
399
- input.request_meta.version_id = modelVersionId;
400
- const results = yield m.parents.execute(input, modelVersionId);
401
- m.worker.postMessage([
402
- {
403
- service_uri: serviceUri,
404
- folder_name: folderName,
405
- service_name: serviceName,
406
- response: results,
407
- },
408
- "",
409
- "dispatch",
410
- ]);
411
- }
412
- catch (err) {
413
- loggerInt.error(Object.assign(Object.assign({}, err), { message: err.message }), "CHILD MODEL ERROR");
414
- }
415
- });
416
- fn();
417
- }
418
- else if (Array.isArray(oEvent.data)) {
419
- if (utils.isEmpty(m.results)) {
420
- m.results = {};
405
+ response: results,
406
+ },
407
+ "",
408
+ "dispatch",
409
+ ]);
421
410
  }
422
- m.results[oEvent.data[1]] = oEvent.data[0];
411
+ catch (err) {
412
+ loggerInt.error({ ...err, message: err.message }, "CHILD MODEL ERROR");
413
+ }
414
+ };
415
+ fn();
416
+ }
417
+ else if (Array.isArray(oEvent.data)) {
418
+ if (utils.isEmpty(m.results)) {
419
+ m.results = {};
423
420
  }
421
+ m.results[oEvent.data[1]] = oEvent.data[0];
422
+ }
423
+ };
424
+ return new Promise((resolve, _reject) => {
425
+ const checkModelStatus = () => {
426
+ setTimeout(() => {
427
+ if (!m.ready) {
428
+ checkModelStatus();
429
+ }
430
+ else {
431
+ logger_1.logger.debug({ modelid: m.id, timespent: Date.now() - start }, "_initializeModelInstance.complete");
432
+ resolve();
433
+ }
434
+ }, 2);
424
435
  };
425
- return new Promise((resolve, reject) => {
426
- const checkModelStatus = () => {
427
- setTimeout(() => {
428
- if (!m.ready) {
429
- checkModelStatus();
430
- }
431
- else {
432
- logger_1.logger.debug({ modelid: m.id, timespent: Date.now() - start }, "_initializeModelInstance.complete");
433
- resolve();
434
- }
435
- }, 2);
436
- };
437
- checkModelStatus();
438
- });
436
+ checkModelStatus();
439
437
  });
440
438
  }
441
439
  _parseError(rawResponse) {
442
- var _a;
443
- let errors = (_a = rawResponse.response_data) === null || _a === void 0 ? void 0 : _a.errors.reduce((prev, curr) => {
440
+ let errors = rawResponse.response_data?.errors.reduce((prev, curr) => {
444
441
  const { source_path } = curr;
445
442
  if (!source_path) {
446
443
  return prev;
@@ -502,7 +499,7 @@ class WasmRunner {
502
499
  const res = !!this._getModel(id);
503
500
  return res;
504
501
  }
505
- catch (err) {
502
+ catch (_err) {
506
503
  return false;
507
504
  }
508
505
  }
@@ -511,37 +508,33 @@ class WasmRunner {
511
508
  * @param {string} id Model id
512
509
  * @returns Promise
513
510
  */
514
- remove(id) {
515
- return __awaiter(this, void 0, void 0, function* () {
516
- if (this.isExist(id)) {
517
- this.models = this.models.filter((m) => {
518
- if (m.id === id) {
519
- m.worker.terminate();
520
- return false;
521
- }
522
- return m.id !== id;
523
- });
524
- }
525
- });
511
+ async remove(id) {
512
+ if (this.isExist(id)) {
513
+ this.models = this.models.filter((m) => {
514
+ if (m.id === id) {
515
+ m.worker.terminate();
516
+ return false;
517
+ }
518
+ return m.id !== id;
519
+ });
520
+ }
526
521
  }
527
522
  /**
528
523
  * Append and initialized new model to runner
529
524
  * @param {RunnerConfig} modelConfig
530
525
  * @returns Promise
531
526
  */
532
- append(modelConfig) {
533
- return __awaiter(this, void 0, void 0, function* () {
534
- if (this.isExist(modelConfig.id)) {
535
- return;
536
- }
537
- const model = {
538
- id: modelConfig.id,
539
- url: modelConfig.url,
540
- meta: {},
541
- };
542
- yield this._initializeModelInstance(model, this.license);
543
- this.models.push(model);
544
- });
527
+ async append(modelConfig) {
528
+ if (this.isExist(modelConfig.id)) {
529
+ return;
530
+ }
531
+ const model = {
532
+ id: modelConfig.id,
533
+ url: modelConfig.url,
534
+ meta: {},
535
+ };
536
+ await this._initializeModelInstance(model, this.license);
537
+ this.models.push(model);
545
538
  }
546
539
  /**
547
540
  * Perform calculation. The runner will use request_meta.version_uuid of input argument to locate model
@@ -549,73 +542,65 @@ class WasmRunner {
549
542
  * @param {InputObject} input - Input data for calculation
550
543
  * @returns {Promise<Object>} - Response model data
551
544
  */
552
- execute(input, id = undefined, raw, cancelToken) {
553
- var _a, _b;
554
- return __awaiter(this, void 0, void 0, function* () {
555
- const version_uuid = id || ((_a = input === null || input === void 0 ? void 0 : input.request_meta) === null || _a === void 0 ? void 0 : _a.version_id) || ((_b = input.request_meta) === null || _b === void 0 ? void 0 : _b.version_uuid);
556
- if (!(input === null || input === void 0 ? void 0 : input.request_meta)) {
557
- input.request_meta = {};
558
- }
559
- if (id) {
560
- input.request_meta.version_id = version_uuid;
545
+ async execute(input, id = undefined, raw, cancelToken) {
546
+ const version_uuid = id || input?.request_meta?.version_id || input.request_meta?.version_uuid;
547
+ if (!input?.request_meta) {
548
+ input.request_meta = {};
549
+ }
550
+ if (id) {
551
+ input.request_meta.version_id = version_uuid;
552
+ }
553
+ this._logger.trace(input, `EXECUTING: ${id}`);
554
+ const token = cancelToken ? cancelToken.getToken() : undefined;
555
+ if (version_uuid) {
556
+ console.log("version_uuid:", version_uuid, "meta:", input?.request_meta, "id:", id);
557
+ const model = this._getModel(version_uuid);
558
+ const callid = (0, cuid2_1.createId)();
559
+ if (token) {
560
+ token.throwIfCancelled(version_uuid, input);
561
561
  }
562
- this._logger.trace(input, `EXECUTING: ${id}`);
563
- const token = cancelToken ? cancelToken.getToken() : undefined;
564
- if (version_uuid) {
565
- console.log("version_uuid:", version_uuid, "meta:", input === null || input === void 0 ? void 0 : input.request_meta, "id:", id);
566
- const model = this._getModel(version_uuid);
567
- const callid = (0, cuid2_1.createId)();
568
- if (token) {
569
- token.throwIfCancelled(version_uuid, input);
570
- }
571
- model.worker.postMessage([JSON.stringify(input), callid]);
572
- return new Promise((resolve, reject) => {
573
- let counter = 0;
574
- const getResult = () => {
575
- setTimeout(() => {
576
- var _a, _b;
577
- try {
578
- if (token) {
579
- token.throwIfCancelled(version_uuid, input);
580
- }
562
+ model.worker.postMessage([JSON.stringify(input), callid]);
563
+ return new Promise((resolve, reject) => {
564
+ let counter = 0;
565
+ const getResult = () => {
566
+ setTimeout(() => {
567
+ try {
568
+ if (token) {
569
+ token.throwIfCancelled(version_uuid, input);
581
570
  }
582
- catch (err) {
583
- reject(err);
571
+ }
572
+ catch (err) {
573
+ reject(err);
574
+ }
575
+ if (model.results?.[callid]) {
576
+ const tryParsingResult = safeJsonParser(model.results?.[callid]);
577
+ if (tryParsingResult) {
578
+ model.results[callid] = undefined;
579
+ resolve(tryParsingResult);
584
580
  }
585
- if ((_a = model.results) === null || _a === void 0 ? void 0 : _a[callid]) {
586
- const tryParsingResult = safeJsonParser((_b = model.results) === null || _b === void 0 ? void 0 : _b[callid]);
587
- if (tryParsingResult) {
588
- model.results[callid] = undefined;
589
- resolve(tryParsingResult);
590
- }
591
- else {
592
- if (counter < 5000) {
593
- // Increase timeout into 20s
594
- counter++;
595
- getResult();
596
- }
597
- else {
598
- reject(new Error("Execution timeout"));
599
- }
600
- }
581
+ else if (counter < 5000) {
582
+ // Increase timeout into 20s
583
+ counter++;
584
+ getResult();
601
585
  }
602
586
  else {
603
- if (counter < 5000) {
604
- // Increase timeout into 20s
605
- counter++;
606
- getResult();
607
- }
608
- else {
609
- reject(new Error("Execution timeout"));
610
- }
587
+ reject(new Error("Execution timeout"));
611
588
  }
612
- }, 10);
613
- };
614
- getResult();
615
- });
616
- }
617
- throw new error_1.default.ParameterRequiredError("request_meta.version_id", input);
618
- });
589
+ }
590
+ else if (counter < 5000) {
591
+ // Increase timeout into 20s
592
+ counter++;
593
+ getResult();
594
+ }
595
+ else {
596
+ reject(new Error("Execution timeout"));
597
+ }
598
+ }, 10);
599
+ };
600
+ getResult();
601
+ });
602
+ }
603
+ throw new error_1.default.ParameterRequiredError("request_meta.version_id", input);
619
604
  }
620
605
  }
621
606
  exports.WasmRunner = WasmRunner;