@lenne.tech/ng-base 13.6.5 → 13.6.6

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 (165) hide show
  1. package/base-components/components/checkbox/checkbox.component.d.ts +1 -1
  2. package/base-prototype/base-prototype.module.d.ts +6 -5
  3. package/base-prototype/pages/forgot-password/forgot-password.component.d.ts +7 -2
  4. package/base-prototype/pages/login/login.component.d.ts +8 -2
  5. package/base-prototype/pages/register/register.component.d.ts +8 -2
  6. package/esm2020/base-components/components/checkbox/checkbox.component.mjs +3 -3
  7. package/esm2020/base-components/components/input/input.component.mjs +3 -3
  8. package/esm2020/base-prototype/base-prototype.module.mjs +5 -4
  9. package/esm2020/base-prototype/pages/forgot-password/forgot-password.component.mjs +30 -9
  10. package/esm2020/base-prototype/pages/login/login.component.mjs +46 -9
  11. package/esm2020/base-prototype/pages/register/register.component.mjs +45 -11
  12. package/esm2020/public-api.mjs +1 -42
  13. package/esm2020/shared/classes/auth.class.mjs +16 -0
  14. package/esm2020/shared/classes/basic-user.class.mjs +51 -0
  15. package/esm2020/shared/classes/graphql-enum.class.mjs +9 -0
  16. package/esm2020/shared/classes/graphql-meta.class.mjs +171 -0
  17. package/esm2020/shared/classes/graphql-type.class.mjs +13 -0
  18. package/esm2020/shared/classes/helper.class.mjs +304 -0
  19. package/esm2020/shared/classes/standard.class.mjs +40 -0
  20. package/esm2020/{src → shared}/enums/comparison-operator.enum.mjs +1 -1
  21. package/esm2020/shared/enums/graphql-request-type.enum.mjs +10 -0
  22. package/esm2020/shared/enums/logical-operator.enum.mjs +10 -0
  23. package/esm2020/shared/enums/sort-order.enum.mjs +6 -0
  24. package/esm2020/shared/functions/ws-client.function.mjs +39 -0
  25. package/esm2020/shared/interfaces/base-module-config.interface.mjs +3 -0
  26. package/esm2020/shared/interfaces/can-component-deactivate.interface.mjs +2 -0
  27. package/esm2020/shared/interfaces/combined-filter-input.interface.mjs +2 -0
  28. package/esm2020/shared/interfaces/field-object.interface.mjs +2 -0
  29. package/esm2020/shared/interfaces/field.interface.mjs +2 -0
  30. package/esm2020/shared/interfaces/filter-input.interface.mjs +2 -0
  31. package/esm2020/shared/interfaces/find-args.interface.mjs +2 -0
  32. package/esm2020/shared/interfaces/graphql-fields-object.interface.mjs +2 -0
  33. package/esm2020/shared/interfaces/graphql-options.interface.mjs +2 -0
  34. package/esm2020/shared/interfaces/graphql-plus-options.interfacen.mjs +2 -0
  35. package/esm2020/shared/interfaces/graphql-type-collection.interface.mjs +2 -0
  36. package/esm2020/shared/interfaces/single-filter-input.interface.mjs +2 -0
  37. package/esm2020/shared/interfaces/sort-input.interface.mjs +2 -0
  38. package/esm2020/shared/interfaces/time-components.interface.mjs +2 -0
  39. package/esm2020/shared/lenne.tech-ng-base-shared.mjs +5 -0
  40. package/esm2020/shared/public-api.mjs +51 -0
  41. package/esm2020/shared/services/auth.service.mjs +71 -0
  42. package/esm2020/shared/services/forms.service.mjs +25 -0
  43. package/esm2020/shared/services/graphql-meta.service.mjs +123 -0
  44. package/esm2020/shared/services/graphql-plus.service.mjs +84 -0
  45. package/esm2020/shared/services/graphql.service.mjs +441 -0
  46. package/esm2020/shared/services/image.service.mjs +102 -0
  47. package/esm2020/shared/services/loader.service.mjs +29 -0
  48. package/esm2020/shared/services/scroll.service.mjs +179 -0
  49. package/esm2020/shared/services/storage.service.mjs +132 -0
  50. package/esm2020/shared/services/user.service.mjs +82 -0
  51. package/esm2020/shared/services/ws.service.mjs +16 -0
  52. package/esm2020/shared/types/graphql-fields.type.mjs +2 -0
  53. package/esm2020/shared/types/storage.type.mjs +2 -0
  54. package/esm2020/shared/validators/match.validator.mjs +19 -0
  55. package/esm2020/src/base.module.mjs +14 -11
  56. package/esm2020/src/directives/match-height.directive.mjs +2 -2
  57. package/esm2020/src/factories/apollo-options.factory.mjs +14 -12
  58. package/esm2020/src/guards/auth.guard.mjs +3 -3
  59. package/esm2020/src/guards/can-deactivate.guard.mjs +1 -1
  60. package/esm2020/src/guards/logout.guard.mjs +2 -2
  61. package/esm2020/src/services/theme.service.mjs +2 -2
  62. package/fesm2015/lenne.tech-ng-base-base-components.mjs +4 -4
  63. package/fesm2015/lenne.tech-ng-base-base-components.mjs.map +1 -1
  64. package/fesm2015/lenne.tech-ng-base-base-prototype.mjs +113 -22
  65. package/fesm2015/lenne.tech-ng-base-base-prototype.mjs.map +1 -1
  66. package/fesm2015/lenne.tech-ng-base-shared.mjs +1878 -0
  67. package/fesm2015/lenne.tech-ng-base-shared.mjs.map +1 -0
  68. package/fesm2015/lenne.tech-ng-base.mjs +57 -1799
  69. package/fesm2015/lenne.tech-ng-base.mjs.map +1 -1
  70. package/fesm2020/lenne.tech-ng-base-base-components.mjs +4 -4
  71. package/fesm2020/lenne.tech-ng-base-base-components.mjs.map +1 -1
  72. package/fesm2020/lenne.tech-ng-base-base-prototype.mjs +111 -22
  73. package/fesm2020/lenne.tech-ng-base-base-prototype.mjs.map +1 -1
  74. package/fesm2020/lenne.tech-ng-base-shared.mjs +1939 -0
  75. package/fesm2020/lenne.tech-ng-base-shared.mjs.map +1 -0
  76. package/fesm2020/lenne.tech-ng-base.mjs +57 -1854
  77. package/fesm2020/lenne.tech-ng-base.mjs.map +1 -1
  78. package/package.json +10 -2
  79. package/public-api.d.ts +0 -36
  80. package/shared/classes/auth.class.d.ts +9 -0
  81. package/{src → shared}/classes/basic-user.class.d.ts +0 -0
  82. package/{src → shared}/classes/graphql-enum.class.d.ts +0 -0
  83. package/{src → shared}/classes/graphql-meta.class.d.ts +0 -0
  84. package/{src → shared}/classes/graphql-type.class.d.ts +0 -0
  85. package/{src → shared}/classes/helper.class.d.ts +0 -0
  86. package/{src → shared}/classes/standard.class.d.ts +0 -0
  87. package/{src → shared}/enums/comparison-operator.enum.d.ts +0 -0
  88. package/{src → shared}/enums/graphql-request-type.enum.d.ts +0 -0
  89. package/{src → shared}/enums/logical-operator.enum.d.ts +0 -0
  90. package/{src → shared}/enums/sort-order.enum.d.ts +0 -0
  91. package/shared/functions/ws-client.function.d.ts +5 -0
  92. package/{src → shared}/interfaces/base-module-config.interface.d.ts +1 -1
  93. package/{src → shared}/interfaces/can-component-deactivate.interface.d.ts +0 -0
  94. package/{src → shared}/interfaces/combined-filter-input.interface.d.ts +0 -0
  95. package/{src → shared}/interfaces/field-object.interface.d.ts +0 -0
  96. package/{src → shared}/interfaces/field.interface.d.ts +0 -0
  97. package/{src → shared}/interfaces/filter-input.interface.d.ts +0 -0
  98. package/{src → shared}/interfaces/find-args.interface.d.ts +0 -0
  99. package/{src → shared}/interfaces/graphql-fields-object.interface.d.ts +0 -0
  100. package/{src → shared}/interfaces/graphql-options.interface.d.ts +0 -0
  101. package/{src → shared}/interfaces/graphql-plus-options.interfacen.d.ts +0 -0
  102. package/{src → shared}/interfaces/graphql-type-collection.interface.d.ts +0 -0
  103. package/{src → shared}/interfaces/single-filter-input.interface.d.ts +0 -0
  104. package/{src → shared}/interfaces/sort-input.interface.d.ts +0 -0
  105. package/shared/interfaces/time-components.interface.d.ts +6 -0
  106. package/shared/lenne.tech-ng-base-shared.d.ts +5 -0
  107. package/shared/package.json +10 -0
  108. package/shared/public-api.d.ts +43 -0
  109. package/{src → shared}/services/auth.service.d.ts +0 -0
  110. package/{src → shared}/services/forms.service.d.ts +0 -1
  111. package/{src → shared}/services/graphql-meta.service.d.ts +0 -0
  112. package/{src → shared}/services/graphql-plus.service.d.ts +0 -0
  113. package/{src → shared}/services/graphql.service.d.ts +0 -0
  114. package/{src → shared}/services/image.service.d.ts +0 -0
  115. package/{src → shared}/services/loader.service.d.ts +0 -0
  116. package/{src → shared}/services/scroll.service.d.ts +0 -0
  117. package/{src → shared}/services/storage.service.d.ts +0 -0
  118. package/shared/services/user.service.d.ts +42 -0
  119. package/{src → shared}/services/ws.service.d.ts +2 -2
  120. package/{src → shared}/types/graphql-fields.type.d.ts +0 -0
  121. package/{src → shared}/types/storage.type.d.ts +0 -0
  122. package/shared/validators/match.validator.d.ts +4 -0
  123. package/src/base.module.d.ts +4 -2
  124. package/src/directives/match-height.directive.d.ts +1 -1
  125. package/src/factories/apollo-options.factory.d.ts +1 -3
  126. package/src/guards/auth.guard.d.ts +1 -2
  127. package/src/guards/can-deactivate.guard.d.ts +1 -1
  128. package/src/guards/logout.guard.d.ts +1 -1
  129. package/src/services/theme.service.d.ts +1 -1
  130. package/esm2020/src/classes/basic-user.class.mjs +0 -51
  131. package/esm2020/src/classes/graphql-enum.class.mjs +0 -9
  132. package/esm2020/src/classes/graphql-meta.class.mjs +0 -171
  133. package/esm2020/src/classes/graphql-type.class.mjs +0 -13
  134. package/esm2020/src/classes/helper.class.mjs +0 -304
  135. package/esm2020/src/classes/standard.class.mjs +0 -40
  136. package/esm2020/src/enums/graphql-request-type.enum.mjs +0 -10
  137. package/esm2020/src/enums/logical-operator.enum.mjs +0 -10
  138. package/esm2020/src/enums/sort-order.enum.mjs +0 -6
  139. package/esm2020/src/interfaces/base-module-config.interface.mjs +0 -3
  140. package/esm2020/src/interfaces/can-component-deactivate.interface.mjs +0 -2
  141. package/esm2020/src/interfaces/combined-filter-input.interface.mjs +0 -2
  142. package/esm2020/src/interfaces/field-object.interface.mjs +0 -2
  143. package/esm2020/src/interfaces/field.interface.mjs +0 -2
  144. package/esm2020/src/interfaces/filter-input.interface.mjs +0 -2
  145. package/esm2020/src/interfaces/find-args.interface.mjs +0 -2
  146. package/esm2020/src/interfaces/graphql-fields-object.interface.mjs +0 -2
  147. package/esm2020/src/interfaces/graphql-options.interface.mjs +0 -2
  148. package/esm2020/src/interfaces/graphql-plus-options.interfacen.mjs +0 -2
  149. package/esm2020/src/interfaces/graphql-type-collection.interface.mjs +0 -2
  150. package/esm2020/src/interfaces/single-filter-input.interface.mjs +0 -2
  151. package/esm2020/src/interfaces/sort-input.interface.mjs +0 -2
  152. package/esm2020/src/services/auth.service.mjs +0 -71
  153. package/esm2020/src/services/forms.service.mjs +0 -26
  154. package/esm2020/src/services/graphql-meta.service.mjs +0 -123
  155. package/esm2020/src/services/graphql-plus.service.mjs +0 -84
  156. package/esm2020/src/services/graphql.service.mjs +0 -441
  157. package/esm2020/src/services/image.service.mjs +0 -102
  158. package/esm2020/src/services/loader.service.mjs +0 -29
  159. package/esm2020/src/services/scroll.service.mjs +0 -179
  160. package/esm2020/src/services/storage.service.mjs +0 -132
  161. package/esm2020/src/services/ws.service.mjs +0 -17
  162. package/esm2020/src/types/graphql-fields.type.mjs +0 -2
  163. package/esm2020/src/types/storage.type.mjs +0 -2
  164. package/esm2020/src/validators/must-match.validator.mjs +0 -22
  165. package/src/validators/must-match.validator.d.ts +0 -6
