@intellegens/cornerstone-client-angular 0.0.9999-alpha-42 → 0.0.9999-alpha-44

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.
@@ -1,7 +1,7 @@
1
- import { fromEvent, switchMap, throwError, race, firstValueFrom, from, tap, combineLatest } from 'rxjs';
1
+ import { fromEvent, switchMap, throwError, race, firstValueFrom, from, tap, combineLatest, Observable } from 'rxjs';
2
2
  import * as i0 from '@angular/core';
3
3
  import { signal, Injectable } from '@angular/core';
4
- import { AuthService, PolicyBase } from '@intellegens/cornerstone-client';
4
+ import { AuthService, PolicyBase, CollectionViewAdapter, SearchAdapter } from '@intellegens/cornerstone-client';
5
5
  export * from '@intellegens/cornerstone-client';
6
6
  import { toObservable } from '@angular/core/rxjs-interop';
7
7
  import { map } from 'rxjs/operators';
@@ -173,76 +173,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
173
173
  }]
174
174
  }] });
175
175
 
176
- /**
177
- * Base class for policies. It implements the IPolicy interface.
178
- *
179
- * @class PolicyBase
180
- * @template TParams - The type of the parameters that will be passed to the policy check function.
181
- */
182
- class PolicyBase$ {
183
- _verificationFn;
184
- /**
185
- * Creates a new policy.
186
- *
187
- * @param verificationFn - The function that will be used to verify the policy.
188
- */
189
- constructor(verificationFn) {
190
- this._verificationFn = verificationFn;
191
- }
192
- /**
193
- * Checks if the policy is valid for the given parameters.
194
- *
195
- * @return A promise that resolves if the policy is valid, rejects otherwise.
196
- * @throws {Error} Error if not implemented.
197
- */
198
- async check() {
199
- throw new Error('Not implemented');
200
- }
201
- /**
202
- * Checks if the policy is valid for the given parameters.
203
- *
204
- * @return An observable that emits a boolean indicating whether the policy is valid.
205
- * @throws {Error} Error if not implemented.
206
- */
207
- check$() {
208
- throw new Error('Not implemented');
209
- }
210
- }
211
- /**
212
- * Class for policies that can be checked.
213
- *
214
- * @class Policy
215
- * @template TParams - The type of the parameters that will be passed to the policy check function.
216
- */
217
- class Policy$ extends PolicyBase$ {
218
- /**
219
- * Creates a new policy.
220
- *
221
- * @param verificationFn - The function that will be used to verify the policy.
222
- */
223
- constructor(verificationFn) {
224
- super(verificationFn);
225
- }
226
- /**
227
- * Checks if the policy is valid for the given parameters.
228
- *
229
- * @param params - Parameters to pass to the policy check function.
230
- * @return A promise that resolves if the policy is valid, rejects otherwise.
231
- */
232
- async check(...params) {
233
- return firstValueFrom(this._verificationFn(...params));
234
- }
235
- /**
236
- * Checks if the policy is valid for the given parameters.
237
- *
238
- * @param params - Parameters to pass to the policy check function.
239
- * @return An observable that emits a boolean indicating whether the policy is valid.
240
- */
241
- check$(...params) {
242
- return this._verificationFn(...params);
243
- }
244
- }
245
-
246
176
  /**
247
177
  * Checks if a policy is valid for the given parameters.
248
178
  *
@@ -291,7 +221,7 @@ function compose$(composition, ...policies) {
291
221
  // Wait for all observables to complete
292
222
  return new Promise((resolve, reject) => {
293
223
  combineLatest(observables).subscribe({
294
- next: (results) => {
224
+ next: results => {
295
225
  if (composition === 'AND') {
296
226
  resolve(results.every(result => result === true));
297
227
  }
@@ -302,7 +232,7 @@ function compose$(composition, ...policies) {
302
232
  reject(new Error('Invalid composition'));
303
233
  }
304
234
  },
305
- error: (err) => reject(err),
235
+ error: err => reject(err),
306
236
  });
307
237
  });
308
238
  },
@@ -330,6 +260,266 @@ function compose$(composition, ...policies) {
330
260
  };
331
261
  }
332
262
 
263
+ /**
264
+ * Converts an observable property (value + change event) to an Angular signal.
265
+ *
266
+ * @example
267
+ * const { signal: pageData, destroy } = observablePropertyToSignal(adapter, 'pageData');
268
+ * // pageData() returns the current value, auto-updates on change
269
+ * // call destroy() to unsubscribe
270
+ */
271
+ function observablePropertyToSignal(target, propertyName) {
272
+ const eventTarget = target[`${propertyName}Changed`];
273
+ const getValue = () => target[propertyName];
274
+ const w = signal(getValue(), ...(ngDevMode ? [{ debugName: "w" }] : []));
275
+ const handler = () => w.set(getValue());
276
+ eventTarget.addEventListener(handler);
277
+ return {
278
+ signal: w.asReadonly(),
279
+ destroy: () => eventTarget.removeEventListener(handler),
280
+ };
281
+ }
282
+ /**
283
+ * Converts an observable property (value + change event) to an RxJS Observable.
284
+ * Emits the current value immediately, then on every change.
285
+ *
286
+ * @example
287
+ * const pageData$ = observablePropertyToObservable(adapter, 'pageData');
288
+ */
289
+ function observablePropertyToObservable(target, propertyName) {
290
+ const eventTarget = target[`${propertyName}Changed`];
291
+ const getValue = () => target[propertyName];
292
+ return new Observable(subscriber => {
293
+ subscriber.next(getValue());
294
+ const handler = () => subscriber.next(getValue());
295
+ eventTarget.addEventListener(handler);
296
+ return () => eventTarget.removeEventListener(handler);
297
+ });
298
+ }
299
+
300
+ /**
301
+ * Angular wrapper around CollectionViewAdapter that exposes reactive state as signals.
302
+ *
303
+ * Not an @Injectable — instantiate directly per use case.
304
+ */
305
+ class AngularCollectionViewAdapter {
306
+ _inner;
307
+ _destroyFns = [];
308
+ pageData;
309
+ selection;
310
+ isLoading;
311
+ error;
312
+ totalItemCount;
313
+ pageIndex;
314
+ pageSize;
315
+ ordering;
316
+ search;
317
+ constructor(options, client) {
318
+ this._inner = new CollectionViewAdapter(options, client);
319
+ const bind = (name) => {
320
+ const result = observablePropertyToSignal(this._inner, name);
321
+ this._destroyFns.push(result.destroy);
322
+ return result.signal;
323
+ };
324
+ this.pageData = bind('pageData');
325
+ this.selection = bind('selection');
326
+ this.isLoading = bind('isLoading');
327
+ this.error = bind('error');
328
+ this.totalItemCount = bind('totalItemCount');
329
+ this.pageIndex = bind('pageIndex');
330
+ this.pageSize = bind('pageSize');
331
+ this.ordering = bind('ordering');
332
+ this.search = bind('search');
333
+ }
334
+ // --- Search ---
335
+ setSearch(searchDefinition) {
336
+ this._inner.setSearch(searchDefinition);
337
+ }
338
+ // --- Ordering ---
339
+ setOrdering(propertyPath, orderDirection) {
340
+ this._inner.setOrdering(propertyPath, orderDirection);
341
+ }
342
+ // --- Pagination ---
343
+ setPageIndex(pageIndex) {
344
+ this._inner.setPageIndex(pageIndex);
345
+ }
346
+ setPageSize(pageSize) {
347
+ this._inner.setPageSize(pageSize);
348
+ }
349
+ refreshData() {
350
+ this._inner.refreshData();
351
+ }
352
+ // --- Selection ---
353
+ selectionToggle(item) {
354
+ this._inner.selectionToggle(item);
355
+ }
356
+ selectionAdd(item) {
357
+ this._inner.selectionAdd(item);
358
+ }
359
+ selectionRemove(item) {
360
+ this._inner.selectionRemove(item);
361
+ }
362
+ selectionClear() {
363
+ this._inner.selectionClear();
364
+ }
365
+ isSelected(item) {
366
+ return this._inner.isSelected(item);
367
+ }
368
+ selectionAddPage() {
369
+ this._inner.selectionAddPage();
370
+ }
371
+ selectionRemovePage() {
372
+ this._inner.selectionRemovePage();
373
+ }
374
+ isSelectedPage() {
375
+ return this._inner.isSelectedPage();
376
+ }
377
+ isSomeSelectedPage() {
378
+ return this._inner.isSomeSelectedPage();
379
+ }
380
+ // --- Lifecycle ---
381
+ destroy() {
382
+ this._destroyFns.forEach(fn => fn());
383
+ this._inner.destroy();
384
+ }
385
+ }
386
+
387
+ /**
388
+ * Angular wrapper around SearchAdapter that exposes reactive state as signals.
389
+ *
390
+ * Not an @Injectable — instantiate directly per use case.
391
+ */
392
+ class AngularSearchAdapter {
393
+ _inner;
394
+ _destroyFns = [];
395
+ options;
396
+ isLoading;
397
+ error;
398
+ searchData;
399
+ totalItemCount;
400
+ types;
401
+ search;
402
+ text;
403
+ selection;
404
+ searchTriggerMinLength;
405
+ constructor(options, client) {
406
+ this._inner = new SearchAdapter(options, client);
407
+ this.options = this._inner.options;
408
+ this.searchTriggerMinLength = this.options.searchTriggerMinLength;
409
+ const bind = (name) => {
410
+ const result = observablePropertyToSignal(this._inner, name);
411
+ this._destroyFns.push(result.destroy);
412
+ return result.signal;
413
+ };
414
+ this.isLoading = bind('isLoading');
415
+ this.error = bind('error');
416
+ this.searchData = bind('searchData');
417
+ this.totalItemCount = bind('totalItemCount');
418
+ this.types = bind('types');
419
+ this.search = bind('search');
420
+ this.text = bind('text');
421
+ this.selection = bind('selection');
422
+ }
423
+ setTypes(types) {
424
+ this._inner.setTypes(types);
425
+ }
426
+ setSearch(search) {
427
+ this._inner.setSearch(search);
428
+ }
429
+ setText(text) {
430
+ this._inner.setText(text);
431
+ }
432
+ refresh() {
433
+ this._inner.refresh();
434
+ }
435
+ selectionAdd(item) {
436
+ this._inner.selectionAdd(item);
437
+ }
438
+ selectionRemove(item) {
439
+ this._inner.selectionRemove(item);
440
+ }
441
+ selectionToggle(item) {
442
+ this._inner.selectionToggle(item);
443
+ }
444
+ selectionClear() {
445
+ this._inner.selectionClear();
446
+ }
447
+ destroy() {
448
+ this._destroyFns.forEach(fn => fn());
449
+ this._inner.destroy();
450
+ }
451
+ }
452
+
453
+ /**
454
+ * Base class for policies. It implements the IPolicy interface.
455
+ *
456
+ * @class PolicyBase
457
+ * @template TParams - The type of the parameters that will be passed to the policy check function.
458
+ */
459
+ class PolicyBase$ {
460
+ _verificationFn;
461
+ /**
462
+ * Creates a new policy.
463
+ *
464
+ * @param verificationFn - The function that will be used to verify the policy.
465
+ */
466
+ constructor(verificationFn) {
467
+ this._verificationFn = verificationFn;
468
+ }
469
+ /**
470
+ * Checks if the policy is valid for the given parameters.
471
+ *
472
+ * @return A promise that resolves if the policy is valid, rejects otherwise.
473
+ * @throws {Error} Error if not implemented.
474
+ */
475
+ async check() {
476
+ throw new Error('Not implemented');
477
+ }
478
+ /**
479
+ * Checks if the policy is valid for the given parameters.
480
+ *
481
+ * @return An observable that emits a boolean indicating whether the policy is valid.
482
+ * @throws {Error} Error if not implemented.
483
+ */
484
+ check$() {
485
+ throw new Error('Not implemented');
486
+ }
487
+ }
488
+ /**
489
+ * Class for policies that can be checked.
490
+ *
491
+ * @class Policy
492
+ * @template TParams - The type of the parameters that will be passed to the policy check function.
493
+ */
494
+ class Policy$ extends PolicyBase$ {
495
+ /**
496
+ * Creates a new policy.
497
+ *
498
+ * @param verificationFn - The function that will be used to verify the policy.
499
+ */
500
+ constructor(verificationFn) {
501
+ super(verificationFn);
502
+ }
503
+ /**
504
+ * Checks if the policy is valid for the given parameters.
505
+ *
506
+ * @param params - Parameters to pass to the policy check function.
507
+ * @return A promise that resolves if the policy is valid, rejects otherwise.
508
+ */
509
+ async check(...params) {
510
+ return firstValueFrom(this._verificationFn(...params));
511
+ }
512
+ /**
513
+ * Checks if the policy is valid for the given parameters.
514
+ *
515
+ * @param params - Parameters to pass to the policy check function.
516
+ * @return An observable that emits a boolean indicating whether the policy is valid.
517
+ */
518
+ check$(...params) {
519
+ return this._verificationFn(...params);
520
+ }
521
+ }
522
+
333
523
  /*
334
524
  * Public API Surface of cornerstone-client-angular
335
525
  */
