meocord 2.1.0 → 2.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/dist/cjs/testing/index.cjs +19 -62
- package/dist/esm/testing/mock-fn.js +19 -62
- package/package.json +1 -1
|
@@ -152,23 +152,16 @@ function isValueProvider(p) {
|
|
|
152
152
|
* fn(2) // → 99
|
|
153
153
|
* fn.mock.calls // → [[2], [2]]
|
|
154
154
|
*/ function createMockFn(impl) {
|
|
155
|
+
// One persistent implementation and one queue of single-use ones, which is how
|
|
156
|
+
// jest and vitest model this. mockReturnValue, mockResolvedValue,
|
|
157
|
+
// mockRejectedValue and mockImplementation all write the same slot, so the last
|
|
158
|
+
// call wins; the four `*Once` variants all push onto the same queue, so they are
|
|
159
|
+
// consumed in the order they were declared regardless of which kind they are.
|
|
160
|
+
// Keeping a slot per kind instead gave a fixed precedence, where a stored
|
|
161
|
+
// resolved value beat a later mockRejectedValue and the override was silently
|
|
162
|
+
// dropped.
|
|
155
163
|
let currentImpl = impl;
|
|
156
|
-
let
|
|
157
|
-
let returnValue = {
|
|
158
|
-
set: false,
|
|
159
|
-
value: undefined
|
|
160
|
-
};
|
|
161
|
-
let resolvedOnce = [];
|
|
162
|
-
let resolvedValue = {
|
|
163
|
-
set: false,
|
|
164
|
-
value: undefined
|
|
165
|
-
};
|
|
166
|
-
let rejectedOnce = [];
|
|
167
|
-
let rejectedValue = {
|
|
168
|
-
set: false,
|
|
169
|
-
value: undefined
|
|
170
|
-
};
|
|
171
|
-
const implOnce = [];
|
|
164
|
+
let onceQueue = [];
|
|
172
165
|
let name = 'vi.fn';
|
|
173
166
|
const calls = [];
|
|
174
167
|
const results = [];
|
|
@@ -179,20 +172,8 @@ function isValueProvider(p) {
|
|
|
179
172
|
let type = 'return';
|
|
180
173
|
let value;
|
|
181
174
|
try {
|
|
182
|
-
if (
|
|
183
|
-
value =
|
|
184
|
-
} else if (returnOnce.length > 0) {
|
|
185
|
-
value = returnOnce.shift();
|
|
186
|
-
} else if (returnValue.set) {
|
|
187
|
-
value = returnValue.value;
|
|
188
|
-
} else if (resolvedOnce.length > 0) {
|
|
189
|
-
value = Promise.resolve(resolvedOnce.shift());
|
|
190
|
-
} else if (resolvedValue.set) {
|
|
191
|
-
value = Promise.resolve(resolvedValue.value);
|
|
192
|
-
} else if (rejectedOnce.length > 0) {
|
|
193
|
-
value = Promise.reject(rejectedOnce.shift());
|
|
194
|
-
} else if (rejectedValue.set) {
|
|
195
|
-
value = Promise.reject(rejectedValue.value);
|
|
175
|
+
if (onceQueue.length > 0) {
|
|
176
|
+
value = onceQueue.shift().apply(this, args);
|
|
196
177
|
} else if (currentImpl !== undefined) {
|
|
197
178
|
value = currentImpl.apply(this, args);
|
|
198
179
|
} else {
|
|
@@ -234,36 +215,27 @@ function isValueProvider(p) {
|
|
|
234
215
|
enumerable: false
|
|
235
216
|
});
|
|
236
217
|
mockFn.mockReturnValue = (v)=>{
|
|
237
|
-
|
|
238
|
-
set: true,
|
|
239
|
-
value: v
|
|
240
|
-
};
|
|
218
|
+
currentImpl = ()=>v;
|
|
241
219
|
return mockFn;
|
|
242
220
|
};
|
|
243
221
|
mockFn.mockReturnValueOnce = (v)=>{
|
|
244
|
-
|
|
222
|
+
onceQueue.push(()=>v);
|
|
245
223
|
return mockFn;
|
|
246
224
|
};
|
|
247
225
|
mockFn.mockResolvedValue = (v)=>{
|
|
248
|
-
|
|
249
|
-
set: true,
|
|
250
|
-
value: v
|
|
251
|
-
};
|
|
226
|
+
currentImpl = ()=>Promise.resolve(v);
|
|
252
227
|
return mockFn;
|
|
253
228
|
};
|
|
254
229
|
mockFn.mockResolvedValueOnce = (v)=>{
|
|
255
|
-
|
|
230
|
+
onceQueue.push(()=>Promise.resolve(v));
|
|
256
231
|
return mockFn;
|
|
257
232
|
};
|
|
258
233
|
mockFn.mockRejectedValue = (v)=>{
|
|
259
|
-
|
|
260
|
-
set: true,
|
|
261
|
-
value: v
|
|
262
|
-
};
|
|
234
|
+
currentImpl = ()=>Promise.reject(v);
|
|
263
235
|
return mockFn;
|
|
264
236
|
};
|
|
265
237
|
mockFn.mockRejectedValueOnce = (v)=>{
|
|
266
|
-
|
|
238
|
+
onceQueue.push(()=>Promise.reject(v));
|
|
267
239
|
return mockFn;
|
|
268
240
|
};
|
|
269
241
|
mockFn.mockImplementation = (fn)=>{
|
|
@@ -271,7 +243,7 @@ function isValueProvider(p) {
|
|
|
271
243
|
return mockFn;
|
|
272
244
|
};
|
|
273
245
|
mockFn.mockImplementationOnce = (fn)=>{
|
|
274
|
-
|
|
246
|
+
onceQueue.push(fn);
|
|
275
247
|
return mockFn;
|
|
276
248
|
};
|
|
277
249
|
mockFn.mockClear = ()=>{
|
|
@@ -284,22 +256,7 @@ function isValueProvider(p) {
|
|
|
284
256
|
calls.length = 0;
|
|
285
257
|
results.length = 0;
|
|
286
258
|
instances.length = 0;
|
|
287
|
-
|
|
288
|
-
returnValue = {
|
|
289
|
-
set: false,
|
|
290
|
-
value: undefined
|
|
291
|
-
};
|
|
292
|
-
resolvedOnce = [];
|
|
293
|
-
resolvedValue = {
|
|
294
|
-
set: false,
|
|
295
|
-
value: undefined
|
|
296
|
-
};
|
|
297
|
-
rejectedOnce = [];
|
|
298
|
-
rejectedValue = {
|
|
299
|
-
set: false,
|
|
300
|
-
value: undefined
|
|
301
|
-
};
|
|
302
|
-
implOnce.length = 0;
|
|
259
|
+
onceQueue = [];
|
|
303
260
|
currentImpl = impl;
|
|
304
261
|
return mockFn;
|
|
305
262
|
};
|
|
@@ -30,23 +30,16 @@
|
|
|
30
30
|
* fn(2) // → 99
|
|
31
31
|
* fn.mock.calls // → [[2], [2]]
|
|
32
32
|
*/ function createMockFn(impl) {
|
|
33
|
+
// One persistent implementation and one queue of single-use ones, which is how
|
|
34
|
+
// jest and vitest model this. mockReturnValue, mockResolvedValue,
|
|
35
|
+
// mockRejectedValue and mockImplementation all write the same slot, so the last
|
|
36
|
+
// call wins; the four `*Once` variants all push onto the same queue, so they are
|
|
37
|
+
// consumed in the order they were declared regardless of which kind they are.
|
|
38
|
+
// Keeping a slot per kind instead gave a fixed precedence, where a stored
|
|
39
|
+
// resolved value beat a later mockRejectedValue and the override was silently
|
|
40
|
+
// dropped.
|
|
33
41
|
let currentImpl = impl;
|
|
34
|
-
let
|
|
35
|
-
let returnValue = {
|
|
36
|
-
set: false,
|
|
37
|
-
value: undefined
|
|
38
|
-
};
|
|
39
|
-
let resolvedOnce = [];
|
|
40
|
-
let resolvedValue = {
|
|
41
|
-
set: false,
|
|
42
|
-
value: undefined
|
|
43
|
-
};
|
|
44
|
-
let rejectedOnce = [];
|
|
45
|
-
let rejectedValue = {
|
|
46
|
-
set: false,
|
|
47
|
-
value: undefined
|
|
48
|
-
};
|
|
49
|
-
const implOnce = [];
|
|
42
|
+
let onceQueue = [];
|
|
50
43
|
let name = 'vi.fn';
|
|
51
44
|
const calls = [];
|
|
52
45
|
const results = [];
|
|
@@ -57,20 +50,8 @@
|
|
|
57
50
|
let type = 'return';
|
|
58
51
|
let value;
|
|
59
52
|
try {
|
|
60
|
-
if (
|
|
61
|
-
value =
|
|
62
|
-
} else if (returnOnce.length > 0) {
|
|
63
|
-
value = returnOnce.shift();
|
|
64
|
-
} else if (returnValue.set) {
|
|
65
|
-
value = returnValue.value;
|
|
66
|
-
} else if (resolvedOnce.length > 0) {
|
|
67
|
-
value = Promise.resolve(resolvedOnce.shift());
|
|
68
|
-
} else if (resolvedValue.set) {
|
|
69
|
-
value = Promise.resolve(resolvedValue.value);
|
|
70
|
-
} else if (rejectedOnce.length > 0) {
|
|
71
|
-
value = Promise.reject(rejectedOnce.shift());
|
|
72
|
-
} else if (rejectedValue.set) {
|
|
73
|
-
value = Promise.reject(rejectedValue.value);
|
|
53
|
+
if (onceQueue.length > 0) {
|
|
54
|
+
value = onceQueue.shift().apply(this, args);
|
|
74
55
|
} else if (currentImpl !== undefined) {
|
|
75
56
|
value = currentImpl.apply(this, args);
|
|
76
57
|
} else {
|
|
@@ -112,36 +93,27 @@
|
|
|
112
93
|
enumerable: false
|
|
113
94
|
});
|
|
114
95
|
mockFn.mockReturnValue = (v)=>{
|
|
115
|
-
|
|
116
|
-
set: true,
|
|
117
|
-
value: v
|
|
118
|
-
};
|
|
96
|
+
currentImpl = ()=>v;
|
|
119
97
|
return mockFn;
|
|
120
98
|
};
|
|
121
99
|
mockFn.mockReturnValueOnce = (v)=>{
|
|
122
|
-
|
|
100
|
+
onceQueue.push(()=>v);
|
|
123
101
|
return mockFn;
|
|
124
102
|
};
|
|
125
103
|
mockFn.mockResolvedValue = (v)=>{
|
|
126
|
-
|
|
127
|
-
set: true,
|
|
128
|
-
value: v
|
|
129
|
-
};
|
|
104
|
+
currentImpl = ()=>Promise.resolve(v);
|
|
130
105
|
return mockFn;
|
|
131
106
|
};
|
|
132
107
|
mockFn.mockResolvedValueOnce = (v)=>{
|
|
133
|
-
|
|
108
|
+
onceQueue.push(()=>Promise.resolve(v));
|
|
134
109
|
return mockFn;
|
|
135
110
|
};
|
|
136
111
|
mockFn.mockRejectedValue = (v)=>{
|
|
137
|
-
|
|
138
|
-
set: true,
|
|
139
|
-
value: v
|
|
140
|
-
};
|
|
112
|
+
currentImpl = ()=>Promise.reject(v);
|
|
141
113
|
return mockFn;
|
|
142
114
|
};
|
|
143
115
|
mockFn.mockRejectedValueOnce = (v)=>{
|
|
144
|
-
|
|
116
|
+
onceQueue.push(()=>Promise.reject(v));
|
|
145
117
|
return mockFn;
|
|
146
118
|
};
|
|
147
119
|
mockFn.mockImplementation = (fn)=>{
|
|
@@ -149,7 +121,7 @@
|
|
|
149
121
|
return mockFn;
|
|
150
122
|
};
|
|
151
123
|
mockFn.mockImplementationOnce = (fn)=>{
|
|
152
|
-
|
|
124
|
+
onceQueue.push(fn);
|
|
153
125
|
return mockFn;
|
|
154
126
|
};
|
|
155
127
|
mockFn.mockClear = ()=>{
|
|
@@ -162,22 +134,7 @@
|
|
|
162
134
|
calls.length = 0;
|
|
163
135
|
results.length = 0;
|
|
164
136
|
instances.length = 0;
|
|
165
|
-
|
|
166
|
-
returnValue = {
|
|
167
|
-
set: false,
|
|
168
|
-
value: undefined
|
|
169
|
-
};
|
|
170
|
-
resolvedOnce = [];
|
|
171
|
-
resolvedValue = {
|
|
172
|
-
set: false,
|
|
173
|
-
value: undefined
|
|
174
|
-
};
|
|
175
|
-
rejectedOnce = [];
|
|
176
|
-
rejectedValue = {
|
|
177
|
-
set: false,
|
|
178
|
-
value: undefined
|
|
179
|
-
};
|
|
180
|
-
implOnce.length = 0;
|
|
137
|
+
onceQueue = [];
|
|
181
138
|
currentImpl = impl;
|
|
182
139
|
return mockFn;
|
|
183
140
|
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "meocord",
|
|
3
3
|
"description": "Decorator-based Discord bot framework built on discord.js. Brings NestJS-style controllers, dependency injection, guards, and testing utilities to bot development — with a full CLI and TypeScript-first design.",
|
|
4
|
-
"version": "2.1.
|
|
4
|
+
"version": "2.1.1",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
7
7
|
"node": ">=22"
|