@flowlist/js-core 1.7.5 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1 +1,4 @@
1
- export * from './src/index'
1
+ export * from './src/actions';
2
+ export * as utils from './src/utils';
3
+ export { default as ENUM } from './src/enum';
4
+ export * from './src/types';
@@ -1 +1,582 @@
1
- var e=Object.defineProperty,t=Object.defineProperties,E=Object.getOwnPropertyDescriptors,r=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,_=Object.prototype.propertyIsEnumerable,a=(t,E,r)=>E in t?e(t,E,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[E]=r,T=(e,t)=>{for(var E in t||(t={}))n.call(t,E)&&a(e,E,t[E]);if(r)for(var E of r(t))_.call(t,E)&&a(e,E,t[E]);return e},c=(e,r)=>t(e,E(r));const o=["jump","sinceId","page","seenIds","auto"];var l={SETTER_TYPE:{RESET:0,MERGE:1},FETCH_TYPE_ARRAY:o,FETCH_TYPE:{PAGINATION:o[0],SINCE_FIRST_OR_END_ID:o[1],SCROLL_LOAD_MORE:o[2],HAS_LOADED_IDS:o[3],AUTO:o[4]},CHANGE_TYPE:{SEARCH_FIELD:"search",RESET_FIELD:"reset",RESULT_UPDATE_KV:"update",RESULT_ADD_AFTER:"push",RESULT_ADD_BEFORE:"unshift",RESULT_REMOVE_BY_ID:"delete",RESULT_INSERT_TO_BEFORE:"insert-before",RESULT_INSERT_TO_AFTER:"insert-after",RESULT_LIST_MERGE:"patch",RESULT_ITEM_MERGE:"merge"},FIELD_DATA:{RESULT_KEY:"result",EXTRA_KEY:"extra"},DEFAULT_UNIQUE_KEY_NAME:"id"};const i=(e={})=>T(T({},{result:[],noMore:!1,nothing:!1,loading:!1,error:null,extra:null,fetched:!1,page:0,total:0}),e);let s=0;const u=({func:e,type:t,query:E={}})=>{let r=`${e="string"==typeof e?e:"custom-func-"+s++}-${t=t||"auto"}`;return Object.keys(E).filter((e=>!~["undefined","object","function"].indexOf(typeof E[e])&&!~["page","is_up","since_id","seen_ids","__refresh__","__reload__"].indexOf(e))).sort().forEach((e=>{r+=`-${e}-${E[e]}`})),r},p=(e,t)=>{if(!t)return e||"";let E=e||"";return(y(t)?t:t.split(".")).forEach((e=>{E=E[e]})),E||""},A=(e,t,E)=>{if(/\./.test(t)){const r=t.split("."),n=r.pop();let _=e;r.forEach((e=>{_=_[e]})),_[n]=E}else e[t]=E},R=(e,t,E)=>{if(y(e)){const r=f(t,e,E);if(r<0)return;return e[r]}return e[t]},f=(e,t,E)=>{let r=-1;for(let n=0;n<t.length;n++)if(p(t[n],E.toString()).toString()===(e||"").toString()){r=n;break}return r},S=(e,t,E)=>{y(t)?t.forEach((t=>{const r=p(t,E).toString();e.forEach(((n,_)=>{p(n,E).toString()===r&&(e[_]=T(T({},n),t))}))})):Object.keys(t).forEach((r=>{const n=(r||"").toString();e.forEach(((_,a)=>{p(_,E).toString()===n&&(e[a]=T(T({},_),t[r]))}))}))},y=e=>"[object Array]"===Object.prototype.toString.call(e),g=(e,t,E,r,n)=>{r!==l.FETCH_TYPE.PAGINATION?y(E)?e[t]=n?E.concat(e[t]||[]):(e[t]||[]).concat(E):t===l.FIELD_DATA.RESULT_KEY?(y(e[t])&&(e[t]={}),Object.keys(E).forEach((r=>{e[t][r]=e[t][r]?n?E[r].concat(e[t][r]):e[t][r].concat(E[r]):E[r]}))):e[t]=E:e[t]=E},D=e=>{let t=0;return y(e)?t=e.length:Object.keys(e).forEach((E=>{t+=e[E].length})),t},L=({field:e,uniqueKey:t,query:E,type:r})=>{const n={};if(E=E||{},e.fetched){const _=t||l.DEFAULT_UNIQUE_KEY_NAME;r===l.FETCH_TYPE.AUTO?(n.seen_ids=e.result.map((e=>p(e,_))).join(","),n.since_id=p(e.result[E.is_up?0:e.result.length-1],_),n.is_up=E.is_up?1:0,n.page=E.page||e.page+1):r===l.FETCH_TYPE.HAS_LOADED_IDS?n.seen_ids=e.result.map((e=>p(e,_))).join(","):r===l.FETCH_TYPE.SINCE_FIRST_OR_END_ID?(n.since_id=p(e.result[E.is_up?0:e.result.length-1],_),n.is_up=E.is_up?1:0):r===l.FETCH_TYPE.PAGINATION?n.page=E.page:r===l.FETCH_TYPE.SCROLL_LOAD_MORE&&(n.page=e.page+1)}else r===l.FETCH_TYPE.AUTO?(n.seen_ids="",n.since_id=E.sinceId||(E.is_up?999999999:0),n.is_up=E.is_up?1:0,n.page=E.page||e.page||1):r===l.FETCH_TYPE.HAS_LOADED_IDS?n.seen_ids="":r===l.FETCH_TYPE.SINCE_FIRST_OR_END_ID?(n.since_id=E.sinceId||(E.is_up?999999999:0),n.is_up=E.is_up?1:0):r===l.FETCH_TYPE.PAGINATION?n.page=E.page||e.page:r===l.FETCH_TYPE.SCROLL_LOAD_MORE&&(n.page=1);return T(T({},E),n)};var h=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",generateDefaultField:i,generateFieldName:u,getObjectDeepValue:p,updateObjectDeepValue:A,searchValueByKey:R,computeMatchedItemIndex:f,combineArrayData:S,isArray:y,setReactivityField:g,computeResultLength:D,generateRequestParams:L});const I=({getter:e,setter:t,cache:E,data:r,fieldName:n,type:_,fromLocal:a,cacheTimeout:T,page:c,insertBefore:o})=>new Promise(((i,s)=>{if(a)return void t({key:n,type:l.SETTER_TYPE.RESET,value:r,callback:()=>{i(null)}});const u=e(n);if(!u)return void s();const{result:p,extra:A}=r,R=0===D(p);u.nothing=!u.fetched&&R,u.fetched=!0,u.total=r.total||0,_===l.FETCH_TYPE.PAGINATION?(u.noMore=!1,u.page=+c):(u.noMore=r.no_more||R,u.page=u.page+1),u.loading=!1,g(u,l.FIELD_DATA.RESULT_KEY,p,_,o),A&&g(u,l.FIELD_DATA.EXTRA_KEY,A,_,o),t({key:n,type:l.SETTER_TYPE.RESET,value:u,callback:()=>{T&&E&&!u.nothing?E.set({key:n,value:u,timeout:T}).then(i).catch(i):i(null)}})})),d=({setter:e,fieldName:t,error:E})=>{e({key:t,type:l.SETTER_TYPE.MERGE,value:{error:E,loading:!1}})},Y=({getter:e,setter:t,func:E,type:r,query:n={},opts:_={}})=>new Promise((a=>{const T=u({func:E,type:r,query:n});e(T)?a(null):t({key:T,type:l.SETTER_TYPE.RESET,value:i(_),callback:()=>{a(null)}})})),P=({getter:e,setter:t,cache:E,func:r,type:n,query:_={},api:a,cacheTimeout:o,uniqueKey:s,callback:p})=>new Promise(((A,R)=>{const f=u({func:r,type:n,query:_}),S=e(f),y=!!_.__refresh__,g=!!_.__reload__;if(S&&S.error&&!y)return A(null);if(S&&S.loading)return A(null);const D=S&&S.fetched&&!y;if(D)return A(null);const h=L({field:c(T({},S),{fetched:!1}),uniqueKey:s,query:_,type:n});let Y=!1;const P=()=>{new Promise((e=>{const n=()=>{("string"==typeof r?a[r]:r)(h).then(e).catch((e=>{d({setter:t,fieldName:f,error:e}),R(e)}))};o&&E?E.get({key:f}).then((t=>{Y=!0,e(t)})).catch((()=>{n()})):n()})).then((r=>{const _=()=>{I({getter:e,setter:t,cache:E,data:r,fieldName:f,type:n,fromLocal:Y,cacheTimeout:o,page:h.page||0,insertBefore:!1}).then((()=>{p&&p({params:h,data:r,refresh:y}),A(null)}))};g?t({key:f,type:l.SETTER_TYPE.RESET,value:i(),callback:_}):_()}))};D||g?P():t({key:f,type:l.SETTER_TYPE.RESET,value:c(T({},i()),{loading:!0,error:null}),callback:P})})),O=({getter:e,setter:t,cache:E,query:r={},type:n,func:_,api:a,cacheTimeout:T,uniqueKey:c,errorRetry:o,callback:i})=>new Promise(((s,p)=>{const A=u({func:_,type:n,query:r}),R=e(A);if(!R)return s(null);if(R.loading)return s(null);if(R.nothing)return s(null);if(R.noMore&&!o)return s(null);if(n===l.FETCH_TYPE.PAGINATION&&+r.page===R.page)return s(null);let f;f=n===l.FETCH_TYPE.PAGINATION?{loading:!0,error:null,[l.FIELD_DATA.RESULT_KEY]:[],[l.FIELD_DATA.EXTRA_KEY]:null}:{loading:!0,error:null};const S=L({field:R,uniqueKey:c,query:r,type:n});S[l.FIELD_DATA.EXTRA_KEY]=R[l.FIELD_DATA.EXTRA_KEY];t({key:A,type:l.SETTER_TYPE.MERGE,value:f,callback:()=>{("string"==typeof _?a[_]:_)(S).then((_=>{I({getter:e,setter:t,cache:E,data:_,fieldName:A,type:n,fromLocal:!1,cacheTimeout:T,page:S.page||0,insertBefore:!!r.is_up}).then((()=>{i&&i({params:S,data:_,refresh:!1}),s(null)}))})).catch((e=>{d({setter:t,fieldName:A,error:e}),p(e)}))}})})),F=({getter:e,setter:t,cache:E,type:r,func:n,query:_={},method:a,value:c,id:o,uniqueKey:i,changeKey:s,cacheTimeout:g})=>new Promise(((L,h)=>{const I=u({func:n,type:r,query:_}),d=e(I);if(!d)return void h();const Y=o||"",P=i||l.DEFAULT_UNIQUE_KEY_NAME,O=s||l.FIELD_DATA.RESULT_KEY,F=D(d[l.FIELD_DATA.RESULT_KEY]);if(a===l.CHANGE_TYPE.SEARCH_FIELD)L(R(d[l.FIELD_DATA.RESULT_KEY],Y,P));else if(a===l.CHANGE_TYPE.RESULT_UPDATE_KV){const e=f(Y,d[l.FIELD_DATA.RESULT_KEY],P);A(d[l.FIELD_DATA.RESULT_KEY][e],O,c)}else if(a===l.CHANGE_TYPE.RESULT_ITEM_MERGE){const e=f(Y,d[l.FIELD_DATA.RESULT_KEY],P);d[l.FIELD_DATA.RESULT_KEY][e]=T(T({},d[l.FIELD_DATA.RESULT_KEY][e]),c)}else if(a===l.CHANGE_TYPE.RESET_FIELD)A(d,O,c);else{let e=p(d,O);const t=f(Y,e,P);switch(a){case l.CHANGE_TYPE.RESULT_ADD_AFTER:y(c)?e=e.concat(c):e.push(c);break;case l.CHANGE_TYPE.RESULT_ADD_BEFORE:y(c)?e=c.concat(e):e.unshift(c);break;case l.CHANGE_TYPE.RESULT_REMOVE_BY_ID:t>=0?e.splice(t,1):y(Y)&&(e=e.filter((e=>-1===Y.indexOf(e[P]))));break;case l.CHANGE_TYPE.RESULT_INSERT_TO_BEFORE:t>=0&&e.splice(t,0,c);break;case l.CHANGE_TYPE.RESULT_INSERT_TO_AFTER:t>=0&&e.splice(t+1,0,c);break;case l.CHANGE_TYPE.RESULT_LIST_MERGE:S(e,c,P)}d[O]=e}const N=D(d[l.FIELD_DATA.RESULT_KEY]);d.total=d.total+N-F,d.nothing=0===N,t({key:I,type:l.SETTER_TYPE.MERGE,value:d,callback:()=>{g&&E?E.set({key:I,value:d,timeout:g}).then(L).catch(L):L(null)}})}));export{l as ENUM,P as initData,Y as initState,O as loadMore,F as updateState,h as utils};
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ const FETCH_TYPE_ARRAY = ["jump", "sinceId", "page", "seenIds", "auto"];
21
+ var ENUM = {
22
+ SETTER_TYPE: {
23
+ RESET: 0,
24
+ MERGE: 1
25
+ },
26
+ FETCH_TYPE_ARRAY,
27
+ FETCH_TYPE: {
28
+ PAGINATION: FETCH_TYPE_ARRAY[0],
29
+ SINCE_FIRST_OR_END_ID: FETCH_TYPE_ARRAY[1],
30
+ SCROLL_LOAD_MORE: FETCH_TYPE_ARRAY[2],
31
+ HAS_LOADED_IDS: FETCH_TYPE_ARRAY[3],
32
+ AUTO: FETCH_TYPE_ARRAY[4]
33
+ },
34
+ CHANGE_TYPE: {
35
+ SEARCH_FIELD: "search",
36
+ RESET_FIELD: "reset",
37
+ RESULT_UPDATE_KV: "update",
38
+ RESULT_ADD_AFTER: "push",
39
+ RESULT_ADD_BEFORE: "unshift",
40
+ RESULT_REMOVE_BY_ID: "delete",
41
+ RESULT_INSERT_TO_BEFORE: "insert-before",
42
+ RESULT_INSERT_TO_AFTER: "insert-after",
43
+ RESULT_LIST_MERGE: "patch",
44
+ RESULT_ITEM_MERGE: "merge"
45
+ },
46
+ FIELD_DATA: {
47
+ RESULT_KEY: "result",
48
+ EXTRA_KEY: "extra"
49
+ },
50
+ DEFAULT_UNIQUE_KEY_NAME: "id"
51
+ };
52
+ const isObjectResult = (data) => {
53
+ return data.result === void 0;
54
+ };
55
+ const generateDefaultField = (opts = {}) => __spreadValues(__spreadValues({}, {
56
+ result: [],
57
+ noMore: false,
58
+ nothing: false,
59
+ loading: false,
60
+ error: null,
61
+ extra: null,
62
+ fetched: false,
63
+ page: 0,
64
+ total: 0
65
+ }), opts);
66
+ const generateFieldName = ({
67
+ func,
68
+ type,
69
+ query = {}
70
+ }) => {
71
+ func = typeof func === "string" ? func : `api-${Math.random().toString(36).substring(2)}`;
72
+ type = type || "auto";
73
+ let result = `${func}-${type}`;
74
+ Object.keys(query).filter((_) => !~["undefined", "object", "function"].indexOf(typeof query[_]) && !~[
75
+ "page",
76
+ "is_up",
77
+ "since_id",
78
+ "seen_ids",
79
+ "__refresh__",
80
+ "__reload__"
81
+ ].indexOf(_)).sort().forEach((key) => {
82
+ result += `-${key}-${query[key]}`;
83
+ });
84
+ return result;
85
+ };
86
+ const getObjectDeepValue = (field, keys) => {
87
+ if (!keys) {
88
+ return field || "";
89
+ }
90
+ let result = field || "";
91
+ const keysArr = isArray(keys) ? keys : keys.split(".");
92
+ keysArr.forEach((key) => {
93
+ result = result[key];
94
+ });
95
+ return result || "";
96
+ };
97
+ const updateObjectDeepValue = (field, changeKey, value) => {
98
+ if (/\./.test(changeKey)) {
99
+ const keys = changeKey.split(".");
100
+ const prefix = keys.pop();
101
+ let result = field;
102
+ keys.forEach((key) => {
103
+ result = result[key];
104
+ });
105
+ result[prefix] = value;
106
+ } else {
107
+ field[changeKey] = value;
108
+ }
109
+ };
110
+ const searchValueByKey = (result, id, key) => {
111
+ if (isArray(result)) {
112
+ const index = computeMatchedItemIndex(id, result, key);
113
+ if (index < 0) {
114
+ return void 0;
115
+ }
116
+ return result[index];
117
+ }
118
+ return result[id];
119
+ };
120
+ const computeMatchedItemIndex = (itemId, fieldArr, changingKey) => {
121
+ let s = -1;
122
+ for (let i = 0; i < fieldArr.length; i++) {
123
+ if (getObjectDeepValue(fieldArr[i], changingKey.toString()).toString() === (itemId || "").toString()) {
124
+ s = i;
125
+ break;
126
+ }
127
+ }
128
+ return s;
129
+ };
130
+ const combineArrayData = (fieldArray, value, changingKey) => {
131
+ if (isArray(value)) {
132
+ value.forEach((col) => {
133
+ const stringifyId = getObjectDeepValue(col, changingKey).toString();
134
+ fieldArray.forEach((item, index) => {
135
+ if (getObjectDeepValue(item, changingKey).toString() === stringifyId) {
136
+ fieldArray[index] = __spreadValues(__spreadValues({}, item), col);
137
+ }
138
+ });
139
+ });
140
+ } else {
141
+ Object.keys(value).forEach((uniqueId) => {
142
+ const stringifyId = (uniqueId || "").toString();
143
+ fieldArray.forEach((item, index) => {
144
+ if (getObjectDeepValue(item, changingKey).toString() === stringifyId) {
145
+ fieldArray[index] = __spreadValues(__spreadValues({}, item), value[uniqueId]);
146
+ }
147
+ });
148
+ });
149
+ }
150
+ };
151
+ const isArray = (data) => Object.prototype.toString.call(data) === "[object Array]";
152
+ const setReactivityField = (field, key, value, type, insertBefore) => {
153
+ if (type === ENUM.FETCH_TYPE.PAGINATION) {
154
+ field[key] = value;
155
+ return;
156
+ }
157
+ if (isArray(value)) {
158
+ field[key] = insertBefore ? value.concat(field[key] || []) : (field[key] || []).concat(value);
159
+ return;
160
+ }
161
+ if (key !== ENUM.FIELD_DATA.RESULT_KEY) {
162
+ field[key] = value;
163
+ return;
164
+ }
165
+ if (isArray(field[key])) {
166
+ field[key] = {};
167
+ }
168
+ Object.keys(value).forEach((subKey) => {
169
+ field[key][subKey] = field[key][subKey] ? insertBefore ? value[subKey].concat(field[key][subKey]) : field[key][subKey].concat(value[subKey]) : value[subKey];
170
+ });
171
+ };
172
+ const computeResultLength = (data) => {
173
+ let result = 0;
174
+ if (isArray(data)) {
175
+ result = data.length;
176
+ } else {
177
+ Object.keys(data).forEach((key) => {
178
+ result += data[key].length;
179
+ });
180
+ }
181
+ return result;
182
+ };
183
+ const generateRequestParams = ({
184
+ field,
185
+ uniqueKey,
186
+ query = {},
187
+ type
188
+ }) => {
189
+ const result = {};
190
+ if (field.fetched) {
191
+ const changing = uniqueKey || ENUM.DEFAULT_UNIQUE_KEY_NAME;
192
+ if (type === ENUM.FETCH_TYPE.AUTO) {
193
+ result.seen_ids = field.result.map((_) => getObjectDeepValue(_, changing)).join(",");
194
+ result.since_id = getObjectDeepValue(field.result[query.is_up ? 0 : field.result.length - 1], changing);
195
+ result.is_up = query.is_up ? 1 : 0;
196
+ result.page = query.page || field.page + 1;
197
+ } else if (type === ENUM.FETCH_TYPE.HAS_LOADED_IDS) {
198
+ result.seen_ids = field.result.map((_) => getObjectDeepValue(_, changing)).join(",");
199
+ } else if (type === ENUM.FETCH_TYPE.SINCE_FIRST_OR_END_ID) {
200
+ result.since_id = getObjectDeepValue(field.result[query.is_up ? 0 : field.result.length - 1], changing);
201
+ result.is_up = query.is_up ? 1 : 0;
202
+ } else if (type === ENUM.FETCH_TYPE.PAGINATION) {
203
+ result.page = query.page;
204
+ } else if (type === ENUM.FETCH_TYPE.SCROLL_LOAD_MORE) {
205
+ result.page = field.page + 1;
206
+ }
207
+ } else {
208
+ if (type === ENUM.FETCH_TYPE.AUTO) {
209
+ result.seen_ids = "";
210
+ result.since_id = query.sinceId || (query.is_up ? 999999999 : 0);
211
+ result.is_up = query.is_up ? 1 : 0;
212
+ result.page = query.page || field.page || 1;
213
+ } else if (type === ENUM.FETCH_TYPE.HAS_LOADED_IDS) {
214
+ result.seen_ids = "";
215
+ } else if (type === ENUM.FETCH_TYPE.SINCE_FIRST_OR_END_ID) {
216
+ result.since_id = query.sinceId || (query.is_up ? 999999999 : 0);
217
+ result.is_up = query.is_up ? 1 : 0;
218
+ } else if (type === ENUM.FETCH_TYPE.PAGINATION) {
219
+ result.page = query.page || field.page;
220
+ } else if (type === ENUM.FETCH_TYPE.SCROLL_LOAD_MORE) {
221
+ result.page = 1;
222
+ }
223
+ }
224
+ return __spreadValues(__spreadValues({}, query), result);
225
+ };
226
+ var utils = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
227
+ __proto__: null,
228
+ isObjectResult,
229
+ generateDefaultField,
230
+ generateFieldName,
231
+ getObjectDeepValue,
232
+ updateObjectDeepValue,
233
+ searchValueByKey,
234
+ computeMatchedItemIndex,
235
+ combineArrayData,
236
+ isArray,
237
+ setReactivityField,
238
+ computeResultLength,
239
+ generateRequestParams
240
+ }, Symbol.toStringTag, { value: "Module" }));
241
+ const SET_DATA = ({
242
+ getter,
243
+ setter,
244
+ data,
245
+ fieldName,
246
+ type,
247
+ page,
248
+ insertBefore
249
+ }) => {
250
+ return new Promise((resolve, reject) => {
251
+ const fieldData = getter(fieldName);
252
+ if (!fieldData) {
253
+ reject();
254
+ return;
255
+ }
256
+ let result;
257
+ let extra;
258
+ if (isObjectResult(data)) {
259
+ result = data;
260
+ fieldData.nothing = false;
261
+ fieldData.fetched = true;
262
+ fieldData.noMore = true;
263
+ fieldData.page = -1;
264
+ } else {
265
+ result = data.result;
266
+ extra = data.extra;
267
+ const isEmpty = computeResultLength(result) === 0;
268
+ fieldData.nothing = fieldData.fetched ? false : isEmpty;
269
+ fieldData.fetched = true;
270
+ fieldData.total = data.total || 0;
271
+ if (type === ENUM.FETCH_TYPE.PAGINATION) {
272
+ fieldData.noMore = false;
273
+ fieldData.page = +page;
274
+ } else {
275
+ fieldData.noMore = data.no_more || isEmpty;
276
+ fieldData.page = fieldData.page + 1;
277
+ }
278
+ }
279
+ fieldData.loading = false;
280
+ setReactivityField(fieldData, ENUM.FIELD_DATA.RESULT_KEY, result, type, insertBefore);
281
+ extra && setReactivityField(fieldData, ENUM.FIELD_DATA.EXTRA_KEY, extra, type, insertBefore);
282
+ setter({
283
+ key: fieldName,
284
+ type: ENUM.SETTER_TYPE.RESET,
285
+ value: fieldData,
286
+ callback: () => {
287
+ resolve(null);
288
+ }
289
+ });
290
+ });
291
+ };
292
+ const SET_ERROR = ({ setter, fieldName, error }) => {
293
+ setter({
294
+ key: fieldName,
295
+ type: ENUM.SETTER_TYPE.MERGE,
296
+ value: {
297
+ error,
298
+ loading: false
299
+ }
300
+ });
301
+ };
302
+ const initState = ({
303
+ getter,
304
+ setter,
305
+ func,
306
+ type,
307
+ query,
308
+ opts
309
+ }) => {
310
+ return new Promise((resolve) => {
311
+ const fieldName = generateFieldName({ func, type, query });
312
+ const fieldData = getter(fieldName);
313
+ if (fieldData) {
314
+ resolve(null);
315
+ return;
316
+ }
317
+ setter({
318
+ key: fieldName,
319
+ type: ENUM.SETTER_TYPE.RESET,
320
+ value: generateDefaultField(opts),
321
+ callback: () => {
322
+ resolve(null);
323
+ }
324
+ });
325
+ });
326
+ };
327
+ const initData = ({
328
+ getter,
329
+ setter,
330
+ func,
331
+ type,
332
+ query,
333
+ api,
334
+ uniqueKey,
335
+ callback
336
+ }) => new Promise((resolve, reject) => {
337
+ const fieldName = generateFieldName({ func, type, query });
338
+ const fieldData = getter(fieldName);
339
+ const doRefresh = !!(query == null ? void 0 : query.__refresh__);
340
+ const needReset = !!(query == null ? void 0 : query.__reload__);
341
+ if (fieldData && fieldData.error && !doRefresh) {
342
+ return resolve(null);
343
+ }
344
+ if (fieldData && fieldData.loading) {
345
+ return resolve(null);
346
+ }
347
+ const dontFetch = fieldData && fieldData.fetched && !doRefresh;
348
+ if (dontFetch) {
349
+ return resolve(null);
350
+ }
351
+ const params = generateRequestParams({
352
+ field: __spreadProps(__spreadValues({}, fieldData), {
353
+ fetched: false
354
+ }),
355
+ uniqueKey,
356
+ query,
357
+ type
358
+ });
359
+ const getData = () => {
360
+ const loadData = () => new Promise((res) => {
361
+ const getDataFromAPI = () => {
362
+ const funcCaller = typeof func === "string" ? api[func] : func;
363
+ funcCaller(params).then(res).catch((error) => {
364
+ SET_ERROR({ setter, fieldName, error });
365
+ reject(error);
366
+ });
367
+ };
368
+ getDataFromAPI();
369
+ });
370
+ loadData().then((data) => {
371
+ const setData = () => {
372
+ SET_DATA({
373
+ getter,
374
+ setter,
375
+ data,
376
+ fieldName,
377
+ type,
378
+ page: params.page || 0,
379
+ insertBefore: false
380
+ }).then(() => {
381
+ if (callback) {
382
+ callback({
383
+ params,
384
+ data,
385
+ refresh: doRefresh
386
+ });
387
+ }
388
+ resolve(null);
389
+ });
390
+ };
391
+ if (needReset) {
392
+ setter({
393
+ key: fieldName,
394
+ type: ENUM.SETTER_TYPE.RESET,
395
+ value: generateDefaultField(),
396
+ callback: setData
397
+ });
398
+ } else {
399
+ setData();
400
+ }
401
+ });
402
+ };
403
+ if (!dontFetch && !needReset) {
404
+ setter({
405
+ key: fieldName,
406
+ type: ENUM.SETTER_TYPE.RESET,
407
+ value: __spreadProps(__spreadValues({}, generateDefaultField()), {
408
+ loading: true,
409
+ error: null
410
+ }),
411
+ callback: getData
412
+ });
413
+ } else {
414
+ getData();
415
+ }
416
+ });
417
+ const loadMore = ({
418
+ getter,
419
+ setter,
420
+ query,
421
+ type,
422
+ func,
423
+ api,
424
+ uniqueKey,
425
+ errorRetry,
426
+ callback
427
+ }) => new Promise((resolve, reject) => {
428
+ const fieldName = generateFieldName({ func, type, query });
429
+ const fieldData = getter(fieldName);
430
+ if (!fieldData) {
431
+ return resolve(null);
432
+ }
433
+ if (fieldData.loading) {
434
+ return resolve(null);
435
+ }
436
+ if (fieldData.nothing) {
437
+ return resolve(null);
438
+ }
439
+ if (fieldData.noMore && !errorRetry) {
440
+ return resolve(null);
441
+ }
442
+ if (type === ENUM.FETCH_TYPE.PAGINATION && query && +query.page === fieldData.page) {
443
+ return resolve(null);
444
+ }
445
+ let loadingState;
446
+ if (type === ENUM.FETCH_TYPE.PAGINATION) {
447
+ loadingState = {
448
+ loading: true,
449
+ error: null,
450
+ [ENUM.FIELD_DATA.RESULT_KEY]: [],
451
+ [ENUM.FIELD_DATA.EXTRA_KEY]: null
452
+ };
453
+ } else {
454
+ loadingState = {
455
+ loading: true,
456
+ error: null
457
+ };
458
+ }
459
+ const params = generateRequestParams({
460
+ field: fieldData,
461
+ uniqueKey,
462
+ query,
463
+ type
464
+ });
465
+ params[ENUM.FIELD_DATA.EXTRA_KEY] = fieldData[ENUM.FIELD_DATA.EXTRA_KEY];
466
+ const getData = () => {
467
+ const funcCaller = typeof func === "string" ? api[func] : func;
468
+ funcCaller(params).then((data) => {
469
+ SET_DATA({
470
+ getter,
471
+ setter,
472
+ data,
473
+ fieldName,
474
+ type,
475
+ page: params.page || 0,
476
+ insertBefore: !!(query == null ? void 0 : query.is_up)
477
+ }).then(() => {
478
+ if (callback) {
479
+ callback({
480
+ params,
481
+ data,
482
+ refresh: false
483
+ });
484
+ }
485
+ resolve(null);
486
+ });
487
+ }).catch((error) => {
488
+ SET_ERROR({ setter, fieldName, error });
489
+ reject(error);
490
+ });
491
+ };
492
+ setter({
493
+ key: fieldName,
494
+ type: ENUM.SETTER_TYPE.MERGE,
495
+ value: loadingState,
496
+ callback: getData
497
+ });
498
+ });
499
+ const updateState = ({
500
+ getter,
501
+ setter,
502
+ type,
503
+ func,
504
+ query,
505
+ method,
506
+ value,
507
+ id,
508
+ uniqueKey,
509
+ changeKey
510
+ }) => {
511
+ return new Promise((resolve, reject) => {
512
+ const fieldName = generateFieldName({ func, type, query });
513
+ const fieldData = getter(fieldName);
514
+ if (!fieldData) {
515
+ reject();
516
+ return;
517
+ }
518
+ if (fieldData.page === -1) {
519
+ resolve(null);
520
+ return;
521
+ }
522
+ const _id = id || "";
523
+ const _uniqueKey = uniqueKey || ENUM.DEFAULT_UNIQUE_KEY_NAME;
524
+ const _changeKey = changeKey || ENUM.FIELD_DATA.RESULT_KEY;
525
+ const beforeLength = computeResultLength(fieldData[ENUM.FIELD_DATA.RESULT_KEY]);
526
+ if (method === ENUM.CHANGE_TYPE.SEARCH_FIELD) {
527
+ resolve(searchValueByKey(fieldData[ENUM.FIELD_DATA.RESULT_KEY], _id, _uniqueKey));
528
+ } else if (method === ENUM.CHANGE_TYPE.RESULT_UPDATE_KV) {
529
+ const matchedIndex = computeMatchedItemIndex(_id, fieldData[ENUM.FIELD_DATA.RESULT_KEY], _uniqueKey);
530
+ updateObjectDeepValue(fieldData[ENUM.FIELD_DATA.RESULT_KEY][matchedIndex], _changeKey, value);
531
+ } else if (method === ENUM.CHANGE_TYPE.RESULT_ITEM_MERGE) {
532
+ const matchedIndex = computeMatchedItemIndex(_id, fieldData[ENUM.FIELD_DATA.RESULT_KEY], _uniqueKey);
533
+ fieldData[ENUM.FIELD_DATA.RESULT_KEY][matchedIndex] = __spreadValues(__spreadValues({}, fieldData[ENUM.FIELD_DATA.RESULT_KEY][matchedIndex]), value);
534
+ } else if (method === ENUM.CHANGE_TYPE.RESET_FIELD) {
535
+ updateObjectDeepValue(fieldData, _changeKey, value);
536
+ } else {
537
+ let modifyValue = getObjectDeepValue(fieldData, _changeKey);
538
+ const matchedIndex = computeMatchedItemIndex(_id, modifyValue, _uniqueKey);
539
+ switch (method) {
540
+ case ENUM.CHANGE_TYPE.RESULT_ADD_AFTER:
541
+ isArray(value) ? modifyValue = modifyValue.concat(value) : modifyValue.push(value);
542
+ break;
543
+ case ENUM.CHANGE_TYPE.RESULT_ADD_BEFORE:
544
+ isArray(value) ? modifyValue = value.concat(modifyValue) : modifyValue.unshift(value);
545
+ break;
546
+ case ENUM.CHANGE_TYPE.RESULT_REMOVE_BY_ID:
547
+ if (matchedIndex >= 0) {
548
+ modifyValue.splice(matchedIndex, 1);
549
+ } else if (isArray(_id)) {
550
+ modifyValue = modifyValue.filter((_) => _id.indexOf(_[_uniqueKey]) === -1);
551
+ }
552
+ break;
553
+ case ENUM.CHANGE_TYPE.RESULT_INSERT_TO_BEFORE:
554
+ if (matchedIndex >= 0) {
555
+ modifyValue.splice(matchedIndex, 0, value);
556
+ }
557
+ break;
558
+ case ENUM.CHANGE_TYPE.RESULT_INSERT_TO_AFTER:
559
+ if (matchedIndex >= 0) {
560
+ modifyValue.splice(matchedIndex + 1, 0, value);
561
+ }
562
+ break;
563
+ case ENUM.CHANGE_TYPE.RESULT_LIST_MERGE:
564
+ combineArrayData(modifyValue, value, _uniqueKey);
565
+ break;
566
+ }
567
+ fieldData[_changeKey] = modifyValue;
568
+ }
569
+ const afterLength = computeResultLength(fieldData[ENUM.FIELD_DATA.RESULT_KEY]);
570
+ fieldData.total = fieldData.total + afterLength - beforeLength;
571
+ fieldData.nothing = afterLength === 0;
572
+ setter({
573
+ key: fieldName,
574
+ type: ENUM.SETTER_TYPE.MERGE,
575
+ value: fieldData,
576
+ callback: () => {
577
+ resolve(null);
578
+ }
579
+ });
580
+ });
581
+ };
582
+ export { ENUM, initData, initState, loadMore, updateState, utils };
@@ -1 +1 @@
1
- var __defProp=Object.defineProperty,__defProps=Object.defineProperties,__getOwnPropDescs=Object.getOwnPropertyDescriptors,__getOwnPropSymbols=Object.getOwnPropertySymbols,__hasOwnProp=Object.prototype.hasOwnProperty,__propIsEnum=Object.prototype.propertyIsEnumerable,__defNormalProp=(e,t,r)=>t in e?__defProp(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,__spreadValues=(e,t)=>{for(var r in t||(t={}))__hasOwnProp.call(t,r)&&__defNormalProp(e,r,t[r]);if(__getOwnPropSymbols)for(var r of __getOwnPropSymbols(t))__propIsEnum.call(t,r)&&__defNormalProp(e,r,t[r]);return e},__spreadProps=(e,t)=>__defProps(e,__getOwnPropDescs(t));!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).JsCore={})}(this,(function(e){"use strict";const t=["jump","sinceId","page","seenIds","auto"];var r={SETTER_TYPE:{RESET:0,MERGE:1},FETCH_TYPE_ARRAY:t,FETCH_TYPE:{PAGINATION:t[0],SINCE_FIRST_OR_END_ID:t[1],SCROLL_LOAD_MORE:t[2],HAS_LOADED_IDS:t[3],AUTO:t[4]},CHANGE_TYPE:{SEARCH_FIELD:"search",RESET_FIELD:"reset",RESULT_UPDATE_KV:"update",RESULT_ADD_AFTER:"push",RESULT_ADD_BEFORE:"unshift",RESULT_REMOVE_BY_ID:"delete",RESULT_INSERT_TO_BEFORE:"insert-before",RESULT_INSERT_TO_AFTER:"insert-after",RESULT_LIST_MERGE:"patch",RESULT_ITEM_MERGE:"merge"},FIELD_DATA:{RESULT_KEY:"result",EXTRA_KEY:"extra"},DEFAULT_UNIQUE_KEY_NAME:"id"};const _=(e={})=>__spreadValues(__spreadValues({},{result:[],noMore:!1,nothing:!1,loading:!1,error:null,extra:null,fetched:!1,page:0,total:0}),e);let E=0;const a=({func:e,type:t,query:r={}})=>{let _=`${e="string"==typeof e?e:"custom-func-"+E++}-${t=t||"auto"}`;return Object.keys(r).filter((e=>!~["undefined","object","function"].indexOf(typeof r[e])&&!~["page","is_up","since_id","seen_ids","__refresh__","__reload__"].indexOf(e))).sort().forEach((e=>{_+=`-${e}-${r[e]}`})),_},n=(e,t)=>{if(!t)return e||"";let r=e||"";return(T(t)?t:t.split(".")).forEach((e=>{r=r[e]})),r||""},o=(e,t,r)=>{if(/\./.test(t)){const _=t.split("."),E=_.pop();let a=e;_.forEach((e=>{a=a[e]})),a[E]=r}else e[t]=r},s=(e,t,r)=>{if(T(e)){const _=l(t,e,r);if(_<0)return;return e[_]}return e[t]},l=(e,t,r)=>{let _=-1;for(let E=0;E<t.length;E++)if(n(t[E],r.toString()).toString()===(e||"").toString()){_=E;break}return _},c=(e,t,r)=>{T(t)?t.forEach((t=>{const _=n(t,r).toString();e.forEach(((E,a)=>{n(E,r).toString()===_&&(e[a]=__spreadValues(__spreadValues({},E),t))}))})):Object.keys(t).forEach((_=>{const E=(_||"").toString();e.forEach(((a,o)=>{n(a,r).toString()===E&&(e[o]=__spreadValues(__spreadValues({},a),t[_]))}))}))},T=e=>"[object Array]"===Object.prototype.toString.call(e),i=(e,t,_,E,a)=>{E!==r.FETCH_TYPE.PAGINATION?T(_)?e[t]=a?_.concat(e[t]||[]):(e[t]||[]).concat(_):t===r.FIELD_DATA.RESULT_KEY?(T(e[t])&&(e[t]={}),Object.keys(_).forEach((r=>{e[t][r]=e[t][r]?a?_[r].concat(e[t][r]):e[t][r].concat(_[r]):_[r]}))):e[t]=_:e[t]=_},u=e=>{let t=0;return T(e)?t=e.length:Object.keys(e).forEach((r=>{t+=e[r].length})),t},p=({field:e,uniqueKey:t,query:_,type:E})=>{const a={};if(_=_||{},e.fetched){const o=t||r.DEFAULT_UNIQUE_KEY_NAME;E===r.FETCH_TYPE.AUTO?(a.seen_ids=e.result.map((e=>n(e,o))).join(","),a.since_id=n(e.result[_.is_up?0:e.result.length-1],o),a.is_up=_.is_up?1:0,a.page=_.page||e.page+1):E===r.FETCH_TYPE.HAS_LOADED_IDS?a.seen_ids=e.result.map((e=>n(e,o))).join(","):E===r.FETCH_TYPE.SINCE_FIRST_OR_END_ID?(a.since_id=n(e.result[_.is_up?0:e.result.length-1],o),a.is_up=_.is_up?1:0):E===r.FETCH_TYPE.PAGINATION?a.page=_.page:E===r.FETCH_TYPE.SCROLL_LOAD_MORE&&(a.page=e.page+1)}else E===r.FETCH_TYPE.AUTO?(a.seen_ids="",a.since_id=_.sinceId||(_.is_up?999999999:0),a.is_up=_.is_up?1:0,a.page=_.page||e.page||1):E===r.FETCH_TYPE.HAS_LOADED_IDS?a.seen_ids="":E===r.FETCH_TYPE.SINCE_FIRST_OR_END_ID?(a.since_id=_.sinceId||(_.is_up?999999999:0),a.is_up=_.is_up?1:0):E===r.FETCH_TYPE.PAGINATION?a.page=_.page||e.page:E===r.FETCH_TYPE.SCROLL_LOAD_MORE&&(a.page=1);return __spreadValues(__spreadValues({},_),a)};var f=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",generateDefaultField:_,generateFieldName:a,getObjectDeepValue:n,updateObjectDeepValue:o,searchValueByKey:s,computeMatchedItemIndex:l,combineArrayData:c,isArray:T,setReactivityField:i,computeResultLength:u,generateRequestParams:p});const d=({getter:e,setter:t,cache:_,data:E,fieldName:a,type:n,fromLocal:o,cacheTimeout:s,page:l,insertBefore:c})=>new Promise(((T,p)=>{if(o)return void t({key:a,type:r.SETTER_TYPE.RESET,value:E,callback:()=>{T(null)}});const f=e(a);if(!f)return void p();const{result:d,extra:A}=E,R=0===u(d);f.nothing=!f.fetched&&R,f.fetched=!0,f.total=E.total||0,n===r.FETCH_TYPE.PAGINATION?(f.noMore=!1,f.page=+l):(f.noMore=E.no_more||R,f.page=f.page+1),f.loading=!1,i(f,r.FIELD_DATA.RESULT_KEY,d,n,c),A&&i(f,r.FIELD_DATA.EXTRA_KEY,A,n,c),t({key:a,type:r.SETTER_TYPE.RESET,value:f,callback:()=>{s&&_&&!f.nothing?_.set({key:a,value:f,timeout:s}).then(T).catch(T):T(null)}})})),A=({setter:e,fieldName:t,error:_})=>{e({key:t,type:r.SETTER_TYPE.MERGE,value:{error:_,loading:!1}})};e.ENUM=r,e.initData=({getter:e,setter:t,cache:E,func:n,type:o,query:s={},api:l,cacheTimeout:c,uniqueKey:T,callback:i})=>new Promise(((u,f)=>{const R=a({func:n,type:o,query:s}),y=e(R),S=!!s.__refresh__,g=!!s.__reload__;if(y&&y.error&&!S)return u(null);if(y&&y.loading)return u(null);const D=y&&y.fetched&&!S;if(D)return u(null);const P=p({field:__spreadProps(__spreadValues({},y),{fetched:!1}),uniqueKey:T,query:s,type:o});let h=!1;const L=()=>{new Promise((e=>{const r=()=>{("string"==typeof n?l[n]:n)(P).then(e).catch((e=>{A({setter:t,fieldName:R,error:e}),f(e)}))};c&&E?E.get({key:R}).then((t=>{h=!0,e(t)})).catch((()=>{r()})):r()})).then((a=>{const n=()=>{d({getter:e,setter:t,cache:E,data:a,fieldName:R,type:o,fromLocal:h,cacheTimeout:c,page:P.page||0,insertBefore:!1}).then((()=>{i&&i({params:P,data:a,refresh:S}),u(null)}))};g?t({key:R,type:r.SETTER_TYPE.RESET,value:_(),callback:n}):n()}))};D||g?L():t({key:R,type:r.SETTER_TYPE.RESET,value:__spreadProps(__spreadValues({},_()),{loading:!0,error:null}),callback:L})})),e.initState=({getter:e,setter:t,func:E,type:n,query:o={},opts:s={}})=>new Promise((l=>{const c=a({func:E,type:n,query:o});e(c)?l(null):t({key:c,type:r.SETTER_TYPE.RESET,value:_(s),callback:()=>{l(null)}})})),e.loadMore=({getter:e,setter:t,cache:_,query:E={},type:n,func:o,api:s,cacheTimeout:l,uniqueKey:c,errorRetry:T,callback:i})=>new Promise(((u,f)=>{const R=a({func:o,type:n,query:E}),y=e(R);if(!y)return u(null);if(y.loading)return u(null);if(y.nothing)return u(null);if(y.noMore&&!T)return u(null);if(n===r.FETCH_TYPE.PAGINATION&&+E.page===y.page)return u(null);let S;S=n===r.FETCH_TYPE.PAGINATION?{loading:!0,error:null,[r.FIELD_DATA.RESULT_KEY]:[],[r.FIELD_DATA.EXTRA_KEY]:null}:{loading:!0,error:null};const g=p({field:y,uniqueKey:c,query:E,type:n});g[r.FIELD_DATA.EXTRA_KEY]=y[r.FIELD_DATA.EXTRA_KEY];t({key:R,type:r.SETTER_TYPE.MERGE,value:S,callback:()=>{("string"==typeof o?s[o]:o)(g).then((r=>{d({getter:e,setter:t,cache:_,data:r,fieldName:R,type:n,fromLocal:!1,cacheTimeout:l,page:g.page||0,insertBefore:!!E.is_up}).then((()=>{i&&i({params:g,data:r,refresh:!1}),u(null)}))})).catch((e=>{A({setter:t,fieldName:R,error:e}),f(e)}))}})})),e.updateState=({getter:e,setter:t,cache:_,type:E,func:i,query:p={},method:f,value:d,id:A,uniqueKey:R,changeKey:y,cacheTimeout:S})=>new Promise(((g,D)=>{const P=a({func:i,type:E,query:p}),h=e(P);if(!h)return void D();const L=A||"",I=R||r.DEFAULT_UNIQUE_KEY_NAME,O=y||r.FIELD_DATA.RESULT_KEY,Y=u(h[r.FIELD_DATA.RESULT_KEY]);if(f===r.CHANGE_TYPE.SEARCH_FIELD)g(s(h[r.FIELD_DATA.RESULT_KEY],L,I));else if(f===r.CHANGE_TYPE.RESULT_UPDATE_KV){const e=l(L,h[r.FIELD_DATA.RESULT_KEY],I);o(h[r.FIELD_DATA.RESULT_KEY][e],O,d)}else if(f===r.CHANGE_TYPE.RESULT_ITEM_MERGE){const e=l(L,h[r.FIELD_DATA.RESULT_KEY],I);h[r.FIELD_DATA.RESULT_KEY][e]=__spreadValues(__spreadValues({},h[r.FIELD_DATA.RESULT_KEY][e]),d)}else if(f===r.CHANGE_TYPE.RESET_FIELD)o(h,O,d);else{let e=n(h,O);const t=l(L,e,I);switch(f){case r.CHANGE_TYPE.RESULT_ADD_AFTER:T(d)?e=e.concat(d):e.push(d);break;case r.CHANGE_TYPE.RESULT_ADD_BEFORE:T(d)?e=d.concat(e):e.unshift(d);break;case r.CHANGE_TYPE.RESULT_REMOVE_BY_ID:t>=0?e.splice(t,1):T(L)&&(e=e.filter((e=>-1===L.indexOf(e[I]))));break;case r.CHANGE_TYPE.RESULT_INSERT_TO_BEFORE:t>=0&&e.splice(t,0,d);break;case r.CHANGE_TYPE.RESULT_INSERT_TO_AFTER:t>=0&&e.splice(t+1,0,d);break;case r.CHANGE_TYPE.RESULT_LIST_MERGE:c(e,d,I)}h[O]=e}const F=u(h[r.FIELD_DATA.RESULT_KEY]);h.total=h.total+F-Y,h.nothing=0===F,t({key:P,type:r.SETTER_TYPE.MERGE,value:h,callback:()=>{S&&_?_.set({key:P,value:h,timeout:S}).then(g).catch(g):g(null)}})})),e.utils=f,Object.defineProperty(e,"__esModule",{value:!0}),e[Symbol.toStringTag]="Module"}));
1
+ var J=Object.defineProperty,W=Object.defineProperties;var Z=Object.getOwnPropertyDescriptors;var k=Object.getOwnPropertySymbols;var v=Object.prototype.hasOwnProperty,q=Object.prototype.propertyIsEnumerable;var B=(r,c,n)=>c in r?J(r,c,{enumerable:!0,configurable:!0,writable:!0,value:n}):r[c]=n,I=(r,c)=>{for(var n in c||(c={}))v.call(c,n)&&B(r,n,c[n]);if(k)for(var n of k(c))q.call(c,n)&&B(r,n,c[n]);return r},b=(r,c)=>W(r,Z(c));(function(r,c){typeof exports=="object"&&typeof module!="undefined"?c(exports):typeof define=="function"&&define.amd?define(["exports"],c):(r=typeof globalThis!="undefined"?globalThis:r||self,c(r.JsCore={}))})(this,function(r){"use strict";const c=["jump","sinceId","page","seenIds","auto"];var n={SETTER_TYPE:{RESET:0,MERGE:1},FETCH_TYPE_ARRAY:c,FETCH_TYPE:{PAGINATION:c[0],SINCE_FIRST_OR_END_ID:c[1],SCROLL_LOAD_MORE:c[2],HAS_LOADED_IDS:c[3],AUTO:c[4]},CHANGE_TYPE:{SEARCH_FIELD:"search",RESET_FIELD:"reset",RESULT_UPDATE_KV:"update",RESULT_ADD_AFTER:"push",RESULT_ADD_BEFORE:"unshift",RESULT_REMOVE_BY_ID:"delete",RESULT_INSERT_TO_BEFORE:"insert-before",RESULT_INSERT_TO_AFTER:"insert-after",RESULT_LIST_MERGE:"patch",RESULT_ITEM_MERGE:"merge"},FIELD_DATA:{RESULT_KEY:"result",EXTRA_KEY:"extra"},DEFAULT_UNIQUE_KEY_NAME:"id"};const G=t=>t.result===void 0,N=(t={})=>I({result:[],noMore:!1,nothing:!1,loading:!1,error:null,extra:null,fetched:!1,page:0,total:0},t),h=({func:t,type:_,query:e={}})=>{t=typeof t=="string"?t:`api-${Math.random().toString(36).substring(2)}`,_=_||"auto";let s=`${t}-${_}`;return Object.keys(e).filter(E=>!~["undefined","object","function"].indexOf(typeof e[E])&&!~["page","is_up","since_id","seen_ids","__refresh__","__reload__"].indexOf(E)).sort().forEach(E=>{s+=`-${E}-${e[E]}`}),s},u=(t,_)=>{if(!_)return t||"";let e=t||"";return(L(_)?_:_.split(".")).forEach(E=>{e=e[E]}),e||""},m=(t,_,e)=>{if(/\./.test(_)){const s=_.split("."),E=s.pop();let i=t;s.forEach(a=>{i=i[a]}),i[E]=e}else t[_]=e},j=(t,_,e)=>{if(L(t)){const s=O(_,t,e);return s<0?void 0:t[s]}return t[_]},O=(t,_,e)=>{let s=-1;for(let E=0;E<_.length;E++)if(u(_[E],e.toString()).toString()===(t||"").toString()){s=E;break}return s},K=(t,_,e)=>{L(_)?_.forEach(s=>{const E=u(s,e).toString();t.forEach((i,a)=>{u(i,e).toString()===E&&(t[a]=I(I({},i),s))})}):Object.keys(_).forEach(s=>{const E=(s||"").toString();t.forEach((i,a)=>{u(i,e).toString()===E&&(t[a]=I(I({},i),_[s]))})})},L=t=>Object.prototype.toString.call(t)==="[object Array]",M=(t,_,e,s,E)=>{if(s===n.FETCH_TYPE.PAGINATION){t[_]=e;return}if(L(e)){t[_]=E?e.concat(t[_]||[]):(t[_]||[]).concat(e);return}if(_!==n.FIELD_DATA.RESULT_KEY){t[_]=e;return}L(t[_])&&(t[_]={}),Object.keys(e).forEach(i=>{t[_][i]=t[_][i]?E?e[i].concat(t[_][i]):t[_][i].concat(e[i]):e[i]})},U=t=>{let _=0;return L(t)?_=t.length:Object.keys(t).forEach(e=>{_+=t[e].length}),_},H=({field:t,uniqueKey:_,query:e={},type:s})=>{const E={};if(t.fetched){const i=_||n.DEFAULT_UNIQUE_KEY_NAME;s===n.FETCH_TYPE.AUTO?(E.seen_ids=t.result.map(a=>u(a,i)).join(","),E.since_id=u(t.result[e.is_up?0:t.result.length-1],i),E.is_up=e.is_up?1:0,E.page=e.page||t.page+1):s===n.FETCH_TYPE.HAS_LOADED_IDS?E.seen_ids=t.result.map(a=>u(a,i)).join(","):s===n.FETCH_TYPE.SINCE_FIRST_OR_END_ID?(E.since_id=u(t.result[e.is_up?0:t.result.length-1],i),E.is_up=e.is_up?1:0):s===n.FETCH_TYPE.PAGINATION?E.page=e.page:s===n.FETCH_TYPE.SCROLL_LOAD_MORE&&(E.page=t.page+1)}else s===n.FETCH_TYPE.AUTO?(E.seen_ids="",E.since_id=e.sinceId||(e.is_up?999999999:0),E.is_up=e.is_up?1:0,E.page=e.page||t.page||1):s===n.FETCH_TYPE.HAS_LOADED_IDS?E.seen_ids="":s===n.FETCH_TYPE.SINCE_FIRST_OR_END_ID?(E.since_id=e.sinceId||(e.is_up?999999999:0),E.is_up=e.is_up?1:0):s===n.FETCH_TYPE.PAGINATION?E.page=e.page||t.page:s===n.FETCH_TYPE.SCROLL_LOAD_MORE&&(E.page=1);return I(I({},e),E)};var w=Object.freeze(Object.defineProperty({__proto__:null,isObjectResult:G,generateDefaultField:N,generateFieldName:h,getObjectDeepValue:u,updateObjectDeepValue:m,searchValueByKey:j,computeMatchedItemIndex:O,combineArrayData:K,isArray:L,setReactivityField:M,computeResultLength:U,generateRequestParams:H},Symbol.toStringTag,{value:"Module"}));const x=({getter:t,setter:_,data:e,fieldName:s,type:E,page:i,insertBefore:a})=>new Promise((p,S)=>{const T=t(s);if(!T){S();return}let R,A;if(G(e))R=e,T.nothing=!1,T.fetched=!0,T.noMore=!0,T.page=-1;else{R=e.result,A=e.extra;const f=U(R)===0;T.nothing=T.fetched?!1:f,T.fetched=!0,T.total=e.total||0,E===n.FETCH_TYPE.PAGINATION?(T.noMore=!1,T.page=+i):(T.noMore=e.no_more||f,T.page=T.page+1)}T.loading=!1,M(T,n.FIELD_DATA.RESULT_KEY,R,E,a),A&&M(T,n.FIELD_DATA.EXTRA_KEY,A,E,a),_({key:s,type:n.SETTER_TYPE.RESET,value:T,callback:()=>{p(null)}})}),V=({setter:t,fieldName:_,error:e})=>{t({key:_,type:n.SETTER_TYPE.MERGE,value:{error:e,loading:!1}})},X=({getter:t,setter:_,func:e,type:s,query:E,opts:i})=>new Promise(a=>{const p=h({func:e,type:s,query:E});if(t(p)){a(null);return}_({key:p,type:n.SETTER_TYPE.RESET,value:N(i),callback:()=>{a(null)}})}),$=({getter:t,setter:_,func:e,type:s,query:E,api:i,uniqueKey:a,callback:p})=>new Promise((S,T)=>{const R=h({func:e,type:s,query:E}),A=t(R),f=!!(E!=null&&E.__refresh__),o=!!(E!=null&&E.__reload__);if(A&&A.error&&!f||A&&A.loading)return S(null);const D=A&&A.fetched&&!f;if(D)return S(null);const g=H({field:b(I({},A),{fetched:!1}),uniqueKey:a,query:E,type:s}),F=()=>{(()=>new Promise(d=>{(()=>{(typeof e=="string"?i[e]:e)(g).then(d).catch(C=>{V({setter:_,fieldName:R,error:C}),T(C)})})()}))().then(d=>{const l=()=>{x({getter:t,setter:_,data:d,fieldName:R,type:s,page:g.page||0,insertBefore:!1}).then(()=>{p&&p({params:g,data:d,refresh:f}),S(null)})};o?_({key:R,type:n.SETTER_TYPE.RESET,value:N(),callback:l}):l()})};!D&&!o?_({key:R,type:n.SETTER_TYPE.RESET,value:b(I({},N()),{loading:!0,error:null}),callback:F}):F()}),Q=({getter:t,setter:_,query:e,type:s,func:E,api:i,uniqueKey:a,errorRetry:p,callback:S})=>new Promise((T,R)=>{const A=h({func:E,type:s,query:e}),f=t(A);if(!f||f.loading||f.nothing||f.noMore&&!p||s===n.FETCH_TYPE.PAGINATION&&e&&+e.page===f.page)return T(null);let o;s===n.FETCH_TYPE.PAGINATION?o={loading:!0,error:null,[n.FIELD_DATA.RESULT_KEY]:[],[n.FIELD_DATA.EXTRA_KEY]:null}:o={loading:!0,error:null};const D=H({field:f,uniqueKey:a,query:e,type:s});D[n.FIELD_DATA.EXTRA_KEY]=f[n.FIELD_DATA.EXTRA_KEY];const g=()=>{(typeof E=="string"?i[E]:E)(D).then(Y=>{x({getter:t,setter:_,data:Y,fieldName:A,type:s,page:D.page||0,insertBefore:!!(e!=null&&e.is_up)}).then(()=>{S&&S({params:D,data:Y,refresh:!1}),T(null)})}).catch(Y=>{V({setter:_,fieldName:A,error:Y}),R(Y)})};_({key:A,type:n.SETTER_TYPE.MERGE,value:o,callback:g})}),z=({getter:t,setter:_,type:e,func:s,query:E,method:i,value:a,id:p,uniqueKey:S,changeKey:T})=>new Promise((R,A)=>{const f=h({func:s,type:e,query:E}),o=t(f);if(!o){A();return}if(o.page===-1){R(null);return}const D=p||"",g=S||n.DEFAULT_UNIQUE_KEY_NAME,F=T||n.FIELD_DATA.RESULT_KEY,Y=U(o[n.FIELD_DATA.RESULT_KEY]);if(i===n.CHANGE_TYPE.SEARCH_FIELD)R(j(o[n.FIELD_DATA.RESULT_KEY],D,g));else if(i===n.CHANGE_TYPE.RESULT_UPDATE_KV){const l=O(D,o[n.FIELD_DATA.RESULT_KEY],g);m(o[n.FIELD_DATA.RESULT_KEY][l],F,a)}else if(i===n.CHANGE_TYPE.RESULT_ITEM_MERGE){const l=O(D,o[n.FIELD_DATA.RESULT_KEY],g);o[n.FIELD_DATA.RESULT_KEY][l]=I(I({},o[n.FIELD_DATA.RESULT_KEY][l]),a)}else if(i===n.CHANGE_TYPE.RESET_FIELD)m(o,F,a);else{let l=u(o,F);const P=O(D,l,g);switch(i){case n.CHANGE_TYPE.RESULT_ADD_AFTER:L(a)?l=l.concat(a):l.push(a);break;case n.CHANGE_TYPE.RESULT_ADD_BEFORE:L(a)?l=a.concat(l):l.unshift(a);break;case n.CHANGE_TYPE.RESULT_REMOVE_BY_ID:P>=0?l.splice(P,1):L(D)&&(l=l.filter(C=>D.indexOf(C[g])===-1));break;case n.CHANGE_TYPE.RESULT_INSERT_TO_BEFORE:P>=0&&l.splice(P,0,a);break;case n.CHANGE_TYPE.RESULT_INSERT_TO_AFTER:P>=0&&l.splice(P+1,0,a);break;case n.CHANGE_TYPE.RESULT_LIST_MERGE:K(l,a,g);break}o[F]=l}const d=U(o[n.FIELD_DATA.RESULT_KEY]);o.total=o.total+d-Y,o.nothing=d===0,_({key:f,type:n.SETTER_TYPE.MERGE,value:o,callback:()=>{R(null)}})});r.ENUM=n,r.initData=$,r.initState=X,r.loadMore=Q,r.updateState=z,r.utils=w,Object.defineProperties(r,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});