@constantant/openapi-resource-mocks 0.1.1 → 0.2.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/CHANGELOG.md +33 -1
- package/README.md +209 -27
- package/package.json +1 -1
- package/src/index.d.ts +2 -0
- package/src/index.js.map +1 -1
- package/src/lib/mock-resource-bus.d.ts +1 -0
- package/src/lib/mock-resource-bus.js +1 -0
- package/src/lib/mock-resource-bus.js.map +1 -1
- package/src/lib/mock-resource-ref.js +2 -1
- package/src/lib/mock-resource-ref.js.map +1 -1
- package/src/lib/provide-mock-resource.d.ts +13 -2
- package/src/lib/provide-mock-resource.js +25 -3
- package/src/lib/provide-mock-resource.js.map +1 -1
- package/src/lib/token-value.d.ts +3 -0
- package/src/lib/token-value.js +3 -0
- package/src/lib/token-value.js.map +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,36 @@
|
|
|
1
|
+
## 0.2.0 (2026-06-09)
|
|
2
|
+
|
|
3
|
+
### 🚀 Features
|
|
4
|
+
|
|
5
|
+
- **openapi-resource-gen:** add includeMocks option to co-generate .mock.ts files ([8ebddd4](https://github.com/constantant/angular-openapi-gen/commit/8ebddd4))
|
|
6
|
+
- **openapi-resource-mocks:** expose openApiMock(key) window shorthand via MockResourceBus ([32cd5b5](https://github.com/constantant/angular-openapi-gen/commit/32cd5b5))
|
|
7
|
+
- **openapi-resource-mocks:** resolve reactive lambda args in _notifyRequest ([bf5c9af](https://github.com/constantant/angular-openapi-gen/commit/bf5c9af))
|
|
8
|
+
- **openapi-resource-mocks:** add optional delay to provideMockResource initial behavior ([e829d1e](https://github.com/constantant/angular-openapi-gen/commit/e829d1e))
|
|
9
|
+
- **openapi-resource-mocks:** export TokenValue utility type for typed mock seed data ([fafe3f3](https://github.com/constantant/angular-openapi-gen/commit/fafe3f3))
|
|
10
|
+
|
|
11
|
+
### 🩹 Fixes
|
|
12
|
+
|
|
13
|
+
- **openapi-resource-gen:** auto-register /mock path alias and fix app.config.mock.ts imports ([c65e6a6](https://github.com/constantant/angular-openapi-gen/commit/c65e6a6))
|
|
14
|
+
|
|
15
|
+
### 💅 Refactors
|
|
16
|
+
|
|
17
|
+
- **openapi-resource-mocks:** create mock ref per call in provideMockResource ([5b9c9d7](https://github.com/constantant/angular-openapi-gen/commit/5b9c9d7))
|
|
18
|
+
- **openapi-resource-mocks:** accept DeepPartial seed data in provideMockResource ([245c109](https://github.com/constantant/angular-openapi-gen/commit/245c109))
|
|
19
|
+
|
|
20
|
+
### 📖 Documentation
|
|
21
|
+
|
|
22
|
+
- **openapi-resource-mocks:** document Playwright E2E setup and mock control patterns ([aa638ca](https://github.com/constantant/angular-openapi-gen/commit/aa638ca))
|
|
23
|
+
- **openapi-resource-mocks:** align README with per-call ref creation ([2e50dc3](https://github.com/constantant/angular-openapi-gen/commit/2e50dc3))
|
|
24
|
+
|
|
25
|
+
### 🏡 Chore
|
|
26
|
+
|
|
27
|
+
- **openapi-resource-mocks:** remove stale Changelog heading left by initial setup ([281ae62](https://github.com/constantant/angular-openapi-gen/commit/281ae62))
|
|
28
|
+
|
|
29
|
+
### ❤️ Thank You
|
|
30
|
+
|
|
31
|
+
- Claude Sonnet 4.6
|
|
32
|
+
- kk
|
|
33
|
+
|
|
1
34
|
## 0.1.1 (2026-06-08)
|
|
2
35
|
|
|
3
36
|
### 🩹 Fixes
|
|
@@ -9,4 +42,3 @@
|
|
|
9
42
|
- Claude Sonnet 4.6
|
|
10
43
|
- kk
|
|
11
44
|
|
|
12
|
-
# Changelog
|
package/README.md
CHANGED
|
@@ -28,10 +28,26 @@ Each mock token is registered in a `MockResourceBus`. The bus:
|
|
|
28
28
|
|
|
29
29
|
## Setup
|
|
30
30
|
|
|
31
|
-
Add `provideMockResourceBus()` once, then one
|
|
31
|
+
Add `provideMockResourceBus()` once, then one mock provider per token.
|
|
32
|
+
|
|
33
|
+
**With `--includeMocks` (recommended)** — the generator emits a typed `provide{Operation}Mock()` wrapper per endpoint. Import from the `/mock` subpath so mock utilities stay out of your production bundle:
|
|
32
34
|
|
|
33
35
|
```typescript
|
|
34
36
|
// app.config.mock.ts (used in tests / E2E variant)
|
|
37
|
+
import { provideMockResourceBus } from '@constantant/openapi-resource-mocks';
|
|
38
|
+
import { provideFindPetsByStatusMock, provideUploadFileMock } from '@myapp/petstore-data-access/mock';
|
|
39
|
+
|
|
40
|
+
export const mockProviders = [
|
|
41
|
+
provideMockResourceBus(),
|
|
42
|
+
provideFindPetsByStatusMock(),
|
|
43
|
+
provideUploadFileMock(),
|
|
44
|
+
];
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Without `--includeMocks`** — use `provideMockResource()` directly with the raw token:
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
// app.config.mock.ts
|
|
35
51
|
import { provideMockResourceBus, provideMockResource } from '@constantant/openapi-resource-mocks';
|
|
36
52
|
import { FIND_PETS_BY_STATUS, UPLOAD_FILE } from '@myapp/petstore-data-access';
|
|
37
53
|
|
|
@@ -49,21 +65,27 @@ export const mockProviders = [
|
|
|
49
65
|
```typescript
|
|
50
66
|
import { TestBed } from '@angular/core/testing';
|
|
51
67
|
import { injectMockResource, provideMockResourceBus, provideMockResource } from '@constantant/openapi-resource-mocks';
|
|
52
|
-
import type { FindPetsByStatusResponse } from '@myapp/petstore-data-access';
|
|
53
68
|
|
|
54
69
|
TestBed.configureTestingModule({
|
|
70
|
+
imports: [PetsComponent],
|
|
55
71
|
providers: [
|
|
56
72
|
provideMockResourceBus(),
|
|
57
73
|
provideMockResource(FIND_PETS_BY_STATUS, 'FIND_PETS_BY_STATUS'),
|
|
58
74
|
],
|
|
59
75
|
});
|
|
60
76
|
|
|
77
|
+
// Render the component first — this calls the token factory and registers the ref
|
|
78
|
+
const fixture = TestBed.createComponent(PetsComponent);
|
|
79
|
+
fixture.detectChanges();
|
|
80
|
+
|
|
81
|
+
// Now the ref is in the bus
|
|
61
82
|
const mock = TestBed.runInInjectionContext(() =>
|
|
62
|
-
injectMockResource
|
|
83
|
+
injectMockResource('FIND_PETS_BY_STATUS'),
|
|
63
84
|
);
|
|
64
85
|
|
|
65
|
-
// Preset states
|
|
66
86
|
mock.resolve([{ id: 1, name: 'Rex', status: 'available' }]);
|
|
87
|
+
fixture.detectChanges();
|
|
88
|
+
|
|
67
89
|
mock.setLoading();
|
|
68
90
|
mock.fail(new Error('network'));
|
|
69
91
|
mock.reset();
|
|
@@ -107,19 +129,19 @@ console.log(mock.progress()); // { type: 'upload', loaded: 1_000_000, total: 4_0
|
|
|
107
129
|
```typescript
|
|
108
130
|
// Animate upload progress then resolve
|
|
109
131
|
await page.evaluate(() =>
|
|
110
|
-
|
|
132
|
+
openApiMock('UPLOAD_FILE').simulateProgress('upload', 4_000_000, 2000, { id: 'abc123' }),
|
|
111
133
|
);
|
|
112
134
|
await expect(page.locator('[data-testid="progress-bar"]')).toBeVisible();
|
|
113
135
|
|
|
114
136
|
// Manual steps
|
|
115
137
|
await page.evaluate(() =>
|
|
116
|
-
|
|
138
|
+
openApiMock('UPLOAD_FILE').setProgress('upload', 1_000_000, 4_000_000),
|
|
117
139
|
);
|
|
118
140
|
await expect(page.locator('[data-testid="progress-bar"]')).toHaveAttribute('aria-valuenow', '25');
|
|
119
141
|
|
|
120
142
|
// Fail mid-upload
|
|
121
|
-
await page.evaluate(() =>
|
|
122
|
-
const state = await page.evaluate(() =>
|
|
143
|
+
await page.evaluate(() => openApiMock('UPLOAD_FILE').fail(new Error('timeout')));
|
|
144
|
+
const state = await page.evaluate(() => openApiMock('UPLOAD_FILE').getState());
|
|
123
145
|
console.log(state.progress); // { type: 'upload', loaded: 1_000_000, total: 4_000_000 }
|
|
124
146
|
```
|
|
125
147
|
|
|
@@ -149,33 +171,145 @@ document.dispatchEvent(new CustomEvent('openapi-mock-control', {
|
|
|
149
171
|
|
|
150
172
|
## E2E tests (Playwright)
|
|
151
173
|
|
|
174
|
+
### Setup
|
|
175
|
+
|
|
176
|
+
Serve the app with mock providers on a separate port so real and mock E2E suites never collide.
|
|
177
|
+
|
|
178
|
+
**1. Mock app configuration** — swap the real providers for mock ones:
|
|
179
|
+
|
|
180
|
+
```typescript
|
|
181
|
+
// app.config.mock.ts
|
|
182
|
+
import { ApplicationConfig } from '@angular/core';
|
|
183
|
+
import { provideRouter } from '@angular/router';
|
|
184
|
+
import { provideMockResourceBus } from '@constantant/openapi-resource-mocks';
|
|
185
|
+
import { provideFindPetsByStatusMock } from '@myapp/petstore-data-access/mock';
|
|
186
|
+
import { appRoutes } from './app.routes';
|
|
187
|
+
|
|
188
|
+
export const appConfig: ApplicationConfig = {
|
|
189
|
+
providers: [
|
|
190
|
+
provideRouter(appRoutes),
|
|
191
|
+
provideMockResourceBus(),
|
|
192
|
+
provideFindPetsByStatusMock({
|
|
193
|
+
value: [{ id: 1, name: 'Rex', status: 'available', photoUrls: [] }],
|
|
194
|
+
delay: 500,
|
|
195
|
+
}),
|
|
196
|
+
],
|
|
197
|
+
};
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
If you didn't use `--includeMocks`, replace the wrapper with `provideMockResource(FIND_PETS_BY_STATUS, 'FIND_PETS_BY_STATUS', { ... })` imported from `@constantant/openapi-resource-mocks`.
|
|
201
|
+
|
|
202
|
+
**2. Separate Playwright config** — points to port 4201 and scopes `testDir` to the mock specs folder:
|
|
203
|
+
|
|
204
|
+
```typescript
|
|
205
|
+
// playwright.mock.config.ts
|
|
206
|
+
import { defineConfig, devices } from '@playwright/test';
|
|
207
|
+
import { nxE2EPreset } from '@nx/playwright/preset';
|
|
208
|
+
import { workspaceRoot } from '@nx/devkit';
|
|
209
|
+
|
|
210
|
+
export default defineConfig({
|
|
211
|
+
...nxE2EPreset(__filename, { testDir: './src/mock' }),
|
|
212
|
+
use: {
|
|
213
|
+
baseURL: 'http://localhost:4201',
|
|
214
|
+
trace: 'on-first-retry',
|
|
215
|
+
},
|
|
216
|
+
webServer: {
|
|
217
|
+
command: 'npx nx run myapp:serve --configuration=mock-e2e',
|
|
218
|
+
url: 'http://localhost:4201',
|
|
219
|
+
reuseExistingServer: true,
|
|
220
|
+
cwd: workspaceRoot,
|
|
221
|
+
},
|
|
222
|
+
projects: [{ name: 'chromium', use: { ...devices['Desktop Chrome'] } }],
|
|
223
|
+
});
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
**3. Exclude mock specs from the main config** — prevents mock specs from running against the real app:
|
|
227
|
+
|
|
228
|
+
```typescript
|
|
229
|
+
// playwright.config.ts (existing main config)
|
|
230
|
+
export default defineConfig({
|
|
231
|
+
...nxE2EPreset(__filename, { testDir: './src' }),
|
|
232
|
+
testIgnore: ['**/mock/**'],
|
|
233
|
+
// ...
|
|
234
|
+
});
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
**4. TypeScript ambient declarations** — required for `openApiMock(key)` to typecheck inside `page.evaluate()` function bodies:
|
|
238
|
+
|
|
239
|
+
```typescript
|
|
240
|
+
// src/global.d.ts
|
|
241
|
+
interface MockEntry {
|
|
242
|
+
resolve(value: unknown): void;
|
|
243
|
+
resolveAfter(ms: number, value: unknown): void;
|
|
244
|
+
setLoading(): void;
|
|
245
|
+
fail(error: unknown): void;
|
|
246
|
+
reset(): void;
|
|
247
|
+
getState(): { status: string; value: unknown; error: unknown; progress: unknown };
|
|
248
|
+
getHistory(): Array<{ type: string; args: unknown[]; ts: number }>;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
interface Window {
|
|
252
|
+
__openApiMocks__: Record<string, MockEntry>;
|
|
253
|
+
openApiMock: (key: string) => MockEntry;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// Needed for unqualified openApiMock('KEY') calls inside page.evaluate(() => ...)
|
|
257
|
+
declare function openApiMock(key: string): MockEntry;
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
Also add `"types": ["node"]` to `tsconfig.json` if you use `__filename` in the Playwright config.
|
|
261
|
+
|
|
262
|
+
### Writing specs
|
|
263
|
+
|
|
264
|
+
Always wait for a page landmark in `beforeEach` before running assertions — this guarantees Angular has bootstrapped and the mock factories have been called:
|
|
265
|
+
|
|
266
|
+
```typescript
|
|
267
|
+
test.beforeEach(async ({ page }) => {
|
|
268
|
+
await page.goto('/pets');
|
|
269
|
+
await expect(page.getByRole('heading', { name: 'Pets' })).toBeVisible();
|
|
270
|
+
});
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
Without this guard, assertions like `toBeHidden()` and `toHaveCount(0)` can pass immediately (before any elements render), and subsequent `page.evaluate()` calls will throw `openApiMock is not defined`.
|
|
274
|
+
|
|
275
|
+
### Controlling state
|
|
276
|
+
|
|
152
277
|
```typescript
|
|
153
278
|
// Resolve with data
|
|
154
279
|
await page.evaluate(() =>
|
|
155
|
-
|
|
156
|
-
{ id: 1, name: 'Rex', status: 'available' },
|
|
157
|
-
]),
|
|
280
|
+
openApiMock('FIND_PETS_BY_STATUS').resolve([{ id: 1, name: 'Rex', status: 'available' }]),
|
|
158
281
|
);
|
|
159
282
|
await expect(page.locator('mat-row')).toHaveCount(1);
|
|
160
283
|
|
|
161
284
|
// Test loading skeleton
|
|
162
|
-
await page.evaluate(() =>
|
|
285
|
+
await page.evaluate(() => openApiMock('FIND_PETS_BY_STATUS').setLoading());
|
|
163
286
|
await expect(page.locator('mat-progress-bar')).toBeVisible();
|
|
164
287
|
|
|
165
288
|
// Simulate slow network
|
|
166
|
-
await page.evaluate(() =>
|
|
167
|
-
window.__openApiMocks__['FIND_PETS_BY_STATUS'].resolveAfter(1000, []),
|
|
168
|
-
);
|
|
289
|
+
await page.evaluate(() => openApiMock('FIND_PETS_BY_STATUS').resolveAfter(1000, []));
|
|
169
290
|
|
|
170
291
|
// Inspect current state (includes progress if active)
|
|
171
|
-
const state = await page.evaluate(() =>
|
|
172
|
-
window.__openApiMocks__['FIND_PETS_BY_STATUS'].getState(),
|
|
173
|
-
);
|
|
292
|
+
const state = await page.evaluate(() => openApiMock('FIND_PETS_BY_STATUS').getState());
|
|
174
293
|
|
|
175
294
|
// Full event history (requests + responses + progress ticks)
|
|
176
|
-
const history = await page.evaluate(() =>
|
|
177
|
-
|
|
178
|
-
|
|
295
|
+
const history = await page.evaluate(() => openApiMock('FIND_PETS_BY_STATUS').getHistory());
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
### Asserting request params
|
|
299
|
+
|
|
300
|
+
`getHistory()` records every factory invocation as a `request` entry. Function args (reactive lambdas) are resolved at call time, so `args` contains plain JSON values:
|
|
301
|
+
|
|
302
|
+
```typescript
|
|
303
|
+
const history = await page.evaluate(() => openApiMock('FIND_PETS_BY_STATUS').getHistory());
|
|
304
|
+
const req = history.find((e) => e.type === 'request');
|
|
305
|
+
expect(req?.args[0]).toEqual({ status: 'available' });
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
For tokens whose factory receives a reactive lambda (e.g. `() => query() ? { q: query() } : undefined`), `args[0]` will be the resolved value at mount time — `undefined` when suppressed, or the plain params object when active:
|
|
309
|
+
|
|
310
|
+
```typescript
|
|
311
|
+
// Confirms the resource was suppressed on init (query was empty)
|
|
312
|
+
expect(req?.args[0]).toBeUndefined();
|
|
179
313
|
```
|
|
180
314
|
|
|
181
315
|
---
|
|
@@ -213,19 +347,57 @@ document.addEventListener('openapi-mock-event', (e) => {
|
|
|
213
347
|
|
|
214
348
|
Returns `EnvironmentProviders`. Call once in your root providers or TestBed setup.
|
|
215
349
|
|
|
216
|
-
### `provideMockResource(token, key,
|
|
350
|
+
### `provideMockResource(token, key, initialBehavior?)`
|
|
351
|
+
|
|
352
|
+
Returns `FactoryProvider`. Each time a component invokes the factory function, a fresh ref is created, registered in the bus under `key`, and `initialBehavior` is applied — simulating the full request lifecycle on every mount.
|
|
217
353
|
|
|
218
|
-
|
|
354
|
+
`initialBehavior` controls how the mock behaves on each invocation:
|
|
219
355
|
|
|
220
|
-
|
|
356
|
+
| Shape | Effect |
|
|
357
|
+
|-------|--------|
|
|
358
|
+
| `{ value: T }` | Resolves immediately with value |
|
|
359
|
+
| `{ value: T, delay: ms }` | Loading for `ms` ms, then resolves |
|
|
360
|
+
| `{ loading: true }` | Stays loading indefinitely |
|
|
361
|
+
| `{ error: unknown }` | Fails immediately |
|
|
362
|
+
| `{ error: unknown, delay: ms }` | Loading for `ms` ms, then fails |
|
|
221
363
|
|
|
222
364
|
### `injectMockResource<T>(key)`
|
|
223
365
|
|
|
224
|
-
Must be called inside an injection context (e.g. `TestBed.runInInjectionContext`). Returns `MockResourceRef<T>`.
|
|
366
|
+
Must be called inside an injection context (e.g. `TestBed.runInInjectionContext`) and after the component has rendered — the ref is registered when the component first invokes the factory function, not at DI setup time. Returns `MockResourceRef<T>`.
|
|
367
|
+
|
|
368
|
+
### `ProviderInitialBehavior<T>`
|
|
369
|
+
|
|
370
|
+
Union type accepted by `provideMockResource()` and generated `provide{Operation}Mock()` wrappers. Describes the mock's state immediately after each factory invocation:
|
|
371
|
+
|
|
372
|
+
| Shape | Effect |
|
|
373
|
+
|-------|--------|
|
|
374
|
+
| `{ value: DeepPartial<T> }` | Resolves immediately with value |
|
|
375
|
+
| `{ value: DeepPartial<T>, delay: ms }` | Loading for `ms` ms, then resolves |
|
|
376
|
+
| `{ loading: true }` | Stays loading indefinitely |
|
|
377
|
+
| `{ error: unknown }` | Fails immediately |
|
|
378
|
+
| `{ error: unknown, delay: ms }` | Loading for `ms` ms, then fails |
|
|
379
|
+
|
|
380
|
+
### `DeepPartial<T>`
|
|
381
|
+
|
|
382
|
+
Recursively marks all properties of `T` as optional. Used as the value type in `ProviderInitialBehavior<T>` so you can provide partial seed data without satisfying every nested field.
|
|
383
|
+
|
|
384
|
+
### `TokenValue<Token>`
|
|
385
|
+
|
|
386
|
+
Utility type that extracts the response type `T` from a generated `InjectionToken<(...args) => ResourceRef<T>>`. Use it to type seed data without importing the response type by name:
|
|
387
|
+
|
|
388
|
+
```typescript
|
|
389
|
+
import type { TokenValue } from '@constantant/openapi-resource-mocks';
|
|
390
|
+
import { FIND_PETS_BY_STATUS } from '@myapp/petstore-data-access';
|
|
391
|
+
|
|
392
|
+
// type is FindPetsByStatusResponse — inferred from the token
|
|
393
|
+
const mockPets: TokenValue<typeof FIND_PETS_BY_STATUS> = [
|
|
394
|
+
{ id: 1, name: 'Rex', status: 'available', photoUrls: [] },
|
|
395
|
+
];
|
|
396
|
+
```
|
|
225
397
|
|
|
226
398
|
### `createMockResourceRef<T>(initialState?)`
|
|
227
399
|
|
|
228
|
-
Creates a standalone ref without the bus — useful
|
|
400
|
+
Creates a standalone ref without the bus — useful for Storybook decorators, custom test harnesses, or any scenario where you need a `MockResourceRef` outside of Angular DI.
|
|
229
401
|
|
|
230
402
|
### `MockResourceRef<T>`
|
|
231
403
|
|
|
@@ -259,6 +431,16 @@ interface MockProgress {
|
|
|
259
431
|
}
|
|
260
432
|
```
|
|
261
433
|
|
|
434
|
+
### `openApiMock(key)` / `window.__openApiMocks__[key]`
|
|
435
|
+
|
|
436
|
+
`openApiMock` is a shorthand exposed on `window` by `MockResourceBus` — equivalent to `window.__openApiMocks__[key]` but terser in `page.evaluate()` calls:
|
|
437
|
+
|
|
438
|
+
```typescript
|
|
439
|
+
// Playwright
|
|
440
|
+
const history = await page.evaluate(() => openApiMock('FIND_PETS_BY_STATUS').getHistory());
|
|
441
|
+
await page.evaluate(() => openApiMock('FIND_PETS_BY_STATUS').resolve([...]));
|
|
442
|
+
```
|
|
443
|
+
|
|
262
444
|
### `window.__openApiMocks__[key]`
|
|
263
445
|
|
|
264
446
|
| Member | Description |
|
|
@@ -278,7 +460,7 @@ interface MockProgress {
|
|
|
278
460
|
|
|
279
461
|
```typescript
|
|
280
462
|
type MockEvent =
|
|
281
|
-
| { type: 'request'; args: unknown[]; ts: number } // factory called by component
|
|
463
|
+
| { type: 'request'; args: unknown[]; ts: number } // factory called by component — function args are called and replaced with their return value
|
|
282
464
|
| { type: 'resolve'; value: unknown; ts: number }
|
|
283
465
|
| { type: 'loading'; ts: number }
|
|
284
466
|
| { type: 'error'; error: unknown; ts: number }
|
package/package.json
CHANGED
package/src/index.d.ts
CHANGED
|
@@ -3,5 +3,7 @@ export type { MockResourceRef, MockResourceRefInternal, MockResourceState } from
|
|
|
3
3
|
export { MockResourceBus, provideMockResourceBus } from './lib/mock-resource-bus';
|
|
4
4
|
export type { WindowMockEntry } from './lib/mock-resource-bus';
|
|
5
5
|
export { provideMockResource } from './lib/provide-mock-resource';
|
|
6
|
+
export type { ProviderInitialBehavior, DeepPartial } from './lib/provide-mock-resource';
|
|
6
7
|
export { injectMockResource } from './lib/inject-mock-resource';
|
|
7
8
|
export type { MockEvent, MockProgress } from './lib/mock-events';
|
|
9
|
+
export type { TokenValue } from './lib/token-value';
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../tools/openapi-resource-mocks/src/index.ts"],"names":[],"mappings":";;;AAAA,6DAAgE;AAAvD,0HAAA,qBAAqB,OAAA;AAE9B,6DAAkF;AAAzE,oHAAA,eAAe,OAAA;AAAE,2HAAA,sBAAsB,OAAA;AAEhD,qEAAkE;AAAzD,4HAAA,mBAAmB,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../tools/openapi-resource-mocks/src/index.ts"],"names":[],"mappings":";;;AAAA,6DAAgE;AAAvD,0HAAA,qBAAqB,OAAA;AAE9B,6DAAkF;AAAzE,oHAAA,eAAe,OAAA;AAAE,2HAAA,sBAAsB,OAAA;AAEhD,qEAAkE;AAAzD,4HAAA,mBAAmB,OAAA;AAE5B,mEAAgE;AAAvD,0HAAA,kBAAkB,OAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-resource-bus.js","sourceRoot":"","sources":["../../../../../tools/openapi-resource-mocks/src/lib/mock-resource-bus.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"mock-resource-bus.js","sourceRoot":"","sources":["../../../../../tools/openapi-resource-mocks/src/lib/mock-resource-bus.ts"],"names":[],"mappings":"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"}
|
|
@@ -82,7 +82,8 @@ function createMockResourceRef(initialState) {
|
|
|
82
82
|
requestListeners.add(cb);
|
|
83
83
|
return () => requestListeners.delete(cb);
|
|
84
84
|
},
|
|
85
|
-
_notifyRequest: (
|
|
85
|
+
_notifyRequest: (rawArgs) => {
|
|
86
|
+
const args = rawArgs.map((arg) => typeof arg === 'function' ? arg() : arg);
|
|
86
87
|
requestListeners.forEach((cb) => cb(args));
|
|
87
88
|
},
|
|
88
89
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-resource-ref.js","sourceRoot":"","sources":["../../../../../tools/openapi-resource-mocks/src/lib/mock-resource-ref.ts"],"names":[],"mappings":";;AAyCA,
|
|
1
|
+
{"version":3,"file":"mock-resource-ref.js","sourceRoot":"","sources":["../../../../../tools/openapi-resource-mocks/src/lib/mock-resource-ref.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
import { InjectionToken, FactoryProvider } from '@angular/core';
|
|
2
2
|
import { httpResource } from '@angular/common/http';
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
export type DeepPartial<T> = T extends Array<infer E> ? DeepPartial<E>[] : T extends object ? {
|
|
4
|
+
[K in keyof T]?: DeepPartial<T[K]>;
|
|
5
|
+
} : T;
|
|
6
|
+
export type ProviderInitialBehavior<T> = {
|
|
7
|
+
value: DeepPartial<T>;
|
|
8
|
+
delay?: number;
|
|
9
|
+
} | {
|
|
10
|
+
loading: true;
|
|
11
|
+
} | {
|
|
12
|
+
error: unknown;
|
|
13
|
+
delay?: number;
|
|
14
|
+
};
|
|
15
|
+
export declare function provideMockResource<T>(token: InjectionToken<(...args: unknown[]) => ReturnType<typeof httpResource<T>>>, key: string, initialBehavior?: ProviderInitialBehavior<T>): FactoryProvider;
|
|
@@ -4,15 +4,37 @@ exports.provideMockResource = provideMockResource;
|
|
|
4
4
|
const core_1 = require("@angular/core");
|
|
5
5
|
const mock_resource_bus_1 = require("./mock-resource-bus");
|
|
6
6
|
const mock_resource_ref_1 = require("./mock-resource-ref");
|
|
7
|
-
function provideMockResource(token, key,
|
|
7
|
+
function provideMockResource(token, key, initialBehavior) {
|
|
8
8
|
return {
|
|
9
9
|
provide: token,
|
|
10
10
|
useFactory: () => {
|
|
11
11
|
const bus = (0, core_1.inject)(mock_resource_bus_1.MockResourceBus);
|
|
12
|
-
const ref = (0, mock_resource_ref_1.createMockResourceRef)(initialState);
|
|
13
|
-
bus.register(key, ref);
|
|
14
12
|
return (...args) => {
|
|
13
|
+
const ref = (0, mock_resource_ref_1.createMockResourceRef)();
|
|
14
|
+
bus.register(key, ref);
|
|
15
15
|
ref._notifyRequest(args);
|
|
16
|
+
if (initialBehavior) {
|
|
17
|
+
if ('value' in initialBehavior) {
|
|
18
|
+
if (initialBehavior.delay) {
|
|
19
|
+
ref.resolveAfter(initialBehavior.delay, initialBehavior.value);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
ref.resolve(initialBehavior.value);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
else if ('error' in initialBehavior) {
|
|
26
|
+
if (initialBehavior.delay) {
|
|
27
|
+
ref.setLoading();
|
|
28
|
+
setTimeout(() => ref.fail(initialBehavior.error), initialBehavior.delay);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
ref.fail(initialBehavior.error);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
ref.setLoading();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
16
38
|
return ref;
|
|
17
39
|
};
|
|
18
40
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provide-mock-resource.js","sourceRoot":"","sources":["../../../../../tools/openapi-resource-mocks/src/lib/provide-mock-resource.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"provide-mock-resource.js","sourceRoot":"","sources":["../../../../../tools/openapi-resource-mocks/src/lib/provide-mock-resource.ts"],"names":[],"mappings":";;AAgBA,kDAmCC;AAnDD,wCAAwE;AAExE,2DAAsD;AACtD,2DAA0F;AAa1F,SAAgB,mBAAmB,CACjC,KAAiF,EACjF,GAAW,EACX,eAA4C;IAE5C,OAAO;QACL,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,GAAG,EAAE;YACf,MAAM,GAAG,GAAG,IAAA,aAAM,EAAC,mCAAe,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,IAAe,EAAsC,EAAE;gBAChE,MAAM,GAAG,GAAG,IAAA,yCAAqB,GAAK,CAAC;gBACvC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBACtB,GAAkC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBACzD,IAAI,eAAe,EAAE,CAAC;oBACpB,IAAI,OAAO,IAAI,eAAe,EAAE,CAAC;wBAC/B,IAAI,eAAe,CAAC,KAAK,EAAE,CAAC;4BAC1B,GAAG,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,EAAE,eAAe,CAAC,KAAU,CAAC,CAAC;wBACtE,CAAC;6BAAM,CAAC;4BACN,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,KAAU,CAAC,CAAC;wBAC1C,CAAC;oBACH,CAAC;yBAAM,IAAI,OAAO,IAAI,eAAe,EAAE,CAAC;wBACtC,IAAI,eAAe,CAAC,KAAK,EAAE,CAAC;4BAC1B,GAAG,CAAC,UAAU,EAAE,CAAC;4BACjB,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;wBAC3E,CAAC;6BAAM,CAAC;4BACN,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;wBAClC,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,GAAG,CAAC,UAAU,EAAE,CAAC;oBACnB,CAAC;gBACH,CAAC;gBACD,OAAO,GAAoD,CAAC;YAC9D,CAAC,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { InjectionToken, ResourceRef } from '@angular/core';
|
|
2
|
+
/** Extracts the response type T from an InjectionToken<(...args) => ResourceRef<T>>. */
|
|
3
|
+
export type TokenValue<Token extends InjectionToken<any>> = Token extends InjectionToken<(...args: any[]) => ResourceRef<infer V>> ? V : never;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-value.js","sourceRoot":"","sources":["../../../../../tools/openapi-resource-mocks/src/lib/token-value.ts"],"names":[],"mappings":""}
|