@geekbears/gb-ngrx-stack-base 17.0.5

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 (41) hide show
  1. package/README.md +24 -0
  2. package/domain/entities/index.d.ts +1 -0
  3. package/domain/entities/user.d.ts +9 -0
  4. package/domain/index.d.ts +1 -0
  5. package/esm2022/domain/entities/index.mjs +2 -0
  6. package/esm2022/domain/entities/user.mjs +2 -0
  7. package/esm2022/domain/index.mjs +2 -0
  8. package/esm2022/geekbears-gb-ngrx-stack-base.mjs +5 -0
  9. package/esm2022/index.mjs +5 -0
  10. package/esm2022/infrastructure/index.mjs +2 -0
  11. package/esm2022/infrastructure/models/index.mjs +3 -0
  12. package/esm2022/infrastructure/models/loaded-data.model.mjs +55 -0
  13. package/esm2022/infrastructure/models/user.model.mjs +16 -0
  14. package/esm2022/types/api-response.type.mjs +2 -0
  15. package/esm2022/types/do-interface.type.mjs +2 -0
  16. package/esm2022/types/failure.type.mjs +6 -0
  17. package/esm2022/types/index.mjs +4 -0
  18. package/esm2022/utils/authentication-change-base-action-token.mjs +7 -0
  19. package/esm2022/utils/failure.helper.mjs +44 -0
  20. package/esm2022/utils/http-response-handle.helper.mjs +41 -0
  21. package/esm2022/utils/index.mjs +6 -0
  22. package/esm2022/utils/rxjs.helper.mjs +62 -0
  23. package/esm2022/utils/test.mjs +6 -0
  24. package/fesm2022/geekbears-gb-ngrx-stack-base.mjs +237 -0
  25. package/fesm2022/geekbears-gb-ngrx-stack-base.mjs.map +1 -0
  26. package/index.d.ts +4 -0
  27. package/infrastructure/index.d.ts +1 -0
  28. package/infrastructure/models/index.d.ts +2 -0
  29. package/infrastructure/models/loaded-data.model.d.ts +22 -0
  30. package/infrastructure/models/user.model.d.ts +12 -0
  31. package/package.json +25 -0
  32. package/types/api-response.type.d.ts +18 -0
  33. package/types/do-interface.type.d.ts +3 -0
  34. package/types/failure.type.d.ts +8 -0
  35. package/types/index.d.ts +3 -0
  36. package/utils/authentication-change-base-action-token.d.ts +14 -0
  37. package/utils/failure.helper.d.ts +17 -0
  38. package/utils/http-response-handle.helper.d.ts +9 -0
  39. package/utils/index.d.ts +5 -0
  40. package/utils/rxjs.helper.d.ts +30 -0
  41. package/utils/test.d.ts +1 -0
