@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.
- package/dist/App.d.ts +1 -1
- package/dist/App.d.ts.map +1 -1
- package/dist/App.js +3 -3
- package/dist/App.js.map +1 -1
- package/dist/core/AtomLoader.d.ts.map +1 -1
- package/dist/core/AtomLoader.js +42 -16
- package/dist/core/AtomLoader.js.map +1 -1
- package/dist/core/types.d.ts +1 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +5 -1
- package/dist/core/types.js.map +1 -1
- package/dist/services/BusyIndicatorService.d.ts +1 -2
- package/dist/services/BusyIndicatorService.d.ts.map +1 -1
- package/dist/services/BusyIndicatorService.js +1 -1
- package/dist/services/BusyIndicatorService.js.map +1 -1
- package/dist/services/FetchBuilder.d.ts.map +1 -1
- package/dist/services/FetchBuilder.js +21 -12
- package/dist/services/FetchBuilder.js.map +1 -1
- package/dist/services/http/RestService.d.ts.map +1 -1
- package/dist/services/http/RestService.js +34 -26
- package/dist/services/http/RestService.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/view-model/Action.d.ts.map +1 -1
- package/dist/view-model/Action.js +7 -4
- package/dist/view-model/Action.js.map +1 -1
- package/dist/web/services/WebBusyIndicatorService.d.ts +1 -2
- package/dist/web/services/WebBusyIndicatorService.d.ts.map +1 -1
- package/dist/web/services/WebBusyIndicatorService.js +5 -1
- package/dist/web/services/WebBusyIndicatorService.js.map +1 -1
- package/package.json +2 -2
- package/src/App.ts +4 -4
- package/src/core/AtomLoader.ts +139 -151
- package/src/core/types.ts +7 -0
- package/src/services/BusyIndicatorService.ts +2 -2
- package/src/services/FetchBuilder.ts +44 -49
- package/src/services/http/RestService.ts +119 -125
- package/src/view-model/Action.ts +6 -4
- package/src/web/services/WebBusyIndicatorService.ts +6 -2
- 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":";;;;;;;;;MAASA,GAAG,GAAAC,IAAA,CAAHD,GAAG;IAAA,aAAAE,SAAA;MAEHC,MAAM,GAAAD,SAAA,CAANC,MAAM;IAAA,aAAAC,oBAAA;MACNC,iBAAiB,GAAAD,oBAAA,CAAjBC,iBAAiB;IAAA,aAAAC,6BAAA;MACjBC,oBAAoB,GAAAD,6BAAA,CAApBC,oBAAoB;IAAA,aAAAC,0BAAA;MACpBC,iBAAiB,GAAAD,0BAAA,CAAjBC,iBAAiB;IAAA,aAAAC,oBAAA;MACjBC,WAAW,GAAAD,oBAAA,CAAXC,WAAW;IAAA,aAAAC,mBAAA;MACXC,iBAAiB,GAAAD,mBAAA,CAAjBC,iBAAiB;IAAA;IAAAC,OAAA,WAAAA,CAAA;MAAAC,OAAA,4BAIbC,uBAAuB,GAA7B,MAAMA,uBAAwB,SAAQT,oBAAoB;QAA1DU,YAAA;;UAQK,KAAAC,MAAM,GAAW,KAAK;UAEtB,KAAAC,UAAU,GAAW,CAAC;
|
|
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.
|
|
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.
|
|
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 ):
|
|
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
|
}
|
package/src/core/AtomLoader.ts
CHANGED
|
@@ -62,87 +62,83 @@ export class AtomLoader {
|
|
|
62
62
|
returnPromise?: Promise<any>,
|
|
63
63
|
id?: string}> {
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
using _busy = app.createBusyIndicator({
|
|
66
66
|
title: url.toString(),
|
|
67
67
|
description: `Loading View ${url}`
|
|
68
68
|
});
|
|
69
69
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
if (!
|
|
74
|
-
|
|
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
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
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
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
const disposables = view.disposables;
|
|
112
|
+
// register hooks !! if it is a window !!
|
|
113
|
+
if (hookCloseEvents && vm) {
|
|
117
114
|
|
|
118
|
-
|
|
119
|
-
(view as any).id = id;
|
|
115
|
+
const disposables = view.disposables;
|
|
120
116
|
|
|
121
|
-
|
|
122
|
-
|
|
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
|
-
|
|
133
|
-
|
|
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
|
-
|
|
131
|
+
// it is responsibility of view holder to dispose the view
|
|
132
|
+
// disposables.add((view as any));
|
|
136
133
|
|
|
137
|
-
|
|
134
|
+
vm.windowName = id;
|
|
138
135
|
|
|
139
|
-
|
|
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
|
-
|
|
149
|
+
using _busyIndicator = app.createBusyIndicator({
|
|
154
150
|
title: url?.toString(),
|
|
155
151
|
description: `Loading View ${url}`
|
|
156
152
|
});
|
|
157
153
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
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
|
-
|
|
199
|
+
using _busyIndicator = app.createBusyIndicator({
|
|
208
200
|
title: url?.toString(),
|
|
209
201
|
description: `Loading View ${url}`
|
|
210
202
|
});
|
|
211
203
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
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):
|
|
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
|
-
|
|
250
|
+
using _d = !hideBusyIndicator ? App.current.createBusyIndicator() : null;
|
|
251
251
|
try {
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
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
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
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
|
|
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
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
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
|
-
|
|
308
|
-
|
|
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
|
|