@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.
Files changed (172) hide show
  1. package/components/advanced/offline-banner/offline-banner.component.js +68 -0
  2. package/components/advanced/offline-banner/offline-banner.component.js.map +1 -0
  3. package/components/advanced/offline-banner/offline-banner.props.js +12 -0
  4. package/components/advanced/offline-banner/offline-banner.props.js.map +1 -0
  5. package/components/advanced/offline-banner/offline-banner.styles.js +99 -0
  6. package/components/advanced/offline-banner/offline-banner.styles.js.map +1 -0
  7. package/components/advanced/webview/webview.component.js +2 -2
  8. package/components/advanced/webview/webview.component.js.map +1 -1
  9. package/components/advanced/webview/webview.props.js +1 -1
  10. package/components/advanced/webview/webview.props.js.map +1 -1
  11. package/components/basic/bottomsheet/bottomsheet.component.js +156 -14
  12. package/components/basic/bottomsheet/bottomsheet.component.js.map +1 -1
  13. package/components/basic/bottomsheet/bottomsheet.styles.js +0 -3
  14. package/components/basic/bottomsheet/bottomsheet.styles.js.map +1 -1
  15. package/components/basic/progress-circle/progress-circle.component.js +3 -1
  16. package/components/basic/progress-circle/progress-circle.component.js.map +1 -1
  17. package/components/chart/area-chart/area-chart.component.js +86 -93
  18. package/components/chart/area-chart/area-chart.component.js.map +1 -1
  19. package/components/chart/area-chart/area-chart.props.js +2 -0
  20. package/components/chart/area-chart/area-chart.props.js.map +1 -1
  21. package/components/chart/bar-chart/bar-chart.component.js +79 -97
  22. package/components/chart/bar-chart/bar-chart.component.js.map +1 -1
  23. package/components/chart/basechart.component.js +117 -96
  24. package/components/chart/basechart.component.js.map +1 -1
  25. package/components/chart/basechart.props.js +12 -0
  26. package/components/chart/basechart.props.js.map +1 -1
  27. package/components/chart/basechart.styles.js.map +1 -1
  28. package/components/chart/bubble-chart/bubble-chart.component.js +72 -70
  29. package/components/chart/bubble-chart/bubble-chart.component.js.map +1 -1
  30. package/components/chart/bubble-chart/bubble-chart.props.js +1 -0
  31. package/components/chart/bubble-chart/bubble-chart.props.js.map +1 -1
  32. package/components/chart/line-chart/line-chart.component.js +105 -79
  33. package/components/chart/line-chart/line-chart.component.js.map +1 -1
  34. package/components/chart/pie-chart/pie-chart.component.js +70 -166
  35. package/components/chart/pie-chart/pie-chart.component.js.map +1 -1
  36. package/components/chart/pie-chart/pie-chart.props.js +1 -0
  37. package/components/chart/pie-chart/pie-chart.props.js.map +1 -1
  38. package/components/container/accordion/accordionpane/accordionpane.component.js +6 -2
  39. package/components/container/accordion/accordionpane/accordionpane.component.js.map +1 -1
  40. package/components/container/container.component.js +27 -1
  41. package/components/container/container.component.js.map +1 -1
  42. package/components/container/container.props.js +7 -0
  43. package/components/container/container.props.js.map +1 -1
  44. package/components/container/linearlayout/linearlayoutitem/linearlayoutitem.component.js +25 -1
  45. package/components/container/linearlayout/linearlayoutitem/linearlayoutitem.component.js.map +1 -1
  46. package/components/container/linearlayout/linearlayoutitem/linearlayoutitem.props.js +1 -0
  47. package/components/container/linearlayout/linearlayoutitem/linearlayoutitem.props.js.map +1 -1
  48. package/components/container/tabs/tabheader/tabheader.component.js +5 -14
  49. package/components/container/tabs/tabheader/tabheader.component.js.map +1 -1
  50. package/components/container/tabs/tabheader/tabheader.props.js +0 -2
  51. package/components/container/tabs/tabheader/tabheader.props.js.map +1 -1
  52. package/components/container/tabs/tabheader/tabheader.styles.js +1 -43
  53. package/components/container/tabs/tabheader/tabheader.styles.js.map +1 -1
  54. package/components/container/tabs/tabpane/tabpane.component.js +6 -2
  55. package/components/container/tabs/tabpane/tabpane.component.js.map +1 -1
  56. package/components/container/tabs/tabs.component.js +2 -6
  57. package/components/container/tabs/tabs.component.js.map +1 -1
  58. package/components/container/tabs/tabs.props.js +0 -2
  59. package/components/container/tabs/tabs.props.js.map +1 -1
  60. package/components/container/wizard/wizardstep/wizardstep.component.js +28 -5
  61. package/components/container/wizard/wizardstep/wizardstep.component.js.map +1 -1
  62. package/components/container/wizard/wizardstep/wizardstep.props.js +2 -0
  63. package/components/container/wizard/wizardstep/wizardstep.props.js.map +1 -1
  64. package/components/data/form/form-field/form-field.component.js +1 -0
  65. package/components/data/form/form-field/form-field.component.js.map +1 -1
  66. package/components/data/form/form-field/form-field.props.js +1 -0
  67. package/components/data/form/form-field/form-field.props.js.map +1 -1
  68. package/components/data/list/list-template/list-template.component.js +3 -0
  69. package/components/data/list/list-template/list-template.component.js.map +1 -1
  70. package/components/data/list/list.component.js +6 -4
  71. package/components/data/list/list.component.js.map +1 -1
  72. package/components/data/list/list.styles.js +1 -14
  73. package/components/data/list/list.styles.js.map +1 -1
  74. package/components/input/baseinput/baseinput.component.js +7 -0
  75. package/components/input/baseinput/baseinput.component.js.map +1 -1
  76. package/components/input/calendar/calendar.component.js +4 -0
  77. package/components/input/calendar/calendar.component.js.map +1 -1
  78. package/components/input/calendar/views/month-view.js +8 -1
  79. package/components/input/calendar/views/month-view.js.map +1 -1
  80. package/components/input/checkboxset/checkboxset.component.js.map +1 -1
  81. package/components/input/checkboxset/checkboxset.styles.js.map +1 -1
  82. package/components/input/chips/chips.component.js +3 -4
  83. package/components/input/chips/chips.component.js.map +1 -1
  84. package/components/input/chips/chips.styles.js +1 -2
  85. package/components/input/chips/chips.styles.js.map +1 -1
  86. package/components/input/currency/currency.component.js +1 -0
  87. package/components/input/currency/currency.component.js.map +1 -1
  88. package/components/input/number/number.component.js +1 -0
  89. package/components/input/number/number.component.js.map +1 -1
  90. package/components/input/switch/switch.component.js +2 -16
  91. package/components/input/switch/switch.component.js.map +1 -1
  92. package/components/input/switch/switch.props.js +0 -1
  93. package/components/input/switch/switch.props.js.map +1 -1
  94. package/components/input/switch/switch.styles.js +0 -19
  95. package/components/input/switch/switch.styles.js.map +1 -1
  96. package/components/input/text/text.component.js +14 -3
  97. package/components/input/text/text.component.js.map +1 -1
  98. package/components/input/text/text.props.js +1 -0
  99. package/components/input/text/text.props.js.map +1 -1
  100. package/components/input/text/text.styles.js +3 -1
  101. package/components/input/text/text.styles.js.map +1 -1
  102. package/components/input/textarea/textarea.component.js +3 -2
  103. package/components/input/textarea/textarea.component.js.map +1 -1
  104. package/components/input/toggle/toggle.component.js +4 -13
  105. package/components/input/toggle/toggle.component.js.map +1 -1
  106. package/components/input/toggle/toggle.props.js +1 -3
  107. package/components/input/toggle/toggle.props.js.map +1 -1
  108. package/components/input/toggle/toggle.styles.js +4 -12
  109. package/components/input/toggle/toggle.styles.js.map +1 -1
  110. package/components/navigation/appnavbar/appnavbar.props.js +1 -1
  111. package/components/navigation/appnavbar/appnavbar.props.js.map +1 -1
  112. package/components/page/page-content/page-content.component.js +3 -0
  113. package/components/page/page-content/page-content.component.js.map +1 -1
  114. package/components/page/page-content/page-content.props.js +2 -0
  115. package/components/page/page-content/page-content.props.js.map +1 -1
  116. package/components/page/page.component.js +95 -2
  117. package/components/page/page.component.js.map +1 -1
  118. package/components/page/page.props.js +3 -0
  119. package/components/page/page.props.js.map +1 -1
  120. package/components/page/tabbar/tabbar.component.js +3 -2
  121. package/components/page/tabbar/tabbar.component.js.map +1 -1
  122. package/components/page/tabbar/tabbar.props.js +1 -0
  123. package/components/page/tabbar/tabbar.props.js.map +1 -1
  124. package/components-prism/basic/search/search.component.js +8 -12
  125. package/components-prism/basic/search/search.component.js.map +1 -1
  126. package/components-prism/basic/search/search.props.js +1 -1
  127. package/components-prism/basic/search/search.props.js.map +1 -1
  128. package/components-prism/basic/search/search.styles.js +60 -25
  129. package/components-prism/basic/search/search.styles.js.map +1 -1
  130. package/core/AppConfig.js.map +1 -1
  131. package/core/accessibility.js +9 -0
  132. package/core/accessibility.js.map +1 -1
  133. package/core/auto-layout-host.component.js +8 -2
  134. package/core/auto-layout-host.component.js.map +1 -1
  135. package/core/auto-layout.utils.js +59 -0
  136. package/core/auto-layout.utils.js.map +1 -1
  137. package/core/base.component.js +22 -1
  138. package/core/base.component.js.map +1 -1
  139. package/core/components/floatinglabel.component.js +5 -2
  140. package/core/components/floatinglabel.component.js.map +1 -1
  141. package/core/components/textinput.component.js +3 -0
  142. package/core/components/textinput.component.js.map +1 -1
  143. package/core/network.service.js.map +1 -1
  144. package/core/tappable.component.js +109 -15
  145. package/core/tappable.component.js.map +1 -1
  146. package/npm-shrinkwrap.json +2835 -5858
  147. package/package-lock.json +2835 -5858
  148. package/package.json +25 -18
  149. package/runtime/base-fragment.component.js +7 -1
  150. package/runtime/base-fragment.component.js.map +1 -1
  151. package/runtime/base-page.component.js +24 -0
  152. package/runtime/base-page.component.js.map +1 -1
  153. package/runtime/base-partial.component.js.map +1 -1
  154. package/runtime/navigator/drawer.navigator.js +1 -0
  155. package/runtime/navigator/drawer.navigator.js.map +1 -1
  156. package/runtime/navigator/stack.navigator.js +16 -1
  157. package/runtime/navigator/stack.navigator.js.map +1 -1
  158. package/runtime/services/device/scan-service.js +12 -34
  159. package/runtime/services/device/scan-service.js.map +1 -1
  160. package/styles/theme.variables.js.map +1 -1
  161. package/variables/http.service.js +6 -1
  162. package/variables/http.service.js.map +1 -1
  163. package/variables/interceptor/intercept-context.impl.js +46 -0
  164. package/variables/interceptor/intercept-context.impl.js.map +1 -0
  165. package/variables/interceptor/interceptor.factory.js +78 -0
  166. package/variables/interceptor/interceptor.factory.js.map +1 -0
  167. package/variables/interceptor/persistent.storage.js +142 -0
  168. package/variables/interceptor/persistent.storage.js.map +1 -0
  169. package/variables/interceptor/service-variable-interceptor.js +52 -0
  170. package/variables/interceptor/service-variable-interceptor.js.map +1 -0
  171. package/variables/service-variable.js +109 -1
  172. 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":";;;AAAA,SAAyBA,cAAc,QAAQ,iBAAiB;AAChE,SAASC,OAAO,EAAYC,QAAQ,QAAQ,QAAQ;AAEpD,SAASC,QAAQ,QAAQ,yCAAyC;AAClE,SAASC,eAAe,IAAIC,gBAAgB,QAAQ,6DAA6D;AACjH,OAAOC,WAAW,MAAM,qDAAqD;AAC7E,OAAOC,QAAQ,MAAM,4CAA4C;AACjE,SAASC,gBAAgB,QAAQ,yCAAyC;AAC1E,SAASC,sBAAsB,QAAQ,sCAAsC;AAC7E,SAASC,yBAAyB,QAAQ,mCAAmC;AAAC,IAiBzEC,sBAAsB,0BAAtBA,sBAAsB;EAAtBA,sBAAsB;EAAA,OAAtBA,sBAAsB;AAAA,EAAtBA,sBAAsB;AAK3B,OAAO,MAAMP,eAAe,SAASC,gBAAgB,CAAC;EAMpDO,WAAWA,CAAQC,MAA6B,EAAE;IAChD,IAAIC,cAAmB,GAAG;MACxBC,IAAI,EAAEF,MAAM,CAACE,IAAI;MACjBC,OAAO,EAAEH,MAAM,CAACI,aAAa,CAAC,CAAC;MAC/BC,WAAW,EAAE,CAAC,CAAC;MACfC,MAAM,EAAEN,MAAM,CAACM,MAAM;MACrBC,OAAO,EAAEP,MAAM,CAACO,OAAO;MACvBC,WAAW,EAAER,MAAM,CAACQ,WAAW;MAC/BC,UAAU,EAAET,MAAM,CAACS,UAAU;MAC7BC,QAAQ,EAAEV,MAAM,CAACU,QAAQ;MACzBC,SAAS,EAAEX,MAAM,CAACW,SAAS;MAC3BC,WAAW,EAAEZ,MAAM,CAACY,WAAW;MAC/BC,aAAa,EAAEb,MAAM,CAACa,aAAa;MACnCC,UAAU,EAAEd,MAAM,CAACc,UAAU;MAC7BC,WAAW,EAAEf,MAAM,CAACgB,cAAc,CAAC,CAAC;MACpCC,iBAAiB,EAAExB,WAAW;MAC9ByB,gBAAgB,EAAElB,MAAM,CAACkB,gBAAgB;MACzCC,SAAS,EAAEA,CAACC,OAAY,EAAEC,IAAS,KAAK;QACtC;QACA,IAAI,CAACC,YAAY,GAAG,KAAK;QACzB,IAAI,CAACC,MAAM,CAACpC,cAAc,CAACqC,YAAY,EAAE,CAACH,IAAI,CAACI,QAAQ,EAAEJ,IAAI,CAACK,IAAI,EAAEL,IAAI,CAACM,OAAO,CAAC,CAAC;QAClF,IAAI,CAACJ,MAAM,CAACpC,cAAc,CAACyC,OAAO,EAAE,CAACP,IAAI,CAACI,QAAQ,EAAEJ,IAAI,CAACK,IAAI,EAAEL,IAAI,CAACM,OAAO,CAAC,CAAC;QAC7E,OAAO3B,MAAM,CAACmB,SAAS,IAAInB,MAAM,CAACmB,SAAS,CAACE,IAAI,CAACI,QAAQ,EAAEJ,IAAI,CAACK,IAAI,EAAEL,IAAI,CAACM,OAAO,CAAC;MACrF,CAAC;MACDE,OAAO,EAAEA,CAACT,OAAY,EAAEC,IAAS,KAAK;QACpC,IAAI,IAAI,CAACS,UAAU,IAAIT,IAAI,CAACK,IAAI,IAAK,CAACL,IAAI,CAACK,IAAI,CAACK,QAAQ,IAAIV,IAAI,CAACK,IAAI,CAACM,aAAa,KAAKX,IAAI,CAACK,IAAI,CAACM,aAAa,CAACC,IAAI,KAAK,eAAe,IAAIZ,IAAI,CAACK,IAAI,CAACM,aAAa,CAACE,OAAO,KAAK,eAAe,CAAE,EAAE;UACjM,IAAI,CAACZ,YAAY,GAAG,IAAI;QAC1B,CAAC,MAAM;UACL,IAAI,CAACA,YAAY,GAAG,KAAK;QAC3B;QACA,IAAI,CAACC,MAAM,CAACpC,cAAc,CAACqC,YAAY,EAAE,CAACH,IAAI,CAACI,QAAQ,EAAEJ,IAAI,CAACK,IAAI,EAAEL,IAAI,CAACM,OAAO,CAAC,CAAC;QAClF,IAAI,CAACJ,MAAM,CAACpC,cAAc,CAACgD,KAAK,EAAE,CAACd,IAAI,CAACI,QAAQ,EAAEJ,IAAI,CAACK,IAAI,EAAEL,IAAI,CAACM,OAAO,CAAC,CAAC;QAC3E,OAAO3B,MAAM,CAAC6B,OAAO,IAAI7B,MAAM,CAAC6B,OAAO,CAACR,IAAI,CAACI,QAAQ,EAAEJ,IAAI,CAACK,IAAI,EAAEL,IAAI,CAACM,OAAO,CAAC;MACjF,CAAC;MACDS,WAAW,EAAEA,CAAChB,OAAY,EAAEC,IAAS,KAAK;QACxC,OAAOrB,MAAM,CAACoC,WAAW,IAAIpC,MAAM,CAACoC,WAAW,CAACf,IAAI,CAACI,QAAQ,EAAEJ,IAAI,CAACK,IAAI,EAAEL,IAAI,CAACM,OAAO,CAAC;MACzF,CAAC;MACDU,cAAc,EAAEA,CAACjB,OAAY,EAAEC,IAAS,KAAK;QAC3C,IAAI,CAACE,MAAM,CAACpC,cAAc,CAACmD,aAAa,EAAE,CAACjB,IAAI,CAACI,QAAQ,EAAEJ,IAAI,CAACkB,SAAS,EAAElB,IAAI,CAACM,OAAO,CAAC,CAAC;QACxF,OAAO3B,MAAM,CAACqC,cAAc,IAAIrC,MAAM,CAACqC,cAAc,CAAChB,IAAI,CAACI,QAAQ,EAAEJ,IAAI,CAACkB,SAAS,EAAElB,IAAI,CAACM,OAAO,CAAC;MACpG,CAAC;MACDa,QAAQ,EAAEA,CAACpB,OAAY,EAAEC,IAAS,KAAK;QACrC,OAAOrB,MAAM,CAACwC,QAAQ,IAAIxC,MAAM,CAACwC,QAAQ,CAACnB,IAAI,CAACI,QAAQ,EAAEJ,IAAI,CAACK,IAAI,EAAEL,IAAI,CAACM,OAAO,CAAC;MACnF,CAAC;MACDc,oBAAoB,EAAEA,CAACrB,OAAY,EAAEC,IAAS,KAAK;QACjD,OAAOrB,MAAM,CAACyC,oBAAoB,IAAIzC,MAAM,CAACyC,oBAAoB,CAACpB,IAAI,CAACI,QAAQ,EAAEJ,IAAI,CAACK,IAAI,EAAEL,IAAI,CAACM,OAAO,CAAC;MAC3G;IACF,CAAC;IACD,IAAI3B,MAAM,CAAC6B,OAAO,EAAE;MAClB5B,cAAc,CAAC4B,OAAO,GAAG,CAACT,OAAY,EAAEC,IAAS,KAAK;QACpD,OAAOrB,MAAM,CAAC6B,OAAO,IAAI7B,MAAM,CAAC6B,OAAO,CAACR,IAAI,CAACI,QAAQ,EAAEJ,IAAI,CAACK,IAAI,EAAEL,IAAI,CAACM,OAAO,CAAC;MACjF,CAAC;IACH;IACA,KAAK,CAAC1B,cAAc,CAAC;IAAC,KArDLD,MAA6B,GAA7BA,MAA6B;IAAA0C,eAAA,iBALlC,CAAC,CAAC;IAAAA,eAAA,oBACGhD,QAAQ,CAACiD,GAAG,CAAY,YAAY,CAAC;IAAAD,eAAA,uBACzB,KAAK;IAAAA,eAAA,qBACP,KAAK;IAwDhC,IAAI,CAACZ,UAAU,GAAG,CAAC,CAAC9B,MAAM,CAAC8B,UAAU;IACrC,IAAI,CAACc,SAAS,CAACzD,cAAc,CAACqC,YAAY,EAAE,MAAM;MAC9C,IAAI,CAACnB,WAAW,GAAG,CAAC,CAAC;IACzB,CAAC,CAAC;IACF,IAAI,CAACwC,IAAI,CAAC,CAAC;EACb;EAEAC,mBAAmBA,CAAA,EAAG;IACpB,MAAMC,IAAI,GAAG,IAAI,CAACC,MAAM;IACxB,MAAMC,MAAM,GAAG,IAAI,CAACjD,MAAM,CAACI,aAAa,CAAC,CAAC;IAC1C,IAAI,CAAChB,OAAO,CAAC2D,IAAI,EAAEE,MAAM,CAAC,EAAE;MAC1B,IAAI,CAACC,MAAM,CAACD,MAAM,CAAC;IACrB;IACA,OAAOE,OAAO,CAACC,OAAO,CAAC,IAAI,CAAC;EAC9B;EAEA,MAAaC,MAAMA,CAAA,EAAG;IACpB,IAAIC,IAAI,GAAG,CAAQ;IACnB,IAAIjE,QAAQ,CAAC,IAAI,CAACkE,UAAU,CAACD,IAAI,CAAC,EAAE;MAClCA,IAAI,GAAIE,QAAQ,CAAC,IAAI,CAACD,UAAU,CAACD,IAAI,CAAC,GAAG,CAAC,GAAI,EAAE;IAClD,CAAC,MAAM;MACLA,IAAI,GAAG,IAAI,CAACC,UAAU,CAACD,IAAI,GAAG,CAAC;IACjC;IACA,OAAO,IAAIH,OAAO,CAAC,CAACC,OAAO,EAAEK,MAAM,KAAK;MACtC,IAAI,CAACP,MAAM,CAAC;QACVI,IAAI,EAAEA;MACR,CAAC,EACAI,OAAY,IAAKN,OAAO,CAACM,OAAO,CAAC,EAClCD,MAAM,CAAC;IACT,CAAC,CAAC;EACJ;EAEAE,aAAaA,CAAA,EAAG;IACd,IAAI,CAACC,SAAS,CAACC,OAAO,CAAC,KAAK,CAAC;EAC/B;EAEAX,MAAMA,CAACvB,OAAc,EAAER,SAAoB,EAAEU,OAAkB,EAAE;IAAA,IAAAiC,iBAAA;IAC/D,IAAI,CAACd,MAAM,GAAG,IAAI,CAAChD,MAAM,CAACI,aAAa,CAAC,CAAC;IACzC,IAAI,CAAC4C,MAAM,GAAG1D,QAAQ,CAAC,CAAC,CAAC,EAAS,IAAI,CAAC0D,MAAM,EAAE,IAAI,CAAC3C,WAAW,CAAC;IAChE,IAAIsB,OAAO,EAAE;MACX,IAAI,CAACqB,MAAM,GAAG1D,QAAQ,CAAC,CAAC,CAAC,EAAS,IAAI,CAAC0D,MAAM,EAAErB,OAAO,CAACoC,WAAW,GAAGpC,OAAO,CAACoC,WAAW,GAAGpC,OAAO,CAAC;IACrG;IACAA,OAAO,GAAGA,OAAO,IAAI,CAAC,CAAC;IACvBA,OAAO,CAACoC,WAAW,GAAG,IAAI,CAACf,MAAM;IACjC;IACA;IACA,IAAI,CAACjC,WAAW,GAAG,IAAI,CAACf,MAAM,CAACgB,cAAc,CAAC,CAAC;IAC/C,IAAI,EAAA8C,iBAAA,OAAI,CAAC/C,WAAW,cAAA+C,iBAAA,gBAAAA,iBAAA,GAAhBA,iBAAA,CAAkBE,UAAU,cAAAF,iBAAA,uBAA5BA,iBAAA,CAA8BG,WAAW,CAAC,CAAC,MAAK,KAAK,EAAE;MACzD,MAAMC,GAAG,GAAG,IAAI,CAACnD,WAAW,CAACoD,UAAU,IAAI,IAAI,CAACpD,WAAW,CAACqD,YAAY;MACxEvE,yBAAyB,CAAC;QACxBqE,GAAG,EAAEA,GAAG;QACRG,KAAK,EAAE;UACLC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG;QACpB;MACF,CAAC,CAAC;IACJ;IAEA,IAAI,CAACC,4BAA4B,CAAC,CAAC;IAEnC,IAAI,CAAC,IAAI,CAACxD,WAAW,EAAE;MACrByD,OAAO,CAACC,KAAK,CAAC,gCAAgC,IAAI,CAACvE,IAAI,aAAa,CAAC;IACvE;IACA,OAAO,KAAK,CAACgD,MAAM,CAACvB,OAAO,EAAER,SAAS,EAAEU,OAAO,CAAC;EAClD;EAEQ0C,4BAA4BA,CAAA,EAAG;IAAA,IAAAG,kBAAA;IACrC,IAAI,EAAAA,kBAAA,OAAI,CAAC3D,WAAW,cAAA2D,kBAAA,gBAAAA,kBAAA,GAAhBA,kBAAA,CAAkBV,UAAU,cAAAU,kBAAA,uBAA5BA,kBAAA,CAA8BT,WAAW,CAAC,CAAC,MAAK,KAAK,EAAE;MACzD;IACF;IAEA,MAAMI,KAAK,GAAI,IAAI,CAACT,SAAS,CAASS,KAAK;IAE3C,IAAI,CAACA,KAAK,IAAI,CAACA,KAAK,CAACM,OAAO,EAAE;MAC5B;IACF;IAEA,MAAMT,GAAG,GAAG,IAAI,CAACnD,WAAW,CAACoD,UAAU,IAAI,IAAI,CAACpD,WAAW,CAACqD,YAAY;IAExE,IAAI,IAAI,CAACQ,aAAa,CAACV,GAAG,EAAEG,KAAK,CAACQ,OAAO,CAAC,EAAE;MAC1C;IACF;IAEA,MAAMC,QAAQ,GAAGT,KAAK,CAACS,QAAQ,IAAI,CAAC,CAAC;IACrC,MAAMR,OAAO,GAAGQ,QAAQ,CAACR,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACnD,MAAMS,SAAS,GAAGD,QAAQ,CAACE,IAAI,IAAI,SAAS;IAC5C,MAAMC,WAAW,GAAGH,QAAQ,CAACG,WAAW,KAAK,KAAK,CAAC,CAAC;;IAEpDpF,yBAAyB,CAAC;MACxBqE,GAAG,EAAEA,GAAG;MACRG,KAAK,EAAE;QACLC,OAAO,EAAEA,OAAO;QAChBU,IAAI,EAAED,SAAS;QACfE,WAAW,EAAEA;MACf;IACF,CAAC,CAAC;EACJ;EAEQL,aAAaA,CAACV,GAAW,EAAEgB,eAA0B,EAAW;IACtE,IAAI,CAACA,eAAe,IAAI,CAACC,KAAK,CAACC,OAAO,CAACF,eAAe,CAAC,IAAIA,eAAe,CAACG,MAAM,KAAK,CAAC,EAAE;MACvF,OAAO,KAAK;IACd;IAEA,OAAOH,eAAe,CAACI,IAAI,CAACC,OAAO,IAAI;MAErC,MAAMC,YAAY,GAAGD,OAAO,CACvBE,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC,CACrCA,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;MACzB,MAAMC,KAAK,GAAG,IAAIC,MAAM,CAACH,YAAY,CAAC;MAChC,OAAOE,KAAK,CAACE,IAAI,CAAC1B,GAAG,CAAC;IAC9B,CAAC,CAAC;EACJ;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;;EAEQ2B,WAAWA,CAACC,CAAM,EAAE;IAC1B,IAAI,OAAOA,CAAC,KAAK,QAAQ,IAAI,OAAOA,CAAC,KAAK,QAAQ,EAAG;MACnD,OAAOC,IAAI,CAACC,SAAS,CAACF,CAAC,CAAC;IAC1B;IACA,IAAIG,GAAG,GAAG,EAAE;IACZC,MAAM,CAACC,IAAI,CAACL,CAAC,IAAI,CAAC,CAAC,CAAC,CAACM,IAAI,CAAC,CAAC,CAACC,OAAO,CAAC,CAACC,GAAG,EAAEC,CAAC,KAAK;MAC9C,IAAIA,CAAC,GAAG,CAAC,EAAE;QACTN,GAAG,IAAI,GAAG;MACZ;MACAA,GAAG,IAAIK,GAAG,GAAG,GAAG,GAAG,IAAI,CAACT,WAAW,CAACC,CAAC,CAACQ,GAAG,CAAC,CAAC;IAC7C,CAAC,CAAC;IACF,OAAOL,GAAG;EACZ;EAGAO,YAAYA,CAACC,aAAkB,EAAE1C,WAAgB,EAAE2C,cAAwB,EAAEC,YAAsB,EAAE;IACnG,IAAIC,YAAY,GAAG,KAAK;IACxB,MAAM7F,WAAW,GAAG,IAAI,CAACA,WAAW;IACpC,MAAMmD,GAAG,GAAGnD,WAAW,CAACoD,UAAU,IAAKpD,WAAW,CAACqD,YAAY;IAC/D,MAAMyC,SAAS,GAAG,wBAAwB,GAAG3C,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC2B,WAAW,CAAC9B,WAAW,CAAC;IACtF,MAAM3C,OAAO,GAAG,IAAIxB,sBAAsB,CAAC,IAAI,EAAEmE,WAAW,EAAE;MAC5D8C,SAAS,EAAEA,SAAS;MACpBC,OAAO,EAAE,MAAAA,CAAA,KAAY;QACnBF,YAAY,GAAG,IAAI;QACnB,MAAM,IAAI,CAACnH,WAAW,CAACsH,QAAQ,CAACN,aAAa,EAAE,IAAI,CAAC,CAACO,IAAI,CAAEN,cAAe,CAAC,CAACO,KAAK,CAACN,YAAY,CAAC;QAC/F,OAAO,IAAI,CAACxG,OAAO;MACrB;IACF,CAAC,CAAC;IACF,OAAOR,gBAAgB,CAACuH,SAAS,CAAC9F,OAAO,CAAC,CAAC4F,IAAI,CAAC,MAAM;MACpD,IAAIJ,YAAY,EAAE;QAChB;MACF;MACAF,cAAc,IAAIA,cAAc,CAAC;QAAES,IAAI,EAAE,IAAI,CAAChH,OAAO;QAAEiH,MAAM,EAAE,GAAG;QAAEpC,IAAI,EAAE;MAAU,CAAC,CAAC;MACtF,IAAI,CAAChF,MAAM,CAACwC,QAAQ,IAAI,IAAI,CAACxC,MAAM,CAACwC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAACrC,OAAO,CAAC;MAChE,IAAI,CAACH,MAAM,CAACmB,SAAS,IAAI,IAAI,CAACnB,MAAM,CAACmB,SAAS,CAAC,IAAI,EAAE,IAAI,CAAChB,OAAO,CAAC;MAClE,OAAO,IAAI,CAACA,OAAO;IACrB,CAAC,EAAGkH,GAAQ,IAAK;MACf,IAAIT,YAAY,EAAE;QAChB;MACF;MACA,IAAI,CAAC5G,MAAM,CAACwC,QAAQ,IAAI,IAAI,CAACxC,MAAM,CAACwC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAACrC,OAAO,CAAC;MAChE,IAAI,CAACH,MAAM,CAAC6B,OAAO,IAAI,IAAI,CAAC7B,MAAM,CAAC6B,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC1B,OAAO,CAAC;MAC9D,OAAOgD,OAAO,CAACM,MAAM,CAAC4D,GAAG,CAAC;IAC5B,CAAC,CAAC;EACJ;AACF","ignoreList":[]}