datafolder 1.0.2 → 1.0.3

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 (82) hide show
  1. package/README.md +9 -3
  2. package/index.js +2 -3
  3. package/package.json +3 -2
  4. package/sample.js +37 -37
  5. package/scripts/airbnb.js +10 -11
  6. package/scripts/airbnb2.js +10 -11
  7. package/scripts/airbnb2_queries.js +11 -11
  8. package/scripts/airbnb_queries.js +15 -14
  9. package/scripts/downloadFile.js +29 -31
  10. package/scripts/express.js +5 -4
  11. package/scripts/fastify.js +12 -11
  12. package/scripts/flights.js +8 -8
  13. package/scripts/flights2.js +9 -9
  14. package/scripts/flights2_queries.js +19 -16
  15. package/scripts/flights_queries.js +18 -13
  16. package/src/QyAcl.js +153 -152
  17. package/src/QyAclSaver.js +16 -10
  18. package/src/QyAclSaver_Worker.js +21 -15
  19. package/src/QyAclWriter.js +23 -13
  20. package/src/QyBatch.js +298 -263
  21. package/src/QyBinWriter.js +49 -37
  22. package/src/QyCD.js +13 -14
  23. package/src/QyCache.js +177 -140
  24. package/src/QyCompressor.js +71 -45
  25. package/src/QyCompressor_Worker.js +17 -9
  26. package/src/QyDB.js +41 -12
  27. package/src/QyDefaultOptions.js +13 -10
  28. package/src/QyDir.js +89 -53
  29. package/src/QyFetch.js +27 -24
  30. package/src/QyFile.js +89 -77
  31. package/src/QyFileContentUtils.js +129 -132
  32. package/src/QyFileLogger.js +63 -41
  33. package/src/QyIndex.js +175 -197
  34. package/src/QyIndexPropTree.js +25 -25
  35. package/src/QyIntersectNode.js +34 -31
  36. package/src/QyItem.js +54 -52
  37. package/src/QyJsonSaver.js +12 -6
  38. package/src/QyKVData.js +279 -245
  39. package/src/QyKVDataCleaner.js +12 -6
  40. package/src/QyKVDataCleaner_Worker.js +77 -59
  41. package/src/QyKVDataLoader.js +67 -46
  42. package/src/QyKVDataSaver.js +15 -9
  43. package/src/QyKVDataSaver_Worker.js +83 -60
  44. package/src/QyLogFileSaver.js +12 -6
  45. package/src/QyLogFileSaver_Worker.js +24 -14
  46. package/src/QyLogger.js +51 -40
  47. package/src/QyMessageWorker.js +43 -29
  48. package/src/QyMessager.js +74 -54
  49. package/src/QyMessager_Run.js +20 -7
  50. package/src/QyMod.js +15 -11
  51. package/src/QyOpRunner.js +58 -41
  52. package/src/QyQueue.js +35 -30
  53. package/src/QySaver.js +52 -29
  54. package/src/QySnapshotCompactor.js +15 -9
  55. package/src/QySnapshotCompactor_Worker.js +131 -110
  56. package/src/QySnapshotSaver.js +15 -9
  57. package/src/QySnapshotSaver_Worker.js +125 -110
  58. package/src/QySnapshots.js +260 -241
  59. package/src/QyStructure.js +35 -27
  60. package/src/QyTrigger.js +62 -55
  61. package/src/QyUnionNode.js +54 -56
  62. package/src/QyUtils.js +170 -158
  63. package/src/QyWorker.js +34 -20
  64. package/src/hackernews.js +63 -71
  65. package/src/rpc/getFileContent.js +7 -7
  66. package/src/rpc/getSubItems.js +22 -22
  67. package/src/simulate.js +85 -80
  68. package/src/simulate2.js +77 -78
  69. package/src/soc_pokec.js +44 -32
  70. package/static/datafolderui/QyStyledElement.js +12 -12
  71. package/static/datafolderui/QyUIFolderTree.js +20 -20
  72. package/static/datafolderui/QyUIUtils.js +8 -8
  73. package/static/datafolderui/explore-tree.js +31 -31
  74. package/static/datafolderui/folder-tree.js +2 -2
  75. package/static/datafolderui/hscrpt.js +9 -17
  76. package/static/datafolderui/json-view.js +3 -5
  77. package/static/datafolderui/kv-input.js +15 -15
  78. package/static/datafolderui/list-input.js +17 -17
  79. package/static/datafolderui/main-page.js +18 -18
  80. package/static/datafolderui/num-input.js +5 -5
  81. package/static/datafolderui/querySelectorShadowRoot.js +15 -19
  82. package/static/datafolderui/resizable-input.js +18 -18
