@reforgium/statum 1.1.0 → 2.0.1

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,6 +1,7 @@
1
- import { AnyDict, AnyType, RestMethods, PageableRequest, Query, PageableResponse } from '@reforgium/internal';
1
+ import { AnyType, AnyDict, RestMethods, PageableRequest, Query, PageableResponse } from '@reforgium/internal';
2
2
  import * as _angular_core from '@angular/core';
3
- import { InjectionToken, Signal, WritableSignal } from '@angular/core';
3
+ import { Signal, WritableSignal, InjectionToken } from '@angular/core';
4
+ import * as _reforgium_statum from '@reforgium/statum';
4
5
 
5
6
  /**
6
7
  * List of supported primitive and composite data types
@@ -207,11 +208,10 @@ declare class Serializer<EntityType extends DataType> {
207
208
  private parseQuery;
208
209
  }
209
210
 
210
- declare const SERIALIZER_CONFIG: InjectionToken<Partial<SerializerConfig>>;
211
-
212
211
  type StorageStrategy = 'memory' | 'lru' | 'session' | 'persist';
213
212
 
214
213
  type StorageInterface<Key, Type> = {
214
+ prefix?: string;
215
215
  get(key: Key): Type | null;
216
216
  set(key: Key, value: Type): void;
217
217
  remove(key: Key): void;
@@ -231,6 +231,7 @@ declare class LruCache<KeyT, ValueT> implements StorageInterface<KeyT, ValueT> {
231
231
  has(key: KeyT): boolean;
232
232
  keys(): KeyT[];
233
233
  values(): ValueT[];
234
+ entries(): [KeyT, ValueT][];
234
235
  toArray(): ValueT[];
235
236
  fromArray(entries: [KeyT, ValueT][]): void;
236
237
  }
@@ -520,7 +521,7 @@ declare function isAbort(e: unknown): e is AbortError;
520
521
  * Controls request method, page cache, debounce delay, and
521
522
  * request/response transformations.
522
523
  */
