@ng-atomic/common 18.6.0 → 18.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/interceptors/authorization/authorization.interceptor.mjs +16 -9
- package/esm2022/interceptors/interceptors.module.mjs +3 -13
- package/fesm2022/ng-atomic-common-interceptors-authorization.mjs +16 -9
- package/fesm2022/ng-atomic-common-interceptors-authorization.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-interceptors.mjs +3 -13
- package/fesm2022/ng-atomic-common-interceptors.mjs.map +1 -1
- package/interceptors/authorization/authorization.interceptor.d.ts +6 -4
- package/interceptors/interceptors.module.d.ts +0 -4
- package/package.json +2 -2
|
@@ -2,10 +2,11 @@ import { Injectable, InjectionToken, inject } from '@angular/core';
|
|
|
2
2
|
import { from } from 'rxjs';
|
|
3
3
|
import { mergeMap, take } from 'rxjs/operators';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
|
-
export const
|
|
5
|
+
export const AUTHORIZATION = new InjectionToken('[@ng-atomic/common] AUTHORIZATION');
|
|
6
|
+
/** @deprecated use `authorizationInterceptor` instead. */
|
|
6
7
|
export class AuthorizationInterceptor {
|
|
7
8
|
constructor() {
|
|
8
|
-
this.getAuth = inject(
|
|
9
|
+
this.getAuth = inject(AUTHORIZATION);
|
|
9
10
|
}
|
|
10
11
|
intercept(req, next) {
|
|
11
12
|
if (!req.url.startsWith('/api'))
|
|
@@ -23,10 +24,16 @@ export class AuthorizationInterceptor {
|
|
|
23
24
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: AuthorizationInterceptor, decorators: [{
|
|
24
25
|
type: Injectable
|
|
25
26
|
}] });
|
|
26
|
-
export
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
};
|
|
32
|
-
|
|
27
|
+
export function authorizationInterceptor(isAuthorizedRequest = req => req.url.startsWith('/api')) {
|
|
28
|
+
return (req, next) => {
|
|
29
|
+
if (!isAuthorizedRequest(req))
|
|
30
|
+
return next(req);
|
|
31
|
+
const getAuth = inject(AUTHORIZATION, { optional: true }) ?? null;
|
|
32
|
+
return from(getAuth()).pipe(take(1), mergeMap(token => next(token ? req.clone({ setHeaders: { Authorization: token } }) : req)));
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
;
|
|
36
|
+
export function provideAuthorization(useFactory) {
|
|
37
|
+
return { provide: AUTHORIZATION, useFactory };
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXphdGlvbi5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BuZy1hdG9taWMvY29tbW9uL3NyYy9saWIvaW50ZXJjZXB0b3JzL2F1dGhvcml6YXRpb24vYXV0aG9yaXphdGlvbi5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBWSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0UsT0FBTyxFQUFFLElBQUksRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN4QyxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUdoRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxjQUFjLENBQW1CLG1DQUFtQyxDQUFDLENBQUM7QUFFdkcsMERBQTBEO0FBRTFELE1BQU0sT0FBTyx3QkFBd0I7SUFEckM7UUFHVSxZQUFPLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0tBYXpDO0lBWEMsU0FBUyxDQUFDLEdBQXlCLEVBQUUsSUFBaUI7UUFDcEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV6RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNiLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxHQUF5QixFQUFFLEtBQWE7UUFDbEUsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUMsYUFBYSxFQUFFLEtBQUssRUFBQyxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDOzhHQWRVLHdCQUF3QjtrSEFBeEIsd0JBQXdCOzsyRkFBeEIsd0JBQXdCO2tCQURwQyxVQUFVOztBQWtCWCxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLHNCQUE4RCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztJQUUvRixPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQ25CLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDO1FBQ2xFLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN6QixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ3pGLENBQUM7SUFDSixDQUFDLENBQUM7QUFDSixDQUFDO0FBQUEsQ0FBQztBQUVGLE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxVQUFrQztJQUNyRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNoRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIFByb3ZpZGVyLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBSZXF1ZXN0LCBIdHRwSGFuZGxlciwgSHR0cEV2ZW50LCBIdHRwSW50ZXJjZXB0b3IsIEh0dHBJbnRlcmNlcHRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgZnJvbSwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWVyZ2VNYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCB0eXBlIEdldEF1dGhvcml6YXRpb24gPSAoKSA9PiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHwgT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPjtcbmV4cG9ydCBjb25zdCBBVVRIT1JJWkFUSU9OID0gbmV3IEluamVjdGlvblRva2VuPEdldEF1dGhvcml6YXRpb24+KCdbQG5nLWF0b21pYy9jb21tb25dIEFVVEhPUklaQVRJT04nKTtcblxuLyoqIEBkZXByZWNhdGVkIHVzZSBgYXV0aG9yaXphdGlvbkludGVyY2VwdG9yYCBpbnN0ZWFkLiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEF1dGhvcml6YXRpb25JbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG5cbiAgcHJpdmF0ZSBnZXRBdXRoID0gaW5qZWN0KEFVVEhPUklaQVRJT04pO1xuXG4gIGludGVyY2VwdChyZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PHVua25vd24+PiB7XG4gICAgaWYgKCFyZXEudXJsLnN0YXJ0c1dpdGgoJy9hcGknKSkgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSk7XG5cbiAgICByZXR1cm4gZnJvbSh0aGlzLmdldEF1dGgoKSlcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAucGlwZShtZXJnZU1hcChpZFRva2VuID0+IG5leHQuaGFuZGxlKGlkVG9rZW4gPyB0aGlzLmdldFJlcXVlc3RXaXRoVG9rZW4ocmVxLCBpZFRva2VuKSA6IHJlcSkpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVxdWVzdFdpdGhUb2tlbihyZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+LCB0b2tlbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHJlcS5jbG9uZSh7IHNldEhlYWRlcnM6IHtBdXRob3JpemF0aW9uOiB0b2tlbn0gfSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF1dGhvcml6YXRpb25JbnRlcmNlcHRvcihcbiAgaXNBdXRob3JpemVkUmVxdWVzdDogKHJlcTogSHR0cFJlcXVlc3Q8dW5rbm93bj4pID0+IGJvb2xlYW4gPSByZXEgPT4gcmVxLnVybC5zdGFydHNXaXRoKCcvYXBpJylcbik6IEh0dHBJbnRlcmNlcHRvckZuIHtcbiAgcmV0dXJuIChyZXEsIG5leHQpID0+IHtcbiAgICBpZiAoIWlzQXV0aG9yaXplZFJlcXVlc3QocmVxKSkgcmV0dXJuIG5leHQocmVxKTtcbiAgICBjb25zdCBnZXRBdXRoID0gaW5qZWN0KEFVVEhPUklaQVRJT04sIHsgb3B0aW9uYWw6IHRydWUgfSkgPz8gbnVsbDtcbiAgICByZXR1cm4gZnJvbShnZXRBdXRoKCkpLnBpcGUoXG4gICAgICB0YWtlKDEpLFxuICAgICAgbWVyZ2VNYXAodG9rZW4gPT4gbmV4dCh0b2tlbiA/IHJlcS5jbG9uZSh7IHNldEhlYWRlcnM6IHtBdXRob3JpemF0aW9uOiB0b2tlbn0gfSkgOiByZXEpKSxcbiAgICApO1xuICB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVBdXRob3JpemF0aW9uKHVzZUZhY3Rvcnk6ICgpID0+IEdldEF1dGhvcml6YXRpb24pOiBQcm92aWRlciB7XG4gIHJldHVybiB7IHByb3ZpZGU6IEFVVEhPUklaQVRJT04sIHVzZUZhY3RvcnkgfTtcbn1cbiJdfQ==
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import { NgModule
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import { HTTP_INTERCEPTORS } from '@angular/common/http';
|
|
4
|
-
import { AuthorizationInterceptor
|
|
4
|
+
import { AuthorizationInterceptor } from '@ng-atomic/common/interceptors/authorization';
|
|
5
5
|
import { ThrottleInterceptor } from '@ng-atomic/common/interceptors/throttle';
|
|
6
|
-
import { AuthService } from '@ng-atomic/common/services/auth';
|
|
7
|
-
import { map, of, switchMap } from 'rxjs';
|
|
8
6
|
import * as i0 from "@angular/core";
|
|
9
7
|
export class InterceptorsModule {
|
|
10
8
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: InterceptorsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
@@ -20,7 +18,6 @@ export class InterceptorsModule {
|
|
|
20
18
|
useClass: ThrottleInterceptor,
|
|
21
19
|
multi: true
|
|
22
20
|
},
|
|
23
|
-
provideAuthorization()
|
|
24
21
|
], imports: [CommonModule] }); }
|
|
25
22
|
}
|
|
26
23
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: InterceptorsModule, decorators: [{
|
|
@@ -41,14 +38,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
|
|
|
41
38
|
useClass: ThrottleInterceptor,
|
|
42
39
|
multi: true
|
|
43
40
|
},
|
|
44
|
-
provideAuthorization()
|
|
45
41
|
],
|
|
46
42
|
}]
|
|
47
43
|
}] });
|
|
48
|
-
|
|
49
|
-
return {
|
|
50
|
-
provide: PROVIDE_AUTHORIZATION,
|
|
51
|
-
useValue: () => inject(AuthService).auth$.pipe(switchMap(auth => auth ? auth.getIdToken() : of('')), map(token => `Bearer ${token}`)),
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJjZXB0b3JzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BuZy1hdG9taWMvY29tbW9uL3NyYy9saWIvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQy9HLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBcUIxQyxNQUFNLE9BQU8sa0JBQWtCOzhHQUFsQixrQkFBa0I7K0dBQWxCLGtCQUFrQixZQWhCM0IsWUFBWTsrR0FnQkgsa0JBQWtCLGFBZGxCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsUUFBUSxFQUFFLHdCQUF3QjtnQkFDbEMsS0FBSyxFQUFFLElBQUk7YUFDWjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLEtBQUssRUFBRSxJQUFJO2FBQ1o7WUFDRCxvQkFBb0IsRUFBRTtTQUN2QixZQWRDLFlBQVk7OzJGQWdCSCxrQkFBa0I7a0JBbkI5QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxFQUFFO29CQUNoQixPQUFPLEVBQUU7d0JBQ1AsWUFBWTtxQkFDYjtvQkFDRCxTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsUUFBUSxFQUFFLHdCQUF3Qjs0QkFDbEMsS0FBSyxFQUFFLElBQUk7eUJBQ1o7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsUUFBUSxFQUFFLG1CQUFtQjs0QkFDN0IsS0FBSyxFQUFFLElBQUk7eUJBQ1o7d0JBQ0Qsb0JBQW9CLEVBQUU7cUJBQ3ZCO2lCQUNGOztBQUdELE1BQU0sVUFBVSxvQkFBb0I7SUFDbEMsT0FBTztRQUNMLE9BQU8sRUFBRSxxQkFBcUI7UUFDOUIsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUM1QyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQ3BELEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFVBQVUsS0FBSyxFQUFFLENBQUMsQ0FDaEM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBIVFRQX0lOVEVSQ0VQVE9SUyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEF1dGhvcml6YXRpb25JbnRlcmNlcHRvciwgUFJPVklERV9BVVRIT1JJWkFUSU9OIH0gZnJvbSAnQG5nLWF0b21pYy9jb21tb24vaW50ZXJjZXB0b3JzL2F1dGhvcml6YXRpb24nO1xuaW1wb3J0IHsgVGhyb3R0bGVJbnRlcmNlcHRvciB9IGZyb20gJ0BuZy1hdG9taWMvY29tbW9uL2ludGVyY2VwdG9ycy90aHJvdHRsZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJ0BuZy1hdG9taWMvY29tbW9uL3NlcnZpY2VzL2F1dGgnO1xuaW1wb3J0IHsgbWFwLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW10sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGVcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogSFRUUF9JTlRFUkNFUFRPUlMsXG4gICAgICB1c2VDbGFzczogQXV0aG9yaXphdGlvbkludGVyY2VwdG9yLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEhUVFBfSU5URVJDRVBUT1JTLFxuICAgICAgdXNlQ2xhc3M6IFRocm90dGxlSW50ZXJjZXB0b3IsXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAgcHJvdmlkZUF1dGhvcml6YXRpb24oKVxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBJbnRlcmNlcHRvcnNNb2R1bGUgeyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlQXV0aG9yaXphdGlvbigpIHtcbiAgcmV0dXJuIHtcbiAgICBwcm92aWRlOiBQUk9WSURFX0FVVEhPUklaQVRJT04sXG4gICAgdXNlVmFsdWU6ICgpID0+IGluamVjdChBdXRoU2VydmljZSkuYXV0aCQucGlwZShcbiAgICAgIHN3aXRjaE1hcChhdXRoID0+IGF1dGggPyBhdXRoLmdldElkVG9rZW4oKSA6IG9mKCcnKSksXG4gICAgICBtYXAodG9rZW4gPT4gYEJlYXJlciAke3Rva2VufWApLFxuICAgICksXG4gIH07XG59XG4iXX0=
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJjZXB0b3JzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BuZy1hdG9taWMvY29tbW9uL3NyYy9saWIvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDeEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7O0FBb0I5RSxNQUFNLE9BQU8sa0JBQWtCOzhHQUFsQixrQkFBa0I7K0dBQWxCLGtCQUFrQixZQWYzQixZQUFZOytHQWVILGtCQUFrQixhQWJsQjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFFBQVEsRUFBRSx3QkFBd0I7Z0JBQ2xDLEtBQUssRUFBRSxJQUFJO2FBQ1o7WUFDRDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixRQUFRLEVBQUUsbUJBQW1CO2dCQUM3QixLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0YsWUFiQyxZQUFZOzsyRkFlSCxrQkFBa0I7a0JBbEI5QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxFQUFFO29CQUNoQixPQUFPLEVBQUU7d0JBQ1AsWUFBWTtxQkFDYjtvQkFDRCxTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsUUFBUSxFQUFFLHdCQUF3Qjs0QkFDbEMsS0FBSyxFQUFFLElBQUk7eUJBQ1o7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsUUFBUSxFQUFFLG1CQUFtQjs0QkFDN0IsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEhUVFBfSU5URVJDRVBUT1JTIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQXV0aG9yaXphdGlvbkludGVyY2VwdG9yIH0gZnJvbSAnQG5nLWF0b21pYy9jb21tb24vaW50ZXJjZXB0b3JzL2F1dGhvcml6YXRpb24nO1xuaW1wb3J0IHsgVGhyb3R0bGVJbnRlcmNlcHRvciB9IGZyb20gJ0BuZy1hdG9taWMvY29tbW9uL2ludGVyY2VwdG9ycy90aHJvdHRsZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW10sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGVcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogSFRUUF9JTlRFUkNFUFRPUlMsXG4gICAgICB1c2VDbGFzczogQXV0aG9yaXphdGlvbkludGVyY2VwdG9yLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEhUVFBfSU5URVJDRVBUT1JTLFxuICAgICAgdXNlQ2xhc3M6IFRocm90dGxlSW50ZXJjZXB0b3IsXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEludGVyY2VwdG9yc01vZHVsZSB7IH1cbiJdfQ==
|
|
@@ -3,10 +3,11 @@ import { InjectionToken, inject, Injectable } from '@angular/core';
|
|
|
3
3
|
import { from } from 'rxjs';
|
|
4
4
|
import { take, mergeMap } from 'rxjs/operators';
|
|
5
5
|
|
|
6
|
-
const
|
|
6
|
+
const AUTHORIZATION = new InjectionToken('[@ng-atomic/common] AUTHORIZATION');
|
|
7
|
+
/** @deprecated use `authorizationInterceptor` instead. */
|
|
7
8
|
class AuthorizationInterceptor {
|
|
8
9
|
constructor() {
|
|
9
|
-
this.getAuth = inject(
|
|
10
|
+
this.getAuth = inject(AUTHORIZATION);
|
|
10
11
|
}
|
|
11
12
|
intercept(req, next) {
|
|
12
13
|
if (!req.url.startsWith('/api'))
|
|
@@ -24,16 +25,22 @@ class AuthorizationInterceptor {
|
|
|
24
25
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: AuthorizationInterceptor, decorators: [{
|
|
25
26
|
type: Injectable
|
|
26
27
|
}] });
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
};
|
|
28
|
+
function authorizationInterceptor(isAuthorizedRequest = req => req.url.startsWith('/api')) {
|
|
29
|
+
return (req, next) => {
|
|
30
|
+
if (!isAuthorizedRequest(req))
|
|
31
|
+
return next(req);
|
|
32
|
+
const getAuth = inject(AUTHORIZATION, { optional: true }) ?? null;
|
|
33
|
+
return from(getAuth()).pipe(take(1), mergeMap(token => next(token ? req.clone({ setHeaders: { Authorization: token } }) : req)));
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
;
|
|
37
|
+
function provideAuthorization(useFactory) {
|
|
38
|
+
return { provide: AUTHORIZATION, useFactory };
|
|
39
|
+
}
|
|
33
40
|
|
|
34
41
|
/**
|
|
35
42
|
* Generated bundle index. Do not edit.
|
|
36
43
|
*/
|
|
37
44
|
|
|
38
|
-
export {
|
|
45
|
+
export { AUTHORIZATION, AuthorizationInterceptor, authorizationInterceptor, provideAuthorization };
|
|
39
46
|
//# sourceMappingURL=ng-atomic-common-interceptors-authorization.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-atomic-common-interceptors-authorization.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/interceptors/authorization/authorization.interceptor.ts","../../../../../packages/@ng-atomic/common/src/lib/interceptors/authorization/ng-atomic-common-interceptors-authorization.ts"],"sourcesContent":["import { Injectable, InjectionToken, inject } from '@angular/core';\nimport { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpInterceptorFn } from '@angular/common/http';\nimport { from, Observable } from 'rxjs';\nimport { mergeMap, take } from 'rxjs/operators';\n\nexport type
|
|
1
|
+
{"version":3,"file":"ng-atomic-common-interceptors-authorization.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/interceptors/authorization/authorization.interceptor.ts","../../../../../packages/@ng-atomic/common/src/lib/interceptors/authorization/ng-atomic-common-interceptors-authorization.ts"],"sourcesContent":["import { Injectable, InjectionToken, Provider, inject } from '@angular/core';\nimport { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpInterceptorFn } from '@angular/common/http';\nimport { from, Observable } from 'rxjs';\nimport { mergeMap, take } from 'rxjs/operators';\n\nexport type GetAuthorization = () => Promise<string | null> | Observable<string | null>;\nexport const AUTHORIZATION = new InjectionToken<GetAuthorization>('[@ng-atomic/common] AUTHORIZATION');\n\n/** @deprecated use `authorizationInterceptor` instead. */\n@Injectable()\nexport class AuthorizationInterceptor implements HttpInterceptor {\n\n private getAuth = inject(AUTHORIZATION);\n\n intercept(req: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n if (!req.url.startsWith('/api')) return next.handle(req);\n\n return from(this.getAuth())\n .pipe(take(1))\n .pipe(mergeMap(idToken => next.handle(idToken ? this.getRequestWithToken(req, idToken) : req)));\n }\n\n private getRequestWithToken(req: HttpRequest<unknown>, token: string) {\n return req.clone({ setHeaders: {Authorization: token} });\n }\n}\n\nexport function authorizationInterceptor(\n isAuthorizedRequest: (req: HttpRequest<unknown>) => boolean = req => req.url.startsWith('/api')\n): HttpInterceptorFn {\n return (req, next) => {\n if (!isAuthorizedRequest(req)) return next(req);\n const getAuth = inject(AUTHORIZATION, { optional: true }) ?? null;\n return from(getAuth()).pipe(\n take(1),\n mergeMap(token => next(token ? req.clone({ setHeaders: {Authorization: token} }) : req)),\n );\n };\n};\n\nexport function provideAuthorization(useFactory: () => GetAuthorization): Provider {\n return { provide: AUTHORIZATION, useFactory };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;MAMa,aAAa,GAAG,IAAI,cAAc,CAAmB,mCAAmC,EAAE;AAEvG;MAEa,wBAAwB,CAAA;AADrC,IAAA,WAAA,GAAA;AAGU,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AAazC,KAAA;IAXC,SAAS,CAAC,GAAyB,EAAE,IAAiB,EAAA;QACpD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAEzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACxB,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACb,aAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;KACnG;IAEO,mBAAmB,CAAC,GAAyB,EAAE,KAAa,EAAA;AAClE,QAAA,OAAO,GAAG,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,EAAC,aAAa,EAAE,KAAK,EAAC,EAAE,CAAC,CAAC;KAC1D;8GAdU,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAxB,wBAAwB,EAAA,CAAA,CAAA,EAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC,UAAU;;AAkBK,SAAA,wBAAwB,CACtC,mBAAA,GAA8D,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAA;AAE/F,IAAA,OAAO,CAAC,GAAG,EAAE,IAAI,KAAI;AACnB,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AAChD,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC;QAClE,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CACzB,IAAI,CAAC,CAAC,CAAC,EACP,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,EAAC,aAAa,EAAE,KAAK,EAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CACzF,CAAC;AACJ,KAAC,CAAC;AACJ,CAAC;AAAA,CAAC;AAEI,SAAU,oBAAoB,CAAC,UAAkC,EAAA;AACrE,IAAA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;AAChD;;AC1CA;;AAEG;;;;"}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { NgModule
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
3
|
import { CommonModule } from '@angular/common';
|
|
4
4
|
import { HTTP_INTERCEPTORS } from '@angular/common/http';
|
|
5
|
-
import { AuthorizationInterceptor
|
|
5
|
+
import { AuthorizationInterceptor } from '@ng-atomic/common/interceptors/authorization';
|
|
6
6
|
import { ThrottleInterceptor } from '@ng-atomic/common/interceptors/throttle';
|
|
7
|
-
import { AuthService } from '@ng-atomic/common/services/auth';
|
|
8
|
-
import { switchMap, of, map } from 'rxjs';
|
|
9
7
|
|
|
10
8
|
class InterceptorsModule {
|
|
11
9
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: InterceptorsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
@@ -21,7 +19,6 @@ class InterceptorsModule {
|
|
|
21
19
|
useClass: ThrottleInterceptor,
|
|
22
20
|
multi: true
|
|
23
21
|
},
|
|
24
|
-
provideAuthorization()
|
|
25
22
|
], imports: [CommonModule] }); }
|
|
26
23
|
}
|
|
27
24
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: InterceptorsModule, decorators: [{
|
|
@@ -42,20 +39,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
|
|
|
42
39
|
useClass: ThrottleInterceptor,
|
|
43
40
|
multi: true
|
|
44
41
|
},
|
|
45
|
-
provideAuthorization()
|
|
46
42
|
],
|
|
47
43
|
}]
|
|
48
44
|
}] });
|
|
49
|
-
function provideAuthorization() {
|
|
50
|
-
return {
|
|
51
|
-
provide: PROVIDE_AUTHORIZATION,
|
|
52
|
-
useValue: () => inject(AuthService).auth$.pipe(switchMap(auth => auth ? auth.getIdToken() : of('')), map(token => `Bearer ${token}`)),
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
45
|
|
|
56
46
|
/**
|
|
57
47
|
* Generated bundle index. Do not edit.
|
|
58
48
|
*/
|
|
59
49
|
|
|
60
|
-
export { InterceptorsModule
|
|
50
|
+
export { InterceptorsModule };
|
|
61
51
|
//# sourceMappingURL=ng-atomic-common-interceptors.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-atomic-common-interceptors.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/interceptors/interceptors.module.ts","../../../../../packages/@ng-atomic/common/src/lib/interceptors/ng-atomic-common-interceptors.ts"],"sourcesContent":["import { NgModule
|
|
1
|
+
{"version":3,"file":"ng-atomic-common-interceptors.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/interceptors/interceptors.module.ts","../../../../../packages/@ng-atomic/common/src/lib/interceptors/ng-atomic-common-interceptors.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { AuthorizationInterceptor } from '@ng-atomic/common/interceptors/authorization';\nimport { ThrottleInterceptor } from '@ng-atomic/common/interceptors/throttle';\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule\n ],\n providers: [\n {\n provide: HTTP_INTERCEPTORS,\n useClass: AuthorizationInterceptor,\n multi: true\n },\n {\n provide: HTTP_INTERCEPTORS,\n useClass: ThrottleInterceptor,\n multi: true\n },\n ],\n})\nexport class InterceptorsModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;MAwBa,kBAAkB,CAAA;8GAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,YAf3B,YAAY,CAAA,EAAA,CAAA,CAAA,EAAA;AAeH,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,EAblB,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,QAAQ,EAAE,wBAAwB;AAClC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,QAAQ,EAAE,mBAAmB;AAC7B,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,OAAA,EAAA,CAbC,YAAY,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAeH,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAlB9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE;wBACP,YAAY;AACb,qBAAA;AACD,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,QAAQ,EAAE,wBAAwB;AAClC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,QAAQ,EAAE,mBAAmB;AAC7B,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA;AACF,iBAAA,CAAA;;;ACvBD;;AAEG;;;;"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { InjectionToken } from '@angular/core';
|
|
1
|
+
import { InjectionToken, Provider } from '@angular/core';
|
|
2
2
|
import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpInterceptorFn } from '@angular/common/http';
|
|
3
3
|
import { Observable } from 'rxjs';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
|
-
export type
|
|
6
|
-
export declare const
|
|
5
|
+
export type GetAuthorization = () => Promise<string | null> | Observable<string | null>;
|
|
6
|
+
export declare const AUTHORIZATION: InjectionToken<GetAuthorization>;
|
|
7
|
+
/** @deprecated use `authorizationInterceptor` instead. */
|
|
7
8
|
export declare class AuthorizationInterceptor implements HttpInterceptor {
|
|
8
9
|
private getAuth;
|
|
9
10
|
intercept(req: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>>;
|
|
@@ -11,4 +12,5 @@ export declare class AuthorizationInterceptor implements HttpInterceptor {
|
|
|
11
12
|
static ɵfac: i0.ɵɵFactoryDeclaration<AuthorizationInterceptor, never>;
|
|
12
13
|
static ɵprov: i0.ɵɵInjectableDeclaration<AuthorizationInterceptor>;
|
|
13
14
|
}
|
|
14
|
-
export declare
|
|
15
|
+
export declare function authorizationInterceptor(isAuthorizedRequest?: (req: HttpRequest<unknown>) => boolean): HttpInterceptorFn;
|
|
16
|
+
export declare function provideAuthorization(useFactory: () => GetAuthorization): Provider;
|
|
@@ -5,7 +5,3 @@ export declare class InterceptorsModule {
|
|
|
5
5
|
static ɵmod: i0.ɵɵNgModuleDeclaration<InterceptorsModule, never, [typeof i1.CommonModule], never>;
|
|
6
6
|
static ɵinj: i0.ɵɵInjectorDeclaration<InterceptorsModule>;
|
|
7
7
|
}
|
|
8
|
-
export declare function provideAuthorization(): {
|
|
9
|
-
provide: import("@angular/core").InjectionToken<import("@ng-atomic/common/interceptors/authorization").ProvideAuthorization>;
|
|
10
|
-
useValue: () => import("rxjs").Observable<string>;
|
|
11
|
-
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ng-atomic/common",
|
|
3
|
-
"version": "18.
|
|
3
|
+
"version": "18.7.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/cdk": "^18.0.0",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"@angular/material": "^18.0.0",
|
|
12
12
|
"@angular/router": "^18.0.0",
|
|
13
13
|
"@ngrx/component-store": "^18.0.0",
|
|
14
|
-
"@nx-ddd/core": "18.
|
|
14
|
+
"@nx-ddd/core": "18.7.0",
|
|
15
15
|
"dayjs": "1.11.12",
|
|
16
16
|
"flat": "^6.0.0",
|
|
17
17
|
"lodash-es": "^4.17.15",
|