package/src/QyLogger.js CHANGED
@@ -1,55 +1,64 @@
1
- let fs = require("node:fs"), path = require("node:path"), Console = require("node:console").Console, {
2
- isMainThread,
3
- threadId
4
- } = require("node:worker_threads"), ThreadMark = isMainThread ? "" : `W${threadId}:`, LOG_LEVEL = {
1
+ import r from "node:fs";
2
+
3
+ import n from "node:path";
4
+
5
+ import {
6
+ Console as t
7
+ } from "node:console";
8
+
9
+ import {
10
+ isMainThread as e,
11
+ threadId as o
12
+ } from "node:worker_threads";
13
+
14
+ let i = e ? "" : `W${o}:`, s = {
5
15
  Info: 0,
6
16
  Debug: 1,
7
17
  Warn: 2,
8
18
  Error: 3,
9
19
  None: 4
10
- }, strToLogLevel = {
11
- verbose: LOG_LEVEL.Info,
12
- info: LOG_LEVEL.Info,
13
- log: LOG_LEVEL.Debug,
14
- debug: LOG_LEVEL.Debug,
15
- warn: LOG_LEVEL.Warn,
16
- error: LOG_LEVEL.Error,
17
- none: LOG_LEVEL.None
18
- }, logLevelToStr = Object.fromEntries(Object.entries(strToLogLevel).map(([ e, o ]) => [ o, e ])), logger = {
19
- currentLogLevel: LOG_LEVEL.Debug,
20
+ }, l = {
21
+ verbose: s.Info,
22
+ info: s.Info,
23
+ log: s.Debug,
24
+ debug: s.Debug,
25
+ warn: s.Warn,
26
+ error: s.Error,
27
+ none: s.None
28
+ }, a = Object.fromEntries(Object.entries(l).map(([ e, o ]) => [ o, e ])), c = {
29
+ currentLogLevel: s.Debug,
20
30
  info: function() {
21
- logger.currentLogLevel == LOG_LEVEL.Info && writeLog("info", arguments);
31
+ c.currentLogLevel == s.Info && b("info", arguments);
22
32
  },
23
33
  log: function() {
24
- logger.currentLogLevel <= LOG_LEVEL.Debug && writeLog("log", arguments);
34
+ c.currentLogLevel <= s.Debug && b("log", arguments);
25
35
  },
26
36
  debug: function() {
27
- logger.currentLogLevel <= LOG_LEVEL.Debug && writeLog("debug", arguments);
37
+ c.currentLogLevel <= s.Debug && b("debug", arguments);
28
38
  },
29
39
  warn: function() {
30
- logger.currentLogLevel <= LOG_LEVEL.Warn && writeLog("warn", arguments);
40
+ c.currentLogLevel <= s.Warn && b("warn", arguments);
31
41
  },
32
42
  error: function() {
33
- logger.currentLogLevel <= LOG_LEVEL.Error && writeLog("error", arguments);
43
+ c.currentLogLevel <= s.Error && b("error", arguments);
34
44
  }
35
- }, fileConsole, stdout, stderr;
45
+ }, u, g, f;
36
46
 
