@data-client/core 0.15.0-beta-20251022142546-a457d1596871fb28f1a91f2531cc259db4d55a9c → 0.15.1-beta-20251116224907-3174fe59b114d2037762a6458f5576d23e483ba4
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 +12 -0
- package/legacy/mock/MockController.js +124 -0
- package/legacy/mock/collapseFixture.js +19 -0
- package/legacy/mock/createFixtureMap.js +23 -0
- package/legacy/mock/fixtureTypes.js +2 -0
- package/legacy/mock/index.js +4 -0
- package/legacy/mock/mockTypes.js +2 -0
- package/lib/mock/MockController.d.ts +4 -0
- package/lib/mock/MockController.d.ts.map +1 -0
- package/lib/mock/MockController.js +125 -0
- package/lib/mock/collapseFixture.d.ts +6 -0
- package/lib/mock/collapseFixture.d.ts.map +1 -0
- package/lib/mock/collapseFixture.js +19 -0
- package/lib/mock/createFixtureMap.d.ts +3 -0
- package/lib/mock/createFixtureMap.d.ts.map +1 -0
- package/lib/mock/createFixtureMap.js +23 -0
- package/lib/mock/fixtureTypes.d.ts +99 -0
- package/lib/mock/fixtureTypes.d.ts.map +1 -0
- package/lib/mock/fixtureTypes.js +2 -0
- package/lib/mock/index.d.ts +6 -0
- package/lib/mock/index.d.ts.map +1 -0
- package/lib/mock/index.js +4 -0
- package/lib/mock/mockTypes.d.ts +6 -0
- package/lib/mock/mockTypes.d.ts.map +1 -0
- package/lib/mock/mockTypes.js +2 -0
- package/package.json +16 -3
- package/src/mock/MockController.ts +146 -0
- package/src/mock/collapseFixture.ts +21 -0
- package/src/mock/createFixtureMap.ts +26 -0
- package/src/mock/fixtureTypes.ts +121 -0
- package/src/mock/index.ts +15 -0
- package/src/mock/mockTypes.ts +6 -0
- package/ts3.4/mock/MockController.d.ts +4 -0
- package/ts3.4/mock/collapseFixture.d.ts +6 -0
- package/ts3.4/mock/createFixtureMap.d.ts +6 -0
- package/ts3.4/mock/fixtureTypes.d.ts +99 -0
- package/ts3.4/mock/index.d.ts +6 -0
- package/ts3.4/mock/mockTypes.d.ts +6 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @data-client/core
|
|
2
2
|
|
|
3
|
+
## 0.15.1-beta-20251116224907-3174fe59b114d2037762a6458f5576d23e483ba4
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#3622](https://github.com/reactive/data-client/pull/3622) [`ad3964d`](https://github.com/reactive/data-client/commit/ad3964d65d245c459809f64afe17ebdf5fda5042) Thanks [@ntucker](https://github.com/ntucker)! - Add @data-client/core/mock
|
|
8
|
+
|
|
9
|
+
New exports:
|
|
10
|
+
- `MockController` - Controller wrapper for mocking endpoints
|
|
11
|
+
- `collapseFixture` - Resolves fixture responses (handles function responses)
|
|
12
|
+
- `createFixtureMap` - Separates fixtures into static map and interceptors
|
|
13
|
+
- Types: `MockProps`, `Fixture`, `SuccessFixture`, `ErrorFixture`, `Interceptor`, `ResponseInterceptor`, `FetchInterceptor`, `FixtureEndpoint`, `SuccessFixtureEndpoint`, `ErrorFixtureEndpoint`
|
|
14
|
+
|
|
3
15
|
## 0.15.0-beta-20251022142546-a457d1596871fb28f1a91f2531cc259db4d55a9c
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import { actionTypes } from '../index.js';
|
|
3
|
+
import { collapseFixture } from './collapseFixture.js';
|
|
4
|
+
import { createFixtureMap } from './createFixtureMap.js';
|
|
5
|
+
export function MockController(Base, {
|
|
6
|
+
fixtures = [],
|
|
7
|
+
getInitialInterceptorData = () => ({})
|
|
8
|
+
}) {
|
|
9
|
+
const [fixtureMap, interceptors] = createFixtureMap(fixtures);
|
|
10
|
+
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
12
|
+
// @ts-ignore
|
|
13
|
+
return class MockedController extends Base {
|
|
14
|
+
constructor(...args) {
|
|
15
|
+
super(...args);
|
|
16
|
+
|
|
17
|
+
// legacy compatibility
|
|
18
|
+
// TODO: drop when drop support for destructuring (0.14 and below)
|
|
19
|
+
// legacy compatibility (re-declaration)
|
|
20
|
+
// TODO: drop when drop support for destructuring (0.14 and below)
|
|
21
|
+
this.fixtureMap = fixtureMap;
|
|
22
|
+
this.interceptors = interceptors;
|
|
23
|
+
this.interceptorData = getInitialInterceptorData();
|
|
24
|
+
if (!this._dispatch) {
|
|
25
|
+
this._dispatch = args[0].dispatch;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// legacy compatibility - we need this to work with 0.14 and below as they do not have this setter
|
|
30
|
+
// TODO: drop when drop support for destructuring (0.14 and below)
|
|
31
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
32
|
+
// @ts-ignore
|
|
33
|
+
set dispatch(dispatch) {
|
|
34
|
+
this._dispatch = dispatch;
|
|
35
|
+
}
|
|
36
|
+
get dispatch() {
|
|
37
|
+
return action => {
|
|
38
|
+
var _actionTypes$FETCH;
|
|
39
|
+
// support legacy that has _TYPE suffix
|
|
40
|
+
if (action.type === ((_actionTypes$FETCH = actionTypes.FETCH) != null ? _actionTypes$FETCH : actionTypes.FETCH_TYPE)) {
|
|
41
|
+
// eslint-disable-next-line prefer-const
|
|
42
|
+
let {
|
|
43
|
+
key,
|
|
44
|
+
args
|
|
45
|
+
} = action;
|
|
46
|
+
let fixture;
|
|
47
|
+
if (this.fixtureMap.has(key)) {
|
|
48
|
+
fixture = this.fixtureMap.get(key);
|
|
49
|
+
if (!args) args = fixture.args;
|
|
50
|
+
// exact matches take priority; now test ComputedFixture
|
|
51
|
+
} else {
|
|
52
|
+
for (const cfix of this.interceptors) {
|
|
53
|
+
if (cfix.endpoint.testKey(key)) {
|
|
54
|
+
fixture = cfix;
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// we have a match
|
|
60
|
+
if (fixture !== undefined) {
|
|
61
|
+
var _fixture$delay;
|
|
62
|
+
const replacedAction = _extends({}, action);
|
|
63
|
+
const delayMs = typeof fixture.delay === 'function' ? fixture.delay(...args) : (_fixture$delay = fixture.delay) != null ? _fixture$delay : 0;
|
|
64
|
+
if ('fetchResponse' in fixture) {
|
|
65
|
+
const {
|
|
66
|
+
fetchResponse
|
|
67
|
+
} = fixture;
|
|
68
|
+
fixture = {
|
|
69
|
+
endpoint: fixture.endpoint,
|
|
70
|
+
response(...args) {
|
|
71
|
+
const endpoint = action.endpoint.extend({
|
|
72
|
+
fetchResponse: (input, init) => {
|
|
73
|
+
const ret = fetchResponse.call(this, input, init);
|
|
74
|
+
return Promise.resolve(new Response(JSON.stringify(ret), {
|
|
75
|
+
status: 200,
|
|
76
|
+
headers: new Headers({
|
|
77
|
+
'Content-Type': 'application/json'
|
|
78
|
+
})
|
|
79
|
+
}));
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
return endpoint(...args);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
const fetch = async () => {
|
|
87
|
+
if (!fixture) {
|
|
88
|
+
throw new Error('No fixture found');
|
|
89
|
+
}
|
|
90
|
+
// delayCollapse determines when the fixture function is 'collapsed' (aka 'run')
|
|
91
|
+
// collapsed: https://en.wikipedia.org/wiki/Copenhagen_interpretation
|
|
92
|
+
if (fixture.delayCollapse) {
|
|
93
|
+
await new Promise(resolve => setTimeout(resolve, delayMs));
|
|
94
|
+
}
|
|
95
|
+
const result = await collapseFixture(fixture, args, this.interceptorData);
|
|
96
|
+
if (!fixture.delayCollapse && delayMs) {
|
|
97
|
+
await new Promise(resolve => setTimeout(resolve, delayMs));
|
|
98
|
+
}
|
|
99
|
+
if (result.error) {
|
|
100
|
+
throw result.response;
|
|
101
|
+
}
|
|
102
|
+
return result.response;
|
|
103
|
+
};
|
|
104
|
+
if (typeof replacedAction.endpoint.extend === 'function') {
|
|
105
|
+
replacedAction.endpoint = replacedAction.endpoint.extend({
|
|
106
|
+
fetch
|
|
107
|
+
});
|
|
108
|
+
} else {
|
|
109
|
+
// TODO: full testing of this
|
|
110
|
+
replacedAction.endpoint = fetch;
|
|
111
|
+
replacedAction.endpoint.__proto__ = action.endpoint;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// TODO: make super.dispatch (once we drop support for destructuring)
|
|
115
|
+
return this._dispatch(replacedAction);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// TODO: make super.dispatch (once we drop support for destructuring)
|
|
119
|
+
return this._dispatch(action);
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhY3Rpb25UeXBlcyIsImNvbGxhcHNlRml4dHVyZSIsImNyZWF0ZUZpeHR1cmVNYXAiLCJNb2NrQ29udHJvbGxlciIsIkJhc2UiLCJmaXh0dXJlcyIsImdldEluaXRpYWxJbnRlcmNlcHRvckRhdGEiLCJmaXh0dXJlTWFwIiwiaW50ZXJjZXB0b3JzIiwiTW9ja2VkQ29udHJvbGxlciIsImNvbnN0cnVjdG9yIiwiYXJncyIsImludGVyY2VwdG9yRGF0YSIsIl9kaXNwYXRjaCIsImRpc3BhdGNoIiwiYWN0aW9uIiwiX2FjdGlvblR5cGVzJEZFVENIIiwidHlwZSIsIkZFVENIIiwiRkVUQ0hfVFlQRSIsImtleSIsImZpeHR1cmUiLCJoYXMiLCJnZXQiLCJjZml4IiwiZW5kcG9pbnQiLCJ0ZXN0S2V5IiwidW5kZWZpbmVkIiwiX2ZpeHR1cmUkZGVsYXkiLCJyZXBsYWNlZEFjdGlvbiIsIl9leHRlbmRzIiwiZGVsYXlNcyIsImRlbGF5IiwiZmV0Y2hSZXNwb25zZSIsInJlc3BvbnNlIiwiZXh0ZW5kIiwiaW5wdXQiLCJpbml0IiwicmV0IiwiY2FsbCIsIlByb21pc2UiLCJyZXNvbHZlIiwiUmVzcG9uc2UiLCJKU09OIiwic3RyaW5naWZ5Iiwic3RhdHVzIiwiaGVhZGVycyIsIkhlYWRlcnMiLCJmZXRjaCIsIkVycm9yIiwiZGVsYXlDb2xsYXBzZSIsInNldFRpbWVvdXQiLCJyZXN1bHQiLCJlcnJvciIsIl9fcHJvdG9fXyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2NrL01vY2tDb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFjdGlvblR5cGVzLFxuICBDb250cm9sbGVyLFxuICBEYXRhQ2xpZW50RGlzcGF0Y2gsXG4gIEdlbmVyaWNEaXNwYXRjaCxcbn0gZnJvbSAnLi4vaW5kZXguanMnO1xuaW1wb3J0IHsgY29sbGFwc2VGaXh0dXJlIH0gZnJvbSAnLi9jb2xsYXBzZUZpeHR1cmUuanMnO1xuaW1wb3J0IHsgY3JlYXRlRml4dHVyZU1hcCB9IGZyb20gJy4vY3JlYXRlRml4dHVyZU1hcC5qcyc7XG5pbXBvcnQgdHlwZSB7IEZpeHR1cmUsIEludGVyY2VwdG9yIH0gZnJvbSAnLi9maXh0dXJlVHlwZXMuanMnO1xuaW1wb3J0IHsgTW9ja1Byb3BzIH0gZnJvbSAnLi9tb2NrVHlwZXMuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gTW9ja0NvbnRyb2xsZXI8VEJhc2UgZXh0ZW5kcyB0eXBlb2YgQ29udHJvbGxlciwgVD4oXG4gIEJhc2U6IFRCYXNlLFxuICB7XG4gICAgZml4dHVyZXMgPSBbXSxcbiAgICBnZXRJbml0aWFsSW50ZXJjZXB0b3JEYXRhID0gKCkgPT4gKHt9KSBhcyBhbnksXG4gIH06IE1vY2tQcm9wczxUPixcbik6IFRCYXNlIHtcbiAgY29uc3QgW2ZpeHR1cmVNYXAsIGludGVyY2VwdG9yc10gPSBjcmVhdGVGaXh0dXJlTWFwKGZpeHR1cmVzKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIGNsYXNzIE1vY2tlZENvbnRyb2xsZXI8XG4gICAgRCBleHRlbmRzIEdlbmVyaWNEaXNwYXRjaCA9IERhdGFDbGllbnREaXNwYXRjaCxcbiAgPiBleHRlbmRzIEJhc2U8RD4ge1xuICAgIC8vIGxlZ2FjeSBjb21wYXRpYmlsaXR5IChyZS1kZWNsYXJhdGlvbilcbiAgICAvLyBUT0RPOiBkcm9wIHdoZW4gZHJvcCBzdXBwb3J0IGZvciBkZXN0cnVjdHVyaW5nICgwLjE0IGFuZCBiZWxvdylcbiAgICBkZWNsYXJlIHByb3RlY3RlZCBfZGlzcGF0Y2g6IEQ7XG5cbiAgICBmaXh0dXJlTWFwOiBNYXA8c3RyaW5nLCBGaXh0dXJlPiA9IGZpeHR1cmVNYXA7XG4gICAgaW50ZXJjZXB0b3JzOiBJbnRlcmNlcHRvcjxhbnk+W10gPSBpbnRlcmNlcHRvcnM7XG4gICAgaW50ZXJjZXB0b3JEYXRhOiBUID0gZ2V0SW5pdGlhbEludGVyY2VwdG9yRGF0YSgpO1xuXG4gICAgY29uc3RydWN0b3IoLi4uYXJnczogYW55W10pIHtcbiAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuXG4gICAgICAvLyBsZWdhY3kgY29tcGF0aWJpbGl0eVxuICAgICAgLy8gVE9ETzogZHJvcCB3aGVuIGRyb3Agc3VwcG9ydCBmb3IgZGVzdHJ1Y3R1cmluZyAoMC4xNCBhbmQgYmVsb3cpXG4gICAgICBpZiAoIXRoaXMuX2Rpc3BhdGNoKSB7XG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoID0gKGFyZ3NbMF0gYXMgYW55KS5kaXNwYXRjaDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBsZWdhY3kgY29tcGF0aWJpbGl0eSAtIHdlIG5lZWQgdGhpcyB0byB3b3JrIHdpdGggMC4xNCBhbmQgYmVsb3cgYXMgdGhleSBkbyBub3QgaGF2ZSB0aGlzIHNldHRlclxuICAgIC8vIFRPRE86IGRyb3Agd2hlbiBkcm9wIHN1cHBvcnQgZm9yIGRlc3RydWN0dXJpbmcgKDAuMTQgYW5kIGJlbG93KVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgc2V0IGRpc3BhdGNoKGRpc3BhdGNoOiBEKSB7XG4gICAgICB0aGlzLl9kaXNwYXRjaCA9IGRpc3BhdGNoO1xuICAgIH1cblxuICAgIGdldCBkaXNwYXRjaCgpOiBEIHtcbiAgICAgIHJldHVybiAoKGFjdGlvbjogUGFyYW1ldGVyczxEPlswXSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAvLyBzdXBwb3J0IGxlZ2FjeSB0aGF0IGhhcyBfVFlQRSBzdWZmaXhcbiAgICAgICAgaWYgKGFjdGlvbi50eXBlID09PSAoYWN0aW9uVHlwZXMuRkVUQ0ggPz8gYWN0aW9uVHlwZXMuRkVUQ0hfVFlQRSkpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgICAgICAgbGV0IHsga2V5LCBhcmdzIH0gPSBhY3Rpb247XG4gICAgICAgICAgbGV0IGZpeHR1cmU6IEZpeHR1cmUgfCBJbnRlcmNlcHRvciB8IHVuZGVmaW5lZDtcbiAgICAgICAgICBpZiAodGhpcy5maXh0dXJlTWFwLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBmaXh0dXJlID0gdGhpcy5maXh0dXJlTWFwLmdldChrZXkpIGFzIEZpeHR1cmU7XG4gICAgICAgICAgICBpZiAoIWFyZ3MpIGFyZ3MgPSBmaXh0dXJlLmFyZ3M7XG4gICAgICAgICAgICAvLyBleGFjdCBtYXRjaGVzIHRha2UgcHJpb3JpdHk7IG5vdyB0ZXN0IENvbXB1dGVkRml4dHVyZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNmaXggb2YgdGhpcy5pbnRlcmNlcHRvcnMpIHtcbiAgICAgICAgICAgICAgaWYgKGNmaXguZW5kcG9pbnQudGVzdEtleShrZXkpKSB7XG4gICAgICAgICAgICAgICAgZml4dHVyZSA9IGNmaXg7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gd2UgaGF2ZSBhIG1hdGNoXG4gICAgICAgICAgaWYgKGZpeHR1cmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgcmVwbGFjZWRBY3Rpb246IHR5cGVvZiBhY3Rpb24gPSB7XG4gICAgICAgICAgICAgIC4uLmFjdGlvbixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBkZWxheU1zID1cbiAgICAgICAgICAgICAgdHlwZW9mIGZpeHR1cmUuZGVsYXkgPT09ICdmdW5jdGlvbicgP1xuICAgICAgICAgICAgICAgIGZpeHR1cmUuZGVsYXkoLi4uKGFyZ3MgYXMgYW55KSlcbiAgICAgICAgICAgICAgOiAoZml4dHVyZS5kZWxheSA/PyAwKTtcblxuICAgICAgICAgICAgaWYgKCdmZXRjaFJlc3BvbnNlJyBpbiBmaXh0dXJlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgZmV0Y2hSZXNwb25zZSB9ID0gZml4dHVyZTtcbiAgICAgICAgICAgICAgZml4dHVyZSA9IHtcbiAgICAgICAgICAgICAgICBlbmRwb2ludDogZml4dHVyZS5lbmRwb2ludCxcbiAgICAgICAgICAgICAgICByZXNwb25zZSguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBlbmRwb2ludCA9IChhY3Rpb24uZW5kcG9pbnQgYXMgYW55KS5leHRlbmQoe1xuICAgICAgICAgICAgICAgICAgICBmZXRjaFJlc3BvbnNlOiAoaW5wdXQ6IFJlcXVlc3RJbmZvLCBpbml0OiBSZXF1ZXN0SW5pdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldCA9IGZldGNoUmVzcG9uc2UuY2FsbCh0aGlzLCBpbnB1dCwgaW5pdCk7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBSZXNwb25zZShKU09OLnN0cmluZ2lmeShyZXQpLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogMjAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKGVuZHBvaW50IGFzIGFueSkoLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZldGNoID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWZpeHR1cmUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGZpeHR1cmUgZm91bmQnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBkZWxheUNvbGxhcHNlIGRldGVybWluZXMgd2hlbiB0aGUgZml4dHVyZSBmdW5jdGlvbiBpcyAnY29sbGFwc2VkJyAoYWthICdydW4nKVxuICAgICAgICAgICAgICAvLyBjb2xsYXBzZWQ6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvcGVuaGFnZW5faW50ZXJwcmV0YXRpb25cbiAgICAgICAgICAgICAgaWYgKGZpeHR1cmUuZGVsYXlDb2xsYXBzZSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBkZWxheU1zKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29sbGFwc2VGaXh0dXJlKFxuICAgICAgICAgICAgICAgIGZpeHR1cmUgYXMgYW55LFxuICAgICAgICAgICAgICAgIGFyZ3MgYXMgYW55LFxuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJjZXB0b3JEYXRhLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoIWZpeHR1cmUuZGVsYXlDb2xsYXBzZSAmJiBkZWxheU1zKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIGRlbGF5TXMpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocmVzdWx0LmVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgcmVzdWx0LnJlc3BvbnNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHQucmVzcG9uc2U7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiAocmVwbGFjZWRBY3Rpb24uZW5kcG9pbnQgYXMgYW55KS5leHRlbmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgcmVwbGFjZWRBY3Rpb24uZW5kcG9pbnQgPSAocmVwbGFjZWRBY3Rpb24uZW5kcG9pbnQgYXMgYW55KS5leHRlbmQoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZmV0Y2gsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFRPRE86IGZ1bGwgdGVzdGluZyBvZiB0aGlzXG4gICAgICAgICAgICAgIHJlcGxhY2VkQWN0aW9uLmVuZHBvaW50ID0gZmV0Y2ggYXMgYW55O1xuICAgICAgICAgICAgICAocmVwbGFjZWRBY3Rpb24uZW5kcG9pbnQgYXMgYW55KS5fX3Byb3RvX18gPSBhY3Rpb24uZW5kcG9pbnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFRPRE86IG1ha2Ugc3VwZXIuZGlzcGF0Y2ggKG9uY2Ugd2UgZHJvcCBzdXBwb3J0IGZvciBkZXN0cnVjdHVyaW5nKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BhdGNoKHJlcGxhY2VkQWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gVE9ETzogbWFrZSBzdXBlci5kaXNwYXRjaCAob25jZSB3ZSBkcm9wIHN1cHBvcnQgZm9yIGRlc3RydWN0dXJpbmcpXG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwYXRjaChhY3Rpb24pO1xuICAgICAgfSkgYXMgYW55O1xuICAgIH1cbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBLFNBQ0VBLFdBQVcsUUFJTixhQUFhO0FBQ3BCLFNBQVNDLGVBQWUsUUFBUSxzQkFBc0I7QUFDdEQsU0FBU0MsZ0JB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
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export async function collapseFixture(fixture, args, interceptorData) {
|
|
2
|
+
let error = 'error' in fixture ? fixture.error : false;
|
|
3
|
+
let response = fixture.response;
|
|
4
|
+
if (typeof fixture.response === 'function') {
|
|
5
|
+
try {
|
|
6
|
+
response = await fixture.response.apply(interceptorData, args);
|
|
7
|
+
// dispatch goes through user-code that can sometimes fail.
|
|
8
|
+
// let's ensure we always handle errors
|
|
9
|
+
} catch (e) {
|
|
10
|
+
response = e;
|
|
11
|
+
error = true;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return {
|
|
15
|
+
response,
|
|
16
|
+
error
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb2xsYXBzZUZpeHR1cmUiLCJmaXh0dXJlIiwiYXJncyIsImludGVyY2VwdG9yRGF0YSIsImVycm9yIiwicmVzcG9uc2UiLCJhcHBseSIsImUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9jay9jb2xsYXBzZUZpeHR1cmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBGaXh0dXJlLCBSZXNwb25zZUludGVyY2VwdG9yIH0gZnJvbSAnLi9maXh0dXJlVHlwZXMuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29sbGFwc2VGaXh0dXJlKFxuICBmaXh0dXJlOiBGaXh0dXJlIHwgUmVzcG9uc2VJbnRlcmNlcHRvcixcbiAgYXJnczogYW55W10sXG4gIGludGVyY2VwdG9yRGF0YTogYW55LFxuKSB7XG4gIGxldCBlcnJvciA9ICdlcnJvcicgaW4gZml4dHVyZSA/IGZpeHR1cmUuZXJyb3IgOiBmYWxzZTtcbiAgbGV0IHJlc3BvbnNlID0gZml4dHVyZS5yZXNwb25zZTtcbiAgaWYgKHR5cGVvZiBmaXh0dXJlLnJlc3BvbnNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5yZXNwb25zZS5hcHBseShpbnRlcmNlcHRvckRhdGEsIGFyZ3MpO1xuICAgICAgLy8gZGlzcGF0Y2ggZ29lcyB0aHJvdWdoIHVzZXItY29kZSB0aGF0IGNhbiBzb21ldGltZXMgZmFpbC5cbiAgICAgIC8vIGxldCdzIGVuc3VyZSB3ZSBhbHdheXMgaGFuZGxlIGVycm9yc1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgcmVzcG9uc2UgPSBlO1xuICAgICAgZXJyb3IgPSB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4geyByZXNwb25zZSwgZXJyb3IgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxlQUFlQSxlQUFlQSxDQUNuQ0MsT0FBc0MsRUFDdENDLElBQVcsRUFDWEMsZUFBb0IsRUFDcEI7RUFDQSxJQUFJQyxLQUFLLEdBQUcsT0FBTyxJQUFJSCxPQUFPLEdBQUdBLE9BQU8sQ0FBQ0csS0FBSyxHQUFHLEtBQUs7RUFDdEQsSUFBSUMsUUFBUSxHQUFHSixPQUFPLENBQUNJLFFBQVE7RUFDL0IsSUFBSSxPQUFPSixPQUFPLENBQUNJLFFBQVEsS0FBSyxVQUFVLEVBQUU7SUFDMUMsSUFBSTtNQUNGQSxRQUFRLEdBQUcsTUFBTUosT0FBTyxDQUFDSSxRQUFRLENBQUNDLEtBQUssQ0FBQ0gsZUFBZSxFQUFFRCxJQUFJLENBQUM7TUFDOUQ7TUFDQTtJQUNGLENBQUMsQ0FBQyxPQUFPSyxDQUFNLEVBQUU7TUFDZkYsUUFBUSxHQUFHRSxDQUFDO01BQ1pILEtBQUssR0FBRyxJQUFJO0lBQ2Q7RUFDRjtFQUNBLE9BQU87SUFBRUMsUUFBUTtJQUFFRDtFQUFNLENBQUM7QUFDNUIiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export function createFixtureMap(fixtures = []) {
|
|
2
|
+
const map = new Map();
|
|
3
|
+
const computed = [];
|
|
4
|
+
for (const fixture of fixtures) {
|
|
5
|
+
if ('args' in fixture) {
|
|
6
|
+
if (typeof fixture.response !== 'function') {
|
|
7
|
+
const key = fixture.endpoint.key(...fixture.args);
|
|
8
|
+
map.set(key, fixture);
|
|
9
|
+
} else {
|
|
10
|
+
// this has to be a typo. probably needs to remove args
|
|
11
|
+
console.warn(`Fixture found with function response, and explicit args. Interceptors should not specify args.
|
|
12
|
+
${fixture.endpoint.name}: ${JSON.stringify(fixture.args)}
|
|
13
|
+
|
|
14
|
+
Treating as Interceptor`);
|
|
15
|
+
computed.push(fixture);
|
|
16
|
+
}
|
|
17
|
+
} else {
|
|
18
|
+
computed.push(fixture);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return [map, computed];
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVGaXh0dXJlTWFwIiwiZml4dHVyZXMiLCJtYXAiLCJNYXAiLCJjb21wdXRlZCIsImZpeHR1cmUiLCJyZXNwb25zZSIsImtleSIsImVuZHBvaW50IiwiYXJncyIsInNldCIsImNvbnNvbGUiLCJ3YXJuIiwibmFtZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJwdXNoIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vY2svY3JlYXRlRml4dHVyZU1hcC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZpeHR1cmUsIEludGVyY2VwdG9yIH0gZnJvbSAnLi9maXh0dXJlVHlwZXMuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRml4dHVyZU1hcChmaXh0dXJlczogKEZpeHR1cmUgfCBJbnRlcmNlcHRvcilbXSA9IFtdKSB7XG4gIGNvbnN0IG1hcDogTWFwPHN0cmluZywgRml4dHVyZT4gPSBuZXcgTWFwKCk7XG4gIGNvbnN0IGNvbXB1dGVkOiBJbnRlcmNlcHRvcltdID0gW107XG4gIGZvciAoY29uc3QgZml4dHVyZSBvZiBmaXh0dXJlcykge1xuICAgIGlmICgnYXJncycgaW4gZml4dHVyZSkge1xuICAgICAgaWYgKHR5cGVvZiBmaXh0dXJlLnJlc3BvbnNlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGZpeHR1cmUuZW5kcG9pbnQua2V5KC4uLmZpeHR1cmUuYXJncyk7XG4gICAgICAgIG1hcC5zZXQoa2V5LCBmaXh0dXJlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRoaXMgaGFzIHRvIGJlIGEgdHlwby4gcHJvYmFibHkgbmVlZHMgdG8gcmVtb3ZlIGFyZ3NcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBGaXh0dXJlIGZvdW5kIHdpdGggZnVuY3Rpb24gcmVzcG9uc2UsIGFuZCBleHBsaWNpdCBhcmdzLiBJbnRlcmNlcHRvcnMgc2hvdWxkIG5vdCBzcGVjaWZ5IGFyZ3MuXG4ke2ZpeHR1cmUuZW5kcG9pbnQubmFtZX06ICR7SlNPTi5zdHJpbmdpZnkoZml4dHVyZS5hcmdzKX1cblxuVHJlYXRpbmcgYXMgSW50ZXJjZXB0b3JgLFxuICAgICAgICApO1xuICAgICAgICBjb21wdXRlZC5wdXNoKGZpeHR1cmUgYXMgYW55KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29tcHV0ZWQucHVzaChmaXh0dXJlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFttYXAsIGNvbXB1dGVkXSBhcyBjb25zdDtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxTQUFTQSxnQkFBZ0JBLENBQUNDLFFBQW1DLEdBQUcsRUFBRSxFQUFFO0VBQ3pFLE1BQU1DLEdBQXlCLEdBQUcsSUFBSUMsR0FBRyxDQUFDLENBQUM7RUFDM0MsTUFBTUMsUUFBdUIsR0FBRyxFQUFFO0VBQ2xDLEtBQUssTUFBTUMsT0FBTyxJQUFJSixRQUFRLEVBQUU7SUFDOUIsSUFBSSxNQUFNLElBQUlJLE9BQU8sRUFBRTtNQUNyQixJQUFJLE9BQU9BLE9BQU8sQ0FBQ0MsUUFBUSxLQUFLLFVBQVUsRUFBRTtRQUMxQyxNQUFNQyxHQUFHLEdBQUdGLE9BQU8sQ0FBQ0csUUFBUSxDQUFDRCxHQUFHLENBQUMsR0FBR0YsT0FBTyxDQUFDSSxJQUFJLENBQUM7UUFDakRQLEdBQUcsQ0FBQ1EsR0FBRyxDQUFDSCxHQUFHLEVBQUVGLE9BQU8sQ0FBQztNQUN2QixDQUFDLE1BQU07UUFDTDtRQUNBTSxPQUFPLENBQUNDLElBQUksQ0FDVjtBQUNWLEVBQUVQLE9BQU8sQ0FBQ0csUUFBUSxDQUFDSyxJQUFJLEtBQUtDLElBQUksQ0FBQ0MsU0FBUyxDQUFDVixPQUFPLENBQUNJLElBQUksQ0FBQztBQUN4RDtBQUNBLHdCQUNRLENBQUM7UUFDREwsUUFBUSxDQUFDWSxJQUFJLENBQUNYLE9BQWMsQ0FBQztNQUMvQjtJQUNGLENBQUMsTUFBTTtNQUNMRCxRQUFRLENBQUNZLElBQUksQ0FBQ1gsT0FBTyxDQUFDO0lBQ3hCO0VBQ0Y7RUFDQSxPQUFPLENBQUNILEdBQUcsRUFBRUUsUUFBUSxDQUFDO0FBQ3hCIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vY2svZml4dHVyZVR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW5kcG9pbnRJbnRlcmZhY2UsIFJlc29sdmVUeXBlIH0gZnJvbSAnQGRhdGEtY2xpZW50L2VuZHBvaW50JztcblxudHlwZSBVcGRhdGVyID0gKFxuICByZXN1bHQ6IGFueSxcbiAgLi4uYXJnczogYW55XG4pID0+IFJlY29yZDxzdHJpbmcsICguLi5hcmdzOiBhbnkpID0+IGFueT47XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VjY2Vzc0ZpeHR1cmVFbmRwb2ludDxcbiAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYgeyB1cGRhdGU/OiBVcGRhdGVyIH0gPSBFbmRwb2ludEludGVyZmFjZSxcbj4ge1xuICByZWFkb25seSBlbmRwb2ludDogRTtcbiAgcmVhZG9ubHkgYXJnczogUGFyYW1ldGVyczxFPjtcbiAgcmVhZG9ubHkgcmVzcG9uc2U6XG4gICAgfCBSZXNvbHZlVHlwZTxFPlxuICAgIHwgKCguLi5hcmdzOiBQYXJhbWV0ZXJzPEU+KSA9PiBSZXNvbHZlVHlwZTxFPik7XG4gIHJlYWRvbmx5IGVycm9yPzogZmFsc2U7XG4gIC8qKiBOdW1iZXIgb2YgbWlsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgcmVzb2x2aW5nICovXG4gIHJlYWRvbmx5IGRlbGF5PzogbnVtYmVyO1xuICAvKiogV2FpdHMgdG8gcnVuIGByZXNwb25zZSgpYCBhZnRlciBgZGVsYXlgIHRpbWUgKi9cbiAgcmVhZG9ubHkgZGVsYXlDb2xsYXBzZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VJbnRlcmNlcHRvcjxcbiAgVCA9IGFueSxcbiAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYge1xuICAgIHVwZGF0ZT86IFVwZGF0ZXI7XG4gICAgdGVzdEtleShrZXk6IHN0cmluZyk6IGJvb2xlYW47XG4gIH0gPSBFbmRwb2ludEludGVyZmFjZSAmIHsgdGVzdEtleShrZXk6IHN0cmluZyk6IGJvb2xlYW4gfSxcbj4ge1xuICByZWFkb25seSBlbmRwb2ludDogRTtcbiAgcmVzcG9uc2UodGhpczogVCwgLi4uYXJnczogUGFyYW1ldGVyczxFPik6IFJlc29sdmVUeXBlPEU+O1xuICAvKiogTnVtYmVyIG9mIG1pbGlzZWNvbmRzIChvciBmdW5jdGlvbiB0aGF0IHJldHVybnMpIHRvIHdhaXQgYmVmb3JlIHJlc29sdmluZyAqL1xuICByZWFkb25seSBkZWxheT86IG51bWJlciB8ICgoLi4uYXJnczogUGFyYW1ldGVyczxFPikgPT4gbnVtYmVyKTtcbiAgLyoqIFdhaXRzIHRvIHJ1biBgcmVzcG9uc2UoKWAgYWZ0ZXIgYGRlbGF5YCB0aW1lICovXG4gIHJlYWRvbmx5IGRlbGF5Q29sbGFwc2U/OiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBGZXRjaEludGVyY2VwdG9yPFxuICBUID0gYW55LFxuICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7XG4gICAgdXBkYXRlPzogVXBkYXRlcjtcbiAgICB0ZXN0S2V5KGtleTogc3RyaW5nKTogYm9vbGVhbjtcbiAgICBmZXRjaFJlc3BvbnNlKGlucHV0OiBSZXF1ZXN0SW5mbywgaW5pdDogUmVxdWVzdEluaXQpOiBQcm9taXNlPFJlc3BvbnNlPjtcbiAgICBleHRlbmQob3B0aW9uczogYW55KTogYW55O1xuICB9ID0gRW5kcG9pbnRJbnRlcmZhY2UgJiB7XG4gICAgdGVzdEtleShrZXk6IHN0cmluZyk6IGJvb2xlYW47XG4gICAgZmV0Y2hSZXNwb25zZShpbnB1dDogUmVxdWVzdEluZm8sIGluaXQ6IFJlcXVlc3RJbml0KTogUHJvbWlzZTxSZXNwb25zZT47XG4gICAgZXh0ZW5kKG9wdGlvbnM6IGFueSk6IGFueTtcbiAgfSxcbj4ge1xuICByZWFkb25seSBlbmRwb2ludDogRTtcbiAgZmV0Y2hSZXNwb25zZSh0aGlzOiBULCBpbnB1dDogUmVxdWVzdEluZm8sIGluaXQ6IFJlcXVlc3RJbml0KTogUmVzb2x2ZVR5cGU8RT47XG4gIC8qKiBOdW1iZXIgb2YgbWlsaXNlY29uZHMgKG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucykgdG8gd2FpdCBiZWZvcmUgcmVzb2x2aW5nICovXG4gIHJlYWRvbmx5IGRlbGF5PzogbnVtYmVyIHwgKCguLi5hcmdzOiBQYXJhbWV0ZXJzPEU+KSA9PiBudW1iZXIpO1xuICAvKiogV2FpdHMgdG8gcnVuIGByZXNwb25zZSgpYCBhZnRlciBgZGVsYXlgIHRpbWUgKi9cbiAgcmVhZG9ubHkgZGVsYXlDb2xsYXBzZT86IGJvb2xlYW47XG59XG4vKiogSW50ZXJjZXB0b3JzIG1hdGNoIGFuZCBjb21wdXRlIGR5bmFtaWMgcmVzcG9uc2VzIGJhc2VkIG9uIGFyZ3NcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9GaXh0dXJlcyNpbnRlcmNlcHRvclxuICovXG5leHBvcnQgdHlwZSBJbnRlcmNlcHRvcjxcbiAgVCA9IGFueSxcbiAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYge1xuICAgIHVwZGF0ZT86IFVwZGF0ZXI7XG4gICAgdGVzdEtleShrZXk6IHN0cmluZyk6IGJvb2xlYW47XG4gICAgZmV0Y2hSZXNwb25zZT8oaW5wdXQ6IFJlcXVlc3RJbmZvLCBpbml0OiBSZXF1ZXN0SW5pdCk6IFByb21pc2U8UmVzcG9uc2U+O1xuICAgIGV4dGVuZD8ob3B0aW9uczogYW55KTogYW55O1xuICB9ID0gRW5kcG9pbnRJbnRlcmZhY2UgJiB7XG4gICAgdGVzdEtleShrZXk6IHN0cmluZyk6IGJvb2xlYW47XG4gICAgZmV0Y2hSZXNwb25zZShpbnB1dDogUmVxdWVzdEluZm8sIGluaXQ6IFJlcXVlc3RJbml0KTogUHJvbWlzZTxSZXNwb25zZT47XG4gICAgZXh0ZW5kKG9wdGlvbnM6IGFueSk6IGFueTtcbiAgfSxcbj4gPVxuICB8IFJlc3BvbnNlSW50ZXJjZXB0b3I8VCwgRT5cbiAgfCAoRSBleHRlbmRzIChcbiAgICAgIHtcbiAgICAgICAgZmV0Y2hSZXNwb25zZShpbnB1dDogUmVxdWVzdEluZm8sIGluaXQ6IFJlcXVlc3RJbml0KTogUHJvbWlzZTxSZXNwb25zZT47XG4gICAgICAgIGV4dGVuZChvcHRpb25zOiBhbnkpOiBhbnk7XG4gICAgICB9XG4gICAgKSA/XG4gICAgICBGZXRjaEludGVyY2VwdG9yPFQsIEU+XG4gICAgOiBuZXZlcik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JGaXh0dXJlRW5kcG9pbnQ8XG4gIEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZSAmIHsgdXBkYXRlPzogVXBkYXRlciB9ID0gRW5kcG9pbnRJbnRlcmZhY2UsXG4+IHtcbiAgcmVhZG9ubHkgZW5kcG9pbnQ6IEU7XG4gIHJlYWRvbmx5IGFyZ3M6IFBhcmFtZXRlcnM8RT47XG4gIHJlYWRvbmx5IHJlc3BvbnNlOiBhbnk7XG4gIHJlYWRvbmx5IGVycm9yOiB0cnVlO1xuICAvKiogTnVtYmVyIG9mIG1pbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIHJlc29sdmluZyAqL1xuICByZWFkb25seSBkZWxheT86IG51bWJlcjtcbiAgLyoqIFdhaXRzIHRvIHJ1biBgcmVzcG9uc2UoKWAgYWZ0ZXIgYGRlbGF5YCB0aW1lICovXG4gIHJlYWRvbmx5IGRlbGF5Q29sbGFwc2U/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBGaXh0dXJlRW5kcG9pbnQ8XG4gIEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZSAmIHsgdXBkYXRlPzogVXBkYXRlciB9ID0gRW5kcG9pbnRJbnRlcmZhY2UsXG4+ID0gU3VjY2Vzc0ZpeHR1cmVFbmRwb2ludDxFPiB8IEVycm9yRml4dHVyZUVuZHBvaW50PEU+O1xuXG4vKiogUmVwcmVzZW50cyBhIHN1Y2Nlc3NmdWwgcmVzcG9uc2VcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9GaXh0dXJlcyNzdWNjZXNzZml4dHVyZVxuICovXG5leHBvcnQgdHlwZSBTdWNjZXNzRml4dHVyZTxcbiAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYgeyB1cGRhdGU/OiBVcGRhdGVyIH0gPSBFbmRwb2ludEludGVyZmFjZSxcbj4gPSBTdWNjZXNzRml4dHVyZUVuZHBvaW50PEU+O1xuLyoqIFJlcHJlc2VudHMgYSBmYWlsZWQvZXJyb3JlZCByZXNwb25zZVxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0ZpeHR1cmVzI2Vycm9yZml4dHVyZXNcbiAqL1xuZXhwb3J0IHR5cGUgRXJyb3JGaXh0dXJlPFxuICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7IHVwZGF0ZT86IFVwZGF0ZXIgfSA9IEVuZHBvaW50SW50ZXJmYWNlLFxuPiA9IEVycm9yRml4dHVyZUVuZHBvaW50PEU+O1xuLyoqIFJlcHJlc2VudHMgYSBzdGF0aWMgcmVzcG9uc2VcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9GaXh0dXJlc1xuICovXG5leHBvcnQgdHlwZSBGaXh0dXJlPFxuICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7IHVwZGF0ZT86IFVwZGF0ZXIgfSA9IEVuZHBvaW50SW50ZXJmYWNlLFxuPiA9IEZpeHR1cmVFbmRwb2ludDxFPjtcbiJdLCJtYXBwaW5ncyI6IiIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { MockController } from './MockController.js';
|
|
2
|
+
export { collapseFixture } from './collapseFixture.js';
|
|
3
|
+
export { createFixtureMap } from './createFixtureMap.js';
|
|
4
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNb2NrQ29udHJvbGxlciIsImNvbGxhcHNlRml4dHVyZSIsImNyZWF0ZUZpeHR1cmVNYXAiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9jay9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBNb2NrQ29udHJvbGxlciB9IGZyb20gJy4vTW9ja0NvbnRyb2xsZXIuanMnO1xuZXhwb3J0IHR5cGUgeyBNb2NrUHJvcHMgfSBmcm9tICcuL21vY2tUeXBlcy5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEZpeHR1cmUsXG4gIFN1Y2Nlc3NGaXh0dXJlLFxuICBFcnJvckZpeHR1cmUsXG4gIEludGVyY2VwdG9yLFxuICBSZXNwb25zZUludGVyY2VwdG9yLFxuICBGZXRjaEludGVyY2VwdG9yLFxuICBGaXh0dXJlRW5kcG9pbnQsXG4gIFN1Y2Nlc3NGaXh0dXJlRW5kcG9pbnQsXG4gIEVycm9yRml4dHVyZUVuZHBvaW50LFxufSBmcm9tICcuL2ZpeHR1cmVUeXBlcy5qcyc7XG5leHBvcnQgeyBjb2xsYXBzZUZpeHR1cmUgfSBmcm9tICcuL2NvbGxhcHNlRml4dHVyZS5qcyc7XG5leHBvcnQgeyBjcmVhdGVGaXh0dXJlTWFwIH0gZnJvbSAnLi9jcmVhdGVGaXh0dXJlTWFwLmpzJztcbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsY0FBYyxRQUFRLHFCQUFxQjtBQWFwRCxTQUFTQyxlQUFlLFFBQVEsc0JBQXNCO0FBQ3RELFNBQVNDLGdCQUFnQixRQUFRLHVCQUF1QiIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vY2svbW9ja1R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRml4dHVyZSwgSW50ZXJjZXB0b3IgfSBmcm9tICcuL2ZpeHR1cmVUeXBlcy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9ja1Byb3BzPFQgPSBhbnk+IHtcbiAgcmVhZG9ubHkgZml4dHVyZXM/OiAoRml4dHVyZSB8IEludGVyY2VwdG9yPFQ+KVtdO1xuICBnZXRJbml0aWFsSW50ZXJjZXB0b3JEYXRhPzogKCkgPT4gVDtcbn1cbiJdLCJtYXBwaW5ncyI6IiIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Controller } from '../index.js';
|
|
2
|
+
import { MockProps } from './mockTypes.js';
|
|
3
|
+
export declare function MockController<TBase extends typeof Controller, T>(Base: TBase, { fixtures, getInitialInterceptorData, }: MockProps<T>): TBase;
|
|
4
|
+
//# sourceMappingURL=MockController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MockController.d.ts","sourceRoot":"","sources":["../../src/mock/MockController.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EAGX,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,wBAAgB,cAAc,CAAC,KAAK,SAAS,OAAO,UAAU,EAAE,CAAC,EAC/D,IAAI,EAAE,KAAK,EACX,EACE,QAAa,EACb,yBAA6C,GAC9C,EAAE,SAAS,CAAC,CAAC,CAAC,GACd,KAAK,CAgIP"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { actionTypes } from '../index.js';
|
|
2
|
+
import { collapseFixture } from './collapseFixture.js';
|
|
3
|
+
import { createFixtureMap } from './createFixtureMap.js';
|
|
4
|
+
export function MockController(Base, {
|
|
5
|
+
fixtures = [],
|
|
6
|
+
getInitialInterceptorData = () => ({})
|
|
7
|
+
}) {
|
|
8
|
+
const [fixtureMap, interceptors] = createFixtureMap(fixtures);
|
|
9
|
+
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
11
|
+
// @ts-ignore
|
|
12
|
+
return class MockedController extends Base {
|
|
13
|
+
constructor(...args) {
|
|
14
|
+
super(...args);
|
|
15
|
+
|
|
16
|
+
// legacy compatibility
|
|
17
|
+
// TODO: drop when drop support for destructuring (0.14 and below)
|
|
18
|
+
// legacy compatibility (re-declaration)
|
|
19
|
+
// TODO: drop when drop support for destructuring (0.14 and below)
|
|
20
|
+
this.fixtureMap = fixtureMap;
|
|
21
|
+
this.interceptors = interceptors;
|
|
22
|
+
this.interceptorData = getInitialInterceptorData();
|
|
23
|
+
if (!this._dispatch) {
|
|
24
|
+
this._dispatch = args[0].dispatch;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// legacy compatibility - we need this to work with 0.14 and below as they do not have this setter
|
|
29
|
+
// TODO: drop when drop support for destructuring (0.14 and below)
|
|
30
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
31
|
+
// @ts-ignore
|
|
32
|
+
set dispatch(dispatch) {
|
|
33
|
+
this._dispatch = dispatch;
|
|
34
|
+
}
|
|
35
|
+
get dispatch() {
|
|
36
|
+
return action => {
|
|
37
|
+
var _actionTypes$FETCH;
|
|
38
|
+
// support legacy that has _TYPE suffix
|
|
39
|
+
if (action.type === ((_actionTypes$FETCH = actionTypes.FETCH) != null ? _actionTypes$FETCH : actionTypes.FETCH_TYPE)) {
|
|
40
|
+
// eslint-disable-next-line prefer-const
|
|
41
|
+
let {
|
|
42
|
+
key,
|
|
43
|
+
args
|
|
44
|
+
} = action;
|
|
45
|
+
let fixture;
|
|
46
|
+
if (this.fixtureMap.has(key)) {
|
|
47
|
+
fixture = this.fixtureMap.get(key);
|
|
48
|
+
if (!args) args = fixture.args;
|
|
49
|
+
// exact matches take priority; now test ComputedFixture
|
|
50
|
+
} else {
|
|
51
|
+
for (const cfix of this.interceptors) {
|
|
52
|
+
if (cfix.endpoint.testKey(key)) {
|
|
53
|
+
fixture = cfix;
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// we have a match
|
|
59
|
+
if (fixture !== undefined) {
|
|
60
|
+
var _fixture$delay;
|
|
61
|
+
const replacedAction = {
|
|
62
|
+
...action
|
|
63
|
+
};
|
|
64
|
+
const delayMs = typeof fixture.delay === 'function' ? fixture.delay(...args) : (_fixture$delay = fixture.delay) != null ? _fixture$delay : 0;
|
|
65
|
+
if ('fetchResponse' in fixture) {
|
|
66
|
+
const {
|
|
67
|
+
fetchResponse
|
|
68
|
+
} = fixture;
|
|
69
|
+
fixture = {
|
|
70
|
+
endpoint: fixture.endpoint,
|
|
71
|
+
response(...args) {
|
|
72
|
+
const endpoint = action.endpoint.extend({
|
|
73
|
+
fetchResponse: (input, init) => {
|
|
74
|
+
const ret = fetchResponse.call(this, input, init);
|
|
75
|
+
return Promise.resolve(new Response(JSON.stringify(ret), {
|
|
76
|
+
status: 200,
|
|
77
|
+
headers: new Headers({
|
|
78
|
+
'Content-Type': 'application/json'
|
|
79
|
+
})
|
|
80
|
+
}));
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
return endpoint(...args);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
const fetch = async () => {
|
|
88
|
+
if (!fixture) {
|
|
89
|
+
throw new Error('No fixture found');
|
|
90
|
+
}
|
|
91
|
+
// delayCollapse determines when the fixture function is 'collapsed' (aka 'run')
|
|
92
|
+
// collapsed: https://en.wikipedia.org/wiki/Copenhagen_interpretation
|
|
93
|
+
if (fixture.delayCollapse) {
|
|
94
|
+
await new Promise(resolve => setTimeout(resolve, delayMs));
|
|
95
|
+
}
|
|
96
|
+
const result = await collapseFixture(fixture, args, this.interceptorData);
|
|
97
|
+
if (!fixture.delayCollapse && delayMs) {
|
|
98
|
+
await new Promise(resolve => setTimeout(resolve, delayMs));
|
|
99
|
+
}
|
|
100
|
+
if (result.error) {
|
|
101
|
+
throw result.response;
|
|
102
|
+
}
|
|
103
|
+
return result.response;
|
|
104
|
+
};
|
|
105
|
+
if (typeof replacedAction.endpoint.extend === 'function') {
|
|
106
|
+
replacedAction.endpoint = replacedAction.endpoint.extend({
|
|
107
|
+
fetch
|
|
108
|
+
});
|
|
109
|
+
} else {
|
|
110
|
+
// TODO: full testing of this
|
|
111
|
+
replacedAction.endpoint = fetch;
|
|
112
|
+
replacedAction.endpoint.__proto__ = action.endpoint;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// TODO: make super.dispatch (once we drop support for destructuring)
|
|
116
|
+
return this._dispatch(replacedAction);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// TODO: make super.dispatch (once we drop support for destructuring)
|
|
120
|
+
return this._dispatch(action);
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhY3Rpb25UeXBlcyIsImNvbGxhcHNlRml4dHVyZSIsImNyZWF0ZUZpeHR1cmVNYXAiLCJNb2NrQ29udHJvbGxlciIsIkJhc2UiLCJmaXh0dXJlcyIsImdldEluaXRpYWxJbnRlcmNlcHRvckRhdGEiLCJmaXh0dXJlTWFwIiwiaW50ZXJjZXB0b3JzIiwiTW9ja2VkQ29udHJvbGxlciIsImNvbnN0cnVjdG9yIiwiYXJncyIsImludGVyY2VwdG9yRGF0YSIsIl9kaXNwYXRjaCIsImRpc3BhdGNoIiwiYWN0aW9uIiwiX2FjdGlvblR5cGVzJEZFVENIIiwidHlwZSIsIkZFVENIIiwiRkVUQ0hfVFlQRSIsImtleSIsImZpeHR1cmUiLCJoYXMiLCJnZXQiLCJjZml4IiwiZW5kcG9pbnQiLCJ0ZXN0S2V5IiwidW5kZWZpbmVkIiwiX2ZpeHR1cmUkZGVsYXkiLCJyZXBsYWNlZEFjdGlvbiIsImRlbGF5TXMiLCJkZWxheSIsImZldGNoUmVzcG9uc2UiLCJyZXNwb25zZSIsImV4dGVuZCIsImlucHV0IiwiaW5pdCIsInJldCIsImNhbGwiLCJQcm9taXNlIiwicmVzb2x2ZSIsIlJlc3BvbnNlIiwiSlNPTiIsInN0cmluZ2lmeSIsInN0YXR1cyIsImhlYWRlcnMiLCJIZWFkZXJzIiwiZmV0Y2giLCJFcnJvciIsImRlbGF5Q29sbGFwc2UiLCJzZXRUaW1lb3V0IiwicmVzdWx0IiwiZXJyb3IiLCJfX3Byb3RvX18iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9jay9Nb2NrQ29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBhY3Rpb25UeXBlcyxcbiAgQ29udHJvbGxlcixcbiAgRGF0YUNsaWVudERpc3BhdGNoLFxuICBHZW5lcmljRGlzcGF0Y2gsXG59IGZyb20gJy4uL2luZGV4LmpzJztcbmltcG9ydCB7IGNvbGxhcHNlRml4dHVyZSB9IGZyb20gJy4vY29sbGFwc2VGaXh0dXJlLmpzJztcbmltcG9ydCB7IGNyZWF0ZUZpeHR1cmVNYXAgfSBmcm9tICcuL2NyZWF0ZUZpeHR1cmVNYXAuanMnO1xuaW1wb3J0IHR5cGUgeyBGaXh0dXJlLCBJbnRlcmNlcHRvciB9IGZyb20gJy4vZml4dHVyZVR5cGVzLmpzJztcbmltcG9ydCB7IE1vY2tQcm9wcyB9IGZyb20gJy4vbW9ja1R5cGVzLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIE1vY2tDb250cm9sbGVyPFRCYXNlIGV4dGVuZHMgdHlwZW9mIENvbnRyb2xsZXIsIFQ+KFxuICBCYXNlOiBUQmFzZSxcbiAge1xuICAgIGZpeHR1cmVzID0gW10sXG4gICAgZ2V0SW5pdGlhbEludGVyY2VwdG9yRGF0YSA9ICgpID0+ICh7fSkgYXMgYW55LFxuICB9OiBNb2NrUHJvcHM8VD4sXG4pOiBUQmFzZSB7XG4gIGNvbnN0IFtmaXh0dXJlTWFwLCBpbnRlcmNlcHRvcnNdID0gY3JlYXRlRml4dHVyZU1hcChmaXh0dXJlcyk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtaWdub3JlXG4gIHJldHVybiBjbGFzcyBNb2NrZWRDb250cm9sbGVyPFxuICAgIEQgZXh0ZW5kcyBHZW5lcmljRGlzcGF0Y2ggPSBEYXRhQ2xpZW50RGlzcGF0Y2gsXG4gID4gZXh0ZW5kcyBCYXNlPEQ+IHtcbiAgICAvLyBsZWdhY3kgY29tcGF0aWJpbGl0eSAocmUtZGVjbGFyYXRpb24pXG4gICAgLy8gVE9ETzogZHJvcCB3aGVuIGRyb3Agc3VwcG9ydCBmb3IgZGVzdHJ1Y3R1cmluZyAoMC4xNCBhbmQgYmVsb3cpXG4gICAgZGVjbGFyZSBwcm90ZWN0ZWQgX2Rpc3BhdGNoOiBEO1xuXG4gICAgZml4dHVyZU1hcDogTWFwPHN0cmluZywgRml4dHVyZT4gPSBmaXh0dXJlTWFwO1xuICAgIGludGVyY2VwdG9yczogSW50ZXJjZXB0b3I8YW55PltdID0gaW50ZXJjZXB0b3JzO1xuICAgIGludGVyY2VwdG9yRGF0YTogVCA9IGdldEluaXRpYWxJbnRlcmNlcHRvckRhdGEoKTtcblxuICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICBzdXBlciguLi5hcmdzKTtcblxuICAgICAgLy8gbGVnYWN5IGNvbXBhdGliaWxpdHlcbiAgICAgIC8vIFRPRE86IGRyb3Agd2hlbiBkcm9wIHN1cHBvcnQgZm9yIGRlc3RydWN0dXJpbmcgKDAuMTQgYW5kIGJlbG93KVxuICAgICAgaWYgKCF0aGlzLl9kaXNwYXRjaCkge1xuICAgICAgICB0aGlzLl9kaXNwYXRjaCA9IChhcmdzWzBdIGFzIGFueSkuZGlzcGF0Y2g7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gbGVnYWN5IGNvbXBhdGliaWxpdHkgLSB3ZSBuZWVkIHRoaXMgdG8gd29yayB3aXRoIDAuMTQgYW5kIGJlbG93IGFzIHRoZXkgZG8gbm90IGhhdmUgdGhpcyBzZXR0ZXJcbiAgICAvLyBUT0RPOiBkcm9wIHdoZW4gZHJvcCBzdXBwb3J0IGZvciBkZXN0cnVjdHVyaW5nICgwLjE0IGFuZCBiZWxvdylcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHNldCBkaXNwYXRjaChkaXNwYXRjaDogRCkge1xuICAgICAgdGhpcy5fZGlzcGF0Y2ggPSBkaXNwYXRjaDtcbiAgICB9XG5cbiAgICBnZXQgZGlzcGF0Y2goKTogRCB7XG4gICAgICByZXR1cm4gKChhY3Rpb246IFBhcmFtZXRlcnM8RD5bMF0pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgLy8gc3VwcG9ydCBsZWdhY3kgdGhhdCBoYXMgX1RZUEUgc3VmZml4XG4gICAgICAgIGlmIChhY3Rpb24udHlwZSA9PT0gKGFjdGlvblR5cGVzLkZFVENIID8/IGFjdGlvblR5cGVzLkZFVENIX1RZUEUpKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgICAgICAgIGxldCB7IGtleSwgYXJncyB9ID0gYWN0aW9uO1xuICAgICAgICAgIGxldCBmaXh0dXJlOiBGaXh0dXJlIHwgSW50ZXJjZXB0b3IgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKHRoaXMuZml4dHVyZU1hcC5oYXMoa2V5KSkge1xuICAgICAgICAgICAgZml4dHVyZSA9IHRoaXMuZml4dHVyZU1hcC5nZXQoa2V5KSBhcyBGaXh0dXJlO1xuICAgICAgICAgICAgaWYgKCFhcmdzKSBhcmdzID0gZml4dHVyZS5hcmdzO1xuICAgICAgICAgICAgLy8gZXhhY3QgbWF0Y2hlcyB0YWtlIHByaW9yaXR5OyBub3cgdGVzdCBDb21wdXRlZEZpeHR1cmVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjZml4IG9mIHRoaXMuaW50ZXJjZXB0b3JzKSB7XG4gICAgICAgICAgICAgIGlmIChjZml4LmVuZHBvaW50LnRlc3RLZXkoa2V5KSkge1xuICAgICAgICAgICAgICAgIGZpeHR1cmUgPSBjZml4O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIGhhdmUgYSBtYXRjaFxuICAgICAgICAgIGlmIChmaXh0dXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcGxhY2VkQWN0aW9uOiB0eXBlb2YgYWN0aW9uID0ge1xuICAgICAgICAgICAgICAuLi5hY3Rpb24sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgZGVsYXlNcyA9XG4gICAgICAgICAgICAgIHR5cGVvZiBmaXh0dXJlLmRlbGF5ID09PSAnZnVuY3Rpb24nID9cbiAgICAgICAgICAgICAgICBmaXh0dXJlLmRlbGF5KC4uLihhcmdzIGFzIGFueSkpXG4gICAgICAgICAgICAgIDogKGZpeHR1cmUuZGVsYXkgPz8gMCk7XG5cbiAgICAgICAgICAgIGlmICgnZmV0Y2hSZXNwb25zZScgaW4gZml4dHVyZSkge1xuICAgICAgICAgICAgICBjb25zdCB7IGZldGNoUmVzcG9uc2UgfSA9IGZpeHR1cmU7XG4gICAgICAgICAgICAgIGZpeHR1cmUgPSB7XG4gICAgICAgICAgICAgICAgZW5kcG9pbnQ6IGZpeHR1cmUuZW5kcG9pbnQsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UoLi4uYXJncykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZW5kcG9pbnQgPSAoYWN0aW9uLmVuZHBvaW50IGFzIGFueSkuZXh0ZW5kKHtcbiAgICAgICAgICAgICAgICAgICAgZmV0Y2hSZXNwb25zZTogKGlucHV0OiBSZXF1ZXN0SW5mbywgaW5pdDogUmVxdWVzdEluaXQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXQgPSBmZXRjaFJlc3BvbnNlLmNhbGwodGhpcywgaW5wdXQsIGluaXQpO1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgUmVzcG9uc2UoSlNPTi5zdHJpbmdpZnkocmV0KSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChlbmRwb2ludCBhcyBhbnkpKC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmZXRjaCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFmaXh0dXJlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBmaXh0dXJlIGZvdW5kJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gZGVsYXlDb2xsYXBzZSBkZXRlcm1pbmVzIHdoZW4gdGhlIGZpeHR1cmUgZnVuY3Rpb24gaXMgJ2NvbGxhcHNlZCcgKGFrYSAncnVuJylcbiAgICAgICAgICAgICAgLy8gY29sbGFwc2VkOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db3BlbmhhZ2VuX2ludGVycHJldGF0aW9uXG4gICAgICAgICAgICAgIGlmIChmaXh0dXJlLmRlbGF5Q29sbGFwc2UpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgZGVsYXlNcykpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbGxhcHNlRml4dHVyZShcbiAgICAgICAgICAgICAgICBmaXh0dXJlIGFzIGFueSxcbiAgICAgICAgICAgICAgICBhcmdzIGFzIGFueSxcbiAgICAgICAgICAgICAgICB0aGlzLmludGVyY2VwdG9yRGF0YSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKCFmaXh0dXJlLmRlbGF5Q29sbGFwc2UgJiYgZGVsYXlNcykge1xuICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBkZWxheU1zKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHJlc3VsdC5lcnJvcikge1xuICAgICAgICAgICAgICAgIHRocm93IHJlc3VsdC5yZXNwb25zZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlc3BvbnNlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgKHJlcGxhY2VkQWN0aW9uLmVuZHBvaW50IGFzIGFueSkuZXh0ZW5kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIHJlcGxhY2VkQWN0aW9uLmVuZHBvaW50ID0gKHJlcGxhY2VkQWN0aW9uLmVuZHBvaW50IGFzIGFueSkuZXh0ZW5kKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGZldGNoLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBUT0RPOiBmdWxsIHRlc3Rpbmcgb2YgdGhpc1xuICAgICAgICAgICAgICByZXBsYWNlZEFjdGlvbi5lbmRwb2ludCA9IGZldGNoIGFzIGFueTtcbiAgICAgICAgICAgICAgKHJlcGxhY2VkQWN0aW9uLmVuZHBvaW50IGFzIGFueSkuX19wcm90b19fID0gYWN0aW9uLmVuZHBvaW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBUT0RPOiBtYWtlIHN1cGVyLmRpc3BhdGNoIChvbmNlIHdlIGRyb3Agc3VwcG9ydCBmb3IgZGVzdHJ1Y3R1cmluZylcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kaXNwYXRjaChyZXBsYWNlZEFjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFRPRE86IG1ha2Ugc3VwZXIuZGlzcGF0Y2ggKG9uY2Ugd2UgZHJvcCBzdXBwb3J0IGZvciBkZXN0cnVjdHVyaW5nKVxuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGF0Y2goYWN0aW9uKTtcbiAgICAgIH0pIGFzIGFueTtcbiAgICB9XG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQ0VBLFdBQVcsUUFJTixhQUFhO0FBQ3BCLFNBQVNDLGVBQWUsUUFBUSxzQkFBc0I7QUFDdEQsU0FBU0MsZ0JBQWdCLFFBQVEsdUJB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
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Fixture, ResponseInterceptor } from './fixtureTypes.js';
|
|
2
|
+
export declare function collapseFixture(fixture: Fixture | ResponseInterceptor, args: any[], interceptorData: any): Promise<{
|
|
3
|
+
response: any;
|
|
4
|
+
error: boolean | undefined;
|
|
5
|
+
}>;
|
|
6
|
+
//# sourceMappingURL=collapseFixture.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collapseFixture.d.ts","sourceRoot":"","sources":["../../src/mock/collapseFixture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAEtE,wBAAsB,eAAe,CACnC,OAAO,EAAE,OAAO,GAAG,mBAAmB,EACtC,IAAI,EAAE,GAAG,EAAE,EACX,eAAe,EAAE,GAAG;;;GAerB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export async function collapseFixture(fixture, args, interceptorData) {
|
|
2
|
+
let error = 'error' in fixture ? fixture.error : false;
|
|
3
|
+
let response = fixture.response;
|
|
4
|
+
if (typeof fixture.response === 'function') {
|
|
5
|
+
try {
|
|
6
|
+
response = await fixture.response.apply(interceptorData, args);
|
|
7
|
+
// dispatch goes through user-code that can sometimes fail.
|
|
8
|
+
// let's ensure we always handle errors
|
|
9
|
+
} catch (e) {
|
|
10
|
+
response = e;
|
|
11
|
+
error = true;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return {
|
|
15
|
+
response,
|
|
16
|
+
error
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb2xsYXBzZUZpeHR1cmUiLCJmaXh0dXJlIiwiYXJncyIsImludGVyY2VwdG9yRGF0YSIsImVycm9yIiwicmVzcG9uc2UiLCJhcHBseSIsImUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9jay9jb2xsYXBzZUZpeHR1cmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBGaXh0dXJlLCBSZXNwb25zZUludGVyY2VwdG9yIH0gZnJvbSAnLi9maXh0dXJlVHlwZXMuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29sbGFwc2VGaXh0dXJlKFxuICBmaXh0dXJlOiBGaXh0dXJlIHwgUmVzcG9uc2VJbnRlcmNlcHRvcixcbiAgYXJnczogYW55W10sXG4gIGludGVyY2VwdG9yRGF0YTogYW55LFxuKSB7XG4gIGxldCBlcnJvciA9ICdlcnJvcicgaW4gZml4dHVyZSA/IGZpeHR1cmUuZXJyb3IgOiBmYWxzZTtcbiAgbGV0IHJlc3BvbnNlID0gZml4dHVyZS5yZXNwb25zZTtcbiAgaWYgKHR5cGVvZiBmaXh0dXJlLnJlc3BvbnNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5yZXNwb25zZS5hcHBseShpbnRlcmNlcHRvckRhdGEsIGFyZ3MpO1xuICAgICAgLy8gZGlzcGF0Y2ggZ29lcyB0aHJvdWdoIHVzZXItY29kZSB0aGF0IGNhbiBzb21ldGltZXMgZmFpbC5cbiAgICAgIC8vIGxldCdzIGVuc3VyZSB3ZSBhbHdheXMgaGFuZGxlIGVycm9yc1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgcmVzcG9uc2UgPSBlO1xuICAgICAgZXJyb3IgPSB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4geyByZXNwb25zZSwgZXJyb3IgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxlQUFlQSxlQUFlQSxDQUNuQ0MsT0FBc0MsRUFDdENDLElBQVcsRUFDWEMsZUFBb0IsRUFDcEI7RUFDQSxJQUFJQyxLQUFLLEdBQUcsT0FBTyxJQUFJSCxPQUFPLEdBQUdBLE9BQU8sQ0FBQ0csS0FBSyxHQUFHLEtBQUs7RUFDdEQsSUFBSUMsUUFBUSxHQUFHSixPQUFPLENBQUNJLFFBQVE7RUFDL0IsSUFBSSxPQUFPSixPQUFPLENBQUNJLFFBQVEsS0FBSyxVQUFVLEVBQUU7SUFDMUMsSUFBSTtNQUNGQSxRQUFRLEdBQUcsTUFBTUosT0FBTyxDQUFDSSxRQUFRLENBQUNDLEtBQUssQ0FBQ0gsZUFBZSxFQUFFRCxJQUFJLENBQUM7TUFDOUQ7TUFDQTtJQUNGLENBQUMsQ0FBQyxPQUFPSyxDQUFNLEVBQUU7TUFDZkYsUUFBUSxHQUFHRSxDQUFDO01BQ1pILEtBQUssR0FBRyxJQUFJO0lBQ2Q7RUFDRjtFQUNBLE9BQU87SUFBRUMsUUFBUTtJQUFFRDtFQUFNLENBQUM7QUFDNUIiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createFixtureMap.d.ts","sourceRoot":"","sources":["../../src/mock/createFixtureMap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE9D,wBAAgB,gBAAgB,CAAC,QAAQ,GAAE,CAAC,OAAO,GAAG,WAAW,CAAC,EAAO,kDAuBxE"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export function createFixtureMap(fixtures = []) {
|
|
2
|
+
const map = new Map();
|
|
3
|
+
const computed = [];
|
|
4
|
+
for (const fixture of fixtures) {
|
|
5
|
+
if ('args' in fixture) {
|
|
6
|
+
if (typeof fixture.response !== 'function') {
|
|
7
|
+
const key = fixture.endpoint.key(...fixture.args);
|
|
8
|
+
map.set(key, fixture);
|
|
9
|
+
} else {
|
|
10
|
+
// this has to be a typo. probably needs to remove args
|
|
11
|
+
console.warn(`Fixture found with function response, and explicit args. Interceptors should not specify args.
|
|
12
|
+
${fixture.endpoint.name}: ${JSON.stringify(fixture.args)}
|
|
13
|
+
|
|
14
|
+
Treating as Interceptor`);
|
|
15
|
+
computed.push(fixture);
|
|
16
|
+
}
|
|
17
|
+
} else {
|
|
18
|
+
computed.push(fixture);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return [map, computed];
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVGaXh0dXJlTWFwIiwiZml4dHVyZXMiLCJtYXAiLCJNYXAiLCJjb21wdXRlZCIsImZpeHR1cmUiLCJyZXNwb25zZSIsImtleSIsImVuZHBvaW50IiwiYXJncyIsInNldCIsImNvbnNvbGUiLCJ3YXJuIiwibmFtZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJwdXNoIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vY2svY3JlYXRlRml4dHVyZU1hcC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZpeHR1cmUsIEludGVyY2VwdG9yIH0gZnJvbSAnLi9maXh0dXJlVHlwZXMuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRml4dHVyZU1hcChmaXh0dXJlczogKEZpeHR1cmUgfCBJbnRlcmNlcHRvcilbXSA9IFtdKSB7XG4gIGNvbnN0IG1hcDogTWFwPHN0cmluZywgRml4dHVyZT4gPSBuZXcgTWFwKCk7XG4gIGNvbnN0IGNvbXB1dGVkOiBJbnRlcmNlcHRvcltdID0gW107XG4gIGZvciAoY29uc3QgZml4dHVyZSBvZiBmaXh0dXJlcykge1xuICAgIGlmICgnYXJncycgaW4gZml4dHVyZSkge1xuICAgICAgaWYgKHR5cGVvZiBmaXh0dXJlLnJlc3BvbnNlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGZpeHR1cmUuZW5kcG9pbnQua2V5KC4uLmZpeHR1cmUuYXJncyk7XG4gICAgICAgIG1hcC5zZXQoa2V5LCBmaXh0dXJlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRoaXMgaGFzIHRvIGJlIGEgdHlwby4gcHJvYmFibHkgbmVlZHMgdG8gcmVtb3ZlIGFyZ3NcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBGaXh0dXJlIGZvdW5kIHdpdGggZnVuY3Rpb24gcmVzcG9uc2UsIGFuZCBleHBsaWNpdCBhcmdzLiBJbnRlcmNlcHRvcnMgc2hvdWxkIG5vdCBzcGVjaWZ5IGFyZ3MuXG4ke2ZpeHR1cmUuZW5kcG9pbnQubmFtZX06ICR7SlNPTi5zdHJpbmdpZnkoZml4dHVyZS5hcmdzKX1cblxuVHJlYXRpbmcgYXMgSW50ZXJjZXB0b3JgLFxuICAgICAgICApO1xuICAgICAgICBjb21wdXRlZC5wdXNoKGZpeHR1cmUgYXMgYW55KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29tcHV0ZWQucHVzaChmaXh0dXJlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFttYXAsIGNvbXB1dGVkXSBhcyBjb25zdDtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxTQUFTQSxnQkFBZ0JBLENBQUNDLFFBQW1DLEdBQUcsRUFBRSxFQUFFO0VBQ3pFLE1BQU1DLEdBQXlCLEdBQUcsSUFBSUMsR0FBRyxDQUFDLENBQUM7RUFDM0MsTUFBTUMsUUFBdUIsR0FBRyxFQUFFO0VBQ2xDLEtBQUssTUFBTUMsT0FBTyxJQUFJSixRQUFRLEVBQUU7SUFDOUIsSUFBSSxNQUFNLElBQUlJLE9BQU8sRUFBRTtNQUNyQixJQUFJLE9BQU9BLE9BQU8sQ0FBQ0MsUUFBUSxLQUFLLFVBQVUsRUFBRTtRQUMxQyxNQUFNQyxHQUFHLEdBQUdGLE9BQU8sQ0FBQ0csUUFBUSxDQUFDRCxHQUFHLENBQUMsR0FBR0YsT0FBTyxDQUFDSSxJQUFJLENBQUM7UUFDakRQLEdBQUcsQ0FBQ1EsR0FBRyxDQUFDSCxHQUFHLEVBQUVGLE9BQU8sQ0FBQztNQUN2QixDQUFDLE1BQU07UUFDTDtRQUNBTSxPQUFPLENBQUNDLElBQUksQ0FDVjtBQUNWLEVBQUVQLE9BQU8sQ0FBQ0csUUFBUSxDQUFDSyxJQUFJLEtBQUtDLElBQUksQ0FBQ0MsU0FBUyxDQUFDVixPQUFPLENBQUNJLElBQUksQ0FBQztBQUN4RDtBQUNBLHdCQUNRLENBQUM7UUFDREwsUUFBUSxDQUFDWSxJQUFJLENBQUNYLE9BQWMsQ0FBQztNQUMvQjtJQUNGLENBQUMsTUFBTTtNQUNMRCxRQUFRLENBQUNZLElBQUksQ0FBQ1gsT0FBTyxDQUFDO0lBQ3hCO0VBQ0Y7RUFDQSxPQUFPLENBQUNILEdBQUcsRUFBRUUsUUFBUSxDQUFDO0FBQ3hCIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import type { EndpointInterface, ResolveType } from '@data-client/endpoint';
|
|
2
|
+
type Updater = (result: any, ...args: any) => Record<string, (...args: any) => any>;
|
|
3
|
+
export interface SuccessFixtureEndpoint<E extends EndpointInterface & {
|
|
4
|
+
update?: Updater;
|
|
5
|
+
} = EndpointInterface> {
|
|
6
|
+
readonly endpoint: E;
|
|
7
|
+
readonly args: Parameters<E>;
|
|
8
|
+
readonly response: ResolveType<E> | ((...args: Parameters<E>) => ResolveType<E>);
|
|
9
|
+
readonly error?: false;
|
|
10
|
+
/** Number of miliseconds to wait before resolving */
|
|
11
|
+
readonly delay?: number;
|
|
12
|
+
/** Waits to run `response()` after `delay` time */
|
|
13
|
+
readonly delayCollapse?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface ResponseInterceptor<T = any, E extends EndpointInterface & {
|
|
16
|
+
update?: Updater;
|
|
17
|
+
testKey(key: string): boolean;
|
|
18
|
+
} = EndpointInterface & {
|
|
19
|
+
testKey(key: string): boolean;
|
|
20
|
+
}> {
|
|
21
|
+
readonly endpoint: E;
|
|
22
|
+
response(this: T, ...args: Parameters<E>): ResolveType<E>;
|
|
23
|
+
/** Number of miliseconds (or function that returns) to wait before resolving */
|
|
24
|
+
readonly delay?: number | ((...args: Parameters<E>) => number);
|
|
25
|
+
/** Waits to run `response()` after `delay` time */
|
|
26
|
+
readonly delayCollapse?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface FetchInterceptor<T = any, E extends EndpointInterface & {
|
|
29
|
+
update?: Updater;
|
|
30
|
+
testKey(key: string): boolean;
|
|
31
|
+
fetchResponse(input: RequestInfo, init: RequestInit): Promise<Response>;
|
|
32
|
+
extend(options: any): any;
|
|
33
|
+
} = EndpointInterface & {
|
|
34
|
+
testKey(key: string): boolean;
|
|
35
|
+
fetchResponse(input: RequestInfo, init: RequestInit): Promise<Response>;
|
|
36
|
+
extend(options: any): any;
|
|
37
|
+
}> {
|
|
38
|
+
readonly endpoint: E;
|
|
39
|
+
fetchResponse(this: T, input: RequestInfo, init: RequestInit): ResolveType<E>;
|
|
40
|
+
/** Number of miliseconds (or function that returns) to wait before resolving */
|
|
41
|
+
readonly delay?: number | ((...args: Parameters<E>) => number);
|
|
42
|
+
/** Waits to run `response()` after `delay` time */
|
|
43
|
+
readonly delayCollapse?: boolean;
|
|
44
|
+
}
|
|
45
|
+
/** Interceptors match and compute dynamic responses based on args
|
|
46
|
+
*
|
|
47
|
+
* @see https://dataclient.io/docs/api/Fixtures#interceptor
|
|
48
|
+
*/
|
|
49
|
+
export type Interceptor<T = any, E extends EndpointInterface & {
|
|
50
|
+
update?: Updater;
|
|
51
|
+
testKey(key: string): boolean;
|
|
52
|
+
fetchResponse?(input: RequestInfo, init: RequestInit): Promise<Response>;
|
|
53
|
+
extend?(options: any): any;
|
|
54
|
+
} = EndpointInterface & {
|
|
55
|
+
testKey(key: string): boolean;
|
|
56
|
+
fetchResponse(input: RequestInfo, init: RequestInit): Promise<Response>;
|
|
57
|
+
extend(options: any): any;
|
|
58
|
+
}> = ResponseInterceptor<T, E> | (E extends ({
|
|
59
|
+
fetchResponse(input: RequestInfo, init: RequestInit): Promise<Response>;
|
|
60
|
+
extend(options: any): any;
|
|
61
|
+
}) ? FetchInterceptor<T, E> : never);
|
|
62
|
+
export interface ErrorFixtureEndpoint<E extends EndpointInterface & {
|
|
63
|
+
update?: Updater;
|
|
64
|
+
} = EndpointInterface> {
|
|
65
|
+
readonly endpoint: E;
|
|
66
|
+
readonly args: Parameters<E>;
|
|
67
|
+
readonly response: any;
|
|
68
|
+
readonly error: true;
|
|
69
|
+
/** Number of miliseconds to wait before resolving */
|
|
70
|
+
readonly delay?: number;
|
|
71
|
+
/** Waits to run `response()` after `delay` time */
|
|
72
|
+
readonly delayCollapse?: boolean;
|
|
73
|
+
}
|
|
74
|
+
export type FixtureEndpoint<E extends EndpointInterface & {
|
|
75
|
+
update?: Updater;
|
|
76
|
+
} = EndpointInterface> = SuccessFixtureEndpoint<E> | ErrorFixtureEndpoint<E>;
|
|
77
|
+
/** Represents a successful response
|
|
78
|
+
*
|
|
79
|
+
* @see https://dataclient.io/docs/api/Fixtures#successfixture
|
|
80
|
+
*/
|
|
81
|
+
export type SuccessFixture<E extends EndpointInterface & {
|
|
82
|
+
update?: Updater;
|
|
83
|
+
} = EndpointInterface> = SuccessFixtureEndpoint<E>;
|
|
84
|
+
/** Represents a failed/errored response
|
|
85
|
+
*
|
|
86
|
+
* @see https://dataclient.io/docs/api/Fixtures#errorfixtures
|
|
87
|
+
*/
|
|
88
|
+
export type ErrorFixture<E extends EndpointInterface & {
|
|
89
|
+
update?: Updater;
|
|
90
|
+
} = EndpointInterface> = ErrorFixtureEndpoint<E>;
|
|
91
|
+
/** Represents a static response
|
|
92
|
+
*
|
|
93
|
+
* @see https://dataclient.io/docs/api/Fixtures
|
|
94
|
+
*/
|
|
95
|
+
export type Fixture<E extends EndpointInterface & {
|
|
96
|
+
update?: Updater;
|
|
97
|
+
} = EndpointInterface> = FixtureEndpoint<E>;
|
|
98
|
+
export {};
|
|
99
|
+
//# sourceMappingURL=fixtureTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixtureTypes.d.ts","sourceRoot":"","sources":["../../src/mock/fixtureTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vY2svZml4dHVyZVR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW5kcG9pbnRJbnRlcmZhY2UsIFJlc29sdmVUeXBlIH0gZnJvbSAnQGRhdGEtY2xpZW50L2VuZHBvaW50JztcblxudHlwZSBVcGRhdGVyID0gKFxuICByZXN1bHQ6IGFueSxcbiAgLi4uYXJnczogYW55XG4pID0+IFJlY29yZDxzdHJpbmcsICguLi5hcmdzOiBhbnkpID0+IGFueT47XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VjY2Vzc0ZpeHR1cmVFbmRwb2ludDxcbiAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYgeyB1cGRhdGU/OiBVcGRhdGVyIH0gPSBFbmRwb2ludEludGVyZmFjZSxcbj4ge1xuICByZWFkb25seSBlbmRwb2ludDogRTtcbiAgcmVhZG9ubHkgYXJnczogUGFyYW1ldGVyczxFPjtcbiAgcmVhZG9ubHkgcmVzcG9uc2U6XG4gICAgfCBSZXNvbHZlVHlwZTxFPlxuICAgIHwgKCguLi5hcmdzOiBQYXJhbWV0ZXJzPEU+KSA9PiBSZXNvbHZlVHlwZTxFPik7XG4gIHJlYWRvbmx5IGVycm9yPzogZmFsc2U7XG4gIC8qKiBOdW1iZXIgb2YgbWlsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgcmVzb2x2aW5nICovXG4gIHJlYWRvbmx5IGRlbGF5PzogbnVtYmVyO1xuICAvKiogV2FpdHMgdG8gcnVuIGByZXNwb25zZSgpYCBhZnRlciBgZGVsYXlgIHRpbWUgKi9cbiAgcmVhZG9ubHkgZGVsYXlDb2xsYXBzZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VJbnRlcmNlcHRvcjxcbiAgVCA9IGFueSxcbiAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYge1xuICAgIHVwZGF0ZT86IFVwZGF0ZXI7XG4gICAgdGVzdEtleShrZXk6IHN0cmluZyk6IGJvb2xlYW47XG4gIH0gPSBFbmRwb2ludEludGVyZmFjZSAmIHsgdGVzdEtleShrZXk6IHN0cmluZyk6IGJvb2xlYW4gfSxcbj4ge1xuICByZWFkb25seSBlbmRwb2ludDogRTtcbiAgcmVzcG9uc2UodGhpczogVCwgLi4uYXJnczogUGFyYW1ldGVyczxFPik6IFJlc29sdmVUeXBlPEU+O1xuICAvKiogTnVtYmVyIG9mIG1pbGlzZWNvbmRzIChvciBmdW5jdGlvbiB0aGF0IHJldHVybnMpIHRvIHdhaXQgYmVmb3JlIHJlc29sdmluZyAqL1xuICByZWFkb25seSBkZWxheT86IG51bWJlciB8ICgoLi4uYXJnczogUGFyYW1ldGVyczxFPikgPT4gbnVtYmVyKTtcbiAgLyoqIFdhaXRzIHRvIHJ1biBgcmVzcG9uc2UoKWAgYWZ0ZXIgYGRlbGF5YCB0aW1lICovXG4gIHJlYWRvbmx5IGRlbGF5Q29sbGFwc2U/OiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBGZXRjaEludGVyY2VwdG9yPFxuICBUID0gYW55LFxuICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7XG4gICAgdXBkYXRlPzogVXBkYXRlcjtcbiAgICB0ZXN0S2V5KGtleTogc3RyaW5nKTogYm9vbGVhbjtcbiAgICBmZXRjaFJlc3BvbnNlKGlucHV0OiBSZXF1ZXN0SW5mbywgaW5pdDogUmVxdWVzdEluaXQpOiBQcm9taXNlPFJlc3BvbnNlPjtcbiAgICBleHRlbmQob3B0aW9uczogYW55KTogYW55O1xuICB9ID0gRW5kcG9pbnRJbnRlcmZhY2UgJiB7XG4gICAgdGVzdEtleShrZXk6IHN0cmluZyk6IGJvb2xlYW47XG4gICAgZmV0Y2hSZXNwb25zZShpbnB1dDogUmVxdWVzdEluZm8sIGluaXQ6IFJlcXVlc3RJbml0KTogUHJvbWlzZTxSZXNwb25zZT47XG4gICAgZXh0ZW5kKG9wdGlvbnM6IGFueSk6IGFueTtcbiAgfSxcbj4ge1xuICByZWFkb25seSBlbmRwb2ludDogRTtcbiAgZmV0Y2hSZXNwb25zZSh0aGlzOiBULCBpbnB1dDogUmVxdWVzdEluZm8sIGluaXQ6IFJlcXVlc3RJbml0KTogUmVzb2x2ZVR5cGU8RT47XG4gIC8qKiBOdW1iZXIgb2YgbWlsaXNlY29uZHMgKG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucykgdG8gd2FpdCBiZWZvcmUgcmVzb2x2aW5nICovXG4gIHJlYWRvbmx5IGRlbGF5PzogbnVtYmVyIHwgKCguLi5hcmdzOiBQYXJhbWV0ZXJzPEU+KSA9PiBudW1iZXIpO1xuICAvKiogV2FpdHMgdG8gcnVuIGByZXNwb25zZSgpYCBhZnRlciBgZGVsYXlgIHRpbWUgKi9cbiAgcmVhZG9ubHkgZGVsYXlDb2xsYXBzZT86IGJvb2xlYW47XG59XG4vKiogSW50ZXJjZXB0b3JzIG1hdGNoIGFuZCBjb21wdXRlIGR5bmFtaWMgcmVzcG9uc2VzIGJhc2VkIG9uIGFyZ3NcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9GaXh0dXJlcyNpbnRlcmNlcHRvclxuICovXG5leHBvcnQgdHlwZSBJbnRlcmNlcHRvcjxcbiAgVCA9IGFueSxcbiAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYge1xuICAgIHVwZGF0ZT86IFVwZGF0ZXI7XG4gICAgdGVzdEtleShrZXk6IHN0cmluZyk6IGJvb2xlYW47XG4gICAgZmV0Y2hSZXNwb25zZT8oaW5wdXQ6IFJlcXVlc3RJbmZvLCBpbml0OiBSZXF1ZXN0SW5pdCk6IFByb21pc2U8UmVzcG9uc2U+O1xuICAgIGV4dGVuZD8ob3B0aW9uczogYW55KTogYW55O1xuICB9ID0gRW5kcG9pbnRJbnRlcmZhY2UgJiB7XG4gICAgdGVzdEtleShrZXk6IHN0cmluZyk6IGJvb2xlYW47XG4gICAgZmV0Y2hSZXNwb25zZShpbnB1dDogUmVxdWVzdEluZm8sIGluaXQ6IFJlcXVlc3RJbml0KTogUHJvbWlzZTxSZXNwb25zZT47XG4gICAgZXh0ZW5kKG9wdGlvbnM6IGFueSk6IGFueTtcbiAgfSxcbj4gPVxuICB8IFJlc3BvbnNlSW50ZXJjZXB0b3I8VCwgRT5cbiAgfCAoRSBleHRlbmRzIChcbiAgICAgIHtcbiAgICAgICAgZmV0Y2hSZXNwb25zZShpbnB1dDogUmVxdWVzdEluZm8sIGluaXQ6IFJlcXVlc3RJbml0KTogUHJvbWlzZTxSZXNwb25zZT47XG4gICAgICAgIGV4dGVuZChvcHRpb25zOiBhbnkpOiBhbnk7XG4gICAgICB9XG4gICAgKSA/XG4gICAgICBGZXRjaEludGVyY2VwdG9yPFQsIEU+XG4gICAgOiBuZXZlcik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JGaXh0dXJlRW5kcG9pbnQ8XG4gIEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZSAmIHsgdXBkYXRlPzogVXBkYXRlciB9ID0gRW5kcG9pbnRJbnRlcmZhY2UsXG4+IHtcbiAgcmVhZG9ubHkgZW5kcG9pbnQ6IEU7XG4gIHJlYWRvbmx5IGFyZ3M6IFBhcmFtZXRlcnM8RT47XG4gIHJlYWRvbmx5IHJlc3BvbnNlOiBhbnk7XG4gIHJlYWRvbmx5IGVycm9yOiB0cnVlO1xuICAvKiogTnVtYmVyIG9mIG1pbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIHJlc29sdmluZyAqL1xuICByZWFkb25seSBkZWxheT86IG51bWJlcjtcbiAgLyoqIFdhaXRzIHRvIHJ1biBgcmVzcG9uc2UoKWAgYWZ0ZXIgYGRlbGF5YCB0aW1lICovXG4gIHJlYWRvbmx5IGRlbGF5Q29sbGFwc2U/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBGaXh0dXJlRW5kcG9pbnQ8XG4gIEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZSAmIHsgdXBkYXRlPzogVXBkYXRlciB9ID0gRW5kcG9pbnRJbnRlcmZhY2UsXG4+ID0gU3VjY2Vzc0ZpeHR1cmVFbmRwb2ludDxFPiB8IEVycm9yRml4dHVyZUVuZHBvaW50PEU+O1xuXG4vKiogUmVwcmVzZW50cyBhIHN1Y2Nlc3NmdWwgcmVzcG9uc2VcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9GaXh0dXJlcyNzdWNjZXNzZml4dHVyZVxuICovXG5leHBvcnQgdHlwZSBTdWNjZXNzRml4dHVyZTxcbiAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYgeyB1cGRhdGU/OiBVcGRhdGVyIH0gPSBFbmRwb2ludEludGVyZmFjZSxcbj4gPSBTdWNjZXNzRml4dHVyZUVuZHBvaW50PEU+O1xuLyoqIFJlcHJlc2VudHMgYSBmYWlsZWQvZXJyb3JlZCByZXNwb25zZVxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0ZpeHR1cmVzI2Vycm9yZml4dHVyZXNcbiAqL1xuZXhwb3J0IHR5cGUgRXJyb3JGaXh0dXJlPFxuICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7IHVwZGF0ZT86IFVwZGF0ZXIgfSA9IEVuZHBvaW50SW50ZXJmYWNlLFxuPiA9IEVycm9yRml4dHVyZUVuZHBvaW50PEU+O1xuLyoqIFJlcHJlc2VudHMgYSBzdGF0aWMgcmVzcG9uc2VcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9GaXh0dXJlc1xuICovXG5leHBvcnQgdHlwZSBGaXh0dXJlPFxuICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7IHVwZGF0ZT86IFVwZGF0ZXIgfSA9IEVuZHBvaW50SW50ZXJmYWNlLFxuPiA9IEZpeHR1cmVFbmRwb2ludDxFPjtcbiJdLCJtYXBwaW5ncyI6IiIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { MockController } from './MockController.js';
|
|
2
|
+
export type { MockProps } from './mockTypes.js';
|
|
3
|
+
export type { Fixture, SuccessFixture, ErrorFixture, Interceptor, ResponseInterceptor, FetchInterceptor, FixtureEndpoint, SuccessFixtureEndpoint, ErrorFixtureEndpoint, } from './fixtureTypes.js';
|
|
4
|
+
export { collapseFixture } from './collapseFixture.js';
|
|
5
|
+
export { createFixtureMap } from './createFixtureMap.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mock/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,YAAY,EACV,OAAO,EACP,cAAc,EACd,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { MockController } from './MockController.js';
|
|
2
|
+
export { collapseFixture } from './collapseFixture.js';
|
|
3
|
+
export { createFixtureMap } from './createFixtureMap.js';
|
|
4
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNb2NrQ29udHJvbGxlciIsImNvbGxhcHNlRml4dHVyZSIsImNyZWF0ZUZpeHR1cmVNYXAiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9jay9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBNb2NrQ29udHJvbGxlciB9IGZyb20gJy4vTW9ja0NvbnRyb2xsZXIuanMnO1xuZXhwb3J0IHR5cGUgeyBNb2NrUHJvcHMgfSBmcm9tICcuL21vY2tUeXBlcy5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEZpeHR1cmUsXG4gIFN1Y2Nlc3NGaXh0dXJlLFxuICBFcnJvckZpeHR1cmUsXG4gIEludGVyY2VwdG9yLFxuICBSZXNwb25zZUludGVyY2VwdG9yLFxuICBGZXRjaEludGVyY2VwdG9yLFxuICBGaXh0dXJlRW5kcG9pbnQsXG4gIFN1Y2Nlc3NGaXh0dXJlRW5kcG9pbnQsXG4gIEVycm9yRml4dHVyZUVuZHBvaW50LFxufSBmcm9tICcuL2ZpeHR1cmVUeXBlcy5qcyc7XG5leHBvcnQgeyBjb2xsYXBzZUZpeHR1cmUgfSBmcm9tICcuL2NvbGxhcHNlRml4dHVyZS5qcyc7XG5leHBvcnQgeyBjcmVhdGVGaXh0dXJlTWFwIH0gZnJvbSAnLi9jcmVhdGVGaXh0dXJlTWFwLmpzJztcbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsY0FBYyxRQUFRLHFCQUFxQjtBQWFwRCxTQUFTQyxlQUFlLFFBQVEsc0JBQXNCO0FBQ3RELFNBQVNDLGdCQUFnQixRQUFRLHVCQUF1QiIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mockTypes.d.ts","sourceRoot":"","sources":["../../src/mock/mockTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE9D,MAAM,WAAW,SAAS,CAAC,CAAC,GAAG,GAAG;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjD,yBAAyB,CAAC,EAAE,MAAM,CAAC,CAAC;CACrC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vY2svbW9ja1R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRml4dHVyZSwgSW50ZXJjZXB0b3IgfSBmcm9tICcuL2ZpeHR1cmVUeXBlcy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9ja1Byb3BzPFQgPSBhbnk+IHtcbiAgcmVhZG9ubHkgZml4dHVyZXM/OiAoRml4dHVyZSB8IEludGVyY2VwdG9yPFQ+KVtdO1xuICBnZXRJbml0aWFsSW50ZXJjZXB0b3JEYXRhPzogKCkgPT4gVDtcbn1cbiJdLCJtYXBwaW5ncyI6IiIsImlnbm9yZUxpc3QiOltdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@data-client/core",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.1-beta-20251116224907-3174fe59b114d2037762a6458f5576d23e483ba4",
|
|
4
4
|
"description": "Async State Management without the Management. REST, GraphQL, SSE, Websockets, Fetch",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -16,6 +16,9 @@
|
|
|
16
16
|
"next": [
|
|
17
17
|
"lib/next/index.d.ts"
|
|
18
18
|
],
|
|
19
|
+
"mock": [
|
|
20
|
+
"lib/mock/index.d.ts"
|
|
21
|
+
],
|
|
19
22
|
"*": [
|
|
20
23
|
"lib/index.d.ts"
|
|
21
24
|
]
|
|
@@ -27,6 +30,9 @@
|
|
|
27
30
|
"next": [
|
|
28
31
|
"ts3.4/next/index.d.ts"
|
|
29
32
|
],
|
|
33
|
+
"mock": [
|
|
34
|
+
"ts3.4/mock/index.d.ts"
|
|
35
|
+
],
|
|
30
36
|
"*": [
|
|
31
37
|
"ts3.4/index.d.ts"
|
|
32
38
|
]
|
|
@@ -48,6 +54,13 @@
|
|
|
48
54
|
"react-native": "./lib/next/index.js",
|
|
49
55
|
"default": "./lib/next/index.js"
|
|
50
56
|
},
|
|
57
|
+
"./mock": {
|
|
58
|
+
"types": "./lib/mock/index.d.ts",
|
|
59
|
+
"require": "./lib/mock/index.js",
|
|
60
|
+
"browser": "./lib/mock/index.js",
|
|
61
|
+
"react-native": "./lib/mock/index.js",
|
|
62
|
+
"default": "./lib/mock/index.js"
|
|
63
|
+
},
|
|
51
64
|
"./package.json": "./package.json"
|
|
52
65
|
},
|
|
53
66
|
"type": "module",
|
|
@@ -130,9 +143,9 @@
|
|
|
130
143
|
},
|
|
131
144
|
"devDependencies": {
|
|
132
145
|
"@anansi/browserslist-config": "^1.4.2",
|
|
133
|
-
"@data-client/endpoint": "0.15.
|
|
146
|
+
"@data-client/endpoint": "0.15.1-beta-20251110013913-ef632c49a03da67187b6097fe8154893cd930d30",
|
|
134
147
|
"@types/jest": "30.0.0",
|
|
135
|
-
"@types/node": "^
|
|
148
|
+
"@types/node": "^24.0.0",
|
|
136
149
|
"rollup-plugins": "1.0.0"
|
|
137
150
|
}
|
|
138
151
|
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import {
|
|
2
|
+
actionTypes,
|
|
3
|
+
Controller,
|
|
4
|
+
DataClientDispatch,
|
|
5
|
+
GenericDispatch,
|
|
6
|
+
} from '../index.js';
|
|
7
|
+
import { collapseFixture } from './collapseFixture.js';
|
|
8
|
+
import { createFixtureMap } from './createFixtureMap.js';
|
|
9
|
+
import type { Fixture, Interceptor } from './fixtureTypes.js';
|
|
10
|
+
import { MockProps } from './mockTypes.js';
|
|
11
|
+
|
|
12
|
+
export function MockController<TBase extends typeof Controller, T>(
|
|
13
|
+
Base: TBase,
|
|
14
|
+
{
|
|
15
|
+
fixtures = [],
|
|
16
|
+
getInitialInterceptorData = () => ({}) as any,
|
|
17
|
+
}: MockProps<T>,
|
|
18
|
+
): TBase {
|
|
19
|
+
const [fixtureMap, interceptors] = createFixtureMap(fixtures);
|
|
20
|
+
|
|
21
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
22
|
+
// @ts-ignore
|
|
23
|
+
return class MockedController<
|
|
24
|
+
D extends GenericDispatch = DataClientDispatch,
|
|
25
|
+
> extends Base<D> {
|
|
26
|
+
// legacy compatibility (re-declaration)
|
|
27
|
+
// TODO: drop when drop support for destructuring (0.14 and below)
|
|
28
|
+
declare protected _dispatch: D;
|
|
29
|
+
|
|
30
|
+
fixtureMap: Map<string, Fixture> = fixtureMap;
|
|
31
|
+
interceptors: Interceptor<any>[] = interceptors;
|
|
32
|
+
interceptorData: T = getInitialInterceptorData();
|
|
33
|
+
|
|
34
|
+
constructor(...args: any[]) {
|
|
35
|
+
super(...args);
|
|
36
|
+
|
|
37
|
+
// legacy compatibility
|
|
38
|
+
// TODO: drop when drop support for destructuring (0.14 and below)
|
|
39
|
+
if (!this._dispatch) {
|
|
40
|
+
this._dispatch = (args[0] as any).dispatch;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// legacy compatibility - we need this to work with 0.14 and below as they do not have this setter
|
|
45
|
+
// TODO: drop when drop support for destructuring (0.14 and below)
|
|
46
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
47
|
+
// @ts-ignore
|
|
48
|
+
set dispatch(dispatch: D) {
|
|
49
|
+
this._dispatch = dispatch;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
get dispatch(): D {
|
|
53
|
+
return ((action: Parameters<D>[0]): Promise<void> => {
|
|
54
|
+
// support legacy that has _TYPE suffix
|
|
55
|
+
if (action.type === (actionTypes.FETCH ?? actionTypes.FETCH_TYPE)) {
|
|
56
|
+
// eslint-disable-next-line prefer-const
|
|
57
|
+
let { key, args } = action;
|
|
58
|
+
let fixture: Fixture | Interceptor | undefined;
|
|
59
|
+
if (this.fixtureMap.has(key)) {
|
|
60
|
+
fixture = this.fixtureMap.get(key) as Fixture;
|
|
61
|
+
if (!args) args = fixture.args;
|
|
62
|
+
// exact matches take priority; now test ComputedFixture
|
|
63
|
+
} else {
|
|
64
|
+
for (const cfix of this.interceptors) {
|
|
65
|
+
if (cfix.endpoint.testKey(key)) {
|
|
66
|
+
fixture = cfix;
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// we have a match
|
|
72
|
+
if (fixture !== undefined) {
|
|
73
|
+
const replacedAction: typeof action = {
|
|
74
|
+
...action,
|
|
75
|
+
};
|
|
76
|
+
const delayMs =
|
|
77
|
+
typeof fixture.delay === 'function' ?
|
|
78
|
+
fixture.delay(...(args as any))
|
|
79
|
+
: (fixture.delay ?? 0);
|
|
80
|
+
|
|
81
|
+
if ('fetchResponse' in fixture) {
|
|
82
|
+
const { fetchResponse } = fixture;
|
|
83
|
+
fixture = {
|
|
84
|
+
endpoint: fixture.endpoint,
|
|
85
|
+
response(...args) {
|
|
86
|
+
const endpoint = (action.endpoint as any).extend({
|
|
87
|
+
fetchResponse: (input: RequestInfo, init: RequestInit) => {
|
|
88
|
+
const ret = fetchResponse.call(this, input, init);
|
|
89
|
+
return Promise.resolve(
|
|
90
|
+
new Response(JSON.stringify(ret), {
|
|
91
|
+
status: 200,
|
|
92
|
+
headers: new Headers({
|
|
93
|
+
'Content-Type': 'application/json',
|
|
94
|
+
}),
|
|
95
|
+
}),
|
|
96
|
+
);
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
return (endpoint as any)(...args);
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
const fetch = async () => {
|
|
104
|
+
if (!fixture) {
|
|
105
|
+
throw new Error('No fixture found');
|
|
106
|
+
}
|
|
107
|
+
// delayCollapse determines when the fixture function is 'collapsed' (aka 'run')
|
|
108
|
+
// collapsed: https://en.wikipedia.org/wiki/Copenhagen_interpretation
|
|
109
|
+
if (fixture.delayCollapse) {
|
|
110
|
+
await new Promise(resolve => setTimeout(resolve, delayMs));
|
|
111
|
+
}
|
|
112
|
+
const result = await collapseFixture(
|
|
113
|
+
fixture as any,
|
|
114
|
+
args as any,
|
|
115
|
+
this.interceptorData,
|
|
116
|
+
);
|
|
117
|
+
if (!fixture.delayCollapse && delayMs) {
|
|
118
|
+
await new Promise(resolve => setTimeout(resolve, delayMs));
|
|
119
|
+
}
|
|
120
|
+
if (result.error) {
|
|
121
|
+
throw result.response;
|
|
122
|
+
}
|
|
123
|
+
return result.response;
|
|
124
|
+
};
|
|
125
|
+
if (typeof (replacedAction.endpoint as any).extend === 'function') {
|
|
126
|
+
replacedAction.endpoint = (replacedAction.endpoint as any).extend(
|
|
127
|
+
{
|
|
128
|
+
fetch,
|
|
129
|
+
},
|
|
130
|
+
);
|
|
131
|
+
} else {
|
|
132
|
+
// TODO: full testing of this
|
|
133
|
+
replacedAction.endpoint = fetch as any;
|
|
134
|
+
(replacedAction.endpoint as any).__proto__ = action.endpoint;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// TODO: make super.dispatch (once we drop support for destructuring)
|
|
138
|
+
return this._dispatch(replacedAction);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// TODO: make super.dispatch (once we drop support for destructuring)
|
|
142
|
+
return this._dispatch(action);
|
|
143
|
+
}) as any;
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Fixture, ResponseInterceptor } from './fixtureTypes.js';
|
|
2
|
+
|
|
3
|
+
export async function collapseFixture(
|
|
4
|
+
fixture: Fixture | ResponseInterceptor,
|
|
5
|
+
args: any[],
|
|
6
|
+
interceptorData: any,
|
|
7
|
+
) {
|
|
8
|
+
let error = 'error' in fixture ? fixture.error : false;
|
|
9
|
+
let response = fixture.response;
|
|
10
|
+
if (typeof fixture.response === 'function') {
|
|
11
|
+
try {
|
|
12
|
+
response = await fixture.response.apply(interceptorData, args);
|
|
13
|
+
// dispatch goes through user-code that can sometimes fail.
|
|
14
|
+
// let's ensure we always handle errors
|
|
15
|
+
} catch (e: any) {
|
|
16
|
+
response = e;
|
|
17
|
+
error = true;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return { response, error };
|
|
21
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Fixture, Interceptor } from './fixtureTypes.js';
|
|
2
|
+
|
|
3
|
+
export function createFixtureMap(fixtures: (Fixture | Interceptor)[] = []) {
|
|
4
|
+
const map: Map<string, Fixture> = new Map();
|
|
5
|
+
const computed: Interceptor[] = [];
|
|
6
|
+
for (const fixture of fixtures) {
|
|
7
|
+
if ('args' in fixture) {
|
|
8
|
+
if (typeof fixture.response !== 'function') {
|
|
9
|
+
const key = fixture.endpoint.key(...fixture.args);
|
|
10
|
+
map.set(key, fixture);
|
|
11
|
+
} else {
|
|
12
|
+
// this has to be a typo. probably needs to remove args
|
|
13
|
+
console.warn(
|
|
14
|
+
`Fixture found with function response, and explicit args. Interceptors should not specify args.
|
|
15
|
+
${fixture.endpoint.name}: ${JSON.stringify(fixture.args)}
|
|
16
|
+
|
|
17
|
+
Treating as Interceptor`,
|
|
18
|
+
);
|
|
19
|
+
computed.push(fixture as any);
|
|
20
|
+
}
|
|
21
|
+
} else {
|
|
22
|
+
computed.push(fixture);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return [map, computed] as const;
|
|
26
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import type { EndpointInterface, ResolveType } from '@data-client/endpoint';
|
|
2
|
+
|
|
3
|
+
type Updater = (
|
|
4
|
+
result: any,
|
|
5
|
+
...args: any
|
|
6
|
+
) => Record<string, (...args: any) => any>;
|
|
7
|
+
|
|
8
|
+
export interface SuccessFixtureEndpoint<
|
|
9
|
+
E extends EndpointInterface & { update?: Updater } = EndpointInterface,
|
|
10
|
+
> {
|
|
11
|
+
readonly endpoint: E;
|
|
12
|
+
readonly args: Parameters<E>;
|
|
13
|
+
readonly response:
|
|
14
|
+
| ResolveType<E>
|
|
15
|
+
| ((...args: Parameters<E>) => ResolveType<E>);
|
|
16
|
+
readonly error?: false;
|
|
17
|
+
/** Number of miliseconds to wait before resolving */
|
|
18
|
+
readonly delay?: number;
|
|
19
|
+
/** Waits to run `response()` after `delay` time */
|
|
20
|
+
readonly delayCollapse?: boolean;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface ResponseInterceptor<
|
|
24
|
+
T = any,
|
|
25
|
+
E extends EndpointInterface & {
|
|
26
|
+
update?: Updater;
|
|
27
|
+
testKey(key: string): boolean;
|
|
28
|
+
} = EndpointInterface & { testKey(key: string): boolean },
|
|
29
|
+
> {
|
|
30
|
+
readonly endpoint: E;
|
|
31
|
+
response(this: T, ...args: Parameters<E>): ResolveType<E>;
|
|
32
|
+
/** Number of miliseconds (or function that returns) to wait before resolving */
|
|
33
|
+
readonly delay?: number | ((...args: Parameters<E>) => number);
|
|
34
|
+
/** Waits to run `response()` after `delay` time */
|
|
35
|
+
readonly delayCollapse?: boolean;
|
|
36
|
+
}
|
|
37
|
+
export interface FetchInterceptor<
|
|
38
|
+
T = any,
|
|
39
|
+
E extends EndpointInterface & {
|
|
40
|
+
update?: Updater;
|
|
41
|
+
testKey(key: string): boolean;
|
|
42
|
+
fetchResponse(input: RequestInfo, init: RequestInit): Promise<Response>;
|
|
43
|
+
extend(options: any): any;
|
|
44
|
+
} = EndpointInterface & {
|
|
45
|
+
testKey(key: string): boolean;
|
|
46
|
+
fetchResponse(input: RequestInfo, init: RequestInit): Promise<Response>;
|
|
47
|
+
extend(options: any): any;
|
|
48
|
+
},
|
|
49
|
+
> {
|
|
50
|
+
readonly endpoint: E;
|
|
51
|
+
fetchResponse(this: T, input: RequestInfo, init: RequestInit): ResolveType<E>;
|
|
52
|
+
/** Number of miliseconds (or function that returns) to wait before resolving */
|
|
53
|
+
readonly delay?: number | ((...args: Parameters<E>) => number);
|
|
54
|
+
/** Waits to run `response()` after `delay` time */
|
|
55
|
+
readonly delayCollapse?: boolean;
|
|
56
|
+
}
|
|
57
|
+
/** Interceptors match and compute dynamic responses based on args
|
|
58
|
+
*
|
|
59
|
+
* @see https://dataclient.io/docs/api/Fixtures#interceptor
|
|
60
|
+
*/
|
|
61
|
+
export type Interceptor<
|
|
62
|
+
T = any,
|
|
63
|
+
E extends EndpointInterface & {
|
|
64
|
+
update?: Updater;
|
|
65
|
+
testKey(key: string): boolean;
|
|
66
|
+
fetchResponse?(input: RequestInfo, init: RequestInit): Promise<Response>;
|
|
67
|
+
extend?(options: any): any;
|
|
68
|
+
} = EndpointInterface & {
|
|
69
|
+
testKey(key: string): boolean;
|
|
70
|
+
fetchResponse(input: RequestInfo, init: RequestInit): Promise<Response>;
|
|
71
|
+
extend(options: any): any;
|
|
72
|
+
},
|
|
73
|
+
> =
|
|
74
|
+
| ResponseInterceptor<T, E>
|
|
75
|
+
| (E extends (
|
|
76
|
+
{
|
|
77
|
+
fetchResponse(input: RequestInfo, init: RequestInit): Promise<Response>;
|
|
78
|
+
extend(options: any): any;
|
|
79
|
+
}
|
|
80
|
+
) ?
|
|
81
|
+
FetchInterceptor<T, E>
|
|
82
|
+
: never);
|
|
83
|
+
|
|
84
|
+
export interface ErrorFixtureEndpoint<
|
|
85
|
+
E extends EndpointInterface & { update?: Updater } = EndpointInterface,
|
|
86
|
+
> {
|
|
87
|
+
readonly endpoint: E;
|
|
88
|
+
readonly args: Parameters<E>;
|
|
89
|
+
readonly response: any;
|
|
90
|
+
readonly error: true;
|
|
91
|
+
/** Number of miliseconds to wait before resolving */
|
|
92
|
+
readonly delay?: number;
|
|
93
|
+
/** Waits to run `response()` after `delay` time */
|
|
94
|
+
readonly delayCollapse?: boolean;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export type FixtureEndpoint<
|
|
98
|
+
E extends EndpointInterface & { update?: Updater } = EndpointInterface,
|
|
99
|
+
> = SuccessFixtureEndpoint<E> | ErrorFixtureEndpoint<E>;
|
|
100
|
+
|
|
101
|
+
/** Represents a successful response
|
|
102
|
+
*
|
|
103
|
+
* @see https://dataclient.io/docs/api/Fixtures#successfixture
|
|
104
|
+
*/
|
|
105
|
+
export type SuccessFixture<
|
|
106
|
+
E extends EndpointInterface & { update?: Updater } = EndpointInterface,
|
|
107
|
+
> = SuccessFixtureEndpoint<E>;
|
|
108
|
+
/** Represents a failed/errored response
|
|
109
|
+
*
|
|
110
|
+
* @see https://dataclient.io/docs/api/Fixtures#errorfixtures
|
|
111
|
+
*/
|
|
112
|
+
export type ErrorFixture<
|
|
113
|
+
E extends EndpointInterface & { update?: Updater } = EndpointInterface,
|
|
114
|
+
> = ErrorFixtureEndpoint<E>;
|
|
115
|
+
/** Represents a static response
|
|
116
|
+
*
|
|
117
|
+
* @see https://dataclient.io/docs/api/Fixtures
|
|
118
|
+
*/
|
|
119
|
+
export type Fixture<
|
|
120
|
+
E extends EndpointInterface & { update?: Updater } = EndpointInterface,
|
|
121
|
+
> = FixtureEndpoint<E>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { MockController } from './MockController.js';
|
|
2
|
+
export type { MockProps } from './mockTypes.js';
|
|
3
|
+
export type {
|
|
4
|
+
Fixture,
|
|
5
|
+
SuccessFixture,
|
|
6
|
+
ErrorFixture,
|
|
7
|
+
Interceptor,
|
|
8
|
+
ResponseInterceptor,
|
|
9
|
+
FetchInterceptor,
|
|
10
|
+
FixtureEndpoint,
|
|
11
|
+
SuccessFixtureEndpoint,
|
|
12
|
+
ErrorFixtureEndpoint,
|
|
13
|
+
} from './fixtureTypes.js';
|
|
14
|
+
export { collapseFixture } from './collapseFixture.js';
|
|
15
|
+
export { createFixtureMap } from './createFixtureMap.js';
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Controller } from '../index.js';
|
|
2
|
+
import { MockProps } from './mockTypes.js';
|
|
3
|
+
export declare function MockController<TBase extends typeof Controller, T>(Base: TBase, { fixtures, getInitialInterceptorData, }: MockProps<T>): TBase;
|
|
4
|
+
//# sourceMappingURL=MockController.d.ts.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Fixture, ResponseInterceptor } from './fixtureTypes.js';
|
|
2
|
+
export declare function collapseFixture(fixture: Fixture | ResponseInterceptor, args: any[], interceptorData: any): Promise<{
|
|
3
|
+
response: any;
|
|
4
|
+
error: boolean | undefined;
|
|
5
|
+
}>;
|
|
6
|
+
//# sourceMappingURL=collapseFixture.d.ts.map
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { EndpointInterface, ResolveType } from '@data-client/endpoint';
|
|
2
|
+
type Updater = (result: any, ...args: any) => Record<string, (...args: any) => any>;
|
|
3
|
+
export interface SuccessFixtureEndpoint<E extends EndpointInterface & {
|
|
4
|
+
update?: Updater;
|
|
5
|
+
} = EndpointInterface> {
|
|
6
|
+
readonly endpoint: E;
|
|
7
|
+
readonly args: Parameters<E>;
|
|
8
|
+
readonly response: ResolveType<E> | ((...args: Parameters<E>) => ResolveType<E>);
|
|
9
|
+
readonly error?: false;
|
|
10
|
+
/** Number of miliseconds to wait before resolving */
|
|
11
|
+
readonly delay?: number;
|
|
12
|
+
/** Waits to run `response()` after `delay` time */
|
|
13
|
+
readonly delayCollapse?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface ResponseInterceptor<T = any, E extends EndpointInterface & {
|
|
16
|
+
update?: Updater;
|
|
17
|
+
testKey(key: string): boolean;
|
|
18
|
+
} = EndpointInterface & {
|
|
19
|
+
testKey(key: string): boolean;
|
|
20
|
+
}> {
|
|
21
|
+
readonly endpoint: E;
|
|
22
|
+
response(this: T, ...args: Parameters<E>): ResolveType<E>;
|
|
23
|
+
/** Number of miliseconds (or function that returns) to wait before resolving */
|
|
24
|
+
readonly delay?: number | ((...args: Parameters<E>) => number);
|
|
25
|
+
/** Waits to run `response()` after `delay` time */
|
|
26
|
+
readonly delayCollapse?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface FetchInterceptor<T = any, E extends EndpointInterface & {
|
|
29
|
+
update?: Updater;
|
|
30
|
+
testKey(key: string): boolean;
|
|
31
|
+
fetchResponse(input: RequestInfo, init: RequestInit): Promise<Response>;
|
|
32
|
+
extend(options: any): any;
|
|
33
|
+
} = EndpointInterface & {
|
|
34
|
+
testKey(key: string): boolean;
|
|
35
|
+
fetchResponse(input: RequestInfo, init: RequestInit): Promise<Response>;
|
|
36
|
+
extend(options: any): any;
|
|
37
|
+
}> {
|
|
38
|
+
readonly endpoint: E;
|
|
39
|
+
fetchResponse(this: T, input: RequestInfo, init: RequestInit): ResolveType<E>;
|
|
40
|
+
/** Number of miliseconds (or function that returns) to wait before resolving */
|
|
41
|
+
readonly delay?: number | ((...args: Parameters<E>) => number);
|
|
42
|
+
/** Waits to run `response()` after `delay` time */
|
|
43
|
+
readonly delayCollapse?: boolean;
|
|
44
|
+
}
|
|
45
|
+
/** Interceptors match and compute dynamic responses based on args
|
|
46
|
+
*
|
|
47
|
+
* @see https://dataclient.io/docs/api/Fixtures#interceptor
|
|
48
|
+
*/
|
|
49
|
+
export type Interceptor<T = any, E extends EndpointInterface & {
|
|
50
|
+
update?: Updater;
|
|
51
|
+
testKey(key: string): boolean;
|
|
52
|
+
fetchResponse?(input: RequestInfo, init: RequestInit): Promise<Response>;
|
|
53
|
+
extend?(options: any): any;
|
|
54
|
+
} = EndpointInterface & {
|
|
55
|
+
testKey(key: string): boolean;
|
|
56
|
+
fetchResponse(input: RequestInfo, init: RequestInit): Promise<Response>;
|
|
57
|
+
extend(options: any): any;
|
|
58
|
+
}> = ResponseInterceptor<T, E> | (E extends ({
|
|
59
|
+
fetchResponse(input: RequestInfo, init: RequestInit): Promise<Response>;
|
|
60
|
+
extend(options: any): any;
|
|
61
|
+
}) ? FetchInterceptor<T, E> : never);
|
|
62
|
+
export interface ErrorFixtureEndpoint<E extends EndpointInterface & {
|
|
63
|
+
update?: Updater;
|
|
64
|
+
} = EndpointInterface> {
|
|
65
|
+
readonly endpoint: E;
|
|
66
|
+
readonly args: Parameters<E>;
|
|
67
|
+
readonly response: any;
|
|
68
|
+
readonly error: true;
|
|
69
|
+
/** Number of miliseconds to wait before resolving */
|
|
70
|
+
readonly delay?: number;
|
|
71
|
+
/** Waits to run `response()` after `delay` time */
|
|
72
|
+
readonly delayCollapse?: boolean;
|
|
73
|
+
}
|
|
74
|
+
export type FixtureEndpoint<E extends EndpointInterface & {
|
|
75
|
+
update?: Updater;
|
|
76
|
+
} = EndpointInterface> = SuccessFixtureEndpoint<E> | ErrorFixtureEndpoint<E>;
|
|
77
|
+
/** Represents a successful response
|
|
78
|
+
*
|
|
79
|
+
* @see https://dataclient.io/docs/api/Fixtures#successfixture
|
|
80
|
+
*/
|
|
81
|
+
export type SuccessFixture<E extends EndpointInterface & {
|
|
82
|
+
update?: Updater;
|
|
83
|
+
} = EndpointInterface> = SuccessFixtureEndpoint<E>;
|
|
84
|
+
/** Represents a failed/errored response
|
|
85
|
+
*
|
|
86
|
+
* @see https://dataclient.io/docs/api/Fixtures#errorfixtures
|
|
87
|
+
*/
|
|
88
|
+
export type ErrorFixture<E extends EndpointInterface & {
|
|
89
|
+
update?: Updater;
|
|
90
|
+
} = EndpointInterface> = ErrorFixtureEndpoint<E>;
|
|
91
|
+
/** Represents a static response
|
|
92
|
+
*
|
|
93
|
+
* @see https://dataclient.io/docs/api/Fixtures
|
|
94
|
+
*/
|
|
95
|
+
export type Fixture<E extends EndpointInterface & {
|
|
96
|
+
update?: Updater;
|
|
97
|
+
} = EndpointInterface> = FixtureEndpoint<E>;
|
|
98
|
+
export {};
|
|
99
|
+
//# sourceMappingURL=fixtureTypes.d.ts.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { MockController } from './MockController.js';
|
|
2
|
+
export { MockProps } from './mockTypes.js';
|
|
3
|
+
export { Fixture, SuccessFixture, ErrorFixture, Interceptor, ResponseInterceptor, FetchInterceptor, FixtureEndpoint, SuccessFixtureEndpoint, ErrorFixtureEndpoint, } from './fixtureTypes.js';
|
|
4
|
+
export { collapseFixture } from './collapseFixture.js';
|
|
5
|
+
export { createFixtureMap } from './createFixtureMap.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|