523
- type PaginatedDataConfig<ItemsType extends object, FilterType = unknown> = {
524
+ type PaginatedDataStoreConfig<ItemsType extends object, FilterType = unknown> = {
524
525
  /** Transport HTTP method: `GET`/`POST`/`PATCH`/`PUT`/`DELETE`. Defaults to global config or `POST`. */
525
526
  method?: RestMethods;
526
527
  /** Enable LRU cache for pages. */
@@ -552,20 +553,18 @@ type PaginatedDataConfig<ItemsType extends object, FilterType = unknown> = {
552
553
  * Global defaults for `PaginatedDataStore`.
553
554
  * Can be provided via DI to avoid duplicating config in each store.
554
555
  */
555
- interface PaginatedDataStoreConfig {
556
+ type PaginatedDataStoreProviderConfig = {
556
557
  /** Default method for all stores (if not overridden locally). */
557
558
  defaultMethod?: RestMethods;
558
559
  /** Default base `page/pageSize/sort`. */
559
- defaultQuery?: PaginatedDataConfig<object>['presetQuery'];
560
+ defaultQuery?: PaginatedDataStoreConfig<object>['presetQuery'];
560
561
  /** Global `parseRequest` — maps pagination/sort into a query object. */
561
- defaultParseRequest?: PaginatedDataConfig<object>['parseRequest'];
562
+ defaultParseRequest?: PaginatedDataStoreConfig<object>['parseRequest'];
562
563
  /** Whether to enable page cache by default. */
563
564
  defaultHasCache?: boolean;
564
565
  /** Default LRU page cache size. */
565
566
  defaultCacheSize?: number;
566
- }
567
-
568
- declare const PDS_CONFIG: InjectionToken<PaginatedDataStoreConfig>;
567
+ };
569
568
 
570
569
  type PaginationType = {
571
570
  page?: number;
@@ -593,7 +592,7 @@ type PaginationType = {
593
592
  declare class PaginatedDataStore<ItemsType extends object, FilterType = unknown> {
594
593
  #private;
595
594
  private route;
596
- config: PaginatedDataConfig<ItemsType, FilterType>;
595
+ config: PaginatedDataStoreConfig<ItemsType, FilterType>;
597
596
  private readonly defaultConfig;
598
597
  /** Current page data (reactive). */
599
598
  items: WritableSignal<ItemsType[]>;
@@ -616,7 +615,7 @@ declare class PaginatedDataStore<ItemsType extends object, FilterType = unknown>
616
615
  * @param route Resource URL pattern (e.g., `'/users'`)
617
616
  * @param config Store behavior: method, cache, request/response parsers, debounce, presets, etc.
618
617
  */
619
- constructor(route: string, config?: PaginatedDataConfig<ItemsType, FilterType>);
618
+ constructor(route: string, config?: PaginatedDataStoreConfig<ItemsType, FilterType>);
620
619
  /** Force reload current data (with the same page/filters/sort). */
621
620
  refresh(): Promise<ItemsType[] | undefined>;
622
621
  /**
@@ -657,7 +656,7 @@ declare class PaginatedDataStore<ItemsType extends object, FilterType = unknown>
657
656
  *
658
657
  * @param params Dictionary of route parameters (e.g., `{ id: '123' }`)
659
658
  * @param opts Options object
660
- * @param opts.reset If `true` (default), resets page to 0, clears cache, total elements count, and items
659
+ * @param opts.reset If `true`, resets page to 0, clears cache, total elements count, and items
661
660
  * @param opts.abort If `true`, aborts all active transport requests and sets loading to false
662
661
  *
663
662
  * @example
@@ -677,7 +676,7 @@ declare class PaginatedDataStore<ItemsType extends object, FilterType = unknown>
677
676
  * Update store config on the fly (without re-creation).
678
677
  * Does not trigger loading automatically.
679
678
  */
680
- updateConfig: (config: PaginatedDataConfig<ItemsType>) => void;
679
+ updateConfig: (config: PaginatedDataStoreConfig<ItemsType>) => void;
681
680
  /**
682
681
  * Copy configuration and presets from another store of the same type.
683
682
  */
@@ -709,10 +708,21 @@ type DictStoreConfig<ItemsType extends object> = {
709
708
  * ('lru' is excluded: used internally for inner structures)
710
709
  */
711
710
  cacheStrategy?: Omit<StorageStrategy, 'lru'>;
711
+ /**
712
+ * Optional prefix applied to all storage keys.
713
+ *
714
+ * Used to isolate keys within preventing collisions
715
+ * between different modules or instances.
716
+ *
717
+ * Example:
718
+ * - keyPrefix: 'user'
719
+ * - stored key: 'user:settings'
720
+ */
721
+ keyPrefix?: string;
712
722
  /** Initial filters (added to the first request/filtering). */
713
723
  presetFilters?: Record<string, string>;
714
724
  /** Autoload data on initialization (`true` by default). */
715
- autoLoad?: boolean;
725
+ autoLoad?: boolean | 'whenEmpty';
716
726
  /**
717
727
  * Custom mapper of pagination/sort request into query params.
718
728
  * Useful if the API expects non-standard field names.
@@ -749,6 +759,39 @@ type DictLocalConfig<ItemsType extends object> = {
749
759
  /** Field key for value in a dictionary item. Defaults to `'code'`. */
750
760
  valueKey?: keyof ItemsType & string;
751
761
  };
762
+ type DictStoreProviderConfig = {
763
+ /**
764
+ * Cache strategy for options:
765
+ * - 'memory' — in-memory only,
766
+ * - 'session' — sessionStorage,
767
+ * - 'persist' — localStorage.
768
+ * ('lru' is excluded: used internally for inner structures)
769
+ */
770
+ defaultCacheStrategy?: DictStoreConfig<AnyType>['cacheStrategy'];
771
+ /**
772
+ * Optional prefix applied to all storage keys.
773
+ *
774
+ * Used to isolate keys within preventing collisions
775
+ * between different modules or instances.
776
+ *
777
+ * Example:
778
+ * - keyPrefix: 'user'
779
+ * - stored key: 'user:settings'
780
+ */
781
+ defaultPrefix?: string;
782
+ /** Initial filters (added to the first request/filtering). */
783
+ defaultPresetFilters?: DictStoreConfig<AnyType>['presetFilters'];
784
+ /** Transport method for fetching the dictionary. Defaults to 'POST'. */
785
+ defaultRestMethod?: DictStoreConfig<AnyType>['method'];
786
+ /** Debounce delay before request (ms) — for frequent input/search. */
787
+ defaultDebounceTime?: DictStoreConfig<AnyType>['debounceTime'];
788
+ /** Maximum number of options exposed (truncates `options`). */
789
+ defaultMaxOptionsSize?: DictStoreConfig<AnyType>['maxOptionsSize'];
790
+ /** Field key for label in a dictionary item. Defaults to `'name'`. */
791
+ defaultLabelKey?: DictStoreConfig<AnyType>['labelKey'];
792
+ /** Field key for value in a dictionary item. Defaults to `'code'`. */
793
+ defaultValueKey?: DictStoreConfig<AnyType>['valueKey'];
794
+ };
752
795
  type ValueType = string[] | string | number | null | undefined;
753
796
 
754
797
  /**
@@ -772,6 +815,12 @@ declare class DictStore<Type extends AnyDict> {
772
815
  private apiUrl;
773
816
  private storageKey;
774
817
  static readonly MAX_CACHE_SIZE = 400;
818
+ /**
819
+ * Default dictionary configuration resolved from {@link STATUM_CONFIG}.
820
+ *
821
+ * Used as a global fallback when local configuration does not explicitly
822
+ */
823
+ defaultConfig: _reforgium_statum.DictStoreProviderConfig;
775
824
  private readonly fixed;
776
825
  private readonly labelKey;
777
826
  private readonly valueKey;
@@ -792,12 +841,12 @@ declare class DictStore<Type extends AnyDict> {
792
841
  * Current list of dictionary items.
793
842
  * Source — local cache (fixed=true) or data from `PaginatedDataStore`.
794
843
  */
795
- items: _angular_core.Signal<readonly Type[]>;
844
+ items: Signal<readonly Type[]>;
796
845
  /**
797
846
  * Ready-to-use dropdown options: `{ label, value }`.
798
847
  * Respects `maxOptionsSize` for truncating the list.
799
848
  */
800
- options: _angular_core.Signal<{
849
+ options: Signal<{
801
850
  label: string;
802
851
  value: Type[keyof Type & string];
803
852
  }[]>;
@@ -808,7 +857,7 @@ declare class DictStore<Type extends AnyDict> {
808
857
  * @param storageKey key for saving cache in the selected strategy
809
858
  * @param cfg behavior (fixed/search, parsers, label/value keys, cache strategy, etc.)
810
859
  */
811
- constructor(apiUrl: string, storageKey: string, { method, autoLoad, presetFilters, parseResponse, parseRequest, debounceTime, fixed, maxOptionsSize, labelKey, valueKey, cacheStrategy, }: DictStoreConfig<Type>);
860
+ constructor(apiUrl: string, storageKey: string, { autoLoad, method, presetFilters, parseResponse, parseRequest, debounceTime, fixed, maxOptionsSize, labelKey, valueKey, keyPrefix, cacheStrategy, }: DictStoreConfig<Type>);
812
861
  /** Restore cache from the selected storage (`persist`/`session`/`lru`/`memory`). */
813
862
  restoreCache(): void;
814
863
  /**
@@ -839,14 +888,32 @@ declare class DictStore<Type extends AnyDict> {
839
888
  private restoreFromStorage;
840
889
  private filterLocal;
841
890
  private keyOf;
891
+ private setAutoload;
842
892
  }
843
893
 
844
894
  declare class DictLocalStore<Type extends AnyDict> {
845
895
  #private;
896
+ /**
897
+ * Default dictionary configuration resolved from {@link STATUM_CONFIG}.
898
+ *
899
+ * Used as a global fallback when local configuration does not explicitly
900
+ * define dictionary keys.
901
+ */
902
+ defaultConfig: _reforgium_statum.DictStoreProviderConfig;
903
+ /**
904
+ * Source dictionary items.
905
+ *
906
+ * Represents the full, unfiltered list of dictionary entries.
907
+ * Used as the base data set for search and option generation.
908
+ */
846
909
  items: _angular_core.WritableSignal<readonly Type[]>;
847
910
  /**
848
- * Ready-to-use options for dropdowns: `{ label, value }`.
849
- * Respects `maxOptionsSize` to truncate the list.
911
+ * Computed list of options in `{ label, value }` format.
912
+ *
913
+ * Based on the current draft items (after search/filtering).
914
+ * Respects `maxOptionsSize` to limit the number of generated options.
915
+ *
916
+ * Intended for direct use in dropdowns and select-like components.
850
917
  */
851
918
  options: _angular_core.Signal<{
852
919
  label: string;
@@ -857,20 +924,64 @@ declare class DictLocalStore<Type extends AnyDict> {
857
924
  private readonly maxOptionsSize?;
858
925
  constructor(items: Type[], config?: DictLocalConfig<Type>);
859
926
  /**
860
- * No-op method for API compatibility with DictStore.
927
+ * Restore cached dictionary state.
928
+ *
929
+ * This implementation is a no-op and exists only for API compatibility
930
+ * with {@link DictStore}.
861
931
  */
862
932
  restoreCache(): void;
863
933
  /**
864
- * Find display label by value (usually for reverse binding).
865
- * @returns label string or `undefined` if not found
934
+ * Resolve display label by value.
935
+ *
936
+ * Performs a linear search over dictionary items and returns
937
+ * the corresponding label for the given value.
938
+ *
939
+ * Commonly used for reverse binding (value → label).
940
+ *
941
+ * @param value Dictionary value to look up
942
+ * @returns Resolved label string, or `undefined` if not found
866
943
  */
867
944
  findLabel: (value: ValueType) => string | undefined;
945
+ /**
946
+ * Filter dictionary items by label.
947
+ *
948
+ * Applies a case-insensitive substring match against the label field
949
+ * and updates the internal draft items used for option generation.
950
+ *
951
+ * Passing an empty string resets the filter and restores all items.
952
+ *
953
+ * @param name Search query string
954
+ */
868
955
  search: (name?: string) => void;
956
+ /**
957
+ * Preload additional dictionary items.
958
+ *
959
+ * Can either replace the current items completely or append
960
+ * new entries to the existing list.
961
+ *
962
+ * Updates both the source items and the current draft items.
963
+ *
964
+ * @param items Items to preload
965
+ * @param opts Preload options
966
+ * @param opts.replace When `true`, replaces existing items instead of appending
967
+ */
869
968
  preload: (items: readonly Type[], opts?: {
870
969
  replace?: boolean;
871
970
  }) => void;
872
971
  }
873
972
 
874
- export { AbortError, CacheMissError, DictLocalStore, DictStore, LruCache, PDS_CONFIG, PaginatedDataStore, ResourceStore, SERIALIZER_CONFIG, Serializer, isAbort, storageStrategy };
875
- export type { DataType, DictLocalConfig, DictStoreConfig, FieldConfig, PaginatedDataConfig, PaginatedDataStoreConfig, ResourceRoutesMap, ResourceStatus, ResourceStoreOptions, SerializedType, SerializerConfig, StorageInterface, StorageStrategy, Types };
973
+ type PaginatedDataProviderConfig = {
974
+ paginatedData?: PaginatedDataStoreProviderConfig;
975
+ };
976
+ type SerializerProviderConfig = {
977
+ serializer?: Partial<SerializerConfig>;
978
+ };
979
+ type DictProviderConfig = {
980
+ dict?: DictStoreProviderConfig;
981
+ };
982
+ type StatumConfig = PaginatedDataProviderConfig & SerializerProviderConfig & DictProviderConfig;
983
+ declare const STATUM_CONFIG: InjectionToken<StatumConfig>;
984
+
985
+ export { AbortError, CacheMissError, DictLocalStore, DictStore, LruCache, PaginatedDataStore, ResourceStore, STATUM_CONFIG, Serializer, isAbort, storageStrategy };
986
+ export type { DataType, DictLocalConfig, DictStoreConfig, DictStoreProviderConfig, FieldConfig, PaginatedDataStoreConfig, PaginatedDataStoreProviderConfig, ResourceRoutesMap, ResourceStatus, ResourceStoreOptions, SerializedType, SerializerConfig, StorageInterface, StorageStrategy, Types };
876
987
  //# sourceMappingURL=reforgium-statum.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reforgium-statum.d.ts","sources":["../../../../libs/statum/src/serializer/serialize.models.ts","../../../../libs/statum/src/serializer/serializer.ts","../../../../libs/statum/src/serializer/serializer.provider.ts","../../../../libs/statum/src/cache/storage-strategy/models.ts","../../../../libs/statum/src/cache/storages/models.ts","../../../../libs/statum/src/cache/storages/lru.storage.ts","../../../../libs/statum/src/cache/storage-strategy/storage.strategy.ts","../../../../libs/statum/src/stores/resource-store/resource.models.ts","../../../../libs/statum/src/stores/resource-store/resource.store.ts","../../../../libs/statum/src/stores/resource-store/resource.utils.ts","../../../../libs/statum/src/stores/paginated-data-store/paginated-data.models.ts","../../../../libs/statum/src/stores/paginated-data-store/paginated-data.provider.ts","../../../../libs/statum/src/stores/paginated-data-store/paginated-data.store.ts","../../../../libs/statum/src/stores/dict-store/dict.models.ts","../../../../libs/statum/src/stores/dict-store/dict.store.ts","../../../../libs/statum/src/stores/dict-store/dict-local.store.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reforgium-statum.d.ts","sources":["../../../../libs/statum/src/serializer/serialize.models.ts","../../../../libs/statum/src/serializer/serializer.ts","../../../../libs/statum/src/cache/storage-strategy/models.ts","../../../../libs/statum/src/cache/storages/models.ts","../../../../libs/statum/src/cache/storages/lru.storage.ts","../../../../libs/statum/src/cache/storage-strategy/storage.strategy.ts","../../../../libs/statum/src/stores/resource-store/resource.models.ts","../../../../libs/statum/src/stores/resource-store/resource.store.ts","../../../../libs/statum/src/stores/resource-store/resource.utils.ts","../../../../libs/statum/src/stores/paginated-data-store/paginated-data.models.ts","../../../../libs/statum/src/stores/paginated-data-store/paginated-data.store.ts","../../../../libs/statum/src/stores/dict-store/dict.models.ts","../../../../libs/statum/src/stores/dict-store/dict.store.ts","../../../../libs/statum/src/stores/dict-store/dict-local.store.ts","../../../../libs/statum/src/statum.provider.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":"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"}