datafolder 1.0.7 → 1.0.9

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 (124) hide show
  1. package/README.md +4 -1
  2. package/index.js +1 -1
  3. package/internal.md +5 -3
  4. package/package.json +7 -5
  5. package/scripts/airbnb.js +77 -72
  6. package/scripts/airbnb2.js +78 -73
  7. package/scripts/airbnb2_queries.js +181 -229
  8. package/scripts/airbnb_queries.js +214 -265
  9. package/scripts/convertBinFiles.js +47 -49
  10. package/scripts/downloadFile.js +41 -40
  11. package/scripts/express.js +44 -48
  12. package/scripts/fastify.js +71 -80
  13. package/scripts/flights.js +71 -75
  14. package/scripts/flights2.js +78 -81
  15. package/scripts/flights2_queries.js +417 -455
  16. package/scripts/flights_queries.js +381 -407
  17. package/src/QyAcl.d.ts +17 -0
  18. package/src/QyAcl.js +113 -116
  19. package/src/QyAclSaver.d.ts +4 -0
  20. package/src/QyAclSaver.js +3 -3
  21. package/src/QyAclSaver_Worker.d.ts +9 -0
  22. package/src/QyAclSaver_Worker.js +2 -4
  23. package/src/QyAclWriter.d.ts +5 -0
  24. package/src/QyBatch.d.ts +42 -0
  25. package/src/QyBatch.js +8 -8
  26. package/src/QyBinWriter.d.ts +15 -0
  27. package/src/QyCD.d.ts +37 -0
  28. package/src/QyCD.js +8 -6
  29. package/src/QyCache.d.ts +44 -0
  30. package/src/QyCache.js +65 -59
  31. package/src/QyCompressor.d.ts +9 -0
  32. package/src/QyCompressor.js +29 -29
  33. package/src/QyCompressor_Worker.d.ts +1 -0
  34. package/src/QyDB.d.ts +42 -0
  35. package/src/QyDB.js +13 -11
  36. package/src/QyDefaultOptions.d.ts +1 -0
  37. package/src/QyDefaultOptions.js +3 -0
  38. package/src/QyDir.d.ts +48 -0
  39. package/src/QyDir.js +41 -41
  40. package/src/QyFetch.d.ts +7 -0
  41. package/src/QyFetch.js +2 -3
  42. package/src/QyFile.d.ts +19 -0
  43. package/src/QyFile.js +35 -34
  44. package/src/QyFileContentUtils.d.ts +13 -0
  45. package/src/QyFileContentUtils.js +126 -126
  46. package/src/QyFileLogger.d.ts +11 -0
  47. package/src/QyIndex.d.ts +6 -0
  48. package/src/QyIndex.js +73 -75
  49. package/src/QyIndexPropTree.d.ts +7 -0
  50. package/src/QyIndexPropTree.js +24 -24
  51. package/src/QyIntersectNode.d.ts +7 -0
  52. package/src/QyIntersectNode.js +15 -15
  53. package/src/QyItem.d.ts +30 -0
  54. package/src/QyItem.js +32 -28
  55. package/src/QyJsonSaver.d.ts +6 -0
  56. package/src/QyKVData.d.ts +12 -0
  57. package/src/QyKVData.js +11 -10
  58. package/src/QyKVDataCleaner.d.ts +4 -0
  59. package/src/QyKVDataCleaner.js +1 -1
  60. package/src/QyKVDataCleaner_Worker.d.ts +13 -0
  61. package/src/QyKVDataCleaner_Worker.js +2 -4
  62. package/src/QyKVDataLoader.d.ts +9 -0
  63. package/src/QyKVDataLoader.js +11 -11
  64. package/src/QyKVDataSaver.d.ts +4 -0
  65. package/src/QyKVDataSaver.js +6 -6
  66. package/src/QyKVDataSaver_Worker.d.ts +13 -0
  67. package/src/QyKVDataSaver_Worker.js +7 -9
  68. package/src/QyLogFileSaver.d.ts +4 -0
  69. package/src/QyLogFileSaver.js +1 -1
  70. package/src/QyLogFileSaver_Worker.d.ts +8 -0
  71. package/src/QyLogFileSaver_Worker.js +2 -4
  72. package/src/QyLogger.d.ts +10 -0
  73. package/src/QyLogger.js +40 -40
  74. package/src/QyMessageWorker.d.ts +5 -0
  75. package/src/QyMessageWorker.js +7 -7
  76. package/src/QyMessager.d.ts +7 -0
  77. package/src/QyMessager.js +30 -27
  78. package/src/QyMessager_Run.d.ts +1 -0
  79. package/src/QyMessager_Run.js +11 -6
  80. package/src/QyMod.d.ts +1 -0
  81. package/src/QyMod.js +6 -6
  82. package/src/QyOpRunner.d.ts +10 -0
  83. package/src/QyOpRunner.js +39 -39
  84. package/src/QyQueue.d.ts +11 -0
  85. package/src/QySaver.d.ts +10 -0
  86. package/src/QySnapshotCompactor.d.ts +4 -0
  87. package/src/QySnapshotCompactor.js +1 -1
  88. package/src/QySnapshotCompactor_Worker.d.ts +11 -0
  89. package/src/QySnapshotCompactor_Worker.js +2 -4
  90. package/src/QySnapshotSaver.d.ts +4 -0
  91. package/src/QySnapshotSaver.js +1 -1
  92. package/src/QySnapshotSaver_Worker.d.ts +16 -0
  93. package/src/QySnapshotSaver_Worker.js +17 -16
  94. package/src/QySnapshots.d.ts +27 -0
  95. package/src/QySnapshots.js +3 -3
  96. package/src/QyStructure.d.ts +1 -0
  97. package/src/QyStructure.js +18 -18
  98. package/src/QyTrigger.d.ts +9 -0
  99. package/src/QyTrigger.js +30 -30
  100. package/src/QyUnionNode.d.ts +17 -0
  101. package/src/QyUnionNode.js +2 -2
  102. package/src/QyUtils.d.ts +53 -0
  103. package/src/QyUtils.js +140 -117
  104. package/src/QyWorker.d.ts +5 -0
  105. package/src/QyWorker.js +18 -18
  106. package/src/hackernews.d.ts +1 -0
  107. package/src/hackernews.js +59 -47
  108. package/src/rpc/getRpcFiles.js +1 -0
  109. package/src/simulate.d.ts +1 -0
  110. package/src/simulate2.d.ts +1 -0
  111. package/src/soc_pokec.d.ts +1 -0
  112. package/static/codemirror.bundle/editor.bundle.js +399 -184
  113. package/static/datafolderui/QyStyledElement.js +2 -2
  114. package/static/datafolderui/QyUIFolderViewer.js +97 -77
  115. package/static/datafolderui/QyUIUtils.js +4 -4
  116. package/static/datafolderui/code-mirror.js +7 -7
  117. package/static/datafolderui/display-tree.js +13 -10
  118. package/static/datafolderui/hscrpt.js +26 -7
  119. package/static/datafolderui/json-view.js +27 -0
  120. package/static/datafolderui/main-page.js +65 -37
  121. package/static/datafolderui/query-editor.js +8 -8
  122. package/static/datafolderui/rpc-editor.js +31 -0
  123. package/static/datafolderui/trigger-editor.js +9 -6
  124. package/static/datafolderui/QyUIFolderTree.js +0 -188
