@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 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 `provideMockResource()` per token:
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<FindPetsByStatusResponse>('FIND_PETS_BY_STATUS'),
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
- window.__openApiMocks__['UPLOAD_FILE'].simulateProgress('upload', 4_000_000, 2000, { id: 'abc123' }),
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
- window.__openApiMocks__['UPLOAD_FILE'].setProgress('upload', 1_000_000, 4_000_000),
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(() => window.__openApiMocks__['UPLOAD_FILE'].fail(new Error('timeout')));
122
- const state = await page.evaluate(() => window.__openApiMocks__['UPLOAD_FILE'].getState());
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
- window.__openApiMocks__['FIND_PETS_BY_STATUS'].resolve([
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(() => window.__openApiMocks__['FIND_PETS_BY_STATUS'].setLoading());
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
- window.__openApiMocks__['FIND_PETS_BY_STATUS'].getHistory(),
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, initialState?)`
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
- Returns `FactoryProvider`. Registers `token` in the bus under `key`.
354
+ `initialBehavior` controls how the mock behaves on each invocation:
219
355
 
220
- `initialState` can be `{ value: T }`, `{ loading: true }`, or `{ error: unknown }`.
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 when passing the ref to `provideMockResource` yourself for fine-grained test setup.
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@constantant/openapi-resource-mocks",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "Mock bus for @constantant/openapi-resource-gen tokens — unit tests, E2E, and Chrome Extension devtools",
5
5
  "license": "MIT",
6
6
  "main": "src/index.js",
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;AAC5B,mEAAgE;AAAvD,0HAAA,kBAAkB,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"}
@@ -21,6 +21,7 @@ export interface WindowMockEntry {
21
21
  declare global {
22
22
  interface Window {
23
23
  __openApiMocks__?: Record<string, WindowMockEntry>;
24
+ openApiMock?: (key: string) => WindowMockEntry;
24
25
  }
25
26
  }
26
27
  export declare class MockResourceBus {
@@ -15,6 +15,7 @@ class MockResourceBus {
15
15
  }
16
16
  exposeToWindow(key, ref) {
17
17
  window.__openApiMocks__ ??= {};
18
+ window.openApiMock ??= (k) => window.__openApiMocks__[k];
18
19
  const history = [];
19
20
  const listeners = new Set();
20
21
  const emit = (e) => {
@@ -1 +1 @@
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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"}
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: (args) => {
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":"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"}
1
+ {"version":3,"file":"mock-resource-ref.js","sourceRoot":"","sources":["../../../../../tools/openapi-resource-mocks/src/lib/mock-resource-ref.ts"],"names":[],"mappings":";;AAyCA,sDAmGC;AA5ID,wCAAyD;AAyCzD,SAAgB,qBAAqB,CACnC,YAAmC;IAEnC,MAAM,OAAO,GAAG,IAAA,aAAM,EAAiB,MAAM,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAA,aAAM,EAAgB,SAAS,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,IAAA,aAAM,EAAU,SAAS,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,IAAA,aAAM,EAA2B,SAAS,CAAC,CAAC;IAC9D,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA6B,CAAC;IAE9D,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,OAAO,IAAI,YAAY,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,SAAS,IAAI,YAAY,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACzB,CAAC;aAAM,IAAI,OAAO,IAAI,YAAY,EAAE,CAAC;YACnC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAA+B;QACtC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE;QAC1B,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE;QAC5B,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE;QAC1B,QAAQ,EAAE,SAAS,CAAC,UAAU,EAAE;QAChC,SAAS,EAAE,IAAA,eAAQ,EACjB,GAAG,EAAE,CAAC,OAAO,EAAE,KAAK,SAAS,IAAI,OAAO,EAAE,KAAK,WAAW,CAC3D;QACD,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,KAAK,SAAS;QAEtC,OAAO,CAAC,CAAI;YACV,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACd,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACtB,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1B,CAAC;QACD,YAAY,CAAC,EAAU,EAAE,CAAI;YAC3B,GAAG,CAAC,UAAU,EAAE,CAAC;YACjB,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,UAAU;YACR,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,CAAU;YACb,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACd,wEAAwE;YACxE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QACD,KAAK;YACH,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACtB,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACtB,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;QACD,GAAG,CAAC,CAAI;YACN,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QACD,MAAM,CAAC,EAA2B;YAChC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QACD,WAAW,CAAC,IAA2B,EAAE,MAAc,EAAE,KAAc;YACrE,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACzB,CAAC;QACD,gBAAgB,CACd,IAA2B,EAC3B,UAAkB,EAClB,UAAkB,EAClB,UAAa,EACb,KAAK,GAAG,EAAE;YAEV,GAAG,CAAC,UAAU,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,UAAU,GAAG,KAAK,CAAC;YACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;gBAChC,UAAU,CAAC,GAAG,EAAE;oBACd,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBAC1E,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;YACpB,CAAC;YACD,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC,CAAC;QACpE,CAAC;QACD,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK;QACnB,OAAO,EAAE,GAAG,EAAE,GAA8C,CAAC;QAC7D,UAAU,EAAE,GAAG,EAAE,CAAC,GAAG;QACrB,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE;YAChB,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACzB,OAAO,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC3C,CAAC;QACD,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE;YAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAC/B,OAAO,GAAG,KAAK,UAAU,CAAC,CAAC,CAAE,GAAqB,EAAE,CAAC,CAAC,CAAC,GAAG,CAC3D,CAAC;YACF,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7C,CAAC;KACF,CAAC;IACF,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -1,4 +1,15 @@
1
1
  import { InjectionToken, FactoryProvider } from '@angular/core';
2
2
  import { httpResource } from '@angular/common/http';
3
- import { type MockResourceState } from './mock-resource-ref';
4
- export declare function provideMockResource<T>(token: InjectionToken<(...args: unknown[]) => ReturnType<typeof httpResource<T>>>, key: string, initialState?: MockResourceState<T>): FactoryProvider;
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, initialState) {
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":";;AASA,kDAiBC;AA1BD,wCAAwE;AAExE,2DAAsD;AACtD,2DAI6B;AAE7B,SAAgB,mBAAmB,CACjC,KAAiF,EACjF,GAAW,EACX,YAAmC;IAEnC,OAAO;QACL,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,GAAG,EAAE;YACf,MAAM,GAAG,GAAG,IAAA,aAAM,EAAC,mCAAe,CAAC,CAAC;YACpC,MAAM,GAAG,GAAG,IAAA,yCAAqB,EAAI,YAAY,CAAC,CAAC;YACnD,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACvB,OAAO,CAAC,GAAG,IAAe,EAAsC,EAAE;gBAC/D,GAAkC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBACzD,OAAO,GAAoD,CAAC;YAC9D,CAAC,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=token-value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-value.js","sourceRoot":"","sources":["../../../../../tools/openapi-resource-mocks/src/lib/token-value.ts"],"names":[],"mappings":""}