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/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
- }