datafolder 1.0.11 → 1.0.12

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 (62) hide show
  1. package/README.md +12 -0
  2. package/package.json +1 -1
  3. package/scripts/flights2.js +2 -0
  4. package/src/QyAcl.d.ts +13 -7
  5. package/src/QyAcl.js +122 -138
  6. package/src/QyAclSaver.js +2 -2
  7. package/src/QyAclSaver_Worker.d.ts +2 -2
  8. package/src/QyBatch.d.ts +8 -11
  9. package/src/QyBatch.js +239 -211
  10. package/src/QyBinWriter.d.ts +1 -1
  11. package/src/QyBinWriter.js +15 -15
  12. package/src/QyCD.d.ts +2 -2
  13. package/src/QyCD.js +29 -29
  14. package/src/QyCache.d.ts +6 -1
  15. package/src/QyCache.js +72 -53
  16. package/src/QyCompressor.d.ts +2 -2
  17. package/src/QyCompressor.js +13 -13
  18. package/src/QyDB.d.ts +1 -22
  19. package/src/QyDB.js +23 -78
  20. package/src/QyDefaultOptions.js +5 -0
  21. package/src/QyDir.js +26 -27
  22. package/src/QyExpire.d.ts +21 -0
  23. package/src/QyExpire.js +113 -0
  24. package/src/QyExpireClock.d.ts +15 -0
  25. package/src/QyExpireClock.js +53 -0
  26. package/src/QyExpire_Worker.d.ts +20 -0
  27. package/src/QyExpire_Worker.js +127 -0
  28. package/src/QyFile.js +36 -25
  29. package/src/QyFileContentUtils.js +21 -21
  30. package/src/QyItem.d.ts +1 -0
  31. package/src/QyItem.js +15 -9
  32. package/src/QyJsonSaver.d.ts +1 -1
  33. package/src/QyJsonSaver.js +1 -1
  34. package/src/QyKVData.d.ts +4 -1
  35. package/src/QyKVData.js +148 -136
  36. package/src/QyKVDataCleaner.js +2 -2
  37. package/src/QyKVDataSaver.js +2 -2
  38. package/src/QyKVDataSaver_Worker.d.ts +2 -2
  39. package/src/QyKVDataSaver_Worker.js +5 -5
  40. package/src/QyLogFileSaver.js +2 -2
  41. package/src/QyMessageWorker.d.ts +1 -1
  42. package/src/QyMessageWorker.js +10 -10
  43. package/src/QyMessager.d.ts +1 -1
  44. package/src/QyMessager.js +37 -36
  45. package/src/QyMessager_Run.js +9 -6
  46. package/src/QyQueue.js +8 -12
  47. package/src/QySaver.d.ts +1 -1
  48. package/src/QySaver.js +1 -1
  49. package/src/QySnapshotCompactor.js +2 -2
  50. package/src/QySnapshotCompactor_Worker.js +1 -1
  51. package/src/QySnapshotSaver.js +2 -2
  52. package/src/QySnapshotSaver_Worker.js +1 -1
  53. package/src/QyTrigger.d.ts +1 -1
  54. package/src/QyTrigger.js +20 -21
  55. package/src/QyUtils.d.ts +3 -2
  56. package/src/QyUtils.js +93 -86
  57. package/src/hackernews.js +1 -1
  58. package/src/simulate.js +6 -6
  59. package/src/simulate2.js +4 -4
  60. package/src/soc_pokec.js +1 -1
  61. package/static/codemirror.bundle/editor.bundle.js +43 -9
  62. package/static/datafolderui/QyUIFolderViewer.js +1 -5
package/src/QyMessager.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import {
2
- join as t,
2
+ join as s,
3
3
  extname as e
4
4
  } from "node:path";
5
5
 
6
6
  import {
7
- Worker as p,
8
- setEnvironmentData as s
7
+ Worker as l,
8
+ setEnvironmentData as o
9
9
  } from "node:worker_threads";
10
10
 
