@wavemaker-ai/app-rn-runtime 1.0.0-rc.324 → 1.0.0-rc.328
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/components/advanced/offline-banner/offline-banner.component.js +68 -0
- package/components/advanced/offline-banner/offline-banner.component.js.map +1 -0
- package/components/advanced/offline-banner/offline-banner.props.js +12 -0
- package/components/advanced/offline-banner/offline-banner.props.js.map +1 -0
- package/components/advanced/offline-banner/offline-banner.styles.js +99 -0
- package/components/advanced/offline-banner/offline-banner.styles.js.map +1 -0
- package/components/advanced/webview/webview.component.js +2 -2
- package/components/advanced/webview/webview.component.js.map +1 -1
- package/components/advanced/webview/webview.props.js +1 -1
- package/components/advanced/webview/webview.props.js.map +1 -1
- package/components/basic/bottomsheet/bottomsheet.component.js +156 -14
- package/components/basic/bottomsheet/bottomsheet.component.js.map +1 -1
- package/components/basic/bottomsheet/bottomsheet.styles.js +0 -3
- package/components/basic/bottomsheet/bottomsheet.styles.js.map +1 -1
- package/components/basic/progress-circle/progress-circle.component.js +3 -1
- package/components/basic/progress-circle/progress-circle.component.js.map +1 -1
- package/components/chart/area-chart/area-chart.component.js +86 -93
- package/components/chart/area-chart/area-chart.component.js.map +1 -1
- package/components/chart/area-chart/area-chart.props.js +2 -0
- package/components/chart/area-chart/area-chart.props.js.map +1 -1
- package/components/chart/bar-chart/bar-chart.component.js +79 -97
- package/components/chart/bar-chart/bar-chart.component.js.map +1 -1
- package/components/chart/basechart.component.js +117 -96
- package/components/chart/basechart.component.js.map +1 -1
- package/components/chart/basechart.props.js +12 -0
- package/components/chart/basechart.props.js.map +1 -1
- package/components/chart/basechart.styles.js.map +1 -1
- package/components/chart/bubble-chart/bubble-chart.component.js +72 -70
- package/components/chart/bubble-chart/bubble-chart.component.js.map +1 -1
- package/components/chart/bubble-chart/bubble-chart.props.js +1 -0
- package/components/chart/bubble-chart/bubble-chart.props.js.map +1 -1
- package/components/chart/line-chart/line-chart.component.js +105 -79
- package/components/chart/line-chart/line-chart.component.js.map +1 -1
- package/components/chart/pie-chart/pie-chart.component.js +70 -166
- package/components/chart/pie-chart/pie-chart.component.js.map +1 -1
- package/components/chart/pie-chart/pie-chart.props.js +1 -0
- package/components/chart/pie-chart/pie-chart.props.js.map +1 -1
- package/components/container/accordion/accordionpane/accordionpane.component.js +6 -2
- package/components/container/accordion/accordionpane/accordionpane.component.js.map +1 -1
- package/components/container/container.component.js +27 -1
- package/components/container/container.component.js.map +1 -1
- package/components/container/container.props.js +7 -0
- package/components/container/container.props.js.map +1 -1
- package/components/container/linearlayout/linearlayoutitem/linearlayoutitem.component.js +25 -1
- package/components/container/linearlayout/linearlayoutitem/linearlayoutitem.component.js.map +1 -1
- package/components/container/linearlayout/linearlayoutitem/linearlayoutitem.props.js +1 -0
- package/components/container/linearlayout/linearlayoutitem/linearlayoutitem.props.js.map +1 -1
- package/components/container/tabs/tabheader/tabheader.component.js +5 -14
- package/components/container/tabs/tabheader/tabheader.component.js.map +1 -1
- package/components/container/tabs/tabheader/tabheader.props.js +0 -2
- package/components/container/tabs/tabheader/tabheader.props.js.map +1 -1
- package/components/container/tabs/tabheader/tabheader.styles.js +1 -43
- package/components/container/tabs/tabheader/tabheader.styles.js.map +1 -1
- package/components/container/tabs/tabpane/tabpane.component.js +6 -2
- package/components/container/tabs/tabpane/tabpane.component.js.map +1 -1
- package/components/container/tabs/tabs.component.js +2 -6
- package/components/container/tabs/tabs.component.js.map +1 -1
- package/components/container/tabs/tabs.props.js +0 -2
- package/components/container/tabs/tabs.props.js.map +1 -1
- package/components/container/wizard/wizardstep/wizardstep.component.js +28 -5
- package/components/container/wizard/wizardstep/wizardstep.component.js.map +1 -1
- package/components/container/wizard/wizardstep/wizardstep.props.js +2 -0
- package/components/container/wizard/wizardstep/wizardstep.props.js.map +1 -1
- package/components/data/form/form-field/form-field.component.js +1 -0
- package/components/data/form/form-field/form-field.component.js.map +1 -1
- package/components/data/form/form-field/form-field.props.js +1 -0
- package/components/data/form/form-field/form-field.props.js.map +1 -1
- package/components/data/list/list-template/list-template.component.js +3 -0
- package/components/data/list/list-template/list-template.component.js.map +1 -1
- package/components/data/list/list.component.js +6 -4
- package/components/data/list/list.component.js.map +1 -1
- package/components/data/list/list.styles.js +1 -14
- package/components/data/list/list.styles.js.map +1 -1
- package/components/input/baseinput/baseinput.component.js +7 -0
- package/components/input/baseinput/baseinput.component.js.map +1 -1
- package/components/input/calendar/calendar.component.js +4 -0
- package/components/input/calendar/calendar.component.js.map +1 -1
- package/components/input/calendar/views/month-view.js +8 -1
- package/components/input/calendar/views/month-view.js.map +1 -1
- package/components/input/checkboxset/checkboxset.component.js.map +1 -1
- package/components/input/checkboxset/checkboxset.styles.js.map +1 -1
- package/components/input/chips/chips.component.js +3 -4
- package/components/input/chips/chips.component.js.map +1 -1
- package/components/input/chips/chips.styles.js +1 -2
- package/components/input/chips/chips.styles.js.map +1 -1
- package/components/input/currency/currency.component.js +1 -0
- package/components/input/currency/currency.component.js.map +1 -1
- package/components/input/number/number.component.js +1 -0
- package/components/input/number/number.component.js.map +1 -1
- package/components/input/switch/switch.component.js +2 -16
- package/components/input/switch/switch.component.js.map +1 -1
- package/components/input/switch/switch.props.js +0 -1
- package/components/input/switch/switch.props.js.map +1 -1
- package/components/input/switch/switch.styles.js +0 -19
- package/components/input/switch/switch.styles.js.map +1 -1
- package/components/input/text/text.component.js +14 -3
- package/components/input/text/text.component.js.map +1 -1
- package/components/input/text/text.props.js +1 -0
- package/components/input/text/text.props.js.map +1 -1
- package/components/input/text/text.styles.js +3 -1
- package/components/input/text/text.styles.js.map +1 -1
- package/components/input/textarea/textarea.component.js +3 -2
- package/components/input/textarea/textarea.component.js.map +1 -1
- package/components/input/toggle/toggle.component.js +4 -13
- package/components/input/toggle/toggle.component.js.map +1 -1
- package/components/input/toggle/toggle.props.js +1 -3
- package/components/input/toggle/toggle.props.js.map +1 -1
- package/components/input/toggle/toggle.styles.js +4 -12
- package/components/input/toggle/toggle.styles.js.map +1 -1
- package/components/navigation/appnavbar/appnavbar.props.js +1 -1
- package/components/navigation/appnavbar/appnavbar.props.js.map +1 -1
- package/components/page/page-content/page-content.component.js +3 -0
- package/components/page/page-content/page-content.component.js.map +1 -1
- package/components/page/page-content/page-content.props.js +2 -0
- package/components/page/page-content/page-content.props.js.map +1 -1
- package/components/page/page.component.js +95 -2
- package/components/page/page.component.js.map +1 -1
- package/components/page/page.props.js +3 -0
- package/components/page/page.props.js.map +1 -1
- package/components/page/tabbar/tabbar.component.js +3 -2
- package/components/page/tabbar/tabbar.component.js.map +1 -1
- package/components/page/tabbar/tabbar.props.js +1 -0
- package/components/page/tabbar/tabbar.props.js.map +1 -1
- package/components-prism/basic/search/search.component.js +8 -12
- package/components-prism/basic/search/search.component.js.map +1 -1
- package/components-prism/basic/search/search.props.js +1 -1
- package/components-prism/basic/search/search.props.js.map +1 -1
- package/components-prism/basic/search/search.styles.js +60 -25
- package/components-prism/basic/search/search.styles.js.map +1 -1
- package/core/AppConfig.js.map +1 -1
- package/core/accessibility.js +9 -0
- package/core/accessibility.js.map +1 -1
- package/core/auto-layout-host.component.js +8 -2
- package/core/auto-layout-host.component.js.map +1 -1
- package/core/auto-layout.utils.js +59 -0
- package/core/auto-layout.utils.js.map +1 -1
- package/core/base.component.js +22 -1
- package/core/base.component.js.map +1 -1
- package/core/components/floatinglabel.component.js +5 -2
- package/core/components/floatinglabel.component.js.map +1 -1
- package/core/components/textinput.component.js +3 -0
- package/core/components/textinput.component.js.map +1 -1
- package/core/network.service.js.map +1 -1
- package/core/tappable.component.js +109 -15
- package/core/tappable.component.js.map +1 -1
- package/npm-shrinkwrap.json +2835 -5858
- package/package-lock.json +2835 -5858
- package/package.json +25 -18
- package/runtime/base-fragment.component.js +7 -1
- package/runtime/base-fragment.component.js.map +1 -1
- package/runtime/base-page.component.js +24 -0
- package/runtime/base-page.component.js.map +1 -1
- package/runtime/base-partial.component.js.map +1 -1
- package/runtime/navigator/drawer.navigator.js +1 -0
- package/runtime/navigator/drawer.navigator.js.map +1 -1
- package/runtime/navigator/stack.navigator.js +16 -1
- package/runtime/navigator/stack.navigator.js.map +1 -1
- package/runtime/services/device/scan-service.js +12 -34
- package/runtime/services/device/scan-service.js.map +1 -1
- package/styles/theme.variables.js.map +1 -1
- package/variables/http.service.js +6 -1
- package/variables/http.service.js.map +1 -1
- package/variables/interceptor/intercept-context.impl.js +46 -0
- package/variables/interceptor/intercept-context.impl.js.map +1 -0
- package/variables/interceptor/interceptor.factory.js +78 -0
- package/variables/interceptor/interceptor.factory.js.map +1 -0
- package/variables/interceptor/persistent.storage.js +142 -0
- package/variables/interceptor/persistent.storage.js.map +1 -0
- package/variables/interceptor/service-variable-interceptor.js +52 -0
- package/variables/interceptor/service-variable-interceptor.js.map +1 -0
- package/variables/service-variable.js +109 -1
- package/variables/service-variable.js.map +1 -1
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
2
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
3
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
4
|
+
import asyncStorageService from "@wavemaker-ai/app-rn-runtime/core/storage.service";
|
|
5
|
+
let KEYS_STORED = {};
|
|
6
|
+
const PERSISTENT_STORAGE_KEYS = "PERSISTENT_STORAGE_KEYS";
|
|
7
|
+
const DEFAULT_MAX_ENTRIES = 100;
|
|
8
|
+
export class PersistentStorageService {
|
|
9
|
+
constructor(keyPrefix) {
|
|
10
|
+
this.keyPrefix = keyPrefix;
|
|
11
|
+
}
|
|
12
|
+
static configure(config) {
|
|
13
|
+
if (config.maxEntries !== undefined && config.maxEntries > 0) {
|
|
14
|
+
PersistentStorageService.maxEntries = config.maxEntries;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
static addKey(key) {
|
|
18
|
+
KEYS_STORED[key] = true;
|
|
19
|
+
asyncStorageService.setItem(PERSISTENT_STORAGE_KEYS, JSON.stringify(KEYS_STORED));
|
|
20
|
+
}
|
|
21
|
+
static removeKey(key) {
|
|
22
|
+
delete KEYS_STORED[key];
|
|
23
|
+
asyncStorageService.setItem(PERSISTENT_STORAGE_KEYS, JSON.stringify(KEYS_STORED));
|
|
24
|
+
}
|
|
25
|
+
getKey(key) {
|
|
26
|
+
return this.keyPrefix + '_ps_' + key;
|
|
27
|
+
}
|
|
28
|
+
async setItem(key, value, ttl) {
|
|
29
|
+
const fullKey = this.getKey(key);
|
|
30
|
+
if (!KEYS_STORED[fullKey]) {
|
|
31
|
+
await this.evictIfNeeded();
|
|
32
|
+
}
|
|
33
|
+
await asyncStorageService.setItem(fullKey, JSON.stringify({
|
|
34
|
+
key: fullKey,
|
|
35
|
+
value,
|
|
36
|
+
createdAt: Date.now(),
|
|
37
|
+
lastAccessedAt: Date.now(),
|
|
38
|
+
ttl: ttl && ttl > 0 ? Date.now() + ttl : undefined
|
|
39
|
+
}));
|
|
40
|
+
PersistentStorageService.addKey(fullKey);
|
|
41
|
+
}
|
|
42
|
+
async getItem(key) {
|
|
43
|
+
const fullKey = this.getKey(key);
|
|
44
|
+
const entryStr = await asyncStorageService.getItem(fullKey);
|
|
45
|
+
if (entryStr) {
|
|
46
|
+
const entry = JSON.parse(entryStr);
|
|
47
|
+
if (entry.ttl && entry.ttl < Date.now()) {
|
|
48
|
+
await asyncStorageService.removeItem(fullKey);
|
|
49
|
+
PersistentStorageService.removeKey(fullKey);
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
await asyncStorageService.setItem(fullKey, JSON.stringify({
|
|
53
|
+
...entry,
|
|
54
|
+
lastAccessedAt: Date.now()
|
|
55
|
+
}));
|
|
56
|
+
return entry.value;
|
|
57
|
+
}
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
async removeItem(key) {
|
|
61
|
+
const fullKey = this.getKey(key);
|
|
62
|
+
await asyncStorageService.removeItem(fullKey);
|
|
63
|
+
PersistentStorageService.removeKey(fullKey);
|
|
64
|
+
}
|
|
65
|
+
async clear() {
|
|
66
|
+
return Promise.all(Object.keys(KEYS_STORED).map(async key => {
|
|
67
|
+
await asyncStorageService.removeItem(key);
|
|
68
|
+
PersistentStorageService.removeKey(key);
|
|
69
|
+
}));
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Evict least recently used entries if cache is at max capacity
|
|
74
|
+
*/
|
|
75
|
+
async evictIfNeeded() {
|
|
76
|
+
const currentCount = Object.keys(KEYS_STORED).length;
|
|
77
|
+
if (currentCount < PersistentStorageService.maxEntries) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
await PersistentStorageService.cleanEntriesWithExpiredTTL();
|
|
81
|
+
const countAfterCleanup = Object.keys(KEYS_STORED).length;
|
|
82
|
+
if (countAfterCleanup < PersistentStorageService.maxEntries) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const entriesToEvict = Math.max(1, Math.floor(PersistentStorageService.maxEntries * 0.1));
|
|
86
|
+
await this.evictLRU(entriesToEvict);
|
|
87
|
+
}
|
|
88
|
+
async evictLRU(count) {
|
|
89
|
+
const entries = [];
|
|
90
|
+
await Promise.all(Object.keys(KEYS_STORED).map(async key => {
|
|
91
|
+
const entryStr = await asyncStorageService.getItem(key);
|
|
92
|
+
if (entryStr) {
|
|
93
|
+
const entry = JSON.parse(entryStr);
|
|
94
|
+
entries.push({
|
|
95
|
+
key,
|
|
96
|
+
lastAccessedAt: entry.lastAccessedAt || entry.createdAt || 0
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}));
|
|
100
|
+
entries.sort((a, b) => a.lastAccessedAt - b.lastAccessedAt);
|
|
101
|
+
for (let i = 0; i < Math.min(count, entries.length); i++) {
|
|
102
|
+
await asyncStorageService.removeItem(entries[i].key);
|
|
103
|
+
PersistentStorageService.removeKey(entries[i].key);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
static getInstance(keyPrefix) {
|
|
107
|
+
return new PersistentStorageService(keyPrefix);
|
|
108
|
+
}
|
|
109
|
+
static async cleanEntriesWithExpiredTTL() {
|
|
110
|
+
let cleanedCount = 0;
|
|
111
|
+
await Promise.all(Object.keys(KEYS_STORED).map(async key => {
|
|
112
|
+
const entryStr = await asyncStorageService.getItem(key);
|
|
113
|
+
if (entryStr) {
|
|
114
|
+
const entry = JSON.parse(entryStr);
|
|
115
|
+
if (entry.ttl && entry.ttl < Date.now()) {
|
|
116
|
+
await asyncStorageService.removeItem(key);
|
|
117
|
+
PersistentStorageService.removeKey(key);
|
|
118
|
+
cleanedCount++;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}));
|
|
122
|
+
return cleanedCount;
|
|
123
|
+
}
|
|
124
|
+
static async init() {
|
|
125
|
+
KEYS_STORED = JSON.parse((await asyncStorageService.getItem(PERSISTENT_STORAGE_KEYS)) || '{}');
|
|
126
|
+
}
|
|
127
|
+
static scheduleTTLCleanup(interval) {
|
|
128
|
+
if (PersistentStorageService.cleanupIntervalId) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
PersistentStorageService.cleanupIntervalId = setInterval(PersistentStorageService.cleanEntriesWithExpiredTTL, interval);
|
|
132
|
+
}
|
|
133
|
+
static stopCleanup() {
|
|
134
|
+
if (PersistentStorageService.cleanupIntervalId) {
|
|
135
|
+
clearInterval(PersistentStorageService.cleanupIntervalId);
|
|
136
|
+
PersistentStorageService.cleanupIntervalId = null;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
_defineProperty(PersistentStorageService, "maxEntries", DEFAULT_MAX_ENTRIES);
|
|
141
|
+
_defineProperty(PersistentStorageService, "cleanupIntervalId", null);
|
|
142
|
+
//# sourceMappingURL=persistent.storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["asyncStorageService","KEYS_STORED","PERSISTENT_STORAGE_KEYS","DEFAULT_MAX_ENTRIES","PersistentStorageService","constructor","keyPrefix","configure","config","maxEntries","undefined","addKey","key","setItem","JSON","stringify","removeKey","getKey","value","ttl","fullKey","evictIfNeeded","createdAt","Date","now","lastAccessedAt","getItem","entryStr","entry","parse","removeItem","clear","Promise","all","Object","keys","map","currentCount","length","cleanEntriesWithExpiredTTL","countAfterCleanup","entriesToEvict","Math","max","floor","evictLRU","count","entries","push","sort","a","b","i","min","getInstance","cleanedCount","init","scheduleTTLCleanup","interval","cleanupIntervalId","setInterval","stopCleanup","clearInterval","_defineProperty"],"sources":["persistent.storage.ts"],"sourcesContent":["import { StorageService, CacheEntry, CacheStats, StorageConfig } from \"@wavemaker-ai/variables/src/interceptor\";\nimport asyncStorageService from \"@wavemaker-ai/app-rn-runtime/core/storage.service\";\n\nlet KEYS_STORED = {} as Record<string, boolean>;\n\n\nconst PERSISTENT_STORAGE_KEYS = \"PERSISTENT_STORAGE_KEYS\";\n\nconst DEFAULT_MAX_ENTRIES = 100;\n\nexport class PersistentStorageService implements StorageService {\n static maxEntries: number = DEFAULT_MAX_ENTRIES;\n static cleanupIntervalId: NodeJS.Timeout | null = null;\n\n private constructor(private keyPrefix: string) {}\n\n static configure(config: StorageConfig) {\n if (config.maxEntries !== undefined && config.maxEntries > 0) {\n PersistentStorageService.maxEntries = config.maxEntries;\n }\n }\n\n static addKey(key: string) {\n KEYS_STORED[key] = true;\n asyncStorageService.setItem(PERSISTENT_STORAGE_KEYS, JSON.stringify(KEYS_STORED));\n }\n\n static removeKey(key: string) {\n delete KEYS_STORED[key];\n asyncStorageService.setItem(PERSISTENT_STORAGE_KEYS, JSON.stringify(KEYS_STORED));\n }\n\n getKey(key: string) {\n return this.keyPrefix + '_ps_' + key;\n }\n\n public async setItem(key: string, value: any, ttl: number) {\n const fullKey = this.getKey(key);\n \n if (!KEYS_STORED[fullKey]) {\n await this.evictIfNeeded();\n }\n\n await asyncStorageService.setItem(fullKey, JSON.stringify({\n key: fullKey,\n value,\n createdAt: Date.now(),\n lastAccessedAt: Date.now(),\n ttl: ttl && ttl > 0 ? Date.now() + ttl : undefined\n } as CacheEntry));\n PersistentStorageService.addKey(fullKey);\n }\n\n public async getItem(key: string) {\n const fullKey = this.getKey(key);\n const entryStr = await asyncStorageService.getItem(fullKey);\n if (entryStr) {\n const entry = JSON.parse(entryStr);\n if (entry.ttl && entry.ttl < Date.now()) {\n await asyncStorageService.removeItem(fullKey);\n PersistentStorageService.removeKey(fullKey);\n return undefined;\n }\n await asyncStorageService.setItem(fullKey, JSON.stringify({\n ...entry,\n lastAccessedAt: Date.now()\n } as CacheEntry));\n return entry.value;\n }\n return undefined;\n }\n\n public async removeItem(key: string) {\n const fullKey = this.getKey(key);\n await asyncStorageService.removeItem(fullKey);\n PersistentStorageService.removeKey(fullKey);\n }\n\n public async clear() {\n return Promise.all(Object.keys(KEYS_STORED).map(async (key) => {\n await asyncStorageService.removeItem(key);\n PersistentStorageService.removeKey(key);\n }));\n }\n\n /**\n * Evict least recently used entries if cache is at max capacity\n */\n private async evictIfNeeded(): Promise<void> {\n const currentCount = Object.keys(KEYS_STORED).length;\n \n if (currentCount < PersistentStorageService.maxEntries) {\n return;\n }\n\n await PersistentStorageService.cleanEntriesWithExpiredTTL();\n\n const countAfterCleanup = Object.keys(KEYS_STORED).length;\n if (countAfterCleanup < PersistentStorageService.maxEntries) {\n return;\n }\n\n const entriesToEvict = Math.max(1, Math.floor(PersistentStorageService.maxEntries * 0.1));\n await this.evictLRU(entriesToEvict);\n }\n\n private async evictLRU(count: number): Promise<void> {\n const entries: Array<{ key: string; lastAccessedAt: number }> = [];\n\n await Promise.all(\n Object.keys(KEYS_STORED).map(async (key) => {\n const entryStr = await asyncStorageService.getItem(key);\n if (entryStr) {\n const entry = JSON.parse(entryStr) as CacheEntry;\n entries.push({\n key,\n lastAccessedAt: entry.lastAccessedAt || entry.createdAt || 0\n });\n }\n })\n );\n entries.sort((a, b) => a.lastAccessedAt - b.lastAccessedAt);\n for (let i = 0; i < Math.min(count, entries.length); i++) {\n await asyncStorageService.removeItem(entries[i].key);\n PersistentStorageService.removeKey(entries[i].key);\n }\n }\n\n static getInstance(keyPrefix: string) {\n return new PersistentStorageService(keyPrefix);\n }\n\n static async cleanEntriesWithExpiredTTL(): Promise<number> {\n let cleanedCount = 0;\n await Promise.all(Object.keys(KEYS_STORED).map(async (key) => {\n const entryStr = await asyncStorageService.getItem(key);\n if (entryStr) {\n const entry = JSON.parse(entryStr);\n if (entry.ttl && entry.ttl < Date.now()) {\n await asyncStorageService.removeItem(key);\n PersistentStorageService.removeKey(key);\n cleanedCount++;\n }\n }\n }));\n return cleanedCount;\n }\n\n static async init() {\n KEYS_STORED = JSON.parse(await asyncStorageService.getItem(PERSISTENT_STORAGE_KEYS) || '{}');\n }\n\n static scheduleTTLCleanup(interval: number) {\n if (PersistentStorageService.cleanupIntervalId) {\n return;\n }\n PersistentStorageService.cleanupIntervalId = setInterval(\n PersistentStorageService.cleanEntriesWithExpiredTTL,\n interval\n );\n }\n\n static stopCleanup() {\n if (PersistentStorageService.cleanupIntervalId) {\n clearInterval(PersistentStorageService.cleanupIntervalId);\n PersistentStorageService.cleanupIntervalId = null;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
2
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
3
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
4
|
+
import { BaseInterceptor } from "@wavemaker-ai/variables/src/interceptor";
|
|
5
|
+
import { ServiceVariable } from "../service-variable";
|
|
6
|
+
export class ServiceVariableInterceptor extends BaseInterceptor {
|
|
7
|
+
constructor(options) {
|
|
8
|
+
super({
|
|
9
|
+
...options
|
|
10
|
+
});
|
|
11
|
+
_defineProperty(this, "url", void 0);
|
|
12
|
+
_defineProperty(this, "method", void 0);
|
|
13
|
+
this.url = options.url || '';
|
|
14
|
+
this.method = options.method || 'GET';
|
|
15
|
+
}
|
|
16
|
+
normalizeUrlForMatch(inputUrl) {
|
|
17
|
+
const value = (inputUrl || '').trim();
|
|
18
|
+
if (!value) {
|
|
19
|
+
return '';
|
|
20
|
+
}
|
|
21
|
+
const normalizePath = path => path.split('#')[0].replace(/^\/+/, '').replace(/\/+$/, '');
|
|
22
|
+
try {
|
|
23
|
+
const parsed = new URL(value);
|
|
24
|
+
return normalizePath(`${parsed.pathname}${parsed.search || ''}`);
|
|
25
|
+
} catch {
|
|
26
|
+
return normalizePath(value);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
match(ic) {
|
|
30
|
+
if (!(ic.variable instanceof ServiceVariable)) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
if (this.options.match) {
|
|
34
|
+
return this.options.match(ic);
|
|
35
|
+
}
|
|
36
|
+
const serviceInfo = ic.variable.serviceInfo;
|
|
37
|
+
const url = this.normalizeUrlForMatch(serviceInfo.directPath || serviceInfo.relativePath);
|
|
38
|
+
const matchUrl = this.normalizeUrlForMatch(this.url);
|
|
39
|
+
const method = (serviceInfo.httpMethod || '').toUpperCase();
|
|
40
|
+
return url === matchUrl && method === this.method;
|
|
41
|
+
}
|
|
42
|
+
async intercept(context) {
|
|
43
|
+
if (this.options.intercept) {
|
|
44
|
+
context.variable.dataSet = await this.options.intercept(context);
|
|
45
|
+
;
|
|
46
|
+
} else {
|
|
47
|
+
context.variable.dataSet = await context.proceed();
|
|
48
|
+
}
|
|
49
|
+
return context.variable.dataSet;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=service-variable-interceptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["BaseInterceptor","ServiceVariable","ServiceVariableInterceptor","constructor","options","_defineProperty","url","method","normalizeUrlForMatch","inputUrl","value","trim","normalizePath","path","split","replace","parsed","URL","pathname","search","match","ic","variable","serviceInfo","directPath","relativePath","matchUrl","httpMethod","toUpperCase","intercept","context","dataSet","proceed"],"sources":["service-variable-interceptor.ts"],"sourcesContent":["import { BaseInterceptor } from \"@wavemaker-ai/variables/src/interceptor\";\nimport { ServiceVariable } from \"../service-variable\";\nimport { ServiceVariableContext } from \"./intercept-context.impl\";\n\nexport class ServiceVariableInterceptor extends BaseInterceptor<ServiceVariableContext> {\n\n private url: string;\n private method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'OPTIONS' | 'HEAD';\n \n constructor(options: {\n url?: string;\n method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'OPTIONS' | 'HEAD';\n match?: (ic: ServiceVariableContext) => boolean;\n intercept?: (context: ServiceVariableContext) => Promise<any>;\n }) {\n super({...options});\n this.url = options.url || '';\n this.method = options.method || 'GET';\n }\n\n private normalizeUrlForMatch(inputUrl: string) {\n const value = (inputUrl || '').trim();\n if (!value) {\n return '';\n }\n const normalizePath = (path: string) => path\n .split('#')[0]\n .replace(/^\\/+/, '')\n .replace(/\\/+$/, '');\n try {\n const parsed = new URL(value);\n return normalizePath(`${parsed.pathname}${parsed.search || ''}`);\n } catch {\n return normalizePath(value);\n }\n }\n\n match(ic: ServiceVariableContext) {\n if (!(ic.variable instanceof ServiceVariable)) {\n return false;\n }\n if (this.options.match) {\n return this.options.match(ic);\n }\n const serviceInfo = ic.variable.serviceInfo;\n const url = this.normalizeUrlForMatch(serviceInfo.directPath || serviceInfo.relativePath);\n const matchUrl = this.normalizeUrlForMatch(this.url);\n const method = (serviceInfo.httpMethod || '').toUpperCase();\n return url === matchUrl && method === this.method;\n }\n\n public async intercept(context: ServiceVariableContext) {\n if (this.options.intercept) {\n context.variable.dataSet = await this.options.intercept(context);;\n } else {\n context.variable.dataSet = await context.proceed();\n }\n return context.variable.dataSet;\n }\n}\n"],"mappings":";;;AAAA,SAASA,eAAe,QAAQ,yCAAyC;AACzE,SAASC,eAAe,QAAQ,qBAAqB;AAGrD,OAAO,MAAMC,0BAA0B,SAASF,eAAe,CAAyB;EAKtFG,WAAWA,CAACC,OAKX,EAAE;IACD,KAAK,CAAC;MAAC,GAAGA;IAAO,CAAC,CAAC;IAACC,eAAA;IAAAA,eAAA;IACpB,IAAI,CAACC,GAAG,GAAGF,OAAO,CAACE,GAAG,IAAI,EAAE;IAC5B,IAAI,CAACC,MAAM,GAAGH,OAAO,CAACG,MAAM,IAAI,KAAK;EACvC;EAEQC,oBAAoBA,CAACC,QAAgB,EAAE;IAC7C,MAAMC,KAAK,GAAG,CAACD,QAAQ,IAAI,EAAE,EAAEE,IAAI,CAAC,CAAC;IACrC,IAAI,CAACD,KAAK,EAAE;MACV,OAAO,EAAE;IACX;IACA,MAAME,aAAa,GAAIC,IAAY,IAAKA,IAAI,CACzCC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACbC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CACnBA,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IACtB,IAAI;MACF,MAAMC,MAAM,GAAG,IAAIC,GAAG,CAACP,KAAK,CAAC;MAC7B,OAAOE,aAAa,CAAC,GAAGI,MAAM,CAACE,QAAQ,GAAGF,MAAM,CAACG,MAAM,IAAI,EAAE,EAAE,CAAC;IAClE,CAAC,CAAC,MAAM;MACN,OAAOP,aAAa,CAACF,KAAK,CAAC;IAC7B;EACF;EAEAU,KAAKA,CAACC,EAA0B,EAAE;IAChC,IAAI,EAAEA,EAAE,CAACC,QAAQ,YAAYrB,eAAe,CAAC,EAAE;MAC7C,OAAO,KAAK;IACd;IACA,IAAI,IAAI,CAACG,OAAO,CAACgB,KAAK,EAAE;MACtB,OAAO,IAAI,CAAChB,OAAO,CAACgB,KAAK,CAACC,EAAE,CAAC;IAC/B;IACA,MAAME,WAAW,GAAGF,EAAE,CAACC,QAAQ,CAACC,WAAW;IAC3C,MAAMjB,GAAG,GAAG,IAAI,CAACE,oBAAoB,CAACe,WAAW,CAACC,UAAU,IAAID,WAAW,CAACE,YAAY,CAAC;IACzF,MAAMC,QAAQ,GAAG,IAAI,CAAClB,oBAAoB,CAAC,IAAI,CAACF,GAAG,CAAC;IACpD,MAAMC,MAAM,GAAG,CAACgB,WAAW,CAACI,UAAU,IAAI,EAAE,EAAEC,WAAW,CAAC,CAAC;IAC3D,OAAOtB,GAAG,KAAKoB,QAAQ,IAAInB,MAAM,KAAK,IAAI,CAACA,MAAM;EACnD;EAEA,MAAasB,SAASA,CAACC,OAA+B,EAAE;IACtD,IAAI,IAAI,CAAC1B,OAAO,CAACyB,SAAS,EAAE;MAC1BC,OAAO,CAACR,QAAQ,CAACS,OAAO,GAAG,MAAO,IAAI,CAAC3B,OAAO,CAACyB,SAAS,CAACC,OAAO,CAAC;MAAC;IACpE,CAAC,MAAM;MACLA,OAAO,CAACR,QAAQ,CAACS,OAAO,GAAG,MAAMD,OAAO,CAACE,OAAO,CAAC,CAAC;IACpD;IACA,OAAOF,OAAO,CAACR,QAAQ,CAACS,OAAO;EACjC;AACF","ignoreList":[]}
|
|
@@ -7,6 +7,9 @@ import { deepCopy } from '@wavemaker-ai/app-rn-runtime/core/utils';
|
|
|
7
7
|
import { ServiceVariable as _ServiceVariable } from '@wavemaker-ai/variables/src/model/variable/service-variable';
|
|
8
8
|
import httpService from '@wavemaker-ai/app-rn-runtime/variables/http.service';
|
|
9
9
|
import injector from '@wavemaker-ai/app-rn-runtime/core/injector';
|
|
10
|
+
import { interceptService } from '@wavemaker-ai/variables/src/interceptor';
|
|
11
|
+
import { ServiceVariableContext } from './interceptor/intercept-context.impl';
|
|
12
|
+
import { addPassThroughInterceptor } from './interceptor/interceptor.factory';
|
|
10
13
|
var _ServiceVariableEvents = /*#__PURE__*/function (_ServiceVariableEvents) {
|
|
11
14
|
_ServiceVariableEvents["BEFORE_INVOKE"] = "beforeInvoke";
|
|
12
15
|
return _ServiceVariableEvents;
|
|
@@ -30,11 +33,18 @@ export class ServiceVariable extends _ServiceVariable {
|
|
|
30
33
|
httpClientService: httpService,
|
|
31
34
|
inFlightBehavior: config.inFlightBehavior,
|
|
32
35
|
onSuccess: (context, args) => {
|
|
36
|
+
// Reset network error flag on successful call
|
|
37
|
+
this.networkError = false;
|
|
33
38
|
this.notify(VariableEvents.AFTER_INVOKE, [args.variable, args.data, args.options]);
|
|
34
39
|
this.notify(VariableEvents.SUCCESS, [args.variable, args.data, args.options]);
|
|
35
40
|
return config.onSuccess && config.onSuccess(args.variable, args.data, args.options);
|
|
36
41
|
},
|
|
37
42
|
onError: (context, args) => {
|
|
43
|
+
if (this.isCritical && args.data && !args.data.response && args.data.originalError && (args.data.originalError.code === 'NETWORK_ERROR' || args.data.originalError.message === 'Network Error')) {
|
|
44
|
+
this.networkError = true;
|
|
45
|
+
} else {
|
|
46
|
+
this.networkError = false;
|
|
47
|
+
}
|
|
38
48
|
this.notify(VariableEvents.AFTER_INVOKE, [args.variable, args.data, args.options]);
|
|
39
49
|
this.notify(VariableEvents.ERROR, [args.variable, args.data, args.options]);
|
|
40
50
|
return config.onError && config.onError(args.variable, args.data, args.options);
|
|
@@ -60,9 +70,11 @@ export class ServiceVariable extends _ServiceVariable {
|
|
|
60
70
|
}
|
|
61
71
|
super(variableConfig);
|
|
62
72
|
this.config = config;
|
|
63
|
-
_defineProperty(this, "cancelTokenSource", void 0);
|
|
64
73
|
_defineProperty(this, "params", {});
|
|
65
74
|
_defineProperty(this, "appConfig", injector.get('APP_CONFIG'));
|
|
75
|
+
_defineProperty(this, "networkError", false);
|
|
76
|
+
_defineProperty(this, "isCritical", false);
|
|
77
|
+
this.isCritical = !!config.isCritical;
|
|
66
78
|
this.subscribe(VariableEvents.AFTER_INVOKE, () => {
|
|
67
79
|
this.dataBinding = {};
|
|
68
80
|
});
|
|
@@ -93,6 +105,7 @@ export class ServiceVariable extends _ServiceVariable {
|
|
|
93
105
|
this.appConfig.refresh(false);
|
|
94
106
|
}
|
|
95
107
|
invoke(options, onSuccess, onError) {
|
|
108
|
+
var _this$serviceInfo;
|
|
96
109
|
this.params = this.config.paramProvider();
|
|
97
110
|
this.params = deepCopy({}, this.params, this.dataBinding);
|
|
98
111
|
if (options) {
|
|
@@ -103,11 +116,58 @@ export class ServiceVariable extends _ServiceVariable {
|
|
|
103
116
|
// service definitions data depends on whether user logged in or not
|
|
104
117
|
// Try to get the latest definition
|
|
105
118
|
this.serviceInfo = this.config.getServiceInfo();
|
|
119
|
+
if (((_this$serviceInfo = this.serviceInfo) === null || _this$serviceInfo === void 0 || (_this$serviceInfo = _this$serviceInfo.httpMethod) === null || _this$serviceInfo === void 0 ? void 0 : _this$serviceInfo.toUpperCase()) === 'GET') {
|
|
120
|
+
const url = this.serviceInfo.directPath || this.serviceInfo.relativePath;
|
|
121
|
+
addPassThroughInterceptor({
|
|
122
|
+
url: url,
|
|
123
|
+
cache: {
|
|
124
|
+
timeout: 5 * 60 * 1000
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
this.addCacheInterceptorIfEnabled();
|
|
106
129
|
if (!this.serviceInfo) {
|
|
107
130
|
console.error(`Service Info is missing for (${this.name}) variable.`);
|
|
108
131
|
}
|
|
109
132
|
return super.invoke(options, onSuccess, onError);
|
|
110
133
|
}
|
|
134
|
+
addCacheInterceptorIfEnabled() {
|
|
135
|
+
var _this$serviceInfo2;
|
|
136
|
+
if (((_this$serviceInfo2 = this.serviceInfo) === null || _this$serviceInfo2 === void 0 || (_this$serviceInfo2 = _this$serviceInfo2.httpMethod) === null || _this$serviceInfo2 === void 0 ? void 0 : _this$serviceInfo2.toUpperCase()) !== 'GET') {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
const cache = this.appConfig.cache;
|
|
140
|
+
if (!cache || !cache.enabled) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
const url = this.serviceInfo.directPath || this.serviceInfo.relativePath;
|
|
144
|
+
if (this.isUrlExcluded(url, cache.exclude)) {
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
const defaults = cache.defaults || {};
|
|
148
|
+
const timeout = defaults.timeout || 5 * 60 * 1000; // Default: 5 minutes
|
|
149
|
+
const cacheType = defaults.type || 'session';
|
|
150
|
+
const passThrough = defaults.passThrough !== false; // Default: true for pass-through
|
|
151
|
+
|
|
152
|
+
addPassThroughInterceptor({
|
|
153
|
+
url: url,
|
|
154
|
+
cache: {
|
|
155
|
+
timeout: timeout,
|
|
156
|
+
type: cacheType,
|
|
157
|
+
passThrough: passThrough
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
isUrlExcluded(url, excludePatterns) {
|
|
162
|
+
if (!excludePatterns || !Array.isArray(excludePatterns) || excludePatterns.length === 0) {
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
return excludePatterns.some(pattern => {
|
|
166
|
+
const regexPattern = pattern.replace(/[.+?^${}()|[\]\\]/g, '\\$&').replace(/\*/g, '.*');
|
|
167
|
+
const regex = new RegExp(regexPattern);
|
|
168
|
+
return regex.test(url);
|
|
169
|
+
});
|
|
170
|
+
}
|
|
111
171
|
|
|
112
172
|
// cancel($file?: any) {
|
|
113
173
|
// // CHecks if there is any pending requests in the queue
|
|
@@ -139,5 +199,53 @@ export class ServiceVariable extends _ServiceVariable {
|
|
|
139
199
|
// this.params = merge({}, this.config.paramProvider(), _setInput(this.params, key, val, options));
|
|
140
200
|
// return this.params;
|
|
141
201
|
// }
|
|
202
|
+
|
|
203
|
+
generateStr(o) {
|
|
204
|
+
if (typeof o === 'string' || typeof o !== 'object') {
|
|
205
|
+
return JSON.stringify(o);
|
|
206
|
+
}
|
|
207
|
+
let str = '';
|
|
208
|
+
Object.keys(o || {}).sort().forEach((key, i) => {
|
|
209
|
+
if (i > 0) {
|
|
210
|
+
str += '&';
|
|
211
|
+
}
|
|
212
|
+
str += key + '=' + this.generateStr(o[key]);
|
|
213
|
+
});
|
|
214
|
+
return str;
|
|
215
|
+
}
|
|
216
|
+
makeHttpCall(requestParams, inputFields, successHandler, errorHandler) {
|
|
217
|
+
let madeHttpCall = false;
|
|
218
|
+
const serviceInfo = this.serviceInfo;
|
|
219
|
+
const url = serviceInfo.directPath || serviceInfo.relativePath;
|
|
220
|
+
const keyPrefix = 'API_INTERCEPTOR_CACHE.' + url + '?' + this.generateStr(inputFields);
|
|
221
|
+
const context = new ServiceVariableContext(this, inputFields, {
|
|
222
|
+
keyPrefix: keyPrefix,
|
|
223
|
+
proceed: async () => {
|
|
224
|
+
madeHttpCall = true;
|
|
225
|
+
await this.httpService.sendCall(requestParams, this).then(successHandler).catch(errorHandler);
|
|
226
|
+
return this.dataSet;
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
return interceptService.intercept(context).then(() => {
|
|
230
|
+
if (madeHttpCall) {
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
successHandler && successHandler({
|
|
234
|
+
body: this.dataSet,
|
|
235
|
+
status: 200,
|
|
236
|
+
type: 'success'
|
|
237
|
+
});
|
|
238
|
+
this.config.onResult && this.config.onResult(this, this.dataSet);
|
|
239
|
+
this.config.onSuccess && this.config.onSuccess(this, this.dataSet);
|
|
240
|
+
return this.dataSet;
|
|
241
|
+
}, err => {
|
|
242
|
+
if (madeHttpCall) {
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
this.config.onResult && this.config.onResult(this, this.dataSet);
|
|
246
|
+
this.config.onError && this.config.onError(this, this.dataSet);
|
|
247
|
+
return Promise.reject(err);
|
|
248
|
+
});
|
|
249
|
+
}
|
|
142
250
|
}
|
|
143
251
|
//# sourceMappingURL=service-variable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["VariableEvents","isEqual","isString","deepCopy","ServiceVariable","_ServiceVariable","httpService","injector","_ServiceVariableEvents","constructor","config","variableConfig","name","dataSet","paramProvider","dataBinding","isList","service","serviceType","maxResults","_context","operation","operationId","operationType","controller","serviceInfo","getServiceInfo","httpClientService","inFlightBehavior","onSuccess","context","args","notify","AFTER_INVOKE","variable","data","options","SUCCESS","onError","ERROR","onCanUpdate","onBeforeUpdate","BEFORE_INVOKE","inputData","onResult","onBeforeDatasetReady","_defineProperty","get","subscribe","init","invokeOnParamChange","last","params","latest","invoke","Promise","resolve","doNext","page","pagination","parseInt","reject","dataset","onDataUpdated","appConfig","refresh","inputFields","console","error"],"sources":["service-variable.ts"],"sourcesContent":["import { VariableConfig, VariableEvents } from './base-variable';\nimport { isEqual, assignIn, isString } from 'lodash';\nimport AppConfig from '@wavemaker-ai/app-rn-runtime/core/AppConfig';\nimport { deepCopy } from '@wavemaker-ai/app-rn-runtime/core/utils';\nimport { ServiceVariable as _ServiceVariable } from '@wavemaker-ai/variables/src/model/variable/service-variable';\nimport httpService from '@wavemaker-ai/app-rn-runtime/variables/http.service';\nimport injector from '@wavemaker-ai/app-rn-runtime/core/injector';\n\nexport interface ServiceVariableConfig extends VariableConfig {\n baseUrl: string;\n maxResults: number;\n _context: any;\n serviceType: string;\n onCanUpdate: any;\n onBeforeUpdate: any;\n onResult: any;\n onBeforeDatasetReady: any;\n inFlightBehavior: string;\n controller: string;\n getServiceInfo: Function;\n}\n\nenum _ServiceVariableEvents {\n BEFORE_INVOKE = 'beforeInvoke'\n}\nexport type ServiceVariableEvents = _ServiceVariableEvents | VariableEvents;\n\nexport class ServiceVariable extends _ServiceVariable {\n private cancelTokenSource: any;\n params: any = {};\n public appConfig = injector.get<AppConfig>('APP_CONFIG');\n\n constructor(public config: ServiceVariableConfig) {\n let variableConfig: any = {\n name: config.name,\n dataSet: config.paramProvider(),\n dataBinding: {},\n isList: config.isList,\n service: config.service,\n serviceType: config.serviceType,\n maxResults: config.maxResults,\n _context: config._context,\n operation: config.operation,\n operationId: config.operationId,\n operationType: config.operationType,\n controller: config.controller,\n serviceInfo: config.getServiceInfo(),\n httpClientService: httpService,\n inFlightBehavior: config.inFlightBehavior,\n onSuccess: (context: any, args: any) => {\n this.notify(VariableEvents.AFTER_INVOKE, [args.variable, args.data, args.options]);\n this.notify(VariableEvents.SUCCESS, [args.variable, args.data, args.options]);\n return config.onSuccess && config.onSuccess(args.variable, args.data, args.options);\n },\n onError: (context: any, args: any) => {\n this.notify(VariableEvents.AFTER_INVOKE, [args.variable, args.data, args.options]);\n this.notify(VariableEvents.ERROR, [args.variable, args.data, args.options]);\n return config.onError && config.onError(args.variable, args.data, args.options);\n },\n onCanUpdate: (context: any, args: any) => {\n return config.onCanUpdate && config.onCanUpdate(args.variable, args.data, args.options);\n },\n onBeforeUpdate: (context: any, args: any) => {\n this.notify(VariableEvents.BEFORE_INVOKE, [args.variable, args.inputData, args.options]);\n return config.onBeforeUpdate && config.onBeforeUpdate(args.variable, args.inputData, args.options);\n },\n onResult: (context: any, args: any) => {\n return config.onResult && config.onResult(args.variable, args.data, args.options);\n },\n onBeforeDatasetReady: (context: any, args: any) => {\n return config.onBeforeDatasetReady && config.onBeforeDatasetReady(args.variable, args.data, args.options);\n }\n }\n if (config.onError) {\n variableConfig.onError = (context: any, args: any) => {\n return config.onError && config.onError(args.variable, args.data, args.options);\n };\n }\n super(variableConfig);\n this.subscribe(VariableEvents.AFTER_INVOKE, () => {\n this.dataBinding = {};\n });\n this.init();\n }\n\n invokeOnParamChange() {\n const last = this.params;\n const latest = this.config.paramProvider();\n if (!isEqual(last, latest)) {\n this.invoke(latest);\n }\n return Promise.resolve(this);\n }\n\n public async doNext() {\n let page = 0 as any;\n if (isString(this.pagination.page)) {\n page = (parseInt(this.pagination.page) + 1) + '';\n } else {\n page = this.pagination.page + 1;\n }\n return new Promise((resolve, reject) => {\n this.invoke({\n page: page\n },\n (dataset: any) => resolve(dataset),\n reject);\n });\n }\n\n onDataUpdated() {\n this.appConfig.refresh(false);\n }\n\n invoke(options? : any, onSuccess?: Function, onError?: Function) {\n this.params = this.config.paramProvider();\n this.params = deepCopy({} as any, this.params, this.dataBinding);\n if (options) {\n this.params = deepCopy({} as any, this.params, options.inputFields ? options.inputFields : options);\n }\n options = options || {};\n options.inputFields = this.params;\n // service definitions data depends on whether user logged in or not\n // Try to get the latest definition\n this.serviceInfo = this.config.getServiceInfo();\n if (!this.serviceInfo) {\n console.error(`Service Info is missing for (${this.name}) variable.`)\n }\n return super.invoke(options, onSuccess, onError);\n }\n\n // cancel($file?: any) {\n // // CHecks if there is any pending requests in the queue\n // if ($queue.requestsQueue.has(this)) {\n // // If the request is a File upload request then modify the elements associated with file upload\n // // else unsubscribe from the observable on the variable.\n // if (false) {\n // // $file._uploadProgress.unsubscribe();\n // // $file.status = 'abort';\n // // this.totalFilesCount--;\n // // initiateCallback(VARIABLE_CONSTANTS.EVENT.ABORT, variable, $file);\n // // if (!this.isFileUploadInProgress(variable.dataBinding) && this.totalFilesCount === 0) {\n // // $queue.process(variable);\n // // // notify inflight variable\n // // this.notifyInflight(variable, false);\n // // }\n // } else {\n // if (true) {\n // this.cancelTokenSource.cancel();\n // $queue.process(this);\n // // notify inflight variable\n // //this.notifyInflight(variable, false);\n // }\n // }\n // }\n // }\n\n // setInput(key: any, val?: any, options?: any) {\n // this.params = merge({}, this.config.paramProvider(), _setInput(this.params, key, val, options));\n // return this.params;\n // }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["VariableEvents","isEqual","isString","deepCopy","ServiceVariable","_ServiceVariable","httpService","injector","interceptService","ServiceVariableContext","addPassThroughInterceptor","_ServiceVariableEvents","constructor","config","variableConfig","name","dataSet","paramProvider","dataBinding","isList","service","serviceType","maxResults","_context","operation","operationId","operationType","controller","serviceInfo","getServiceInfo","httpClientService","inFlightBehavior","onSuccess","context","args","networkError","notify","AFTER_INVOKE","variable","data","options","SUCCESS","onError","isCritical","response","originalError","code","message","ERROR","onCanUpdate","onBeforeUpdate","BEFORE_INVOKE","inputData","onResult","onBeforeDatasetReady","_defineProperty","get","subscribe","init","invokeOnParamChange","last","params","latest","invoke","Promise","resolve","doNext","page","pagination","parseInt","reject","dataset","onDataUpdated","appConfig","refresh","_this$serviceInfo","inputFields","httpMethod","toUpperCase","url","directPath","relativePath","cache","timeout","addCacheInterceptorIfEnabled","console","error","_this$serviceInfo2","enabled","isUrlExcluded","exclude","defaults","cacheType","type","passThrough","excludePatterns","Array","isArray","length","some","pattern","regexPattern","replace","regex","RegExp","test","generateStr","o","JSON","stringify","str","Object","keys","sort","forEach","key","i","makeHttpCall","requestParams","successHandler","errorHandler","madeHttpCall","keyPrefix","proceed","sendCall","then","catch","intercept","body","status","err"],"sources":["service-variable.ts"],"sourcesContent":["import { VariableConfig, VariableEvents } from './base-variable';\nimport { isEqual, assignIn, isString } from 'lodash';\nimport AppConfig from '@wavemaker-ai/app-rn-runtime/core/AppConfig';\nimport { deepCopy } from '@wavemaker-ai/app-rn-runtime/core/utils';\nimport { ServiceVariable as _ServiceVariable } from '@wavemaker-ai/variables/src/model/variable/service-variable';\nimport httpService from '@wavemaker-ai/app-rn-runtime/variables/http.service';\nimport injector from '@wavemaker-ai/app-rn-runtime/core/injector';\nimport { interceptService } from '@wavemaker-ai/variables/src/interceptor';\nimport { ServiceVariableContext } from './interceptor/intercept-context.impl';\nimport { addPassThroughInterceptor } from './interceptor/interceptor.factory';\n\nexport interface ServiceVariableConfig extends VariableConfig {\n baseUrl: string;\n maxResults: number;\n _context: any;\n serviceType: string;\n onCanUpdate: any;\n onBeforeUpdate: any;\n onResult: any;\n onBeforeDatasetReady: any;\n inFlightBehavior: string;\n controller: string;\n getServiceInfo: Function;\n isCritical?: boolean;\n}\n\nenum _ServiceVariableEvents {\n BEFORE_INVOKE = 'beforeInvoke'\n}\nexport type ServiceVariableEvents = _ServiceVariableEvents | VariableEvents;\n\nexport class ServiceVariable extends _ServiceVariable {\n params: any = {};\n public appConfig = injector.get<AppConfig>('APP_CONFIG');\n public networkError: boolean = false;\n public isCritical: boolean = false;\n\n constructor(public config: ServiceVariableConfig) {\n let variableConfig: any = {\n name: config.name,\n dataSet: config.paramProvider(),\n dataBinding: {},\n isList: config.isList,\n service: config.service,\n serviceType: config.serviceType,\n maxResults: config.maxResults,\n _context: config._context,\n operation: config.operation,\n operationId: config.operationId,\n operationType: config.operationType,\n controller: config.controller,\n serviceInfo: config.getServiceInfo(),\n httpClientService: httpService,\n inFlightBehavior: config.inFlightBehavior,\n onSuccess: (context: any, args: any) => {\n // Reset network error flag on successful call\n this.networkError = false;\n this.notify(VariableEvents.AFTER_INVOKE, [args.variable, args.data, args.options]);\n this.notify(VariableEvents.SUCCESS, [args.variable, args.data, args.options]);\n return config.onSuccess && config.onSuccess(args.variable, args.data, args.options);\n },\n onError: (context: any, args: any) => {\n if (this.isCritical && args.data && (!args.data.response && args.data.originalError && (args.data.originalError.code === 'NETWORK_ERROR' || args.data.originalError.message === 'Network Error'))) {\n this.networkError = true;\n } else {\n this.networkError = false;\n }\n this.notify(VariableEvents.AFTER_INVOKE, [args.variable, args.data, args.options]);\n this.notify(VariableEvents.ERROR, [args.variable, args.data, args.options]);\n return config.onError && config.onError(args.variable, args.data, args.options);\n },\n onCanUpdate: (context: any, args: any) => {\n return config.onCanUpdate && config.onCanUpdate(args.variable, args.data, args.options);\n },\n onBeforeUpdate: (context: any, args: any) => {\n this.notify(VariableEvents.BEFORE_INVOKE, [args.variable, args.inputData, args.options]);\n return config.onBeforeUpdate && config.onBeforeUpdate(args.variable, args.inputData, args.options);\n },\n onResult: (context: any, args: any) => {\n return config.onResult && config.onResult(args.variable, args.data, args.options);\n },\n onBeforeDatasetReady: (context: any, args: any) => {\n return config.onBeforeDatasetReady && config.onBeforeDatasetReady(args.variable, args.data, args.options);\n }\n }\n if (config.onError) {\n variableConfig.onError = (context: any, args: any) => {\n return config.onError && config.onError(args.variable, args.data, args.options);\n };\n }\n super(variableConfig);\n this.isCritical = !!config.isCritical;\n this.subscribe(VariableEvents.AFTER_INVOKE, () => {\n this.dataBinding = {};\n });\n this.init();\n }\n\n invokeOnParamChange() {\n const last = this.params;\n const latest = this.config.paramProvider();\n if (!isEqual(last, latest)) {\n this.invoke(latest);\n }\n return Promise.resolve(this);\n }\n\n public async doNext() {\n let page = 0 as any;\n if (isString(this.pagination.page)) {\n page = (parseInt(this.pagination.page) + 1) + '';\n } else {\n page = this.pagination.page + 1;\n }\n return new Promise((resolve, reject) => {\n this.invoke({\n page: page\n },\n (dataset: any) => resolve(dataset),\n reject);\n });\n }\n\n onDataUpdated() {\n this.appConfig.refresh(false);\n }\n\n invoke(options? : any, onSuccess?: Function, onError?: Function) {\n this.params = this.config.paramProvider();\n this.params = deepCopy({} as any, this.params, this.dataBinding);\n if (options) {\n this.params = deepCopy({} as any, this.params, options.inputFields ? options.inputFields : options);\n }\n options = options || {};\n options.inputFields = this.params;\n // service definitions data depends on whether user logged in or not\n // Try to get the latest definition\n this.serviceInfo = this.config.getServiceInfo();\n if (this.serviceInfo?.httpMethod?.toUpperCase() === 'GET') {\n const url = this.serviceInfo.directPath || this.serviceInfo.relativePath;\n addPassThroughInterceptor({\n url: url,\n cache: {\n timeout: 5 * 60 * 1000\n }\n });\n }\n \n this.addCacheInterceptorIfEnabled();\n \n if (!this.serviceInfo) {\n console.error(`Service Info is missing for (${this.name}) variable.`)\n }\n return super.invoke(options, onSuccess, onError);\n }\n\n private addCacheInterceptorIfEnabled() {\n if (this.serviceInfo?.httpMethod?.toUpperCase() !== 'GET') {\n return;\n }\n\n const cache = (this.appConfig as any).cache;\n \n if (!cache || !cache.enabled) {\n return;\n }\n\n const url = this.serviceInfo.directPath || this.serviceInfo.relativePath;\n \n if (this.isUrlExcluded(url, cache.exclude)) {\n return;\n }\n\n const defaults = cache.defaults || {};\n const timeout = defaults.timeout || 5 * 60 * 1000; // Default: 5 minutes\n const cacheType = defaults.type || 'session';\n const passThrough = defaults.passThrough !== false; // Default: true for pass-through\n\n addPassThroughInterceptor({\n url: url,\n cache: {\n timeout: timeout,\n type: cacheType,\n passThrough: passThrough\n }\n });\n }\n\n private isUrlExcluded(url: string, excludePatterns?: string[]): boolean {\n if (!excludePatterns || !Array.isArray(excludePatterns) || excludePatterns.length === 0) {\n return false;\n }\n\n return excludePatterns.some(pattern => {\n\n const regexPattern = pattern\n .replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&')\n .replace(/\\*/g, '.*') \n const regex = new RegExp(regexPattern);\n return regex.test(url);\n });\n }\n\n // cancel($file?: any) {\n // // CHecks if there is any pending requests in the queue\n // if ($queue.requestsQueue.has(this)) {\n // // If the request is a File upload request then modify the elements associated with file upload\n // // else unsubscribe from the observable on the variable.\n // if (false) {\n // // $file._uploadProgress.unsubscribe();\n // // $file.status = 'abort';\n // // this.totalFilesCount--;\n // // initiateCallback(VARIABLE_CONSTANTS.EVENT.ABORT, variable, $file);\n // // if (!this.isFileUploadInProgress(variable.dataBinding) && this.totalFilesCount === 0) {\n // // $queue.process(variable);\n // // // notify inflight variable\n // // this.notifyInflight(variable, false);\n // // }\n // } else {\n // if (true) {\n // this.cancelTokenSource.cancel();\n // $queue.process(this);\n // // notify inflight variable\n // //this.notifyInflight(variable, false);\n // }\n // }\n // }\n // }\n\n // setInput(key: any, val?: any, options?: any) {\n // this.params = merge({}, this.config.paramProvider(), _setInput(this.params, key, val, options));\n // return this.params;\n // }\n\n private generateStr(o: any) {\n if (typeof o === 'string' || typeof o !== 'object' ) {\n return JSON.stringify(o);\n }\n let str = '';\n Object.keys(o || {}).sort().forEach((key, i) => {\n if (i > 0) {\n str += '&';\n }\n str += key + '=' + this.generateStr(o[key]);\n });\n return str;\n }\n\n\n makeHttpCall(requestParams: any, inputFields: any, successHandler: Function, errorHandler: Function) {\n let madeHttpCall = false;\n const serviceInfo = this.serviceInfo;\n const url = serviceInfo.directPath || serviceInfo.relativePath;\n const keyPrefix = 'API_INTERCEPTOR_CACHE.' + url + '?' + this.generateStr(inputFields);\n const context = new ServiceVariableContext(this, inputFields, {\n keyPrefix: keyPrefix,\n proceed: async () => {\n madeHttpCall = true;\n await this.httpService.sendCall(requestParams, this).then((successHandler)).catch(errorHandler);\n return this.dataSet;\n }\n });\n return interceptService.intercept(context).then(() => {\n if (madeHttpCall) {\n return;\n }\n successHandler && successHandler({ body: this.dataSet, status: 200, type: 'success' });\n this.config.onResult && this.config.onResult(this, this.dataSet);\n this.config.onSuccess && this.config.onSuccess(this, this.dataSet);\n return this.dataSet;\n }, (err: any) => {\n if (madeHttpCall) {\n return;\n }\n this.config.onResult && this.config.onResult(this, this.dataSet);\n this.config.onError && this.config.onError(this, this.dataSet);\n return Promise.reject(err);\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
|