datanautics 4.4.0 → 4.5.0

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/CHANGELOG.md CHANGED
@@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](http://keepachangelog.com/)
6
6
  and this project adheres to [Semantic Versioning](http://semver.org/).
7
7
 
8
+ ## [4.5.0] - 2025-08-11
9
+
10
+ ### Added
11
+
12
+ - timestamps in dumps, preparing for multi-instance synchronization
13
+
14
+ ## [4.4.0] - 2025-08-11
15
+
16
+ ### Fixed
17
+
18
+ - handle quoted property names correctly
19
+
8
20
  ## [4.3.1] - 2025-08-11
9
21
 
10
22
  ### Fixed
package/diff.js ADDED
@@ -0,0 +1,36 @@
1
+ // const { readFileSync } = require('fs');
2
+ // const SEPARATOR = /[\r|\n]/g;
3
+ //
4
+ // function diff(source, target) {
5
+ // const targetContent = readFileSync(target).toString('utf8').split(SEPARATOR);
6
+ // const sourceContent = readFileSync(source).toString('utf8').split(SEPARATOR);
7
+ // const tMap = new Map();
8
+ // const sMap = new Map();
9
+ // targetContent.forEach(line => {
10
+ // const [ key, ...valueArray] = line.split(' ');
11
+ // if (key) {
12
+ // tMap.set(key, valueArray?.join(' ') || undefined);
13
+ // }
14
+ // })
15
+ // sourceContent.forEach(line => {
16
+ // const [ key, ...valueArray] = line.split(' ');
17
+ // if (key) {
18
+ // sMap.set(key, valueArray.join(' '));
19
+ // }
20
+ // })
21
+ // const tKeys = tMap.keys();
22
+ // const sKeys = sMap.keys();
23
+ // const remove = tKeys.filter(tKey => !sMap.has(tKey));
24
+ // const set = sKeys.filter(sKey => !tMap.has(sKey) || tMap.get(sKey) !== sMap.get(sKey));
25
+ // const patch = {};
26
+ // remove.forEach(key => {
27
+ // patch[key] = undefined;
28
+ // })
29
+ // set.forEach(key => {
30
+ // patch[key] = sMap.get(key);
31
+ // })
32
+ // console.log(patch)
33
+ // }
34
+ //
35
+ // diff('./test/data2.txt', './test/data.txt')
36
+ console.log(/^\d{13}\s/.test(Date.now() + ' '))
@@ -3,3 +3,4 @@ export * from './events';
3
3
  export * from './falsy-values';
4
4
  export * from './interval';
5
5
  export * from './reg-exp';
6
+ export * from './separator';
@@ -19,4 +19,5 @@ __exportStar(require("./events"), exports);
19
19
  __exportStar(require("./falsy-values"), exports);
20
20
  __exportStar(require("./interval"), exports);
21
21
  __exportStar(require("./reg-exp"), exports);
22
+ __exportStar(require("./separator"), exports);
22
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gEAA8C;AAC9C,2CAAyB;AACzB,iDAA+B;AAC/B,6CAA2B;AAC3B,4CAA0B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gEAA8C;AAC9C,2CAAyB;AACzB,iDAA+B;AAC/B,6CAA2B;AAC3B,4CAA0B;AAC1B,8CAA4B"}
@@ -0,0 +1 @@
1
+ export declare const SEPARATOR: RegExp;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SEPARATOR = void 0;
4
+ exports.SEPARATOR = /[\r|\n]/g;
5
+ //# sourceMappingURL=separator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"separator.js","sourceRoot":"","sources":["../../src/constants/separator.ts"],"names":[],"mappings":";;;AAAa,QAAA,SAAS,GAAG,UAAU,CAAC"}
@@ -4,8 +4,10 @@ import { DatanauticsOptions } from './options';
4
4
  export declare class Datanautics {
5
5
  protected options: DatanauticsOptions;
6
6
  protected data: Record<string, any>;
7
+ protected updateTracking: Record<string, number>;
7
8
  protected eventEmitter: EventEmitter;
8
9
  constructor(options?: DatanauticsOptions);
10
+ normalizeDump(): void;
9
11
  store(): void;
10
12
  protected createDump(): void;
11
13
  protected useDump(): void;
@@ -5,13 +5,16 @@ const events_1 = require("events");
5
5
  const fs_1 = require("fs");
6
6
  const property_accessor_1 = require("property-accessor");
7
7
  const _const_1 = require("./constants");
8
+ const helpers_1 = require("./helpers");
8
9
  class Datanautics {
9
10
  options;
10
11
  data;
12
+ updateTracking;
11
13
  eventEmitter;
12
14
  constructor(options) {
13
15
  this.options = { ..._const_1.defaultDatanauticsOptions, ...(options || {}) };
14
16
  this.data = {};
17
+ this.updateTracking = {};
15
18
  this.eventEmitter = new events_1.EventEmitter();
16
19
  if ((0, fs_1.existsSync)(this.options.dumpPath)) {
17
20
  this.useDump();
@@ -34,6 +37,9 @@ class Datanautics {
34
37
  });
35
38
  }
36
39
  }
40
+ normalizeDump() {
41
+ return (0, helpers_1.normalizeDump)(this.options.dumpPath);
42
+ }
37
43
  store() {
38
44
  return this.createDump();
39
45
  }
@@ -43,8 +49,9 @@ class Datanautics {
43
49
  const data = [];
44
50
  for (const key in flat) {
45
51
  const value = property_accessor_1.PropertyAccessor.get(key.replace(/␣/g, ' '), this.data);
52
+ const timestamp = property_accessor_1.PropertyAccessor.get(key, this.updateTracking) || Date.now();
46
53
  if (value || _const_1.falsyValues.includes(value)) {
47
- data.push(`${key} ${value.toString()}`);
54
+ data.push(`${timestamp} ${key} ${value.toString()}`);
48
55
  }
49
56
  }
50
57
  (0, fs_1.writeFileSync)(this.options.dumpPath, data.join('\n'), 'utf8');
@@ -62,10 +69,24 @@ class Datanautics {
62
69
  if (!line) {
63
70
  continue;
64
71
  }
65
- const [k, ...rest] = line.split(' ');
66
- const v = rest.join(' ');
72
+ const lineData = line.split(' ');
73
+ let t;
74
+ let k;
75
+ let rest;
76
+ if (lineData.length > 2) {
77
+ [
78
+ t,
79
+ k,
80
+ ...rest
81
+ ] = lineData;
82
+ }
83
+ else {
84
+ t = Date.now().toString(10);
85
+ [k, ...rest] = lineData;
86
+ }
67
87
  const key = k.trim().replace(/␣/g, ' ');
68
- if (v !== undefined) {
88
+ const v = rest.join(' ');
89
+ if (key && v !== undefined) {
69
90
  let value = v.trim();
70
91
  if (_const_1.numberRegExp.test(value)) {
71
92
  if (_const_1.intRegExp.test(value)) {
@@ -85,10 +106,16 @@ class Datanautics {
85
106
  value = value === 'true';
86
107
  }
87
108
  property_accessor_1.PropertyAccessor.set(key, value, this.data);
109
+ property_accessor_1.PropertyAccessor.set(key, parseInt(t, 10), this.updateTracking);
110
+ }
111
+ else {
112
+ property_accessor_1.PropertyAccessor.delete(key, this.data);
113
+ property_accessor_1.PropertyAccessor.delete(key, this.updateTracking);
88
114
  }
89
115
  }
90
116
  }
91
117
  set(key, value) {
118
+ property_accessor_1.PropertyAccessor.set(key, Date.now(), this.updateTracking);
92
119
  return property_accessor_1.PropertyAccessor.set(key, value, this.data);
93
120
  }
94
121
  get(key) {
@@ -1 +1 @@
1
- {"version":3,"file":"datanautics.js","sourceRoot":"","sources":["../src/datanautics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"datanautics.js","sourceRoot":"","sources":["../src/datanautics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './two-files-diff';
2
+ export * from './normalize-dump';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./two-files-diff"), exports);
18
+ __exportStar(require("./normalize-dump"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC;AACjC,mDAAiC"}
@@ -0,0 +1 @@
1
+ export declare function normalizeDump(targetPath: string): void;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeDump = void 0;
4
+ const fs_1 = require("fs");
5
+ const _const_1 = require("../constants");
6
+ function normalizeDump(targetPath) {
7
+ const targetContent = (0, fs_1.readFileSync)(targetPath).toString('utf8').split(_const_1.SEPARATOR);
8
+ const normalizedLines = [];
9
+ targetContent.forEach(line => {
10
+ if (line) {
11
+ /^\d{13}\s/.test(line) ? normalizedLines.push(line) : normalizedLines.push(`${Date.now()} ${line}`);
12
+ }
13
+ });
14
+ (0, fs_1.writeFileSync)(targetPath, normalizedLines.join('\n'), 'utf8');
15
+ }
16
+ exports.normalizeDump = normalizeDump;
17
+ //# sourceMappingURL=normalize-dump.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-dump.js","sourceRoot":"","sources":["../../src/helpers/normalize-dump.ts"],"names":[],"mappings":";;;AAAA,2BAAiD;AACjD,mCAAmC;AAEnC,SAAgB,aAAa,CAAC,UAAkB;IAC9C,MAAM,aAAa,GAAG,IAAA,iBAAY,EAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,kBAAS,CAAC,CAAC;IACjF,MAAM,eAAe,GAAa,EAAE,CAAC;IACrC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC3B,IAAI,IAAI,EAAE,CAAC;YACT,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QACtG,CAAC;IACH,CAAC,CAAC,CAAC;IACH,IAAA,kBAAa,EAAC,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;AAChE,CAAC;AATD,sCASC"}
@@ -0,0 +1 @@
1
+ export declare function twoFilesDiff(sourcePath: string, targetPath: string): Record<string, any>;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.twoFilesDiff = void 0;
4
+ const fs_1 = require("fs");
5
+ const _const_1 = require("../constants");
6
+ function twoFilesDiff(sourcePath, targetPath) {
7
+ const targetContent = (0, fs_1.readFileSync)(targetPath).toString('utf8').split(_const_1.SEPARATOR);
8
+ const sourceContent = (0, fs_1.readFileSync)(sourcePath).toString('utf8').split(_const_1.SEPARATOR);
9
+ const tMap = new Map();
10
+ const ttMap = new Map();
11
+ const sMap = new Map();
12
+ const tsMap = new Map();
13
+ targetContent.forEach(line => {
14
+ const [timestamp, key, ...valueArray] = line.split(' ');
15
+ if (key) {
16
+ tMap.set(key, valueArray?.join(' ') || undefined);
17
+ ttMap.set(key, parseInt(timestamp, 10));
18
+ }
19
+ });
20
+ sourceContent.forEach(line => {
21
+ const [timestamp, key, ...valueArray] = line.split(' ');
22
+ if (key) {
23
+ sMap.set(key, valueArray.join(' '));
24
+ tsMap.set(key, parseInt(timestamp, 10));
25
+ }
26
+ });
27
+ const tKeys = Array.from(tMap.keys());
28
+ const sKeys = Array.from(sMap.keys());
29
+ const remove = tKeys.filter(tKey => !sMap.has(tKey));
30
+ const set = sKeys.filter(sKey => !tMap.has(sKey) || (tMap.get(sKey) !== sMap.get(sKey) && tsMap.get(sKey) > ttMap.get(sKey)));
31
+ const patch = {};
32
+ remove.forEach(key => {
33
+ patch[key] = undefined;
34
+ });
35
+ set.forEach(key => {
36
+ patch[key] = `${tMap.get(key)} ${sMap.get(key)}`;
37
+ });
38
+ return patch;
39
+ }
40
+ exports.twoFilesDiff = twoFilesDiff;
41
+ //# sourceMappingURL=two-files-diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"two-files-diff.js","sourceRoot":"","sources":["../../src/helpers/two-files-diff.ts"],"names":[],"mappings":";;;AAAA,2BAAkC;AAClC,mCAAkC;AAElC,SAAgB,YAAY,CAAC,UAAkB,EAAE,UAAkB;IACjE,MAAM,aAAa,GAAG,IAAA,iBAAY,EAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,kBAAS,CAAC,CAAC;IACjF,MAAM,aAAa,GAAG,IAAA,iBAAY,EAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,kBAAS,CAAC,CAAC;IACjF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;IACxB,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC3B,MAAM,CAAE,SAAS,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzD,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC;YAClD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC,CAAC,CAAA;IACF,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC3B,MAAM,CAAE,SAAS,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzD,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACpC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC,CAAC,CAAA;IACF,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAE,CAAC,CAAC;IAC/H,MAAM,KAAK,GAAwB,EAAE,CAAC;IACtC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACnB,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IACzB,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAChB,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC;AAjCD,oCAiCC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "datanautics",
3
- "version": "4.4.0",
3
+ "version": "4.5.0",
4
4
  "description": "",
5
5
  "keywords": [
6
6
  "data store",
@@ -21,12 +21,12 @@
21
21
  "runtime": "node dist/index.js"
22
22
  },
23
23
  "dependencies": {
24
- "property-accessor": "^2.5.0"
24
+ "property-accessor": "^2.5.1"
25
25
  },
26
26
  "devDependencies": {
27
- "@types/node": "20.10.6",
27
+ "@types/node": "22.14.0",
28
28
  "@types/prettier": "2.6.0",
29
- "@types/uuid": "10.0.0",
29
+ "@types/uuid": "11.0.0",
30
30
  "@typescript-eslint/eslint-plugin": "6.17.0",
31
31
  "@typescript-eslint/parser": "6.17.0",
32
32
  "eslint": "8.47.0",
@@ -44,9 +44,9 @@
44
44
  },
45
45
  "repository": {
46
46
  "type": "git",
47
- "url": "git@github.com:Paul-Lazunko/datanautics.git"
47
+ "url": "git@github.com:databikers/datanautics.git"
48
48
  },
49
49
  "engines": {
50
- "node": ">=14.0.0"
50
+ "node": ">=18.0.0"
51
51
  }
52
52
  }
package/test/data.txt CHANGED
@@ -1,7 +1,4 @@
1
- user.firstname John Junior Frost
2
- user.lastname Doe
3
- user.nested.key 1000000000000000000000
4
- user.score␣huya[0] 11
5
- user.score␣huya[1] 12
6
- user.score␣huya[2] 13
7
- score[0] 27
1
+ 1770169858788 user.firstname John Junior Frost 11
2
+ 1770169858788 user.lastname Doe
3
+ 1770169859789 user.nested.key 1000000000000000000000
4
+ 1770169858788 score[0] 27
package/test/test.js CHANGED
@@ -6,9 +6,8 @@ const { setTimeout } = require('timers');
6
6
 
7
7
  const dumpPath = resolve(__dirname, './data.txt');
8
8
  const data = {
9
- user: { firstname: 'John Junior Frost', lastname: 'Doe' },
9
+ user: { firstname: 'John Junior Frost 11', lastname: 'Doe' },
10
10
  score: [27],
11
- 'score huya': [11,12],
12
11
  nested: { key: BigInt('1000000000000000000000') },
13
12
  };
14
13
 
@@ -31,3 +30,4 @@ setTimeout(() => {
31
30
  console.log('tests passed');
32
31
  process.exit(0);
33
32
  }, 2000);
33
+