11
11
  import {
@@ -17,7 +17,7 @@ import {
17
17
  } from "./QyLogger.js";
18
18
 
19
19
  import {
20
- setPromise as l,
20
+ setPromise as p,
21
21
  __dirname as m
22
22
  } from "./QyUtils.js";
23
23
 
@@ -32,50 +32,51 @@ class r {
32
32
  worker;
33
33
  receiverQueueMap;
34
34
  options;
35
- constructor(e, r, t, s, o = [], a = []) {
35
+ constructor(e, r, s, o = [], t = [], a = this) {
36
36
  s = {
37
37
  ...i("QyMessager"),
38
38
  ...s
39
- }, r += k, Object.assign(this, {
40
- parent: e,
41
- workerTypeFileName: r,
42
- initArgMap: t,
39
+ }, Object.assign(this, {
40
+ workerMsgProcessor: a,
41
+ workerTypeFileName: e,
42
+ initArgMap: r,
43
43
  options: s,
44
44
  receiverQueueMap: {}
45
45
  });
46
46
  for (let r of o) this[r] || (this[r] = (...e) => this.callWorker(r, e));
47
- for (let r of a) this[r] || (this[r] = (...e) => this.castWorker(r, e));
47
+ for (let r of t) this[r] || (this[r] = (...e) => this.castWorker(r, e));
48
48
  }
49
49
  start(...e) {
50
- this.started = !0, s("logLevel", n.level);
51
- var i = this;
52
- if (!i.worker) {
50
+ this.started = !0, o("logLevel", n.level);
51
+ var p = this;
52
+ if (!p.worker) {
53
53
  let {
54
- workerTypeFileName: s,
54
+ workerMsgProcessor: t,
55
+ workerTypeFileName: o,
55
56
  initArgMap: e,
56
- receiverQueueMap: o
57
- } = i;
57
+ receiverQueueMap: a
58
+ } = p;
58
59
  var r = {
59
- workerTypeFileName: s,
60
+ workerTypeFileName: o,
60
61
  initArgMap: e
61
62
  };
62
- let a = i.worker = new p(t(m, "QyMessager_Run" + k), {
63
+ let i = p.worker = new l(s(m, "QyMessager_Run" + k), {
63
64
  workerData: r
64
65
  });
65
- a.on("error", e => {
66
- n.error(`Worker ${s} error:`, e);
67
- }), a.on("message", e => {
66
+ i.on("error", e => {
67
+ n.error(`Worker ${o} error:`, e);
68
+ }), i.on("message", e => {
68
69
  var {
69
70
  opName: r,
70
- ack: t,
71
- result: s
71
+ ack: s,
72
+ result: o
72
73
  } = e;
73
74
  r ? "%o_" == r ? n.handleOutMsg(e) : "%e_" == r ? n.handleErrMsg(e) : (e = e.args || [],
74
- (i.parent || i)[r](...e)) : o[t]?.shift().resolve(s);
75
- }), a.on("exit", e => {
76
- for (var r in a.removeAllListeners(), 0 != e ? n.warn(`Worker ${s} stopped with exitCode ` + e) : n.info(`Worker ${s} stopped.`),
77
- o) for (var t = o[r]; !t.isEmpty; ) t.shift()?.resolve();
78
- i.worker = void 0;
75
+ t[r](...e)) : a[s]?.shift().resolve(o);
76
+ }), i.on("exit", e => {
77
+ for (var r in i.removeAllListeners(), 0 != e ? n.warn(`Worker ${o} stopped with exitCode ` + e) : n.info(`Worker ${o} stopped.`),
78
+ a) for (var s = a[r]; !s.isEmpty; ) s.shift()?.resolve();
79
+ p.worker = void 0;
79
80
  });
80
81
  }
81
82
  return this.callWorker("start", e);
@@ -92,18 +93,18 @@ class r {
92
93
  }
93
94
  callWorker(e, r) {
94
95
  var {
95
- worker: t,
96
- receiverQueueMap: s,
97
- options: o
96
+ worker: s,
97
+ receiverQueueMap: o,
98
+ options: t
98
99
  } = this;
99
- t.postMessage({
100
+ s.postMessage({
100
101
  opName: e,
101
102
  args: r
102
103
  });
103
- let a = s[e];
104
- a = a || (s[e] = new h(o));
105
- t = l({});
106
- return a.push(t), t.promise;
104
+ let a = o[e];
105
+ a = a || (o[e] = new h(t));
106
+ s = p({});
107
+ return a.push(s), s.promise;
107
108
  }
108
109
  }
109
110
 
@@ -1,15 +1,16 @@
1
1
  var t = this && this.__rewriteRelativeImportExtension || function(e, i) {
2
- return "string" == typeof e && /^\.\.?\//.test(e) ? e.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function(e, r, t, o, a) {
3
- return r ? i ? ".jsx" : ".js" : !t || o && a ? t + o + "." + a.toLowerCase() + "js" : e;
2
+ return "string" == typeof e && /^\.\.?\//.test(e) ? e.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function(e, r, t, a, o) {
3
+ return r ? i ? ".jsx" : ".js" : !t || a && o ? t + a + "." + o.toLowerCase() + "js" : e;
4
4
  }) : e;
5
5
  };
6
6
 
7
7
  import {
8
- join as o
8
+ extname as e,
9
+ join as a
9
10
  } from "node:path";
10
11
 
11
12
  import {
12
- getEnvironmentData as a,
13
+ getEnvironmentData as o,
13
14
  workerData as i
14
15
  } from "node:worker_threads";
15
16
 
@@ -22,11 +23,13 @@ import {
22
23
  __dirname as m
23
24
  } from "./QyUtils.js";
24
25
 
26
+ let l = e(import.meta.filename);
27
+
25
28
  (async () => {
26
- s.level = a("logLevel");
29
+ s.level = o("logLevel");
27
30
  var {
28
31
  workerTypeFileName: e,
29
32
  initArgMap: r
30
33
  } = i;
31
- new (await import(t("file://" + o(m, e)))).default(r), s.log("" + n + e);
34
+ new (await import(t("file://" + a(m, e + l)))).default(r), s.log("" + n + e);
32
35
  })();
package/src/QyQueue.js CHANGED
@@ -1,12 +1,8 @@
1
- import {
2
- arrayLast as t
3
- } from "./QyUtils.js";
4
-
5
1
  import {
6
2
  getDefaultOptions as e
7
3
  } from "./QyDefaultOptions.js";
8
4
 
9
- class s {
5
+ class t {
10
6
  options;
11
7
  queue = [];
12
8
  firstIdx = 0;
@@ -21,7 +17,7 @@ class s {
21
17
  return this.queue[this.firstIdx];
22
18
  }
23
19
  get last() {
24
- return this.isEmpty ? void 0 : t(this.queue);
20
+ return this.isEmpty ? void 0 : this.queue.at(-1);
25
21
  }
26
22
  get isEmpty() {
27
23
  return this.firstIdx >= this.queue.length;
@@ -44,15 +40,15 @@ class s {
44
40
  if (!this.isEmpty) {
45
41
  var t = this.first, e = this, {
46
42
  queue: s,
47
- firstIdx: r,
48
- options: i
49
- } = e, u = s.length, h = r + 1;
43
+ firstIdx: i,
44
+ options: r
45
+ } = e, u = s.length, h = i + 1;
50
46
  if (u <= h) e.reset(); else {
51
47
  var a = u - h;
52
- if (h > i.maxLenBeforeRecycle || a <= h) {
48
+ if (h > r.maxLenBeforeRecycle || a <= h) {
53
49
  for (let t = 0; t < a; ++t) s[t] = s[t + h];
54
50
  e.firstIdx = 0, s.length = a;
55
- } else e.firstIdx = h, s[r] = void 0;
51
+ } else e.firstIdx = h, s[i] = void 0;
56
52
  }
57
53
  return t;
58
54
  }
@@ -60,5 +56,5 @@ class s {
60
56
  }
61
57
 
62
58
  export {
63
- s as QyQueue
59
+ t as QyQueue
64
60
  };
package/src/QySaver.d.ts CHANGED
@@ -6,7 +6,7 @@ export declare class QySaver {
6
6
  processAfterLoad(data: any): any;
7
7
  processBeforeSave(data: any): Buffer<any>;
8
8
  removeFile(fileName: any): Promise<void>;
9
- loadFromFile(fileName: any, defaultValue: any): Promise<any>;
9
+ loadFromFile(fileName: any, defaultValue?: any): Promise<any>;
10
10
  saveToFile(data: any, fileName: any, override?: boolean): Promise<boolean>;
11
11
  _saveTmpFileAndRename(contentBuffer: any, tmpFilePath: any, targetFilePath: any): Promise<boolean>;
12
12
  _saveContent(filePath: any, contentBuffer: any): Promise<number | false>;
package/src/QySaver.js CHANGED
@@ -53,7 +53,7 @@ class i {
53
53
  m.warn(`Deleting ${r} failed:`, e);
54
54
  }
55
55
  }
56
- async loadFromFile(r, t) {
56
+ async loadFromFile(r, t = void 0) {
57
57
  r = f(this.dataFolder, r);
58
58
  if (null != t && !await u(r)) return t;
59
59
  try {
@@ -8,13 +8,13 @@ import {
8
8
 
9
9
  class s extends o {
10
10
  constructor(o, s, t) {
11
- super(o, "QySnapshotCompactor_Worker", {
11
+ super("QySnapshotCompactor_Worker", {
12
12
  kvFolder: s,
13
13
  options: t = {
14
14
  ...a("QySnapshotCompactor"),
15
15
  ...t
16
16
  }
17
- }, t, [], [ "compactSnapshots", "saveSnapshotInfos" ]);
17
+ }, t, [], [ "compactSnapshots", "saveSnapshotInfos" ], o);
18
18
  }
19
19
  }
20
20
 
@@ -125,7 +125,7 @@ export default class extends a {
125
125
  combinedSnapshotNumVerList: p,
126
126
  posMap: n.posMap
127
127
  };
128
- })(this, s, t)), await Promise.all(e), this.castParent("onCompactUpdates", t);
128
+ })(this, s, t)), await Promise.all(e), this.postParent("onCompactUpdates", t);
129
129
  }
130
130
  async _op_saveSnapshotInfos() {
131
131
  var a, s, {
@@ -8,13 +8,13 @@ import {
8
8
 
9
9
  class e extends s {
10
10
  constructor(s, e, a) {
11
- super(s, "QySnapshotSaver_Worker", {
11
+ super("QySnapshotSaver_Worker", {
12
12
  kvFolder: e,
13
13
  options: a = {
14
14
  ...o("QySnapshotSaver"),
15
15
  ...a
16
16
  }
17
- }, a, [], [ "saveSnapshot", "castSave", "releaseSnapshot" ]);
17
+ }, a, [], [ "saveSnapshot", "castSave", "releaseSnapshot" ], s);
18
18
  }
19
19
  }
20
20
 
@@ -113,7 +113,7 @@ export default class extends a {
113
113
  })(this)).prefixPM, delete (u = {
114
114
  ...s
115
115
  }).keyValueMap, delete s.posMap, s.isOut = !0, m.info("Sending snapshot " + s.snapshotNum)),
116
- this.castParent("onSnapshotSavedChangeId", t, u);
116
+ this.postParent("onSnapshotSavedChangeId", t, u);
117
117
  }
118
118
  }
119
119
 
@@ -4,7 +4,7 @@ export declare class QyTriggerNode {
4
4
  children: {};
5
5
  triggerMap: {};
6
6
  constructor(name?: any, parent?: any);
7
- insertTrigger(triggerName: any, fileNamePath: any, propNamePathList: any, fun: any): void;
7
+ insertTrigger(triggerName: any, fileNamePath: any, propNamePathList: any, fun?: any): void;
8
8
  removeTrigger(triggerName: any, fileNamePath: any): boolean;
9
9
  get isEmpty(): boolean;
10
10
  removeEmptyNodes(): void;
package/src/QyTrigger.js CHANGED
@@ -11,7 +11,6 @@ import {
11
11
  isEmptyObj as e,
12
12
  isMatchName as l,
13
13
  getMatchParam as d,
14
- arrayLast as f,
15
14
  propNameJoin as v
16
15
  } from "./QyUtils.js";
17
16
 
@@ -21,7 +20,7 @@ import {
21
20
 
22
21
  let y = Array.isArray;
23
22
 
24
- class h {
23
+ class f {
25
24
  name;
26
25
  parent;
27
26
  children = {};
@@ -32,12 +31,12 @@ class h {
32
31
  parent: r
33
32
  });
34
33
  }
35
- insertTrigger(e, r, t, a) {
34
+ insertTrigger(e, r, t, a = void 0) {
36
35
  let i = this;
37
- for (var s of r) {
38
- l(s) && (s = "*");
39
- var o = i.children;
40
- i = o[s] || (o[s] = new h(s, i));
36
+ for (var o of r) {
37
+ l(o) && (o = "*");
38
+ var s = i.children;
39
+ i = s[o] || (s[o] = new f(o, i));
41
40
  }
42
41
  var n = i.triggerMap, g = n[e];
43
42
  g ? Object.assign(g, {
@@ -45,7 +44,7 @@ class h {
45
44
  fileNamePath: r,
46
45
  propNamePathList: t,
47
46
  fun: a
48
- }) : n[e] = new m(e, r, t, a);
47
+ }) : n[e] = new h(e, r, t, a);
49
48
  }
50
49
  removeTrigger(e, r) {
51
50
  let t = this;
@@ -74,7 +73,7 @@ class h {
74
73
  }
75
74
  }
76
75
 
77
- class m {
76
+ class h {
78
77
  triggerName;
79
78
  fileNamePath;
80
79
  propNamePathList;
@@ -91,11 +90,11 @@ class m {
91
90
  var t, {
92
91
  triggerName: a,
93
92
  fileNamePath: i,
94
- propNamePathList: s,
95
- fun: o
93
+ propNamePathList: o,
94
+ fun: s
96
95
  } = this, n = e.fileContent;
97
96
  let g;
98
- for (t of s) {
97
+ for (t of o) {
99
98
  var l = c(r.oldValue, t), f = c(r.newValue, t);
100
99
  p(l, f) || (l = {
101
100
  oldValue: l,
@@ -108,14 +107,14 @@ class m {
108
107
  if (g) {
109
108
  var {
110
109
  namePath: h,
111
- qyCache: s
110
+ qyCache: o
112
111
  } = e;
113
112
  for (let e = 0; e < h.length; ++e) {
114
113
  var m = d(i[e]);
115
114
  m && (g[m] = h[e]);
116
115
  }
117
116
  try {
118
- o && o(g), s.emit(a, g);
117
+ s && s(g), o.emit(a, g);
119
118
  } catch (e) {
120
119
  N.error(`Running trigger ${a} failed:`, g, e);
121
120
  }
@@ -125,7 +124,7 @@ class m {
125
124
 
126
125
  let t = [];
127
126
 
128
- function P(e, r) {
127
+ function m(e, r) {
129
128
  return e ? l(r) ? Object.values(e) : (e = e[r]) ? [ e ] : t : t;
130
129
  }
131
130
 
@@ -133,18 +132,18 @@ function r(e, a) {
133
132
  if (0 != a.length) {
134
133
  let r = [ e ], t = [];
135
134
  for (let e = 0; e < a.length - 1; ++e) {
136
- var i, s = a[e];
137
- for (i of r) for (var o of P(i.subdirMap, s)) i.setChildTriggerNodes(o),
138
- t.push(o);
135
+ var i, o = a[e];
136
+ for (i of r) for (var s of m(i.subdirMap, o)) i.setChildTriggerNodes(s),
137
+ t.push(s);
139
138
  if (0 == t.length) return;
140
139
  [ r, t ] = [ t, r ], t.length = 0;
141
140
  }
142
- var n, g = f(a);
143
- for (n of r) for (var l of P(n.fileMap, g)) n.setChildTriggerNodes(l);
141
+ var n, g = a.at(-1);
142
+ for (n of r) for (var l of m(n.fileMap, g)) n.setChildTriggerNodes(l);
144
143
  }
145
144
  }
146
145
 
147
146
  export {
148
- h as QyTriggerNode,
147
+ f as QyTriggerNode,
149
148
  r as updateTriggerNodes
150
149
  };
package/src/QyUtils.d.ts CHANGED
@@ -7,6 +7,7 @@ export declare const SpecialFilePaths: {
7
7
  TriggerDirPath: string[];
8
8
  RpcDirPath: string[];
9
9
  IndexDirPath: string[];
10
+ ExpireDirPath: string[];
10
11
  IndexPropPathsFileName: string;
11
12
  };
12
13
  export declare function isMatchName(name: any): any;
@@ -18,7 +19,6 @@ export declare function getSubdirMapKey(fullPathHash: any): string;
18
19
  export declare function getFileMapKey(fullPathHash: any): string;
19
20
  export declare function getContentKey(fullPathHash: any): string;
20
21
  export declare function getRandomStr(byteCount?: number): string;
21
- export declare function arrayLast(array: any): any;
22
22
  export declare function isEmptyObj(obj: any): boolean;
23
23
  export declare function isNotNullObj(item: any): boolean;
24
24
  export declare function isString(item: any): item is string;
@@ -40,7 +40,7 @@ export declare function unlockExclusiveFilePath(exclusiveFilePath: any): void;
40
40
  export declare function fromSingleName(name: any): any;
41
41
  export declare function toSingleName(list: any): any;
42
42
  export declare function pathSplit(itemPath: any): any;
43
- export declare function propNameSplit(propNameStr: any): any;
43
+ export declare function ensurePropNamePathList(propNamePathList: any): any[] | undefined;
44
44
  export declare function propNameJoin(propName: any): any;
45
45
  export declare function randomInt(max: any, min?: number): number;
46
46
  export declare function listToMap(list: any): {};
@@ -50,4 +50,5 @@ export declare function loadFileList(fileList: any, preloadCount?: number): Asyn
50
50
  filePath: any;
51
51
  bin: any;
52
52
  }, void, unknown>;
53
+ export declare function getNowSeconds(now?: Date): number;
53
54
  export * as default from "./QyUtils.ts";