@@ -0,0 +1,71 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import { BASE_MODULE_CONFIG } from '../interfaces/base-module-config.interface';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "./storage.service";
6
+ import * as i2 from "./ws.service";
7
+ /**
8
+ * Authentication service
9
+ */
10
+ export class AuthService {
11
+ /**
12
+ * Constructor
13
+ */
14
+ constructor(moduleConfig, storageService, wsService) {
15
+ this.moduleConfig = moduleConfig;
16
+ this.storageService = storageService;
17
+ this.wsService = wsService;
18
+ // Subjects
19
+ this._currentUser = new BehaviorSubject(null);
20
+ this._token = new BehaviorSubject(null);
21
+ this.token = this.storageService.load('token');
22
+ this.currentUser = this.storageService.load('currentUser');
23
+ }
24
+ /**
25
+ * Logout
26
+ */
27
+ logout() {
28
+ this.storageService.remove(['token', 'currentUser']);
29
+ this.currentUser = null;
30
+ this.token = null;
31
+ }
32
+ // #################################################################
33
+ // Current User
34
+ // #################################################################
35
+ get currentUser() {
36
+ return this._currentUser.value;
37
+ }
38
+ set currentUser(user) {
39
+ this._currentUser.next(user);
40
+ this.storageService.save('currentUser', user);
41
+ }
42
+ get currentUserObservable() {
43
+ return this._currentUser.asObservable();
44
+ }
45
+ // #################################################################
46
+ // Token
47
+ // #################################################################
48
+ get token() {
49
+ return this._token.value;
50
+ }
51
+ set token(token) {
52
+ this._token.next(token);
53
+ this.storageService.save('token', token);
54
+ this.wsService.reconnect();
55
+ }
56
+ get tokenObservable() {
57
+ return this._token.asObservable();
58
+ }
59
+ }
60
+ AuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: AuthService, deps: [{ token: BASE_MODULE_CONFIG }, { token: i1.StorageService }, { token: i2.WsService }], target: i0.ɵɵFactoryTarget.Injectable });
61
+ AuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: AuthService, providedIn: 'root' });
62
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: AuthService, decorators: [{
63
+ type: Injectable,
64
+ args: [{
65
+ providedIn: 'root',
66
+ }]
67
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
68
+ type: Inject,
69
+ args: [BASE_MODULE_CONFIG]
70
+ }] }, { type: i1.StorageService }, { type: i2.WsService }]; } });
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9zaGFyZWQvc2VydmljZXMvYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFvQixNQUFNLDRDQUE0QyxDQUFDOzs7O0FBS2xHOztHQUVHO0FBSUgsTUFBTSxPQUFPLFdBQVc7SUFLdEI7O09BRUc7SUFDSCxZQUNzQyxZQUE4QixFQUMxRCxjQUE4QixFQUM5QixTQUFvQjtRQUZRLGlCQUFZLEdBQVosWUFBWSxDQUFrQjtRQUMxRCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQVY5QixXQUFXO1FBQ0gsaUJBQVksR0FBK0IsSUFBSSxlQUFlLENBQVksSUFBSSxDQUFDLENBQUM7UUFDaEYsV0FBTSxHQUE0QixJQUFJLGVBQWUsQ0FBUyxJQUFJLENBQUMsQ0FBQztRQVUxRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBVyxDQUFDO1FBQ3pELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFjLENBQUM7SUFDMUUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTTtRQUNYLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDcEIsQ0FBQztJQUVELG9FQUFvRTtJQUNwRSxlQUFlO0lBQ2Ysb0VBQW9FO0lBRXBFLElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7SUFDakMsQ0FBQztJQUVELElBQUksV0FBVyxDQUFDLElBQWU7UUFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUFJLHFCQUFxQjtRQUN2QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELG9FQUFvRTtJQUNwRSxRQUFRO0lBQ1Isb0VBQW9FO0lBRXBFLElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLEtBQWE7UUFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDcEMsQ0FBQzs7d0dBM0RVLFdBQVcsa0JBU1osa0JBQWtCOzRHQVRqQixXQUFXLGNBRlYsTUFBTTsyRkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBVUksTUFBTTsyQkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQkFTRV9NT0RVTEVfQ09ORklHLCBCYXNlTW9kdWxlQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9iYXNlLW1vZHVsZS1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IEJhc2ljVXNlciB9IGZyb20gJy4uL2NsYXNzZXMvYmFzaWMtdXNlci5jbGFzcyc7XG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFdzU2VydmljZSB9IGZyb20gJy4vd3Muc2VydmljZSc7XG5cbi8qKlxuICogQXV0aGVudGljYXRpb24gc2VydmljZVxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQXV0aFNlcnZpY2Uge1xuICAvLyBTdWJqZWN0c1xuICBwcml2YXRlIF9jdXJyZW50VXNlcjogQmVoYXZpb3JTdWJqZWN0PEJhc2ljVXNlcj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEJhc2ljVXNlcj4obnVsbCk7XG4gIHByaXZhdGUgX3Rva2VuOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihudWxsKTtcblxuICAvKipcbiAgICogQ29uc3RydWN0b3JcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoQkFTRV9NT0RVTEVfQ09ORklHKSBwcml2YXRlIG1vZHVsZUNvbmZpZzogQmFzZU1vZHVsZUNvbmZpZyxcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZSxcbiAgICBwcml2YXRlIHdzU2VydmljZTogV3NTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMudG9rZW4gPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmxvYWQoJ3Rva2VuJykgYXMgc3RyaW5nO1xuICAgIHRoaXMuY3VycmVudFVzZXIgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmxvYWQoJ2N1cnJlbnRVc2VyJykgYXMgQmFzaWNVc2VyO1xuICB9XG5cbiAgLyoqXG4gICAqIExvZ291dFxuICAgKi9cbiAgcHVibGljIGxvZ291dCgpIHtcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnJlbW92ZShbJ3Rva2VuJywgJ2N1cnJlbnRVc2VyJ10pO1xuICAgIHRoaXMuY3VycmVudFVzZXIgPSBudWxsO1xuICAgIHRoaXMudG9rZW4gPSBudWxsO1xuICB9XG5cbiAgLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiAgLy8gQ3VycmVudCBVc2VyXG4gIC8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG5cbiAgZ2V0IGN1cnJlbnRVc2VyKCk6IEJhc2ljVXNlciB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRVc2VyLnZhbHVlO1xuICB9XG5cbiAgc2V0IGN1cnJlbnRVc2VyKHVzZXI6IEJhc2ljVXNlcikge1xuICAgIHRoaXMuX2N1cnJlbnRVc2VyLm5leHQodXNlcik7XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zYXZlKCdjdXJyZW50VXNlcicsIHVzZXIpO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRVc2VyT2JzZXJ2YWJsZSgpOiBPYnNlcnZhYmxlPEJhc2ljVXNlcj4ge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50VXNlci5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4gIC8vIFRva2VuXG4gIC8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG5cbiAgZ2V0IHRva2VuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuLnZhbHVlO1xuICB9XG5cbiAgc2V0IHRva2VuKHRva2VuOiBzdHJpbmcpIHtcbiAgICB0aGlzLl90b2tlbi5uZXh0KHRva2VuKTtcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNhdmUoJ3Rva2VuJywgdG9rZW4pO1xuICAgIHRoaXMud3NTZXJ2aWNlLnJlY29ubmVjdCgpO1xuICB9XG5cbiAgZ2V0IHRva2VuT2JzZXJ2YWJsZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90b2tlbi5hc09ic2VydmFibGUoKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,25 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { FormGroup, FormControl } from '@angular/forms';
3
+ import * as i0 from "@angular/core";
4
+ export class FormsService {
5
+ validateAllFormFields(formGroup) {
6
+ Object.keys(formGroup.controls).forEach((field) => {
7
+ const control = formGroup.get(field);
8
+ if (control instanceof FormControl) {
9
+ control.markAsTouched({ onlySelf: true });
10
+ }
11
+ else if (control instanceof FormGroup) {
12
+ this.validateAllFormFields(control);
13
+ }
14
+ });
15
+ }
16
+ }
17
+ FormsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: FormsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
18
+ FormsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: FormsService, providedIn: 'root' });
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: FormsService, decorators: [{
20
+ type: Injectable,
21
+ args: [{
22
+ providedIn: 'root',
23
+ }]
24
+ }] });
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWJhc2Uvc2hhcmVkL3NlcnZpY2VzL2Zvcm1zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUt4RCxNQUFNLE9BQU8sWUFBWTtJQUNoQixxQkFBcUIsQ0FBQyxTQUFvQjtRQUMvQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNoRCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JDLElBQUksT0FBTyxZQUFZLFdBQVcsRUFBRTtnQkFDbEMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2FBQzNDO2lCQUFNLElBQUksT0FBTyxZQUFZLFNBQVMsRUFBRTtnQkFDdkMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3JDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzt5R0FWVSxZQUFZOzZHQUFaLFlBQVksY0FGWCxNQUFNOzJGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1zU2VydmljZSB7XG4gIHB1YmxpYyB2YWxpZGF0ZUFsbEZvcm1GaWVsZHMoZm9ybUdyb3VwOiBGb3JtR3JvdXApIHtcbiAgICBPYmplY3Qua2V5cyhmb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwLmdldChmaWVsZCk7XG4gICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Db250cm9sKSB7XG4gICAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVBbGxGb3JtRmllbGRzKGNvbnRyb2wpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,123 @@
1
+ import { gql } from 'apollo-angular';
2
+ import { Injectable } from '@angular/core';
3
+ import { of } from 'rxjs';
4
+ import { buildClientSchema, getIntrospectionQuery } from 'graphql';
5
+ import { map } from 'rxjs/operators';
6
+ import { GraphQLMeta } from '../classes/graphql-meta.class';
7
+ import { Helper } from '../classes/helper.class';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "apollo-angular";
10
+ /**
11
+ * GraphQL meta service
12
+ *
13
+ * For collecting meta information of the GraphQL API
14
+ */
15
+ export class GraphQLMetaService {
16
+ /**
17
+ * Include services
18
+ */
19
+ constructor(apollo) {
20
+ this.apollo = apollo;
21
+ }
22
+ /**
23
+ * Getter of introspectionQuery
24
+ */
25
+ get introspectionQuery() {
26
+ return JSON.parse(JSON.stringify(this._introspectionQuery));
27
+ }
28
+ /**
29
+ * Get schema for API
30
+ * See https://www.apollographql.com/blog/three-ways-to-represent-your-graphql-schema-a41f4175100d
31
+ */
32
+ getSchema(options = {}) {
33
+ // Get configurations
34
+ const config = {
35
+ cache: true,
36
+ freeze: true,
37
+ ...options,
38
+ };
39
+ // Use caching
40
+ if (config.cache) {
41
+ if (config.freeze && this._frozenSchema) {
42
+ return of(this._frozenSchema);
43
+ }
44
+ if (this._introspectionQuery) {
45
+ return of(buildClientSchema(this.introspectionQuery));
46
+ }
47
+ if (config.freeze && this._frozenSchemaObservable) {
48
+ return this._frozenSchemaObservable;
49
+ }
50
+ else if (!config.freeze && this._schemaObservable) {
51
+ return this._schemaObservable;
52
+ }
53
+ }
54
+ // Request schema from server
55
+ const observable = this.apollo
56
+ .query({
57
+ query: gql(getIntrospectionQuery({ descriptions: false })),
58
+ })
59
+ .pipe(map((schema) => {
60
+ // Cache introspectionQuery
61
+ this._introspectionQuery = schema.data;
62
+ // Convert schema to GraphQLSchema
63
+ this._frozenSchema = Helper.deepFreeze(buildClientSchema(this.introspectionQuery));
64
+ // Return GraphQLSchema
65
+ if (config.freeze) {
66
+ return this._frozenSchema;
67
+ }
68
+ return buildClientSchema(schema.data);
69
+ }));
70
+ // Set observables
71
+ if (config.freeze) {
72
+ this._frozenSchemaObservable = observable;
73
+ }
74
+ else {
75
+ this._schemaObservable = observable;
76
+ }
77
+ // Return result
78
+ return observable;
79
+ }
80
+ /**
81
+ * Get meta for API
82
+ * See https://www.apollographql.com/blog/three-ways-to-represent-your-graphql-schema-a41f4175100d
83
+ */
84
+ getMeta(options = {}) {
85
+ // Get configurations
86
+ const config = {
87
+ cache: true,
88
+ log: false,
89
+ ...options,
90
+ };
91
+ // Use caching
92
+ if (config.cache) {
93
+ if (this._meta) {
94
+ return of(this._meta);
95
+ }
96
+ else if (this._metaObservable) {
97
+ return this._metaObservable;
98
+ }
99
+ }
100
+ // Request schema from server
101
+ const observable = this.getSchema(options).pipe(map((schema) => {
102
+ // Log
103
+ if (config.log) {
104
+ console.log({ schema });
105
+ }
106
+ this._meta = new GraphQLMeta(schema);
107
+ return this._meta;
108
+ }));
109
+ // Set observables
110
+ this._metaObservable = observable;
111
+ // Return result
112
+ return observable;
113
+ }
114
+ }
115
+ GraphQLMetaService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: GraphQLMetaService, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable });
116
+ GraphQLMetaService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: GraphQLMetaService, providedIn: 'root' });
117
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: GraphQLMetaService, decorators: [{
118
+ type: Injectable,
119
+ args: [{
120
+ providedIn: 'root',
121
+ }]
122
+ }], ctorParameters: function () { return [{ type: i1.Apollo }]; } });
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC1tZXRhLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL3NoYXJlZC9zZXJ2aWNlcy9ncmFwaHFsLW1ldGEuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBcUMsTUFBTSxTQUFTLENBQUM7QUFDdEcsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7OztBQUVqRDs7OztHQUlHO0FBSUgsTUFBTSxPQUFPLGtCQUFrQjtJQVc3Qjs7T0FFRztJQUNILFlBQXNCLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQUcsQ0FBQztJQUV4Qzs7T0FFRztJQUNILElBQUksa0JBQWtCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFNBQVMsQ0FBQyxVQUFpRCxFQUFFO1FBQ2xFLHFCQUFxQjtRQUNyQixNQUFNLE1BQU0sR0FBRztZQUNiLEtBQUssRUFBRSxJQUFJO1lBQ1gsTUFBTSxFQUFFLElBQUk7WUFDWixHQUFHLE9BQU87U0FDWCxDQUFDO1FBRUYsY0FBYztRQUNkLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRTtZQUNoQixJQUFJLE1BQU0sQ0FB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QUFVLENBQUM7SUFDcEIsQ0FBQzs7K0dBekhVLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07MkZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwb2xsbywgZ3FsIH0gZnJvbSAnYXBvbGxvLWFuZ3VsYXInO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGJ1aWxkQ2xpZW50U2NoZW1hLCBnZXRJbnRyb3NwZWN0aW9uUXVlcnksIEdyYXBoUUxTY2hlbWEsIEludHJvc3BlY3Rpb25RdWVyeSB9IGZyb20gJ2dyYXBocWwnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgR3JhcGhRTE1ldGEgfSBmcm9tICcuLi9jbGFzc2VzL2dyYXBocWwtbWV0YS5jbGFzcyc7XG5pbXBvcnQgeyBIZWxwZXIgfSBmcm9tICcuLi9jbGFzc2VzL2hlbHBlci5jbGFzcyc7XG5cbi8qKlxuICogR3JhcGhRTCBtZXRhIHNlcnZpY2VcbiAqXG4gKiBGb3IgY29sbGVjdGluZyBtZXRhIGluZm9ybWF0aW9uIG9mIHRoZSBHcmFwaFFMIEFQSVxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgR3JhcGhRTE1ldGFTZXJ2aWNlIHtcbiAgLy8gQ2FjaGVzXG4gIHByb3RlY3RlZCBfZnJvemVuU2NoZW1hOiBHcmFwaFFMU2NoZW1hO1xuICBwcm90ZWN0ZWQgX2Zyb3plblNjaGVtYU9ic2VydmFibGU6IE9ic2VydmFibGU8R3JhcGhRTFNjaGVtYT47XG4gIHByb3RlY3RlZCBfbWV0YTogR3JhcGhRTE1ldGE7XG4gIHByb3RlY3RlZCBfbWV0YU9ic2VydmFibGU6IE9ic2VydmFibGU8R3JhcGhRTE1ldGE+O1xuICBwcm90ZWN0ZWQgX3NjaGVtYU9ic2VydmFibGU6IE9ic2VydmFibGU8R3JhcGhRTFNjaGVtYT47XG5cbiAgLy8gUHJpdmF0ZSBjYWNoZXNcbiAgcHJpdmF0ZSBfaW50cm9zcGVjdGlvblF1ZXJ5OiBJbnRyb3NwZWN0aW9uUXVlcnk7XG5cbiAgLyoqXG4gICAqIEluY2x1ZGUgc2VydmljZXNcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBhcG9sbG86IEFwb2xsbykge31cblxuICAvKipcbiAgICogR2V0dGVyIG9mIGludHJvc3BlY3Rpb25RdWVyeVxuICAgKi9cbiAgZ2V0IGludHJvc3BlY3Rpb25RdWVyeSgpOiBJbnRyb3NwZWN0aW9uUXVlcnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuX2ludHJvc3BlY3Rpb25RdWVyeSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzY2hlbWEgZm9yIEFQSVxuICAgKiBTZWUgaHR0cHM6Ly93d3cuYXBvbGxvZ3JhcGhxbC5jb20vYmxvZy90aHJlZS13YXlzLXRvLXJlcHJlc2VudC15b3VyLWdyYXBocWwtc2NoZW1hLWE0MWY0MTc1MTAwZFxuICAgKi9cbiAgcHVibGljIGdldFNjaGVtYShvcHRpb25zOiB7IGNhY2hlPzogYm9vbGVhbjsgZnJlZXplPzogYm9vbGVhbiB9ID0ge30pOiBPYnNlcnZhYmxlPEdyYXBoUUxTY2hlbWE+IHtcbiAgICAvLyBHZXQgY29uZmlndXJhdGlvbnNcbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICBjYWNoZTogdHJ1ZSxcbiAgICAgIGZyZWV6ZTogdHJ1ZSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIC8vIFVzZSBjYWNoaW5nXG4gICAgaWYgKGNvbmZpZy5jYWNoZSkge1xuICAgICAgaWYgKGNvbmZpZy5mcmVlemUgJiYgdGhpcy5fZnJvemVuU2NoZW1hKSB7XG4gICAgICAgIHJldHVybiBvZih0aGlzLl9mcm96ZW5TY2hlbWEpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2ludHJvc3BlY3Rpb25RdWVyeSkge1xuICAgICAgICByZXR1cm4gb2YoYnVpbGRDbGllbnRTY2hlbWEodGhpcy5pbnRyb3NwZWN0aW9uUXVlcnkpKTtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWcuZnJlZXplICYmIHRoaXMuX2Zyb3plblNjaGVtYU9ic2VydmFibGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Zyb3plblNjaGVtYU9ic2VydmFibGU7XG4gICAgICB9IGVsc2UgaWYgKCFjb25maWcuZnJlZXplICYmIHRoaXMuX3NjaGVtYU9ic2VydmFibGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NjaGVtYU9ic2VydmFibGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVxdWVzdCBzY2hlbWEgZnJvbSBzZXJ2ZXJcbiAgICBjb25zdCBvYnNlcnZhYmxlID0gdGhpcy5hcG9sbG9cbiAgICAgIC5xdWVyeSh7XG4gICAgICAgIHF1ZXJ5OiBncWwoZ2V0SW50cm9zcGVjdGlvblF1ZXJ5KHsgZGVzY3JpcHRpb25zOiBmYWxzZSB9KSksXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoc2NoZW1hOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyBDYWNoZSBpbnRyb3NwZWN0aW9uUXVlcnlcbiAgICAgICAgICB0aGlzLl9pbnRyb3NwZWN0aW9uUXVlcnkgPSBzY2hlbWEuZGF0YTtcblxuICAgICAgICAgIC8vIENvbnZlcnQgc2NoZW1hIHRvIEdyYXBoUUxTY2hlbWFcbiAgICAgICAgICB0aGlzLl9mcm96ZW5TY2hlbWEgPSBIZWxwZXIuZGVlcEZyZWV6ZShidWlsZENsaWVudFNjaGVtYSh0aGlzLmludHJvc3BlY3Rpb25RdWVyeSkpO1xuXG4gICAgICAgICAgLy8gUmV0dXJuIEdyYXBoUUxTY2hlbWFcbiAgICAgICAgICBpZiAoY29uZmlnLmZyZWV6ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Zyb3plblNjaGVtYTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJ1aWxkQ2xpZW50U2NoZW1hKHNjaGVtYS5kYXRhKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAvLyBTZXQgb2JzZXJ2YWJsZXNcbiAgICBpZiAoY29uZmlnLmZyZWV6ZSkge1xuICAgICAgdGhpcy5fZnJvemVuU2NoZW1hT2JzZXJ2YWJsZSA9IG9ic2VydmFibGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NjaGVtYU9ic2VydmFibGUgPSBvYnNlcnZhYmxlO1xuICAgIH1cblxuICAgIC8vIFJldHVybiByZXN1bHRcbiAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbWV0YSBmb3IgQVBJXG4gICAqIFNlZSBodHRwczovL3d3dy5hcG9sbG9ncmFwaHFsLmNvbS9ibG9nL3RocmVlLXdheXMtdG8tcmVwcmVzZW50LXlvdXItZ3JhcGhxbC1zY2hlbWEtYTQxZjQxNzUxMDBkXG4gICAqL1xuICBwdWJsaWMgZ2V0TWV0YShvcHRpb25zOiB7IGNhY2hlPzogYm9vbGVhbjsgbG9nPzogYm9vbGVhbiB9ID0ge30pOiBPYnNlcnZhYmxlPEdyYXBoUUxNZXRhPiB7XG4gICAgLy8gR2V0IGNvbmZpZ3VyYXRpb25zXG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgY2FjaGU6IHRydWUsXG4gICAgICBsb2c6IGZhbHNlLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9O1xuXG4gICAgLy8gVXNlIGNhY2hpbmdcbiAgICBpZiAoY29uZmlnLmNhY2hlKSB7XG4gICAgICBpZiAodGhpcy5fbWV0YSkge1xuICAgICAgICByZXR1cm4gb2YodGhpcy5fbWV0YSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX21ldGFPYnNlcnZhYmxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhT2JzZXJ2YWJsZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXF1ZXN0IHNjaGVtYSBmcm9tIHNlcnZlclxuICAgIGNvbnN0IG9ic2VydmFibGUgPSB0aGlzLmdldFNjaGVtYShvcHRpb25zKS5waXBlKFxuICAgICAgbWFwKChzY2hlbWE6IGFueSkgPT4ge1xuICAgICAgICAvLyBMb2dcbiAgICAgICAgaWYgKGNvbmZpZy5sb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyh7IHNjaGVtYSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21ldGEgPSBuZXcgR3JhcGhRTE1ldGEoc2NoZW1hKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGE7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBTZXQgb2JzZXJ2YWJsZXNcbiAgICB0aGlzLl9tZXRhT2JzZXJ2YWJsZSA9IG9ic2VydmFibGU7XG5cbiAgICAvLyBSZXR1cm4gcmVzdWx0XG4gICAgcmV0dXJuIG9ic2VydmFibGU7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,84 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Observable } from 'rxjs';
3
+ import { GraphQLService } from './graphql.service';
4
+ import { GraphQLRequestType } from '../enums/graphql-request-type.enum';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "apollo-angular";
7
+ import * as i2 from "./graphql-meta.service";
8
+ import * as i3 from "./loader.service";
9
+ /**
10
+ * GraphQL plus service, for extra error handling and loading indication
11
+ */
12
+ export class GraphQLPlusService extends GraphQLService {
13
+ /**
14
+ * Include services
15
+ */
16
+ constructor(apollo, graphqlMetaService, loaderService) {
17
+ super(apollo, graphqlMetaService);
18
+ this.apollo = apollo;
19
+ this.graphqlMetaService = graphqlMetaService;
20
+ this.loaderService = loaderService;
21
+ }
22
+ graphQl(graphql, options = {}) {
23
+ this.handleLoader('start', options);
24
+ return new Observable((subscriber) => {
25
+ super.graphQl(graphql, options).subscribe((response) => {
26
+ if (response && response.errors) {
27
+ this.handleError(response.errors, options.excludedErrors);
28
+ subscriber.error(response);
29
+ this.handleLoader('stop', options);
30
+ subscriber.complete();
31
+ }
32
+ subscriber.next(response);
33
+ this.handleLoader('stop', options);
34
+ if (options.type !== GraphQLRequestType.SUBSCRIPTION) {
35
+ subscriber.complete();
36
+ }
37
+ }, (error) => {
38
+ if (!options.ignoreErrors) {
39
+ this.handleError(error, options.excludedErrors);
40
+ }
41
+ subscriber.error(error);
42
+ this.handleLoader('stop', options);
43
+ subscriber.complete();
44
+ });
45
+ });
46
+ }
47
+ handleLoader(state, options) {
48
+ if (options.loading) {
49
+ if (state === 'start') {
50
+ this.loaderService.start();
51
+ }
52
+ else if (state === 'stop') {
53
+ this.loaderService.stop();
54
+ }
55
+ }
56
+ }
57
+ handleError(error, excludedErrors = null) {
58
+ if (excludedErrors) {
59
+ if (Array.isArray(excludedErrors)) {
60
+ excludedErrors.forEach((excludedError) => {
61
+ if (error.message.includes(excludedError.toLowerCase())) {
62
+ return;
63
+ }
64
+ });
65
+ }
66
+ else if (error.message.toLowerCase().includes(excludedErrors?.toLowerCase())) {
67
+ return;
68
+ }
69
+ }
70
+ this.displayError(error);
71
+ }
72
+ displayError(error) {
73
+ console.error(error);
74
+ }
75
+ }
76
+ GraphQLPlusService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: GraphQLPlusService, deps: [{ token: i1.Apollo }, { token: i2.GraphQLMetaService }, { token: i3.LoaderService }], target: i0.ɵɵFactoryTarget.Injectable });
77
+ GraphQLPlusService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: GraphQLPlusService, providedIn: 'root' });
78
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: GraphQLPlusService, decorators: [{
79
+ type: Injectable,
80
+ args: [{
81
+ providedIn: 'root',
82
+ }]
83
+ }], ctorParameters: function () { return [{ type: i1.Apollo }, { type: i2.GraphQLMetaService }, { type: i3.LoaderService }]; } });
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC1wbHVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL3NoYXJlZC9zZXJ2aWNlcy9ncmFwaHFsLXBsdXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBSW5ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7OztBQUV4RTs7R0FFRztBQUlILE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxjQUFjO0lBQ3BEOztPQUVHO0lBQ0gsWUFDWSxNQUFjLEVBQ2Qsa0JBQXNDLEVBQ3RDLGFBQTRCO1FBRXRDLEtBQUssQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUp4QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtJQUd4QyxDQUFDO0lBRU0sT0FBTyxDQUFDLE9BQWUsRUFBRSxVQUErQixFQUFFO1FBQy9ELElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXBDLE9BQU8sSUFBSSxVQUFVLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUNuQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQ3ZDLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ1gsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRTtvQkFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFDMUQsVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQ25DLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztpQkFDdkI7Z0JBRUQsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ25DLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUU7b0JBQ3BELFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztpQkFDdkI7WUFDSCxDQUFDLEVBQ0QsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDUixJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtvQkFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2lCQUNqRDtnQkFDRCxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDbkMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hCLENBQUMsQ0FDRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQXVCLEVBQUUsT0FBNEI7UUFDaEUsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO1lBQ25CLElBQUksS0FBSyxLQUFLLE9BQU8sRUFBRTtnQkFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUM1QjtpQkFBTSxJQUFJLEtBQUssS0FBSyxNQUFNLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDM0I7U0FDRjtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsS0FBWSxFQUFFLGlCQUFzQixJQUFJO1FBQ2xELElBQUksY0FBYyxFQUFFO1lBQ2xCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRTtnQkFDakMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFO29CQUN2QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFO3dCQUN2RCxPQUFPO3FCQUNSO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7aUJBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRTtnQkFDOUUsT0FBTzthQUNSO1NBQ0Y7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBVTtRQUNyQixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7OytHQXZFVSxrQkFBa0I7bUhBQWxCLGtCQUFrQixjQUZqQixNQUFNOzJGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcG9sbG8gfSBmcm9tICdhcG9sbG8tYW5ndWxhcic7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBHcmFwaFFMU2VydmljZSB9IGZyb20gJy4vZ3JhcGhxbC5zZXJ2aWNlJztcbmltcG9ydCB7IEdyYXBoUUxNZXRhU2VydmljZSB9IGZyb20gJy4vZ3JhcGhxbC1tZXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgSUdyYXBoUUxQbHVzT3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMvZ3JhcGhxbC1wbHVzLW9wdGlvbnMuaW50ZXJmYWNlbic7XG5pbXBvcnQgeyBMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnLi9sb2FkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBHcmFwaFFMUmVxdWVzdFR5cGUgfSBmcm9tICcuLi9lbnVtcy9ncmFwaHFsLXJlcXVlc3QtdHlwZS5lbnVtJztcblxuLyoqXG4gKiBHcmFwaFFMIHBsdXMgc2VydmljZSwgZm9yIGV4dHJhIGVycm9yIGhhbmRsaW5nIGFuZCBsb2FkaW5nIGluZGljYXRpb25cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEdyYXBoUUxQbHVzU2VydmljZSBleHRlbmRzIEdyYXBoUUxTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEluY2x1ZGUgc2VydmljZXNcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBhcG9sbG86IEFwb2xsbyxcbiAgICBwcm90ZWN0ZWQgZ3JhcGhxbE1ldGFTZXJ2aWNlOiBHcmFwaFFMTWV0YVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGxvYWRlclNlcnZpY2U6IExvYWRlclNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoYXBvbGxvLCBncmFwaHFsTWV0YVNlcnZpY2UpO1xuICB9XG5cbiAgcHVibGljIGdyYXBoUWwoZ3JhcGhxbDogc3RyaW5nLCBvcHRpb25zOiBJR3JhcGhRTFBsdXNPcHRpb25zID0ge30pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHRoaXMuaGFuZGxlTG9hZGVyKCdzdGFydCcsIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICBzdXBlci5ncmFwaFFsKGdyYXBocWwsIG9wdGlvbnMpLnN1YnNjcmliZShcbiAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmVycm9ycykge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihyZXNwb25zZS5lcnJvcnMsIG9wdGlvbnMuZXhjbHVkZWRFcnJvcnMpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihyZXNwb25zZSk7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUxvYWRlcignc3RvcCcsIG9wdGlvbnMpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN1YnNjcmliZXIubmV4dChyZXNwb25zZSk7XG4gICAgICAgICAgdGhpcy5oYW5kbGVMb2FkZXIoJ3N0b3AnLCBvcHRpb25zKTtcbiAgICAgICAgICBpZiAob3B0aW9ucy50eXBlICE9PSBHcmFwaFFMUmVxdWVzdFR5cGUuU1VCU0NSSVBUSU9OKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuaWdub3JlRXJyb3JzKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yLCBvcHRpb25zLmV4Y2x1ZGVkRXJyb3JzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnJvcik7XG4gICAgICAgICAgdGhpcy5oYW5kbGVMb2FkZXIoJ3N0b3AnLCBvcHRpb25zKTtcbiAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVMb2FkZXIoc3RhdGU6ICdzdGFydCcgfCAnc3RvcCcsIG9wdGlvbnM6IElHcmFwaFFMUGx1c09wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAob3B0aW9ucy5sb2FkaW5nKSB7XG4gICAgICBpZiAoc3RhdGUgPT09ICdzdGFydCcpIHtcbiAgICAgICAgdGhpcy5sb2FkZXJTZXJ2aWNlLnN0YXJ0KCk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSAnc3RvcCcpIHtcbiAgICAgICAgdGhpcy5sb2FkZXJTZXJ2aWNlLnN0b3AoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGVFcnJvcihlcnJvcjogRXJyb3IsIGV4Y2x1ZGVkRXJyb3JzOiBhbnkgPSBudWxsKTogdm9pZCB7XG4gICAgaWYgKGV4Y2x1ZGVkRXJyb3JzKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShleGNsdWRlZEVycm9ycykpIHtcbiAgICAgICAgZXhjbHVkZWRFcnJvcnMuZm9yRWFjaCgoZXhjbHVkZWRFcnJvcikgPT4ge1xuICAgICAgICAgIGlmIChlcnJvci5tZXNzYWdlLmluY2x1ZGVzKGV4Y2x1ZGVkRXJyb3IudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChlcnJvci5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZXhjbHVkZWRFcnJvcnM/LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmRpc3BsYXlFcnJvcihlcnJvcik7XG4gIH1cblxuICBkaXNwbGF5RXJyb3IoZXJyb3I6IGFueSk6IHZvaWQge1xuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICB9XG59XG4iXX0=