package/src/QyUtils.js CHANGED
@@ -1,10 +1,10 @@
1
- import e from "node:crypto";
1
+ import t from "node:crypto";
2
2
 
3
- import t from "node:path";
3
+ import n from "node:path";
4
4
 
5
- import n from "node:process";
5
+ import e from "node:process";
6
6
 
7
- import a from "node:fs/promises";
7
+ import l from "node:fs/promises";
8
8
 
9
9
  import o from "node:fs";
10
10
 
@@ -14,7 +14,7 @@ import {
14
14
  fileURLToPath as r
15
15
  } from "node:url";
16
16
 
17
- var s = t.dirname(r(import.meta.url)), u = Object.fromEntries([ "$del", "$link", "$rpl", "$spec", "$raw", "$all", "$clone", "$ext", "$or", "$and", "$gt", "$lt", "$gte", "$lte" ].map(r => [ r, r ])), f = "%", f = {
17
+ var a = n.dirname(r(import.meta.url)), u = Object.fromEntries([ "$del", "$link", "$rpl", "$spec", "$raw", "$all", "$clone", "$ext", "$or", "$and", "$gt", "$lt", "$gte", "$lte" ].map(r => [ r, r ])), f = "%", f = {
18
18
  HiddenFolderName: f,
19
19
  TriggerDirPath: [ f, "trigger" ],
20
20
  RpcDirPath: [ f, "rpc" ],
@@ -26,237 +26,260 @@ function c(r) {
26
26
  return r.startsWith("{") && r.endsWith("}");
27
27
  }
28
28
 
29
- function l(r) {
29
+ function s(r) {
30
30
  return c(r) && r.substring(1, r.length - 1);
31
31
  }
32
32
 
33
- function m(r) {
34
- return 1e12 < r ? Math.round(100 * r / 1e12) / 100 + "TB" : 1e9 < r ? Math.round(100 * r / 1e9) / 100 + "GB" : 1e6 < r ? Math.round(100 * r / 1e6) / 100 + "MB" : 1e3 < r ? Math.round(100 * r / 1e3) / 100 + "KB" : r;
33
+ function d(r) {
34
+ return 1e12 < r ? Math.round(100 * r / 1e12) / 100 + "TB" : 1e9 < r ? Math.round(100 * r / 1e9) / 100 + "GB" : 1e6 < r ? Math.round(100 * r / 1e6) / 100 + "MB" : 1e3 < r ? Math.round(100 * r / 1e3) / 100 + "KB" : r.toString();
35
35
  }
36
36
 
37
- let p = 10;
38
-
39
- function d(r, t = 10) {
40
- return e.createHash("sha256").update(r, "utf8").digest("base64url").slice(0, t);
37
+ function m(r, n = 10) {
38
+ return t.createHash("sha256").update(r, "utf8").digest("base64url").slice(0, n);
41
39
  }
42
40
 
43
- var g = 11;
41
+ var p = 11;
44
42
 
45
- function h(r) {
43
+ function g(r) {
46
44
  return "d" + r;
47
45
  }
48
46
 
49
- function y(r) {
47
+ function h(r) {
50
48
  return "f" + r;
51
49
  }
52
50
 
53
- function S(r) {
51
+ function y(r) {
54
52
  return "c" + r;
55
53
  }
56
54
 
57
- function b(r = 8) {
58
- return e.randomBytes(r).toString("hex");
55
+ function v(r = 8) {
56
+ return t.randomBytes(r).toString("hex");
59
57
  }
60
58
 
61
- function v(r) {
59
+ function b(r) {
62
60
  return r[r.length - 1];
63
61
  }
64
62
 
65
63
  function $(r) {
66
- if (null != r) for (var t in r) if (null != r[t]) return !1;
64
+ if (null != r) for (var n in r) if (null != r[n]) return !1;
67
65
  return !0;
68
66
  }
69
67
 
70
- function P(r) {
68
+ function w(r) {
71
69
  return null != r && "object" == typeof r && !(r instanceof Date);
72
70
  }
73
71
 
74
- function M(r) {
72
+ function P(r) {
75
73
  return "string" == typeof r;
76
74
  }
77
75
 
78
- function x(r) {
76
+ function S(r) {
79
77
  return "number" == typeof r;
80
78
  }
81
79
 
82
- function N(r) {
80
+ function j(r) {
83
81
  return "boolean" == typeof r;
84
82
  }
85
83
 
86
- function w(r) {
84
+ function x(r) {
87
85
  return "function" == typeof r;
88
86
  }
89
87
 
90
88
  function B(r) {
91
- var t = typeof r;
92
- return "string" == t || "number" == t || "boolean" == t || r instanceof Date;
89
+ var n = typeof r;
90
+ return "string" == n || "number" == n || "boolean" == n || r instanceof Date;
93
91
  }
94
92
 
95
- function j(r) {
96
- let t = r.length;
97
- for (;null == r[t - 1] && 0 < t; ) --t;
98
- return r.length = t, r;
93
+ function M(r) {
94
+ let n = r.length;
95
+ for (;null == r[n - 1] && 0 < n; ) --n;
96
+ return r.length = n, r;
99
97
  }
100
98
 
101
- function F(e) {
102
- return e.promise || (e.promise = new Promise((r, t) => Object.assign(e, {
99
+ function O(t) {
100
+ return t.promise || (t.promise = new Promise((r, n) => Object.assign(t, {
103
101
  resolve: r,
104
- reject: t
105
- }))), e;
102
+ reject: n
103
+ }))), t;
106
104
  }
107
105
 
108
- function A(r) {
106
+ function k(r) {
109
107
  return Buffer.isBuffer(r) ? r : Buffer.from(r);
110
108
  }
111
109
 
112
- function H(r) {
110
+ function D(r) {
113
111
  return 1 < r ? "s" : "";
114
112
  }
115
113
 
116
- function O(r) {
117
- return a.mkdir(r, {
114
+ function F(r) {
115
+ return l.mkdir(r, {
118
116
  recursive: !0
119
117
  });
120
118
  }
121
119
 
122
- function T(r) {
123
- return O(t.dirname(r));
120
+ function I(r) {
121
+ return F(n.dirname(r));
124
122
  }
125
123
 
126
- async function k(r) {
124
+ async function T(r) {
127
125
  try {
128
- return (await a.stat(r)).size;
126
+ return (await l.stat(r)).size;
129
127
  } catch (r) {
130
128
  return !1;
131
129
  }
132
130
  }
133
131
 
134
- async function K(r) {
135
- return !1 !== await k(r);
132
+ async function A(r) {
133
+ return !1 !== await T(r);
136
134
  }
137
135
 
138
- function L(r, t) {
136
+ function W(r, n) {
139
137
  return i.setTimeout(1e3 * r, !0, {
140
- signal: t
138
+ signal: n
141
139
  });
142
140
  }
143
141
 
144
- let D = void 0;
145
-
146
- function E() {
147
- for (var r of Object.keys(D)) I(r);
148
- }
142
+ let N = void 0;
149
143
 
150
- async function U(t) {
144
+ async function E(n) {
151
145
  try {
152
- await T(t);
153
- var r = new Date().toISOString() + ": " + n.argv.join(" ");
154
- await a.writeFile(t, r, {
146
+ await I(n);
147
+ var r = new Date().toISOString() + ": " + e.argv.join(" ");
148
+ function t() {
149
+ for (var r of Object.keys(N)) U(r);
150
+ }
151
+ await l.writeFile(n, r, {
155
152
  flag: "wx",
156
153
  flush: !0
157
- }), logger.info("Locked " + t), D ? D[t] = 1 : (D = {
158
- [t]: 1
159
- }, n.on("exit", E), n.on("SIGINT", E));
154
+ }), logger.info("Locked " + n), N ? N[n] = 1 : (N = {
155
+ [n]: 1
156
+ }, e.on("exit", t), e.on("SIGINT", t));
160
157
  } catch (r) {
161
- throw "EEXIST" == r.code && logger.error(`Already started by ${(await a.readFile(t)).toString()}:`, r),
158
+ throw "EEXIST" == r.code && logger.error(`Already started by ${(await l.readFile(n)).toString()}:`, r),
162
159
  r;
163
160
  }
164
161
  }
165
162
 
166
- function I(r) {
163
+ function U(r) {
167
164
  try {
168
165
  o.unlinkSync(r), logger.info("Unlocked " + r);
169
166
  } catch (r) {}
170
167
  }
171
168
 
172
- function _(r) {
169
+ function R(r) {
173
170
  return r.startsWith("[") && r.endsWith("]") ? JSON.parse(r) : r;
174
171
  }
175
172
 
176
- function R(r) {
173
+ function G(r) {
177
174
  return Array.isArray(r) ? 1 == r.length ? r[0] : JSON.stringify(r) : r;
178
175
  }
179
176
 
180
- function W(r) {
177
+ function H(r) {
181
178
  r = r.split("/");
182
179
  return r[0] || (r[0] = "/"), r;
183
180
  }
184
181
 
185
- function z(r) {
182
+ function J(r) {
186
183
  return r.split(".");
187
184
  }
188
185
 
189
- function J(r) {
186
+ function L(r) {
190
187
  return r.join(".");
191
188
  }
192
189
 
193
- function G(r, t = 0) {
194
- return Math.floor(Math.random() * (r - t)) + t;
190
+ function z(r, n = 0) {
191
+ return Math.floor(Math.random() * (r - n)) + n;
195
192
  }
196
193
 
197
- function C(r) {
198
- var t, e = {};
199
- for (t of r) e[t] = 1;
200
- return e;
194
+ function K(r) {
195
+ var n, t = {};
196
+ for (n of r) t[n] = 1;
197
+ return t;
201
198
  }
202
199
 
203
- async function Q(t, e, n, a) {
204
- var o = Buffer.allocUnsafe(a);
205
- for (let r = 0; r < a; ) {
206
- var i = (await e.read(o, r, a - r, n + r)).bytesRead;
207
- if (0 == i) return void logger.error(`read ${t} at ${n + r} returning 0 byte`);
208
- r += i;
200
+ async function Q(n, t, e, o) {
201
+ var i = Buffer.allocUnsafe(o);
202
+ for (let r = 0; r < o; ) {
203
+ var a = (await t.read(i, r, o - r, e + r)).bytesRead;
204
+ if (0 == a) return void logger.error(`read ${n} at ${e + r} returning 0 byte`);
205
+ r += a;
209
206
  }
210
- return o;
207
+ return i;
211
208
  }
212
209
 
213
210
  function X() {
214
- var r = n.availableMemory();
215
- return Math.round(r / (n.memoryUsage.rss() + r) * 100);
211
+ var r = e.availableMemory();
212
+ return Math.round(r / (e.memoryUsage.rss() + r) * 100);
213
+ }
214
+
215
+ async function* q(e, n = 3) {
216
+ var t = e.length, o = (t < n && (n = t), new Array(t));
217
+ for (let r = 0; r < n; ++r) {
218
+ var i = o[r] = {};
219
+ s(r, i);
220
+ }
221
+ for (let r = 0; r < t; ++r) {
222
+ var a = o[r % n], {
223
+ filePath: u,
224
+ bin: f
225
+ } = (a.bin || await a.promise, a), c = r + n;
226
+ c < t && s(c, a), yield {
227
+ filePath: u,
228
+ bin: f
229
+ };
230
+ }
231
+ async function s(r, n) {
232
+ var r = e[r], t = l.readFile(r);
233
+ Object.assign(n, {
234
+ filePath: r,
235
+ promise: t,
236
+ bin: void 0
237
+ }), n.bin = await t;
238
+ }
216
239
  }
217
240
 
218
241
  export * as default from "./QyUtils.js";
219
242
 
220
243
  export {
244
+ a as __dirname,
221
245
  u as SpecialOperators,
222
- d as calHash,
223
- p as Hash_Length,
224
- g as Hash_Key_Length,
225
- W as pathSplit,
246
+ f as SpecialFilePaths,
226
247
  c as isMatchName,
227
- l as getMatchParam,
228
- x as isNumber,
229
- M as isString,
230
- N as isBoolean,
231
- w as isFunction,
232
- P as isNotNullObj,
233
- B as isSimpleType,
248
+ s as getMatchParam,
249
+ d as getSizeStr,
250
+ m as calHash,
251
+ p as Hash_Key_Length,
252
+ g as getSubdirMapKey,
253
+ h as getFileMapKey,
254
+ y as getContentKey,
255
+ v as getRandomStr,
256
+ b as arrayLast,
234
257
  $ as isEmptyObj,
235
- h as getSubdirMapKey,
236
- y as getFileMapKey,
237
- S as getContentKey,
238
- v as arrayLast,
239
- b as getRandomStr,
240
- m as getSizeStr,
241
- F as setPromise,
242
- j as trimArrayTail,
243
- A as toBuffer,
244
- H as getSuffix,
245
- L as sleep,
246
- O as ensureDir,
247
- T as ensureParentDir,
248
- k as getSize,
249
- U as lockExclusiveFilePath,
250
- I as unlockExclusiveFilePath,
251
- K as folderOrFileExists,
252
- f as SpecialFilePaths,
253
- _ as fromSingleName,
254
- R as toSingleName,
255
- G as randomInt,
256
- z as propNameSplit,
257
- J as propNameJoin,
258
- C as listToMap,
258
+ w as isNotNullObj,
259
+ P as isString,
260
+ S as isNumber,
261
+ j as isBoolean,
262
+ x as isFunction,
263
+ B as isSimpleType,
264
+ M as trimArrayTail,
265
+ O as setPromise,
266
+ k as toBuffer,
267
+ D as getSuffix,
268
+ F as ensureDir,
269
+ I as ensureParentDir,
270
+ T as getSize,
271
+ A as folderOrFileExists,
272
+ W as sleep,
273
+ E as lockExclusiveFilePath,
274
+ U as unlockExclusiveFilePath,
275
+ R as fromSingleName,
276
+ G as toSingleName,
277
+ H as pathSplit,
278
+ J as propNameSplit,
279
+ L as propNameJoin,
280
+ z as randomInt,
281
+ K as listToMap,
259
282
  Q as readBufferAsync,
260
283
  X as memoryPercent,
261
- s as __dirname
284
+ q as loadFileList
262
285
  };
@@ -0,0 +1,5 @@
1
+ import { Worker } from "node:worker_threads";
2
+ export declare function runOnceWithWorker(workerJsFilePath: any, workerData: any): {
3
+ worker: Worker;
4
+ promise: any;
5
+ };
package/src/QyWorker.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import {
2
- isAbsolute as a,
2
+ isAbsolute as n,
3
3
  join as m
4
4
  } from "node:path";
5
5
 
@@ -13,31 +13,31 @@ import {
13
13
  } from "./QyLogger.js";
14
14
 
15
15
  import {
16
- setPromise as k,
17
- __dirname as d
16
+ setPromise as d,
17
+ __dirname as f
18
18
  } from "./QyUtils.js";
19
19
 
20
- function e(e, r) {
20
+ function e(e, o) {
21
21
  p("logLevel", g.level);
22
- var o = r.operation;
23
- let t = e + " " + o, {
22
+ var r = o.operation;
23
+ let t = e + " " + r, {
24
24
  promise: s,
25
25
  resolve: i
26
- } = (g.info("Starting worker " + t), k({}));
27
- a(e) || (e = m(d, e));
28
- o = new l(e, {
29
- workerData: r
26
+ } = (g.info("Starting worker " + t), d({}));
27
+ n(e) || (e = m(f, e));
28
+ r = new l(e, {
29
+ workerData: o
30
30
  });
31
- let n;
32
- return o.on("message", e => {
33
- n = !0, i(e);
34
- }), o.on("error", e => {
35
- n = !0, i(e);
36
- }), o.on("exit", e => {
37
- n ? g.info(`Worker ${t} exited.`) : (g.log(`Worker ${t} stopped with exitCode ` + e),
31
+ let a;
32
+ return r.on("message", e => {
33
+ a = !0, i(e);
34
+ }), r.on("error", e => {
35
+ a = !0, i(e);
36
+ }), r.on("exit", e => {
37
+ a ? g.info(`Worker ${t} exited.`) : (g.log(`Worker ${t} stopped with exitCode ` + e),
38
38
  i());
39
39
  }), {
40
- worker: o,
40
+ worker: r,
41
41
  promise: s
42
42
  };
43
43
  }
@@ -0,0 +1 @@
1
+ export {};
package/src/hackernews.js CHANGED
@@ -1,85 +1,97 @@
1
1
  import {
2
- join as o
2
+ join as n,
3
+ basename as i
3
4
  } from "node:path";
4
5
 
5
6
  import {
6
- readdir as n,
7
- readFile as i
7
+ readdir as s
8
8
  } from "node:fs/promises";
9
9
 
10
10
  import {
11
11
  QyDB as e
12
12
  } from "./QyDB.js";
13
13
 
14
- logger.level = "info";
14
+ import {
15
+ loadFileList as l
16
+ } from "./QyUtils.js";
17
+
18
+ import {
19
+ logger as u
20
+ } from "./QyLogger.js";
21
+
22
+ u.level = "info";
15
23
 
16
- let s = "D:\\exp\\HackerBook\\static-shards_json", w = new e({
17
- fileLogLevel: "basic",
24
+ let m = "D:\\exp\\HackerBook\\static-shards_json", j = new e("C:\\tmp\\hackernews", {
25
+ fileLogLevel: "none",
18
26
  maxInMemSnapshotCount: 1,
19
27
  snapshotMaxChangeCount: 2e3,
20
- unloadMemInterval: 2e4
28
+ unloadMemInterval: 2e4,
29
+ noAcl: !0
21
30
  }), C = 100;
22
31
 
23
- function l(e, t) {
24
- var a, r = {}, o = {};
25
- for (a of e) {
32
+ function c(e, t) {
33
+ var o, a = {}, r = {};
34
+ for (o of e) {
26
35
  var {
27
36
  parent_id: n,
28
37
  child_id: i
29
- } = a;
30
- let e = o[i], t = (e = e || (o[i] = {}), o[n]), r = (t = t || (o[n] = {})).children;
31
- (r = r || (t.children = {}))[i] = e;
38
+ } = o;
39
+ let e = r[i], t = (e = e || (r[i] = {}), r[n]), a = (t = t || (r[n] = {})).children;
40
+ (a = a || (t.children = {}))[i] = e;
32
41
  }
33
- var s, l, c, m = {};
42
+ var s, l, m, c = {};
34
43
  let d = 0, f = 0;
35
44
  for (s of t) {
36
45
  var {
37
- id: h,
38
- time: p,
39
- parent: g
46
+ id: p,
47
+ time: h,
48
+ parent: v
40
49
  } = s;
41
- if (null == g) {
42
- p = (e => [ (e = new Date(1e3 * e)).getUTCFullYear(), e.getUTCMonth() + 1, e.getUTCDate() ])(p);
43
- r[h] = p;
44
- let e = o[h];
45
- e ? e.item = s : e = o[h] = {
50
+ if (null == v) {
51
+ h = (e => [ (e = new Date(1e3 * e)).getUTCFullYear(), e.getUTCMonth() + 1, e.getUTCDate() ])(h);
52
+ a[p] = h;
53
+ let e = r[p];
54
+ e ? e.item = s : e = r[p] = {
46
55
  item: s
47
- }, m[h] = e, ++d;
56
+ }, c[p] = e, ++d;
48
57
  } else {
49
- p = o[g];
50
- if (p) {
51
- let e = p.children, t = (e = e || (p.children = {}))[h];
52
- t ? t.item = s : t = e[h] = {
58
+ h = r[v];
59
+ if (h) {
60
+ let e = h.children, t = (e = e || (h.children = {}))[p];
61
+ t ? t.item = s : t = e[p] = {
53
62
  item: s
54
63
  }, ++f;
55
- } else logger.warn(h + `'s parent ${g} not exist.`);
64
+ } else u.warn(p + `'s parent ${v} not exist.`);
56
65
  }
57
66
  }
58
- let v = 0;
59
- for (l in m) {
60
- var u = r[l];
61
- w.batch.insert([ "hackernews", ...u, l ], m[l]), ++v >= C && (w.batch.run(),
62
- v = 0);
67
+ let g = 0;
68
+ for (l in c) {
69
+ var w = a[l];
70
+ j.batch.insert([ "hackernews", ...w, l ], c[l]), ++g >= C && (j.batch.run(),
71
+ g = 0);
63
72
  }
64
- for (c in 0 < v && w.batch.run(), m) !function e(t) {
73
+ for (m in 0 < g && j.batch.run(), c) !function e(t) {
65
74
  delete t.item;
66
- let r = t.children;
67
- for (var a in r) e(r[a]);
68
- }(m[c]);
75
+ let a = t.children;
76
+ for (var o in a) e(a[o]);
77
+ }(c[m]);
69
78
  }
70
79
 
71
80
  (async () => {
72
- if (process.argv[2] && (logger.level = process.argv[2]), console.time("run"),
73
- console.time("start"), await w.start(), console.timeEnd("start"), !w.dir("hackernews")) {
74
- var e;
75
- for (e of (await n(s)).map(e => /([0-9]+).json/.exec(e)[1]).sort((e, t) => e - t)) {
76
- var t = `shard_${e}.json`, {
77
- edges: r,
78
- items: a
79
- } = JSON.parse(await i(o(s, t)));
80
- logger.warn(t), l(r, a);
81
+ if (process.argv[2] && (u.level = process.argv[2]), console.time("run"), console.time("start"),
82
+ await j.start(), console.timeEnd("start"), !j.dir("hackernews")) {
83
+ var e, t, a = (await s(m)).map(e => /([0-9]+).json/.exec(e)[1]).sort((e, t) => e - t).map(e => n(m, `shard_${e}.json`));
84
+ for await ({
85
+ filePath: e,
86
+ bin: t
87
+ } of l(a)) {
88
+ var {
89
+ edges: o,
90
+ items: r
91
+ } = JSON.parse(t);
92
+ u.warn(i(e)), c(o, r);
81
93
  }
82
94
  await 0;
83
95
  }
84
- console.time("stop"), await w.stop(), console.timeEnd("stop"), console.timeEnd("run");
96
+ console.time("stop"), await j.stop(), console.timeEnd("stop"), console.timeEnd("run");
85
97
  })();
@@ -0,0 +1 @@
1
+ module.exports = () => dataFolder.fileListToTree(dataFolder.rpcFileList);
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};