@xivdyetools/test-utils 1.0.0 → 1.0.2
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/dist/cloudflare/d1.d.ts +55 -20
- package/dist/cloudflare/d1.d.ts.map +1 -1
- package/dist/cloudflare/d1.js +51 -3
- package/dist/cloudflare/d1.js.map +1 -1
- package/package.json +1 -1
package/dist/cloudflare/d1.d.ts
CHANGED
|
@@ -34,26 +34,26 @@ export type QueryMockFn = (query: string, bindings: unknown[]) => unknown;
|
|
|
34
34
|
/**
|
|
35
35
|
* Mock D1 prepared statement interface
|
|
36
36
|
*/
|
|
37
|
+
/**
|
|
38
|
+
* D1 result type - matches Cloudflare's D1Result<T>
|
|
39
|
+
*/
|
|
40
|
+
export interface D1Result<T = unknown> {
|
|
41
|
+
results: T[];
|
|
42
|
+
success: true;
|
|
43
|
+
meta: D1Meta;
|
|
44
|
+
}
|
|
37
45
|
export interface MockD1PreparedStatement {
|
|
38
46
|
bind: (...values: unknown[]) => MockD1PreparedStatement;
|
|
39
47
|
first: <T = unknown>() => Promise<T | null>;
|
|
40
|
-
all: <T = unknown>() => Promise<
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}>;
|
|
45
|
-
run: () => Promise<{
|
|
46
|
-
success: boolean;
|
|
47
|
-
meta: {
|
|
48
|
-
changes: number;
|
|
49
|
-
duration: number;
|
|
50
|
-
last_row_id: number;
|
|
51
|
-
};
|
|
52
|
-
}>;
|
|
53
|
-
raw: <T = unknown[]>() => Promise<T[]>;
|
|
48
|
+
all: <T = unknown>() => Promise<D1Result<T>>;
|
|
49
|
+
run: <T = unknown>() => Promise<D1Result<T>>;
|
|
50
|
+
raw: <T = unknown[]>(options?: {
|
|
51
|
+
columnNames?: boolean;
|
|
52
|
+
}) => Promise<T>;
|
|
54
53
|
}
|
|
55
54
|
/**
|
|
56
|
-
* D1 result metadata
|
|
55
|
+
* D1 result metadata - matches Cloudflare's D1Meta type
|
|
56
|
+
* Includes index signature to match Record<string, unknown> requirement
|
|
57
57
|
*/
|
|
58
58
|
interface D1Meta {
|
|
59
59
|
duration: number;
|
|
@@ -61,22 +61,37 @@ interface D1Meta {
|
|
|
61
61
|
last_row_id: number;
|
|
62
62
|
rows_read: number;
|
|
63
63
|
rows_written: number;
|
|
64
|
+
size_after: number;
|
|
65
|
+
changed_db: boolean;
|
|
66
|
+
[key: string]: unknown;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Mock D1 database session (returned by withSession)
|
|
70
|
+
* Mimics D1DatabaseSession which has similar methods to D1Database
|
|
71
|
+
*/
|
|
72
|
+
export interface MockD1DatabaseSession {
|
|
73
|
+
prepare: (query: string) => MockD1PreparedStatement;
|
|
74
|
+
batch: <T = unknown>(statements: MockD1PreparedStatement[]) => Promise<D1Result<T>[]>;
|
|
75
|
+
exec: (query: string) => Promise<{
|
|
76
|
+
count: number;
|
|
77
|
+
duration: number;
|
|
78
|
+
}>;
|
|
79
|
+
/** Get constraint string for this session */
|
|
80
|
+
getBookmark: () => string;
|
|
64
81
|
}
|
|
65
82
|
/**
|
|
66
83
|
* Extended mock D1 database with test helpers
|
|
67
84
|
*/
|
|
68
85
|
export interface MockD1Database {
|
|
69
86
|
prepare: (query: string) => MockD1PreparedStatement;
|
|
70
|
-
batch: <T = unknown>(statements: MockD1PreparedStatement[]) => Promise<
|
|
71
|
-
results: T[];
|
|
72
|
-
success: boolean;
|
|
73
|
-
meta: D1Meta;
|
|
74
|
-
}>>;
|
|
87
|
+
batch: <T = unknown>(statements: MockD1PreparedStatement[]) => Promise<D1Result<T>[]>;
|
|
75
88
|
exec: (query: string) => Promise<{
|
|
76
89
|
count: number;
|
|
77
90
|
duration: number;
|
|
78
91
|
}>;
|
|
79
92
|
dump: () => Promise<ArrayBuffer>;
|
|
93
|
+
/** Start a session - returns a session object with same query methods */
|
|
94
|
+
withSession: (constraintOrBookmark?: string) => MockD1DatabaseSession;
|
|
80
95
|
/** Array of all queries executed (for assertions) */
|
|
81
96
|
_queries: string[];
|
|
82
97
|
/** Array of all binding arrays passed to queries */
|
|
@@ -97,5 +112,25 @@ export interface MockD1Database {
|
|
|
97
112
|
* @returns A mock D1 database that can be cast to D1Database
|
|
98
113
|
*/
|
|
99
114
|
export declare function createMockD1Database(): MockD1Database;
|
|
115
|
+
/**
|
|
116
|
+
* Creates a mock D1 database pre-cast as D1Database
|
|
117
|
+
*
|
|
118
|
+
* Use this when you need to pass the mock to code expecting D1Database.
|
|
119
|
+
* The mock still supports all testing helpers via type assertion:
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* ```typescript
|
|
123
|
+
* const db = createMockD1();
|
|
124
|
+
* // Use as D1Database
|
|
125
|
+
* someFunction(db);
|
|
126
|
+
*
|
|
127
|
+
* // Access testing helpers via assertion
|
|
128
|
+
* (db as unknown as MockD1Database)._queries;
|
|
129
|
+
* (db as unknown as MockD1Database)._setupMock(...);
|
|
130
|
+
* ```
|
|
131
|
+
*
|
|
132
|
+
* @returns A D1Database-typed mock
|
|
133
|
+
*/
|
|
134
|
+
export declare function createMockD1(): D1Database;
|
|
100
135
|
export {};
|
|
101
136
|
//# sourceMappingURL=d1.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"d1.d.ts","sourceRoot":"","sources":["../../src/cloudflare/d1.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,uBAAuB,CAAC;IACxD,KAAK,EAAE,CAAC,CAAC,GAAG,OAAO,OAAO,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5C,GAAG,EAAE,CAAC,CAAC,GAAG,OAAO,OAAO,OAAO,CAAC
|
|
1
|
+
{"version":3,"file":"d1.d.ts","sourceRoot":"","sources":["../../src/cloudflare/d1.ts"],"names":[],"mappings":"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"}
|
package/dist/cloudflare/d1.js
CHANGED
|
@@ -45,6 +45,8 @@ export function createMockD1Database() {
|
|
|
45
45
|
last_row_id: 0,
|
|
46
46
|
rows_read: 0,
|
|
47
47
|
rows_written: 0,
|
|
48
|
+
size_after: 0,
|
|
49
|
+
changed_db: false,
|
|
48
50
|
});
|
|
49
51
|
const createStatement = (query) => {
|
|
50
52
|
let boundValues = [];
|
|
@@ -89,11 +91,12 @@ export function createMockD1Database() {
|
|
|
89
91
|
}
|
|
90
92
|
}
|
|
91
93
|
return {
|
|
94
|
+
results: [],
|
|
92
95
|
success: true,
|
|
93
|
-
meta: { changes: 1,
|
|
96
|
+
meta: { ...createDefaultMeta(), changes: 1, rows_written: 1, last_row_id: 1, changed_db: true },
|
|
94
97
|
};
|
|
95
98
|
},
|
|
96
|
-
raw: async () => {
|
|
99
|
+
raw: async (_options) => {
|
|
97
100
|
queries.push(query);
|
|
98
101
|
if (mockFn) {
|
|
99
102
|
const result = mockFn(query, boundValues);
|
|
@@ -112,7 +115,8 @@ export function createMockD1Database() {
|
|
|
112
115
|
};
|
|
113
116
|
return statement;
|
|
114
117
|
};
|
|
115
|
-
|
|
118
|
+
// Create the mock database object
|
|
119
|
+
const mockDb = {
|
|
116
120
|
prepare: createStatement,
|
|
117
121
|
batch: async (statements) => {
|
|
118
122
|
const results = [];
|
|
@@ -130,6 +134,27 @@ export function createMockD1Database() {
|
|
|
130
134
|
dump: async () => {
|
|
131
135
|
return new ArrayBuffer(0);
|
|
132
136
|
},
|
|
137
|
+
// withSession returns a session object with the same query methods
|
|
138
|
+
// In real D1, this creates a transaction-like session for consistency
|
|
139
|
+
withSession: (constraintOrBookmark) => {
|
|
140
|
+
// Return a session object that shares the same query tracking
|
|
141
|
+
return {
|
|
142
|
+
prepare: createStatement,
|
|
143
|
+
batch: async (statements) => {
|
|
144
|
+
const results = [];
|
|
145
|
+
for (const stmt of statements) {
|
|
146
|
+
await stmt.run();
|
|
147
|
+
results.push({ results: [], success: true, meta: createDefaultMeta() });
|
|
148
|
+
}
|
|
149
|
+
return results;
|
|
150
|
+
},
|
|
151
|
+
exec: async (query) => {
|
|
152
|
+
queries.push(query);
|
|
153
|
+
return { count: 1, duration: 0 };
|
|
154
|
+
},
|
|
155
|
+
getBookmark: () => constraintOrBookmark ?? 'mock-bookmark',
|
|
156
|
+
};
|
|
157
|
+
},
|
|
133
158
|
_queries: queries,
|
|
134
159
|
_bindings: bindings,
|
|
135
160
|
_setupMock: (fn) => {
|
|
@@ -144,5 +169,28 @@ export function createMockD1Database() {
|
|
|
144
169
|
return mockFn;
|
|
145
170
|
},
|
|
146
171
|
};
|
|
172
|
+
return mockDb;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Creates a mock D1 database pre-cast as D1Database
|
|
176
|
+
*
|
|
177
|
+
* Use this when you need to pass the mock to code expecting D1Database.
|
|
178
|
+
* The mock still supports all testing helpers via type assertion:
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* ```typescript
|
|
182
|
+
* const db = createMockD1();
|
|
183
|
+
* // Use as D1Database
|
|
184
|
+
* someFunction(db);
|
|
185
|
+
*
|
|
186
|
+
* // Access testing helpers via assertion
|
|
187
|
+
* (db as unknown as MockD1Database)._queries;
|
|
188
|
+
* (db as unknown as MockD1Database)._setupMock(...);
|
|
189
|
+
* ```
|
|
190
|
+
*
|
|
191
|
+
* @returns A D1Database-typed mock
|
|
192
|
+
*/
|
|
193
|
+
export function createMockD1() {
|
|
194
|
+
return createMockD1Database();
|
|
147
195
|
}
|
|
148
196
|
//# sourceMappingURL=d1.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"d1.js","sourceRoot":"","sources":["../../src/cloudflare/d1.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;
|
|
1
|
+
{"version":3,"file":"d1.js","sourceRoot":"","sources":["../../src/cloudflare/d1.ts"],"names":[],"mappings":"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"}
|