package/README.md ADDED
@@ -0,0 +1,24 @@
1
+ # GbNgrxStackBase
2
+
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.2.0.
4
+
5
+ ## Code scaffolding
6
+
7
+ Run `ng generate component component-name --project gb-ngrx-stack-base` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project gb-ngrx-stack-base`.
8
+ > Note: Don't forget to add `--project gb-ngrx-stack-base` or else it will be added to the default project in your `angular.json` file.
9
+
10
+ ## Build
11
+
12
+ Run `ng build gb-ngrx-stack-base` to build the project. The build artifacts will be stored in the `dist/` directory.
13
+
14
+ ## Publishing
15
+
16
+ After building your library with `ng build gb-ngrx-stack-base`, go to the dist folder `cd dist/gb-ngrx-stack-base` and run `npm publish`.
17
+
18
+ ## Running unit tests
19
+
20
+ Run `ng test gb-ngrx-stack-base` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
+
22
+ ## Further help
23
+
24
+ To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
@@ -0,0 +1 @@
1
+ export * from "./user";
@@ -0,0 +1,9 @@
1
+ export interface IUser {
2
+ id: string;
3
+ email: string;
4
+ firstName: string;
5
+ lastName: string;
6
+ roles: string[] | undefined;
7
+ permissions: string[] | undefined;
8
+ accountConfirmedAt?: Date;
9
+ }
@@ -0,0 +1 @@
1
+ export * from "./entities";
@@ -0,0 +1,2 @@
1
+ export * from "./user";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYi1uZ3J4LXN0YWNrLWJhc2Uvc3JjL2RvbWFpbi9lbnRpdGllcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL3VzZXJcIjsiXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2diLW5ncngtc3RhY2stYmFzZS9zcmMvZG9tYWluL2VudGl0aWVzL3VzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSVVzZXIge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZW1haWw6IHN0cmluZztcbiAgICBmaXJzdE5hbWU6IHN0cmluZztcbiAgICBsYXN0TmFtZTogc3RyaW5nO1xuICAgIHJvbGVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgICBwZXJtaXNzaW9uczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gICAgYWNjb3VudENvbmZpcm1lZEF0PzogRGF0ZTtcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from "./entities";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9nYi1uZ3J4LXN0YWNrLWJhc2Uvc3JjL2RvbWFpbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2VudGl0aWVzXCI7Il19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2Vla2JlYXJzLWdiLW5ncngtc3RhY2stYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2diLW5ncngtc3RhY2stYmFzZS9zcmMvZ2Vla2JlYXJzLWdiLW5ncngtc3RhY2stYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ export * from "./domain";
2
+ export * from "./infrastructure";
3
+ export * from "./types";
4
+ export * from "./utils";
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9nYi1uZ3J4LXN0YWNrLWJhc2Uvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9kb21haW5cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2luZnJhc3RydWN0dXJlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHNcIjsiXX0=
@@ -0,0 +1,2 @@
1
+ export * from "./models";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9nYi1uZ3J4LXN0YWNrLWJhc2Uvc3JjL2luZnJhc3RydWN0dXJlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vbW9kZWxzXCI7Il19
@@ -0,0 +1,3 @@
1
+ export * from './user.model';
2
+ export * from './loaded-data.model';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYi1uZ3J4LXN0YWNrLWJhc2Uvc3JjL2luZnJhc3RydWN0dXJlL21vZGVscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi91c2VyLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbG9hZGVkLWRhdGEubW9kZWwnO1xuIl19
@@ -0,0 +1,55 @@
1
+ import { isNil } from 'lodash-es';
2
+ export class LoadedData {
3
+ get errored() {
4
+ return this.failure != undefined && this.failure != null;
5
+ }
6
+ constructor(data) {
7
+ this._class = 'LoadedData';
8
+ this.loading = false;
9
+ this.timestamp = null;
10
+ this.failure = null;
11
+ this.value = null;
12
+ this.loading = data?.loading ?? this.loading;
13
+ this.timestamp = data?.timestamp ?? !isNil(data?.value) ? new Date() : this.timestamp;
14
+ this.value = data?.value ?? this.value;
15
+ this.failure = data?.failure ?? this.failure;
16
+ }
17
+ equals(other) {
18
+ if (this === other)
19
+ return true;
20
+ return (other instanceof LoadedData &&
21
+ other.loading === this.loading &&
22
+ other.timestamp === this.timestamp &&
23
+ other.value === this.value &&
24
+ other.failure?.code === this.failure?.code &&
25
+ JSON.stringify(other.failure?.messages) === JSON.stringify(this.failure?.messages));
26
+ }
27
+ copyWith(data) {
28
+ return new LoadedData(Object.assign({}, this, data));
29
+ }
30
+ copyWithData({ loading = false, value }) {
31
+ return new LoadedData({
32
+ loading,
33
+ timestamp: !isNil(value) ? new Date() : this.timestamp,
34
+ value,
35
+ failure: null,
36
+ });
37
+ }
38
+ copyWithLoading() {
39
+ return this.copyWith({
40
+ loading: true,
41
+ });
42
+ }
43
+ toObject() {
44
+ return {
45
+ loading: this.loading,
46
+ timestamp: this.timestamp,
47
+ value: this.value,
48
+ failure: this.failure,
49
+ };
50
+ }
51
+ toString() {
52
+ return JSON.stringify(this);
53
+ }
54
+ }
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVkLWRhdGEubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYi1uZ3J4LXN0YWNrLWJhc2Uvc3JjL2luZnJhc3RydWN0dXJlL21vZGVscy9sb2FkZWQtZGF0YS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBVWxDLE1BQU0sT0FBTyxVQUFVO0lBT25CLElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLE9BQU8sSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUM7SUFDN0QsQ0FBQztJQUVELFlBQVksSUFBOEI7UUFWMUMsV0FBTSxHQUFpQixZQUFZLENBQUM7UUFDcEMsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUN6QixjQUFTLEdBQWdCLElBQUksQ0FBQztRQUM5QixZQUFPLEdBQW1CLElBQUksQ0FBQztRQUMvQixVQUFLLEdBQWEsSUFBSSxDQUFDO1FBT25CLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzdDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxFQUFFLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDdEYsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDdkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDakQsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFvQjtRQUN2QixJQUFJLElBQUksS0FBSyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFaEMsT0FBTyxDQUNILEtBQUssWUFBWSxVQUFVO1lBQzNCLEtBQUssQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLE9BQU87WUFDOUIsS0FBSyxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsU0FBUztZQUNsQyxLQUFLLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLO1lBQzFCLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSTtZQUMxQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUNyRixDQUFDO0lBQ04sQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUE0QjtRQUNqQyxPQUFPLElBQUksVUFBVSxDQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxZQUFZLENBQUMsRUFBRSxPQUFPLEdBQUcsS0FBSyxFQUFFLEtBQUssRUFBMEI7UUFDM0QsT0FBTyxJQUFJLFVBQVUsQ0FBSTtZQUNyQixPQUFPO1lBQ1AsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUztZQUN0RCxLQUFLO1lBQ0wsT0FBTyxFQUFFLElBQUk7U0FDaEIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGVBQWU7UUFDWCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDakIsT0FBTyxFQUFFLElBQUk7U0FDaEIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFFBQVE7UUFDSixPQUFPO1lBQ0gsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQ3hCLENBQUM7SUFDTixDQUFDO0lBRUQsUUFBUTtRQUNKLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc05pbCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBGYWlsdXJlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElMb2FkZWREYXRhPFQ+IHtcbiAgICBsb2FkaW5nOiBib29sZWFuO1xuICAgIHRpbWVzdGFtcDogRGF0ZSB8IG51bGw7XG4gICAgZmFpbHVyZTogRmFpbHVyZSB8IG51bGw7XG4gICAgdmFsdWU6IFQgfCBudWxsO1xufVxuXG5leHBvcnQgY2xhc3MgTG9hZGVkRGF0YTxUPiB7XG4gICAgX2NsYXNzOiAnTG9hZGVkRGF0YScgPSAnTG9hZGVkRGF0YSc7XG4gICAgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHRpbWVzdGFtcDogRGF0ZSB8IG51bGwgPSBudWxsO1xuICAgIGZhaWx1cmU6IEZhaWx1cmUgfCBudWxsID0gbnVsbDtcbiAgICB2YWx1ZTogVCB8IG51bGwgPSBudWxsO1xuXG4gICAgZ2V0IGVycm9yZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZhaWx1cmUgIT0gdW5kZWZpbmVkICYmIHRoaXMuZmFpbHVyZSAhPSBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBQYXJ0aWFsPElMb2FkZWREYXRhPFQ+Pikge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBkYXRhPy5sb2FkaW5nID8/IHRoaXMubG9hZGluZztcbiAgICAgICAgdGhpcy50aW1lc3RhbXAgPSBkYXRhPy50aW1lc3RhbXAgPz8gIWlzTmlsKGRhdGE/LnZhbHVlKSA/IG5ldyBEYXRlKCkgOiB0aGlzLnRpbWVzdGFtcDtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGE/LnZhbHVlID8/IHRoaXMudmFsdWU7XG4gICAgICAgIHRoaXMuZmFpbHVyZSA9IGRhdGE/LmZhaWx1cmUgPz8gdGhpcy5mYWlsdXJlO1xuICAgIH1cblxuICAgIGVxdWFscyhvdGhlcjogTG9hZGVkRGF0YTxUPik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcyA9PT0gb3RoZXIpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBvdGhlciBpbnN0YW5jZW9mIExvYWRlZERhdGEgJiZcbiAgICAgICAgICAgIG90aGVyLmxvYWRpbmcgPT09IHRoaXMubG9hZGluZyAmJlxuICAgICAgICAgICAgb3RoZXIudGltZXN0YW1wID09PSB0aGlzLnRpbWVzdGFtcCAmJlxuICAgICAgICAgICAgb3RoZXIudmFsdWUgPT09IHRoaXMudmFsdWUgJiZcbiAgICAgICAgICAgIG90aGVyLmZhaWx1cmU/LmNvZGUgPT09IHRoaXMuZmFpbHVyZT8uY29kZSAmJlxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3RoZXIuZmFpbHVyZT8ubWVzc2FnZXMpID09PSBKU09OLnN0cmluZ2lmeSh0aGlzLmZhaWx1cmU/Lm1lc3NhZ2VzKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGNvcHlXaXRoKGRhdGE6IFBhcnRpYWw8TG9hZGVkRGF0YTxUPj4pOiBMb2FkZWREYXRhPFQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBMb2FkZWREYXRhPFQ+KE9iamVjdC5hc3NpZ24oe30sIHRoaXMsIGRhdGEpKTtcbiAgICB9XG5cbiAgICBjb3B5V2l0aERhdGEoeyBsb2FkaW5nID0gZmFsc2UsIHZhbHVlIH06IFBhcnRpYWw8TG9hZGVkRGF0YTxUPj4pOiBMb2FkZWREYXRhPFQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBMb2FkZWREYXRhPFQ+KHtcbiAgICAgICAgICAgIGxvYWRpbmcsXG4gICAgICAgICAgICB0aW1lc3RhbXA6ICFpc05pbCh2YWx1ZSkgPyBuZXcgRGF0ZSgpIDogdGhpcy50aW1lc3RhbXAsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIGZhaWx1cmU6IG51bGwsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvcHlXaXRoTG9hZGluZygpOiBMb2FkZWREYXRhPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29weVdpdGgoe1xuICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdG9PYmplY3QoKTogSUxvYWRlZERhdGE8VD4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbG9hZGluZzogdGhpcy5sb2FkaW5nLFxuICAgICAgICAgICAgdGltZXN0YW1wOiB0aGlzLnRpbWVzdGFtcCxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgZmFpbHVyZTogdGhpcy5mYWlsdXJlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzKTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,16 @@
1
+ export class UserModel {
2
+ constructor(data) {
3
+ this.email = data.email ?? "";
4
+ this.id = data.id ?? "";
5
+ this.firstName = data.firstName ?? "";
6
+ this.lastName = data.lastName ?? "";
7
+ this.roles = data.permissions ?? [];
8
+ this.permissions = data.permissions ?? [];
9
+ this.accountConfirmedAt = data.accountConfirmedAt;
10
+ }
11
+ get fullName() {
12
+ return `${this.firstName} ${this.lastName}`;
13
+ }
14
+ ;
15
+ }
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2diLW5ncngtc3RhY2stYmFzZS9zcmMvaW5mcmFzdHJ1Y3R1cmUvbW9kZWxzL3VzZXIubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLFNBQVM7SUFTbEIsWUFBWSxJQUFvQjtRQUM1QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ3RELENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDN0MsQ0FBQztJQUFBLENBQUM7Q0FDTCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElVc2VyIH0gZnJvbSBcIi4uLy4uL2RvbWFpblwiO1xuXG5leHBvcnQgY2xhc3MgVXNlck1vZGVsIGltcGxlbWVudHMgSVVzZXIge1xuICAgIGVtYWlsOiBzdHJpbmc7XG4gICAgZmlyc3ROYW1lOiBzdHJpbmc7XG4gICAgbGFzdE5hbWU6IHN0cmluZztcbiAgICByb2xlczogc3RyaW5nW107XG4gICAgcGVybWlzc2lvbnM6IHN0cmluZ1tdO1xuICAgIGFjY291bnRDb25maXJtZWRBdD86IERhdGUgfCB1bmRlZmluZWQ7XG4gICAgaWQ6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE6IFBhcnRpYWw8SVVzZXI+KSB7XG4gICAgICAgIHRoaXMuZW1haWwgPSBkYXRhLmVtYWlsID8/IFwiXCI7XG4gICAgICAgIHRoaXMuaWQgPSBkYXRhLmlkID8/IFwiXCI7XG4gICAgICAgIHRoaXMuZmlyc3ROYW1lID0gZGF0YS5maXJzdE5hbWUgPz8gXCJcIjtcbiAgICAgICAgdGhpcy5sYXN0TmFtZSA9IGRhdGEubGFzdE5hbWUgPz8gXCJcIjtcbiAgICAgICAgdGhpcy5yb2xlcyA9IGRhdGEucGVybWlzc2lvbnMgPz8gW107XG4gICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSBkYXRhLnBlcm1pc3Npb25zID8/IFtdO1xuICAgICAgICB0aGlzLmFjY291bnRDb25maXJtZWRBdCA9IGRhdGEuYWNjb3VudENvbmZpcm1lZEF0O1xuICAgIH1cblxuICAgIGdldCBmdWxsTmFtZSgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIGAke3RoaXMuZmlyc3ROYW1lfSAke3RoaXMubGFzdE5hbWV9YFxuICAgIH07XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLXJlc3BvbnNlLnR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9nYi1uZ3J4LXN0YWNrLWJhc2Uvc3JjL3R5cGVzL2FwaS1yZXNwb25zZS50eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJVXNlciB9IGZyb20gJy4uJztcblxuZXhwb3J0IGludGVyZmFjZSBJQXV0aGVudGljYXRpb25SZXNwb25zZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICB0b2tlbjogc3RyaW5nO1xuICAgIGV4cGlyZWQ6IGJvb2xlYW47XG4gICAgdXNlcj86IElVc2VyIHwgbnVsbDtcbiAgICByZWZyZXNoVG9rZW4/OiBzdHJpbmcgfCBudWxsO1xuICAgIGRldmljZUluZm8/OiBJQXV0aERldmljZUluZm87XG4gICAgY29weVdpdGgoZGF0YTogUGFydGlhbDxJQXV0aGVudGljYXRpb25SZXNwb25zZT4pOiBJQXV0aGVudGljYXRpb25SZXNwb25zZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXV0aERldmljZUluZm8ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuXG4gICAgdG9Kc29uKCk6IHN0cmluZztcbiAgICB0b01hcCgpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG8taW50ZXJmYWNlLnR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9nYi1uZ3J4LXN0YWNrLWJhc2Uvc3JjL3R5cGVzL2RvLWludGVyZmFjZS50eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBEb0ludGVyZmFjZTxULCBLIGV4dGVuZHMgUHJvcGVydHlLZXkgPSBuZXZlcj4gPSBPbWl0PFxuICAgIHtcbiAgICAgICAgW1AgaW4ga2V5b2YgVCBhcyBUW1BdIGV4dGVuZHMgRnVuY3Rpb24gPyBuZXZlciA6IFAgZXh0ZW5kcyBLID8gbmV2ZXIgOiBQXTogVFtQXTtcbiAgICB9LFxuICAgICdfY2xhc3MnXG4+O1xuIl19
@@ -0,0 +1,6 @@
1
+ export var FailureType;
2
+ (function (FailureType) {
3
+ FailureType["RateLimitExceeded"] = "RateLimitExceeded";
4
+ })(FailureType || (FailureType = {}));
5
+ export const UnkownFailureCode = "unknown";
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFpbHVyZS50eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2ItbmdyeC1zdGFjay1iYXNlL3NyYy90eXBlcy9mYWlsdXJlLnR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsTUFBTSxDQUFOLElBQVksV0FFWDtBQUZELFdBQVksV0FBVztJQUNyQixzREFBdUMsQ0FBQTtBQUN6QyxDQUFDLEVBRlcsV0FBVyxLQUFYLFdBQVcsUUFFdEI7QUFFRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIEZhaWx1cmUge1xuICAgIGNvZGU6IEZhaWx1cmVUeXBlIHwgc3RyaW5nO1xuICAgIG1lc3NhZ2VzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBlbnVtIEZhaWx1cmVUeXBlIHtcbiAgUmF0ZUxpbWl0RXhjZWVkZWQgPSAnUmF0ZUxpbWl0RXhjZWVkZWQnLFxufVxuXG5leHBvcnQgY29uc3QgVW5rb3duRmFpbHVyZUNvZGUgPSBcInVua25vd25cIjtcbiJdfQ==
@@ -0,0 +1,4 @@
1
+ export * from './api-response.type';
2
+ export * from './failure.type';
3
+ export * from './do-interface.type';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9nYi1uZ3J4LXN0YWNrLWJhc2Uvc3JjL3R5cGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hcGktcmVzcG9uc2UudHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2ZhaWx1cmUudHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2RvLWludGVyZmFjZS50eXBlJztcbiJdfQ==
@@ -0,0 +1,7 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ /**
3
+ * The idea of this token is to have a way to register a general action that deals with authentication changes
4
+ * this way different libraries can rely on it either by subscribing it or dispatching it
5
+ */
6
+ export const AuthenticationChangeBaseActionToken = new InjectionToken('AuthenticationChangeBaseActionToken');
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24tY2hhbmdlLWJhc2UtYWN0aW9uLXRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2ItbmdyeC1zdGFjay1iYXNlL3NyYy91dGlscy9hdXRoZW50aWNhdGlvbi1jaGFuZ2UtYmFzZS1hY3Rpb24tdG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUsvQzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBRyxJQUFJLGNBQWMsQ0FDakUscUNBQXFDLENBQ3hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9uLCBBY3Rpb25DcmVhdG9yLCBDcmVhdG9yLCBOb3RBbGxvd2VkQ2hlY2sgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBUeXBlZEFjdGlvbiB9IGZyb20gJ0BuZ3J4L3N0b3JlL3NyYy9tb2RlbHMnO1xuaW1wb3J0IHsgSUF1dGhlbnRpY2F0aW9uUmVzcG9uc2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKlxuICogVGhlIGlkZWEgb2YgdGhpcyB0b2tlbiBpcyB0byBoYXZlIGEgd2F5IHRvIHJlZ2lzdGVyIGEgZ2VuZXJhbCBhY3Rpb24gdGhhdCBkZWFscyB3aXRoIGF1dGhlbnRpY2F0aW9uIGNoYW5nZXNcbiAqIHRoaXMgd2F5IGRpZmZlcmVudCBsaWJyYXJpZXMgY2FuIHJlbHkgb24gaXQgZWl0aGVyIGJ5IHN1YnNjcmliaW5nIGl0IG9yIGRpc3BhdGNoaW5nIGl0XG4gKi9cbmV4cG9ydCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYW5nZUJhc2VBY3Rpb25Ub2tlbiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBdXRoZW50aWNhdGlvbkNoYW5nZUFjdGlvbj4oXG4gICAgJ0F1dGhlbnRpY2F0aW9uQ2hhbmdlQmFzZUFjdGlvblRva2VuJyxcbik7XG5cbmV4cG9ydCB0eXBlIEF1dGhlbnRpY2F0aW9uQ2hhbmdlQWN0aW9uID0gQWN0aW9uQ3JlYXRvcjxcbiAgICBzdHJpbmcsXG4gICAgKFxuICAgICAgICBwcm9wczogQXV0aGVudGljYXRpb25DaGFuZ2VBY3Rpb25Qcm9wcyAmIE5vdEFsbG93ZWRDaGVjazxBdXRoZW50aWNhdGlvbkNoYW5nZUFjdGlvblByb3BzPixcbiAgICApID0+IEF1dGhlbnRpY2F0aW9uQ2hhbmdlQWN0aW9uUHJvcHMgJiBUeXBlZEFjdGlvbjxzdHJpbmc+XG4+O1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhlbnRpY2F0aW9uQ2hhbmdlQWN0aW9uUHJvcHMge1xuICAgIGF1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XG4gICAgZGF0YTogSUF1dGhlbnRpY2F0aW9uUmVzcG9uc2UgfCBudWxsO1xufVxuIl19
@@ -0,0 +1,44 @@
1
+ import { has, isEmpty, isNil, isObject } from "lodash-es";
2
+ /**
3
+ *
4
+ * @param failure The Failure as input
5
+ * @param or If failure is null or couln't not retrieve any message from it, use this instead. Defaults to '' empty string
6
+ * @param messageWrapper Failures often return an array of messages, this give you the oportunity to wrap each message between whatever you want
7
+ * @param joiner The postfix that will join each message together, default behavior is to join by line break '\n'
8
+ * @returns A sigle string with the failure messages.
9
+ */
10
+ export function getFailureMessageOr(failure, or = "", messageWrapper, joiner) {
11
+ let messages = [];
12
+ if (isNil(failure)) {
13
+ return or;
14
+ }
15
+ if (!isNil(failure.messages) && !isEmpty(failure.messages)) {
16
+ messages = failure.messages.map((message) => {
17
+ if (isNil(messageWrapper)) {
18
+ return message;
19
+ }
20
+ return messageWrapper(message);
21
+ });
22
+ }
23
+ else if (!isNil(failure.code)) {
24
+ messages = [failure.code];
25
+ }
26
+ if (isEmpty(messages)) {
27
+ return or;
28
+ }
29
+ return messages.join(joiner ?? "\n");
30
+ }
31
+ /**
32
+ * Since Failure is not a runtime type but just an interface this check if given object can be treated as a Failure
33
+ * @param object Any object expected to be a Failure
34
+ * @returns {boolean}
35
+ */
36
+ export function maybeFailure(object) {
37
+ if (!isObject(object))
38
+ return false;
39
+ if (has(object, "code")) {
40
+ return true;
41
+ }
42
+ return false;
43
+ }
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFpbHVyZS5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9nYi1uZ3J4LXN0YWNrLWJhc2Uvc3JjL3V0aWxzL2ZhaWx1cmUuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBTyxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFNL0Q7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxPQUFtQyxFQUFFLEtBQWEsRUFBRSxFQUFFLGNBQXNDLEVBQUUsTUFBZTtJQUM3SSxJQUFJLFFBQVEsR0FBYSxFQUFFLENBQUM7SUFFNUIsSUFBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNoQixPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN4RCxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN4QyxJQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO2dCQUN2QixPQUFPLE9BQU8sQ0FBQztZQUNuQixDQUFDO1lBQ0QsT0FBTyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO1NBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM5QixRQUFRLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDbkIsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBRyxJQUFJLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBVztJQUNwQyxJQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRW5DLElBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0LCBoYXMsIGlzRW1wdHksIGlzTmlsLCBpc09iamVjdCB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCB7IE9wZXJhdG9yRnVuY3Rpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgRmFpbHVyZSB9IGZyb20gXCIuLi90eXBlc1wiO1xuXG5leHBvcnQgdHlwZSBGYWlsdXJlTWVzc2FnZVdyYXBwZXIgPSAobWVzc2FnZTogc3RyaW5nKSA9PiBzdHJpbmc7XG5cbi8qKlxuICogXG4gKiBAcGFyYW0gZmFpbHVyZSBUaGUgRmFpbHVyZSBhcyBpbnB1dFxuICogQHBhcmFtIG9yIElmIGZhaWx1cmUgaXMgbnVsbCBvciBjb3Vsbid0IG5vdCByZXRyaWV2ZSBhbnkgbWVzc2FnZSBmcm9tIGl0LCB1c2UgdGhpcyBpbnN0ZWFkLiBEZWZhdWx0cyB0byAnJyBlbXB0eSBzdHJpbmdcbiAqIEBwYXJhbSBtZXNzYWdlV3JhcHBlciBGYWlsdXJlcyBvZnRlbiByZXR1cm4gYW4gYXJyYXkgb2YgbWVzc2FnZXMsIHRoaXMgZ2l2ZSB5b3UgdGhlIG9wb3J0dW5pdHkgdG8gd3JhcCBlYWNoIG1lc3NhZ2UgYmV0d2VlbiB3aGF0ZXZlciB5b3Ugd2FudFxuICogQHBhcmFtIGpvaW5lciBUaGUgcG9zdGZpeCB0aGF0IHdpbGwgam9pbiBlYWNoIG1lc3NhZ2UgdG9nZXRoZXIsIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gam9pbiBieSBsaW5lIGJyZWFrICdcXG4nXG4gKiBAcmV0dXJucyBBIHNpZ2xlIHN0cmluZyB3aXRoIHRoZSBmYWlsdXJlIG1lc3NhZ2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmFpbHVyZU1lc3NhZ2VPcihmYWlsdXJlOiBGYWlsdXJlIHwgbnVsbCB8IHVuZGVmaW5lZCwgb3I6IHN0cmluZyA9IFwiXCIsIG1lc3NhZ2VXcmFwcGVyPzogRmFpbHVyZU1lc3NhZ2VXcmFwcGVyLCBqb2luZXI/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBtZXNzYWdlczogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmKGlzTmlsKGZhaWx1cmUpKSB7XG4gICAgICAgIHJldHVybiBvcjtcbiAgICB9XG5cbiAgICBpZighaXNOaWwoZmFpbHVyZS5tZXNzYWdlcykgJiYgIWlzRW1wdHkoZmFpbHVyZS5tZXNzYWdlcykpIHtcbiAgICAgICAgbWVzc2FnZXMgPSBmYWlsdXJlLm1lc3NhZ2VzLm1hcCgobWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgaWYoaXNOaWwobWVzc2FnZVdyYXBwZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbWVzc2FnZVdyYXBwZXIobWVzc2FnZSk7XG4gICAgICAgIH0pXG4gICAgfSBlbHNlIGlmICghaXNOaWwoZmFpbHVyZS5jb2RlKSkge1xuICAgICAgICBtZXNzYWdlcyA9IFtmYWlsdXJlLmNvZGVdO1xuICAgIH1cblxuICAgIGlmKGlzRW1wdHkobWVzc2FnZXMpKSB7XG4gICAgICAgIHJldHVybiBvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVzc2FnZXMuam9pbihqb2luZXI/PyBcIlxcblwiKTtcbn1cblxuLyoqXG4gKiBTaW5jZSBGYWlsdXJlIGlzIG5vdCBhIHJ1bnRpbWUgdHlwZSBidXQganVzdCBhbiBpbnRlcmZhY2UgdGhpcyBjaGVjayBpZiBnaXZlbiBvYmplY3QgY2FuIGJlIHRyZWF0ZWQgYXMgYSBGYWlsdXJlXG4gKiBAcGFyYW0gb2JqZWN0IEFueSBvYmplY3QgZXhwZWN0ZWQgdG8gYmUgYSBGYWlsdXJlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1heWJlRmFpbHVyZShvYmplY3Q6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmKCFpc09iamVjdChvYmplY3QpKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZihoYXMob2JqZWN0LCBcImNvZGVcIikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufSJdfQ==
@@ -0,0 +1,41 @@
1
+ import { HttpErrorResponse } from '@angular/common/http';
2
+ import { get, isEmpty, isNil, isObject, first, camelCase } from 'lodash-es';
3
+ import { UnkownFailureCode } from '../types';
4
+ export function httpResponseHandle(params) { }
5
+ /**
6
+ *
7
+ * @param error Throwed error by a function on the call stack
8
+ * @returns Returns a valid {Failure}
9
+ */
10
+ export function httpResponseFailureHandle(error) {
11
+ if (isObject(error) && error instanceof HttpErrorResponse) {
12
+ let messages = get(error.error, 'messages', []);
13
+ // to support old applications
14
+ let singleMessage = get(error.error, 'message');
15
+ if (isEmpty(messages) && !isNil(singleMessage)) {
16
+ messages.push(singleMessage);
17
+ }
18
+ // to support old applications
19
+ if (isNil(singleMessage) && !isNil(get(error.error, 'error'))) {
20
+ let message = get(get(error.error, 'error'), 'message');
21
+ if (!isNil(message))
22
+ messages.push(message);
23
+ }
24
+ return {
25
+ code: get(error.error, 'errorCode') || camelCase(first(messages)) || error.message,
26
+ messages: messages,
27
+ };
28
+ }
29
+ else if (isObject(error) && error instanceof Error) {
30
+ return {
31
+ code: error.name,
32
+ messages: !isNil(error.message) && !isEmpty(error.message) ? [error.message] : [],
33
+ };
34
+ }
35
+ else {
36
+ return {
37
+ code: UnkownFailureCode,
38
+ };
39
+ }
40
+ }
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1yZXNwb25zZS1oYW5kbGUuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2ItbmdyeC1zdGFjay1iYXNlL3NyYy91dGlscy9odHRwLXJlc3BvbnNlLWhhbmRsZS5oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzVFLE9BQU8sRUFBVyxpQkFBaUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV0RCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsTUFBVyxJQUFHLENBQUM7QUFFbEQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxLQUFnQztJQUN0RSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFlBQVksaUJBQWlCLEVBQUUsQ0FBQztRQUN4RCxJQUFJLFFBQVEsR0FBYSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFMUQsOEJBQThCO1FBQzlCLElBQUksYUFBYSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2hELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDN0MsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsOEJBQThCO1FBQzlCLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM1RCxJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7Z0JBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsT0FBTztZQUNILElBQUksRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU87WUFDbEYsUUFBUSxFQUFFLFFBQVE7U0FDckIsQ0FBQztJQUNOLENBQUM7U0FBTSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFLENBQUM7UUFDbkQsT0FBTztZQUNILElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQixRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7U0FDcEYsQ0FBQztJQUNOLENBQUM7U0FBTSxDQUFDO1FBQ0osT0FBTztZQUNILElBQUksRUFBRSxpQkFBaUI7U0FDMUIsQ0FBQztJQUNOLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBnZXQsIGlzRW1wdHksIGlzTmlsLCBpc09iamVjdCwgZmlyc3QsIGNhbWVsQ2FzZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBGYWlsdXJlLCBVbmtvd25GYWlsdXJlQ29kZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGh0dHBSZXNwb25zZUhhbmRsZShwYXJhbXM6IGFueSkge31cblxuLyoqXG4gKlxuICogQHBhcmFtIGVycm9yIFRocm93ZWQgZXJyb3IgYnkgYSBmdW5jdGlvbiBvbiB0aGUgY2FsbCBzdGFja1xuICogQHJldHVybnMgUmV0dXJucyBhIHZhbGlkIHtGYWlsdXJlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaHR0cFJlc3BvbnNlRmFpbHVyZUhhbmRsZShlcnJvcjogRXJyb3IgfCBIdHRwRXJyb3JSZXNwb25zZSk6IEZhaWx1cmUge1xuICAgIGlmIChpc09iamVjdChlcnJvcikgJiYgZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICBsZXQgbWVzc2FnZXM6IHN0cmluZ1tdID0gZ2V0KGVycm9yLmVycm9yLCAnbWVzc2FnZXMnLCBbXSk7XG5cbiAgICAgICAgLy8gdG8gc3VwcG9ydCBvbGQgYXBwbGljYXRpb25zXG4gICAgICAgIGxldCBzaW5nbGVNZXNzYWdlID0gZ2V0KGVycm9yLmVycm9yLCAnbWVzc2FnZScpO1xuICAgICAgICBpZiAoaXNFbXB0eShtZXNzYWdlcykgJiYgIWlzTmlsKHNpbmdsZU1lc3NhZ2UpKSB7XG4gICAgICAgICAgICBtZXNzYWdlcy5wdXNoKHNpbmdsZU1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRvIHN1cHBvcnQgb2xkIGFwcGxpY2F0aW9uc1xuICAgICAgICBpZiAoaXNOaWwoc2luZ2xlTWVzc2FnZSkgJiYgIWlzTmlsKGdldChlcnJvci5lcnJvciwgJ2Vycm9yJykpKSB7XG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IGdldChnZXQoZXJyb3IuZXJyb3IsICdlcnJvcicpLCAnbWVzc2FnZScpO1xuICAgICAgICAgICAgaWYgKCFpc05pbChtZXNzYWdlKSkgbWVzc2FnZXMucHVzaChtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29kZTogZ2V0KGVycm9yLmVycm9yLCAnZXJyb3JDb2RlJykgfHwgY2FtZWxDYXNlKGZpcnN0KG1lc3NhZ2VzKSkgfHwgZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlcyxcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGVycm9yKSAmJiBlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb2RlOiBlcnJvci5uYW1lLFxuICAgICAgICAgICAgbWVzc2FnZXM6ICFpc05pbChlcnJvci5tZXNzYWdlKSAmJiAhaXNFbXB0eShlcnJvci5tZXNzYWdlKSA/IFtlcnJvci5tZXNzYWdlXSA6IFtdLFxuICAgICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb2RlOiBVbmtvd25GYWlsdXJlQ29kZSxcbiAgICAgICAgfTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,6 @@
1
+ export * from "./authentication-change-base-action-token";
2
+ export * from "./failure.helper";
3
+ export * from "./http-response-handle.helper";
4
+ export * from "./rxjs.helper";
5
+ export * from "./test";
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9nYi1uZ3J4LXN0YWNrLWJhc2Uvc3JjL3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vYXV0aGVudGljYXRpb24tY2hhbmdlLWJhc2UtYWN0aW9uLXRva2VuXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9mYWlsdXJlLmhlbHBlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vaHR0cC1yZXNwb25zZS1oYW5kbGUuaGVscGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9yeGpzLmhlbHBlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdGVzdFwiOyJdfQ==
@@ -0,0 +1,62 @@
1
+ import { HttpErrorResponse } from "@angular/common/http";
2
+ import { isObject } from "lodash-es";
3
+ import { of, throwError } from "rxjs";
4
+ import { catchError, map } from "rxjs/operators";
5
+ import { getFailureMessageOr, maybeFailure } from "./failure.helper";
6
+ import { httpResponseFailureHandle } from "./http-response-handle.helper";
7
+ /**
8
+ * This operator helps you catching any exception on your API call and tries to get a Failure form it and provides you with an easy way
9
+ * of proccessing that failure into something else
10
+ * @param converter Mapper function to dispatch given value instead of the Failure
11
+ * @returns Returns any value provided ny the converter
12
+ */
13
+ export function catchAndGetFromFailureRxOp(converter) {
14
+ return catchError((error) => {
15
+ let failure;
16
+ if (isObject(error) && (error instanceof Error || error instanceof HttpErrorResponse)) {
17
+ failure = httpResponseFailureHandle(error);
18
+ }
19
+ else if (maybeFailure(error)) {
20
+ failure = error;
21
+ }
22
+ else {
23
+ failure = httpResponseFailureHandle(error);
24
+ }
25
+ return of(converter(failure));
26
+ });
27
+ }
28
+ /**
29
+ * Catch an error, throws a Failure in the onservabe pipeline
30
+ * @returns Catch any error from the proccesed pipeline and throws a Failure instead
31
+ */
32
+ export const catchAndThrowFailureRxOp = () => {
33
+ return catchError((error) => {
34
+ let failure = httpResponseFailureHandle(error);
35
+ return throwError(failure);
36
+ });
37
+ };
38
+ /**
39
+ * Catch an error and gets a Failure from it
40
+ * @returns Returns a Failure
41
+ */
42
+ export const catchGetFailureRxOp = () => {
43
+ return catchError((error) => {
44
+ let failure = httpResponseFailureHandle(error);
45
+ return of(failure);
46
+ });
47
+ };
48
+ /**
49
+ * This converts failure to a message using same logic as '[getFailureMessageOr]'
50
+ * @see {@link getFailureMessageOr}
51
+ *
52
+ * @param or
53
+ * @param messageWrapper
54
+ * @param joiner
55
+ * @returns
56
+ */
57
+ export const getFailureMessageRxOp = (or = "", messageWrapper, joiner) => {
58
+ return map((failure) => {
59
+ return getFailureMessageOr(failure, or, messageWrapper, joiner);
60
+ });
61
+ };
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnhqcy5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9nYi1uZ3J4LXN0YWNrLWJhc2Uvc3JjL3V0aWxzL3J4anMuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQ3hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDcEMsT0FBTyxFQUFFLEVBQUUsRUFBb0IsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFaEQsT0FBTyxFQUF5QixtQkFBbUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUMzRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQTtBQUV6RTs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSwwQkFBMEIsQ0FBSSxTQUFrQztJQUM1RSxPQUFPLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ3hCLElBQUksT0FBZ0IsQ0FBQztRQUNyQixJQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssWUFBWSxLQUFLLElBQUksS0FBSyxZQUFZLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztZQUNuRixPQUFPLEdBQUcseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsQ0FBQzthQUFNLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDN0IsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNwQixDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sR0FBRyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQ0wsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUNyQixDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsR0FBbUMsRUFBRTtJQUN6RSxPQUFPLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ3hCLElBQUksT0FBTyxHQUFZLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hELE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9CLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFBO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsR0FBbUMsRUFBRTtJQUNwRSxPQUFPLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ3hCLElBQUksT0FBTyxHQUFZLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hELE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFBO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFLGNBQXNDLEVBQUUsTUFBZSxFQUF3RCxFQUFFO0lBQ3BLLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDbkIsT0FBTyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNwRSxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCJcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSBcImxvZGFzaC1lc1wiXG5pbXBvcnQgeyBvZiwgT3BlcmF0b3JGdW5jdGlvbiwgdGhyb3dFcnJvciB9IGZyb20gXCJyeGpzXCJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiXG5pbXBvcnQgeyBGYWlsdXJlIH0gZnJvbSBcIi4uL3R5cGVzXCJcbmltcG9ydCB7IEZhaWx1cmVNZXNzYWdlV3JhcHBlciwgZ2V0RmFpbHVyZU1lc3NhZ2VPciwgbWF5YmVGYWlsdXJlIH0gZnJvbSBcIi4vZmFpbHVyZS5oZWxwZXJcIlxuaW1wb3J0IHsgaHR0cFJlc3BvbnNlRmFpbHVyZUhhbmRsZSB9IGZyb20gXCIuL2h0dHAtcmVzcG9uc2UtaGFuZGxlLmhlbHBlclwiXG5cbi8qKlxuICogVGhpcyBvcGVyYXRvciBoZWxwcyB5b3UgY2F0Y2hpbmcgYW55IGV4Y2VwdGlvbiBvbiB5b3VyIEFQSSBjYWxsIGFuZCB0cmllcyB0byBnZXQgYSBGYWlsdXJlIGZvcm0gaXQgYW5kIHByb3ZpZGVzIHlvdSB3aXRoIGFuIGVhc3kgd2F5IFxuICogb2YgcHJvY2Nlc3NpbmcgdGhhdCBmYWlsdXJlIGludG8gc29tZXRoaW5nIGVsc2VcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgTWFwcGVyIGZ1bmN0aW9uIHRvIGRpc3BhdGNoIGdpdmVuIHZhbHVlIGluc3RlYWQgb2YgdGhlIEZhaWx1cmVcbiAqIEByZXR1cm5zIFJldHVybnMgYW55IHZhbHVlIHByb3ZpZGVkIG55IHRoZSBjb252ZXJ0ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhdGNoQW5kR2V0RnJvbUZhaWx1cmVSeE9wPFQ+KGNvbnZlcnRlcjogKGZhaWx1cmU6IEZhaWx1cmUpID0+IFQpOiBPcGVyYXRvckZ1bmN0aW9uPGFueSwgVD4ge1xuICAgIHJldHVybiBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICBsZXQgZmFpbHVyZTogRmFpbHVyZTtcbiAgICAgICAgaWYoaXNPYmplY3QoZXJyb3IpICYmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yIHx8IGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpKSB7XG4gICAgICAgICAgICBmYWlsdXJlID0gaHR0cFJlc3BvbnNlRmFpbHVyZUhhbmRsZShlcnJvcik7XG4gICAgICAgIH0gZWxzZSBpZiAobWF5YmVGYWlsdXJlKGVycm9yKSkge1xuICAgICAgICAgICAgZmFpbHVyZSA9IGVycm9yO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmFpbHVyZSA9IGh0dHBSZXNwb25zZUZhaWx1cmVIYW5kbGUoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvZihcbiAgICAgICAgICAgIGNvbnZlcnRlcihmYWlsdXJlKSxcbiAgICAgICAgKTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBDYXRjaCBhbiBlcnJvciwgdGhyb3dzIGEgRmFpbHVyZSBpbiB0aGUgb25zZXJ2YWJlIHBpcGVsaW5lXG4gKiBAcmV0dXJucyBDYXRjaCBhbnkgZXJyb3IgZnJvbSB0aGUgcHJvY2Nlc2VkIHBpcGVsaW5lIGFuZCB0aHJvd3MgYSBGYWlsdXJlIGluc3RlYWRcbiAqL1xuZXhwb3J0IGNvbnN0IGNhdGNoQW5kVGhyb3dGYWlsdXJlUnhPcCA9ICgpOiBPcGVyYXRvckZ1bmN0aW9uPGFueSwgRmFpbHVyZT4gPT4ge1xuICAgIHJldHVybiBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICBsZXQgZmFpbHVyZTogRmFpbHVyZSA9IGh0dHBSZXNwb25zZUZhaWx1cmVIYW5kbGUoZXJyb3IpO1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihmYWlsdXJlKTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBDYXRjaCBhbiBlcnJvciBhbmQgZ2V0cyBhIEZhaWx1cmUgZnJvbSBpdFxuICogQHJldHVybnMgUmV0dXJucyBhIEZhaWx1cmVcbiAqL1xuZXhwb3J0IGNvbnN0IGNhdGNoR2V0RmFpbHVyZVJ4T3AgPSAoKTogT3BlcmF0b3JGdW5jdGlvbjxhbnksIEZhaWx1cmU+ID0+IHtcbiAgICByZXR1cm4gY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgbGV0IGZhaWx1cmU6IEZhaWx1cmUgPSBodHRwUmVzcG9uc2VGYWlsdXJlSGFuZGxlKGVycm9yKTtcbiAgICAgICAgcmV0dXJuIG9mKGZhaWx1cmUpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIFRoaXMgY29udmVydHMgZmFpbHVyZSB0byBhIG1lc3NhZ2UgdXNpbmcgc2FtZSBsb2dpYyBhcyAnW2dldEZhaWx1cmVNZXNzYWdlT3JdJ1xuICogQHNlZSB7QGxpbmsgZ2V0RmFpbHVyZU1lc3NhZ2VPcn1cbiAqIFxuICogQHBhcmFtIG9yIFxuICogQHBhcmFtIG1lc3NhZ2VXcmFwcGVyIFxuICogQHBhcmFtIGpvaW5lciBcbiAqIEByZXR1cm5zIFxuICovXG5leHBvcnQgY29uc3QgZ2V0RmFpbHVyZU1lc3NhZ2VSeE9wID0gKG9yOiBzdHJpbmcgPSBcIlwiLCBtZXNzYWdlV3JhcHBlcj86IEZhaWx1cmVNZXNzYWdlV3JhcHBlciwgam9pbmVyPzogc3RyaW5nKTogT3BlcmF0b3JGdW5jdGlvbjxGYWlsdXJlIHwgbnVsbCB8IHVuZGVmaW5lZCwgc3RyaW5nPiA9PiB7XG4gICAgcmV0dXJuIG1hcCgoZmFpbHVyZSkgPT4ge1xuICAgICAgICByZXR1cm4gZ2V0RmFpbHVyZU1lc3NhZ2VPcihmYWlsdXJlLCBvciwgbWVzc2FnZVdyYXBwZXIsIGpvaW5lcik7XG4gICAgfSk7XG59Il19
@@ -0,0 +1,6 @@
1
+ export function mockHttpResponse(data) {
2
+ return {
3
+ data: data,
4
+ };
5
+ }
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2diLW5ncngtc3RhY2stYmFzZS9zcmMvdXRpbHMvdGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsSUFBWTtJQUN6QyxPQUFPO1FBQ0gsSUFBSSxFQUFFLElBQUk7S0FDYixDQUFBO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBtb2NrSHR0cFJlc3BvbnNlKGRhdGE6IG9iamVjdCk6IG9iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YTogZGF0YSxcbiAgICB9XG59Il19
@@ -0,0 +1,237 @@
1
+ import { isNil, isEmpty, isObject, has, get, camelCase, first } from 'lodash-es';
2
+ import { InjectionToken } from '@angular/core';
3
+ import { HttpErrorResponse } from '@angular/common/http';
4
+ import { of, throwError } from 'rxjs';
5
+ import { catchError, map } from 'rxjs/operators';
6
+
7
+ class UserModel {
8
+ constructor(data) {
9
+ this.email = data.email ?? "";
10
+ this.id = data.id ?? "";
11
+ this.firstName = data.firstName ?? "";
12
+ this.lastName = data.lastName ?? "";
13
+ this.roles = data.permissions ?? [];
14
+ this.permissions = data.permissions ?? [];
15
+ this.accountConfirmedAt = data.accountConfirmedAt;
16
+ }
17
+ get fullName() {
18
+ return `${this.firstName} ${this.lastName}`;
19
+ }
20
+ ;
21
+ }
22
+
23
+ class LoadedData {
24
+ get errored() {
25
+ return this.failure != undefined && this.failure != null;
26
+ }
27
+ constructor(data) {
28
+ this._class = 'LoadedData';
29
+ this.loading = false;
30
+ this.timestamp = null;
31
+ this.failure = null;
32
+ this.value = null;
33
+ this.loading = data?.loading ?? this.loading;
34
+ this.timestamp = data?.timestamp ?? !isNil(data?.value) ? new Date() : this.timestamp;
35
+ this.value = data?.value ?? this.value;
36
+ this.failure = data?.failure ?? this.failure;
37
+ }
38
+ equals(other) {
39
+ if (this === other)
40
+ return true;
41
+ return (other instanceof LoadedData &&
42
+ other.loading === this.loading &&
43
+ other.timestamp === this.timestamp &&
44
+ other.value === this.value &&
45
+ other.failure?.code === this.failure?.code &&
46
+ JSON.stringify(other.failure?.messages) === JSON.stringify(this.failure?.messages));
47
+ }
48
+ copyWith(data) {
49
+ return new LoadedData(Object.assign({}, this, data));
50
+ }
51
+ copyWithData({ loading = false, value }) {
52
+ return new LoadedData({
53
+ loading,
54
+ timestamp: !isNil(value) ? new Date() : this.timestamp,
55
+ value,
56
+ failure: null,
57
+ });
58
+ }
59
+ copyWithLoading() {
60
+ return this.copyWith({
61
+ loading: true,
62
+ });
63
+ }
64
+ toObject() {
65
+ return {
66
+ loading: this.loading,
67
+ timestamp: this.timestamp,
68
+ value: this.value,
69
+ failure: this.failure,
70
+ };
71
+ }
72
+ toString() {
73
+ return JSON.stringify(this);
74
+ }
75
+ }
76
+
77
+ var FailureType;
78
+ (function (FailureType) {
79
+ FailureType["RateLimitExceeded"] = "RateLimitExceeded";
80
+ })(FailureType || (FailureType = {}));
81
+ const UnkownFailureCode = "unknown";
82
+
83
+ /**
84
+ * The idea of this token is to have a way to register a general action that deals with authentication changes
85
+ * this way different libraries can rely on it either by subscribing it or dispatching it
86
+ */
87
+ const AuthenticationChangeBaseActionToken = new InjectionToken('AuthenticationChangeBaseActionToken');
88
+
89
+ /**
90
+ *
91
+ * @param failure The Failure as input
92
+ * @param or If failure is null or couln't not retrieve any message from it, use this instead. Defaults to '' empty string
93
+ * @param messageWrapper Failures often return an array of messages, this give you the oportunity to wrap each message between whatever you want
94
+ * @param joiner The postfix that will join each message together, default behavior is to join by line break '\n'
95
+ * @returns A sigle string with the failure messages.
96
+ */
97
+ function getFailureMessageOr(failure, or = "", messageWrapper, joiner) {
98
+ let messages = [];
99
+ if (isNil(failure)) {
100
+ return or;
101
+ }
102
+ if (!isNil(failure.messages) && !isEmpty(failure.messages)) {
103
+ messages = failure.messages.map((message) => {
104
+ if (isNil(messageWrapper)) {
105
+ return message;
106
+ }
107
+ return messageWrapper(message);
108
+ });
109
+ }
110
+ else if (!isNil(failure.code)) {
111
+ messages = [failure.code];
112
+ }
113
+ if (isEmpty(messages)) {
114
+ return or;
115
+ }
116
+ return messages.join(joiner ?? "\n");
117
+ }
118
+ /**
119
+ * Since Failure is not a runtime type but just an interface this check if given object can be treated as a Failure
120
+ * @param object Any object expected to be a Failure
121
+ * @returns {boolean}
122
+ */
123
+ function maybeFailure(object) {
124
+ if (!isObject(object))
125
+ return false;
126
+ if (has(object, "code")) {
127
+ return true;
128
+ }
129
+ return false;
130
+ }
131
+
132
+ function httpResponseHandle(params) { }
133
+ /**
134
+ *
135
+ * @param error Throwed error by a function on the call stack
136
+ * @returns Returns a valid {Failure}
137
+ */
138
+ function httpResponseFailureHandle(error) {
139
+ if (isObject(error) && error instanceof HttpErrorResponse) {
140
+ let messages = get(error.error, 'messages', []);
141
+ // to support old applications
142
+ let singleMessage = get(error.error, 'message');
143
+ if (isEmpty(messages) && !isNil(singleMessage)) {
144
+ messages.push(singleMessage);
145
+ }
146
+ // to support old applications
147
+ if (isNil(singleMessage) && !isNil(get(error.error, 'error'))) {
148
+ let message = get(get(error.error, 'error'), 'message');
149
+ if (!isNil(message))
150
+ messages.push(message);
151
+ }
152
+ return {
153
+ code: get(error.error, 'errorCode') || camelCase(first(messages)) || error.message,
154
+ messages: messages,
155
+ };
156
+ }
157
+ else if (isObject(error) && error instanceof Error) {
158
+ return {
159
+ code: error.name,
160
+ messages: !isNil(error.message) && !isEmpty(error.message) ? [error.message] : [],
161
+ };
162
+ }
163
+ else {
164
+ return {
165
+ code: UnkownFailureCode,
166
+ };
167
+ }
168
+ }
169
+
170
+ /**
171
+ * This operator helps you catching any exception on your API call and tries to get a Failure form it and provides you with an easy way
172
+ * of proccessing that failure into something else
173
+ * @param converter Mapper function to dispatch given value instead of the Failure
174
+ * @returns Returns any value provided ny the converter
175
+ */
176
+ function catchAndGetFromFailureRxOp(converter) {
177
+ return catchError((error) => {
178
+ let failure;
179
+ if (isObject(error) && (error instanceof Error || error instanceof HttpErrorResponse)) {
180
+ failure = httpResponseFailureHandle(error);
181
+ }
182
+ else if (maybeFailure(error)) {
183
+ failure = error;
184
+ }
185
+ else {
186
+ failure = httpResponseFailureHandle(error);
187
+ }
188
+ return of(converter(failure));
189
+ });
190
+ }
191
+ /**
192
+ * Catch an error, throws a Failure in the onservabe pipeline
193
+ * @returns Catch any error from the proccesed pipeline and throws a Failure instead
194
+ */
195
+ const catchAndThrowFailureRxOp = () => {
196
+ return catchError((error) => {
197
+ let failure = httpResponseFailureHandle(error);
198
+ return throwError(failure);
199
+ });
200
+ };
201
+ /**
202
+ * Catch an error and gets a Failure from it
203
+ * @returns Returns a Failure
204
+ */
205
+ const catchGetFailureRxOp = () => {
206
+ return catchError((error) => {
207
+ let failure = httpResponseFailureHandle(error);
208
+ return of(failure);
209
+ });
210
+ };
211
+ /**
212
+ * This converts failure to a message using same logic as '[getFailureMessageOr]'
213
+ * @see {@link getFailureMessageOr}
214
+ *
215
+ * @param or
216
+ * @param messageWrapper
217
+ * @param joiner
218
+ * @returns
219
+ */
220
+ const getFailureMessageRxOp = (or = "", messageWrapper, joiner) => {
221
+ return map((failure) => {
222
+ return getFailureMessageOr(failure, or, messageWrapper, joiner);
223
+ });
224
+ };
225
+
226
+ function mockHttpResponse(data) {
227
+ return {
228
+ data: data,
229
+ };
230
+ }
231
+
232
+ /**
233
+ * Generated bundle index. Do not edit.
234
+ */
235
+
236
+ export { AuthenticationChangeBaseActionToken, FailureType, LoadedData, UnkownFailureCode, UserModel, catchAndGetFromFailureRxOp, catchAndThrowFailureRxOp, catchGetFailureRxOp, getFailureMessageOr, getFailureMessageRxOp, httpResponseFailureHandle, httpResponseHandle, maybeFailure, mockHttpResponse };
237
+ //# sourceMappingURL=geekbears-gb-ngrx-stack-base.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geekbears-gb-ngrx-stack-base.mjs","sources":["../../../projects/gb-ngrx-stack-base/src/infrastructure/models/user.model.ts","../../../projects/gb-ngrx-stack-base/src/infrastructure/models/loaded-data.model.ts","../../../projects/gb-ngrx-stack-base/src/types/failure.type.ts","../../../projects/gb-ngrx-stack-base/src/utils/authentication-change-base-action-token.ts","../../../projects/gb-ngrx-stack-base/src/utils/failure.helper.ts","../../../projects/gb-ngrx-stack-base/src/utils/http-response-handle.helper.ts","../../../projects/gb-ngrx-stack-base/src/utils/rxjs.helper.ts","../../../projects/gb-ngrx-stack-base/src/utils/test.ts","../../../projects/gb-ngrx-stack-base/src/geekbears-gb-ngrx-stack-base.ts"],"sourcesContent":["import { IUser } from \"../../domain\";\n\nexport class UserModel implements IUser {\n email: string;\n firstName: string;\n lastName: string;\n roles: string[];\n permissions: string[];\n accountConfirmedAt?: Date | undefined;\n id: string;\n\n constructor(data: Partial<IUser>) {\n this.email = data.email ?? \"\";\n this.id = data.id ?? \"\";\n this.firstName = data.firstName ?? \"\";\n this.lastName = data.lastName ?? \"\";\n this.roles = data.permissions ?? [];\n this.permissions = data.permissions ?? [];\n this.accountConfirmedAt = data.accountConfirmedAt;\n }\n\n get fullName(): string {\n return `${this.firstName} ${this.lastName}`\n };\n}\n","import { isNil } from 'lodash-es';\nimport { Failure } from '../../types';\n\nexport interface ILoadedData<T> {\n loading: boolean;\n timestamp: Date | null;\n failure: Failure | null;\n value: T | null;\n}\n\nexport class LoadedData<T> {\n _class: 'LoadedData' = 'LoadedData';\n loading: boolean = false;\n timestamp: Date | null = null;\n failure: Failure | null = null;\n value: T | null = null;\n\n get errored(): boolean {\n return this.failure != undefined && this.failure != null;\n }\n\n constructor(data?: Partial<ILoadedData<T>>) {\n this.loading = data?.loading ?? this.loading;\n this.timestamp = data?.timestamp ?? !isNil(data?.value) ? new Date() : this.timestamp;\n this.value = data?.value ?? this.value;\n this.failure = data?.failure ?? this.failure;\n }\n\n equals(other: LoadedData<T>): boolean {\n if (this === other) return true;\n\n return (\n other instanceof LoadedData &&\n other.loading === this.loading &&\n other.timestamp === this.timestamp &&\n other.value === this.value &&\n other.failure?.code === this.failure?.code &&\n JSON.stringify(other.failure?.messages) === JSON.stringify(this.failure?.messages)\n );\n }\n\n copyWith(data: Partial<LoadedData<T>>): LoadedData<T> {\n return new LoadedData<T>(Object.assign({}, this, data));\n }\n\n copyWithData({ loading = false, value }: Partial<LoadedData<T>>): LoadedData<T> {\n return new LoadedData<T>({\n loading,\n timestamp: !isNil(value) ? new Date() : this.timestamp,\n value,\n failure: null,\n });\n }\n\n copyWithLoading(): LoadedData<T> {\n return this.copyWith({\n loading: true,\n });\n }\n\n toObject(): ILoadedData<T> {\n return {\n loading: this.loading,\n timestamp: this.timestamp,\n value: this.value,\n failure: this.failure,\n };\n }\n\n toString(): string {\n return JSON.stringify(this);\n }\n}\n","export interface Failure {\n code: FailureType | string;\n messages?: string[];\n}\n\nexport enum FailureType {\n RateLimitExceeded = 'RateLimitExceeded',\n}\n\nexport const UnkownFailureCode = \"unknown\";\n","import { InjectionToken } from '@angular/core';\nimport { Action, ActionCreator, Creator, NotAllowedCheck } from '@ngrx/store';\nimport { TypedAction } from '@ngrx/store/src/models';\nimport { IAuthenticationResponse } from '../types';\n\n/**\n * The idea of this token is to have a way to register a general action that deals with authentication changes\n * this way different libraries can rely on it either by subscribing it or dispatching it\n */\nexport const AuthenticationChangeBaseActionToken = new InjectionToken<AuthenticationChangeAction>(\n 'AuthenticationChangeBaseActionToken',\n);\n\nexport type AuthenticationChangeAction = ActionCreator<\n string,\n (\n props: AuthenticationChangeActionProps & NotAllowedCheck<AuthenticationChangeActionProps>,\n ) => AuthenticationChangeActionProps & TypedAction<string>\n>;\n\nexport interface AuthenticationChangeActionProps {\n authenticated: boolean;\n data: IAuthenticationResponse | null;\n}\n","import { get, has, isEmpty, isNil, isObject } from \"lodash-es\";\nimport { OperatorFunction } from \"rxjs\";\nimport { Failure } from \"../types\";\n\nexport type FailureMessageWrapper = (message: string) => string;\n\n/**\n * \n * @param failure The Failure as input\n * @param or If failure is null or couln't not retrieve any message from it, use this instead. Defaults to '' empty string\n * @param messageWrapper Failures often return an array of messages, this give you the oportunity to wrap each message between whatever you want\n * @param joiner The postfix that will join each message together, default behavior is to join by line break '\\n'\n * @returns A sigle string with the failure messages.\n */\nexport function getFailureMessageOr(failure: Failure | null | undefined, or: string = \"\", messageWrapper?: FailureMessageWrapper, joiner?: string): string {\n let messages: string[] = [];\n\n if(isNil(failure)) {\n return or;\n }\n\n if(!isNil(failure.messages) && !isEmpty(failure.messages)) {\n messages = failure.messages.map((message) => {\n if(isNil(messageWrapper)) {\n return message;\n }\n return messageWrapper(message);\n })\n } else if (!isNil(failure.code)) {\n messages = [failure.code];\n }\n\n if(isEmpty(messages)) {\n return or;\n }\n\n return messages.join(joiner?? \"\\n\");\n}\n\n/**\n * Since Failure is not a runtime type but just an interface this check if given object can be treated as a Failure\n * @param object Any object expected to be a Failure\n * @returns {boolean}\n */\nexport function maybeFailure(object: any): boolean {\n if(!isObject(object)) return false;\n\n if(has(object, \"code\")) {\n return true;\n }\n\n return false;\n}","import { HttpErrorResponse } from '@angular/common/http';\nimport { get, isEmpty, isNil, isObject, first, camelCase } from 'lodash-es';\nimport { Failure, UnkownFailureCode } from '../types';\n\nexport function httpResponseHandle(params: any) {}\n\n/**\n *\n * @param error Throwed error by a function on the call stack\n * @returns Returns a valid {Failure}\n */\nexport function httpResponseFailureHandle(error: Error | HttpErrorResponse): Failure {\n if (isObject(error) && error instanceof HttpErrorResponse) {\n let messages: string[] = get(error.error, 'messages', []);\n\n // to support old applications\n let singleMessage = get(error.error, 'message');\n if (isEmpty(messages) && !isNil(singleMessage)) {\n messages.push(singleMessage);\n }\n // to support old applications\n if (isNil(singleMessage) && !isNil(get(error.error, 'error'))) {\n let message = get(get(error.error, 'error'), 'message');\n if (!isNil(message)) messages.push(message);\n }\n return {\n code: get(error.error, 'errorCode') || camelCase(first(messages)) || error.message,\n messages: messages,\n };\n } else if (isObject(error) && error instanceof Error) {\n return {\n code: error.name,\n messages: !isNil(error.message) && !isEmpty(error.message) ? [error.message] : [],\n };\n } else {\n return {\n code: UnkownFailureCode,\n };\n }\n}\n","import { HttpErrorResponse } from \"@angular/common/http\"\nimport { isObject } from \"lodash-es\"\nimport { of, OperatorFunction, throwError } from \"rxjs\"\nimport { catchError, map } from \"rxjs/operators\"\nimport { Failure } from \"../types\"\nimport { FailureMessageWrapper, getFailureMessageOr, maybeFailure } from \"./failure.helper\"\nimport { httpResponseFailureHandle } from \"./http-response-handle.helper\"\n\n/**\n * This operator helps you catching any exception on your API call and tries to get a Failure form it and provides you with an easy way \n * of proccessing that failure into something else\n * @param converter Mapper function to dispatch given value instead of the Failure\n * @returns Returns any value provided ny the converter\n */\nexport function catchAndGetFromFailureRxOp<T>(converter: (failure: Failure) => T): OperatorFunction<any, T> {\n return catchError((error) => {\n let failure: Failure;\n if(isObject(error) && (error instanceof Error || error instanceof HttpErrorResponse)) {\n failure = httpResponseFailureHandle(error);\n } else if (maybeFailure(error)) {\n failure = error;\n } else {\n failure = httpResponseFailureHandle(error);\n }\n return of(\n converter(failure),\n );\n });\n}\n\n/**\n * Catch an error, throws a Failure in the onservabe pipeline\n * @returns Catch any error from the proccesed pipeline and throws a Failure instead\n */\nexport const catchAndThrowFailureRxOp = (): OperatorFunction<any, Failure> => {\n return catchError((error) => {\n let failure: Failure = httpResponseFailureHandle(error);\n return throwError(failure);\n });\n}\n\n/**\n * Catch an error and gets a Failure from it\n * @returns Returns a Failure\n */\nexport const catchGetFailureRxOp = (): OperatorFunction<any, Failure> => {\n return catchError((error) => {\n let failure: Failure = httpResponseFailureHandle(error);\n return of(failure);\n });\n}\n\n/**\n * This converts failure to a message using same logic as '[getFailureMessageOr]'\n * @see {@link getFailureMessageOr}\n * \n * @param or \n * @param messageWrapper \n * @param joiner \n * @returns \n */\nexport const getFailureMessageRxOp = (or: string = \"\", messageWrapper?: FailureMessageWrapper, joiner?: string): OperatorFunction<Failure | null | undefined, string> => {\n return map((failure) => {\n return getFailureMessageOr(failure, or, messageWrapper, joiner);\n });\n}","export function mockHttpResponse(data: object): object {\n return {\n data: data,\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export * from "./domain";
2
+ export * from "./infrastructure";
3
+ export * from "./types";
4
+ export * from "./utils";
@@ -0,0 +1 @@
1
+ export * from "./models";
@@ -0,0 +1,2 @@
1
+ export * from './user.model';
2
+ export * from './loaded-data.model';
@@ -0,0 +1,22 @@
1
+ import { Failure } from '../../types';
2
+ export interface ILoadedData<T> {
3
+ loading: boolean;
4
+ timestamp: Date | null;
5
+ failure: Failure | null;
6
+ value: T | null;
7
+ }
8
+ export declare class LoadedData<T> {
9
+ _class: 'LoadedData';
10
+ loading: boolean;
11
+ timestamp: Date | null;
12
+ failure: Failure | null;
13
+ value: T | null;
14
+ get errored(): boolean;
15
+ constructor(data?: Partial<ILoadedData<T>>);
16
+ equals(other: LoadedData<T>): boolean;
17
+ copyWith(data: Partial<LoadedData<T>>): LoadedData<T>;
18
+ copyWithData({ loading, value }: Partial<LoadedData<T>>): LoadedData<T>;
19
+ copyWithLoading(): LoadedData<T>;
20
+ toObject(): ILoadedData<T>;
21
+ toString(): string;
22
+ }
@@ -0,0 +1,12 @@
1
+ import { IUser } from "../../domain";
2
+ export declare class UserModel implements IUser {
3
+ email: string;
4
+ firstName: string;
5
+ lastName: string;
6
+ roles: string[];
7
+ permissions: string[];
8
+ accountConfirmedAt?: Date | undefined;
9
+ id: string;
10
+ constructor(data: Partial<IUser>);
11
+ get fullName(): string;
12
+ }
package/package.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "@geekbears/gb-ngrx-stack-base",
3
+ "version": "17.0.5",
4
+ "peerDependencies": {
5
+ "@angular/common": "^17.2.1",
6
+ "@angular/core": "^17.2.1"
7
+ },
8
+ "dependencies": {
9
+ "tslib": "^2.3.0"
10
+ },
11
+ "module": "fesm2022/geekbears-gb-ngrx-stack-base.mjs",
12
+ "typings": "index.d.ts",
13
+ "exports": {
14
+ "./package.json": {
15
+ "default": "./package.json"
16
+ },
17
+ ".": {
18
+ "types": "./index.d.ts",
19
+ "esm2022": "./esm2022/geekbears-gb-ngrx-stack-base.mjs",
20
+ "esm": "./esm2022/geekbears-gb-ngrx-stack-base.mjs",
21
+ "default": "./fesm2022/geekbears-gb-ngrx-stack-base.mjs"
22
+ }
23
+ },
24
+ "sideEffects": false
25
+ }
@@ -0,0 +1,18 @@
1
+ import { IUser } from '..';
2
+ export interface IAuthenticationResponse {
3
+ id: string;
4
+ token: string;
5
+ expired: boolean;
6
+ user?: IUser | null;
7
+ refreshToken?: string | null;
8
+ deviceInfo?: IAuthDeviceInfo;
9
+ copyWith(data: Partial<IAuthenticationResponse>): IAuthenticationResponse;
10
+ }
11
+ export interface IAuthDeviceInfo {
12
+ id: string;
13
+ name: string;
14
+ toJson(): string;
15
+ toMap(): {
16
+ [key: string]: any;
17
+ };
18
+ }
@@ -0,0 +1,3 @@
1
+ export type DoInterface<T, K extends PropertyKey = never> = Omit<{
2
+ [P in keyof T as T[P] extends Function ? never : P extends K ? never : P]: T[P];
3
+ }, '_class'>;
@@ -0,0 +1,8 @@
1
+ export interface Failure {
2
+ code: FailureType | string;
3
+ messages?: string[];
4
+ }
5
+ export declare enum FailureType {
6
+ RateLimitExceeded = "RateLimitExceeded"
7
+ }
8
+ export declare const UnkownFailureCode = "unknown";
@@ -0,0 +1,3 @@
1
+ export * from './api-response.type';
2
+ export * from './failure.type';
3
+ export * from './do-interface.type';
@@ -0,0 +1,14 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { ActionCreator, NotAllowedCheck } from '@ngrx/store';
3
+ import { TypedAction } from '@ngrx/store/src/models';
4
+ import { IAuthenticationResponse } from '../types';
5
+ /**
6
+ * The idea of this token is to have a way to register a general action that deals with authentication changes
7
+ * this way different libraries can rely on it either by subscribing it or dispatching it
8
+ */
9
+ export declare const AuthenticationChangeBaseActionToken: InjectionToken<AuthenticationChangeAction>;
10
+ export type AuthenticationChangeAction = ActionCreator<string, (props: AuthenticationChangeActionProps & NotAllowedCheck<AuthenticationChangeActionProps>) => AuthenticationChangeActionProps & TypedAction<string>>;
11
+ export interface AuthenticationChangeActionProps {
12
+ authenticated: boolean;
13
+ data: IAuthenticationResponse | null;
14
+ }
@@ -0,0 +1,17 @@
1
+ import { Failure } from "../types";
2
+ export type FailureMessageWrapper = (message: string) => string;
3
+ /**
4
+ *
5
+ * @param failure The Failure as input
6
+ * @param or If failure is null or couln't not retrieve any message from it, use this instead. Defaults to '' empty string
7
+ * @param messageWrapper Failures often return an array of messages, this give you the oportunity to wrap each message between whatever you want
8
+ * @param joiner The postfix that will join each message together, default behavior is to join by line break '\n'
9
+ * @returns A sigle string with the failure messages.
10
+ */
11
+ export declare function getFailureMessageOr(failure: Failure | null | undefined, or?: string, messageWrapper?: FailureMessageWrapper, joiner?: string): string;
12
+ /**
13
+ * Since Failure is not a runtime type but just an interface this check if given object can be treated as a Failure
14
+ * @param object Any object expected to be a Failure
15
+ * @returns {boolean}
16
+ */
17
+ export declare function maybeFailure(object: any): boolean;
@@ -0,0 +1,9 @@
1
+ import { HttpErrorResponse } from '@angular/common/http';
2
+ import { Failure } from '../types';
3
+ export declare function httpResponseHandle(params: any): void;
4
+ /**
5
+ *
6
+ * @param error Throwed error by a function on the call stack
7
+ * @returns Returns a valid {Failure}
8
+ */
9
+ export declare function httpResponseFailureHandle(error: Error | HttpErrorResponse): Failure;
@@ -0,0 +1,5 @@
1
+ export * from "./authentication-change-base-action-token";
2
+ export * from "./failure.helper";
3
+ export * from "./http-response-handle.helper";
4
+ export * from "./rxjs.helper";
5
+ export * from "./test";
@@ -0,0 +1,30 @@
1
+ import { OperatorFunction } from "rxjs";
2
+ import { Failure } from "../types";
3
+ import { FailureMessageWrapper } from "./failure.helper";
4
+ /**
5
+ * This operator helps you catching any exception on your API call and tries to get a Failure form it and provides you with an easy way
6
+ * of proccessing that failure into something else
7
+ * @param converter Mapper function to dispatch given value instead of the Failure
8
+ * @returns Returns any value provided ny the converter
9
+ */
10
+ export declare function catchAndGetFromFailureRxOp<T>(converter: (failure: Failure) => T): OperatorFunction<any, T>;
11
+ /**
12
+ * Catch an error, throws a Failure in the onservabe pipeline
13
+ * @returns Catch any error from the proccesed pipeline and throws a Failure instead
14
+ */
15
+ export declare const catchAndThrowFailureRxOp: () => OperatorFunction<any, Failure>;
16
+ /**
17
+ * Catch an error and gets a Failure from it
18
+ * @returns Returns a Failure
19
+ */
20
+ export declare const catchGetFailureRxOp: () => OperatorFunction<any, Failure>;
21
+ /**
22
+ * This converts failure to a message using same logic as '[getFailureMessageOr]'
23
+ * @see {@link getFailureMessageOr}
24
+ *
25
+ * @param or
26
+ * @param messageWrapper
27
+ * @param joiner
28
+ * @returns
29
+ */
30
+ export declare const getFailureMessageRxOp: (or?: string, messageWrapper?: FailureMessageWrapper, joiner?: string) => OperatorFunction<Failure | null | undefined, string>;
@@ -0,0 +1 @@
1
+ export declare function mockHttpResponse(data: object): object;