@vaitosoi/minejs 0.4.2 → 0.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.
Files changed (106) hide show
  1. package/README.md +53 -5
  2. package/assets/doc/rejected.png +0 -0
  3. package/assets/minecraft/26.2/effects.json +42 -0
  4. package/assets/minecraft/26.2/packets.json +3 -2
  5. package/dist/base/bitset.d.ts +43 -4
  6. package/dist/base/bitset.d.ts.map +1 -1
  7. package/dist/base/bitset.js +251 -30
  8. package/dist/base/bitset.js.map +1 -1
  9. package/dist/base/cache.d.ts +24 -0
  10. package/dist/base/cache.d.ts.map +1 -0
  11. package/dist/base/cache.js +58 -0
  12. package/dist/base/cache.js.map +1 -0
  13. package/dist/base/error.d.ts +13 -0
  14. package/dist/base/error.d.ts.map +1 -1
  15. package/dist/base/error.js +19 -1
  16. package/dist/base/error.js.map +1 -1
  17. package/dist/base/math.d.ts +12 -0
  18. package/dist/base/math.d.ts.map +1 -1
  19. package/dist/base/math.js +39 -0
  20. package/dist/base/math.js.map +1 -1
  21. package/dist/base/typing.d.ts +7 -0
  22. package/dist/base/typing.d.ts.map +1 -1
  23. package/dist/{packet → binary}/decoder.d.ts.map +1 -1
  24. package/dist/{packet → binary}/decoder.js.map +1 -1
  25. package/dist/{packet → binary}/encoder.d.ts +2 -2
  26. package/dist/binary/encoder.d.ts.map +1 -0
  27. package/dist/{packet → binary}/encoder.js +6 -2
  28. package/dist/binary/encoder.js.map +1 -0
  29. package/dist/{packet → binary}/static.d.ts.map +1 -1
  30. package/dist/{packet → binary}/static.js.map +1 -1
  31. package/dist/client/client.d.ts +23 -2
  32. package/dist/client/client.d.ts.map +1 -1
  33. package/dist/client/client.js +34 -19
  34. package/dist/client/client.js.map +1 -1
  35. package/dist/index.d.ts +12 -4
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +12 -4
  38. package/dist/index.js.map +1 -1
  39. package/dist/{client → net}/tcp.d.ts +2 -2
  40. package/dist/net/tcp.d.ts.map +1 -0
  41. package/dist/{client → net}/tcp.js +4 -2
  42. package/dist/net/tcp.js.map +1 -0
  43. package/dist/packet/{dispatcher.d.ts → listener.d.ts} +7 -18
  44. package/dist/packet/listener.d.ts.map +1 -0
  45. package/dist/packet/{dispatcher.js → listener.js} +73 -139
  46. package/dist/packet/listener.js.map +1 -0
  47. package/dist/packet/sender.d.ts +25 -0
  48. package/dist/packet/sender.d.ts.map +1 -0
  49. package/dist/packet/sender.js +144 -0
  50. package/dist/packet/sender.js.map +1 -0
  51. package/dist/physics/aabb.d.ts.map +1 -1
  52. package/dist/physics/aabb.js +9 -8
  53. package/dist/physics/aabb.js.map +1 -1
  54. package/dist/physics/player.d.ts +1 -0
  55. package/dist/physics/player.d.ts.map +1 -1
  56. package/dist/physics/player.js +22 -4
  57. package/dist/physics/player.js.map +1 -1
  58. package/dist/version/codec.d.ts +1 -1
  59. package/dist/version/codec.d.ts.map +1 -1
  60. package/dist/version/codec.js +28 -6
  61. package/dist/version/codec.js.map +1 -1
  62. package/dist/version/registry.d.ts +19 -2
  63. package/dist/version/registry.d.ts.map +1 -1
  64. package/dist/version/registry.js +35 -3
  65. package/dist/version/registry.js.map +1 -1
  66. package/dist/world/block.d.ts +5 -0
  67. package/dist/world/block.d.ts.map +1 -1
  68. package/dist/world/block.js +56 -0
  69. package/dist/world/block.js.map +1 -1
  70. package/dist/world/state.d.ts +22 -3
  71. package/dist/world/state.d.ts.map +1 -1
  72. package/dist/world/state.js +36 -12
  73. package/dist/world/state.js.map +1 -1
  74. package/package.json +8 -10
  75. package/src/base/bitset.ts +312 -31
  76. package/src/base/cache.ts +62 -0
  77. package/src/base/error.ts +16 -0
  78. package/src/base/math.ts +43 -1
  79. package/src/base/typing.ts +5 -0
  80. package/src/{packet → binary}/encoder.ts +6 -2
  81. package/src/client/client.ts +56 -23
  82. package/src/index.ts +12 -4
  83. package/src/{client → net}/tcp.ts +5 -3
  84. package/src/packet/{dispatcher.ts → listener.ts} +92 -177
  85. package/src/packet/sender.ts +176 -0
  86. package/src/physics/aabb.ts +9 -8
  87. package/src/physics/player.ts +20 -5
  88. package/src/version/codec.ts +29 -8
  89. package/src/version/registry.ts +58 -5
  90. package/src/world/block.ts +72 -2
  91. package/src/world/state.ts +59 -14
  92. package/test/bitset/index.ts +3 -8
  93. package/test/client/index.ts +23 -13
  94. package/test/state/index.ts +7 -0
  95. package/dist/client/tcp.d.ts.map +0 -1
  96. package/dist/client/tcp.js.map +0 -1
  97. package/dist/packet/dispatcher.d.ts.map +0 -1
  98. package/dist/packet/dispatcher.js.map +0 -1
  99. package/dist/packet/encoder.d.ts.map +0 -1
  100. package/dist/packet/encoder.js.map +0 -1
  101. /package/dist/{packet → binary}/decoder.d.ts +0 -0
  102. /package/dist/{packet → binary}/decoder.js +0 -0
  103. /package/dist/{packet → binary}/static.d.ts +0 -0
  104. /package/dist/{packet → binary}/static.js +0 -0
  105. /package/src/{packet → binary}/decoder.ts +0 -0
  106. /package/src/{packet → binary}/static.ts +0 -0
