@peerbit/document 6.0.7 → 7.0.0-3a75d6e

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 (66) hide show
  1. package/README.md +2 -2
  2. package/dist/benchmark/index.d.ts +2 -0
  3. package/dist/benchmark/index.d.ts.map +1 -0
  4. package/dist/benchmark/index.js +125 -0
  5. package/dist/benchmark/index.js.map +1 -0
  6. package/dist/benchmark/memory/index.d.ts +2 -0
  7. package/dist/benchmark/memory/index.d.ts.map +1 -0
  8. package/dist/benchmark/memory/index.js +122 -0
  9. package/dist/benchmark/memory/index.js.map +1 -0
  10. package/dist/benchmark/memory/insert.d.ts +2 -0
  11. package/dist/benchmark/memory/insert.d.ts.map +1 -0
  12. package/dist/benchmark/memory/insert.js +133 -0
  13. package/dist/benchmark/memory/insert.js.map +1 -0
  14. package/dist/benchmark/memory/utils.d.ts +13 -0
  15. package/dist/benchmark/memory/utils.d.ts.map +1 -0
  16. package/dist/benchmark/memory/utils.js +2 -0
  17. package/dist/benchmark/memory/utils.js.map +1 -0
  18. package/dist/benchmark/replication.d.ts +2 -0
  19. package/dist/benchmark/replication.d.ts.map +1 -0
  20. package/dist/benchmark/replication.js +172 -0
  21. package/dist/benchmark/replication.js.map +1 -0
  22. package/dist/src/borsh.d.ts +2 -0
  23. package/dist/src/borsh.d.ts.map +1 -0
  24. package/dist/src/borsh.js +16 -0
  25. package/dist/src/borsh.js.map +1 -0
  26. package/dist/src/constants.d.ts +2 -0
  27. package/dist/src/constants.d.ts.map +1 -0
  28. package/dist/src/constants.js +2 -0
  29. package/dist/src/constants.js.map +1 -0
  30. package/dist/src/index.d.ts +4 -0
  31. package/dist/src/index.d.ts.map +1 -0
  32. package/dist/src/index.js +4 -0
  33. package/dist/src/index.js.map +1 -0
  34. package/dist/src/program.d.ts +87 -0
  35. package/dist/src/program.d.ts.map +1 -0
  36. package/{lib/esm/document-store.js → dist/src/program.js} +159 -138
  37. package/dist/src/program.js.map +1 -0
  38. package/dist/src/search.d.ts +132 -0
  39. package/dist/src/search.d.ts.map +1 -0
  40. package/dist/src/search.js +845 -0
  41. package/dist/src/search.js.map +1 -0
  42. package/package.json +74 -43
  43. package/src/borsh.ts +19 -0
  44. package/src/constants.ts +1 -0
  45. package/src/index.ts +3 -3
  46. package/src/program.ts +580 -0
  47. package/src/search.ts +1217 -0
  48. package/LICENSE +0 -202
  49. package/lib/esm/document-index.d.ts +0 -147
  50. package/lib/esm/document-index.js +0 -942
  51. package/lib/esm/document-index.js.map +0 -1
  52. package/lib/esm/document-store.d.ts +0 -72
  53. package/lib/esm/document-store.js.map +0 -1
  54. package/lib/esm/index.d.ts +0 -3
  55. package/lib/esm/index.js +0 -4
  56. package/lib/esm/index.js.map +0 -1
  57. package/lib/esm/query.d.ts +0 -191
  58. package/lib/esm/query.js +0 -615
  59. package/lib/esm/query.js.map +0 -1
  60. package/lib/esm/utils.d.ts +0 -3
  61. package/lib/esm/utils.js +0 -12
  62. package/lib/esm/utils.js.map +0 -1
  63. package/src/document-index.ts +0 -1268
  64. package/src/document-store.ts +0 -547
  65. package/src/query.ts +0 -525
  66. package/src/utils.ts +0 -17
package/README.md CHANGED
@@ -106,6 +106,6 @@ let responses: Document[] = await store2.docs.index.search(
106
106
  ],
107
107
  })
108
108
  );