@@ -338,5 +528,5 @@ function compose$(composition, ...policies) {
338
528
  * Generated bundle index. Do not edit.
339
529
  */
340
530
 
341
- export { AngularAuthService, AngularHttpService, Policy$, PolicyBase$, check$, compose$ };
531
+ export { AngularAuthService, AngularCollectionViewAdapter, AngularHttpService, AngularSearchAdapter, Policy$, PolicyBase$, check$, compose$, observablePropertyToObservable, observablePropertyToSignal };
342
532
  //# sourceMappingURL=intellegens-cornerstone-client-angular.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"intellegens-cornerstone-client-angular.mjs","sources":["../../../../projects/intellegens/cornerstone-client-angular/src/lib/services/AngularHttpService/index.ts","../../../../projects/intellegens/cornerstone-client-angular/src/lib/services/AngularAuthService/index.ts","../../../../projects/intellegens/cornerstone-client-angular/src/lib/data/auth/policy.ts","../../../../projects/intellegens/cornerstone-client-angular/src/lib/utils/authorization/index.ts","../../../../projects/intellegens/cornerstone-client-angular/src/public-api.ts","../../../../projects/intellegens/cornerstone-client-angular/src/intellegens-cornerstone-client-angular.ts"],"sourcesContent":["// Ignore eslint any error in this file\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { IHttpService, HttpRequestConfig, HttpResponse } from '@intellegens/cornerstone-client';\nimport { HttpClient } from '@angular/common/http';\nimport { firstValueFrom, fromEvent, throwError, switchMap, race } from 'rxjs';\n\n/**\n * Angular HttpClient-based HTTP service implementation\n */\nexport class AngularHttpService implements IHttpService {\n private httpClient: HttpClient;\n\n constructor(httpClient: HttpClient) {\n if (!httpClient) {\n throw new Error('Angular HttpClient instance is required');\n }\n this.httpClient = httpClient;\n }\n\n public async request<T = any>(url: string, config?: HttpRequestConfig): Promise<HttpResponse<T>> {\n try {\n const method = config?.method || 'GET';\n const headers = config?.headers || {};\n const body = config?.body;\n const withCredentials = config?.credentials === 'include';\n\n const options = {\n headers,\n withCredentials,\n observe: 'response' as const,\n responseType: 'json' as const,\n };\n\n let request: any;\n\n switch (method.toUpperCase()) {\n case 'GET':\n request = this.httpClient.get(url, options);\n break;\n case 'POST':\n request = this.httpClient.post(url, body ? JSON.parse(body) : null, options);\n break;\n case 'PUT':\n request = this.httpClient.put(url, body ? JSON.parse(body) : null, options);\n break;\n case 'DELETE':\n request = this.httpClient.delete(url, options);\n break;\n case 'PATCH':\n request = this.httpClient.patch(url, body ? JSON.parse(body) : null, options);\n break;\n default:\n throw new Error(`Unsupported HTTP method: ${method}`);\n }\n\n // Handle cancellation using AbortSignal\n if (config?.signal) {\n // Check if signal is already aborted\n if (config.signal.aborted) {\n throw new Error('Request was aborted');\n }\n\n const abort$ = fromEvent(config.signal, 'abort').pipe(switchMap(() => throwError(() => new Error('Request was aborted'))));\n\n request = race(request, abort$);\n }\n\n const response = (await firstValueFrom(request)) as any;\n\n // Convert Angular HttpResponse headers to plain object\n const responseHeaders: Record<string, string> = {};\n if (response.headers) {\n response.headers.keys().forEach((key: string) => {\n responseHeaders[key] = response.headers.get(key);\n });\n }\n\n return {\n ok: response.status >= 200 && response.status < 300,\n status: response.status,\n statusText: response.statusText || 'OK',\n headers: responseHeaders,\n json: async () => response.body,\n text: async () => (typeof response.body === 'string' ? response.body : JSON.stringify(response.body)),\n };\n } catch (error: any) {\n if (error.status !== undefined) {\n // Angular HttpErrorResponse\n const errorHeaders: Record<string, string> = {};\n if (error.headers) {\n error.headers.keys().forEach((key: string) => {\n errorHeaders[key] = error.headers.get(key);\n });\n }\n\n return {\n ok: false,\n status: error.status,\n statusText: error.statusText || 'Error',\n headers: errorHeaders,\n json: async () => error.error,\n text: async () => (typeof error.error === 'string' ? error.error : JSON.stringify(error.error)),\n };\n } else {\n // Other errors\n throw error;\n }\n }\n }\n}\n","/**\n * Angular Service wrapping the base AuthService from @intellegens/cornerstone-client\n *\n * @template TKey Type parameter for the UserDto\n * @template TUser Type parameter for the UserDto, defaults to UserDto<TKey>\n */\nimport { Injectable, Signal, signal, WritableSignal } from '@angular/core';\nimport { AuthService as BaseAuthService, UserDto, RegisterRequestDto } from '@intellegens/cornerstone-client';\nimport { from, tap } from 'rxjs';\nimport { toObservable } from '@angular/core/rxjs-interop';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AngularAuthService<TKey, TRegisterUser extends RegisterRequestDto = RegisterRequestDto, TUser extends UserDto<TKey> = UserDto<TKey>> {\n /**\n * Private instance of the base AuthService\n */\n private _auth = new BaseAuthService<TKey, TRegisterUser, TUser>();\n /**\n * Private writable signal for the current user\n */\n protected _currentUser: WritableSignal<TUser | undefined> = signal(undefined);\n /**\n * Current user signal\n */\n public currentUser: Signal<TUser | undefined> = this._currentUser.asReadonly();\n\n /**\n * Observable of the current user\n */\n public currentUser$ = toObservable(this.currentUser);\n\n public whoAmI() {\n return from(this._auth.whoAmI()).pipe(\n tap(res => {\n if (res.ok) {\n this.setUser(res.result.user);\n } else {\n console.error(res.error);\n }\n }),\n );\n }\n\n public signIn(username: string, password: string) {\n return from(this._auth.signIn(username, password)).pipe(\n tap(() => {\n this.setUser(this._auth.user);\n }),\n );\n }\n\n public signOut() {\n return from(this._auth.signOut()).pipe(\n tap(res => {\n if (res.ok) {\n this.setUser(undefined);\n } else {\n console.error(res.error);\n }\n }),\n );\n }\n\n public register(user: TRegisterUser) {\n return from(this._auth.register(user)).pipe(\n tap(() => {\n this.setUser(this._auth.user);\n }),\n );\n }\n\n /**\n * A signal that emits the current user\n * Updates the current user and emits the change to subscribers.\n */\n protected setUser(user: TUser | undefined) {\n this._currentUser.set(user);\n }\n}\n","import { IPolicy } from '@intellegens/cornerstone-client';\nimport { firstValueFrom, Observable } from 'rxjs';\n\n/**\n * Interface for policies that can be checked.\n *\n * @interface IPolicy<TParams extends unknown[]>\n * @template TParams - The type of the parameters that will be passed to the policy check function.\n */\nexport interface IPolicy$<TParams extends unknown[]> extends IPolicy<TParams> {\n /**\n * Checks if the policy is valid for the given parameters.\n *\n * @param params - Parameters to pass to the policy check function.\n * @return A promise that resolves if the policy is valid, rejects otherwise.\n */\n check$(...params: TParams): Observable<boolean>;\n}\n\n/**\n * Base class for policies. It implements the IPolicy interface.\n *\n * @class PolicyBase\n * @template TParams - The type of the parameters that will be passed to the policy check function.\n */\nexport class PolicyBase$<TParams extends unknown[]> implements IPolicy$<TParams> {\n protected readonly _verificationFn: (...params: TParams) => Observable<boolean>;\n\n /**\n * Creates a new policy.\n *\n * @param verificationFn - The function that will be used to verify the policy.\n */\n constructor(verificationFn: (...params: TParams) => Observable<boolean>) {\n this._verificationFn = verificationFn;\n }\n\n /**\n * Checks if the policy is valid for the given parameters.\n *\n * @return A promise that resolves if the policy is valid, rejects otherwise.\n * @throws {Error} Error if not implemented.\n */\n public async check(): Promise<boolean> {\n throw new Error('Not implemented');\n }\n\n /**\n * Checks if the policy is valid for the given parameters.\n *\n * @return An observable that emits a boolean indicating whether the policy is valid.\n * @throws {Error} Error if not implemented.\n */\n public check$(): Observable<boolean> {\n throw new Error('Not implemented');\n }\n}\n\n/**\n * Class for policies that can be checked.\n *\n * @class Policy\n * @template TParams - The type of the parameters that will be passed to the policy check function.\n */\nexport class Policy$<TParams extends unknown[]> extends PolicyBase$<TParams> {\n /**\n * Creates a new policy.\n *\n * @param verificationFn - The function that will be used to verify the policy.\n */\n constructor(verificationFn: (...params: TParams) => Observable<boolean>) {\n super(verificationFn);\n }\n\n /**\n * Checks if the policy is valid for the given parameters.\n *\n * @param params - Parameters to pass to the policy check function.\n * @return A promise that resolves if the policy is valid, rejects otherwise.\n */\n public override async check(...params: TParams): Promise<boolean> {\n return firstValueFrom(this._verificationFn(...params));\n }\n\n /**\n * Checks if the policy is valid for the given parameters.\n *\n * @param params - Parameters to pass to the policy check function.\n * @return An observable that emits a boolean indicating whether the policy is valid.\n */\n public override check$(...params: TParams): Observable<boolean> {\n return this._verificationFn(...params);\n }\n}\n","import { IPolicy, PolicyBase } from '@intellegens/cornerstone-client';\nimport { IPolicy$, PolicyBase$ } from '../../data/auth/policy';\nimport { combineLatest, from, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n/**\n * Checks if a policy is valid for the given parameters.\n *\n * @param policy Policy to check, either an instance or a class (can be IPolicy or IPolicy$).\n * @param params Parameters to pass to the policy check function.\n * @returns An observable that emits a boolean indicating whether the policy is valid.\n */\nexport function check$<TParams extends unknown[]>(\n policy: IPolicy<TParams> | IPolicy$<TParams> | (new () => IPolicy<TParams>) | (new () => IPolicy$<TParams>),\n ...params: TParams\n): Observable<boolean> {\n let policyInstance: IPolicy<TParams> | IPolicy$<TParams>;\n\n // If passed an instance of a policy\n if (policy instanceof PolicyBase || policy instanceof PolicyBase$) {\n policyInstance = policy as IPolicy<TParams> | IPolicy$<TParams>;\n }\n // If passed a policy class\n else {\n policyInstance = new (policy as new () => IPolicy<TParams> | IPolicy$<TParams>)();\n }\n\n // Check if it's an observable policy (has check$ method)\n if ('check$' in policyInstance && typeof policyInstance.check$ === 'function') {\n return (policyInstance as IPolicy$<TParams>).check$(...params);\n }\n // Otherwise, it's a promise-based policy\n else {\n return from((policyInstance as IPolicy<TParams>).check(...params));\n }\n}\n\n/**\n * Composes multiple policies into a single policy.\n *\n * @param composition Composition method, either 'AND' or 'OR'.\n * @param policies Policies to compose (can be IPolicy or IPolicy$).\n * @returns A new IPolicy$ that represents the composition of the policies.\n */\nexport function compose$<TParams extends unknown[]>(\n composition: 'AND' | 'OR',\n ...policies: (IPolicy<TParams> | IPolicy$<TParams>)[]\n): IPolicy$<TParams> {\n return {\n check: async (...params: TParams): Promise<boolean> => {\n // Convert all policies to observables and get their results\n const observables = policies.map(policy => {\n if ('check$' in policy && typeof policy.check$ === 'function') {\n return (policy as IPolicy$<TParams>).check$(...params);\n } else {\n return from((policy as IPolicy<TParams>).check(...params));\n }\n });\n\n // Wait for all observables to complete\n return new Promise((resolve, reject) => {\n combineLatest(observables).subscribe({\n next: (results) => {\n if (composition === 'AND') {\n resolve(results.every(result => result === true));\n } else if (composition === 'OR') {\n resolve(results.some(result => result === true));\n } else {\n reject(new Error('Invalid composition'));\n }\n },\n error: (err) => reject(err),\n });\n });\n },\n check$: (...params: TParams): Observable<boolean> => {\n // Convert all policies to observables\n const observables = policies.map(policy => {\n if ('check$' in policy && typeof policy.check$ === 'function') {\n return (policy as IPolicy$<TParams>).check$(...params);\n } else {\n return from((policy as IPolicy<TParams>).check(...params));\n }\n });\n\n // Combine all observables based on composition\n if (composition === 'AND') {\n return combineLatest(observables).pipe(\n map(results => results.every(result => result === true))\n );\n } else if (composition === 'OR') {\n return combineLatest(observables).pipe(\n map(results => results.some(result => result === true))\n );\n } else {\n throw new Error('Invalid composition');\n }\n },\n };\n}\n","/*\n * Public API Surface of cornerstone-client-angular\n */\n\nexport * from './lib/';\nexport * from '@intellegens/cornerstone-client';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["BaseAuthService"],"mappings":"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"}
1
+ {"version":3,"file":"intellegens-cornerstone-client-angular.mjs","sources":["../../../../projects/intellegens/cornerstone-client-angular/src/lib/services/angular-http-service.ts","../../../../projects/intellegens/cornerstone-client-angular/src/lib/services/angular-auth-service.ts","../../../../projects/intellegens/cornerstone-client-angular/src/lib/utils/authorization.ts","../../../../projects/intellegens/cornerstone-client-angular/src/lib/utils/observable-property.ts","../../../../projects/intellegens/cornerstone-client-angular/src/lib/services/angular-collection-view-adapter.ts","../../../../projects/intellegens/cornerstone-client-angular/src/lib/services/angular-search-adapter.ts","../../../../projects/intellegens/cornerstone-client-angular/src/lib/data/auth/policy.ts","../../../../projects/intellegens/cornerstone-client-angular/src/public-api.ts","../../../../projects/intellegens/cornerstone-client-angular/src/intellegens-cornerstone-client-angular.ts"],"sourcesContent":["// Ignore eslint any error in this file\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { IHttpService, HttpRequestConfig, HttpResponse } from '@intellegens/cornerstone-client';\nimport { HttpClient } from '@angular/common/http';\nimport { firstValueFrom, fromEvent, throwError, switchMap, race } from 'rxjs';\n\n/**\n * Angular HttpClient-based HTTP service implementation\n */\nexport class AngularHttpService implements IHttpService {\n private httpClient: HttpClient;\n\n constructor(httpClient: HttpClient) {\n if (!httpClient) {\n throw new Error('Angular HttpClient instance is required');\n }\n this.httpClient = httpClient;\n }\n\n public async request<T = any>(url: string, config?: HttpRequestConfig): Promise<HttpResponse<T>> {\n try {\n const method = config?.method || 'GET';\n const headers = config?.headers || {};\n const body = config?.body;\n const withCredentials = config?.credentials === 'include';\n\n const options = {\n headers,\n withCredentials,\n observe: 'response' as const,\n responseType: 'json' as const,\n };\n\n let request: any;\n\n switch (method.toUpperCase()) {\n case 'GET':\n request = this.httpClient.get(url, options);\n break;\n case 'POST':\n request = this.httpClient.post(url, body ? JSON.parse(body) : null, options);\n break;\n case 'PUT':\n request = this.httpClient.put(url, body ? JSON.parse(body) : null, options);\n break;\n case 'DELETE':\n request = this.httpClient.delete(url, options);\n break;\n case 'PATCH':\n request = this.httpClient.patch(url, body ? JSON.parse(body) : null, options);\n break;\n default:\n throw new Error(`Unsupported HTTP method: ${method}`);\n }\n\n // Handle cancellation using AbortSignal\n if (config?.signal) {\n // Check if signal is already aborted\n if (config.signal.aborted) {\n throw new Error('Request was aborted');\n }\n\n const abort$ = fromEvent(config.signal, 'abort').pipe(switchMap(() => throwError(() => new Error('Request was aborted'))));\n\n request = race(request, abort$);\n }\n\n const response = (await firstValueFrom(request)) as any;\n\n // Convert Angular HttpResponse headers to plain object\n const responseHeaders: Record<string, string> = {};\n if (response.headers) {\n response.headers.keys().forEach((key: string) => {\n responseHeaders[key] = response.headers.get(key);\n });\n }\n\n return {\n ok: response.status >= 200 && response.status < 300,\n status: response.status,\n statusText: response.statusText || 'OK',\n headers: responseHeaders,\n json: async () => response.body,\n text: async () => (typeof response.body === 'string' ? response.body : JSON.stringify(response.body)),\n };\n } catch (error: any) {\n if (error.status !== undefined) {\n // Angular HttpErrorResponse\n const errorHeaders: Record<string, string> = {};\n if (error.headers) {\n error.headers.keys().forEach((key: string) => {\n errorHeaders[key] = error.headers.get(key);\n });\n }\n\n return {\n ok: false,\n status: error.status,\n statusText: error.statusText || 'Error',\n headers: errorHeaders,\n json: async () => error.error,\n text: async () => (typeof error.error === 'string' ? error.error : JSON.stringify(error.error)),\n };\n } else {\n // Other errors\n throw error;\n }\n }\n }\n}\n","/**\n * Angular Service wrapping the base AuthService from @intellegens/cornerstone-client\n *\n * @template TKey Type parameter for the UserDto\n * @template TUser Type parameter for the UserDto, defaults to UserDto<TKey>\n */\nimport { Injectable, Signal, signal, WritableSignal } from '@angular/core';\nimport { AuthService as BaseAuthService, UserDto, RegisterRequestDto } from '@intellegens/cornerstone-client';\nimport { from, tap } from 'rxjs';\nimport { toObservable } from '@angular/core/rxjs-interop';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AngularAuthService<TKey, TRegisterUser extends RegisterRequestDto = RegisterRequestDto, TUser extends UserDto<TKey> = UserDto<TKey>> {\n /**\n * Private instance of the base AuthService\n */\n private _auth = new BaseAuthService<TKey, TRegisterUser, TUser>();\n /**\n * Private writable signal for the current user\n */\n protected _currentUser: WritableSignal<TUser | undefined> = signal(undefined);\n /**\n * Current user signal\n */\n public currentUser: Signal<TUser | undefined> = this._currentUser.asReadonly();\n\n /**\n * Observable of the current user\n */\n public currentUser$ = toObservable(this.currentUser);\n\n public whoAmI() {\n return from(this._auth.whoAmI()).pipe(\n tap(res => {\n if (res.ok) {\n this.setUser(res.result.user);\n } else {\n console.error(res.error);\n }\n }),\n );\n }\n\n public signIn(username: string, password: string) {\n return from(this._auth.signIn(username, password)).pipe(\n tap(() => {\n this.setUser(this._auth.user);\n }),\n );\n }\n\n public signOut() {\n return from(this._auth.signOut()).pipe(\n tap(res => {\n if (res.ok) {\n this.setUser(undefined);\n } else {\n console.error(res.error);\n }\n }),\n );\n }\n\n public register(user: TRegisterUser) {\n return from(this._auth.register(user)).pipe(\n tap(() => {\n this.setUser(this._auth.user);\n }),\n );\n }\n\n /**\n * A signal that emits the current user\n * Updates the current user and emits the change to subscribers.\n */\n protected setUser(user: TUser | undefined) {\n this._currentUser.set(user);\n }\n}\n","import { IPolicy, PolicyBase } from '@intellegens/cornerstone-client';\nimport { IPolicy$, PolicyBase$ } from '../';\nimport { combineLatest, from, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n/**\n * Checks if a policy is valid for the given parameters.\n *\n * @param policy Policy to check, either an instance or a class (can be IPolicy or IPolicy$).\n * @param params Parameters to pass to the policy check function.\n * @returns An observable that emits a boolean indicating whether the policy is valid.\n */\nexport function check$<TParams extends unknown[]>(\n policy: IPolicy<TParams> | IPolicy$<TParams> | (new () => IPolicy<TParams>) | (new () => IPolicy$<TParams>),\n ...params: TParams\n): Observable<boolean> {\n let policyInstance: IPolicy<TParams> | IPolicy$<TParams>;\n\n // If passed an instance of a policy\n if (policy instanceof PolicyBase || policy instanceof PolicyBase$) {\n policyInstance = policy as IPolicy<TParams> | IPolicy$<TParams>;\n }\n // If passed a policy class\n else {\n policyInstance = new (policy as new () => IPolicy<TParams> | IPolicy$<TParams>)();\n }\n\n // Check if it's an observable policy (has check$ method)\n if ('check$' in policyInstance && typeof policyInstance.check$ === 'function') {\n return (policyInstance as IPolicy$<TParams>).check$(...params);\n }\n // Otherwise, it's a promise-based policy\n else {\n return from((policyInstance as IPolicy<TParams>).check(...params));\n }\n}\n\n/**\n * Composes multiple policies into a single policy.\n *\n * @param composition Composition method, either 'AND' or 'OR'.\n * @param policies Policies to compose (can be IPolicy or IPolicy$).\n * @returns A new IPolicy$ that represents the composition of the policies.\n */\nexport function compose$<TParams extends unknown[]>(composition: 'AND' | 'OR', ...policies: (IPolicy<TParams> | IPolicy$<TParams>)[]): IPolicy$<TParams> {\n return {\n check: async (...params: TParams): Promise<boolean> => {\n // Convert all policies to observables and get their results\n const observables = policies.map(policy => {\n if ('check$' in policy && typeof policy.check$ === 'function') {\n return (policy as IPolicy$<TParams>).check$(...params);\n } else {\n return from((policy as IPolicy<TParams>).check(...params));\n }\n });\n\n // Wait for all observables to complete\n return new Promise((resolve, reject) => {\n combineLatest(observables).subscribe({\n next: results => {\n if (composition === 'AND') {\n resolve(results.every(result => result === true));\n } else if (composition === 'OR') {\n resolve(results.some(result => result === true));\n } else {\n reject(new Error('Invalid composition'));\n }\n },\n error: err => reject(err),\n });\n });\n },\n check$: (...params: TParams): Observable<boolean> => {\n // Convert all policies to observables\n const observables = policies.map(policy => {\n if ('check$' in policy && typeof policy.check$ === 'function') {\n return (policy as IPolicy$<TParams>).check$(...params);\n } else {\n return from((policy as IPolicy<TParams>).check(...params));\n }\n });\n\n // Combine all observables based on composition\n if (composition === 'AND') {\n return combineLatest(observables).pipe(map(results => results.every(result => result === true)));\n } else if (composition === 'OR') {\n return combineLatest(observables).pipe(map(results => results.some(result => result === true)));\n } else {\n throw new Error('Invalid composition');\n }\n },\n };\n}\n","import { Signal, signal } from '@angular/core';\nimport { IHasObservableProperty, SingularEventTarget } from '@intellegens/cornerstone-client';\nimport { Observable } from 'rxjs';\n\n/**\n * Converts an observable property (value + change event) to an Angular signal.\n *\n * @example\n * const { signal: pageData, destroy } = observablePropertyToSignal(adapter, 'pageData');\n * // pageData() returns the current value, auto-updates on change\n * // call destroy() to unsubscribe\n */\nexport function observablePropertyToSignal<\n TName extends string,\n TValue,\n>(\n target: IHasObservableProperty<TName, TValue>,\n propertyName: TName,\n): { signal: Signal<TValue>; destroy: () => void } {\n const eventTarget = (target as Record<string, unknown>)[`${propertyName}Changed`] as SingularEventTarget<TValue>;\n const getValue = () => (target as Record<string, unknown>)[propertyName] as TValue;\n\n const w = signal<TValue>(getValue());\n const handler = () => w.set(getValue());\n eventTarget.addEventListener(handler);\n\n return {\n signal: w.asReadonly(),\n destroy: () => eventTarget.removeEventListener(handler),\n };\n}\n\n/**\n * Converts an observable property (value + change event) to an RxJS Observable.\n * Emits the current value immediately, then on every change.\n *\n * @example\n * const pageData$ = observablePropertyToObservable(adapter, 'pageData');\n */\nexport function observablePropertyToObservable<\n TName extends string,\n TValue,\n>(\n target: IHasObservableProperty<TName, TValue>,\n propertyName: TName,\n): Observable<TValue> {\n const eventTarget = (target as Record<string, unknown>)[`${propertyName}Changed`] as SingularEventTarget<TValue>;\n const getValue = () => (target as Record<string, unknown>)[propertyName] as TValue;\n\n return new Observable<TValue>(subscriber => {\n subscriber.next(getValue());\n const handler = () => subscriber.next(getValue());\n eventTarget.addEventListener(handler);\n return () => eventTarget.removeEventListener(handler);\n });\n}\n","import { Signal } from '@angular/core';\nimport {\n CollectionViewAdapter,\n CollectionViewAdapterOptions,\n IReadSelectedClient,\n PropertyPathDto,\n ReadSelectedOrderingDirection,\n ReadSelectedSearchDefinitionDto,\n} from '@intellegens/cornerstone-client';\n\nimport { observablePropertyToSignal } from '../utils';\n\n/**\n * Angular wrapper around CollectionViewAdapter that exposes reactive state as signals.\n *\n * Not an @Injectable — instantiate directly per use case.\n */\nexport class AngularCollectionViewAdapter<TDto> {\n private _inner: CollectionViewAdapter<TDto>;\n private _destroyFns: (() => void)[] = [];\n\n readonly pageData: Signal<readonly TDto[] | undefined>;\n readonly selection: Signal<readonly TDto[]>;\n readonly isLoading: Signal<boolean>;\n readonly error: Signal<string | undefined>;\n readonly totalItemCount: Signal<number>;\n readonly pageIndex: Signal<number>;\n readonly pageSize: Signal<number>;\n readonly ordering: Signal<readonly { path: PropertyPathDto; direction: ReadSelectedOrderingDirection }[]>;\n readonly search: Signal<ReadSelectedSearchDefinitionDto<TDto>>;\n\n constructor(options: CollectionViewAdapterOptions<TDto>, client: IReadSelectedClient<any, any> | string) {\n this._inner = new CollectionViewAdapter<TDto>(options, client);\n\n const bind = <T>(name: string) => {\n const result = observablePropertyToSignal(this._inner as never, name as never) as { signal: Signal<T>; destroy: () => void };\n this._destroyFns.push(result.destroy);\n return result.signal;\n };\n\n this.pageData = bind<readonly TDto[] | undefined>('pageData');\n this.selection = bind<readonly TDto[]>('selection');\n this.isLoading = bind<boolean>('isLoading');\n this.error = bind<string | undefined>('error');\n this.totalItemCount = bind<number>('totalItemCount');\n this.pageIndex = bind<number>('pageIndex');\n this.pageSize = bind<number>('pageSize');\n this.ordering = bind<readonly { path: PropertyPathDto; direction: ReadSelectedOrderingDirection }[]>('ordering');\n this.search = bind<ReadSelectedSearchDefinitionDto<TDto>>('search');\n }\n\n // --- Search ---\n\n setSearch(searchDefinition: ReadSelectedSearchDefinitionDto<TDto>): void {\n this._inner.setSearch(searchDefinition);\n }\n\n // --- Ordering ---\n\n setOrdering(propertyPath: PropertyPathDto, orderDirection: ReadSelectedOrderingDirection): void {\n this._inner.setOrdering(propertyPath, orderDirection);\n }\n\n // --- Pagination ---\n\n setPageIndex(pageIndex: number): void {\n this._inner.setPageIndex(pageIndex);\n }\n\n setPageSize(pageSize: number): void {\n this._inner.setPageSize(pageSize);\n }\n\n refreshData(): void {\n this._inner.refreshData();\n }\n\n // --- Selection ---\n\n selectionToggle(item: TDto): void {\n this._inner.selectionToggle(item);\n }\n\n selectionAdd(item: TDto): void {\n this._inner.selectionAdd(item);\n }\n\n selectionRemove(item: TDto): void {\n this._inner.selectionRemove(item);\n }\n\n selectionClear(): void {\n this._inner.selectionClear();\n }\n\n isSelected(item: TDto): boolean {\n return this._inner.isSelected(item);\n }\n\n selectionAddPage(): void {\n this._inner.selectionAddPage();\n }\n\n selectionRemovePage(): void {\n this._inner.selectionRemovePage();\n }\n\n isSelectedPage(): boolean {\n return this._inner.isSelectedPage();\n }\n\n isSomeSelectedPage(): boolean {\n return this._inner.isSomeSelectedPage();\n }\n\n // --- Lifecycle ---\n\n destroy(): void {\n this._destroyFns.forEach(fn => fn());\n this._inner.destroy();\n }\n}\n","import { Signal } from '@angular/core';\nimport {\n IReadSelectedClient,\n ReadSelectedSearchDefinitionDto,\n SearchAdapter,\n SearchAdapterBaseOptions,\n SearchAdapterOptions,\n} from '@intellegens/cornerstone-client';\nimport { observablePropertyToSignal } from '../utils';\n\n/**\n * Angular wrapper around SearchAdapter that exposes reactive state as signals.\n *\n * Not an @Injectable — instantiate directly per use case.\n */\nexport class AngularSearchAdapter<TDto> {\n private _inner: SearchAdapter<TDto>;\n private _destroyFns: (() => void)[] = [];\n\n readonly options: Required<SearchAdapterBaseOptions<TDto>>;\n\n readonly isLoading: Signal<boolean>;\n readonly error: Signal<string | undefined>;\n readonly searchData: Signal<readonly TDto[]>;\n readonly totalItemCount: Signal<number>;\n readonly types: Signal<string[] | undefined>;\n readonly search: Signal<ReadSelectedSearchDefinitionDto<TDto> | undefined>;\n readonly text: Signal<string | undefined>;\n readonly selection: Signal<readonly TDto[]>;\n\n readonly searchTriggerMinLength: number;\n\n constructor(options: SearchAdapterOptions<TDto>, client: IReadSelectedClient<any, any> | string) {\n this._inner = new SearchAdapter<TDto>(options, client);\n this.options = this._inner.options;\n this.searchTriggerMinLength = this.options.searchTriggerMinLength;\n\n const bind = <T>(name: string) => {\n const result = observablePropertyToSignal(this._inner as never, name as never) as { signal: Signal<T>; destroy: () => void };\n this._destroyFns.push(result.destroy);\n return result.signal;\n };\n\n this.isLoading = bind<boolean>('isLoading');\n this.error = bind<string | undefined>('error');\n this.searchData = bind<readonly TDto[]>('searchData');\n this.totalItemCount = bind<number>('totalItemCount');\n this.types = bind<string[] | undefined>('types');\n this.search = bind<ReadSelectedSearchDefinitionDto<TDto> | undefined>('search');\n this.text = bind<string | undefined>('text');\n this.selection = bind<readonly TDto[]>('selection');\n }\n\n setTypes(types: string[] | undefined): void {\n this._inner.setTypes(types);\n }\n\n setSearch(search: ReadSelectedSearchDefinitionDto<TDto> | undefined): void {\n this._inner.setSearch(search);\n }\n\n setText(text: string | undefined): void {\n this._inner.setText(text);\n }\n\n refresh(): void {\n this._inner.refresh();\n }\n\n selectionAdd(item: TDto): void {\n this._inner.selectionAdd(item);\n }\n\n selectionRemove(item: TDto): void {\n this._inner.selectionRemove(item);\n }\n\n selectionToggle(item: TDto): void {\n this._inner.selectionToggle(item);\n }\n\n selectionClear(): void {\n this._inner.selectionClear();\n }\n\n destroy(): void {\n this._destroyFns.forEach(fn => fn());\n this._inner.destroy();\n }\n}\n","import { IPolicy } from '@intellegens/cornerstone-client';\nimport { firstValueFrom, Observable } from 'rxjs';\n\n/**\n * Interface for policies that can be checked.\n *\n * @interface IPolicy<TParams extends unknown[]>\n * @template TParams - The type of the parameters that will be passed to the policy check function.\n */\nexport interface IPolicy$<TParams extends unknown[]> extends IPolicy<TParams> {\n /**\n * Checks if the policy is valid for the given parameters.\n *\n * @param params - Parameters to pass to the policy check function.\n * @return A promise that resolves if the policy is valid, rejects otherwise.\n */\n check$(...params: TParams): Observable<boolean>;\n}\n\n/**\n * Base class for policies. It implements the IPolicy interface.\n *\n * @class PolicyBase\n * @template TParams - The type of the parameters that will be passed to the policy check function.\n */\nexport class PolicyBase$<TParams extends unknown[]> implements IPolicy$<TParams> {\n protected readonly _verificationFn: (...params: TParams) => Observable<boolean>;\n\n /**\n * Creates a new policy.\n *\n * @param verificationFn - The function that will be used to verify the policy.\n */\n constructor(verificationFn: (...params: TParams) => Observable<boolean>) {\n this._verificationFn = verificationFn;\n }\n\n /**\n * Checks if the policy is valid for the given parameters.\n *\n * @return A promise that resolves if the policy is valid, rejects otherwise.\n * @throws {Error} Error if not implemented.\n */\n public async check(): Promise<boolean> {\n throw new Error('Not implemented');\n }\n\n /**\n * Checks if the policy is valid for the given parameters.\n *\n * @return An observable that emits a boolean indicating whether the policy is valid.\n * @throws {Error} Error if not implemented.\n */\n public check$(): Observable<boolean> {\n throw new Error('Not implemented');\n }\n}\n\n/**\n * Class for policies that can be checked.\n *\n * @class Policy\n * @template TParams - The type of the parameters that will be passed to the policy check function.\n */\nexport class Policy$<TParams extends unknown[]> extends PolicyBase$<TParams> {\n /**\n * Creates a new policy.\n *\n * @param verificationFn - The function that will be used to verify the policy.\n */\n constructor(verificationFn: (...params: TParams) => Observable<boolean>) {\n super(verificationFn);\n }\n\n /**\n * Checks if the policy is valid for the given parameters.\n *\n * @param params - Parameters to pass to the policy check function.\n * @return A promise that resolves if the policy is valid, rejects otherwise.\n */\n public override async check(...params: TParams): Promise<boolean> {\n return firstValueFrom(this._verificationFn(...params));\n }\n\n /**\n * Checks if the policy is valid for the given parameters.\n *\n * @param params - Parameters to pass to the policy check function.\n * @return An observable that emits a boolean indicating whether the policy is valid.\n */\n public override check$(...params: TParams): Observable<boolean> {\n return this._verificationFn(...params);\n }\n}\n","/*\n * Public API Surface of cornerstone-client-angular\n */\n\nexport * from './lib/';\nexport * from '@intellegens/cornerstone-client';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["BaseAuthService"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as _intellegens_cornerstone_client from '@intellegens/cornerstone-client';
2
- import { IHttpService, HttpRequestConfig, HttpResponse, RegisterRequestDto, UserDto, IPolicy } from '@intellegens/cornerstone-client';
2
+ import { IHttpService, HttpRequestConfig, HttpResponse, RegisterRequestDto, UserDto, PropertyPathDto, ReadSelectedOrderingDirection, ReadSelectedSearchDefinitionDto, CollectionViewAdapterOptions, IReadSelectedClient, SearchAdapterBaseOptions, SearchAdapterOptions, IPolicy, IHasObservableProperty } from '@intellegens/cornerstone-client';
3
3
  export * from '@intellegens/cornerstone-client';
4
4
  import { HttpClient } from '@angular/common/http';
5
5
  import * as rxjs from 'rxjs';
@@ -46,6 +46,74 @@ declare class AngularAuthService<TKey, TRegisterUser extends RegisterRequestDto
46
46
  static ɵprov: i0.ɵɵInjectableDeclaration<AngularAuthService<any, any, any>>;
47
47
  }
48
48
 
49
+ /**
50
+ * Angular wrapper around CollectionViewAdapter that exposes reactive state as signals.
51
+ *
52
+ * Not an @Injectable — instantiate directly per use case.
53
+ */
54
+ declare class AngularCollectionViewAdapter<TDto> {
55
+ private _inner;
56
+ private _destroyFns;
57
+ readonly pageData: Signal<readonly TDto[] | undefined>;
58
+ readonly selection: Signal<readonly TDto[]>;
59
+ readonly isLoading: Signal<boolean>;
60
+ readonly error: Signal<string | undefined>;
61
+ readonly totalItemCount: Signal<number>;
62
+ readonly pageIndex: Signal<number>;
63
+ readonly pageSize: Signal<number>;
64
+ readonly ordering: Signal<readonly {
65
+ path: PropertyPathDto;
66
+ direction: ReadSelectedOrderingDirection;
67
+ }[]>;
68
+ readonly search: Signal<ReadSelectedSearchDefinitionDto<TDto>>;
69
+ constructor(options: CollectionViewAdapterOptions<TDto>, client: IReadSelectedClient<any, any> | string);
70
+ setSearch(searchDefinition: ReadSelectedSearchDefinitionDto<TDto>): void;
71
+ setOrdering(propertyPath: PropertyPathDto, orderDirection: ReadSelectedOrderingDirection): void;
72
+ setPageIndex(pageIndex: number): void;
73
+ setPageSize(pageSize: number): void;
74
+ refreshData(): void;
75
+ selectionToggle(item: TDto): void;
76
+ selectionAdd(item: TDto): void;
77
+ selectionRemove(item: TDto): void;
78
+ selectionClear(): void;
79
+ isSelected(item: TDto): boolean;
80
+ selectionAddPage(): void;
81
+ selectionRemovePage(): void;
82
+ isSelectedPage(): boolean;
83
+ isSomeSelectedPage(): boolean;
84
+ destroy(): void;
85
+ }
86
+
87
+ /**
88
+ * Angular wrapper around SearchAdapter that exposes reactive state as signals.
89
+ *
90
+ * Not an @Injectable — instantiate directly per use case.
91
+ */
92
+ declare class AngularSearchAdapter<TDto> {
93
+ private _inner;
94
+ private _destroyFns;
95
+ readonly options: Required<SearchAdapterBaseOptions<TDto>>;
96
+ readonly isLoading: Signal<boolean>;
97
+ readonly error: Signal<string | undefined>;
98
+ readonly searchData: Signal<readonly TDto[]>;
99
+ readonly totalItemCount: Signal<number>;
100
+ readonly types: Signal<string[] | undefined>;
101
+ readonly search: Signal<ReadSelectedSearchDefinitionDto<TDto> | undefined>;
102
+ readonly text: Signal<string | undefined>;
103
+ readonly selection: Signal<readonly TDto[]>;
104
+ readonly searchTriggerMinLength: number;
105
+ constructor(options: SearchAdapterOptions<TDto>, client: IReadSelectedClient<any, any> | string);
106
+ setTypes(types: string[] | undefined): void;
107
+ setSearch(search: ReadSelectedSearchDefinitionDto<TDto> | undefined): void;
108
+ setText(text: string | undefined): void;
109
+ refresh(): void;
110
+ selectionAdd(item: TDto): void;
111
+ selectionRemove(item: TDto): void;
112
+ selectionToggle(item: TDto): void;
113
+ selectionClear(): void;
114
+ destroy(): void;
115
+ }
116
+
49
117
  /**
50
118
  * Interface for policies that can be checked.
51
119
  *
@@ -136,5 +204,26 @@ declare function check$<TParams extends unknown[]>(policy: IPolicy<TParams> | IP
136
204
  */
137
205
  declare function compose$<TParams extends unknown[]>(composition: 'AND' | 'OR', ...policies: (IPolicy<TParams> | IPolicy$<TParams>)[]): IPolicy$<TParams>;
138
206
 
139
- export { AngularAuthService, AngularHttpService, Policy$, PolicyBase$, check$, compose$ };
207
+ /**
208
+ * Converts an observable property (value + change event) to an Angular signal.
209
+ *
210
+ * @example
211
+ * const { signal: pageData, destroy } = observablePropertyToSignal(adapter, 'pageData');
212
+ * // pageData() returns the current value, auto-updates on change
213
+ * // call destroy() to unsubscribe
214
+ */
215
+ declare function observablePropertyToSignal<TName extends string, TValue>(target: IHasObservableProperty<TName, TValue>, propertyName: TName): {
216
+ signal: Signal<TValue>;
217
+ destroy: () => void;
218
+ };
219
+ /**
220
+ * Converts an observable property (value + change event) to an RxJS Observable.
221
+ * Emits the current value immediately, then on every change.
222
+ *
223
+ * @example
224
+ * const pageData$ = observablePropertyToObservable(adapter, 'pageData');
225
+ */
226
+ declare function observablePropertyToObservable<TName extends string, TValue>(target: IHasObservableProperty<TName, TValue>, propertyName: TName): Observable<TValue>;
227
+
228
+ export { AngularAuthService, AngularCollectionViewAdapter, AngularHttpService, AngularSearchAdapter, Policy$, PolicyBase$, check$, compose$, observablePropertyToObservable, observablePropertyToSignal };
140
229
  export type { IPolicy$ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intellegens/cornerstone-client-angular",
3
- "version": "0.0.9999-alpha-42",
3
+ "version": "0.0.9999-alpha-44",
4
4
  "private": false,
5
5
  "publishable": true,
6
6
  "sideEffects": false,
@@ -19,7 +19,7 @@
19
19
  "@angular/platform-browser": "^21.2.0",
20
20
  "@angular/router": "^21.2.0",
21
21
  "rxjs": "~7.8.2",
22
- "@intellegens/cornerstone-client": "0.0.9999-alpha-42"
22
+ "@intellegens/cornerstone-client": "0.0.9999-alpha-44"
23
23
  },
24
24
  "dependencies": {
25
25
  "tslib": "^2.8.1"