@derivation/relational 0.1.7

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 (69) hide show
  1. package/dist/index.d.ts +23 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +31 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/log-change-input.d.ts +13 -0
  6. package/dist/log-change-input.d.ts.map +1 -0
  7. package/dist/log-change-input.js +26 -0
  8. package/dist/log-change-input.js.map +1 -0
  9. package/dist/reactive-log-source.d.ts +10 -0
  10. package/dist/reactive-log-source.d.ts.map +1 -0
  11. package/dist/reactive-log-source.js +19 -0
  12. package/dist/reactive-log-source.js.map +1 -0
  13. package/dist/reactive-log.d.ts +22 -0
  14. package/dist/reactive-log.d.ts.map +1 -0
  15. package/dist/reactive-log.js +73 -0
  16. package/dist/reactive-log.js.map +1 -0
  17. package/dist/reactive-map-source.d.ts +10 -0
  18. package/dist/reactive-map-source.d.ts.map +1 -0
  19. package/dist/reactive-map-source.js +19 -0
  20. package/dist/reactive-map-source.js.map +1 -0
  21. package/dist/reactive-map.d.ts +24 -0
  22. package/dist/reactive-map.d.ts.map +1 -0
  23. package/dist/reactive-map.js +59 -0
  24. package/dist/reactive-map.js.map +1 -0
  25. package/dist/reactive-set-source.d.ts +10 -0
  26. package/dist/reactive-set-source.d.ts.map +1 -0
  27. package/dist/reactive-set-source.js +19 -0
  28. package/dist/reactive-set-source.js.map +1 -0
  29. package/dist/reactive-set.d.ts +21 -0
  30. package/dist/reactive-set.d.ts.map +1 -0
  31. package/dist/reactive-set.js +58 -0
  32. package/dist/reactive-set.js.map +1 -0
  33. package/dist/rimbu-utils.d.ts +28 -0
  34. package/dist/rimbu-utils.d.ts.map +1 -0
  35. package/dist/rimbu-utils.js +46 -0
  36. package/dist/rimbu-utils.js.map +1 -0
  37. package/dist/test/reactive-log.test.d.ts +2 -0
  38. package/dist/test/reactive-log.test.d.ts.map +1 -0
  39. package/dist/test/reactive-log.test.js +228 -0
  40. package/dist/test/reactive-log.test.js.map +1 -0
  41. package/dist/test/reactive.test.d.ts +2 -0
  42. package/dist/test/reactive.test.d.ts.map +1 -0
  43. package/dist/test/reactive.test.js +240 -0
  44. package/dist/test/reactive.test.js.map +1 -0
  45. package/dist/test/z-map-set.test.d.ts +2 -0
  46. package/dist/test/z-map-set.test.d.ts.map +1 -0
  47. package/dist/test/z-map-set.test.js +251 -0
  48. package/dist/test/z-map-set.test.js.map +1 -0
  49. package/dist/tuple.d.ts +6 -0
  50. package/dist/tuple.d.ts.map +1 -0
  51. package/dist/tuple.js +5 -0
  52. package/dist/tuple.js.map +1 -0
  53. package/dist/z-map-change-input.d.ts +13 -0
  54. package/dist/z-map-change-input.d.ts.map +1 -0
  55. package/dist/z-map-change-input.js +26 -0
  56. package/dist/z-map-change-input.js.map +1 -0
  57. package/dist/z-map.d.ts +25 -0
  58. package/dist/z-map.d.ts.map +1 -0
  59. package/dist/z-map.js +161 -0
  60. package/dist/z-map.js.map +1 -0
  61. package/dist/z-set-change-input.d.ts +13 -0
  62. package/dist/z-set-change-input.d.ts.map +1 -0
  63. package/dist/z-set-change-input.js +26 -0
  64. package/dist/z-set-change-input.js.map +1 -0
  65. package/dist/z-set.d.ts +24 -0
  66. package/dist/z-set.d.ts.map +1 -0
  67. package/dist/z-set.js +148 -0
  68. package/dist/z-set.js.map +1 -0
  69. package/package.json +41 -0
