datafolder 1.0.2 → 1.0.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.
- package/README.md +34 -31
- package/index.js +1 -3
- package/package.json +5 -3
- package/sample.js +37 -37
- package/scripts/airbnb.js +10 -11
- package/scripts/airbnb2.js +10 -11
- package/scripts/airbnb2_queries.js +20 -22
- package/scripts/airbnb_queries.js +23 -22
- package/scripts/downloadFile.js +29 -31
- package/scripts/express.js +7 -5
- package/scripts/fastify.js +12 -11
- package/scripts/flights.js +9 -9
- package/scripts/flights2.js +9 -9
- package/scripts/flights2_queries.js +107 -105
- package/scripts/flights_queries.js +113 -109
- package/src/QyAcl.js +153 -152
- package/src/QyAclSaver.js +16 -10
- package/src/QyAclSaver_Worker.js +21 -15
- package/src/QyAclWriter.js +23 -13
- package/src/QyBatch.js +298 -263
- package/src/QyBinWriter.js +49 -37
- package/src/QyCD.js +13 -14
- package/src/QyCache.js +177 -140
- package/src/QyCompressor.js +71 -45
- package/src/QyCompressor_Worker.js +17 -9
- package/src/QyDB.js +67 -12
- package/src/QyDefaultOptions.js +13 -10
- package/src/QyDir.js +89 -53
- package/src/QyFetch.js +27 -24
- package/src/QyFile.js +89 -77
- package/src/QyFileContentUtils.js +129 -132
- package/src/QyFileLogger.js +63 -41
- package/src/QyIndex.js +175 -197
- package/src/QyIndexPropTree.js +25 -25
- package/src/QyIntersectNode.js +34 -31
- package/src/QyItem.js +54 -52
- package/src/QyJsonSaver.js +12 -6
- package/src/QyKVData.js +279 -245
- package/src/QyKVDataCleaner.js +12 -6
- package/src/QyKVDataCleaner_Worker.js +77 -59
- package/src/QyKVDataLoader.js +67 -46
- package/src/QyKVDataSaver.js +15 -9
- package/src/QyKVDataSaver_Worker.js +83 -60
- package/src/QyLogFileSaver.js +12 -6
- package/src/QyLogFileSaver_Worker.js +24 -14
- package/src/QyLogger.js +51 -40
- package/src/QyMessageWorker.js +43 -29
- package/src/QyMessager.js +74 -54
- package/src/QyMessager_Run.js +20 -7
- package/src/QyMod.js +15 -11
- package/src/QyOpRunner.js +58 -41
- package/src/QyQueue.js +35 -30
- package/src/QySaver.js +52 -29
- package/src/QySnapshotCompactor.js +15 -9
- package/src/QySnapshotCompactor_Worker.js +131 -110
- package/src/QySnapshotSaver.js +15 -9
- package/src/QySnapshotSaver_Worker.js +125 -110
- package/src/QySnapshots.js +264 -242
- package/src/QyStructure.js +35 -27
- package/src/QyTrigger.js +62 -55
- package/src/QyUnionNode.js +54 -56
- package/src/QyUtils.js +170 -158
- package/src/QyWorker.js +34 -20
- package/src/hackernews.js +63 -71
- package/src/rpc/getFileContent.js +7 -7
- package/src/rpc/getSubItems.js +12 -28
- package/src/rpc/queryFiles.js +2 -25
- package/src/simulate.js +85 -80
- package/src/simulate2.js +77 -78
- package/src/soc_pokec.js +44 -32
- package/static/datafolderui/QyStyledElement.js +12 -12
- package/static/datafolderui/QyUIFolderTree.js +20 -20
- package/static/datafolderui/QyUIUtils.js +8 -8
- package/static/datafolderui/explore-tree.js +31 -31
- package/static/datafolderui/folder-tree.js +2 -2
- package/static/datafolderui/hscrpt.js +9 -17
- package/static/datafolderui/json-view.js +3 -5
- package/static/datafolderui/kv-input.js +15 -15
- package/static/datafolderui/list-input.js +17 -17
- package/static/datafolderui/main-page.js +18 -18
- package/static/datafolderui/num-input.js +5 -5
- package/static/datafolderui/query-editor.js +6 -1
- package/static/datafolderui/querySelectorShadowRoot.js +15 -19
- package/static/datafolderui/resizable-input.js +18 -18
package/src/QyLogger.js
CHANGED
|
@@ -1,55 +1,64 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
},
|
|
11
|
-
verbose:
|
|
12
|
-
info:
|
|
13
|
-
log:
|
|
14
|
-
debug:
|
|
15
|
-
warn:
|
|
16
|
-
error:
|
|
17
|
-
none:
|
|
18
|
-
},
|
|
19
|
-
currentLogLevel:
|
|
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
|
-
|
|
31
|
+
c.currentLogLevel == s.Info && b("info", arguments);
|
|
22
32
|
},
|
|
23
33
|
log: function() {
|
|
24
|
-
|
|
34
|
+
c.currentLogLevel <= s.Debug && b("log", arguments);
|
|
25
35
|
},
|
|
26
36
|
debug: function() {
|
|
27
|
-
|
|
37
|
+
c.currentLogLevel <= s.Debug && b("debug", arguments);
|
|
28
38
|
},
|
|
29
39
|
warn: function() {
|
|
30
|
-
|
|
40
|
+
c.currentLogLevel <= s.Warn && b("warn", arguments);
|
|
31
41
|
},
|
|
32
42
|
error: function() {
|
|
33
|
-
|
|
43
|
+
c.currentLogLevel <= s.Error && b("error", arguments);
|
|
34
44
|
}
|
|
35
|
-
},
|
|
45
|
+
}, u, g, f;
|
|
36
46
|
|
|
37
|
-
function
|
|
38
|
-
|
|
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
|
|
43
|
-
|
|
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
|
-
|
|
50
|
-
|
|
51
|
-
stdout:
|
|
52
|
-
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
|
|
61
|
-
var r = new Error().stack.split("\n"), r = `${new Date().toISOString()} ${
|
|
62
|
-
console[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(
|
|
74
|
+
Object.defineProperty(c, "level", {
|
|
66
75
|
get() {
|
|
67
|
-
return
|
|
76
|
+
return a[c.currentLogLevel];
|
|
68
77
|
},
|
|
69
78
|
set(e) {
|
|
70
|
-
|
|
79
|
+
c.currentLogLevel = l[e];
|
|
71
80
|
}
|
|
72
|
-
}), globalThis.logger =
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
81
|
+
}), globalThis.logger = c;
|
|
82
|
+
|
|
83
|
+
export {
|
|
84
|
+
c as logger,
|
|
85
|
+
L as setFileConsoleDateDirPath,
|
|
86
|
+
d as closeFileConsole
|
|
87
|
+
};
|
package/src/QyMessageWorker.js
CHANGED
|
@@ -1,41 +1,55 @@
|
|
|
1
|
-
|
|
1
|
+
import {
|
|
2
|
+
parentPort as t
|
|
3
|
+
} from "node:worker_threads";
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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:
|
|
11
|
-
_cast:
|
|
12
|
-
} =
|
|
13
|
-
if (
|
|
14
|
-
var
|
|
24
|
+
opName: e,
|
|
25
|
+
_cast: r
|
|
26
|
+
} = s;
|
|
27
|
+
if (e) {
|
|
28
|
+
var a = s.args || [];
|
|
15
29
|
try {
|
|
16
|
-
var
|
|
17
|
-
|
|
18
|
-
ack:
|
|
19
|
-
result:
|
|
20
|
-
}), "stop" ==
|
|
21
|
-
} catch (
|
|
22
|
-
|
|
23
|
-
ack:
|
|
24
|
-
exception:
|
|
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
|
|
41
|
+
} else n.warn("Msg ignored:", s);
|
|
28
42
|
});
|
|
29
43
|
}
|
|
30
|
-
castParent(
|
|
31
|
-
|
|
32
|
-
opName:
|
|
33
|
-
args:
|
|
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
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
53
|
+
export {
|
|
54
|
+
e as QyMessageWorker
|
|
55
|
+
};
|
package/src/QyMessager.js
CHANGED
|
@@ -1,26 +1,76 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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:
|
|
15
|
-
options:
|
|
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
|
|
40
|
+
for (let r of a) this[r] || (this[r] = (...e) => this.castWorker(r, e));
|
|
20
41
|
}
|
|
21
42
|
start(...e) {
|
|
22
|
-
|
|
23
|
-
|
|
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:
|
|
38
|
-
receiverQueueMap:
|
|
87
|
+
worker: s,
|
|
88
|
+
receiverQueueMap: t,
|
|
39
89
|
options: o
|
|
40
90
|
} = this;
|
|
41
|
-
|
|
91
|
+
s.postMessage({
|
|
42
92
|
opName: e,
|
|
43
93
|
args: r
|
|
44
94
|
});
|
|
45
|
-
let
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
return
|
|
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
|
-
|
|
83
|
-
|
|
84
|
-
}
|
|
102
|
+
export {
|
|
103
|
+
e as QyMessager
|
|
104
|
+
};
|
package/src/QyMessager_Run.js
CHANGED
|
@@ -1,13 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}
|
|
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
|
-
|
|
20
|
+
m.level = t("logLevel");
|
|
8
21
|
var {
|
|
9
22
|
workerTypeFileName: e,
|
|
10
23
|
initArgMap: r
|
|
11
|
-
} =
|
|
12
|
-
new (
|
|
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
|
-
|
|
1
|
+
import m from "node:module";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
17
|
+
export {
|
|
18
|
+
o as requireFromModCode
|
|
19
|
+
};
|
package/src/QyOpRunner.js
CHANGED
|
@@ -1,29 +1,31 @@
|
|
|
1
|
-
|
|
1
|
+
import s from "node:events";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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:
|
|
25
|
+
options: s,
|
|
10
26
|
running: !1,
|
|
11
|
-
opQueue: new
|
|
12
|
-
}), this
|
|
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(
|
|
38
|
-
return
|
|
39
|
+
pushAndRunWithPromise(s) {
|
|
40
|
+
return t(s), this.pushAndRun(s), s.promise;
|
|
39
41
|
}
|
|
40
|
-
pushAndRun(...
|
|
41
|
-
var
|
|
42
|
-
"_op_stop" ===
|
|
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
|
|
49
|
-
var
|
|
50
|
-
opFunName:
|
|
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
|
-
} =
|
|
55
|
-
if (
|
|
56
|
-
this.runningOp =
|
|
56
|
+
} = t;
|
|
57
|
+
if (e) {
|
|
58
|
+
this.runningOp = t;
|
|
57
59
|
try {
|
|
58
|
-
var
|
|
59
|
-
n && n(
|
|
60
|
-
} catch (
|
|
61
|
-
|
|
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
|
-
|
|
72
|
-
|
|
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
|
-
|
|
1
|
+
import {
|
|
2
|
+
arrayLast as t
|
|
3
|
+
} from "./QyUtils.js";
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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:
|
|
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 :
|
|
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(...
|
|
34
|
-
this.queue.push(...
|
|
35
|
-
|
|
36
|
-
|
|
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
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
63
|
+
export {
|
|
64
|
+
s as QyQueue
|
|
65
|
+
};
|