package/README.md CHANGED
@@ -10,7 +10,7 @@ This is a Minecraft client package, written entirely in Typescript, using NodeJS
10
10
 
11
11
  This package is highly unstable for now, please report if there is any bug, glitch.
12
12
 
13
- Also, since there is some problem with authenticating and appId approval, you can not let the bot join "online server yet". [See more here](#iv-about-joining-online-server)
13
+ Also, since there is some problem with authenticating and appId approval, I haven't completed the join "online server" part yet. [See more here](#iv-about-joining-online-server)
14
14
 
15
15
  ## II. Usage
16
16
 
@@ -38,8 +38,8 @@ const client = new Client({
38
38
  // openBrowser: true,
39
39
  // port: 12345
40
40
  // },
41
- shouldVerifyMessageOrder: true,
42
- shouldVerifyMessageSignature: true
41
+ // shouldVerifyMessageOrder: true,
42
+ // shouldVerifyMessageSignature: true
43
43
  });
44
44
  client.connect();
45
45
  client.on("disconnect", (...args) => console.dir({ name: "disconnect", args }, { depth: null }));
@@ -80,7 +80,15 @@ client.on("message", (message) => {
80
80
  case "at": {
81
81
  const [, x, y, z] = args.map(val => parseInt(val)) as [any, number, number, number];
82
82
  const state = client.at(x, y, z);
83
- // console.log(state);
83
+ console.log(state);
84
+ break;
85
+ }
86
+
87
+ case "e":
88
+ case "echo":
89
+ case "say": {
90
+ const message = args.slice(1).join(" ");
91
+ client.chat(message);
84
92
  break;
85
93
  }
86
94
 
@@ -104,4 +112,44 @@ See [documentation](https://minejs.vaito.dev)
104
112
 
105
113
  ## IV. About joining online server:
106
114
 
107
- In order to join "online server" (the server require an account that have purchased Minecraft, to distinguish with the "offiline server", where you don't have to purchase Minecraft), you have to send some request to Minecraft server, which require an approved Azure App (more info in [here](https://minecraft.wiki/w/Microsoft_authentication#Microsoft_OAuth2_flow) and [here](https://help.minecraft.net/hc/en-us/articles/16254801392141p)), which I don't have at the moment. So I can not fully test the "join online server" feature right now. But still, if you somehow got an approved app and found some bug, please [create a issue](https://github.com/VaitoSoi/minejs/issues/new)
115
+ ### 1. What is `online server` and `offline server`:
116
+
117
+ + `Offline server` is a server you can join with a cracked account, meaning that you don't have to own Minecraft to join.
118
+
119
+ + `Online server`, on the other hand, require an account that owns Minecraft.
120
+
121
+ ### 2. Why I can't join online server yet:
122
+
123
+ In order to join "online server", the client has to send some request to Minecraft server, which require an approved Azure App (more info in [here](https://minecraft.wiki/w/Microsoft_authentication#Microsoft_OAuth2_flow) and [here](https://help.minecraft.net/hc/en-us/articles/16254801392141p)), which I don't have at the moment. So I can not fully test the "join online server" feature right now.
124
+
125
+ ### 3. So how do you know if the server is offline or online:
126
+
127
+ #### a. If you are the server owner:
128
+
129
+ Check your `server.properties` file:
130
+
131
+ ```
132
+ ...
133
+ motd=A Minecraft Server
134
+ network-compression-threshold=256
135
+ online-mode=false # <- false is offline, true is onlune
136
+ op-permission-level=4
137
+ pause-when-empty-seconds=60
138
+ ...
139
+ ```
140
+
141
+ #### b. If you are not the server owner:
142
+
143
+ 1. Ask the server owner
144
+
145
+ or
146
+
147
+ 2. Try some crack launcher to join that sevrer
148
+
149
+ ### 4. Note:
150
+
151
+ But still, if you somehow got an approved app and found some bug, please [create a issue](https://github.com/VaitoSoi/minejs/issues/new)
152
+
153
+ **P/s:** They rejected me 😭
154
+
155
+ ![The rejected mail](./assets/doc/rejected.png)
Binary file
@@ -0,0 +1,42 @@
1
+ {
2
+ "minecraft:absorption": 21,
3
+ "minecraft:bad_omen": 30,
4
+ "minecraft:blindness": 14,
5
+ "minecraft:breath_of_the_nautilus": 39,
6
+ "minecraft:conduit_power": 28,
7
+ "minecraft:darkness": 32,
8
+ "minecraft:dolphins_grace": 29,
9
+ "minecraft:fire_resistance": 11,
10
+ "minecraft:glowing": 23,
11
+ "minecraft:haste": 2,
12
+ "minecraft:health_boost": 20,
13
+ "minecraft:hero_of_the_village": 31,
14
+ "minecraft:hunger": 16,
15
+ "minecraft:infested": 38,
16
+ "minecraft:instant_damage": 6,
17
+ "minecraft:instant_health": 5,
18
+ "minecraft:invisibility": 13,
19
+ "minecraft:jump_boost": 7,
20
+ "minecraft:levitation": 24,
21
+ "minecraft:luck": 25,
22
+ "minecraft:mining_fatigue": 3,
23
+ "minecraft:nausea": 8,
24
+ "minecraft:night_vision": 15,
25
+ "minecraft:oozing": 37,
26
+ "minecraft:poison": 18,
27
+ "minecraft:raid_omen": 34,
28
+ "minecraft:regeneration": 9,
29
+ "minecraft:resistance": 10,
30
+ "minecraft:saturation": 22,
31
+ "minecraft:slow_falling": 27,
32
+ "minecraft:slowness": 1,
33
+ "minecraft:speed": 0,
34
+ "minecraft:strength": 4,
35
+ "minecraft:trial_omen": 33,
36
+ "minecraft:unluck": 26,
37
+ "minecraft:water_breathing": 12,
38
+ "minecraft:weakness": 17,
39
+ "minecraft:weaving": 36,
40
+ "minecraft:wind_charged": 35,
41
+ "minecraft:wither": 19
42
+ }
@@ -1503,7 +1503,8 @@
1503
1503
  },
1504
1504
  "light": {
1505
1505
  "type": "not_implemented",
1506
- "comment": "Light Data"
1506
+ "comment": "Light Data",
1507
+ "skip_able": true
1507
1508
  }
1508
1509
  }
1509
1510
  },
@@ -3711,7 +3712,7 @@
3711
3712
  "type": "var_int"
3712
3713
  },
3713
3714
  "acknowledged": {
3714
- "type": "not_implemented",
3715
+ "type": "fixed_bitset",
3715
3716
  "length": 20
3716
3717
  },
3717
3718
  "checksum": {
@@ -1,9 +1,48 @@
1
- import BitSet_ from "bitset";
2
1
  /**
3
- * Custom implementation of BitSet to implement missing method
2
+ * Simplified implementation of the Java's BitSet class
3
+ *
4
+ * @see https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/java/util/BitSet.java
5
+ * @hidden
4
6
  */
5
- export declare class BitSet extends BitSet_ {
6
- nextClearBit(fromIndex: number): number;
7
+ export declare class BitSet {
8
+ static readonly ADDRESS_BITS_PER_WORD = 6;
9
+ static readonly BITS_PER_WORD: number;
10
+ static readonly WORD_MASK = 18446744073709551615n;
11
+ words: BigUint64Array;
12
+ wordsInUse: number;
13
+ private static wordIndex;
14
+ private static bitIndexInWord;
15
+ /**
16
+ * Create a mask with lowest `n` bits set to 1
17
+ *
18
+ * For example:
19
+ * * n = 0 -> `0b0n`
20
+ * * n = 3 -> `0b111n`
21
+ * * n = 5 -> `0b11111n`
22
+ *
23
+ * @param nBits
24
+ * @returns
25
+ */
26
+ private static lowBits;
27
+ private initWords;
28
+ private static checkRange;
29
+ constructor(nBits?: number);
7
30
  clone(): BitSet;
31
+ private expandTo;
32
+ private ensureCapacity;
33
+ private recalculateWordsInUse;
34
+ private checkInvariants;
35
+ toByteArray(): number[];
36
+ flip(bitIndex: number): void;
37
+ set(bitIndex: number): void;
38
+ setRange(fromIndex: number, toIndex: number): void;
39
+ clear(bitIndex: number): void;
40
+ clearRange(fromIndex: number, toIndex: number): void;
41
+ get(bitIndex: number): boolean;
42
+ nextSetBit(fromIndex: number): number;
43
+ nextClearBit(fromIndex: number): number;
44
+ length(): number;
45
+ isEmpty(): boolean;
8
46
  }
47
+ export default BitSet;
9
48
  //# sourceMappingURL=bitset.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bitset.d.ts","sourceRoot":"","sources":["../../src/base/bitset.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,QAAQ,CAAC;AAE7B;;GAEG;AACH,qBAAa,MAAO,SAAQ,OAAO;IACxB,YAAY,CAAC,SAAS,EAAE,MAAM,UA8BpC;IAEe,KAAK,IAAI,MAAM,CAE9B;CACJ"}
1
+ {"version":3,"file":"bitset.d.ts","sourceRoot":"","sources":["../../src/base/bitset.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,qBAAa,MAAM;IACf,gBAAuB,qBAAqB,KAAK;IACjD,gBAAuB,aAAa,SAAmC;IACvE,gBAAuB,SAAS,yBAAuB;IAEhD,KAAK,EAAE,cAAc,CAAC;IACtB,UAAU,EAAE,MAAM,CAAK;IAE9B,OAAO,CAAC,MAAM,CAAC,SAAS;IAIxB,OAAO,CAAC,MAAM,CAAC,cAAc;IAI7B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,MAAM,CAAC,OAAO;IAItB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,MAAM,CAAC,UAAU;IAUzB,YAAY,KAAK,CAAC,EAAE,MAAM,EAIzB;IAEM,KAAK,WAMX;IAED,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,qBAAqB;IAM7B,OAAO,CAAC,eAAe;IAOhB,WAAW,aAiBjB;IAEM,IAAI,CAAC,QAAQ,EAAE,MAAM,QAW3B;IAEM,GAAG,CAAC,QAAQ,EAAE,MAAM,QAU1B;IACM,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,QAgDjD;IAGM,KAAK,CAAC,QAAQ,EAAE,MAAM,QAY5B;IACM,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,QAyCnD;IAGM,GAAG,CAAC,QAAQ,EAAE,MAAM,WAW1B;IAEM,UAAU,CAAC,SAAS,EAAE,MAAM,UAmBlC;IAEM,YAAY,CAAC,SAAS,EAAE,MAAM,UAqBpC;IAEM,MAAM,WAMZ;IAEM,OAAO,YAEb;CACJ;eAEc,MAAM"}
@@ -4,43 +4,264 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.BitSet = void 0;
7
- const bitset_1 = __importDefault(require("bitset"));
7
+ const node_assert_1 = __importDefault(require("node:assert"));
8
+ const error_1 = require("./error");
9
+ const math_1 = require("./math");
8
10
  /**
9
- * Custom implementation of BitSet to implement missing method
11
+ * Simplified implementation of the Java's BitSet class
12
+ *
13
+ * @see https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/java/util/BitSet.java
14
+ * @hidden
10
15
  */
11
- class BitSet extends bitset_1.default {
16
+ class BitSet {
17
+ static ADDRESS_BITS_PER_WORD = 6;
18
+ static BITS_PER_WORD = 1 << this.ADDRESS_BITS_PER_WORD;
19
+ static WORD_MASK = 0xffffffffffffffffn;
20
+ words;
21
+ wordsInUse = 0;
22
+ static wordIndex(bitIndex) {
23
+ return bitIndex >> this.ADDRESS_BITS_PER_WORD;
24
+ }
25
+ static bitIndexInWord(bitIndex) {
26
+ return bitIndex & (this.BITS_PER_WORD - 1); // should be bitIndex & 63
27
+ }
28
+ /**
29
+ * Create a mask with lowest `n` bits set to 1
30
+ *
31
+ * For example:
32
+ * * n = 0 -> `0b0n`
33
+ * * n = 3 -> `0b111n`
34
+ * * n = 5 -> `0b11111n`
35
+ *
36
+ * @param nBits
37
+ * @returns
38
+ */
39
+ static lowBits(nBits) {
40
+ return (1n << BigInt(nBits)) - 1n;
41
+ }
42
+ initWords(nBits) {
43
+ return new BigUint64Array(BitSet.wordIndex(nBits - 1) + 1);
44
+ }
45
+ static checkRange(fromIndex, toIndex) {
46
+ if (fromIndex < 0)
47
+ throw new error_1.UnexpectedValue("value of fromIndex", fromIndex.toString(), "non-negative number");
48
+ if (toIndex < 0)
49
+ throw new error_1.UnexpectedValue("value of toIndex", toIndex.toString(), "non-negative number");
50
+ if (fromIndex > toIndex)
51
+ throw new error_1.UnexpectedValue("fromIndex and toIndex", `fromIndex ${fromIndex}; toIndex ${toIndex}`, "fromIndex has to be smaller than toIndex");
52
+ }
53
+ constructor(nBits) {
54
+ if (nBits && nBits < 0)
55
+ throw new error_1.UnexpectedValue("length of bitset", nBits.toString(), "non-negative number");
56
+ this.words = this.initWords(nBits ?? BitSet.BITS_PER_WORD);
57
+ }
58
+ clone() {
59
+ const bitset = new BitSet(0);
60
+ bitset.words = structuredClone(this.words);
61
+ bitset.wordsInUse = this.wordsInUse;
62
+ bitset.checkInvariants();
63
+ return bitset;
64
+ }
65
+ expandTo(wordIndex) {
66
+ const wordsRequired = wordIndex + 1;
67
+ if (this.wordsInUse < wordsRequired) {
68
+ this.ensureCapacity(wordsRequired);
69
+ this.wordsInUse = wordsRequired;
70
+ }
71
+ }
72
+ ensureCapacity(wordsRequired) {
73
+ if (wordsRequired > this.words.length) {
74
+ // Allocate larger of doubled size or required size
75
+ const request = Math.max(2 * this.words.length, wordsRequired);
76
+ const newWords = new BigUint64Array(request);
77
+ newWords.set(this.words);
78
+ this.words = newWords;
79
+ }
80
+ }
81
+ recalculateWordsInUse() {
82
+ let i = this.wordsInUse - 1;
83
+ while (i >= 0 && this.words[i] === 0n)
84
+ i--;
85
+ this.wordsInUse = i + 1; // The new logical size
86
+ }
87
+ checkInvariants() {
88
+ (0, node_assert_1.default)(this.wordsInUse === 0 || this.words[this.wordsInUse - 1] !== 0n);
89
+ (0, node_assert_1.default)(this.wordsInUse >= 0 && this.wordsInUse <= this.words.length);
90
+ (0, node_assert_1.default)(this.wordsInUse === this.words.length || this.words[this.wordsInUse] === 0n);
91
+ }
92
+ toByteArray() {
93
+ const n = this.wordsInUse;
94
+ if (n == 0)
95
+ return [];
96
+ const bytes = [];
97
+ for (const word of this.words) {
98
+ let coppiedWord = structuredClone(word);
99
+ // Slice a 64-bit (or 8-byte word) into 8 8-bit (or 1-byte) slices
100
+ for (let i = 0; i < 8; i++) {
101
+ bytes.push(Number(coppiedWord & 0xffn));
102
+ coppiedWord >>= 8n;
103
+ }
104
+ }
105
+ while (bytes.length > 0 && bytes.at(-1) === 0)
106
+ bytes.pop();
107
+ return bytes;
108
+ }
109
+ flip(bitIndex) {
110
+ if (bitIndex < 0)
111
+ throw new error_1.UnexpectedValue("value of bitIndex", bitIndex.toString(), "non-negative number");
112
+ const wordIndex = BitSet.wordIndex(bitIndex);
113
+ this.expandTo(wordIndex);
114
+ this.words[wordIndex] ^= BigInt(BitSet.bitIndexInWord(bitIndex));
115
+ this.recalculateWordsInUse();
116
+ this.checkInvariants();
117
+ }
118
+ set(bitIndex) {
119
+ if (bitIndex < 0)
120
+ throw new error_1.UnexpectedValue("value of bitIndex", bitIndex.toString(), "non-negative number");
121
+ const wordIndex = BitSet.wordIndex(bitIndex);
122
+ this.expandTo(wordIndex);
123
+ this.words[wordIndex] |= 1n << BigInt(BitSet.bitIndexInWord(bitIndex)); // Restores invariants
124
+ this.checkInvariants();
125
+ }
126
+ setRange(fromIndex, toIndex) {
127
+ BitSet.checkRange(fromIndex, toIndex);
128
+ if (fromIndex == toIndex)
129
+ return;
130
+ // Increase capacity if necessary
131
+ const startWordIndex = BitSet.wordIndex(fromIndex);
132
+ const endWordIndex = BitSet.wordIndex(toIndex - 1);
133
+ this.expandTo(endWordIndex);
134
+ const fromBit = BitSet.bitIndexInWord(fromIndex), toBitInclusive = BitSet.bitIndexInWord(toIndex - 1) + 1,
135
+ /**
136
+ * The NOT (~) bitwise meaning:
137
+ *
138
+ * Let say we want to set 2 to 6:
139
+ * ```
140
+ * 110010100
141
+ * ^ ^
142
+ * | +-- this is the 2nd bit
143
+ * and this is the 6th bit
144
+ * ```
145
+ *
146
+ * So we call lowBits(2) and it return `...0011`
147
+ *
148
+ * Then we have to flip it to `...1100` to access the '2nd bit and the bits after it'
149
+ */
150
+ firstWordMask = ~BitSet.lowBits(fromBit), lastWordMask = BitSet.lowBits(toBitInclusive);
151
+ if (startWordIndex == endWordIndex) {
152
+ // Case 1: One word
153
+ this.words[startWordIndex] |= (firstWordMask & lastWordMask);
154
+ }
155
+ else {
156
+ // Case 2: Multiple words
157
+ // Handle first word
158
+ this.words[startWordIndex] |= firstWordMask;
159
+ // Handle intermediate words, if any
160
+ for (let i = startWordIndex + 1; i < endWordIndex; i++)
161
+ this.words[i] = BitSet.WORD_MASK;
162
+ // Handle last word (restores invariants)
163
+ this.words[endWordIndex] |= lastWordMask;
164
+ }
165
+ this.checkInvariants();
166
+ }
167
+ clear(bitIndex) {
168
+ if (bitIndex < 0)
169
+ throw new error_1.UnexpectedValue("value of bitIndex", bitIndex.toString(), "non-negative number");
170
+ const wordIndex = BitSet.wordIndex(bitIndex);
171
+ if (wordIndex >= this.wordsInUse)
172
+ return;
173
+ this.words[wordIndex] &= ~(1n << BigInt(bitIndex));
174
+ this.recalculateWordsInUse();
175
+ this.checkInvariants();
176
+ }
177
+ clearRange(fromIndex, toIndex) {
178
+ BitSet.checkRange(fromIndex, toIndex);
179
+ if (fromIndex == toIndex)
180
+ return;
181
+ const startWordIndex = BitSet.wordIndex(fromIndex);
182
+ if (startWordIndex >= this.wordsInUse)
183
+ return;
184
+ let endWordIndex = BitSet.wordIndex(toIndex - 1);
185
+ if (endWordIndex >= this.wordsInUse) {
186
+ toIndex = this.length();
187
+ endWordIndex = this.wordsInUse - 1;
188
+ }
189
+ const fromBit = BitSet.bitIndexInWord(fromIndex), toBitInclusive = BitSet.bitIndexInWord(toIndex - 1) + 1,
190
+ /**
191
+ * See the explaination in the setRange function
192
+ */
193
+ firstWordMask = ~BitSet.lowBits(fromBit), lastWordMask = BitSet.lowBits(toBitInclusive);
194
+ if (startWordIndex == endWordIndex) {
195
+ // Case 1: One word
196
+ this.words[startWordIndex] &= ~(firstWordMask & lastWordMask);
197
+ }
198
+ else {
199
+ // Case 2: Multiple words
200
+ // Handle first word
201
+ this.words[startWordIndex] &= ~firstWordMask;
202
+ // Handle intermediate words, if any
203
+ for (let i = startWordIndex + 1; i < endWordIndex; i++)
204
+ this.words[i] = 0n;
205
+ // Handle last word
206
+ this.words[endWordIndex] &= ~lastWordMask;
207
+ }
208
+ this.recalculateWordsInUse();
209
+ this.checkInvariants();
210
+ }
211
+ get(bitIndex) {
212
+ if (bitIndex < 0)
213
+ throw new error_1.UnexpectedValue("value of bitIndex", bitIndex.toString(), "non-negative number");
214
+ this.checkInvariants();
215
+ const wordIndex = BitSet.wordIndex(bitIndex);
216
+ if (wordIndex >= this.wordsInUse)
217
+ return false;
218
+ const bit = 1n << BigInt(BitSet.bitIndexInWord(bitIndex));
219
+ return (Number(this.words[wordIndex] & bit) != 0);
220
+ }
221
+ nextSetBit(fromIndex) {
222
+ if (fromIndex < 0)
223
+ throw new error_1.UnexpectedValue("value of fromIndex", fromIndex.toString(), "non-negative number");
224
+ this.checkInvariants();
225
+ let u = BitSet.wordIndex(fromIndex);
226
+ if (u >= this.wordsInUse)
227
+ return -1;
228
+ let word = this.words[u] & (~0n << BigInt(BitSet.bitIndexInWord(fromIndex)));
229
+ while (true) {
230
+ if (word != 0n)
231
+ return (u * BitSet.BITS_PER_WORD) + (0, math_1.numberOfTrailingZeros)(word);
232
+ if (++u == this.wordsInUse)
233
+ return -1;
234
+ word = this.words[u];
235
+ }
236
+ }
12
237
  nextClearBit(fromIndex) {
13
- fromIndex = fromIndex || 0;
14
- const data = this['data'];
15
- let wordIndex = fromIndex >>> 5;
16
- if (wordIndex >= data.length) {
17
- // Past the stored words — depends on the infinite tail bit
18
- return this['_'] === 0 ? fromIndex : Infinity;
19
- }
20
- // ~word marks clear bits; mask off anything before fromIndex.
21
- // JS's << only uses the low 5 bits of the shift amount, so
22
- // `-1 << fromIndex` masks correctly even when fromIndex > 31.
23
- let word = ~data[wordIndex] & (-1 << fromIndex);
238
+ // Neither spec nor implementation handle bitsets of maximal length.
239
+ // See 4816253.
240
+ if (fromIndex < 0)
241
+ throw new error_1.UnexpectedValue("value of fromIndex", fromIndex.toString(), "non-negative number");
242
+ this.checkInvariants();
243
+ let u = BitSet.wordIndex(fromIndex);
244
+ if (u >= this.wordsInUse)
245
+ return fromIndex;
246
+ let word = ~this.words[u] & (BitSet.WORD_MASK << BigInt(fromIndex));
24
247
  while (true) {
25
- if (word !== 0) {
26
- const lowestSet = word & -word; // isolate lowest set bit
27
- let c = 0;
28
- for (let v = lowestSet; (v >>>= 1); c++) {
29
- //
30
- }
31
- return wordIndex * 32 + c;
32
- }
33
- wordIndex++;
34
- if (wordIndex >= data.length) {
35
- return this['_'] === 0 ? wordIndex * 32 : Infinity;
36
- }
37
- word = ~data[wordIndex];
248
+ if (word != 0n)
249
+ return (u * BitSet.BITS_PER_WORD) + (0, math_1.numberOfTrailingZeros)(word);
250
+ if (++u == this.wordsInUse)
251
+ return this.wordsInUse * BitSet.BITS_PER_WORD;
252
+ word = ~this.words[u];
38
253
  }
39
254
  }
40
- ;
41
- clone() {
42
- return new BitSet(this.toString());
255
+ length() {
256
+ if (this.wordsInUse == 0)
257
+ return 0;
258
+ return BitSet.BITS_PER_WORD * (this.wordsInUse - 1) +
259
+ (BitSet.BITS_PER_WORD - (0, math_1.numberOfLeadingZeros)(this.words[this.wordsInUse - 1]));
260
+ }
261
+ isEmpty() {
262
+ return this.wordsInUse == 0;
43
263
  }
44
264
  }
45
265
  exports.BitSet = BitSet;
266
+ exports.default = BitSet;
46
267
  //# sourceMappingURL=bitset.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bitset.js","sourceRoot":"","sources":["../../src/base/bitset.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA6B;AAE7B;;GAEG;AACH,YAAoB,SAAQ,gBAAO;IACxB,YAAY,CAAC,SAAiB;QACjC,SAAS,GAAG,SAAS,IAAI,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAI,IAAY,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,SAAS,GAAG,SAAS,KAAK,CAAC,CAAC;QAEhC,IAAI,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC3B,2DAA2D;YAC3D,OAAQ,IAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC3D,CAAC;QAED,8DAA8D;QAC9D,2DAA2D;QAC3D,8DAA8D;QAC9D,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC;QAEhD,OAAO,IAAI,EAAE,CAAC;YACV,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACb,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAG,yBAAyB;gBAC3D,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtC,EAAE;gBACN,CAAC;gBACD,OAAO,SAAS,GAAG,EAAE,GAAG,CAAC,CAAC;YAC9B,CAAC;YACD,SAAS,EAAE,CAAC;YACZ,IAAI,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC3B,OAAQ,IAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;YAChE,CAAC;YACD,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;IAAA,CAAC;IAEc,KAAK;QACjB,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvC,CAAC;CACJ"}
1
+ {"version":3,"file":"bitset.js","sourceRoot":"","sources":["../../src/base/bitset.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * The base implementation for the Cache class
3
+ */
4
+ export declare abstract class CacheImplementation<T = any> {
5
+ abstract put(key: string, item: T): void;
6
+ abstract get(key: string): T | undefined;
7
+ abstract del(key: string): void;
8
+ }
9
+ /**
10
+ * The LRU cache implementation.
11
+ *
12
+ * @see https://en.wikipedia.org/wiki/Cache_replacement_policies#Time-Aware,_Least_Recently_Used_(TLRU)
13
+ */
14
+ export declare class LRUCache<T> extends CacheImplementation<T> {
15
+ private capacity;
16
+ private hash;
17
+ private list;
18
+ constructor(capacity: number);
19
+ put(key: string, item: T): void;
20
+ get(key: string): T | undefined;
21
+ del(key: string): void;
22
+ private truncateHash;
23
+ }
24
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/base/cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,8BAAsB,mBAAmB,CAAC,CAAC,GAAG,GAAG;IAC7C,SAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IAChD,SAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IAChD,SAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1C;AAED;;;;GAIG;AACH,qBAAa,QAAQ,CAAC,CAAC,CAAE,SAAQ,mBAAmB,CAAC,CAAC,CAAC;IAIvC,OAAO,CAAC,QAAQ;IAH5B,OAAO,CAAC,IAAI,CAA6B;IACzC,OAAO,CAAC,IAAI,CAAgB;IAE5B,YAAoB,QAAQ,EAAE,MAAM,EAEnC;IAEM,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAWrC;IAEM,GAAG,CAAC,GAAG,EAAE,MAAM,iBAUrB;IAEM,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAK5B;IAED,OAAO,CAAC,YAAY;CAOvB"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LRUCache = exports.CacheImplementation = void 0;
4
+ /**
5
+ * The base implementation for the Cache class
6
+ */
7
+ class CacheImplementation {
8
+ }
9
+ exports.CacheImplementation = CacheImplementation;
10
+ /**
11
+ * The LRU cache implementation.
12
+ *
13
+ * @see https://en.wikipedia.org/wiki/Cache_replacement_policies#Time-Aware,_Least_Recently_Used_(TLRU)
14
+ */
15
+ class LRUCache extends CacheImplementation {
16
+ capacity;
17
+ hash = new Map();
18
+ list = [];
19
+ constructor(capacity) {
20
+ super();
21
+ this.capacity = capacity;
22
+ }
23
+ put(key, item) {
24
+ if (this.hash.has(key)) {
25
+ const oldIndex = this.list.indexOf(key);
26
+ if (oldIndex > -1)
27
+ this.list.splice(oldIndex, 1);
28
+ }
29
+ this.hash.set(key, item);
30
+ this.list.push(key);
31
+ this.truncateHash();
32
+ }
33
+ get(key) {
34
+ if (!this.hash.has(key))
35
+ return undefined;
36
+ const item = this.hash.get(key);
37
+ const oldIndex = this.list.indexOf(key);
38
+ if (oldIndex > -1)
39
+ this.list.splice(oldIndex, 1);
40
+ this.list.push(key);
41
+ return item;
42
+ }
43
+ del(key) {
44
+ const oldIndex = this.list.indexOf(key);
45
+ if (oldIndex > -1)
46
+ this.list.splice(oldIndex, 1);
47
+ this.hash.delete(key);
48
+ }
49
+ truncateHash() {
50
+ while (this.list.length > this.capacity) {
51
+ const popping = this.list.pop();
52
+ if (popping)
53
+ this.hash.delete(popping);
54
+ }
55
+ }
56
+ }
57
+ exports.LRUCache = LRUCache;
58
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/base/cache.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH;CAIC;;AAED;;;;GAIG;AACH,cAAyB,SAAQ,mBAAsB;IAI/B,QAAQ;IAHpB,IAAI,GAAmB,IAAI,GAAG,EAAE,CAAC;IACjC,IAAI,GAAa,EAAE,CAAC;IAE5B,YAAoB,QAAgB;QAChC,KAAK,EAAE,CAAC;wBADQ,QAAQ;IAE5B,CAAC;IAEM,GAAG,CAAC,GAAW,EAAE,IAAO;QAC3B,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,QAAQ,GAAG,CAAC,CAAC;gBACb,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEpB,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAEM,GAAG,CAAC,GAAW;QAClB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QAE1C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,QAAQ,GAAG,CAAC,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEpB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,GAAG,CAAC,GAAW;QAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,QAAQ,GAAG,CAAC,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAEO,YAAY;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YAChC,IAAI,OAAO;gBACP,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;IACL,CAAC;CACJ"}
@@ -80,6 +80,7 @@ export declare class AuthTokenExpired extends Error {
80
80
  export declare class MissingAuthOption extends Error {
81
81
  constructor();
82
82
  }
83
+ /** @hidden */
83
84
  export declare class AuthRelatedNotFound extends Error {
84
85
  component: string;
85
86
  constructor(component: string);
@@ -122,11 +123,23 @@ export declare class MissingField extends Error {
122
123
  export declare class NotImplemented extends Error {
123
124
  constructor();
124
125
  }
126
+ /** @hidden */
127
+ export declare class SkippableNotImplemented extends Error {
128
+ }
129
+ /** @hidden */
125
130
  export declare class MessageLinkNotFound extends Error {
126
131
  senderUUID: string;
127
132
  constructor(senderUUID: string);
128
133
  }
134
+ /** @hidden */
129
135
  export declare class HaveSignatureButNotIndex extends Error {
130
136
  constructor();
131
137
  }
138
+ /**
139
+ * @hidden
140
+ */
141
+ export declare class MessageTooLong extends Error {
142
+ message: string;
143
+ constructor(message: string);
144
+ }
132
145
  //# sourceMappingURL=error.d.ts.map