saga-toolkit 2.1.2 → 2.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +106 -92
- package/dist/index.d.mts +28 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.js +214 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +185 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +38 -10
- package/src/effects.ts +107 -0
- package/src/index.ts +35 -0
- package/src/types.ts +18 -0
- package/src/utils.ts +77 -0
- package/example/.env +0 -1
- package/example/README.md +0 -70
- package/example/package-lock.json +0 -33427
- package/example/package.json +0 -43
- package/example/public/favicon.ico +0 -0
- package/example/public/index.html +0 -43
- package/example/public/logo192.png +0 -0
- package/example/public/logo512.png +0 -0
- package/example/public/manifest.json +0 -25
- package/example/public/robots.txt +0 -3
- package/example/src/App.css +0 -38
- package/example/src/App.js +0 -61
- package/example/src/hooks.js +0 -19
- package/example/src/index.css +0 -13
- package/example/src/index.js +0 -28
- package/example/src/logo.svg +0 -1
- package/example/src/reportWebVitals.js +0 -13
- package/example/src/sagas.js +0 -91
- package/example/src/setupTests.js +0 -5
- package/example/src/slice.js +0 -32
- package/example/src/store/createStore.js +0 -34
- package/example/src/store/index.js +0 -1
- package/example/src/store/reducers.js +0 -11
- package/index.d.ts +0 -75
- package/index.js +0 -176
- package/sagaToolkit.js +0 -152
package/index.js
DELETED
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.createSagaAction = void 0;
|
|
7
|
-
exports.putAsync = putAsync;
|
|
8
|
-
exports.takeAggregateAsync = takeAggregateAsync;
|
|
9
|
-
exports.takeEveryAsync = takeEveryAsync;
|
|
10
|
-
exports.takeLatestAsync = takeLatestAsync;
|
|
11
|
-
|
|
12
|
-
var _toolkit = require("@reduxjs/toolkit");
|
|
13
|
-
|
|
14
|
-
var _effects = require("@redux-saga/core/effects");
|
|
15
|
-
|
|
16
|
-
var _deferred = _interopRequireDefault(require("@redux-saga/deferred"));
|
|
17
|
-
|
|
18
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
|
-
|
|
20
|
-
const requests = {};
|
|
21
|
-
|
|
22
|
-
const addRequest = requestId => {
|
|
23
|
-
const deferred = (0, _deferred.default)();
|
|
24
|
-
const request = { ...requests[requestId],
|
|
25
|
-
requestId,
|
|
26
|
-
deferred
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
if (requests[requestId]) {
|
|
30
|
-
requests[requestId].deferred = deferred;
|
|
31
|
-
requests[requestId].onAdd(request);
|
|
32
|
-
} else {
|
|
33
|
-
requests[requestId] = request;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
return deferred.promise;
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
const createSagaAction = type => {
|
|
40
|
-
const thunk = (0, _toolkit.createAsyncThunk)(type, (_, {
|
|
41
|
-
requestId
|
|
42
|
-
}) => addRequest(requestId));
|
|
43
|
-
|
|
44
|
-
function actionCreator(...args) {
|
|
45
|
-
const originalActionCreator = thunk(...args);
|
|
46
|
-
return (...args) => {
|
|
47
|
-
const promise = originalActionCreator(...args);
|
|
48
|
-
requests[promise.requestId].abort = promise.abort;
|
|
49
|
-
return promise;
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
actionCreator.pending = thunk.pending;
|
|
54
|
-
actionCreator.rejected = thunk.rejected;
|
|
55
|
-
actionCreator.fulfilled = thunk.fulfilled;
|
|
56
|
-
actionCreator.typePrefix = thunk.typePrefix;
|
|
57
|
-
actionCreator.type = thunk.pending;
|
|
58
|
-
return actionCreator;
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
exports.createSagaAction = createSagaAction;
|
|
62
|
-
|
|
63
|
-
const cleanup = requestId => {
|
|
64
|
-
delete requests[requestId];
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
function* getRequest(requestId) {
|
|
68
|
-
// const { requestId } = action.meta
|
|
69
|
-
const request = requests[requestId];
|
|
70
|
-
|
|
71
|
-
if (!request) {
|
|
72
|
-
return yield new Promise(onAdd => {
|
|
73
|
-
requests[requestId] = {
|
|
74
|
-
onAdd
|
|
75
|
-
};
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
return request;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
const wrap = saga => function* (action, ...rest) {
|
|
83
|
-
const {
|
|
84
|
-
requestId
|
|
85
|
-
} = action.meta;
|
|
86
|
-
const request = yield getRequest(requestId);
|
|
87
|
-
const deferred = request.deferred;
|
|
88
|
-
|
|
89
|
-
try {
|
|
90
|
-
deferred.resolve(yield saga(action, ...rest));
|
|
91
|
-
} catch (error) {
|
|
92
|
-
console.log(error);
|
|
93
|
-
deferred.reject(error);
|
|
94
|
-
} finally {
|
|
95
|
-
cleanup(requestId);
|
|
96
|
-
}
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
function takeEveryAsync(pattern, saga, ...args) {
|
|
100
|
-
return (0, _effects.takeEvery)(pattern, wrap(saga), ...args);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
function takeLatestAsync(pattern, saga, ...args) {
|
|
104
|
-
const tasks = {};
|
|
105
|
-
let deferred;
|
|
106
|
-
|
|
107
|
-
function* wrapper(action, ...rest) {
|
|
108
|
-
if (deferred) {
|
|
109
|
-
const lastRequestId = yield deferred.promise;
|
|
110
|
-
const request = yield getRequest(lastRequestId);
|
|
111
|
-
request.abort();
|
|
112
|
-
const task = yield tasks[lastRequestId].promise;
|
|
113
|
-
yield (0, _effects.cancel)(task);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
deferred = (0, _deferred.default)();
|
|
117
|
-
const {
|
|
118
|
-
requestId
|
|
119
|
-
} = yield getRequest(action.meta.requestId);
|
|
120
|
-
deferred.resolve(requestId);
|
|
121
|
-
yield wrap(saga)(action, ...rest);
|
|
122
|
-
deferred = null;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
const takeEvery = (patternOrChannel, saga, ...args) => (0, _effects.fork)(function* () {
|
|
126
|
-
while (true) {
|
|
127
|
-
const action = yield (0, _effects.take)(patternOrChannel);
|
|
128
|
-
const {
|
|
129
|
-
requestId
|
|
130
|
-
} = action.meta;
|
|
131
|
-
tasks[requestId] = (0, _deferred.default)();
|
|
132
|
-
tasks[requestId].resolve(yield (0, _effects.fork)(saga, ...args.concat(action)));
|
|
133
|
-
}
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
return takeEvery(pattern, wrapper, ...args);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
function takeAggregateAsync(pattern, saga, ...args) {
|
|
140
|
-
let deferred;
|
|
141
|
-
|
|
142
|
-
function* wrapper(action, ...rest) {
|
|
143
|
-
const {
|
|
144
|
-
requestId
|
|
145
|
-
} = action.meta;
|
|
146
|
-
|
|
147
|
-
if (deferred) {
|
|
148
|
-
const request = yield getRequest(requestId);
|
|
149
|
-
const {
|
|
150
|
-
resolve,
|
|
151
|
-
reject
|
|
152
|
-
} = request.deferred;
|
|
153
|
-
const {
|
|
154
|
-
promise
|
|
155
|
-
} = yield deferred.promise;
|
|
156
|
-
promise.then(resolve, reject).finally(() => cleanup(requestId)).catch(() => {});
|
|
157
|
-
} else {
|
|
158
|
-
deferred = (0, _deferred.default)();
|
|
159
|
-
const request = yield getRequest(requestId);
|
|
160
|
-
const {
|
|
161
|
-
promise
|
|
162
|
-
} = request.deferred;
|
|
163
|
-
yield wrap(saga)(action, ...rest);
|
|
164
|
-
deferred.resolve({
|
|
165
|
-
promise
|
|
166
|
-
});
|
|
167
|
-
deferred = null;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
return (0, _effects.takeEvery)(pattern, wrapper, ...args);
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
function* putAsync(action) {
|
|
175
|
-
return (0, _toolkit.unwrapResult)(yield yield (0, _effects.put)(action));
|
|
176
|
-
}
|
package/sagaToolkit.js
DELETED
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
import { createAsyncThunk, unwrapResult } from '@reduxjs/toolkit'
|
|
2
|
-
import { put, take, fork, takeEvery, cancel } from '@redux-saga/core/effects'
|
|
3
|
-
import createDeferred from '@redux-saga/deferred'
|
|
4
|
-
|
|
5
|
-
const requests = {}
|
|
6
|
-
|
|
7
|
-
const addRequest = requestId => {
|
|
8
|
-
const deferred = createDeferred()
|
|
9
|
-
const request = {
|
|
10
|
-
...requests[requestId],
|
|
11
|
-
requestId,
|
|
12
|
-
deferred,
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
if (requests[requestId]) {
|
|
16
|
-
requests[requestId].deferred = deferred
|
|
17
|
-
requests[requestId].onAdd(request)
|
|
18
|
-
} else {
|
|
19
|
-
requests[requestId] = request
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
return deferred.promise
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export const createSagaAction = type => {
|
|
26
|
-
const thunk = createAsyncThunk(type, (_, { requestId }) => addRequest(requestId))
|
|
27
|
-
|
|
28
|
-
function actionCreator(...args) {
|
|
29
|
-
const originalActionCreator = thunk(...args)
|
|
30
|
-
|
|
31
|
-
return (...args) => {
|
|
32
|
-
const promise = originalActionCreator(...args)
|
|
33
|
-
requests[promise.requestId].abort = promise.abort
|
|
34
|
-
|
|
35
|
-
return promise
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
actionCreator.pending = thunk.pending
|
|
40
|
-
actionCreator.rejected = thunk.rejected
|
|
41
|
-
actionCreator.fulfilled = thunk.fulfilled
|
|
42
|
-
actionCreator.typePrefix = thunk.typePrefix
|
|
43
|
-
actionCreator.type = thunk.pending
|
|
44
|
-
|
|
45
|
-
return actionCreator
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const cleanup = requestId => {
|
|
49
|
-
delete requests[requestId]
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
function* getRequest(requestId) {
|
|
53
|
-
const request = requests[requestId]
|
|
54
|
-
|
|
55
|
-
if (!request) {
|
|
56
|
-
return yield (new Promise(onAdd => {
|
|
57
|
-
requests[requestId] = { onAdd }
|
|
58
|
-
}))
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
return request
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
const wrap = saga => function* (action, ...rest) {
|
|
65
|
-
const { requestId } = action.meta
|
|
66
|
-
const request = yield getRequest(requestId)
|
|
67
|
-
const deferred = request.deferred
|
|
68
|
-
|
|
69
|
-
try {
|
|
70
|
-
deferred.resolve(yield saga(action, ...rest))
|
|
71
|
-
} catch (error) {
|
|
72
|
-
deferred.reject(error)
|
|
73
|
-
} finally {
|
|
74
|
-
cleanup(requestId)
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
export function takeEveryAsync(pattern, saga, ...args) {
|
|
79
|
-
return takeEvery(pattern, wrap(saga), ...args)
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
export function takeLatestAsync(pattern, saga, ...args) {
|
|
83
|
-
const tasks = {}
|
|
84
|
-
let deferred
|
|
85
|
-
|
|
86
|
-
function* wrapper(action, ...rest) {
|
|
87
|
-
if (deferred) {
|
|
88
|
-
const lastRequestId = yield deferred.promise
|
|
89
|
-
const request = yield getRequest(lastRequestId)
|
|
90
|
-
|
|
91
|
-
request.abort()
|
|
92
|
-
|
|
93
|
-
const task = yield tasks[lastRequestId].promise
|
|
94
|
-
|
|
95
|
-
yield cancel(task)
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
deferred = createDeferred()
|
|
99
|
-
const { requestId } = yield getRequest(action.meta.requestId)
|
|
100
|
-
|
|
101
|
-
deferred.resolve(requestId)
|
|
102
|
-
|
|
103
|
-
yield wrap(saga)(action, ...rest)
|
|
104
|
-
|
|
105
|
-
deferred = null
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
const takeEvery = (patternOrChannel, saga, ...args) => fork(function* () {
|
|
109
|
-
while (true) {
|
|
110
|
-
const action = yield take(patternOrChannel)
|
|
111
|
-
const { requestId } = action.meta
|
|
112
|
-
tasks[requestId] = createDeferred()
|
|
113
|
-
tasks[requestId].resolve(yield fork(saga, ...args.concat(action)))
|
|
114
|
-
}
|
|
115
|
-
})
|
|
116
|
-
|
|
117
|
-
return takeEvery(pattern, wrapper, ...args)
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
export function takeAggregateAsync(pattern, saga, ...args) {
|
|
121
|
-
let deferred
|
|
122
|
-
|
|
123
|
-
function* wrapper(action, ...rest) {
|
|
124
|
-
const { requestId } = action.meta
|
|
125
|
-
|
|
126
|
-
if (deferred) {
|
|
127
|
-
const request = yield getRequest(requestId)
|
|
128
|
-
const { resolve, reject } = request.deferred
|
|
129
|
-
const { promise } = yield deferred.promise
|
|
130
|
-
|
|
131
|
-
promise
|
|
132
|
-
.then(resolve, reject)
|
|
133
|
-
.finally(() => cleanup(requestId))
|
|
134
|
-
.catch(() => { })
|
|
135
|
-
} else {
|
|
136
|
-
deferred = createDeferred()
|
|
137
|
-
const request = yield getRequest(requestId)
|
|
138
|
-
const { promise } = request.deferred
|
|
139
|
-
|
|
140
|
-
yield wrap(saga)(action, ...rest)
|
|
141
|
-
|
|
142
|
-
deferred.resolve({ promise })
|
|
143
|
-
deferred = null
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
return takeEvery(pattern, wrapper, ...args)
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
export function* putAsync(action) {
|
|
151
|
-
return unwrapResult(yield (yield put(action)))
|
|
152
|
-
}
|