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.
Files changed (104) hide show
  1. package/VERIFIED-BUILD-DATA.jsonc +3 -3
  2. package/browser/fesm2022/ng2-rest-browser.mjs +47 -25
  3. package/browser/fesm2022/ng2-rest-browser.mjs.map +1 -1
  4. package/browser/package.json +1 -1
  5. package/browser/types/ng2-rest-browser.d.ts +2 -6
  6. package/browser-prod/fesm2022/ng2-rest-browser-prod.mjs +47 -25
  7. package/browser-prod/fesm2022/ng2-rest-browser-prod.mjs.map +1 -1
  8. package/browser-prod/package.json +1 -1
  9. package/browser-prod/types/ng2-rest-browser-prod.d.ts +2 -6
  10. package/lib/build-info._auto-generated_.d.ts +1 -1
  11. package/lib/build-info._auto-generated_.js +1 -1
  12. package/lib/env/env.angular-node-app.d.ts +1 -0
  13. package/lib/env/env.angular-node-app.js +6 -2
  14. package/lib/env/env.angular-node-app.js.map +1 -1
  15. package/lib/env/env.docs-webapp.d.ts +1 -0
  16. package/lib/env/env.docs-webapp.js +6 -2
  17. package/lib/env/env.docs-webapp.js.map +1 -1
  18. package/lib/env/env.electron-app.d.ts +1 -0
  19. package/lib/env/env.electron-app.js +6 -2
  20. package/lib/env/env.electron-app.js.map +1 -1
  21. package/lib/env/env.mobile-app.d.ts +1 -0
  22. package/lib/env/env.mobile-app.js +6 -2
  23. package/lib/env/env.mobile-app.js.map +1 -1
  24. package/lib/env/env.npm-lib-and-cli-tool.d.ts +1 -0
  25. package/lib/env/env.npm-lib-and-cli-tool.js +6 -2
  26. package/lib/env/env.npm-lib-and-cli-tool.js.map +1 -1
  27. package/lib/env/env.vscode-plugin.d.ts +1 -0
  28. package/lib/env/env.vscode-plugin.js +6 -2
  29. package/lib/env/env.vscode-plugin.js.map +1 -1
  30. package/lib/new-mapping.js +26 -0
  31. package/lib/new-mapping.js.map +1 -1
  32. package/lib/new-mapping.test.d.ts +1 -1
  33. package/lib/ng2-rest.d.ts +2 -6
  34. package/lib/ng2-rest.js +21 -25
  35. package/lib/ng2-rest.js.map +1 -1
  36. package/lib/package.json +1 -1
  37. package/lib-esm/app.electron.js +1 -0
  38. package/lib-esm/app.electron.js.map +1 -1
  39. package/lib-esm/app.hosts.js +1 -0
  40. package/lib-esm/app.hosts.js.map +1 -1
  41. package/lib-esm/app.js +1 -0
  42. package/lib-esm/app.js.map +1 -1
  43. package/lib-esm/app.vscode.js +1 -0
  44. package/lib-esm/app.vscode.js.map +1 -1
  45. package/lib-esm/lib/build-info._auto-generated_.d.ts +1 -1
  46. package/lib-esm/lib/build-info._auto-generated_.js +1 -1
  47. package/lib-esm/lib/env/env.angular-node-app.d.ts +1 -0
  48. package/lib-esm/lib/env/env.angular-node-app.js +3 -0
  49. package/lib-esm/lib/env/env.angular-node-app.js.map +1 -1
  50. package/lib-esm/lib/env/env.docs-webapp.d.ts +1 -0
  51. package/lib-esm/lib/env/env.docs-webapp.js +3 -0
  52. package/lib-esm/lib/env/env.docs-webapp.js.map +1 -1
  53. package/lib-esm/lib/env/env.electron-app.d.ts +1 -0
  54. package/lib-esm/lib/env/env.electron-app.js +3 -0
  55. package/lib-esm/lib/env/env.electron-app.js.map +1 -1
  56. package/lib-esm/lib/env/env.mobile-app.d.ts +1 -0
  57. package/lib-esm/lib/env/env.mobile-app.js +3 -0
  58. package/lib-esm/lib/env/env.mobile-app.js.map +1 -1
  59. package/lib-esm/lib/env/env.npm-lib-and-cli-tool.d.ts +1 -0
  60. package/lib-esm/lib/env/env.npm-lib-and-cli-tool.js +3 -0
  61. package/lib-esm/lib/env/env.npm-lib-and-cli-tool.js.map +1 -1
  62. package/lib-esm/lib/env/env.vscode-plugin.d.ts +1 -0
  63. package/lib-esm/lib/env/env.vscode-plugin.js +3 -0
  64. package/lib-esm/lib/env/env.vscode-plugin.js.map +1 -1
  65. package/lib-esm/lib/new-mapping.js +26 -0
  66. package/lib-esm/lib/new-mapping.js.map +1 -1
  67. package/lib-esm/lib/ng2-rest.d.ts +2 -6
  68. package/lib-esm/lib/ng2-rest.js +21 -25
  69. package/lib-esm/lib/ng2-rest.js.map +1 -1
  70. package/lib-prod/build-info._auto-generated_.d.ts +1 -1
  71. package/lib-prod/build-info._auto-generated_.js +1 -1
  72. package/lib-prod/env/env.angular-node-app.d.ts +1 -0
  73. package/lib-prod/env/env.angular-node-app.js +3 -0
  74. package/lib-prod/env/env.angular-node-app.js.map +1 -1
  75. package/lib-prod/env/env.docs-webapp.d.ts +1 -0
  76. package/lib-prod/env/env.docs-webapp.js +3 -0
  77. package/lib-prod/env/env.docs-webapp.js.map +1 -1
  78. package/lib-prod/env/env.electron-app.d.ts +1 -0
  79. package/lib-prod/env/env.electron-app.js +3 -0
  80. package/lib-prod/env/env.electron-app.js.map +1 -1
  81. package/lib-prod/env/env.mobile-app.d.ts +1 -0
  82. package/lib-prod/env/env.mobile-app.js +3 -0
  83. package/lib-prod/env/env.mobile-app.js.map +1 -1
  84. package/lib-prod/env/env.npm-lib-and-cli-tool.d.ts +1 -0
  85. package/lib-prod/env/env.npm-lib-and-cli-tool.js +3 -0
  86. package/lib-prod/env/env.npm-lib-and-cli-tool.js.map +1 -1
  87. package/lib-prod/env/env.vscode-plugin.d.ts +1 -0
  88. package/lib-prod/env/env.vscode-plugin.js +3 -0
  89. package/lib-prod/env/env.vscode-plugin.js.map +1 -1
  90. package/lib-prod/new-mapping.js +26 -0
  91. package/lib-prod/new-mapping.js.map +1 -1
  92. package/lib-prod/ng2-rest.d.ts +2 -6
  93. package/lib-prod/ng2-rest.js +21 -25
  94. package/lib-prod/ng2-rest.js.map +1 -1
  95. package/lib-prod/package.json +1 -1
  96. package/package.json +1 -1
  97. package/websql/fesm2022/ng2-rest-websql.mjs +47 -25
  98. package/websql/fesm2022/ng2-rest-websql.mjs.map +1 -1
  99. package/websql/package.json +1 -1
  100. package/websql/types/ng2-rest-websql.d.ts +2 -6
  101. package/websql-prod/fesm2022/ng2-rest-websql-prod.mjs +47 -25
  102. package/websql-prod/fesm2022/ng2-rest-websql-prod.mjs.map +1 -1
  103. package/websql-prod/package.json +1 -1
  104. 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<BackendError>;
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.makeRequest(this._promiseAbort.signal);
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.makeRequest(ac.signal)
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 => subscriber.error(err));
1049
+ .catch(err => {
1050
+ subscriber.error(err);
1051
+ });
1016
1052
  return () => ac.abort('rxjs-unsubscribe');
1017
- }).pipe(shareReplay({ bufferSize: 1, refCount: true }));
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);