@web-atoms/core 2.4.71 → 2.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/App.d.ts +1 -1
  2. package/dist/App.d.ts.map +1 -1
  3. package/dist/App.js +3 -3
  4. package/dist/App.js.map +1 -1
  5. package/dist/core/AtomLoader.d.ts.map +1 -1
  6. package/dist/core/AtomLoader.js +42 -16
  7. package/dist/core/AtomLoader.js.map +1 -1
  8. package/dist/core/types.d.ts +1 -0
  9. package/dist/core/types.d.ts.map +1 -1
  10. package/dist/core/types.js +5 -1
  11. package/dist/core/types.js.map +1 -1
  12. package/dist/services/BusyIndicatorService.d.ts +1 -2
  13. package/dist/services/BusyIndicatorService.d.ts.map +1 -1
  14. package/dist/services/BusyIndicatorService.js +1 -1
  15. package/dist/services/BusyIndicatorService.js.map +1 -1
  16. package/dist/services/FetchBuilder.d.ts.map +1 -1
  17. package/dist/services/FetchBuilder.js +21 -12
  18. package/dist/services/FetchBuilder.js.map +1 -1
  19. package/dist/services/http/RestService.d.ts.map +1 -1
  20. package/dist/services/http/RestService.js +34 -26
  21. package/dist/services/http/RestService.js.map +1 -1
  22. package/dist/tsconfig.tsbuildinfo +1 -1
  23. package/dist/view-model/Action.d.ts.map +1 -1
  24. package/dist/view-model/Action.js +7 -4
  25. package/dist/view-model/Action.js.map +1 -1
  26. package/dist/web/services/WebBusyIndicatorService.d.ts +1 -2
  27. package/dist/web/services/WebBusyIndicatorService.d.ts.map +1 -1
  28. package/dist/web/services/WebBusyIndicatorService.js +5 -1
  29. package/dist/web/services/WebBusyIndicatorService.js.map +1 -1
  30. package/package.json +2 -2
  31. package/src/App.ts +4 -4
  32. package/src/core/AtomLoader.ts +139 -151
  33. package/src/core/types.ts +7 -0
  34. package/src/services/BusyIndicatorService.ts +2 -2
  35. package/src/services/FetchBuilder.ts +44 -49
  36. package/src/services/http/RestService.ts +119 -125
  37. package/src/view-model/Action.ts +6 -4
  38. package/src/web/services/WebBusyIndicatorService.ts +6 -2
  39. package/tsconfig.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"names":["App","_App","_diInject","Inject","_diRegisterSingleton","RegisterSingleton","_servicesBusyIndicatorService","BusyIndicatorService","_servicesNavigationService","NavigationService","_controlsAtomControl","AtomControl","_stylesStyleBuilder","cssNumberToString","execute","_export","WebBusyIndicatorService","constructor","zIndex","indicators","createIndicator","host","document","createElement","popup","app","className","span","divStyle","style","position","overflow","left","right","bottom","top","spanStyle","margin","width","height","maxHeight","maxWidth","appendChild","ws","navigationService","e","getHostForElement","body","refreshScreen","bind","screen","registerDisposable","dispose","remove","__decorate"],"sources":["../../../src/web/services/WebBusyIndicatorService.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["App","_App","_diInject","Inject","_diRegisterSingleton","RegisterSingleton","_servicesBusyIndicatorService","BusyIndicatorService","_servicesNavigationService","NavigationService","_controlsAtomControl","AtomControl","_stylesStyleBuilder","cssNumberToString","execute","_export","WebBusyIndicatorService","constructor","zIndex","indicators","createIndicator","host","document","createElement","popup","app","className","span","divStyle","style","position","overflow","left","right","bottom","top","spanStyle","margin","width","height","maxHeight","maxWidth","appendChild","ws","navigationService","e","getHostForElement","body","refreshScreen","bind","screen","registerDisposable","dispose","remove","Symbol","__decorate"],"sources":["../../../src/web/services/WebBusyIndicatorService.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@web-atoms/core",
3
- "version": "2.4.71",
3
+ "version": "2.5.2",
4
4
  "description": "Web Atoms Core",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -48,7 +48,7 @@
48
48
  "postcss-preset-env": "^10.1.5",
49
49
  "remap-istanbul": "^0.11.1",
50
50
  "test-dom": "^1.0.0",
51
- "tslib": "^2.4.1",
51
+ "tslib": "^2.8.1",
52
52
  "xmlhttprequest": "^1.8.0"
53
53
  },
