pw-js-api 0.2.6-dev.9ec7613 → 0.2.6

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pw-js-api",
3
- "version": "0.2.6-dev.9ec7613",
3
+ "version": "0.2.6",
4
4
  "description": "A PixelWalker Library, aims to be minimal with support for browsers.",
5
5
  "exports": {
6
6
  "types": "./esm/index.js",
@@ -1,32 +0,0 @@
1
- /** @module Bucket */
2
- /**
3
- * lovingly borrowed from oceanic.js :3
4
- * https://github.com/OceanicJS/Oceanic/blob/9ca907f46d45da4afa8c9be9e81e3093925c73c5/lib/rest/Bucket.ts
5
- */
6
- /** A bucket. */
7
- export default class Bucket {
8
- private _queue;
9
- interval: number;
10
- lastReset: number;
11
- lastSend: number;
12
- latencyRef: {
13
- latency: number;
14
- };
15
- reservedTokens: number;
16
- timeout: NodeJS.Timeout | null;
17
- tokenLimit: number;
18
- tokens: number;
19
- constructor(tokenLimit: number, interval: number, options?: {
20
- latencyRef?: {
21
- latency: number;
22
- };
23
- reservedTokens?: number;
24
- });
25
- private check;
26
- /**
27
- * Add an item to the queue.
28
- * @param func The function to queue.
29
- * @param priority If true, the item will be added to the front of the queue.
30
- */
31
- queue(func: () => void, priority?: boolean): void;
32
- }
package/cm/util/Bucket.js DELETED
@@ -1,71 +0,0 @@
1
- "use strict";
2
- /** @module Bucket */
3
- /**
4
- * lovingly borrowed from oceanic.js :3
5
- * https://github.com/OceanicJS/Oceanic/blob/9ca907f46d45da4afa8c9be9e81e3093925c73c5/lib/rest/Bucket.ts
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- /** A bucket. */
9
- class Bucket {
10
- constructor(tokenLimit, interval, options) {
11
- var _a, _b;
12
- this._queue = [];
13
- this.tokenLimit = tokenLimit;
14
- this.interval = interval;
15
- this.latencyRef = (_a = options === null || options === void 0 ? void 0 : options.latencyRef) !== null && _a !== void 0 ? _a : { latency: 0 };
16
- this.lastReset = this.tokens = this.lastSend = 0;
17
- this.reservedTokens = (_b = options === null || options === void 0 ? void 0 : options.reservedTokens) !== null && _b !== void 0 ? _b : 0;
18
- this.timeout = null;
19
- }
20
- check() {
21
- if (this.timeout || this._queue.length === 0) {
22
- return;
23
- }
24
- if (this.lastReset + this.interval + this.tokenLimit * this.latencyRef.latency < Date.now()) {
25
- this.lastReset = Date.now();
26
- this.tokens = Math.max(0, this.tokens - this.tokenLimit);
27
- }
28
- let val;
29
- let tokensAvailable = this.tokens < this.tokenLimit;
30
- let unreservedTokensAvailable = this.tokens < (this.tokenLimit - this.reservedTokens);
31
- while (this._queue.length !== 0 && (unreservedTokensAvailable || (tokensAvailable && this._queue[0].priority))) {
32
- this.tokens++;
33
- tokensAvailable = this.tokens < this.tokenLimit;
34
- unreservedTokensAvailable = this.tokens < (this.tokenLimit - this.reservedTokens);
35
- const item = this._queue.shift();
36
- val = this.latencyRef.latency - Date.now() + this.lastSend;
37
- if (this.latencyRef.latency === 0 || val <= 0) {
38
- item.func();
39
- this.lastSend = Date.now();
40
- }
41
- else {
42
- setTimeout(() => {
43
- item.func();
44
- }, val);
45
- this.lastSend = Date.now() + val;
46
- }
47
- }
48
- if (this._queue.length !== 0 && !this.timeout) {
49
- this.timeout = setTimeout(() => {
50
- this.timeout = null;
51
- this.check();
52
- }, this.tokens < this.tokenLimit ? this.latencyRef.latency : Math.max(0, this.lastReset + this.interval + this.tokenLimit * this.latencyRef.latency - Date.now()));
53
- }
54
- }
55
- /**
56
- * Add an item to the queue.
57
- * @param func The function to queue.
58
- * @param priority If true, the item will be added to the front of the queue.
59
- */
60
- queue(func, priority = false) {
61
- if (priority) {
62
- this._queue.unshift({ func, priority });
63
- }
64
- else {
65
- this._queue.push({ func, priority });
66
- }
67
- this.check();
68
- }
69
- }
70
- exports.default = Bucket;
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnVja2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL3V0aWwvQnVja2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxxQkFBcUI7QUFDckI7OztHQUdHOztBQUVILGdCQUFnQjtBQUNoQixNQUFxQixNQUFNO0lBVXZCLFlBQVksVUFBa0IsRUFBRSxRQUFnQixFQUFFLE9BQXlFOztRQVRuSCxXQUFNLEdBQStDLEVBQUUsQ0FBQztRQVU1RCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFVBQVUsbUNBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDeEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsY0FBYyxtQ0FBSSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUVPLEtBQUs7UUFDVCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDM0MsT0FBTztRQUNYLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzFGLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFD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
@@ -1,32 +0,0 @@
1
- /** @module Bucket */
2
- /**
3
- * lovingly borrowed from oceanic.js :3
4
- * https://github.com/OceanicJS/Oceanic/blob/9ca907f46d45da4afa8c9be9e81e3093925c73c5/lib/rest/Bucket.ts
5
- */
6
- /** A bucket. */
7
- export default class Bucket {
8
- private _queue;
9
- interval: number;
10
- lastReset: number;
11
- lastSend: number;
12
- latencyRef: {
13
- latency: number;
14
- };
15
- reservedTokens: number;
16
- timeout: NodeJS.Timeout | null;
17
- tokenLimit: number;
18
- tokens: number;
19
- constructor(tokenLimit: number, interval: number, options?: {
20
- latencyRef?: {
21
- latency: number;
22
- };
23
- reservedTokens?: number;
24
- });
25
- private check;
26
- /**
27
- * Add an item to the queue.
28
- * @param func The function to queue.
29
- * @param priority If true, the item will be added to the front of the queue.
30
- */
31
- queue(func: () => void, priority?: boolean): void;
32
- }
@@ -1,68 +0,0 @@
1
- /** @module Bucket */
2
- /**
3
- * lovingly borrowed from oceanic.js :3
4
- * https://github.com/OceanicJS/Oceanic/blob/9ca907f46d45da4afa8c9be9e81e3093925c73c5/lib/rest/Bucket.ts
5
- */
6
- /** A bucket. */
7
- export default class Bucket {
8
- constructor(tokenLimit, interval, options) {
9
- var _a, _b;
10
- this._queue = [];
11
- this.tokenLimit = tokenLimit;
12
- this.interval = interval;
13
- this.latencyRef = (_a = options === null || options === void 0 ? void 0 : options.latencyRef) !== null && _a !== void 0 ? _a : { latency: 0 };
14
- this.lastReset = this.tokens = this.lastSend = 0;
15
- this.reservedTokens = (_b = options === null || options === void 0 ? void 0 : options.reservedTokens) !== null && _b !== void 0 ? _b : 0;
16
- this.timeout = null;
17
- }
18
- check() {
19
- if (this.timeout || this._queue.length === 0) {
20
- return;
21
- }
22
- if (this.lastReset + this.interval + this.tokenLimit * this.latencyRef.latency < Date.now()) {
23
- this.lastReset = Date.now();
24
- this.tokens = Math.max(0, this.tokens - this.tokenLimit);
25
- }
26
- let val;
27
- let tokensAvailable = this.tokens < this.tokenLimit;
28
- let unreservedTokensAvailable = this.tokens < (this.tokenLimit - this.reservedTokens);
29
- while (this._queue.length !== 0 && (unreservedTokensAvailable || (tokensAvailable && this._queue[0].priority))) {
30
- this.tokens++;
31
- tokensAvailable = this.tokens < this.tokenLimit;
32
- unreservedTokensAvailable = this.tokens < (this.tokenLimit - this.reservedTokens);
33
- const item = this._queue.shift();
34
- val = this.latencyRef.latency - Date.now() + this.lastSend;
35
- if (this.latencyRef.latency === 0 || val <= 0) {
36
- item.func();
37
- this.lastSend = Date.now();
38
- }
39
- else {
40
- setTimeout(() => {
41
- item.func();
42
- }, val);
43
- this.lastSend = Date.now() + val;
44
- }
45
- }
46
- if (this._queue.length !== 0 && !this.timeout) {
47
- this.timeout = setTimeout(() => {
48
- this.timeout = null;
49
- this.check();
50
- }, this.tokens < this.tokenLimit ? this.latencyRef.latency : Math.max(0, this.lastReset + this.interval + this.tokenLimit * this.latencyRef.latency - Date.now()));
51
- }
52
- }
53
- /**
54
- * Add an item to the queue.
55
- * @param func The function to queue.
56
- * @param priority If true, the item will be added to the front of the queue.
57
- */
58
- queue(func, priority = false) {
59
- if (priority) {
60
- this._queue.unshift({ func, priority });
61
- }
62
- else {
63
- this._queue.push({ func, priority });
64
- }
65
- this.check();
66
- }
67
- }
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnVja2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL3V0aWwvQnVja2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFCQUFxQjtBQUNyQjs7O0dBR0c7QUFFSCxnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE9BQU8sT0FBTyxNQUFNO0lBVXZCLFlBQVksVUFBa0IsRUFBRSxRQUFnQixFQUFFLE9BQXlFOztRQVRuSCxXQUFNLEdBQStDLEVBQUUsQ0FBQztRQVU1RCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFVBQVUsbUNBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDeEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsY0FBYyxtQ0FBSSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUVPLEtBQUs7UUFDVCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDM0MsT0FBTztRQUNYLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzFGLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0QsQ0FBQztRQUVELElBQUksR0FBVyxDQUFDO1FBQ2hCLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNwRCxJQUFJLHlCQUF5QixHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0RixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLHlCQUF5QixJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzdHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNkLGVBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDaEQseUJBQXlCLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ2xGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakMsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzNELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDNUMsSUFBSyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQy9CLENBQUM7aUJBQU0sQ0FBQztnQkFDSixVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNaLElBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDakIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNSLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztZQUNyQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNqQixDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2SyxDQUFDO0lBR0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsSUFBZ0IsRUFBRSxRQUFRLEdBQUcsS0FBSztRQUNwQyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM1QyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNqQixDQUFDO0NBQ0oifQ==