109
- expect(responses]).toHaveLength(2);
110
- expect(responses.map((x) => x.value.id)).toEqual(["1", "2"]);
109
+ expect(responses]).to.have.length(2);
110
+ expect(responses.map((x) => x.value.id)).to.deep.equal(["1", "2"]);
111
111
  ```
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../benchmark/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,125 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { field, option, variant } from "@dao-xyz/borsh";
11
+ import { Program } from "@peerbit/program";
12
+ import { TestSession } from "@peerbit/test-utils";
13
+ import B from "benchmark";
14
+ import crypto from "crypto";
15
+ import { v4 as uuid } from "uuid";
16
+ import { Documents } from "../src/program.js";
17
+ // Run with "node --loader ts-node/esm ./benchmark/index.ts"
18
+ // put x 9,522 ops/sec ±4.61% (76 runs sampled) (prev merge store with log: put x 11,527 ops/sec ±6.09% (75 runs sampled))
19
+ let Document = class Document {
20
+ id;
21
+ name;
22
+ number;
23
+ bytes;
24
+ constructor(opts) {
25
+ if (opts) {
26
+ this.id = opts.id;
27
+ this.name = opts.name;
28
+ this.number = opts.number;
29
+ this.bytes = opts.bytes;
30
+ }
31
+ }
32
+ };
33
+ __decorate([
34
+ field({ type: "string" }),
35
+ __metadata("design:type", String)
36
+ ], Document.prototype, "id", void 0);
37
+ __decorate([
38
+ field({ type: option("string") }),
39
+ __metadata("design:type", String)
40
+ ], Document.prototype, "name", void 0);
41
+ __decorate([
42
+ field({ type: option("u64") }),
43
+ __metadata("design:type", BigInt)
44
+ ], Document.prototype, "number", void 0);
45
+ __decorate([
46
+ field({ type: Uint8Array }),
47
+ __metadata("design:type", Uint8Array)
48
+ ], Document.prototype, "bytes", void 0);
49
+ Document = __decorate([
50
+ variant("document"),
51
+ __metadata("design:paramtypes", [Document])
52
+ ], Document);
53
+ let TestStore = class TestStore extends Program {
54
+ docs;
55
+ constructor(properties) {
56
+ super();
57
+ if (properties) {
58
+ this.docs = properties.docs;
59
+ }
60
+ }
61
+ async open(options) {
62
+ await this.docs.open({ ...options, type: Document });
63
+ }
64
+ };
65
+ __decorate([
66
+ field({ type: Documents }),
67
+ __metadata("design:type", Documents)
68
+ ], TestStore.prototype, "docs", void 0);
69
+ TestStore = __decorate([
70
+ variant("test_documents"),
71
+ __metadata("design:paramtypes", [Object])
72
+ ], TestStore);
73
+ const peersCount = 1;
74
+ const session = await TestSession.connected(peersCount);
75
+ const store = new TestStore({
76
+ docs: new Documents(),
77
+ });
78
+ const client = session.peers[0];
79
+ await client.open(store, {
80
+ args: {
81
+ replicate: {
82
+ factor: 1,
83
+ },
84
+ log: {
85
+ trim: { type: "length", to: 100 },
86
+ },
87
+ },
88
+ });
89
+ const resolver = new Map();
90
+ store.docs.events.addEventListener("change", (change) => {
91
+ change.detail.added.forEach((doc) => {
92
+ resolver.get(doc.id)();
93
+ resolver.delete(doc.id);
94
+ });
95
+ });
96
+ const suite = new B.Suite();
97
+ suite
98
+ .add("put", {
99
+ fn: async (deferred) => {
100
+ const doc = new Document({
101
+ id: uuid(),
102
+ name: "hello",
103
+ number: 1n,
104
+ bytes: crypto.randomBytes(1200),
105
+ });
106
+ resolver.set(doc.id, () => {
107
+ deferred.resolve();
108
+ });
109
+ await store.docs.put(doc, { unique: true });
110
+ },
111
+ minSamples: 300,
112
+ defer: true,
113
+ })
114
+ .on("cycle", (event) => {
115
+ console.log(String(event.target));
116
+ })
117
+ .on("error", (err) => {
118
+ throw err;
119
+ })
120
+ .on("complete", async function (...args) {
121
+ await store.drop();
122
+ await session.stop();
123
+ })
124
+ .run();
125
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../benchmark/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../benchmark/memory/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,122 @@
1
+ // Run with "node --loader ts-node/esm ./benchmark/memory/index.ts"
2
+ // run insert.ts with ts-node in a subprocess so we can measure memory consumption
3
+ import { fork } from "child_process";
4
+ import { dirname, resolve } from "path";
5
+ import pidusage from "pidusage";
6
+ import Table from "tty-table";
7
+ import { fileURLToPath } from "url";
8
+ const __dirname = dirname(fileURLToPath(import.meta.url));
9
+ const child = fork(resolve(__dirname, "insert.ts"), [], {
10
+ stdio: ["pipe", "pipe", "pipe", "ipc"],
11
+ });
12
+ const ramMemoryUsage = () => {
13
+ return new Promise((resolve) => {
14
+ pidusage(child.pid, (err, stats) => {
15
+ if (err) {
16
+ console.error(err);
17
+ resolve(0);
18
+ }
19
+ else {
20
+ resolve(stats.memory);
21
+ }
22
+ });
23
+ });
24
+ };
25
+ child.stdout.on("data", (data) => {
26
+ // log without newline
27
+ process.stdout.write(data.toString());
28
+ });
29
+ child.stderr.on("data", (data) => {
30
+ // log without newline
31
+ process.stderr.write(data.toString());
32
+ });
33
+ child.on("close", (code) => {
34
+ console.log(`child process exited with code ${code}`);
35
+ });
36
+ // wait for the child process to exit
37
+ child.on("exit", (code) => {
38
+ process.exit(code);
39
+ });
40
+ // wait for child to be ready
41
+ const waitForReady = () => {
42
+ return new Promise((resolve) => {
43
+ let listener = (data) => {
44
+ try {
45
+ const message = JSON.parse(data.toString());
46
+ if (message.type === "ready") {
47
+ child.off("message", listener);
48
+ resolve();
49
+ }
50
+ }
51
+ catch (error) { }
52
+ };
53
+ child.on("message", listener);
54
+ });
55
+ };
56
+ await waitForReady();
57
+ child.send({ type: "init", storage: "disc" });
58
+ await waitForReady();
59
+ // insert docs into the store by sending a message to the child
60
+ const send = (message) => {
61
+ child.send(message);
62
+ };
63
+ // send the insert message
64
+ let inserts = 150;
65
+ let insertBatchSize = 10;
66
+ let memoryUsages = [];
67
+ console.log("Inserting batches of", insertBatchSize, "documents", inserts, "times");
68
+ for (let i = 0; i < inserts; i++) {
69
+ // log a progress bar that is updating without printing newline
70
+ process.stdout.write(`\r${i}/${inserts}`);
71
+ send({ type: "insert", docs: insertBatchSize, size: 1e6 });
72
+ await waitForReady();
73
+ let memory = await ramMemoryUsage();
74
+ memoryUsages.push(memory);
75
+ }
76
+ console.log("DONE!");
77
+ // do ascii graph
78
+ let max = Math.max(...memoryUsages);
79
+ let min = Math.min(...memoryUsages);
80
+ let range = max - min;
81
+ let steps = 300;
82
+ let step = range / steps;
83
+ let buckets = Array.from({ length: steps }, (_, i) => {
84
+ return min + i * step;
85
+ });
86
+ let lines = memoryUsages.map((memory) => {
87
+ /* let bucket = Math.floor((memory - min) / step) */
88
+ return Array.from({ length: steps }, (_, i) => {
89
+ return memory > buckets[i] ? "█" : " ";
90
+ }).join("");
91
+ });
92
+ console.log("Memory Usage Graph");
93
+ // do a nicely tty-table formatted table with "Memory ascii", "Memory bytes (mb)", "# of inserts".
94
+ const colorString = (bytes, string) => {
95
+ // color encode byte values so that the highest get red color and lowest get green color
96
+ // and values in between get a color in in shades of red and green
97
+ let colors = Array.from({ length: steps + 1 }, (_, i) => {
98
+ let r = Math.floor(255 * (i / steps));
99
+ let g = Math.floor(255 * ((steps - i) / steps));
100
+ let b = 0;
101
+ return `38;2;${r};${g};${b}`;
102
+ });
103
+ let bucket = Math.floor((bytes - min) / step);
104
+ let color = colors[bucket];
105
+ return `\x1b[${color}m${string}\x1b[0m`;
106
+ };
107
+ let table = Table([
108
+ { value: "Memory usage (*)", width: steps + 2, align: "left" },
109
+ { value: "Memory bytes (mb)" },
110
+ { value: "# of inserts" },
111
+ ], lines.map((line, i) => {
112
+ return [
113
+ { value: colorString(memoryUsages[i], line) },
114
+ { value: Math.round(memoryUsages[i] / 1e6) },
115
+ { value: insertBatchSize * (i + 1) },
116
+ ];
117
+ }));
118
+ console.log(table.render());
119
+ console.log("Max memory usage", Math.round(max / 1e6), "mb");
120
+ console.log("Min memory usage", Math.round(min / 1e6), "mb");
121
+ child.kill();
122
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../benchmark/memory/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=insert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insert.d.ts","sourceRoot":"","sources":["../../../benchmark/memory/insert.ts"],"names":[],"mappings":""}
@@ -0,0 +1,133 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ // this benchmark will test how much memory is used to store 1m documents
11
+ import { field, option, variant } from "@dao-xyz/borsh";
12
+ import { Program } from "@peerbit/program";
13
+ import { TestSession } from "@peerbit/test-utils";
14
+ import crypto from "crypto";
15
+ import path from "path";
16
+ import { v4 as uuid } from "uuid";
17
+ import { Documents } from "../../src/program.js";
18
+ // Run with "node --loader ts-node/esm ./benchmark/memory/index.ts"
19
+ // handle io from process and parent
20
+ let Document = class Document {
21
+ id;
22
+ name;
23
+ number;
24
+ bytes;
25
+ constructor(opts) {
26
+ if (opts) {
27
+ this.id = opts.id;
28
+ this.name = opts.name;
29
+ this.number = opts.number;
30
+ this.bytes = opts.bytes;
31
+ }
32
+ }
33
+ };
34
+ __decorate([
35
+ field({ type: "string" }),
36
+ __metadata("design:type", String)
37
+ ], Document.prototype, "id", void 0);
38
+ __decorate([
39
+ field({ type: option("string") }),
40
+ __metadata("design:type", String)
41
+ ], Document.prototype, "name", void 0);
42
+ __decorate([
43
+ field({ type: option("u64") }),
44
+ __metadata("design:type", BigInt)
45
+ ], Document.prototype, "number", void 0);
46
+ __decorate([
47
+ field({ type: Uint8Array }),
48
+ __metadata("design:type", Uint8Array)
49
+ ], Document.prototype, "bytes", void 0);
50
+ Document = __decorate([
51
+ variant("document"),
52
+ __metadata("design:paramtypes", [Document])
53
+ ], Document);
54
+ let TestStore = class TestStore extends Program {
55
+ docs;
56
+ constructor(properties) {
57
+ super();
58
+ if (properties) {
59
+ this.docs = properties.docs;
60
+ }
61
+ }
62
+ async open(options) {
63
+ await this.docs.open({ ...options, type: Document });
64
+ }
65
+ };
66
+ __decorate([
67
+ field({ type: Documents }),
68
+ __metadata("design:type", Documents)
69
+ ], TestStore.prototype, "docs", void 0);
70
+ TestStore = __decorate([
71
+ variant("test_documents"),
72
+ __metadata("design:paramtypes", [Object])
73
+ ], TestStore);
74
+ const peersCount = 1;
75
+ const sendReady = () => process.send(JSON.stringify({ type: "ready" }));
76
+ let session;
77
+ try {
78
+ let store = undefined;
79
+ process.on("message", async (message) => {
80
+ if (message.type === "init") {
81
+ session = await TestSession.connected(peersCount, {
82
+ directory: message.storage === "in-memory"
83
+ ? undefined
84
+ : path.join("./tmp", uuid()),
85
+ });
86
+ store = new TestStore({
87
+ docs: new Documents(),
88
+ });
89
+ const client = session.peers[0];
90
+ await client.open(store, {
91
+ args: {
92
+ replicate: {
93
+ factor: 1,
94
+ },
95
+ },
96
+ });
97
+ }
98
+ else if (message.type === "insert") {
99
+ for (let i = 0; i < message.docs; i++) {
100
+ const doc = new Document({
101
+ id: uuid(),
102
+ name: "hello",
103
+ number: 1n,
104
+ bytes: crypto.randomBytes(message.size ?? 1024),
105
+ });
106
+ await store.docs.put(doc, { unique: true });
107
+ }
108
+ }
109
+ else if (message.type === "done") {
110
+ process.exit(0);
111
+ }
112
+ sendReady();
113
+ });
114
+ sendReady();
115
+ // suspend the process until we receive a 'done' from parent
116
+ await new Promise((resolve) => {
117
+ let listener = (message) => {
118
+ if (message.type === "done") {
119
+ process.off("message", listener);
120
+ resolve();
121
+ }
122
+ };
123
+ process.on("message", listener);
124
+ });
125
+ }
126
+ catch (error) {
127
+ throw new Error("Failed to insert: " + error?.message);
128
+ }
129
+ finally {
130
+ console.log("DONE!");
131
+ await session.stop();
132
+ }
133
+ //# sourceMappingURL=insert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insert.js","sourceRoot":"","sources":["../../../benchmark/memory/insert.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export type Message = {
2
+ type: "init";
3
+ storage: "in-memory" | "disc";
4
+ } | {
5
+ type: "insert";
6
+ docs: number;
7
+ size?: number;
8
+ } | {
9
+ type: "done";
10
+ } | {
11
+ type: "ready";
12
+ };
13
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../benchmark/memory/utils.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../benchmark/memory/utils.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=replication.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replication.d.ts","sourceRoot":"","sources":["../../benchmark/replication.ts"],"names":[],"mappings":""}
@@ -0,0 +1,172 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { yamux } from "@chainsafe/libp2p-yamux";
11
+ import { field, option, variant } from "@dao-xyz/borsh";
12
+ import { tcp } from "@libp2p/tcp";
13
+ import { Program } from "@peerbit/program";
14
+ import { DirectSub } from "@peerbit/pubsub";
15
+ import { delay } from "@peerbit/time";
16
+ import B from "benchmark";
17
+ import { Peerbit, createLibp2pExtended } from "peerbit";
18
+ import { v4 as uuid } from "uuid";
19
+ import { Documents } from "../src/program.js";
20
+ // Run with "node --loader ts-node/esm ./benchmark/replication.ts"
21
+ // put x 862 ops/sec ±4.75% (75 runs sampled)
22
+ let Document = class Document {
23
+ id;
24
+ name;
25
+ number;
26
+ constructor(opts) {
27
+ if (opts) {
28
+ this.id = opts.id;
29
+ this.name = opts.name;
30
+ this.number = opts.number;
31
+ }
32
+ }
33
+ };
34
+ __decorate([
35
+ field({ type: "string" }),
36
+ __metadata("design:type", String)
37
+ ], Document.prototype, "id", void 0);
38
+ __decorate([
39
+ field({ type: option("string") }),
40
+ __metadata("design:type", String)
41
+ ], Document.prototype, "name", void 0);
42
+ __decorate([
43
+ field({ type: option("u64") }),
44
+ __metadata("design:type", BigInt)
45
+ ], Document.prototype, "number", void 0);
46
+ Document = __decorate([
47
+ variant("document"),
48
+ __metadata("design:paramtypes", [Document])
49
+ ], Document);
50
+ let TestStore = class TestStore extends Program {
51
+ docs;
52
+ constructor() {
53
+ super();
54
+ this.docs = new Documents();
55
+ }
56
+ async open(options) {
57
+ await this.docs.open({ ...options, type: Document });
58
+ }
59
+ };
60
+ __decorate([
61
+ field({ type: Documents }),
62
+ __metadata("design:type", Documents)
63
+ ], TestStore.prototype, "docs", void 0);
64
+ TestStore = __decorate([
65
+ variant("test_documents"),
66
+ __metadata("design:paramtypes", [])
67
+ ], TestStore);
68
+ const peers = await Promise.all([
69
+ await createLibp2pExtended({
70
+ transports: [tcp()],
71
+ streamMuxers: [yamux()],
72
+ services: {
73
+ pubsub: (sub) => new DirectSub(sub, {
74
+ canRelayMessage: true,
75
+ /* connectionManager: true */
76
+ }),
77
+ },
78
+ }),
79
+ await createLibp2pExtended({
80
+ connectionManager: {},
81
+ transports: [tcp()],
82
+ streamMuxers: [yamux()],
83
+ services: {
84
+ pubsub: (sub) => new DirectSub(sub, {
85
+ canRelayMessage: true,
86
+ /* connectionManager: true */
87
+ }),
88
+ },
89
+ }),
90
+ await createLibp2pExtended({
91
+ transports: [tcp()],
92
+ streamMuxers: [yamux()],
93
+ services: {
94
+ pubsub: (sub) => new DirectSub(sub, {
95
+ canRelayMessage: true,
96
+ /* connectionManager: true */
97
+ }),
98
+ },
99
+ }),
100
+ ].map((x) => Peerbit.create({ libp2p: x })));
101
+ await peers[0].dial(peers[1].getMultiaddrs());
102
+ await peers[1].dial(peers[2].getMultiaddrs());
103
+ const stores = [];
104
+ // Create store
105
+ let address = undefined;
106
+ const readerResolver = new Map();
107
+ for (const [i, client] of peers.entries()) {
108
+ let store;
109
+ if (address) {
110
+ store = await client.open(address, {
111
+ args: {
112
+ replicate: {
113
+ factor: 1,
114
+ },
115
+ },
116
+ });
117
+ }
118
+ else {
119
+ store = await client.open(new TestStore(), {
120
+ args: {
121
+ replicate: {
122
+ factor: 1,
123
+ },
124
+ },
125
+ });
126
+ address = store.address;
127
+ }
128
+ if (i === 1) {
129
+ store.docs.events.addEventListener("change", (event) => {
130
+ event.detail.added.forEach((e) => {
131
+ readerResolver.get(e.id)?.();
132
+ readerResolver.delete(e.id);
133
+ });
134
+ });
135
+ }
136
+ stores.push(store);
137
+ }
138
+ const createDoc = () => new Document({
139
+ id: uuid(),
140
+ name: uuid(),
141
+ number: 2341n,
142
+ });
143
+ // warmup
144
+ for (let i = 0; i < 10; i++) {
145
+ await stores[0].docs.put(createDoc(), { unique: true });
146
+ await delay(1000);
147
+ }
148
+ await delay(5000);
149
+ const suite = new B.Suite();
150
+ suite
151
+ .add("put", {
152
+ fn: async (deferred) => {
153
+ const writeStore = stores[0];
154
+ const doc = createDoc();
155
+ // wait for reading
156
+ readerResolver.set(doc.id, deferred.resolve.bind(deferred));
157
+ await writeStore.docs.put(doc, { unique: true });
158
+ },
159
+ defer: true,
160
+ })
161
+ .on("cycle", (event) => {
162
+ console.log(String(event.target));
163
+ })
164
+ .on("error", (err) => {
165
+ throw err;
166
+ })
167
+ .on("complete", async function (...args) {
168
+ await Promise.all(peers.map((x) => x.stop()));
169
+ await Promise.all(peers.map((x) => x["libp2p"].stop()));
170
+ })
171
+ .run();
172
+ //# sourceMappingURL=replication.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replication.js","sourceRoot":"","sources":["../../benchmark/replication.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,CAAC,MAAM,WAAW,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,SAAS,EAAqB,MAAM,mBAAmB,CAAC;AAEjE,kEAAkE;AAClE,6CAA6C;AAE7C,IACM,QAAQ,GADd,MACM,QAAQ;IAEb,EAAE,CAAS;IAGX,IAAI,CAAU;IAGd,MAAM,CAAU;IAEhB,YAAY,IAAc;QACzB,IAAI,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,CAAC;IACF,CAAC;CACD,CAAA;AAfA;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;;oCACf;AAGX;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;;sCACpB;AAGd;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;;wCACf;AARX,QAAQ;IADb,OAAO,CAAC,UAAU,CAAC;qCAWD,QAAQ;GAVrB,QAAQ,CAiBb;AAED,IACM,SAAS,GADf,MACM,SAAU,SAAQ,OAAwC;IAE/D,IAAI,CAAsB;IAE1B;QACC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAyC;QACnD,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtD,CAAC;CACD,CAAA;AAVA;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;8BACrB,SAAS;uCAAW;AAFrB,SAAS;IADd,OAAO,CAAC,gBAAgB,CAAC;;GACpB,SAAS,CAYd;AAED,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9B;IACC,MAAM,oBAAoB,CAAC;QAC1B,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC;QACnB,YAAY,EAAE,CAAC,KAAK,EAAE,CAAC;QACvB,QAAQ,EAAE;YACT,MAAM,EAAE,CAAC,GAAQ,EAAE,EAAE,CACpB,IAAI,SAAS,CAAC,GAAG,EAAE;gBAClB,eAAe,EAAE,IAAI;gBACrB,6BAA6B;aAC7B,CAAC;SACH;KACD,CAAC;IACF,MAAM,oBAAoB,CAAC;QAC1B,iBAAiB,EAAE,EAAE;QACrB,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC;QACnB,YAAY,EAAE,CAAC,KAAK,EAAE,CAAC;QACvB,QAAQ,EAAE;YACT,MAAM,EAAE,CAAC,GAAQ,EAAE,EAAE,CACpB,IAAI,SAAS,CAAC,GAAG,EAAE;gBAClB,eAAe,EAAE,IAAI;gBACrB,6BAA6B;aAC7B,CAAC;SACH;KACD,CAAC;IACF,MAAM,oBAAoB,CAAC;QAC1B,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC;QACnB,YAAY,EAAE,CAAC,KAAK,EAAE,CAAC;QACvB,QAAQ,EAAE;YACT,MAAM,EAAE,CAAC,GAAQ,EAAE,EAAE,CACpB,IAAI,SAAS,CAAC,GAAG,EAAE;gBAClB,eAAe,EAAE,IAAI;gBACrB,6BAA6B;aAC7B,CAAC;SACH;KACD,CAAC;CACF,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAC3C,CAAC;AAEF,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;AAC9C,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;AAE9C,MAAM,MAAM,GAAgB,EAAE,CAAC;AAE/B,eAAe;AACf,IAAI,OAAO,GAAuB,SAAS,CAAC;AAE5C,MAAM,cAAc,GAA4B,IAAI,GAAG,EAAE,CAAC;AAE1D,KAAK,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;IAC3C,IAAI,KAAgB,CAAC;IACrB,IAAI,OAAO,EAAE,CAAC;QACb,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,CAAY,OAAO,EAAE;YAC7C,IAAI,EAAE;gBACL,SAAS,EAAE;oBACV,MAAM,EAAE,CAAC;iBACT;aACD;SACD,CAAC,CAAC;IACJ,CAAC;SAAM,CAAC;QACP,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,SAAS,EAAE,EAAE;YAC1C,IAAI,EAAE;gBACL,SAAS,EAAE;oBACV,MAAM,EAAE,CAAC;iBACT;aACD;SACD,CAAC,CAAC;QACH,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IACzB,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;YACtD,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBAChC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,SAAS,GAAG,GAAG,EAAE,CACtB,IAAI,QAAQ,CAAC;IACZ,EAAE,EAAE,IAAI,EAAE;IACV,IAAI,EAAE,IAAI,EAAE;IACZ,MAAM,EAAE,KAAK;CACb,CAAC,CAAC;AAEJ,SAAS;AACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;IAC7B,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;AACnB,CAAC;AAED,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;AAClB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;AAC5B,KAAK;KACH,GAAG,CAAC,KAAK,EAAE;IACX,EAAE,EAAE,KAAK,EAAE,QAAa,EAAE,EAAE;QAC3B,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;QACxB,mBAAmB;QACnB,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5D,MAAM,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,KAAK,EAAE,IAAI;CACX,CAAC;KACD,EAAE,CAAC,OAAO,EAAE,CAAC,KAAU,EAAE,EAAE;IAC3B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AACnC,CAAC,CAAC;KACD,EAAE,CAAC,OAAO,EAAE,CAAC,GAAQ,EAAE,EAAE;IACzB,MAAM,GAAG,CAAC;AACX,CAAC,CAAC;KACD,EAAE,CAAC,UAAU,EAAE,KAAK,WAAsB,GAAG,IAAW;IACxD,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9C,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC,CAAC;KACD,GAAG,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const copySerialization: (sourceClazz: any, targetClazz: any) => void;
2
+ //# sourceMappingURL=borsh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"borsh.d.ts","sourceRoot":"","sources":["../../src/borsh.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,gBAAiB,GAAG,eAAe,GAAG,SAgBnE,CAAC"}