54
54
  "dependencies": {
package/src/App.ts CHANGED
@@ -166,7 +166,7 @@ export class App extends ServiceProvider {
166
166
  }, 5);
167
167
  }
168
168
 
169
- public createBusyIndicator(taskInfo?: IBackgroundTaskInfo ): IDisposable {
169
+ public createBusyIndicator(taskInfo?: IBackgroundTaskInfo ): Disposable {
170
170
  this.busyIndicatorService = this.busyIndicatorService
171
171
  || this.resolve(BusyIndicatorService);
172
172
  return this.busyIndicatorService.createIndicator(taskInfo);
@@ -334,10 +334,10 @@ export class App extends ServiceProvider {
334
334
  if (a && a.then && a.catch) {
335
335
  a.then((r) => {
336
336
  // do nothing
337
- indicator.dispose();
337
+ indicator[Symbol.dispose]();
338
338
  });
339
339
  a.catch((e) => {
340
- indicator.dispose();
340
+ indicator[Symbol.dispose]();
341
341
  // tslint:disable-next-line:no-console
342
342
  // console.error("XFApp.onReady");
343
343
  // tslint:disable-next-line:no-console
@@ -345,7 +345,7 @@ export class App extends ServiceProvider {
345
345
  });
346
346
  return;
347
347
  }
348
- indicator.dispose();
348
+ indicator[Symbol.dispose]();
349
349
  }
350
350
 
351
351
  }
@@ -62,87 +62,83 @@ export class AtomLoader {
62
62
  returnPromise?: Promise<any>,
63
63
  id?: string}> {
64
64
 
65
- const busyIndicator = app.createBusyIndicator({
65
+ using _busy = app.createBusyIndicator({
66
66
  title: url.toString(),
67
67
  description: `Loading View ${url}`
68
68
  });
69
69
 
70
- try {
71
- const view = await AtomLoader.load<T>(url, app);
72
- let vm = view.viewModel;
73
- if (!vm) {
74
- if (!vmFactory) {
75
- return { view };
76
- }
77
- vm = vmFactory();
78
- view.viewModel = vm;
79
- }
80
- if ("parameters" in view) {
81
- vm = (view as any).parameters;
70
+ const view = await AtomLoader.load<T>(url, app);
71
+ let vm = view.viewModel;
72
+ if (!vm) {
73
+ if (!vmFactory) {
74
+ return { view };
82
75
  }
83
- if (vm) {
84
- const jsonService = app.get(JsonService);
85
- for (const key in url.query) {
86
- if (url.query.hasOwnProperty(key)) {
87
- const element = url.query[key];
88
- if (typeof element === "object") {
89
- vm[key] = jsonService.parse(jsonService.stringify(element));
90
- continue;
91
- }
92
- if (/^json\:/.test(key)) {
93
- const k = key.split(":")[1];
94
- vm[k] = jsonService.parse(element.toString());
95
- continue;
96
- }
97
- if (/^ref\:/.test(key)) {
98
- const rs = app.get(ReferenceService);
99
- const v = rs.get(element as string);
100
- vm[key.split(":", 2)[1]] = v.consume();
101
- continue;
102
- }
103
- try {
104
- vm[key] = element;
105
- } catch (e) {
106
- // tslint:disable-next-line: no-console
107
- console.error(e);
108
- }
76
+ vm = vmFactory();
77
+ view.viewModel = vm;
78
+ }
79
+ if ("parameters" in view) {
80
+ vm = (view as any).parameters;
81
+ }
82
+ if (vm) {
83
+ const jsonService = app.get(JsonService);
84
+ for (const key in url.query) {
85
+ if (url.query.hasOwnProperty(key)) {
86
+ const element = url.query[key];
87
+ if (typeof element === "object") {
88
+ vm[key] = jsonService.parse(jsonService.stringify(element));
89
+ continue;
90
+ }
91
+ if (/^json\:/.test(key)) {
92
+ const k = key.split(":")[1];
93
+ vm[k] = jsonService.parse(element.toString());
94
+ continue;
95
+ }
96
+ if (/^ref\:/.test(key)) {
97
+ const rs = app.get(ReferenceService);
98
+ const v = rs.get(element as string);
99
+ vm[key.split(":", 2)[1]] = v.consume();
100
+ continue;
101
+ }
102
+ try {
103
+ vm[key] = element;
104
+ } catch (e) {
105
+ // tslint:disable-next-line: no-console
106
+ console.error(e);
109
107
  }
110
108
  }
111
109
  }
110
+ }
112
111
 
113
- // register hooks !! if it is a window !!
114
- if (hookCloseEvents && vm) {
115
-
116
- const disposables = view.disposables;
112
+ // register hooks !! if it is a window !!
113
+ if (hookCloseEvents && vm) {
117
114
 
118
- const id = (AtomLoader.id++).toString();
119
- (view as any).id = id;
115
+ const disposables = view.disposables;
120
116
 
121
- const returnPromise = new Promise((resolve, reject) => {
122
- disposables.add( app.subscribe(`atom-window-close:${id}`, (m, r) => {
123
- resolve(r);
124
- view.dispose();
125
- }));
126
- disposables.add( app.subscribe(`atom-window-cancel:${id}`, () => {
127
- reject("cancelled");
128
- view.dispose();
129
- }));
130
- });
117
+ const id = (AtomLoader.id++).toString();
118
+ (view as any).id = id;
131
119
 
132
- // it is responsibility of view holder to dispose the view
133
- // disposables.add((view as any));
120
+ const returnPromise = new Promise((resolve, reject) => {
121
+ disposables.add( app.subscribe(`atom-window-close:${id}`, (m, r) => {
122
+ resolve(r);
123
+ view.dispose();
124
+ }));
125
+ disposables.add( app.subscribe(`atom-window-cancel:${id}`, () => {
126
+ reject("cancelled");
127
+ view.dispose();
128
+ }));
129
+ });
134
130
 
135
- vm.windowName = id;
131
+ // it is responsibility of view holder to dispose the view
132
+ // disposables.add((view as any));
136
133
 
137
- (view as any).returnPromise = returnPromise;
134
+ vm.windowName = id;
138
135
 
139
- return { view, disposables, returnPromise, id };
140
- }
136
+ (view as any).returnPromise = returnPromise;
141
137
 
142
- return { view };
143
- } finally {
144
- busyIndicator.dispose();
138
+ return { view, disposables, returnPromise, id };
145
139
  }
140
+
141
+ return { view };
146
142
  }
147
143
 
148
144
  public static async loadClass<T extends AtomControl>(
@@ -150,115 +146,107 @@ export class AtomLoader {
150
146
  { title, [displayRouteSymbol]: route, ... parameters }: any = {},
151
147
  app: App): Promise<T> {
152
148
 
153
- const busyIndicator = app.createBusyIndicator({
149
+ using _busyIndicator = app.createBusyIndicator({
154
150
  title: url?.toString(),
155
151
  description: `Loading View ${url}`
156
152
  });
157
153
 
158
- try {
159
- const view = await AtomLoader.load<T>(url, app);
160
- const vm = getOwnInheritedProperty(view, "viewModel");
161
- let params;
162
- if ("parameters" in view) {
163
- params = (view as any).parameters;
164
- }
165
- if (!vm) {
166
- params = (view as any).parameters ??= {};
167
- } else {
168
- console.warn("ViewModel is deprecated");
169
- }
170
- if (title) {
171
- (view as any).title = title;
172
- }
173
- if (params) {
174
- params[displayRouteSymbol] = route;
175
- }
176
- if ((vm || params) && parameters) {
177
- for (const key in parameters) {
178
- if (parameters.hasOwnProperty(key)) {
179
- const element = parameters[key];
180
- try {
181
- if (vm) { vm[key] = element; }
182
- if (params) { params[key] = element; }
183
- } catch (e) {
184
- // tslint:disable-next-line: no-console
185
- console.error(e);
186
- }
154
+ const view = await AtomLoader.load<T>(url, app);
155
+ const vm = getOwnInheritedProperty(view, "viewModel");
156
+ let params;
157
+ if ("parameters" in view) {
158
+ params = (view as any).parameters;
159
+ }
160
+ if (!vm) {
161
+ params = (view as any).parameters ??= {};
162
+ } else {
163
+ console.warn("ViewModel is deprecated");
164
+ }
165
+ if (title) {
166
+ (view as any).title = title;
167
+ }
168
+ if (params) {
169
+ params[displayRouteSymbol] = route;
170
+ }
171
+ if ((vm || params) && parameters) {
172
+ for (const key in parameters) {
173
+ if (parameters.hasOwnProperty(key)) {
174
+ const element = parameters[key];
175
+ try {
176
+ if (vm) { vm[key] = element; }
177
+ if (params) { params[key] = element; }
178
+ } catch (e) {
179
+ // tslint:disable-next-line: no-console
180
+ console.error(e);
187
181
  }
188
182
  }
189
183
  }
190
- (view as any).init?.()
191
- ?.catch((error) => {
192
- if (!CancelToken.isCancelled(error)) {
193
- // tslint:disable-next-line: no-console
194
- console.error(error);
195
- }
196
- });
197
- return view;
198
- } finally {
199
- busyIndicator.dispose();
200
184
  }
185
+ (view as any).init?.()
186
+ ?.catch((error) => {
187
+ if (!CancelToken.isCancelled(error)) {
188
+ // tslint:disable-next-line: no-console
189
+ console.error(error);
190
+ }
191
+ });
192
+ return view;
201
193
  }
202
194
 
203
195
  public static async loadControl<T extends AtomControl>(
204
196
  url: AtomUri,
205
197
  app: App): Promise<T> {
206
198
 
207
- const busyIndicator = app.createBusyIndicator({
199
+ using _busyIndicator = app.createBusyIndicator({
208
200
  title: url?.toString(),
209
201
  description: `Loading View ${url}`
210
202
  });
211
203
 
212
- try {
213
- const view = await AtomLoader.load<T>(url, app);
214
- const vm = getOwnInheritedProperty(view, "viewModel");
215
- let params;
216
- if ("parameters" in view) {
217
- params = (view as any).parameters;
218
- }
219
- if (!vm) {
220
- params = (view as any).parameters ??= {};
221
- }
222
- if (vm || params) {
223
- const jsonService = app.get(JsonService);
224
- for (const key in url.query) {
225
- if (url.query.hasOwnProperty(key)) {
226
- const element = url.query[key];
227
- if (/^json\:/.test(key)) {
228
- const k = key.split(":")[1];
229
- const v = jsonService.parse(element.toString());
230
- if (vm) { vm[k] = v; }
231
- if (params) { params[k] = v; }
232
- continue;
233
- }
234
- if (/^ref\:/.test(key)) {
235
- const rs = app.get(ReferenceService);
236
- const v = rs.get(element as string).consume();
237
- const keyName = key.split(":", 2)[1];
238
- if (vm) { vm[keyName] = v; }
239
- if (params) { params[keyName] = v; }
240
- continue;
241
- }
242
- try {
243
- if (vm) { vm[key] = element; }
244
- if (params) { params[key] = element; }
245
- } catch (e) {
246
- // tslint:disable-next-line: no-console
247
- console.error(e);
248
- }
204
+ const view = await AtomLoader.load<T>(url, app);
205
+ const vm = getOwnInheritedProperty(view, "viewModel");
206
+ let params;
207
+ if ("parameters" in view) {
208
+ params = (view as any).parameters;
209
+ }
210
+ if (!vm) {
211
+ params = (view as any).parameters ??= {};
212
+ }
213
+ if (vm || params) {
214
+ const jsonService = app.get(JsonService);
215
+ for (const key in url.query) {
216
+ if (url.query.hasOwnProperty(key)) {
217
+ const element = url.query[key];
218
+ if (/^json\:/.test(key)) {
219
+ const k = key.split(":")[1];
220
+ const v = jsonService.parse(element.toString());
221
+ if (vm) { vm[k] = v; }
222
+ if (params) { params[k] = v; }
223
+ continue;
224
+ }
225
+ if (/^ref\:/.test(key)) {
226
+ const rs = app.get(ReferenceService);
227
+ const v = rs.get(element as string).consume();
228
+ const keyName = key.split(":", 2)[1];
229
+ if (vm) { vm[keyName] = v; }
230
+ if (params) { params[keyName] = v; }
231
+ continue;
232
+ }
233
+ try {
234
+ if (vm) { vm[key] = element; }
235
+ if (params) { params[key] = element; }
236
+ } catch (e) {
237
+ // tslint:disable-next-line: no-console
238
+ console.error(e);
249
239
  }
250
240
  }
251
241
  }
252
- (view as any).init?.()
253
- ?.catch((error) => {
254
- if (!CancelToken.isCancelled(error)) {
255
- console.error(error);
256
- }
257
- });
258
- return view;
259
- } finally {
260
- busyIndicator.dispose();
261
242
  }
243
+ (view as any).init?.()
244
+ ?.catch((error) => {
245
+ if (!CancelToken.isCancelled(error)) {
246
+ console.error(error);
247
+ }
248
+ });
249
+ return view;
262
250
  }
263
251
 
264
252
  }
package/src/core/types.ts CHANGED
@@ -66,6 +66,8 @@ export type CancelReason = "cancelled" | "timeout";
66
66
 
67
67
  export const ignoreValue: any = Symbol("ignore");
68
68
 
69
+ export const errorHandled = Symbol("errorHandled");
70
+
69
71
  /**
70
72
  *
71
73
  *
@@ -75,6 +77,11 @@ export const ignoreValue: any = Symbol("ignore");
75
77
  export class CancelToken implements IDisposable {
76
78
 
77
79
  public static isCancelled(e: any) {
80
+
81
+ if (e[errorHandled]) {
82
+ return true;
83
+ }
84
+
78
85
  if (/^(cancelled$|canceled$|aborterror\:)/i.test(e.message ?? e.toString().trim())) {
79
86
  return true;
80
87
  }
@@ -10,9 +10,9 @@ export interface IBackgroundTaskInfo {
10
10
  @RegisterSingleton
11
11
  export class BusyIndicatorService {
12
12
 
13
- public createIndicator(info?: IBackgroundTaskInfo): IDisposable {
13
+ public createIndicator(info?: IBackgroundTaskInfo): Disposable {
14
14
  return {
15
- dispose() {
15
+ [Symbol.dispose]() {
16
16
  // do nothing.
17
17
  }
18
18
  };
@@ -247,65 +247,60 @@ export default class FetchBuilder {
247
247
  postProcessor: (r: Response, next?: (data) => any) => T | Promise<T>): Promise<{ result: T, headers: any, status: number }> {
248
248
 
249
249
  let { log, logError, hideBusyIndicator } = this.request;
250
- let d:IDisposable;
250
+ using _d = !hideBusyIndicator ? App.current.createBusyIndicator() : null;
251
251
  try {
252
- d = !hideBusyIndicator ? App.current.createBusyIndicator() : null;
253
- try {
254
-
255
- const { headers, fetchProxy, jsonPostProcessor } = this.request;
256
- const r = await (fetchProxy ?? fetch)(this.request.url, this.request);
257
- if (ensureSuccess) {
258
- if (r.status > 300) {
259
- log = logError;
260
- log?.(`fetch: ${this.request.method ?? "GET"} ${this.request.url}`);
261
- if (log && headers) {
262
- for (const key in headers) {
263
- if (headers.hasOwnProperty(key)) {
264
- log?.(`${key}: ${headers[key]}`);
265
- }
252
+
253
+ const { headers, fetchProxy, jsonPostProcessor } = this.request;
254
+ const r = await (fetchProxy ?? fetch)(this.request.url, this.request);
255
+ if (ensureSuccess) {
256
+ if (r.status > 300) {
257
+ log = logError;
258
+ log?.(`fetch: ${this.request.method ?? "GET"} ${this.request.url}`);
259
+ if (log && headers) {
260
+ for (const key in headers) {
261
+ if (headers.hasOwnProperty(key)) {
262
+ log?.(`${key}: ${headers[key]}`);
266
263
  }
267
264
  }
268
- log?.(`${r.status} ${r.statusText || "Http Error"}`);
269
- const type = r.headers.get("content-type");
270
- if (/\/json/i.test(type)) {
271
- const json: any = await r.json();
272
- log?.(json);
273
- const message = json.title
274
- ?? json.detail
275
- ?? json.message
276
- ?? json.exceptionMessage
277
- ?? "Json Server Error";
278
- log = null;
279
- logError = null;
280
- throw new JsonError(message, json);
281
- }
282
- const text = await r.text();
283
- log?.(text);
265
+ }
266
+ log?.(`${r.status} ${r.statusText || "Http Error"}`);
267
+ const type = r.headers.get("content-type");
268
+ if (/\/json/i.test(type)) {
269
+ const json: any = await r.json();
270
+ log?.(json);
271
+ const message = json.title
272
+ ?? json.detail
273
+ ?? json.message
274
+ ?? json.exceptionMessage
275
+ ?? "Json Server Error";
284
276
  log = null;
285
277
  logError = null;
286
- throw new Error(`Fetch failed with error ${r.status} for ${this.request.url}\n${text}`);
278
+ throw new JsonError(message, json);
287
279
  }
280
+ const text = await r.text();
281
+ log?.(text);
282
+ log = null;
283
+ logError = null;
284
+ throw new Error(`Fetch failed with error ${r.status} for ${this.request.url}\n${text}`);
288
285
  }
289
- log?.(`${this.request.method ?? "GET"} ${this.request.url}`);
290
- if (log && headers) {
291
- for (const key in headers) {
292
- if (headers.hasOwnProperty(key)) {
293
- log?.(`${key}: ${headers[key]}`);
294
- }
286
+ }
287
+ log?.(`${this.request.method ?? "GET"} ${this.request.url}`);
288
+ if (log && headers) {
289
+ for (const key in headers) {
290
+ if (headers.hasOwnProperty(key)) {
291
+ log?.(`${key}: ${headers[key]}`);
295
292
  }
296
293
  }
297
- const result = await postProcessor(r, jsonPostProcessor);
298
- if (log) {
299
- log(`${r.status} ${r.statusText || "OK"}`)
300
- log(result);
301
- }
302
- return { result, headers: r.headers, status: r.status };
303
- } catch (error) {
304
- log?.(error);
305
- throw error;
306
294
  }
307
- } finally {
308
- d?.dispose();
295
+ const result = await postProcessor(r, jsonPostProcessor);
296
+ if (log) {
297
+ log(`${r.status} ${r.statusText || "OK"}`)
298
+ log(result);
299
+ }
300
+ return { result, headers: r.headers, status: r.status };
301
+ } catch (error) {
302
+ log?.(error);
303
+ throw error;
309
304
  }
310
305
  }
311
306