ng2-rest 21.0.60 → 21.0.61
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/VERIFIED-BUILD-DATA.jsonc +3 -3
- package/browser/fesm2022/ng2-rest-browser.mjs +47 -25
- package/browser/fesm2022/ng2-rest-browser.mjs.map +1 -1
- package/browser/package.json +1 -1
- package/browser/types/ng2-rest-browser.d.ts +2 -6
- package/browser-prod/fesm2022/ng2-rest-browser-prod.mjs +47 -25
- package/browser-prod/fesm2022/ng2-rest-browser-prod.mjs.map +1 -1
- package/browser-prod/package.json +1 -1
- package/browser-prod/types/ng2-rest-browser-prod.d.ts +2 -6
- package/lib/build-info._auto-generated_.d.ts +1 -1
- package/lib/build-info._auto-generated_.js +1 -1
- package/lib/env/env.angular-node-app.d.ts +1 -0
- package/lib/env/env.angular-node-app.js +6 -2
- package/lib/env/env.angular-node-app.js.map +1 -1
- package/lib/env/env.docs-webapp.d.ts +1 -0
- package/lib/env/env.docs-webapp.js +6 -2
- package/lib/env/env.docs-webapp.js.map +1 -1
- package/lib/env/env.electron-app.d.ts +1 -0
- package/lib/env/env.electron-app.js +6 -2
- package/lib/env/env.electron-app.js.map +1 -1
- package/lib/env/env.mobile-app.d.ts +1 -0
- package/lib/env/env.mobile-app.js +6 -2
- package/lib/env/env.mobile-app.js.map +1 -1
- package/lib/env/env.npm-lib-and-cli-tool.d.ts +1 -0
- package/lib/env/env.npm-lib-and-cli-tool.js +6 -2
- package/lib/env/env.npm-lib-and-cli-tool.js.map +1 -1
- package/lib/env/env.vscode-plugin.d.ts +1 -0
- package/lib/env/env.vscode-plugin.js +6 -2
- package/lib/env/env.vscode-plugin.js.map +1 -1
- package/lib/new-mapping.js +26 -0
- package/lib/new-mapping.js.map +1 -1
- package/lib/new-mapping.test.d.ts +1 -1
- package/lib/ng2-rest.d.ts +2 -6
- package/lib/ng2-rest.js +21 -25
- package/lib/ng2-rest.js.map +1 -1
- package/lib/package.json +1 -1
- package/lib-esm/app.electron.js +1 -0
- package/lib-esm/app.electron.js.map +1 -1
- package/lib-esm/app.hosts.js +1 -0
- package/lib-esm/app.hosts.js.map +1 -1
- package/lib-esm/app.js +1 -0
- package/lib-esm/app.js.map +1 -1
- package/lib-esm/app.vscode.js +1 -0
- package/lib-esm/app.vscode.js.map +1 -1
- package/lib-esm/lib/build-info._auto-generated_.d.ts +1 -1
- package/lib-esm/lib/build-info._auto-generated_.js +1 -1
- package/lib-esm/lib/env/env.angular-node-app.d.ts +1 -0
- package/lib-esm/lib/env/env.angular-node-app.js +3 -0
- package/lib-esm/lib/env/env.angular-node-app.js.map +1 -1
- package/lib-esm/lib/env/env.docs-webapp.d.ts +1 -0
- package/lib-esm/lib/env/env.docs-webapp.js +3 -0
- package/lib-esm/lib/env/env.docs-webapp.js.map +1 -1
- package/lib-esm/lib/env/env.electron-app.d.ts +1 -0
- package/lib-esm/lib/env/env.electron-app.js +3 -0
- package/lib-esm/lib/env/env.electron-app.js.map +1 -1
- package/lib-esm/lib/env/env.mobile-app.d.ts +1 -0
- package/lib-esm/lib/env/env.mobile-app.js +3 -0
- package/lib-esm/lib/env/env.mobile-app.js.map +1 -1
- package/lib-esm/lib/env/env.npm-lib-and-cli-tool.d.ts +1 -0
- package/lib-esm/lib/env/env.npm-lib-and-cli-tool.js +3 -0
- package/lib-esm/lib/env/env.npm-lib-and-cli-tool.js.map +1 -1
- package/lib-esm/lib/env/env.vscode-plugin.d.ts +1 -0
- package/lib-esm/lib/env/env.vscode-plugin.js +3 -0
- package/lib-esm/lib/env/env.vscode-plugin.js.map +1 -1
- package/lib-esm/lib/new-mapping.js +26 -0
- package/lib-esm/lib/new-mapping.js.map +1 -1
- package/lib-esm/lib/ng2-rest.d.ts +2 -6
- package/lib-esm/lib/ng2-rest.js +21 -25
- package/lib-esm/lib/ng2-rest.js.map +1 -1
- package/lib-prod/build-info._auto-generated_.d.ts +1 -1
- package/lib-prod/build-info._auto-generated_.js +1 -1
- package/lib-prod/env/env.angular-node-app.d.ts +1 -0
- package/lib-prod/env/env.angular-node-app.js +3 -0
- package/lib-prod/env/env.angular-node-app.js.map +1 -1
- package/lib-prod/env/env.docs-webapp.d.ts +1 -0
- package/lib-prod/env/env.docs-webapp.js +3 -0
- package/lib-prod/env/env.docs-webapp.js.map +1 -1
- package/lib-prod/env/env.electron-app.d.ts +1 -0
- package/lib-prod/env/env.electron-app.js +3 -0
- package/lib-prod/env/env.electron-app.js.map +1 -1
- package/lib-prod/env/env.mobile-app.d.ts +1 -0
- package/lib-prod/env/env.mobile-app.js +3 -0
- package/lib-prod/env/env.mobile-app.js.map +1 -1
- package/lib-prod/env/env.npm-lib-and-cli-tool.d.ts +1 -0
- package/lib-prod/env/env.npm-lib-and-cli-tool.js +3 -0
- package/lib-prod/env/env.npm-lib-and-cli-tool.js.map +1 -1
- package/lib-prod/env/env.vscode-plugin.d.ts +1 -0
- package/lib-prod/env/env.vscode-plugin.js +3 -0
- package/lib-prod/env/env.vscode-plugin.js.map +1 -1
- package/lib-prod/new-mapping.js +26 -0
- package/lib-prod/new-mapping.js.map +1 -1
- package/lib-prod/ng2-rest.d.ts +2 -6
- package/lib-prod/ng2-rest.js +21 -25
- package/lib-prod/ng2-rest.js.map +1 -1
- package/lib-prod/package.json +1 -1
- package/package.json +1 -1
- package/websql/fesm2022/ng2-rest-websql.mjs +47 -25
- package/websql/fesm2022/ng2-rest-websql.mjs.map +1 -1
- package/websql/package.json +1 -1
- package/websql/types/ng2-rest-websql.d.ts +2 -6
- package/websql-prod/fesm2022/ng2-rest-websql-prod.mjs +47 -25
- package/websql-prod/fesm2022/ng2-rest-websql-prod.mjs.map +1 -1
- package/websql-prod/package.json +1 -1
- package/websql-prod/types/ng2-rest-websql-prod.d.ts +2 -6
|
@@ -264,11 +264,6 @@ interface ResourceOptions {
|
|
|
264
264
|
circular?: Circ[] | string;
|
|
265
265
|
};
|
|
266
266
|
}
|
|
267
|
-
type BackendError = {
|
|
268
|
-
msg?: string;
|
|
269
|
-
stack?: string[];
|
|
270
|
-
data: any;
|
|
271
|
-
};
|
|
272
267
|
declare const HeaderKeyContentType = "Content-Type";
|
|
273
268
|
declare const HeaderKeyAccept = "Accept";
|
|
274
269
|
declare const DEFAULT_HEADERS: {
|
|
@@ -298,6 +293,7 @@ declare abstract class ResourceResponse<DATA = any, ERROR = any> implements Prom
|
|
|
298
293
|
private _observable?;
|
|
299
294
|
constructor(httpMethodName: CoreModels.HttpMethod, urlOrigin: string, urlPathname: string, options: ResourceOptions, body: DATA | DATA, urlParams: UrlParams[], axiosOptions: Ng2RestAxiosRequestConfig, isArray: boolean, headers: RestHeaders, globalInterceptors: Map<string, TaonAxiosClientInterceptor>, methodsInterceptors: Map<string, TaonAxiosClientInterceptor>);
|
|
300
295
|
protected abstract makeRequest(abortSignal: AbortSignal): Promise<HttpResponse<DATA>>;
|
|
296
|
+
private makeRequestWithGlobalErrorHandling;
|
|
301
297
|
/**
|
|
302
298
|
* ✅ Explicit cancel (useful for "promise style")
|
|
303
299
|
*/
|
|
@@ -328,7 +324,7 @@ type Ng2RestAxiosRequestConfig = {
|
|
|
328
324
|
declare namespace Resource {
|
|
329
325
|
const globalInterceptors: Map<string, TaonAxiosClientInterceptor<any>>;
|
|
330
326
|
const methodsInterceptors: Map<string, TaonAxiosClientInterceptor<any>>;
|
|
331
|
-
const listenErrors: Observable<
|
|
327
|
+
const listenErrors: Observable<any>;
|
|
332
328
|
const Cookies: Cookie;
|
|
333
329
|
function create<MODEL = any>(originUrl: string, pathnameModel: string, resourceOptions?: ResourceOptions): {
|
|
334
330
|
model: <INTERPOLATE_ARGS = {}>(interpolateParams?: INTERPOLATE_ARGS, overrideOptions?: ResourceOptions | {
|
|
@@ -9,6 +9,27 @@ import { CLASS__NS__getName, CLASS__NS__getClassNameFromObjInstanceOrClassFn, CL
|
|
|
9
9
|
//#region constatns
|
|
10
10
|
const mappingStore = new WeakMap();
|
|
11
11
|
const defaultValueStore = new WeakMap();
|
|
12
|
+
/**
|
|
13
|
+
* Checks whether assigning to a property would override
|
|
14
|
+
* a getter-only property somewhere in the prototype chain.
|
|
15
|
+
*/
|
|
16
|
+
const canAssignProperty = (target, key) => {
|
|
17
|
+
let current = target;
|
|
18
|
+
while (current) {
|
|
19
|
+
const descriptor = Object.getOwnPropertyDescriptor(current, key);
|
|
20
|
+
if (descriptor) {
|
|
21
|
+
// Accessor property
|
|
22
|
+
if ('get' in descriptor || 'set' in descriptor) {
|
|
23
|
+
return typeof descriptor.set === 'function';
|
|
24
|
+
}
|
|
25
|
+
// Normal property
|
|
26
|
+
return descriptor.writable !== false;
|
|
27
|
+
}
|
|
28
|
+
current = Object.getPrototypeOf(current);
|
|
29
|
+
}
|
|
30
|
+
// Property doesn't exist yet -> safe to create
|
|
31
|
+
return true;
|
|
32
|
+
};
|
|
12
33
|
//#endregion
|
|
13
34
|
//#region decorators
|
|
14
35
|
function DefaultMapping(mapping) {
|
|
@@ -292,6 +313,11 @@ const encodeMappingFn = (input, schema, circular, parentPath = '') => {
|
|
|
292
313
|
}
|
|
293
314
|
for (const key of Object.keys(input)) {
|
|
294
315
|
const value = input[key];
|
|
316
|
+
// Don't try to overwrite getter-only / readonly properties.
|
|
317
|
+
if (!canAssignProperty(instance, key)) {
|
|
318
|
+
// console.log({keyNot:key})
|
|
319
|
+
continue;
|
|
320
|
+
}
|
|
295
321
|
const fullPath = parentPath ? `${parentPath}.${key}` : key;
|
|
296
322
|
const rule = schema[fullPath];
|
|
297
323
|
if (!rule) {
|
|
@@ -911,6 +937,7 @@ class HttpResponseError extends BaseResponse {
|
|
|
911
937
|
this.body = new ErrorBody(url, responseText);
|
|
912
938
|
}
|
|
913
939
|
}
|
|
940
|
+
//#endregion
|
|
914
941
|
//#region default headers
|
|
915
942
|
const HeaderKeyContentType = 'Content-Type';
|
|
916
943
|
const HeaderKeyAccept = 'Accept';
|
|
@@ -968,6 +995,17 @@ class ResourceResponse {
|
|
|
968
995
|
this.methodsInterceptors = methodsInterceptors;
|
|
969
996
|
this[_a] = 'Promise';
|
|
970
997
|
}
|
|
998
|
+
async makeRequestWithGlobalErrorHandling(abortSignal) {
|
|
999
|
+
try {
|
|
1000
|
+
return await this.makeRequest(abortSignal);
|
|
1001
|
+
}
|
|
1002
|
+
catch (error) {
|
|
1003
|
+
// if (error instanceof HttpResponseError) {
|
|
1004
|
+
listenErrorsSrc.next(error);
|
|
1005
|
+
// }
|
|
1006
|
+
throw error;
|
|
1007
|
+
}
|
|
1008
|
+
}
|
|
971
1009
|
/**
|
|
972
1010
|
* ✅ Explicit cancel (useful for "promise style")
|
|
973
1011
|
*/
|
|
@@ -980,7 +1018,7 @@ class ResourceResponse {
|
|
|
980
1018
|
get promise() {
|
|
981
1019
|
if (!this._promise) {
|
|
982
1020
|
this._promiseAbort = new AbortController();
|
|
983
|
-
this._promise = this.
|
|
1021
|
+
this._promise = this.makeRequestWithGlobalErrorHandling(this._promiseAbort.signal);
|
|
984
1022
|
}
|
|
985
1023
|
return this._promise;
|
|
986
1024
|
}
|
|
@@ -1003,18 +1041,19 @@ class ResourceResponse {
|
|
|
1003
1041
|
if (!this._observable) {
|
|
1004
1042
|
this._observable = new Observable(subscriber => {
|
|
1005
1043
|
const ac = new AbortController();
|
|
1006
|
-
this.
|
|
1044
|
+
this.makeRequestWithGlobalErrorHandling(ac.signal)
|
|
1007
1045
|
.then(res => {
|
|
1008
|
-
if (res instanceof HttpResponseError) {
|
|
1009
|
-
subscriber.error(res);
|
|
1010
|
-
return;
|
|
1011
|
-
}
|
|
1012
1046
|
subscriber.next(res);
|
|
1013
1047
|
subscriber.complete();
|
|
1014
1048
|
})
|
|
1015
|
-
.catch(err =>
|
|
1049
|
+
.catch(err => {
|
|
1050
|
+
subscriber.error(err);
|
|
1051
|
+
});
|
|
1016
1052
|
return () => ac.abort('rxjs-unsubscribe');
|
|
1017
|
-
}).pipe(shareReplay({
|
|
1053
|
+
}).pipe(shareReplay({
|
|
1054
|
+
bufferSize: 1,
|
|
1055
|
+
refCount: true,
|
|
1056
|
+
}));
|
|
1018
1057
|
}
|
|
1019
1058
|
return this._observable;
|
|
1020
1059
|
}
|
|
@@ -1084,23 +1123,6 @@ class ResourceResponseHttp extends ResourceResponse {
|
|
|
1084
1123
|
catchedError?.name === 'CanceledError') {
|
|
1085
1124
|
throw new HttpResponseError(url, method, JSON.stringify({ message: 'Request canceled' }), this.options, RestHeaders.from(), 0, this.isArray);
|
|
1086
1125
|
}
|
|
1087
|
-
//#region handle global error listener for notificaitons
|
|
1088
|
-
if (typeof catchedError === 'object' &&
|
|
1089
|
-
catchedError.response &&
|
|
1090
|
-
catchedError.response.data) {
|
|
1091
|
-
const err = catchedError.response.data;
|
|
1092
|
-
const msg = catchedError.response.data.message || '';
|
|
1093
|
-
// console.log({
|
|
1094
|
-
// 'err.stack': err?.stack
|
|
1095
|
-
// })
|
|
1096
|
-
let stack = (err.stack || '').split('\n');
|
|
1097
|
-
listenErrorsSrc.next({
|
|
1098
|
-
msg,
|
|
1099
|
-
stack,
|
|
1100
|
-
data: catchedError.response.data,
|
|
1101
|
-
});
|
|
1102
|
-
}
|
|
1103
|
-
//#endregion
|
|
1104
1126
|
const status = catchedError?.response?.status ?? 0; // ✅ FIX: you used "status" before defining it
|
|
1105
1127
|
const data = catchedError?.response?.data ?? catchedError?.message ?? catchedError;
|
|
1106
1128
|
const responseText = typeof data === 'string' ? data : JSON.stringify(data);
|