@acontplus/ng-config 1.0.5 → 1.1.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/README.md +260 -28
- package/fesm2022/acontplus-ng-config.mjs +29 -27
- package/fesm2022/acontplus-ng-config.mjs.map +1 -1
- package/index.d.ts +28 -21
- package/package.json +13 -6
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# @acontplus/ng-config
|
|
2
2
|
|
|
3
|
-
Angular configuration library
|
|
4
|
-
|
|
3
|
+
Angular configuration library providing dependency injection tokens, repository
|
|
4
|
+
interfaces, and configuration constants for AcontPlus applications.
|
|
5
5
|
|
|
6
6
|
## Installation
|
|
7
7
|
|
|
@@ -11,52 +11,284 @@ npm install @acontplus/ng-config
|
|
|
11
11
|
|
|
12
12
|
## Features
|
|
13
13
|
|
|
14
|
-
- **
|
|
15
|
-
|
|
16
|
-
- **
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
- **TypeScript Support**: Full type safety with comprehensive
|
|
22
|
-
definitions
|
|
14
|
+
- **Injection Tokens**: Type-safe DI tokens for environment, core config, and
|
|
15
|
+
authentication
|
|
16
|
+
- **Repository Interfaces**: Base repository patterns and auth token repository
|
|
17
|
+
contracts
|
|
18
|
+
- **Configuration Constants**: Authentication and application configuration
|
|
19
|
+
constants
|
|
20
|
+
- **Base Repository**: Abstract base repository with common CRUD operations
|
|
21
|
+
- **TypeScript Support**: Full type safety with comprehensive interfaces
|
|
23
22
|
|
|
24
|
-
##
|
|
23
|
+
## Quick Start
|
|
25
24
|
|
|
26
|
-
### Environment Configuration
|
|
25
|
+
### 1. Provide Environment Configuration
|
|
27
26
|
|
|
28
27
|
```typescript
|
|
28
|
+
// app.config.ts
|
|
29
|
+
import { ApplicationConfig } from '@angular/core';
|
|
29
30
|
import { ENVIRONMENT } from '@acontplus/ng-config';
|
|
31
|
+
import { Environment } from '@acontplus/core';
|
|
32
|
+
import { environment } from './environments/environment';
|
|
30
33
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
34
|
+
export const appConfig: ApplicationConfig = {
|
|
35
|
+
providers: [{ provide: ENVIRONMENT, useValue: environment }],
|
|
36
|
+
};
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
```typescript
|
|
40
|
+
// environments/environment.ts
|
|
41
|
+
import { Environment } from '@acontplus/core';
|
|
42
|
+
|
|
43
|
+
export const environment: Environment = {
|
|
44
|
+
isProduction: false,
|
|
45
|
+
apiBaseUrl: 'http://localhost:3000/api/',
|
|
46
|
+
tokenKey: 'access_token',
|
|
47
|
+
refreshTokenKey: 'refresh_token',
|
|
48
|
+
clientId: 'my-app',
|
|
49
|
+
loginRoute: 'login',
|
|
50
|
+
};
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 2. Inject and Use Environment
|
|
54
|
+
|
|
55
|
+
```typescript
|
|
56
|
+
import { inject, Injectable } from '@angular/core';
|
|
57
|
+
import { ENVIRONMENT } from '@acontplus/ng-config';
|
|
58
|
+
|
|
59
|
+
@Injectable({ providedIn: 'root' })
|
|
60
|
+
export class ApiService {
|
|
61
|
+
private environment = inject(ENVIRONMENT);
|
|
62
|
+
|
|
63
|
+
getApiUrl(): string {
|
|
64
|
+
return this.environment.apiBaseUrl;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
isProduction(): boolean {
|
|
68
|
+
return this.environment.isProduction;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## API Reference
|
|
74
|
+
|
|
75
|
+
### ENVIRONMENT Token
|
|
76
|
+
|
|
77
|
+
Injection token for environment configuration with default factory.
|
|
78
|
+
|
|
79
|
+
**Type:** `InjectionToken<Environment>`
|
|
80
|
+
|
|
81
|
+
**Default Value:**
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
{
|
|
85
|
+
isProduction: false,
|
|
86
|
+
apiBaseUrl: 'http://localhost:4200/api/',
|
|
87
|
+
tokenKey: 'access_token',
|
|
88
|
+
refreshTokenKey: 'refresh_token',
|
|
89
|
+
clientId: 'angular-app',
|
|
90
|
+
loginRoute: 'auth',
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**Environment Interface:**
|
|
95
|
+
|
|
96
|
+
```typescript
|
|
97
|
+
interface Environment {
|
|
98
|
+
apiBaseUrl: string; // Base URL for API requests
|
|
99
|
+
isProduction: boolean; // Production mode flag
|
|
100
|
+
tokenKey: string; // Storage key for access token
|
|
101
|
+
refreshTokenKey: string; // Storage key for refresh token
|
|
102
|
+
clientId: string; // Application client identifier
|
|
103
|
+
loginRoute: string; // Route path for login page
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**Usage:**
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
import { inject } from '@angular/core';
|
|
111
|
+
import { ENVIRONMENT } from '@acontplus/ng-config';
|
|
112
|
+
|
|
113
|
+
@Injectable({ providedIn: 'root' })
|
|
114
|
+
export class AuthService {
|
|
115
|
+
private env = inject(ENVIRONMENT);
|
|
116
|
+
|
|
117
|
+
getTokenKey(): string {
|
|
118
|
+
return this.env.tokenKey;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
getLoginRoute(): string {
|
|
122
|
+
return this.env.loginRoute;
|
|
35
123
|
}
|
|
36
124
|
}
|
|
37
125
|
```
|
|
38
126
|
|
|
39
|
-
###
|
|
127
|
+
### CORE_CONFIG Token
|
|
128
|
+
|
|
129
|
+
Injection token for core application configuration.
|
|
130
|
+
|
|
131
|
+
**Type:** `InjectionToken<CoreConfig>`
|
|
132
|
+
|
|
133
|
+
**Usage:**
|
|
40
134
|
|
|
41
135
|
```typescript
|
|
42
|
-
import {
|
|
136
|
+
import { inject } from '@angular/core';
|
|
137
|
+
import { CORE_CONFIG } from '@acontplus/ng-config';
|
|
43
138
|
|
|
44
|
-
@
|
|
45
|
-
export class
|
|
46
|
-
|
|
47
|
-
|
|
139
|
+
@Injectable({ providedIn: 'root' })
|
|
140
|
+
export class ConfigService {
|
|
141
|
+
private config = inject(CORE_CONFIG);
|
|
142
|
+
|
|
143
|
+
getApiTimeout(): number {
|
|
144
|
+
return this.config.apiTimeout;
|
|
48
145
|
}
|
|
49
146
|
}
|
|
50
147
|
```
|
|
51
148
|
|
|
52
|
-
###
|
|
149
|
+
### AUTH_TOKEN Token
|
|
150
|
+
|
|
151
|
+
Injection token for authentication token configuration.
|
|
152
|
+
|
|
153
|
+
**Type:** `InjectionToken<string>`
|
|
154
|
+
|
|
155
|
+
**Usage:**
|
|
156
|
+
|
|
157
|
+
```typescript
|
|
158
|
+
import { inject } from '@angular/core';
|
|
159
|
+
import { AUTH_TOKEN } from '@acontplus/ng-config';
|
|
160
|
+
|
|
161
|
+
@Injectable({ providedIn: 'root' })
|
|
162
|
+
export class TokenService {
|
|
163
|
+
private tokenKey = inject(AUTH_TOKEN);
|
|
164
|
+
|
|
165
|
+
getStorageKey(): string {
|
|
166
|
+
return this.tokenKey;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Repository Interfaces
|
|
172
|
+
|
|
173
|
+
### AuthTokenRepository
|
|
174
|
+
|
|
175
|
+
Interface for authentication token storage and retrieval.
|
|
176
|
+
|
|
177
|
+
```typescript
|
|
178
|
+
export interface AuthTokenRepository {
|
|
179
|
+
getToken(): string | null;
|
|
180
|
+
setToken(token: string): void;
|
|
181
|
+
removeToken(): void;
|
|
182
|
+
getRefreshToken(): string | null;
|
|
183
|
+
setRefreshToken(token: string): void;
|
|
184
|
+
removeRefreshToken(): void;
|
|
185
|
+
}
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
**Usage:**
|
|
189
|
+
|
|
190
|
+
```typescript
|
|
191
|
+
import { AuthTokenRepository } from '@acontplus/ng-config';
|
|
192
|
+
|
|
193
|
+
@Injectable({ providedIn: 'root' })
|
|
194
|
+
export class LocalStorageTokenRepository implements AuthTokenRepository {
|
|
195
|
+
getToken(): string | null {
|
|
196
|
+
return localStorage.getItem('access_token');
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
setToken(token: string): void {
|
|
200
|
+
localStorage.setItem('access_token', token);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
removeToken(): void {
|
|
204
|
+
localStorage.removeItem('access_token');
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
getRefreshToken(): string | null {
|
|
208
|
+
return localStorage.getItem('refresh_token');
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
setRefreshToken(token: string): void {
|
|
212
|
+
localStorage.setItem('refresh_token', token);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
removeRefreshToken(): void {
|
|
216
|
+
localStorage.removeItem('refresh_token');
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### BaseRepository
|
|
222
|
+
|
|
223
|
+
Abstract base repository with common CRUD operations.
|
|
53
224
|
|
|
54
225
|
```typescript
|
|
55
|
-
|
|
226
|
+
export abstract class BaseRepository<T, ID> {
|
|
227
|
+
abstract findById(id: ID): Promise<T | null>;
|
|
228
|
+
abstract findAll(): Promise<T[]>;
|
|
229
|
+
abstract create(entity: Omit<T, 'id'>): Promise<T>;
|
|
230
|
+
abstract update(id: ID, entity: Partial<T>): Promise<T>;
|
|
231
|
+
abstract delete(id: ID): Promise<void>;
|
|
232
|
+
}
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
**Usage:**
|
|
236
|
+
|
|
237
|
+
```typescript
|
|
238
|
+
import { BaseRepository } from '@acontplus/ng-config';
|
|
239
|
+
import { Injectable } from '@angular/core';
|
|
240
|
+
import { HttpClient } from '@angular/common/http';
|
|
241
|
+
|
|
242
|
+
interface User {
|
|
243
|
+
id: number;
|
|
244
|
+
name: string;
|
|
245
|
+
email: string;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
@Injectable({ providedIn: 'root' })
|
|
249
|
+
export class UserRepository extends BaseRepository<User, number> {
|
|
250
|
+
constructor(private http: HttpClient) {
|
|
251
|
+
super();
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
async findById(id: number): Promise<User | null> {
|
|
255
|
+
return this.http.get<User>(`/api/users/${id}`).toPromise() || null;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
async findAll(): Promise<User[]> {
|
|
259
|
+
return this.http.get<User[]>('/api/users').toPromise() || [];
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
async create(user: Omit<User, 'id'>): Promise<User> {
|
|
263
|
+
return this.http
|
|
264
|
+
.post<User>('/api/users', user)
|
|
265
|
+
.toPromise() as Promise<User>;
|
|
266
|
+
}
|
|
56
267
|
|
|
57
|
-
|
|
268
|
+
async update(id: number, user: Partial<User>): Promise<User> {
|
|
269
|
+
return this.http
|
|
270
|
+
.put<User>(`/api/users/${id}`, user)
|
|
271
|
+
.toPromise() as Promise<User>;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
async delete(id: number): Promise<void> {
|
|
275
|
+
await this.http.delete(`/api/users/${id}`).toPromise();
|
|
276
|
+
}
|
|
277
|
+
}
|
|
58
278
|
```
|
|
59
279
|
|
|
60
|
-
##
|
|
280
|
+
## Configuration Constants
|
|
61
281
|
|
|
62
|
-
|
|
282
|
+
### Authentication Constants
|
|
283
|
+
|
|
284
|
+
```typescript
|
|
285
|
+
import { AUTH_CONSTANTS, CONFIG_CONSTANTS } from '@acontplus/ng-config';
|
|
286
|
+
|
|
287
|
+
// Authentication configuration
|
|
288
|
+
const tokenExpiry = AUTH_CONSTANTS.TOKEN_EXPIRY_TIME;
|
|
289
|
+
const refreshThreshold = AUTH_CONSTANTS.REFRESH_THRESHOLD;
|
|
290
|
+
|
|
291
|
+
// Application configuration
|
|
292
|
+
const apiTimeout = CONFIG_CONSTANTS.DEFAULT_API_TIMEOUT;
|
|
293
|
+
const retryAttempts = CONFIG_CONSTANTS.MAX_RETRY_ATTEMPTS;
|
|
294
|
+
```
|
|
@@ -1,13 +1,38 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { InjectionToken, inject, Injectable } from '@angular/core';
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
3
2
|
|
|
4
|
-
// src/lib/constants/auth.constants.ts
|
|
3
|
+
// src/lib/constants/auth.app.constants.ts
|
|
5
4
|
const AUTH_API = {
|
|
6
5
|
AUTH: 'auth/',
|
|
7
6
|
};
|
|
8
7
|
|
|
8
|
+
const DEFAULT_CONFIG = {
|
|
9
|
+
apiBaseUrl: '',
|
|
10
|
+
apiTimeout: 30000,
|
|
11
|
+
retryAttempts: 2,
|
|
12
|
+
retryDelay: 1000,
|
|
13
|
+
enableCorrelationTracking: true,
|
|
14
|
+
enableRequestLogging: false,
|
|
15
|
+
enableErrorLogging: true,
|
|
16
|
+
enableToastNotifications: true,
|
|
17
|
+
includeAuthToken: true,
|
|
18
|
+
authTokenHeader: 'Authorization',
|
|
19
|
+
enableMultiTenancy: true,
|
|
20
|
+
tenantIdHeader: 'Tenant-Id',
|
|
21
|
+
logLevel: 'info',
|
|
22
|
+
enableConsoleLogging: true,
|
|
23
|
+
customHeaders: {},
|
|
24
|
+
excludeUrls: [],
|
|
25
|
+
excludeMethods: [],
|
|
26
|
+
};
|
|
27
|
+
|
|
9
28
|
// src/lib/constants/index.ts
|
|
10
29
|
|
|
30
|
+
const AUTH_TOKEN = new InjectionToken('AUTH_TOKEN_PROVIDER');
|
|
31
|
+
|
|
32
|
+
const CORE_CONFIG = new InjectionToken('CORE_CONFIG', {
|
|
33
|
+
factory: () => DEFAULT_CONFIG,
|
|
34
|
+
});
|
|
35
|
+
|
|
11
36
|
/**
|
|
12
37
|
* @const ENVIRONMENT
|
|
13
38
|
* Injection token for the environment interface to be provided by the applications.
|
|
@@ -23,32 +48,9 @@ const ENVIRONMENT = new InjectionToken('ENVIRONMENT', {
|
|
|
23
48
|
}),
|
|
24
49
|
});
|
|
25
50
|
|
|
26
|
-
class AppConfigService {
|
|
27
|
-
environment = inject(ENVIRONMENT);
|
|
28
|
-
defaultTimeout = 30000; // Default timeout
|
|
29
|
-
get apiUrl() {
|
|
30
|
-
return this.environment.apiBaseUrl;
|
|
31
|
-
}
|
|
32
|
-
get apiTimeout() {
|
|
33
|
-
return this.defaultTimeout;
|
|
34
|
-
}
|
|
35
|
-
get enableLogging() {
|
|
36
|
-
return !this.environment.isProduction;
|
|
37
|
-
}
|
|
38
|
-
get production() {
|
|
39
|
-
return this.environment.isProduction;
|
|
40
|
-
}
|
|
41
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: AppConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
42
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: AppConfigService, providedIn: 'root' });
|
|
43
|
-
}
|
|
44
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: AppConfigService, decorators: [{
|
|
45
|
-
type: Injectable,
|
|
46
|
-
args: [{ providedIn: 'root' }]
|
|
47
|
-
}] });
|
|
48
|
-
|
|
49
51
|
/**
|
|
50
52
|
* Generated bundle index. Do not edit.
|
|
51
53
|
*/
|
|
52
54
|
|
|
53
|
-
export { AUTH_API,
|
|
55
|
+
export { AUTH_API, AUTH_TOKEN, CORE_CONFIG, DEFAULT_CONFIG, ENVIRONMENT };
|
|
54
56
|
//# sourceMappingURL=acontplus-ng-config.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acontplus-ng-config.mjs","sources":["../tmp-esm2022/lib/constants/auth.constants.js","../tmp-esm2022/lib/constants/index.js","../tmp-esm2022/lib/
|
|
1
|
+
{"version":3,"file":"acontplus-ng-config.mjs","sources":["../tmp-esm2022/lib/constants/auth.constants.js","../tmp-esm2022/lib/constants/config.constants.js","../tmp-esm2022/lib/constants/index.js","../tmp-esm2022/lib/tokens/auth-token.js","../tmp-esm2022/lib/tokens/core-config-token.js","../tmp-esm2022/lib/tokens/environment-token.js","../tmp-esm2022/acontplus-ng-config.js"],"sourcesContent":["// src/lib/constants/auth.app.constants.ts\nexport const AUTH_API = {\n AUTH: 'auth/',\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5jb25zdGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1jb25maWcvc3JjL2xpYi9jb25zdGFudHMvYXV0aC5jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMENBQTBDO0FBQzFDLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRztJQUN0QixJQUFJLEVBQUUsT0FBTztDQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzcmMvbGliL2NvbnN0YW50cy9hdXRoLmFwcC5jb25zdGFudHMudHNcbmV4cG9ydCBjb25zdCBBVVRIX0FQSSA9IHtcbiAgQVVUSDogJ2F1dGgvJyxcbn0gYXMgY29uc3Q7XG4iXX0=","export const DEFAULT_CONFIG = {\n apiBaseUrl: '',\n apiTimeout: 30000,\n retryAttempts: 2,\n retryDelay: 1000,\n enableCorrelationTracking: true,\n enableRequestLogging: false,\n enableErrorLogging: true,\n enableToastNotifications: true,\n includeAuthToken: true,\n authTokenHeader: 'Authorization',\n enableMultiTenancy: true,\n tenantIdHeader: 'Tenant-Id',\n logLevel: 'info',\n enableConsoleLogging: true,\n customHeaders: {},\n excludeUrls: [],\n excludeMethods: [],\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmNvbnN0YW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWNvbmZpZy9zcmMvbGliL2NvbnN0YW50cy9jb25maWcuY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBeUI7SUFDbEQsVUFBVSxFQUFFLEVBQUU7SUFDZCxVQUFVLEVBQUUsS0FBSztJQUNqQixhQUFhLEVBQUUsQ0FBQztJQUNoQixVQUFVLEVBQUUsSUFBSTtJQUNoQix5QkFBeUIsRUFBRSxJQUFJO0lBQy9CLG9CQUFvQixFQUFFLEtBQUs7SUFDM0Isa0JBQWtCLEVBQUUsSUFBSTtJQUN4Qix3QkFBd0IsRUFBRSxJQUFJO0lBQzlCLGdCQUFnQixFQUFFLElBQUk7SUFDdEIsZUFBZSxFQUFFLGVBQWU7SUFDaEMsa0JBQWtCLEVBQUUsSUFBSTtJQUN4QixjQUFjLEVBQUUsV0FBVztJQUMzQixRQUFRLEVBQUUsTUFBTTtJQUNoQixvQkFBb0IsRUFBRSxJQUFJO0lBQzFCLGFBQWEsRUFBRSxFQUFFO0lBQ2pCLFdBQVcsRUFBRSxFQUFFO0lBQ2YsY0FBYyxFQUFFLEVBQUU7Q0FDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvcmVDb25maWcgfSBmcm9tICdAYWNvbnRwbHVzL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9DT05GSUc6IFJlcXVpcmVkPENvcmVDb25maWc+ID0ge1xuICBhcGlCYXNlVXJsOiAnJyxcbiAgYXBpVGltZW91dDogMzAwMDAsXG4gIHJldHJ5QXR0ZW1wdHM6IDIsXG4gIHJldHJ5RGVsYXk6IDEwMDAsXG4gIGVuYWJsZUNvcnJlbGF0aW9uVHJhY2tpbmc6IHRydWUsXG4gIGVuYWJsZVJlcXVlc3RMb2dnaW5nOiBmYWxzZSxcbiAgZW5hYmxlRXJyb3JMb2dnaW5nOiB0cnVlLFxuICBlbmFibGVUb2FzdE5vdGlmaWNhdGlvbnM6IHRydWUsXG4gIGluY2x1ZGVBdXRoVG9rZW46IHRydWUsXG4gIGF1dGhUb2tlbkhlYWRlcjogJ0F1dGhvcml6YXRpb24nLFxuICBlbmFibGVNdWx0aVRlbmFuY3k6IHRydWUsXG4gIHRlbmFudElkSGVhZGVyOiAnVGVuYW50LUlkJyxcbiAgbG9nTGV2ZWw6ICdpbmZvJyxcbiAgZW5hYmxlQ29uc29sZUxvZ2dpbmc6IHRydWUsXG4gIGN1c3RvbUhlYWRlcnM6IHt9LFxuICBleGNsdWRlVXJsczogW10sXG4gIGV4Y2x1ZGVNZXRob2RzOiBbXSxcbn07XG4iXX0=","// src/lib/constants/index.ts\nexport * from './auth.constants';\nexport * from './config.constants';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1jb25maWcvc3JjL2xpYi9jb25zdGFudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkJBQTZCO0FBQzdCLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHNyYy9saWIvY29uc3RhbnRzL2luZGV4LnRzXG5leHBvcnQgKiBmcm9tICcuL2F1dGguY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uZmlnLmNvbnN0YW50cyc7XG4iXX0=","import { InjectionToken } from '@angular/core';\nexport const AUTH_TOKEN = new InjectionToken('AUTH_TOKEN_PROVIDER');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC10b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWNvbmZpZy9zcmMvbGliL3Rva2Vucy9hdXRoLXRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLElBQUksY0FBYyxDQUFzQixxQkFBcUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEF1dGhUb2tlblJlcG9zaXRvcnkgfSBmcm9tICcuLi9yZXBvc2l0b3JpZXMnO1xuXG5leHBvcnQgY29uc3QgQVVUSF9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBdXRoVG9rZW5SZXBvc2l0b3J5PignQVVUSF9UT0tFTl9QUk9WSURFUicpO1xuIl19","import { InjectionToken } from '@angular/core';\nimport { DEFAULT_CONFIG } from '../constants';\nexport const CORE_CONFIG = new InjectionToken('CORE_CONFIG', {\n factory: () => DEFAULT_CONFIG,\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1jb25maWctdG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1jb25maWcvc3JjL2xpYi90b2tlbnMvY29yZS1jb25maWctdG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTlDLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxJQUFJLGNBQWMsQ0FBYSxhQUFhLEVBQUU7SUFDdkUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLGNBQWM7Q0FDOUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvcmVDb25maWcgfSBmcm9tICdAYWNvbnRwbHVzL2NvcmUnO1xuaW1wb3J0IHsgREVGQVVMVF9DT05GSUcgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5leHBvcnQgY29uc3QgQ09SRV9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48Q29yZUNvbmZpZz4oJ0NPUkVfQ09ORklHJywge1xuICBmYWN0b3J5OiAoKSA9PiBERUZBVUxUX0NPTkZJRyxcbn0pO1xuIl19","import { InjectionToken } from '@angular/core';\n/**\n * @const ENVIRONMENT\n * Injection token for the environment interface to be provided by the applications.\n */\nexport const ENVIRONMENT = new InjectionToken('ENVIRONMENT', {\n factory: () => ({\n isProduction: false,\n apiBaseUrl: 'http://localhost:4200/api/',\n tokenKey: 'access_token',\n refreshTokenKey: 'refresh_token',\n clientId: 'angular-app',\n loginRoute: 'auth',\n }),\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQtdG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1jb25maWcvc3JjL2xpYi90b2tlbnMvZW52aXJvbm1lbnQtdG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvQzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxjQUFjLENBQWMsYUFBYSxFQUFFO0lBQ3hFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2QsWUFBWSxFQUFFLEtBQUs7UUFDbkIsVUFBVSxFQUFFLDRCQUE0QjtRQUN4QyxRQUFRLEVBQUUsY0FBYztRQUN4QixlQUFlLEVBQUUsZUFBZTtRQUNoQyxRQUFRLEVBQUUsYUFBYTtRQUN2QixVQUFVLEVBQUUsTUFBTTtLQUNuQixDQUFDO0NBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSAnQGFjb250cGx1cy9jb3JlJztcblxuLyoqXG4gKiBAY29uc3QgRU5WSVJPTk1FTlRcbiAqIEluamVjdGlvbiB0b2tlbiBmb3IgdGhlIGVudmlyb25tZW50IGludGVyZmFjZSB0byBiZSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb25zLlxuICovXG5leHBvcnQgY29uc3QgRU5WSVJPTk1FTlQgPSBuZXcgSW5qZWN0aW9uVG9rZW48RW52aXJvbm1lbnQ+KCdFTlZJUk9OTUVOVCcsIHtcbiAgZmFjdG9yeTogKCkgPT4gKHtcbiAgICBpc1Byb2R1Y3Rpb246IGZhbHNlLFxuICAgIGFwaUJhc2VVcmw6ICdodHRwOi8vbG9jYWxob3N0OjQyMDAvYXBpLycsXG4gICAgdG9rZW5LZXk6ICdhY2Nlc3NfdG9rZW4nLFxuICAgIHJlZnJlc2hUb2tlbktleTogJ3JlZnJlc2hfdG9rZW4nLFxuICAgIGNsaWVudElkOiAnYW5ndWxhci1hcHAnLFxuICAgIGxvZ2luUm91dGU6ICdhdXRoJyxcbiAgfSksXG59KTtcbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvbnRwbHVzLW5nLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWNvbmZpZy9zcmMvYWNvbnRwbHVzLW5nLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":";;AAAA;AACY,MAAC,QAAQ,GAAG;AACxB,IAAI,IAAI,EAAE,OAAO;AACjB;;ACHY,MAAC,cAAc,GAAG;AAC9B,IAAI,UAAU,EAAE,EAAE;AAClB,IAAI,UAAU,EAAE,KAAK;AACrB,IAAI,aAAa,EAAE,CAAC;AACpB,IAAI,UAAU,EAAE,IAAI;AACpB,IAAI,yBAAyB,EAAE,IAAI;AACnC,IAAI,oBAAoB,EAAE,KAAK;AAC/B,IAAI,kBAAkB,EAAE,IAAI;AAC5B,IAAI,wBAAwB,EAAE,IAAI;AAClC,IAAI,gBAAgB,EAAE,IAAI;AAC1B,IAAI,eAAe,EAAE,eAAe;AACpC,IAAI,kBAAkB,EAAE,IAAI;AAC5B,IAAI,cAAc,EAAE,WAAW;AAC/B,IAAI,QAAQ,EAAE,MAAM;AACpB,IAAI,oBAAoB,EAAE,IAAI;AAC9B,IAAI,aAAa,EAAE,EAAE;AACrB,IAAI,WAAW,EAAE,EAAE;AACnB,IAAI,cAAc,EAAE,EAAE;AACtB;;AClBA;;ACCY,MAAC,UAAU,GAAG,IAAI,cAAc,CAAC,qBAAqB;;ACCtD,MAAC,WAAW,GAAG,IAAI,cAAc,CAAC,aAAa,EAAE;AAC7D,IAAI,OAAO,EAAE,MAAM,cAAc;AACjC,CAAC;;ACHD;AACA;AACA;AACA;AACY,MAAC,WAAW,GAAG,IAAI,cAAc,CAAC,aAAa,EAAE;AAC7D,IAAI,OAAO,EAAE,OAAO;AACpB,QAAQ,YAAY,EAAE,KAAK;AAC3B,QAAQ,UAAU,EAAE,4BAA4B;AAChD,QAAQ,QAAQ,EAAE,cAAc;AAChC,QAAQ,eAAe,EAAE,eAAe;AACxC,QAAQ,QAAQ,EAAE,aAAa;AAC/B,QAAQ,UAAU,EAAE,MAAM;AAC1B,KAAK,CAAC;AACN,CAAC;;ACdD;AACA;AACA;;;;"}
|
package/index.d.ts
CHANGED
|
@@ -1,33 +1,40 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { CoreConfig, UserData, PaginationParams, PagedResult, Environment } from '@acontplus/core';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
2
3
|
import { InjectionToken } from '@angular/core';
|
|
3
|
-
import { Environment } from '@acontplus/core';
|
|
4
4
|
|
|
5
5
|
declare const AUTH_API: {
|
|
6
6
|
readonly AUTH: "auth/";
|
|
7
7
|
};
|
|
8
8
|
|
|
9
|
+
declare const DEFAULT_CONFIG: Required<CoreConfig>;
|
|
10
|
+
|
|
11
|
+
interface AuthTokenRepository {
|
|
12
|
+
getToken(): string | null;
|
|
13
|
+
isAuthenticated(): boolean;
|
|
14
|
+
getRefreshToken?(): string | null;
|
|
15
|
+
getUserData(): UserData | null;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
interface BaseRepository<TEntity = any, TId = number> {
|
|
19
|
+
getById?(id: TId): Observable<TEntity>;
|
|
20
|
+
getAll?(pagination?: PaginationParams): Observable<PagedResult<TEntity>>;
|
|
21
|
+
create?(entity: Partial<TEntity>): Observable<TEntity>;
|
|
22
|
+
update?(id: TId, entity: Partial<TEntity>): Observable<TEntity>;
|
|
23
|
+
remove?(id: TId): Observable<void>;
|
|
24
|
+
}
|
|
25
|
+
interface SearchableRepository<TEntity = any, TId = number> extends BaseRepository<TEntity, TId> {
|
|
26
|
+
search?(query: string, pagination: PaginationParams): Observable<PagedResult<TEntity>>;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
declare const AUTH_TOKEN: InjectionToken<AuthTokenRepository>;
|
|
30
|
+
|
|
31
|
+
declare const CORE_CONFIG: InjectionToken<CoreConfig>;
|
|
32
|
+
|
|
9
33
|
/**
|
|
10
34
|
* @const ENVIRONMENT
|
|
11
35
|
* Injection token for the environment interface to be provided by the applications.
|
|
12
36
|
*/
|
|
13
37
|
declare const ENVIRONMENT: InjectionToken<Environment>;
|
|
14
38
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
apiTimeout: number;
|
|
18
|
-
enableLogging: boolean;
|
|
19
|
-
production: boolean;
|
|
20
|
-
}
|
|
21
|
-
declare class AppConfigService implements IAppConfig {
|
|
22
|
-
private environment;
|
|
23
|
-
private readonly defaultTimeout;
|
|
24
|
-
get apiUrl(): string;
|
|
25
|
-
get apiTimeout(): number;
|
|
26
|
-
get enableLogging(): boolean;
|
|
27
|
-
get production(): boolean;
|
|
28
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<AppConfigService, never>;
|
|
29
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<AppConfigService>;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export { AUTH_API, AppConfigService, ENVIRONMENT };
|
|
33
|
-
export type { IAppConfig };
|
|
39
|
+
export { AUTH_API, AUTH_TOKEN, CORE_CONFIG, DEFAULT_CONFIG, ENVIRONMENT };
|
|
40
|
+
export type { AuthTokenRepository, BaseRepository, SearchableRepository };
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@acontplus/ng-config",
|
|
3
|
-
"version": "1.0
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "Angular configuration management library providing environment tokens, application settings, dependency injection patterns, and runtime configuration services for enterprise applications.",
|
|
5
5
|
"peerDependencies": {
|
|
6
|
-
"@acontplus/core": "^1.0
|
|
6
|
+
"@acontplus/core": "^1.1.0",
|
|
7
7
|
"@angular/common": "^20.3.2",
|
|
8
8
|
"@angular/core": "^20.3.2"
|
|
9
9
|
},
|
|
@@ -28,10 +28,17 @@
|
|
|
28
28
|
"acontplus",
|
|
29
29
|
"angular",
|
|
30
30
|
"configuration",
|
|
31
|
-
"environment",
|
|
31
|
+
"environment-tokens",
|
|
32
|
+
"app-config",
|
|
33
|
+
"runtime-configuration",
|
|
34
|
+
"settings-management",
|
|
35
|
+
"injection-tokens",
|
|
36
|
+
"dependency-injection",
|
|
37
|
+
"config-services",
|
|
38
|
+
"environment-management",
|
|
32
39
|
"typescript",
|
|
33
|
-
"
|
|
34
|
-
"
|
|
40
|
+
"enterprise",
|
|
41
|
+
"frontend"
|
|
35
42
|
],
|
|
36
43
|
"author": "Ivan Paz <ifer343@gmail.com>",
|
|
37
44
|
"license": "MIT",
|