package/dist/z-set.js ADDED
@@ -0,0 +1,148 @@
1
+ import { ZMap } from "./z-map.js";
2
+ import { HashMap } from "@rimbu/core";
3
+ import { Tuple } from "./tuple.js";
4
+ import { emptyHashMap, hashMapFrom, hashMapBuilder } from "./rimbu-utils.js";
5
+ export class ZSet {
6
+ entries;
7
+ constructor(entries) {
8
+ if (entries === undefined) {
9
+ this.entries = emptyHashMap();
10
+ }
11
+ else if (typeof entries.toBuilder === "function") {
12
+ // It's a rimbu HashMap
13
+ this.entries = entries;
14
+ }
15
+ else {
16
+ this.entries = hashMapFrom(entries);
17
+ }
18
+ }
19
+ isEmpty() {
20
+ return this.entries.size === 0;
21
+ }
22
+ get length() {
23
+ return this.entries.size;
24
+ }
25
+ get(item) {
26
+ return this.entries.get(item) ?? 0;
27
+ }
28
+ *getEntries() {
29
+ for (const [item, weight] of this.entries) {
30
+ yield [item, weight];
31
+ }
32
+ }
33
+ add(item, weight = 1) {
34
+ if (weight === 0)
35
+ return this;
36
+ const cur = this.entries.get(item) ?? 0;
37
+ const updated = cur + weight;
38
+ const next = updated === 0
39
+ ? this.entries.removeKey(item)
40
+ : this.entries.set(item, updated);
41
+ return next === this.entries ? this : new ZSet(next);
42
+ }
43
+ remove(item, weight = 1) {
44
+ return this.add(item, -weight);
45
+ }
46
+ union(other) {
47
+ if (other.entries.size === 0)
48
+ return this;
49
+ const builder = this.entries.toBuilder();
50
+ for (const [item, w] of other.entries) {
51
+ if (w === 0)
52
+ continue;
53
+ const cur = builder.get(item) ?? 0;
54
+ const updated = cur + w;
55
+ if (updated === 0)
56
+ builder.removeKey(item);
57
+ else
58
+ builder.set(item, updated);
59
+ }
60
+ const next = builder.build();
61
+ return next === this.entries ? this : new ZSet(next);
62
+ }
63
+ intersection(other) {
64
+ if (this.entries.size === 0 || other.entries.size === 0)
65
+ return new ZSet();
66
+ const builder = hashMapBuilder();
67
+ for (const [item, weight1] of this.entries) {
68
+ const weight2 = other.entries.get(item);
69
+ if (weight2 !== undefined) {
70
+ const product = weight1 * weight2;
71
+ if (product !== 0)
72
+ builder.set(item, product);
73
+ }
74
+ }
75
+ const next = builder.build();
76
+ return new ZSet(next);
77
+ }
78
+ difference(other) {
79
+ if (other.entries.size === 0)
80
+ return this;
81
+ const builder = this.entries.toBuilder();
82
+ for (const [item, weight] of other.entries) {
83
+ const current = builder.get(item);
84
+ if (current !== undefined) {
85
+ const diff = current - weight;
86
+ if (diff === 0)
87
+ builder.removeKey(item);
88
+ else
89
+ builder.set(item, diff);
90
+ }
91
+ else if (weight !== 0) {
92
+ builder.set(item, -weight);
93
+ }
94
+ }
95
+ const next = builder.build();
96
+ return next === this.entries ? this : new ZSet(next);
97
+ }
98
+ filter(pred) {
99
+ const builder = hashMapBuilder();
100
+ for (const [item, weight] of this.entries) {
101
+ if (pred(item)) {
102
+ builder.set(item, weight);
103
+ }
104
+ }
105
+ const next = builder.build();
106
+ return next.size === this.entries.size ? this : new ZSet(next);
107
+ }
108
+ product(other) {
109
+ const builder = hashMapBuilder();
110
+ for (const [xItem, xWeight] of this.entries) {
111
+ for (const [yItem, yWeight] of other.entries) {
112
+ const w = xWeight * yWeight;
113
+ if (w === 0)
114
+ continue;
115
+ const key = Tuple(xItem, yItem);
116
+ const prev = builder.get(key);
117
+ const upd = (prev ?? 0) + w;
118
+ if (upd === 0)
119
+ builder.removeKey(key);
120
+ else
121
+ builder.set(key, upd);
122
+ }
123
+ }
124
+ const result = builder.build();
125
+ return new ZSet(result);
126
+ }
127
+ groupBy(func) {
128
+ let result = new ZMap();
129
+ for (const [item, weight] of this.entries) {
130
+ result = result.add(func(item), item, weight);
131
+ }
132
+ return result;
133
+ }
134
+ map(func) {
135
+ let result = new ZSet();
136
+ for (const [item, weight] of this.entries) {
137
+ result = result.add(func(item), weight);
138
+ }
139
+ return result;
140
+ }
141
+ toString() {
142
+ return `ZSet(${this.entries.size})`;
143
+ }
144
+ toArray() {
145
+ return [...this.getEntries()];
146
+ }
147
+ }
148
+ //# sourceMappingURL=z-set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"z-set.js","sourceRoot":"","sources":["../src/z-set.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@derivation/relational",
3
+ "version": "0.1.7",
4
+ "description": "Relational reactive collections for incremental computation",
5
+ "homepage": "https://github.com/derivationjs/derivation-relational",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/derivationjs/derivation-relational.git"
9
+ },
10
+ "author": "Daniel Waterworth",
11
+ "license": "MIT",
12
+ "type": "module",
13
+ "main": "./dist/index.js",
14
+ "types": "./dist/index.d.ts",
15
+ "exports": {
16
+ ".": {
17
+ "types": "./dist/index.d.ts",
18
+ "import": "./dist/index.js"
19
+ }
20
+ },
21
+ "files": [
22
+ "dist"
23
+ ],
24
+ "scripts": {
25
+ "prepare": "tsc -p tsconfig.json",
26
+ "build": "tsc -p tsconfig.json",
27
+ "test": "vitest run",
28
+ "test:watch": "vitest",
29
+ "test:coverage": "vitest run --coverage"
30
+ },
31
+ "devDependencies": {
32
+ "@vitest/coverage-v8": "^4.0.16",
33
+ "typescript": "^5.9.3",
34
+ "vitest": "^4.0.16"
35
+ },
36
+ "dependencies": {
37
+ "@rimbu/core": "^3.0.0",
38
+ "derivation": "^0.1.7",
39
+ "immutable": "^5.1.4"
40
+ }
41
+ }