@xivdyetools/test-utils 1.0.3 → 1.1.1

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 CHANGED
@@ -139,6 +139,20 @@ const params = new URLSearchParams({
139
139
 
140
140
  This package includes full TypeScript support. Cloudflare Workers types are included via `@cloudflare/workers-types`.
141
141
 
142
+ ## Connect With Me
143
+
144
+ **Flash Galatine** | Balmung (Crystal)
145
+
146
+ 🎮 **FFXIV**: [Lodestone Character](https://na.finalfantasyxiv.com/lodestone/character/7677106/)
147
+ 📝 **Blog**: [Project Galatine](https://blog.projectgalatine.com/)
148
+ 💻 **GitHub**: [@FlashGalatine](https://github.com/FlashGalatine)
149
+ 🐦 **X / Twitter**: [@AsheJunius](https://x.com/AsheJunius)
150
+ 📺 **Twitch**: [flashgalatine](https://www.twitch.tv/flashgalatine)
151
+ 🌐 **BlueSky**: [projectgalatine.com](https://bsky.app/profile/projectgalatine.com)
152
+ ❤️ **Patreon**: [ProjectGalatine](https://patreon.com/ProjectGalatine)
153
+ ☕ **Ko-Fi**: [flashgalatine](https://ko-fi.com/flashgalatine)
154
+ 💬 **Discord**: [Join Server](https://discord.gg/5VUSKTZCe5)
155
+
142
156
  ## License
143
157
 
144
- MIT
158
+ MIT © 2025 Flash Galatine
@@ -83,6 +83,13 @@ export interface MockD1DatabaseSession {
83
83
  /** Get constraint string for this session */
84
84
  getBookmark: () => string;
85
85
  }
86
+ /**
87
+ * Configuration options for the mock D1 database
88
+ */
89
+ export interface MockD1DatabaseConfig {
90
+ /** Maximum number of queries to keep in history (prevents memory leaks). Default: 1000 */
91
+ maxQueryHistory?: number;
92
+ }
86
93
  /**
87
94
  * Extended mock D1 database with test helpers
88
95
  */
@@ -96,9 +103,9 @@ export interface MockD1Database {
96
103
  dump: () => Promise<ArrayBuffer>;
97
104
  /** Start a session - returns a session object with same query methods */
98
105
  withSession: (constraintOrBookmark?: string) => MockD1DatabaseSession;
99
- /** Array of all queries executed (for assertions) */
106
+ /** Array of all queries executed (for assertions). Limited to maxQueryHistory entries. */
100
107
  _queries: string[];
101
- /** Array of all binding arrays passed to queries */
108
+ /** Array of all binding arrays passed to queries. Limited to maxQueryHistory entries. */
102
109
  _bindings: unknown[][];
103
110
  /** Setup a mock function to return custom responses */
104
111
  _setupMock: (fn: QueryMockFn) => void;
@@ -111,6 +118,8 @@ export interface MockD1Database {
111
118
  * @param isBanned - true to simulate banned user, false or undefined for not banned
112
119
  */
113
120
  _setBanStatus: (isBanned: boolean) => void;
121
+ /** Set the maximum query history size (for memory management) */
122
+ _setMaxQueryHistory: (max: number) => void;
114
123
  }
115
124
  /**
116
125
  * Creates a mock D1 database for testing
@@ -118,9 +127,13 @@ export interface MockD1Database {
118
127
  * The mock tracks all queries and bindings for assertions, and supports
119
128
  * custom response functions for simulating database behavior.
120
129
  *
130
+ * TEST-OPT-003 FIX: Added maxQueryHistory config to prevent unbounded memory growth
131
+ * in long-running test suites. Default is 1000 queries.
132
+ *
133
+ * @param config - Optional configuration for the mock database
121
134
  * @returns A mock D1 database that can be cast to D1Database
122
135
  */
123
- export declare function createMockD1Database(): MockD1Database;
136
+ export declare function createMockD1Database(config?: MockD1DatabaseConfig): MockD1Database;
124
137
  /**
125
138
  * Creates a mock D1 database pre-cast as D1Database
126
139
  *
@@ -1 +1 @@
1
- {"version":3,"file":"d1.d.ts","sourceRoot":"","sources":["../../src/cloudflare/d1.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"d1.d.ts","sourceRoot":"","sources":["../../src/cloudflare/d1.ts"],"names":[],"mappings":"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"}
@@ -31,19 +31,36 @@
31
31
  * db._reset();
32
32
  * ```
33
33
  */
34
+ /** Default maximum query history size */
35
+ const DEFAULT_MAX_QUERY_HISTORY = 1000;
34
36
  /**
35
37
  * Creates a mock D1 database for testing
36
38
  *
37
39
  * The mock tracks all queries and bindings for assertions, and supports
38
40
  * custom response functions for simulating database behavior.
39
41
  *
42
+ * TEST-OPT-003 FIX: Added maxQueryHistory config to prevent unbounded memory growth
43
+ * in long-running test suites. Default is 1000 queries.
44
+ *
45
+ * @param config - Optional configuration for the mock database
40
46
  * @returns A mock D1 database that can be cast to D1Database
41
47
  */
42
- export function createMockD1Database() {
48
+ export function createMockD1Database(config) {
43
49
  const queries = [];
44
50
  const bindings = [];
45
51
  let mockFn;
46
52
  let banStatus;
53
+ let maxQueryHistory = config?.maxQueryHistory ?? DEFAULT_MAX_QUERY_HISTORY;
54
+ /**
55
+ * Enforce max query history limit using FIFO eviction
56
+ * TEST-OPT-003 FIX: Prevents unbounded memory growth
57
+ */
58
+ const enforceMaxHistory = () => {
59
+ while (queries.length > maxQueryHistory) {
60
+ queries.shift();
61
+ bindings.shift();
62
+ }
63
+ };
47
64
  const createDefaultMeta = () => ({
48
65
  duration: 0,
49
66
  changes: 0,
@@ -63,6 +80,7 @@ export function createMockD1Database() {
63
80
  },
64
81
  first: async () => {
65
82
  queries.push(query);
83
+ enforceMaxHistory();
66
84
  // Special handling for banned_users queries to prevent false ban detection
67
85
  // Use _setBanStatus(true) to simulate a banned user in tests
68
86
  if (query.includes('banned_users')) {
@@ -84,6 +102,7 @@ export function createMockD1Database() {
84
102
  },
85
103
  all: async () => {
86
104
  queries.push(query);
105
+ enforceMaxHistory();
87
106
  if (mockFn) {
88
107
  const result = mockFn(query, boundValues);
89
108
  if (Array.isArray(result)) {
@@ -98,6 +117,7 @@ export function createMockD1Database() {
98
117
  },
99
118
  run: async () => {
100
119
  queries.push(query);
120
+ enforceMaxHistory();
101
121
  if (mockFn) {
102
122
  const result = mockFn(query, boundValues);
103
123
  if (result && typeof result === 'object' && 'meta' in result) {
@@ -112,6 +132,7 @@ export function createMockD1Database() {
112
132
  },
113
133
  raw: async (_options) => {
114
134
  queries.push(query);
135
+ enforceMaxHistory();
115
136
  if (mockFn) {
116
137
  const result = mockFn(query, boundValues);
117
138
  if (Array.isArray(result)) {
@@ -143,6 +164,7 @@ export function createMockD1Database() {
143
164
  },
144
165
  exec: async (query) => {
145
166
  queries.push(query);
167
+ enforceMaxHistory();
146
168
  return { count: 1, duration: 0 };
147
169
  },
148
170
  dump: async () => {
@@ -164,6 +186,7 @@ export function createMockD1Database() {
164
186
  },
165
187
  exec: async (query) => {
166
188
  queries.push(query);
189
+ enforceMaxHistory();
167
190
  return { count: 1, duration: 0 };
168
191
  },
169
192
  getBookmark: () => constraintOrBookmark ?? 'mock-bookmark',
@@ -186,6 +209,11 @@ export function createMockD1Database() {
186
209
  _setBanStatus: (isBanned) => {
187
210
  banStatus = isBanned;
188
211
  },
212
+ _setMaxQueryHistory: (max) => {
213
+ maxQueryHistory = max;
214
+ // Immediately enforce the new limit
215
+ enforceMaxHistory();
216
+ },
189
217
  };
190
218
  return mockDb;
191
219
  }
@@ -1 +1 @@
1
- {"version":3,"file":"d1.js","sourceRoot":"","sources":["../../src/cloudflare/d1.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"d1.js","sourceRoot":"","sources":["../../src/cloudflare/d1.ts"],"names":[],"mappings":"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"}
@@ -44,12 +44,19 @@ export interface MockResponseConfig {
44
44
  headers?: Record<string, string>;
45
45
  body?: unknown;
46
46
  }
47
+ /**
48
+ * Configuration options for the mock fetcher
49
+ */
50
+ export interface MockFetcherConfig {
51
+ /** Maximum number of calls to keep in history (prevents memory leaks). Default: 1000 */
52
+ maxCallHistory?: number;
53
+ }
47
54
  /**
48
55
  * Extended mock Fetcher with test helpers
49
56
  */
50
57
  export interface MockFetcher {
51
58
  fetch: (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;
52
- /** Array of all fetch calls made (for assertions) */
59
+ /** Array of all fetch calls made (for assertions). Limited to maxCallHistory entries. */
53
60
  _calls: MockFetchCall[];
54
61
  /** Setup a response for a specific path pattern */
55
62
  _setupResponse: (pathPattern: string | RegExp, response: unknown, config?: Omit<MockResponseConfig, 'body'>) => void;
@@ -59,6 +66,8 @@ export interface MockFetcher {
59
66
  _reset: () => void;
60
67
  /** Set default response for unmatched requests */
61
68
  _setDefaultResponse: (response: unknown, config?: Omit<MockResponseConfig, 'body'>) => void;
69
+ /** Set the maximum call history size (for memory management) */
70
+ _setMaxCallHistory: (max: number) => void;
62
71
  }
63
72
  /**
64
73
  * Creates a mock Fetcher for testing Service Bindings
@@ -66,7 +75,8 @@ export interface MockFetcher {
66
75
  * The mock tracks all fetch calls and supports configuring
67
76
  * responses for specific URL patterns.
68
77
  *
78
+ * @param config - Optional configuration for the mock fetcher
69
79
  * @returns A mock Fetcher that can be cast to Fetcher
70
80
  */
71
- export declare function createMockFetcher(): MockFetcher;
81
+ export declare function createMockFetcher(config?: MockFetcherConfig): MockFetcher;
72
82
  //# sourceMappingURL=fetcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../src/cloudflare/fetcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE3E,qDAAqD;IACrD,MAAM,EAAE,aAAa,EAAE,CAAC;IAExB,mDAAmD;IACnD,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;IAErH,sCAAsC;IACtC,aAAa,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,KAAK,IAAI,CAAC;IAEpG,8CAA8C;IAC9C,MAAM,EAAE,MAAM,IAAI,CAAC;IAEnB,kDAAkD;IAClD,mBAAmB,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;CAC7F;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,IAAI,WAAW,CAiH/C"}
1
+ {"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../src/cloudflare/fetcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,wFAAwF;IACxF,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE3E,yFAAyF;IACzF,MAAM,EAAE,aAAa,EAAE,CAAC;IAExB,mDAAmD;IACnD,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;IAErH,sCAAsC;IACtC,aAAa,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,KAAK,IAAI,CAAC;IAEpG,8CAA8C;IAC9C,MAAM,EAAE,MAAM,IAAI,CAAC;IAEnB,kDAAkD;IAClD,mBAAmB,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;IAE5F,gEAAgE;IAChE,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAKD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,WAAW,CA+HzE"}
@@ -26,15 +26,18 @@
26
26
  * presetsApi._reset();
27
27
  * ```
28
28
  */
29
+ /** Default maximum call history size */
30
+ const DEFAULT_MAX_CALL_HISTORY = 1000;
29
31
  /**
30
32
  * Creates a mock Fetcher for testing Service Bindings
31
33
  *
32
34
  * The mock tracks all fetch calls and supports configuring
33
35
  * responses for specific URL patterns.
34
36
  *
37
+ * @param config - Optional configuration for the mock fetcher
35
38
  * @returns A mock Fetcher that can be cast to Fetcher
36
39
  */
37
- export function createMockFetcher() {
40
+ export function createMockFetcher(config) {
38
41
  const calls = [];
39
42
  const responses = new Map();
40
43
  let customHandler;
@@ -42,6 +45,7 @@ export function createMockFetcher() {
42
45
  status: 200,
43
46
  body: { success: true },
44
47
  };
48
+ let maxCallHistory = config?.maxCallHistory ?? DEFAULT_MAX_CALL_HISTORY;
45
49
  const createResponse = (config) => {
46
50
  const { status = 200, headers = {}, body } = config;
47
51
  const responseBody = body !== undefined ? JSON.stringify(body) : '';
@@ -89,7 +93,7 @@ export function createMockFetcher() {
89
93
  Object.assign(headers, init.headers);
90
94
  }
91
95
  }
92
- // Record the call
96
+ // Record the call (with memory limit enforcement)
93
97
  calls.push({
94
98
  url,
95
99
  method,
@@ -97,6 +101,10 @@ export function createMockFetcher() {
97
101
  body: init?.body?.toString(),
98
102
  timestamp: Date.now(),
99
103
  });
104
+ // Enforce max history limit (FIFO eviction) to prevent memory leaks
105
+ while (calls.length > maxCallHistory) {
106
+ calls.shift();
107
+ }
100
108
  // Use custom handler if provided
101
109
  if (customHandler) {
102
110
  return customHandler(url, init);
@@ -131,6 +139,13 @@ export function createMockFetcher() {
131
139
  body: response,
132
140
  };
133
141
  },
142
+ _setMaxCallHistory: (max) => {
143
+ maxCallHistory = max;
144
+ // Immediately enforce the new limit
145
+ while (calls.length > maxCallHistory) {
146
+ calls.shift();
147
+ }
148
+ },
134
149
  };
135
150
  }
136
151
  //# sourceMappingURL=fetcher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../../src/cloudflare/fetcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../../src/cloudflare/fetcher.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"kv.d.ts","sourceRoot":"","sources":["../../src/cloudflare/kv.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH;;GAEG;AACH,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,UAAU,YAAY;IACpB,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,GAAG,QAAQ,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC9G,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClI,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IAChG,eAAe,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC;QAAC,WAAW,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IAExH,4CAA4C;IAC5C,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE5B,sDAAsD;IACtD,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE3B,4BAA4B;IAC5B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEhC,wBAAwB;IACxB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,IAAI,eAAe,CAmH9C"}
1
+ {"version":3,"file":"kv.d.ts","sourceRoot":"","sources":["../../src/cloudflare/kv.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH;;GAEG;AACH,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,UAAU,YAAY;IACpB,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,GAAG,QAAQ,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC9G,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClI,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IAChG,eAAe,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC;QAAC,WAAW,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IAExH,4CAA4C;IAC5C,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE5B,sDAAsD;IACtD,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE3B,4BAA4B;IAC5B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEhC,wBAAwB;IACxB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,IAAI,eAAe,CA+I9C"}
@@ -37,20 +37,32 @@ export function createMockKV() {
37
37
  const ttls = new Map();
38
38
  const metadata = new Map();
39
39
  /**
40
- * Check if a key has expired
40
+ * Check if a key has expired using a snapshot timestamp
41
+ * This prevents race conditions when time advances during async operations
42
+ *
43
+ * @param key - The key to check
44
+ * @param nowSeconds - Snapshot of current time in seconds (use Date.now() / 1000)
41
45
  */
42
- const isExpired = (key) => {
46
+ const isExpiredAt = (key, nowSeconds) => {
43
47
  const expiration = ttls.get(key);
44
48
  if (expiration === undefined)
45
49
  return false;
46
- return Date.now() > expiration * 1000; // TTL is in seconds, convert to ms
50
+ return nowSeconds > expiration;
51
+ };
52
+ /**
53
+ * Clean up an expired key from all stores
54
+ */
55
+ const cleanupKey = (key) => {
56
+ store.delete(key);
57
+ ttls.delete(key);
58
+ metadata.delete(key);
47
59
  };
48
60
  return {
49
61
  get: async (key, options) => {
50
- if (isExpired(key)) {
51
- store.delete(key);
52
- ttls.delete(key);
53
- metadata.delete(key);
62
+ // Capture timestamp once to prevent race conditions with mocked time
63
+ const nowSeconds = Date.now() / 1000;
64
+ if (isExpiredAt(key, nowSeconds)) {
65
+ cleanupKey(key);
54
66
  return null;
55
67
  }
56
68
  const value = store.get(key) ?? null;
@@ -91,21 +103,34 @@ export function createMockKV() {
91
103
  metadata.delete(key);
92
104
  },
93
105
  list: async (options) => {
106
+ // Capture timestamp once for consistent TTL checks across all keys
107
+ const nowSeconds = Date.now() / 1000;
94
108
  const keys = [];
95
109
  const prefix = options?.prefix ?? '';
96
110
  const limit = options?.limit ?? 1000;
111
+ const expiredKeys = [];
97
112
  for (const [key, _value] of store.entries()) {
98
- if (key.startsWith(prefix) && !isExpired(key)) {
99
- keys.push({
100
- name: key,
101
- expiration: ttls.get(key),
102
- metadata: metadata.get(key),
103
- });
104
- if (keys.length >= limit) {
105
- break;
113
+ if (key.startsWith(prefix)) {
114
+ if (isExpiredAt(key, nowSeconds)) {
115
+ // Collect expired keys for cleanup after iteration
116
+ expiredKeys.push(key);
117
+ }
118
+ else {
119
+ keys.push({
120
+ name: key,
121
+ expiration: ttls.get(key),
122
+ metadata: metadata.get(key),
123
+ });
124
+ if (keys.length >= limit) {
125
+ break;
126
+ }
106
127
  }
107
128
  }
108
129
  }
130
+ // Clean up expired keys after iteration to avoid modifying map during iteration
131
+ for (const key of expiredKeys) {
132
+ cleanupKey(key);
133
+ }
109
134
  return {
110
135
  keys,
111
136
  list_complete: keys.length < limit,
@@ -113,10 +138,10 @@ export function createMockKV() {
113
138
  };
114
139
  },
115
140
  getWithMetadata: async (key) => {
116
- if (isExpired(key)) {
117
- store.delete(key);
118
- ttls.delete(key);
119
- metadata.delete(key);
141
+ // Capture timestamp once to prevent race conditions with mocked time
142
+ const nowSeconds = Date.now() / 1000;
143
+ if (isExpiredAt(key, nowSeconds)) {
144
+ cleanupKey(key);
120
145
  return { value: null, metadata: null, cacheStatus: null };
121
146
  }
122
147
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"kv.js","sourceRoot":"","sources":["../../src/cloudflare/kv.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kv.js","sourceRoot":"","sources":["../../src/cloudflare/kv.ts"],"names":[],"mappings":"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"}
@@ -1,42 +1,7 @@
1
1
  /**
2
2
  * Cryptographic utilities for test helpers
3
3
  *
4
- * Provides Base64URL encoding for JWT creation and other crypto operations.
4
+ * REFACTOR-001: Re-exports from @xivdyetools/crypto to consolidate implementations
5
5
  */
6
- /**
7
- * Encode a string to Base64URL format (RFC 4648)
8
- * Used for JWT header and payload encoding
9
- *
10
- * @param str - The string to encode
11
- * @returns Base64URL encoded string
12
- */
13
- export declare function base64UrlEncode(str: string): string;
14
- /**
15
- * Encode bytes to Base64URL format
16
- *
17
- * @param bytes - The bytes to encode
18
- * @returns Base64URL encoded string
19
- */
20
- export declare function base64UrlEncodeBytes(bytes: Uint8Array): string;
21
- /**
22
- * Decode a Base64URL string
23
- *
24
- * @param str - The Base64URL string to decode
25
- * @returns Decoded string
26
- */
27
- export declare function base64UrlDecode(str: string): string;
28
- /**
29
- * Convert a hex string to Uint8Array
30
- *
31
- * @param hex - The hex string
32
- * @returns Uint8Array of bytes
33
- */
34
- export declare function hexToBytes(hex: string): Uint8Array;
35
- /**
36
- * Convert Uint8Array to hex string
37
- *
38
- * @param bytes - The bytes to convert
39
- * @returns Hex string
40
- */
41
- export declare function bytesToHex(bytes: Uint8Array): string;
6
+ export { base64UrlEncode, base64UrlEncodeBytes, base64UrlDecode, base64UrlDecodeBytes, hexToBytes, bytesToHex, } from '@xivdyetools/crypto';
42
7
  //# sourceMappingURL=crypto.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/utils/crypto.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAOnD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAM9D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAOnD;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAMlD;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAIpD"}
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/utils/crypto.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,oBAAoB,EACpB,UAAU,EACV,UAAU,GACX,MAAM,qBAAqB,CAAC"}
@@ -1,72 +1,7 @@
1
1
  /**
2
2
  * Cryptographic utilities for test helpers
3
3
  *
4
- * Provides Base64URL encoding for JWT creation and other crypto operations.
4
+ * REFACTOR-001: Re-exports from @xivdyetools/crypto to consolidate implementations
5
5
  */
6
- /**
7
- * Encode a string to Base64URL format (RFC 4648)
8
- * Used for JWT header and payload encoding
9
- *
10
- * @param str - The string to encode
11
- * @returns Base64URL encoded string
12
- */
13
- export function base64UrlEncode(str) {
14
- const bytes = new TextEncoder().encode(str);
15
- let binary = '';
16
- for (let i = 0; i < bytes.length; i++) {
17
- binary += String.fromCharCode(bytes[i]);
18
- }
19
- return btoa(binary).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
20
- }
21
- /**
22
- * Encode bytes to Base64URL format
23
- *
24
- * @param bytes - The bytes to encode
25
- * @returns Base64URL encoded string
26
- */
27
- export function base64UrlEncodeBytes(bytes) {
28
- let binary = '';
29
- for (let i = 0; i < bytes.length; i++) {
30
- binary += String.fromCharCode(bytes[i]);
31
- }
32
- return btoa(binary).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
33
- }
34
- /**
35
- * Decode a Base64URL string
36
- *
37
- * @param str - The Base64URL string to decode
38
- * @returns Decoded string
39
- */
40
- export function base64UrlDecode(str) {
41
- // Add padding if needed
42
- let base64 = str.replace(/-/g, '+').replace(/_/g, '/');
43
- while (base64.length % 4) {
44
- base64 += '=';
45
- }
46
- return atob(base64);
47
- }
48
- /**
49
- * Convert a hex string to Uint8Array
50
- *
51
- * @param hex - The hex string
52
- * @returns Uint8Array of bytes
53
- */
54
- export function hexToBytes(hex) {
55
- const bytes = new Uint8Array(hex.length / 2);
56
- for (let i = 0; i < hex.length; i += 2) {
57
- bytes[i / 2] = parseInt(hex.substring(i, i + 2), 16);
58
- }
59
- return bytes;
60
- }
61
- /**
62
- * Convert Uint8Array to hex string
63
- *
64
- * @param bytes - The bytes to convert
65
- * @returns Hex string
66
- */
67
- export function bytesToHex(bytes) {
68
- return Array.from(bytes)
69
- .map((b) => b.toString(16).padStart(2, '0'))
70
- .join('');
71
- }
6
+ export { base64UrlEncode, base64UrlEncodeBytes, base64UrlDecode, base64UrlDecodeBytes, hexToBytes, bytesToHex, } from '@xivdyetools/crypto';
72
7
  //# sourceMappingURL=crypto.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/utils/crypto.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACjF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAiB;IACpD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACjF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,wBAAwB;IACxB,IAAI,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACvD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,CAAC;IAChB,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,KAAiB;IAC1C,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;SACrB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SAC3C,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/utils/crypto.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,oBAAoB,EACpB,UAAU,EACV,UAAU,GACX,MAAM,qBAAqB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xivdyetools/test-utils",
3
- "version": "1.0.3",
3
+ "version": "1.1.1",
4
4
  "description": "Shared testing utilities for the xivdyetools ecosystem",
5
5
  "author": "XIV Dye Tools",
6
6
  "license": "MIT",
@@ -60,13 +60,14 @@
60
60
  }
61
61
  },
62
62
  "dependencies": {
63
+ "@xivdyetools/crypto": "^1.0.0",
63
64
  "@xivdyetools/types": "^1.1.1"
64
65
  },
65
66
  "devDependencies": {
66
67
  "@cloudflare/workers-types": "^4.20241205.0",
67
68
  "@testing-library/dom": "^10.0.0",
68
69
  "@vitest/coverage-v8": "^4.0.15",
69
- "rimraf": "^5.0.5",
70
+ "rimraf": "^6.1.2",
70
71
  "typescript": "^5.9.3",
71
72
  "vitest": "^4.0.15"
72
73
  },
@@ -85,4 +86,4 @@
85
86
  "type": "git",
86
87
  "url": "https://github.com/xivdyetools/xivdyetools-test-utils.git"
87
88
  }
88
- }
89
+ }