@zeitar/throttle 1.0.0 → 1.1.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/README.md +17 -0
- package/dist/CompoundLimiter.d.ts +0 -1
- package/dist/CompoundLimiter.js +0 -1
- package/dist/CompoundRateLimiterFactory.d.ts +0 -1
- package/dist/CompoundRateLimiterFactory.js +0 -1
- package/dist/LimiterInterface.d.ts +0 -1
- package/dist/LimiterInterface.js +0 -1
- package/dist/LimiterStateInterface.d.ts +0 -1
- package/dist/LimiterStateInterface.js +0 -1
- package/dist/RateLimit.d.ts +0 -1
- package/dist/RateLimit.js +0 -1
- package/dist/RateLimiterFactory.d.ts +0 -1
- package/dist/RateLimiterFactory.js +0 -1
- package/dist/RateLimiterFactoryInterface.d.ts +0 -1
- package/dist/RateLimiterFactoryInterface.js +0 -1
- package/dist/Reservation.d.ts +0 -1
- package/dist/Reservation.js +0 -1
- package/dist/errors/InvalidIntervalError.d.ts +0 -1
- package/dist/errors/InvalidIntervalError.js +0 -1
- package/dist/errors/MaxWaitDurationExceededError.d.ts +0 -1
- package/dist/errors/MaxWaitDurationExceededError.js +0 -1
- package/dist/errors/RateLimitExceededError.d.ts +0 -1
- package/dist/errors/RateLimitExceededError.js +0 -1
- package/dist/errors/ReserveNotSupportedError.d.ts +0 -1
- package/dist/errors/ReserveNotSupportedError.js +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/policy/FixedWindowLimiter.d.ts +0 -1
- package/dist/policy/FixedWindowLimiter.js +0 -1
- package/dist/policy/NoLimiter.d.ts +0 -1
- package/dist/policy/NoLimiter.js +0 -1
- package/dist/policy/Rate.d.ts +0 -1
- package/dist/policy/Rate.js +0 -1
- package/dist/policy/SlidingWindow.d.ts +0 -1
- package/dist/policy/SlidingWindow.js +0 -1
- package/dist/policy/SlidingWindowLimiter.d.ts +0 -1
- package/dist/policy/SlidingWindowLimiter.js +0 -1
- package/dist/policy/TokenBucket.d.ts +0 -1
- package/dist/policy/TokenBucket.js +0 -1
- package/dist/policy/TokenBucketLimiter.d.ts +0 -1
- package/dist/policy/TokenBucketLimiter.js +0 -1
- package/dist/policy/Window.d.ts +0 -1
- package/dist/policy/Window.js +0 -1
- package/dist/storage/InMemoryStorage.d.ts +0 -1
- package/dist/storage/InMemoryStorage.js +0 -1
- package/dist/storage/LockInterface.d.ts +0 -1
- package/dist/storage/LockInterface.js +0 -1
- package/dist/storage/StorageInterface.d.ts +0 -1
- package/dist/storage/StorageInterface.js +0 -1
- package/dist/util/TimeUtil.d.ts +0 -1
- package/dist/util/TimeUtil.js +0 -1
- package/package.json +1 -2
- package/dist/CompoundLimiter.d.ts.map +0 -1
- package/dist/CompoundLimiter.js.map +0 -1
- package/dist/CompoundRateLimiterFactory.d.ts.map +0 -1
- package/dist/CompoundRateLimiterFactory.js.map +0 -1
- package/dist/LimiterInterface.d.ts.map +0 -1
- package/dist/LimiterInterface.js.map +0 -1
- package/dist/LimiterStateInterface.d.ts.map +0 -1
- package/dist/LimiterStateInterface.js.map +0 -1
- package/dist/RateLimit.d.ts.map +0 -1
- package/dist/RateLimit.js.map +0 -1
- package/dist/RateLimiterFactory.d.ts.map +0 -1
- package/dist/RateLimiterFactory.js.map +0 -1
- package/dist/RateLimiterFactoryInterface.d.ts.map +0 -1
- package/dist/RateLimiterFactoryInterface.js.map +0 -1
- package/dist/Reservation.d.ts.map +0 -1
- package/dist/Reservation.js.map +0 -1
- package/dist/__tests__/CompoundLimiter.test.d.ts +0 -2
- package/dist/__tests__/CompoundLimiter.test.d.ts.map +0 -1
- package/dist/__tests__/CompoundLimiter.test.js +0 -231
- package/dist/__tests__/CompoundLimiter.test.js.map +0 -1
- package/dist/__tests__/CompoundRateLimiterFactory.test.d.ts +0 -2
- package/dist/__tests__/CompoundRateLimiterFactory.test.d.ts.map +0 -1
- package/dist/__tests__/CompoundRateLimiterFactory.test.js +0 -213
- package/dist/__tests__/CompoundRateLimiterFactory.test.js.map +0 -1
- package/dist/__tests__/RateLimit.test.d.ts +0 -2
- package/dist/__tests__/RateLimit.test.d.ts.map +0 -1
- package/dist/__tests__/RateLimit.test.js +0 -108
- package/dist/__tests__/RateLimit.test.js.map +0 -1
- package/dist/__tests__/RateLimiterFactory.test.d.ts +0 -2
- package/dist/__tests__/RateLimiterFactory.test.d.ts.map +0 -1
- package/dist/__tests__/RateLimiterFactory.test.js +0 -323
- package/dist/__tests__/RateLimiterFactory.test.js.map +0 -1
- package/dist/__tests__/Reservation.test.d.ts +0 -2
- package/dist/__tests__/Reservation.test.d.ts.map +0 -1
- package/dist/__tests__/Reservation.test.js +0 -110
- package/dist/__tests__/Reservation.test.js.map +0 -1
- package/dist/errors/InvalidIntervalError.d.ts.map +0 -1
- package/dist/errors/InvalidIntervalError.js.map +0 -1
- package/dist/errors/MaxWaitDurationExceededError.d.ts.map +0 -1
- package/dist/errors/MaxWaitDurationExceededError.js.map +0 -1
- package/dist/errors/RateLimitExceededError.d.ts.map +0 -1
- package/dist/errors/RateLimitExceededError.js.map +0 -1
- package/dist/errors/ReserveNotSupportedError.d.ts.map +0 -1
- package/dist/errors/ReserveNotSupportedError.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/policy/FixedWindowLimiter.d.ts.map +0 -1
- package/dist/policy/FixedWindowLimiter.js.map +0 -1
- package/dist/policy/NoLimiter.d.ts.map +0 -1
- package/dist/policy/NoLimiter.js.map +0 -1
- package/dist/policy/Rate.d.ts.map +0 -1
- package/dist/policy/Rate.js.map +0 -1
- package/dist/policy/SlidingWindow.d.ts.map +0 -1
- package/dist/policy/SlidingWindow.js.map +0 -1
- package/dist/policy/SlidingWindowLimiter.d.ts.map +0 -1
- package/dist/policy/SlidingWindowLimiter.js.map +0 -1
- package/dist/policy/TokenBucket.d.ts.map +0 -1
- package/dist/policy/TokenBucket.js.map +0 -1
- package/dist/policy/TokenBucketLimiter.d.ts.map +0 -1
- package/dist/policy/TokenBucketLimiter.js.map +0 -1
- package/dist/policy/Window.d.ts.map +0 -1
- package/dist/policy/Window.js.map +0 -1
- package/dist/policy/__tests__/FixedWindowLimiter.test.d.ts +0 -2
- package/dist/policy/__tests__/FixedWindowLimiter.test.d.ts.map +0 -1
- package/dist/policy/__tests__/FixedWindowLimiter.test.js +0 -180
- package/dist/policy/__tests__/FixedWindowLimiter.test.js.map +0 -1
- package/dist/policy/__tests__/NoLimiter.test.d.ts +0 -2
- package/dist/policy/__tests__/NoLimiter.test.d.ts.map +0 -1
- package/dist/policy/__tests__/NoLimiter.test.js +0 -40
- package/dist/policy/__tests__/NoLimiter.test.js.map +0 -1
- package/dist/policy/__tests__/Rate.test.d.ts +0 -2
- package/dist/policy/__tests__/Rate.test.d.ts.map +0 -1
- package/dist/policy/__tests__/Rate.test.js +0 -162
- package/dist/policy/__tests__/Rate.test.js.map +0 -1
- package/dist/policy/__tests__/SlidingWindow.test.d.ts +0 -2
- package/dist/policy/__tests__/SlidingWindow.test.d.ts.map +0 -1
- package/dist/policy/__tests__/SlidingWindow.test.js +0 -257
- package/dist/policy/__tests__/SlidingWindow.test.js.map +0 -1
- package/dist/policy/__tests__/SlidingWindowLimiter.test.d.ts +0 -2
- package/dist/policy/__tests__/SlidingWindowLimiter.test.d.ts.map +0 -1
- package/dist/policy/__tests__/SlidingWindowLimiter.test.js +0 -201
- package/dist/policy/__tests__/SlidingWindowLimiter.test.js.map +0 -1
- package/dist/policy/__tests__/TokenBucket.test.d.ts +0 -2
- package/dist/policy/__tests__/TokenBucket.test.d.ts.map +0 -1
- package/dist/policy/__tests__/TokenBucket.test.js +0 -171
- package/dist/policy/__tests__/TokenBucket.test.js.map +0 -1
- package/dist/policy/__tests__/TokenBucketLimiter.test.d.ts +0 -2
- package/dist/policy/__tests__/TokenBucketLimiter.test.d.ts.map +0 -1
- package/dist/policy/__tests__/TokenBucketLimiter.test.js +0 -175
- package/dist/policy/__tests__/TokenBucketLimiter.test.js.map +0 -1
- package/dist/policy/__tests__/Window.test.d.ts +0 -2
- package/dist/policy/__tests__/Window.test.d.ts.map +0 -1
- package/dist/policy/__tests__/Window.test.js +0 -193
- package/dist/policy/__tests__/Window.test.js.map +0 -1
- package/dist/storage/InMemoryStorage.d.ts.map +0 -1
- package/dist/storage/InMemoryStorage.js.map +0 -1
- package/dist/storage/LockInterface.d.ts.map +0 -1
- package/dist/storage/LockInterface.js.map +0 -1
- package/dist/storage/StorageInterface.d.ts.map +0 -1
- package/dist/storage/StorageInterface.js.map +0 -1
- package/dist/storage/__tests__/InMemoryStorage.test.d.ts +0 -2
- package/dist/storage/__tests__/InMemoryStorage.test.d.ts.map +0 -1
- package/dist/storage/__tests__/InMemoryStorage.test.js +0 -154
- package/dist/storage/__tests__/InMemoryStorage.test.js.map +0 -1
- package/dist/util/TimeUtil.d.ts.map +0 -1
- package/dist/util/TimeUtil.js.map +0 -1
- package/dist/util/__tests__/TimeUtil.test.d.ts +0 -2
- package/dist/util/__tests__/TimeUtil.test.d.ts.map +0 -1
- package/dist/util/__tests__/TimeUtil.test.js +0 -132
- package/dist/util/__tests__/TimeUtil.test.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"InMemoryStorage.test.d.ts","sourceRoot":"","sources":["../../../src/storage/__tests__/InMemoryStorage.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const InMemoryStorage_1 = require("../InMemoryStorage");
|
|
4
|
-
const TokenBucket_1 = require("../../policy/TokenBucket");
|
|
5
|
-
const Rate_1 = require("../../policy/Rate");
|
|
6
|
-
describe('InMemoryStorage', () => {
|
|
7
|
-
let storage;
|
|
8
|
-
let bucket;
|
|
9
|
-
beforeEach(() => {
|
|
10
|
-
storage = new InMemoryStorage_1.InMemoryStorage();
|
|
11
|
-
bucket = new TokenBucket_1.TokenBucket('test-bucket', 10, Rate_1.Rate.perSecond(1));
|
|
12
|
-
});
|
|
13
|
-
describe('save and fetch', () => {
|
|
14
|
-
it('should save and fetch a state object', async () => {
|
|
15
|
-
await storage.save(bucket);
|
|
16
|
-
const fetched = await storage.fetch('test-bucket');
|
|
17
|
-
expect(fetched).toBe(bucket);
|
|
18
|
-
expect(fetched?.getId()).toBe('test-bucket');
|
|
19
|
-
});
|
|
20
|
-
it('should return null for non-existent id', async () => {
|
|
21
|
-
const fetched = await storage.fetch('non-existent');
|
|
22
|
-
expect(fetched).toBeNull();
|
|
23
|
-
});
|
|
24
|
-
it('should overwrite existing state with same id', async () => {
|
|
25
|
-
const bucket1 = new TokenBucket_1.TokenBucket('test-id', 10, Rate_1.Rate.perSecond(1), 5);
|
|
26
|
-
const bucket2 = new TokenBucket_1.TokenBucket('test-id', 20, Rate_1.Rate.perSecond(2), 10);
|
|
27
|
-
await storage.save(bucket1);
|
|
28
|
-
await storage.save(bucket2);
|
|
29
|
-
const fetched = await storage.fetch('test-id');
|
|
30
|
-
expect(fetched).toBe(bucket2);
|
|
31
|
-
expect(fetched.getBurstSize()).toBe(20);
|
|
32
|
-
});
|
|
33
|
-
it('should handle multiple different states', async () => {
|
|
34
|
-
const bucket1 = new TokenBucket_1.TokenBucket('bucket-1', 10, Rate_1.Rate.perSecond(1));
|
|
35
|
-
const bucket2 = new TokenBucket_1.TokenBucket('bucket-2', 20, Rate_1.Rate.perSecond(2));
|
|
36
|
-
const bucket3 = new TokenBucket_1.TokenBucket('bucket-3', 30, Rate_1.Rate.perSecond(3));
|
|
37
|
-
await storage.save(bucket1);
|
|
38
|
-
await storage.save(bucket2);
|
|
39
|
-
await storage.save(bucket3);
|
|
40
|
-
expect(await storage.fetch('bucket-1')).toBe(bucket1);
|
|
41
|
-
expect(await storage.fetch('bucket-2')).toBe(bucket2);
|
|
42
|
-
expect(await storage.fetch('bucket-3')).toBe(bucket3);
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
describe('delete', () => {
|
|
46
|
-
it('should delete a state object', async () => {
|
|
47
|
-
await storage.save(bucket);
|
|
48
|
-
await storage.delete('test-bucket');
|
|
49
|
-
const fetched = await storage.fetch('test-bucket');
|
|
50
|
-
expect(fetched).toBeNull();
|
|
51
|
-
});
|
|
52
|
-
it('should not throw when deleting non-existent id', async () => {
|
|
53
|
-
await expect(storage.delete('non-existent')).resolves.not.toThrow();
|
|
54
|
-
});
|
|
55
|
-
it('should only delete the specified id', async () => {
|
|
56
|
-
const bucket1 = new TokenBucket_1.TokenBucket('bucket-1', 10, Rate_1.Rate.perSecond(1));
|
|
57
|
-
const bucket2 = new TokenBucket_1.TokenBucket('bucket-2', 20, Rate_1.Rate.perSecond(2));
|
|
58
|
-
await storage.save(bucket1);
|
|
59
|
-
await storage.save(bucket2);
|
|
60
|
-
await storage.delete('bucket-1');
|
|
61
|
-
expect(await storage.fetch('bucket-1')).toBeNull();
|
|
62
|
-
expect(await storage.fetch('bucket-2')).toBe(bucket2);
|
|
63
|
-
});
|
|
64
|
-
});
|
|
65
|
-
describe('expiration', () => {
|
|
66
|
-
it('should return null for expired entries', async () => {
|
|
67
|
-
jest.useFakeTimers();
|
|
68
|
-
const now = Date.now();
|
|
69
|
-
jest.setSystemTime(now);
|
|
70
|
-
// Create a bucket that will expire in 10 seconds
|
|
71
|
-
const expirableBucket = new TokenBucket_1.TokenBucket('expirable', 10, Rate_1.Rate.perSecond(1), 0, now / 1000);
|
|
72
|
-
await storage.save(expirableBucket);
|
|
73
|
-
// Should exist before expiration
|
|
74
|
-
expect(await storage.fetch('expirable')).toBe(expirableBucket);
|
|
75
|
-
// Advance time past expiration (bucket expires after it can fully refill)
|
|
76
|
-
const expirationMs = expirableBucket.getExpirationTime() * 1000;
|
|
77
|
-
jest.setSystemTime(expirationMs + 1000);
|
|
78
|
-
// Should return null after expiration
|
|
79
|
-
expect(await storage.fetch('expirable')).toBeNull();
|
|
80
|
-
jest.useRealTimers();
|
|
81
|
-
});
|
|
82
|
-
it('should automatically clean up expired entries on fetch', async () => {
|
|
83
|
-
jest.useFakeTimers();
|
|
84
|
-
const now = Date.now();
|
|
85
|
-
jest.setSystemTime(now);
|
|
86
|
-
const expirableBucket = new TokenBucket_1.TokenBucket('expirable', 10, Rate_1.Rate.perSecond(1), 0, now / 1000);
|
|
87
|
-
await storage.save(expirableBucket);
|
|
88
|
-
expect(storage.size()).toBe(1);
|
|
89
|
-
// Advance time past expiration
|
|
90
|
-
const expirationMs = expirableBucket.getExpirationTime() * 1000;
|
|
91
|
-
jest.setSystemTime(expirationMs + 1000);
|
|
92
|
-
// Fetch should clean up the expired entry
|
|
93
|
-
await storage.fetch('expirable');
|
|
94
|
-
expect(storage.size()).toBe(0);
|
|
95
|
-
jest.useRealTimers();
|
|
96
|
-
});
|
|
97
|
-
it('should handle entries with no expiration (null)', async () => {
|
|
98
|
-
// Create a mock state with no expiration
|
|
99
|
-
const noExpirationState = {
|
|
100
|
-
getId: () => 'no-expiration',
|
|
101
|
-
getExpirationTime: () => null,
|
|
102
|
-
};
|
|
103
|
-
await storage.save(noExpirationState);
|
|
104
|
-
// Should always be fetchable
|
|
105
|
-
expect(await storage.fetch('no-expiration')).toBe(noExpirationState);
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
|
-
describe('clear', () => {
|
|
109
|
-
it('should clear all stored states', async () => {
|
|
110
|
-
const bucket1 = new TokenBucket_1.TokenBucket('bucket-1', 10, Rate_1.Rate.perSecond(1));
|
|
111
|
-
const bucket2 = new TokenBucket_1.TokenBucket('bucket-2', 20, Rate_1.Rate.perSecond(2));
|
|
112
|
-
await storage.save(bucket1);
|
|
113
|
-
await storage.save(bucket2);
|
|
114
|
-
storage.clear();
|
|
115
|
-
expect(await storage.fetch('bucket-1')).toBeNull();
|
|
116
|
-
expect(await storage.fetch('bucket-2')).toBeNull();
|
|
117
|
-
expect(storage.size()).toBe(0);
|
|
118
|
-
});
|
|
119
|
-
it('should handle clearing empty storage', () => {
|
|
120
|
-
expect(() => storage.clear()).not.toThrow();
|
|
121
|
-
expect(storage.size()).toBe(0);
|
|
122
|
-
});
|
|
123
|
-
});
|
|
124
|
-
describe('size', () => {
|
|
125
|
-
it('should return 0 for empty storage', () => {
|
|
126
|
-
expect(storage.size()).toBe(0);
|
|
127
|
-
});
|
|
128
|
-
it('should return correct size after adding entries', async () => {
|
|
129
|
-
expect(storage.size()).toBe(0);
|
|
130
|
-
await storage.save(new TokenBucket_1.TokenBucket('bucket-1', 10, Rate_1.Rate.perSecond(1)));
|
|
131
|
-
expect(storage.size()).toBe(1);
|
|
132
|
-
await storage.save(new TokenBucket_1.TokenBucket('bucket-2', 20, Rate_1.Rate.perSecond(2)));
|
|
133
|
-
expect(storage.size()).toBe(2);
|
|
134
|
-
await storage.save(new TokenBucket_1.TokenBucket('bucket-3', 30, Rate_1.Rate.perSecond(3)));
|
|
135
|
-
expect(storage.size()).toBe(3);
|
|
136
|
-
});
|
|
137
|
-
it('should return correct size after deleting entries', async () => {
|
|
138
|
-
await storage.save(new TokenBucket_1.TokenBucket('bucket-1', 10, Rate_1.Rate.perSecond(1)));
|
|
139
|
-
await storage.save(new TokenBucket_1.TokenBucket('bucket-2', 20, Rate_1.Rate.perSecond(2)));
|
|
140
|
-
expect(storage.size()).toBe(2);
|
|
141
|
-
await storage.delete('bucket-1');
|
|
142
|
-
expect(storage.size()).toBe(1);
|
|
143
|
-
await storage.delete('bucket-2');
|
|
144
|
-
expect(storage.size()).toBe(0);
|
|
145
|
-
});
|
|
146
|
-
it('should not change size when saving same id', async () => {
|
|
147
|
-
await storage.save(new TokenBucket_1.TokenBucket('bucket-1', 10, Rate_1.Rate.perSecond(1)));
|
|
148
|
-
expect(storage.size()).toBe(1);
|
|
149
|
-
await storage.save(new TokenBucket_1.TokenBucket('bucket-1', 20, Rate_1.Rate.perSecond(2)));
|
|
150
|
-
expect(storage.size()).toBe(1);
|
|
151
|
-
});
|
|
152
|
-
});
|
|
153
|
-
});
|
|
154
|
-
//# sourceMappingURL=InMemoryStorage.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"InMemoryStorage.test.js","sourceRoot":"","sources":["../../../src/storage/__tests__/InMemoryStorage.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TimeUtil.d.ts","sourceRoot":"","sources":["../../src/util/TimeUtil.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,QAAQ;IACnB;;;;;;;;;;;;;;;OAeG;IACH,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAkDlD;;OAEG;IACH,MAAM,CAAC,GAAG,IAAI,MAAM;IAIpB;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAItC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAG5C"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TimeUtil.js","sourceRoot":"","sources":["../../src/util/TimeUtil.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAa,QAAQ;IACnB;;;;;;;;;;;;;;;OAeG;IACH,MAAM,CAAC,iBAAiB,CAAC,QAAgB;QACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAE9C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;QAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAEvC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,sBAAsB;QACtB,MAAM,OAAO,GAA2B;YACtC,CAAC,EAAE,CAAC;YACJ,GAAG,EAAE,CAAC;YACN,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,CAAC;YACV,CAAC,EAAE,EAAE;YACL,GAAG,EAAE,EAAE;YACP,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,EAAE;YACX,CAAC,EAAE,IAAI;YACP,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,IAAI;YACX,CAAC,EAAE,KAAK;YACR,GAAG,EAAE,KAAK;YACV,IAAI,EAAE,KAAK;YACX,CAAC,EAAE,MAAM;YACT,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,OAAO,EAAE,UAAU;YAC1B,MAAM,EAAE,OAAO;YACf,CAAC,EAAE,QAAQ,EAAE,WAAW;YACxB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,QAAQ;SAChB,CAAC;QAEF,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,MAAM,GAAG,UAAU,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,GAAG;QACR,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,EAAU;QAC3B,OAAO,EAAE,GAAG,IAAI,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,OAAe;QAChC,OAAO,OAAO,GAAG,IAAI,CAAC;IACxB,CAAC;CACF;AAvFD,4BAuFC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TimeUtil.test.d.ts","sourceRoot":"","sources":["../../../src/util/__tests__/TimeUtil.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const TimeUtil_1 = require("../TimeUtil");
|
|
4
|
-
describe('TimeUtil', () => {
|
|
5
|
-
describe('durationToSeconds', () => {
|
|
6
|
-
it('should convert seconds correctly', () => {
|
|
7
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('1 second')).toBe(1);
|
|
8
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('2 seconds')).toBe(2);
|
|
9
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('5 s')).toBe(5);
|
|
10
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('10s')).toBe(10);
|
|
11
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('3 sec')).toBe(3);
|
|
12
|
-
});
|
|
13
|
-
it('should convert minutes correctly', () => {
|
|
14
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('1 minute')).toBe(60);
|
|
15
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('2 minutes')).toBe(120);
|
|
16
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('5 m')).toBe(300);
|
|
17
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('10m')).toBe(600);
|
|
18
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('3 min')).toBe(180);
|
|
19
|
-
});
|
|
20
|
-
it('should convert hours correctly', () => {
|
|
21
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('1 hour')).toBe(3600);
|
|
22
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('2 hours')).toBe(7200);
|
|
23
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('5 h')).toBe(18000);
|
|
24
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('10h')).toBe(36000);
|
|
25
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('3 hr')).toBe(10800);
|
|
26
|
-
});
|
|
27
|
-
it('should convert days correctly', () => {
|
|
28
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('1 day')).toBe(86400);
|
|
29
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('2 days')).toBe(172800);
|
|
30
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('7 d')).toBe(604800);
|
|
31
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('10d')).toBe(864000);
|
|
32
|
-
});
|
|
33
|
-
it('should convert weeks correctly', () => {
|
|
34
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('1 week')).toBe(604800);
|
|
35
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('2 weeks')).toBe(1209600);
|
|
36
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('3 w')).toBe(1814400);
|
|
37
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('4w')).toBe(2419200);
|
|
38
|
-
});
|
|
39
|
-
it('should convert months correctly (30 days)', () => {
|
|
40
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('1 month')).toBe(2592000);
|
|
41
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('2 months')).toBe(5184000);
|
|
42
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('3 month')).toBe(7776000);
|
|
43
|
-
});
|
|
44
|
-
it('should convert years correctly (365 days)', () => {
|
|
45
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('1 year')).toBe(31536000);
|
|
46
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('2 years')).toBe(63072000);
|
|
47
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('1 y')).toBe(31536000);
|
|
48
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('3y')).toBe(94608000);
|
|
49
|
-
});
|
|
50
|
-
it('should handle whitespace variations', () => {
|
|
51
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds(' 5 seconds ')).toBe(5);
|
|
52
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('10m')).toBe(600);
|
|
53
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('1 hour')).toBe(3600);
|
|
54
|
-
});
|
|
55
|
-
it('should be case insensitive', () => {
|
|
56
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('5 SECONDS')).toBe(5);
|
|
57
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('10 Minutes')).toBe(600);
|
|
58
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('1 HOUR')).toBe(3600);
|
|
59
|
-
});
|
|
60
|
-
it('should throw error for invalid format', () => {
|
|
61
|
-
expect(() => TimeUtil_1.TimeUtil.durationToSeconds('invalid')).toThrow('Invalid duration format');
|
|
62
|
-
expect(() => TimeUtil_1.TimeUtil.durationToSeconds('abc seconds')).toThrow();
|
|
63
|
-
expect(() => TimeUtil_1.TimeUtil.durationToSeconds('')).toThrow();
|
|
64
|
-
});
|
|
65
|
-
it('should throw error for negative amounts', () => {
|
|
66
|
-
expect(() => TimeUtil_1.TimeUtil.durationToSeconds('-5 seconds')).toThrow('Invalid duration format');
|
|
67
|
-
});
|
|
68
|
-
it('should throw error for unknown units', () => {
|
|
69
|
-
expect(() => TimeUtil_1.TimeUtil.durationToSeconds('5 fortnights')).toThrow('Unknown time unit');
|
|
70
|
-
expect(() => TimeUtil_1.TimeUtil.durationToSeconds('10 xyz')).toThrow('Unknown time unit');
|
|
71
|
-
});
|
|
72
|
-
it('should handle zero values', () => {
|
|
73
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('0 seconds')).toBe(0);
|
|
74
|
-
expect(TimeUtil_1.TimeUtil.durationToSeconds('0 minutes')).toBe(0);
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
|
-
describe('now', () => {
|
|
78
|
-
it('should return current time in seconds', () => {
|
|
79
|
-
const before = Date.now() / 1000;
|
|
80
|
-
const now = TimeUtil_1.TimeUtil.now();
|
|
81
|
-
const after = Date.now() / 1000;
|
|
82
|
-
expect(now).toBeGreaterThanOrEqual(before);
|
|
83
|
-
expect(now).toBeLessThanOrEqual(after);
|
|
84
|
-
});
|
|
85
|
-
it('should return a number', () => {
|
|
86
|
-
expect(typeof TimeUtil_1.TimeUtil.now()).toBe('number');
|
|
87
|
-
});
|
|
88
|
-
it('should have decimal precision (milliseconds)', () => {
|
|
89
|
-
const now = TimeUtil_1.TimeUtil.now();
|
|
90
|
-
expect(now % 1).not.toBe(0);
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
describe('msToSeconds', () => {
|
|
94
|
-
it('should convert milliseconds to seconds', () => {
|
|
95
|
-
expect(TimeUtil_1.TimeUtil.msToSeconds(1000)).toBe(1);
|
|
96
|
-
expect(TimeUtil_1.TimeUtil.msToSeconds(5000)).toBe(5);
|
|
97
|
-
expect(TimeUtil_1.TimeUtil.msToSeconds(60000)).toBe(60);
|
|
98
|
-
});
|
|
99
|
-
it('should handle fractional seconds', () => {
|
|
100
|
-
expect(TimeUtil_1.TimeUtil.msToSeconds(500)).toBe(0.5);
|
|
101
|
-
expect(TimeUtil_1.TimeUtil.msToSeconds(1500)).toBe(1.5);
|
|
102
|
-
expect(TimeUtil_1.TimeUtil.msToSeconds(100)).toBe(0.1);
|
|
103
|
-
});
|
|
104
|
-
it('should handle zero', () => {
|
|
105
|
-
expect(TimeUtil_1.TimeUtil.msToSeconds(0)).toBe(0);
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
|
-
describe('secondsToMs', () => {
|
|
109
|
-
it('should convert seconds to milliseconds', () => {
|
|
110
|
-
expect(TimeUtil_1.TimeUtil.secondsToMs(1)).toBe(1000);
|
|
111
|
-
expect(TimeUtil_1.TimeUtil.secondsToMs(5)).toBe(5000);
|
|
112
|
-
expect(TimeUtil_1.TimeUtil.secondsToMs(60)).toBe(60000);
|
|
113
|
-
});
|
|
114
|
-
it('should handle fractional seconds', () => {
|
|
115
|
-
expect(TimeUtil_1.TimeUtil.secondsToMs(0.5)).toBe(500);
|
|
116
|
-
expect(TimeUtil_1.TimeUtil.secondsToMs(1.5)).toBe(1500);
|
|
117
|
-
expect(TimeUtil_1.TimeUtil.secondsToMs(0.1)).toBe(100);
|
|
118
|
-
});
|
|
119
|
-
it('should handle zero', () => {
|
|
120
|
-
expect(TimeUtil_1.TimeUtil.secondsToMs(0)).toBe(0);
|
|
121
|
-
});
|
|
122
|
-
});
|
|
123
|
-
describe('round-trip conversions', () => {
|
|
124
|
-
it('should convert back and forth without loss', () => {
|
|
125
|
-
const ms = 5432;
|
|
126
|
-
expect(TimeUtil_1.TimeUtil.secondsToMs(TimeUtil_1.TimeUtil.msToSeconds(ms))).toBe(ms);
|
|
127
|
-
const seconds = 10.5;
|
|
128
|
-
expect(TimeUtil_1.TimeUtil.msToSeconds(TimeUtil_1.TimeUtil.secondsToMs(seconds))).toBe(seconds);
|
|
129
|
-
});
|
|
130
|
-
});
|
|
131
|
-
});
|
|
132
|
-
//# sourceMappingURL=TimeUtil.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TimeUtil.test.js","sourceRoot":"","sources":["../../../src/util/__tests__/TimeUtil.test.ts"],"names":[],"mappings":"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"}
|