37
- function closeFileConsole() {
38
- fileConsole = void 0, stdout && (stdout.close(), stdout = void 0), stderr && (stderr.close(),
39
- stderr = void 0);
47
+ function d() {
48
+ u = void 0, g && (g.close(), g = void 0), f && (f.close(), f = void 0);
40
49
  }
41
50
 
42
- function setFileConsoleDateDirPath(e, o) {
43
- closeFileConsole();
51
+ function L(e, o) {
52
+ d();
44
53
  o = {
45
54
  flags: o ? "w" : "a",
46
55
  flush: !0,
47
56
  autoClose: !1
48
57
  };
49
- stdout = fs.createWriteStream(path.join(e, "stdout.txt"), o), stderr = fs.createWriteStream(path.join(e, "stderr.txt"), o),
50
- fileConsole = new Console({
51
- stdout: stdout,
52
- stderr: stderr,
58
+ g = r.createWriteStream(n.join(e, "stdout.txt"), o), f = r.createWriteStream(n.join(e, "stderr.txt"), o),
59
+ u = new t({
60
+ stdout: g,
61
+ stderr: f,
53
62
  inspectOptions: {
54
63
  depth: 3,
55
64
  colors: !1
@@ -57,20 +66,22 @@ function setFileConsoleDateDirPath(e, o) {
57
66
  });
58
67
  }
59
68
 
60
- function writeLog(e, o) {
61
- var r = new Error().stack.split("\n"), r = `${new Date().toISOString()} ${ThreadMark}${/([^/\\()]+)\)?$/.exec(r[3])[1]}:${e}:`;
62
- console[e](r, ...o), fileConsole && fileConsole[e](r, ...o);
69
+ function b(e, o) {
70
+ var r = new Error().stack.split("\n"), r = `${new Date().toISOString()} ${i}${/([^/\\()]+)\)?$/.exec(r[3])[1]}:${e}:`;
71
+ console[e](r, ...o), u && u[e](r, ...o);
63
72
  }
64
73
 
65
- Object.defineProperty(logger, "level", {
74
+ Object.defineProperty(c, "level", {
66
75
  get() {
67
- return logLevelToStr[logger.currentLogLevel];
76
+ return a[c.currentLogLevel];
68
77
  },
69
78
  set(e) {
70
- logger.currentLogLevel = strToLogLevel[e];
79
+ c.currentLogLevel = l[e];
71
80
  }
72
- }), globalThis.logger = logger, Object.assign(module.exports, {
73
- logger: logger,
74
- setFileConsoleDateDirPath: setFileConsoleDateDirPath,
75
- closeFileConsole: closeFileConsole
76
- });
81
+ }), globalThis.logger = c;
82
+
83
+ export {
84
+ c as logger,
85
+ L as setFileConsoleDateDirPath,
86
+ d as closeFileConsole
87
+ };
@@ -1,41 +1,55 @@
1
- let parentPort = require("node:worker_threads").parentPort, getDefaultOptions = require("./QyDefaultOptions.js").getDefaultOptions, logger = require("./QyLogger.js").logger, QyOpRunner = require("./QyOpRunner.js").QyOpRunner;
1
+ import {
2
+ parentPort as t
3
+ } from "node:worker_threads";
2
4
 
3
- class QyMessageWorker extends QyOpRunner {
4
- constructor(e, r, s) {
5
- super(e = {
6
- ...getDefaultOptions("QyMessageWorker"),
7
- ...e
8
- }, r, s), parentPort.on("message", async e => {
5
+ import {
6
+ getDefaultOptions as a
7
+ } from "./QyDefaultOptions.js";
8
+
9
+ import {
10
+ logger as n
11
+ } from "./QyLogger.js";
12
+
13
+ import {
14
+ QyOpRunner as s
15
+ } from "./QyOpRunner.js";
16
+
17
+ class e extends s {
18
+ constructor(s, e, r) {
19
+ super(s = {
20
+ ...a("QyMessageWorker"),
21
+ ...s
22
+ }, e, r), t.on("message", async s => {
9
23
  var {
10
- opName: r,
11
- _cast: s
12
- } = e;
13
- if (r) {
14
- var t = e.args || [];
24
+ opName: e,
25
+ _cast: r
26
+ } = s;
27
+ if (e) {
28
+ var a = s.args || [];
15
29
  try {
16
- var a = await this[r](...t);
17
- s || parentPort.postMessage({
18
- ack: r,
19
- result: a
20
- }), "stop" == r && process.exit();
21
- } catch (e) {
22
- logger.error(`Running ${r} failed:`, e), s || parentPort.postMessage({
23
- ack: r,
24
- exception: e
30
+ var o = await this[e](...a);
31
+ r || t.postMessage({
32
+ ack: e,
33
+ result: o
34
+ }), "stop" == e && process.exit();
35
+ } catch (s) {
36
+ n.error(`Running ${e} failed:`, s), r || t.postMessage({
37
+ ack: e,
38
+ exception: s
25
39
  });
26
40
  }
27
- } else logger.warn("Msg ignored:", e);
41
+ } else n.warn("Msg ignored:", s);
28
42
  });
29
43
  }
30
- castParent(e, ...r) {
31
- parentPort.postMessage({
32
- opName: e,
33
- args: r,
44
+ castParent(s, ...e) {
45
+ t.postMessage({
46
+ opName: s,
47
+ args: e,
34
48
  _cast: !0
35
49
  });
36
50
  }
37
51
  }
38
52
 
39
- Object.assign(module.exports, {
40
- QyMessageWorker: QyMessageWorker
41
- });
53
+ export {
54
+ e as QyMessageWorker
55
+ };
package/src/QyMessager.js CHANGED
@@ -1,26 +1,76 @@
1
- let path = require("node:path"), {
2
- Worker,
3
- setEnvironmentData
4
- } = require("node:worker_threads"), getDefaultOptions = require("./QyDefaultOptions.js").getDefaultOptions, logger = require("./QyLogger.js").logger, setPromise = require("./QyUtils.js").setPromise, QyQueue = require("./QyQueue.js").QyQueue;
1
+ import {
2
+ join as s
3
+ } from "node:path";
5
4
 
6
- class QyMessager {
7
- constructor(e, r, t, s, o = [], i = []) {
8
- s = {
9
- ...getDefaultOptions("QyMessager"),
10
- ...s
5
+ import {
6
+ Worker as p,
7
+ setEnvironmentData as t
8
+ } from "node:worker_threads";
9
+
10
+ import {
11
+ getDefaultOptions as i
12
+ } from "./QyDefaultOptions.js";
13
+
14
+ import {
15
+ logger as n
16
+ } from "./QyLogger.js";
17
+
18
+ import {
19
+ setPromise as l,
20
+ __dirname as m
21
+ } from "./QyUtils.js";
22
+
23
+ import {
24
+ QyQueue as h
25
+ } from "./QyQueue.js";
26
+
27
+ class e {
28
+ constructor(e, r, s, t, o = [], a = []) {
29
+ t = {
30
+ ...i("QyMessager"),
31
+ ...t
11
32
  }, Object.assign(this, {
12
33
  parent: e,
13
34
  workerTypeFileName: r,
14
- initArgMap: t,
15
- options: s,
35
+ initArgMap: s,
36
+ options: t,
16
37
  receiverQueueMap: {}
17
38
  });
18
39
  for (let r of o) this[r] || (this[r] = (...e) => this.callWorker(r, e));
19
- for (let r of i) this[r] || (this[r] = (...e) => this.castWorker(r, e));
40
+ for (let r of a) this[r] || (this[r] = (...e) => this.castWorker(r, e));
20
41
  }
21
42
  start(...e) {
22
- return this.started = !0, setEnvironmentData("logLevel", logger.level),
23
- this._startWorker(), this.callWorker("start", e);
43
+ this.started = !0, t("logLevel", n.level);
44
+ var i = this;
45
+ if (!i.worker) {
46
+ let {
47
+ workerTypeFileName: t,
48
+ initArgMap: e,
49
+ receiverQueueMap: o
50
+ } = i;
51
+ var r = {
52
+ workerTypeFileName: t,
53
+ initArgMap: e
54
+ };
55
+ let a = i.worker = new p(s(m, "QyMessager_Run.js"), {
56
+ workerData: r
57
+ });
58
+ a.on("error", e => {
59
+ n.error(`Worker ${t} error:`, e);
60
+ }), a.on("message", e => {
61
+ var {
62
+ opName: r,
63
+ ack: s,
64
+ result: t
65
+ } = e;
66
+ r ? (e = e.args || [], (i.parent || i)[r](...e)) : o[s]?.shift().resolve(t);
67
+ }), a.on("exit", e => {
68
+ for (var r in a.removeAllListeners(), 0 != e ? n.warn(`Worker ${t} stopped with exitCode ` + e) : n.info(`Worker ${t} stopped.`),
69
+ o) for (var s = o[r]; !s.isEmpty; ) s.shift()?.resolve();
70
+ i.worker = void 0;
71
+ });
72
+ }
73
+ return this.callWorker("start", e);
24
74
  }
25
75
  stop(...e) {
26
76
  if (this.started) return this.started = !1, this.callWorker("stop", e);
@@ -34,51 +84,21 @@ class QyMessager {
34
84
  }
35
85
  callWorker(e, r) {
36
86
  var {
37
- worker: t,
38
- receiverQueueMap: s,
87
+ worker: s,
88
+ receiverQueueMap: t,
39
89
  options: o
40
90
  } = this;
41
- t.postMessage({
91
+ s.postMessage({
42
92
  opName: e,
43
93
  args: r
44
94
  });
45
- let i = s[e];
46
- i = i || (s[e] = new QyQueue(o));
47
- t = setPromise({});
48
- return i.push(t), t.promise;
49
- }
50
- _startWorker() {
51
- if (!this.worker) {
52
- let {
53
- workerTypeFileName: s,
54
- initArgMap: e,
55
- receiverQueueMap: o
56
- } = this;
57
- var r = {
58
- workerTypeFileName: s,
59
- initArgMap: e
60
- };
61
- let i = this.worker = new Worker(path.join(__dirname, "QyMessager_Run.js"), {
62
- workerData: r
63
- });
64
- i.on("error", e => {
65
- logger.error(`Worker ${s} error:`, e);
66
- }), i.on("message", e => {
67
- var {
68
- opName: r,
69
- ack: t,
70
- result: s
71
- } = e;
72
- r ? (e = e.args || [], (this.parent || this)[r](...e)) : o[t]?.shift().resolve(s);
73
- }), i.on("exit", e => {
74
- for (var r in i.removeAllListeners(), 0 != e ? logger.warn(`Worker ${s} stopped with exitCode ` + e) : logger.info(`Worker ${s} stopped.`),
75
- o) for (var t = o[r]; !t.isEmpty; ) t.shift()?.resolve();
76
- this.worker = void 0;
77
- });
78
- }
95
+ let a = t[e];
96
+ a = a || (t[e] = new h(o));
97
+ s = l({});
98
+ return a.push(s), s.promise;
79
99
  }
80
100
  }
81
101
 
82
- Object.assign(module.exports, {
83
- QyMessager: QyMessager
84
- });
102
+ export {
103
+ e as QyMessager
104
+ };
@@ -1,13 +1,26 @@
1
- let path = require("node:path"), {
2
- getEnvironmentData,
3
- workerData
4
- } = require("node:worker_threads"), logger = require("./QyLogger.js").logger;
1
+ import {
2
+ resolve as a,
3
+ join as o
4
+ } from "node:path";
5
+
6
+ import {
7
+ getEnvironmentData as t,
8
+ workerData as i
9
+ } from "node:worker_threads";
10
+
11
+ import {
12
+ logger as m
13
+ } from "./QyLogger.js";
14
+
15
+ import {
16
+ __dirname as s
17
+ } from "./QyUtils.js";
5
18
 
6
19
  (async () => {
7
- logger.level = getEnvironmentData("logLevel");
20
+ m.level = t("logLevel");
8
21
  var {
9
22
  workerTypeFileName: e,
10
23
  initArgMap: r
11
- } = workerData;
12
- new (require(path.join(__dirname, e)))(r);
24
+ } = i;
25
+ new (await import("file://" + a(o(s, e)))).default(r);
13
26
  })();
package/src/QyMod.js CHANGED
@@ -1,15 +1,19 @@
1
- let Module = require("node:module"), logger = require("./QyLogger.js").logger;
1
+ import m from "node:module";
2
2
 
3
- function requireFromModCode(o, r, d, e) {
4
- if (d) try {
5
- var l = o + "_" + r, i = `_${l}_qydb`, u = (globalThis[i] = e, new Module(r));
6
- return u._compile(`(function(qyDB){${d}})(${i});`, l + ".js"), delete globalThis[i],
7
- u.exports;
8
- } catch (e) {
9
- logger.error("requireFromModCode failed:", o, r, d, e);
3
+ import {
4
+ logger as a
5
+ } from "./QyLogger.js";
6
+
7
+ function o(r, e, i, o) {
8
+ if (i) try {
9
+ var t = r + "_" + e, d = `_${t}_qydb`, l = (globalThis[d] = o, new m(e));
10
+ return l._compile(`(function(qyDB){${i}})(${d});`, t + ".js"), delete globalThis[d],
11
+ l.exports;
12
+ } catch (o) {
13
+ a.error("requireFromModCode failed:", r, e, i, o);
10
14
  }
11
15
  }
12
16
 
13
- Object.assign(module.exports, {
14
- requireFromModCode: requireFromModCode
15
- });
17
+ export {
18
+ o as requireFromModCode
19
+ };
package/src/QyOpRunner.js CHANGED
@@ -1,29 +1,31 @@
1
- let EventEmitter = require("node:events"), setPromise = require("./QyUtils.js").setPromise, logger = require("./QyLogger.js").logger, getDefaultOptions = require("./QyDefaultOptions.js").getDefaultOptions, QyQueue = require("./QyQueue.js").QyQueue;
1
+ import s from "node:events";
2
2
 
3
- class QyOpRunner extends EventEmitter {
4
- constructor(e, s = [], t = []) {
5
- super(), e = {
6
- ...getDefaultOptions("QyOpRunner"),
7
- ...e
3
+ import {
4
+ setPromise as t
5
+ } from "./QyUtils.js";
6
+
7
+ import {
8
+ logger as u
9
+ } from "./QyLogger.js";
10
+
11
+ import {
12
+ getDefaultOptions as i
13
+ } from "./QyDefaultOptions.js";
14
+
15
+ import {
16
+ QyQueue as n
17
+ } from "./QyQueue.js";
18
+
19
+ class e extends s {
20
+ constructor(s, t = [], e = []) {
21
+ super(), s = {
22
+ ...i("QyOpRunner"),
23
+ ...s
8
24
  }, Object.assign(this, {
9
- options: e,
25
+ options: s,
10
26
  running: !1,
11
- opQueue: new QyQueue(e)
12
- }), this._setupOpNames(s, !0), this._setupOpNames(t);
13
- }
14
- _setupOpNames(e, i) {
15
- for (let t of e) {
16
- let s = "_op_" + t;
17
- this[t] || (this[t] = i ? (...e) => this.pushAndRunWithPromise({
18
- opName: t,
19
- opFunName: s,
20
- args: e
21
- }) : (...e) => this.pushAndRun({
22
- opName: t,
23
- opFunName: s,
24
- args: e
25
- })), this[s] || (this[s] = () => logger.error(`Class method ${s} not implemented.`));
26
- }
27
+ opQueue: new n(s)
28
+ }), r(this, t, !0), r(this, e);
27
29
  }
28
30
  get firstOp() {
29
31
  return this.opQueue.first;
@@ -34,31 +36,31 @@ class QyOpRunner extends EventEmitter {
34
36
  finish() {
35
37
  return this.lastOp?.promise || this.runningOp?.promise;
36
38
  }
37
- pushAndRunWithPromise(e) {
38
- return setPromise(e), this.pushAndRun(e), e.promise;
39
+ pushAndRunWithPromise(s) {
40
+ return t(s), this.pushAndRun(s), s.promise;
39
41
  }
40
- pushAndRun(...e) {
41
- var s = this.opQueue, t = this.lastOp;
42
- "_op_stop" === t?.opFunName ? (s.pop(), s.push(...e, t)) : s.push(...e),
42
+ pushAndRun(...s) {
43
+ var t = this.opQueue, e = this.lastOp;
44
+ "_op_stop" === e?.opFunName ? (t.pop(), t.push(...s, e)) : t.push(...s),
43
45
  this.run();
44
46
  }
45
47
  async run() {
46
48
  if (!this.running) {
47
49
  this.running = !0;
48
- for (var e = this.opQueue; !e.isEmpty; ) {
49
- var s = e.shift(), {
50
- opFunName: t,
50
+ for (var s = this.opQueue; !s.isEmpty; ) {
51
+ var t = s.shift(), {
52
+ opFunName: e,
51
53
  eventName: i,
52
54
  resolve: n,
53
55
  args: r
54
- } = s;
55
- if (t) {
56
- this.runningOp = s;
56
+ } = t;
57
+ if (e) {
58
+ this.runningOp = t;
57
59
  try {
58
- var u = await (r ? this[t](...r) : this[t]());
59
- n && n(u), i && this.emit(i, u);
60
- } catch (e) {
61
- logger.error(`Run ${t} failed:`, e), i && this.emit(i, e);
60
+ var o = await (r ? this[e](...r) : this[e]());
61
+ n && n(o), i && this.emit(i, o);
62
+ } catch (s) {
63
+ u.error(`Run ${e} failed:`, s), i && this.emit(i, s);
62
64
  }
63
65
  this.runningOp = void 0;
64
66
  } else n && n(), i && this.emit(i);
@@ -68,6 +70,21 @@ class QyOpRunner extends EventEmitter {
68
70
  }
69
71
  }
70
72
 
71
- Object.assign(module.exports, {
72
- QyOpRunner: QyOpRunner
73
- });
73
+ function r(i, s, n) {
74
+ for (let e of s) {
75
+ let t = "_op_" + e;
76
+ i[e] || (i[e] = n ? (...s) => i.pushAndRunWithPromise({
77
+ opName: e,
78
+ opFunName: t,
79
+ args: s
80
+ }) : (...s) => i.pushAndRun({
81
+ opName: e,
82
+ opFunName: t,
83
+ args: s
84
+ })), i[t] || (i[t] = () => u.error(`Class method ${t} not implemented.`));
85
+ }
86
+ }
87
+
88
+ export {
89
+ e as QyOpRunner
90
+ };
package/src/QyQueue.js CHANGED
@@ -1,12 +1,18 @@
1
- let arrayLast = require("./QyUtils.js").arrayLast, getDefaultOptions = require("./QyDefaultOptions.js").getDefaultOptions, logger = require("./QyLogger.js").logger;
1
+ import {
2
+ arrayLast as t
3
+ } from "./QyUtils.js";
2
4
 
3
- class QyQueue {
4
- constructor(e) {
5
- e = {
6
- ...getDefaultOptions("QyQueue"),
7
- ...e
5
+ import {
6
+ getDefaultOptions as e
7
+ } from "./QyDefaultOptions.js";
8
+
9
+ class s {
10
+ constructor(t) {
11
+ t = {
12
+ ...e("QyQueue"),
13
+ ...t
8
14
  }, Object.assign(this, {
9
- options: e,
15
+ options: t,
10
16
  queue: [],
11
17
  firstIdx: 0,
12
18
  _waterMark: 0
@@ -16,7 +22,7 @@ class QyQueue {
16
22
  return this.queue[this.firstIdx];
17
23
  }
18
24
  get last() {
19
- return this.isEmpty ? void 0 : arrayLast(this.queue);
25
+ return this.isEmpty ? void 0 : t(this.queue);
20
26
  }
21
27
  get isEmpty() {
22
28
  return this.firstIdx >= this.queue.length;
@@ -30,31 +36,30 @@ class QyQueue {
30
36
  reset() {
31
37
  this.firstIdx = 0, this.queue.length = 0;
32
38
  }
33
- push(...e) {
34
- this.queue.push(...e);
35
- e = this.queue.length;
36
- e > this._waterMark && (this._waterMark = e);
39
+ push(...t) {
40
+ this.queue.push(...t);
41
+ t = this.queue.length;
42
+ t > this._waterMark && (this._waterMark = t);
37
43
  }
38
44
  shift() {
39
- var e;
40
- if (!this.isEmpty) return e = this.first, this._advanceIdx(), e;
41
- }
42
- _advanceIdx() {
43
- var {
44
- queue: t,
45
- firstIdx: e,
46
- options: s
47
- } = this, r = t.length, i = e + 1;
48
- if (r <= i) this.reset(); else {
49
- var u = r - i;
50
- if (i > s.maxLenBeforeRecycle || u <= i) {
51
- for (let e = 0; e < u; ++e) t[e] = t[e + i];
52
- this.firstIdx = 0, t.length = u;
53
- } else this.firstIdx = i, t[e] = void 0;
45
+ if (!this.isEmpty) {
46
+ var t = this.first, e = this, {
47
+ queue: s,
48
+ firstIdx: r,
49
+ options: i
50
+ } = e, u = s.length, h = r + 1;
51
+ if (u <= h) e.reset(); else {
52
+ var a = u - h;
53
+ if (h > i.maxLenBeforeRecycle || a <= h) {
54
+ for (let t = 0; t < a; ++t) s[t] = s[t + h];
55
+ e.firstIdx = 0, s.length = a;
56
+ } else e.firstIdx = h, s[r] = void 0;
57
+ }
58
+ return t;
54
59
  }
55
60
  }
56
61
  }
57
62
 
58
- Object.assign(module.exports, {
59
- QyQueue: QyQueue
60
- });
63
+ export {
64
+ s as QyQueue
65
+ };