UNPKG

@osaedasia/oresume

Version:

A user-friendly library for generating complete Single Page Applications (SPAs)

101 lines (100 loc) 4.66 kB
import { QueryParametersRecord, QueryParamTypeMap, QueryParamValue, ValidQueryParamTypeMapKeys } from "../domain/definitions/types/QueryParam"; import { Observable } from "../infrastructure/observer/Observable"; /** * Type representing observable query parameters with their corresponding Observable values. * @template TParamType The parameter type map. * @template TParamNames The valid parameter names from the type map. */ export type ObservableQueryParam<TParamType extends QueryParamTypeMap, TParamNames extends ValidQueryParamTypeMapKeys<TParamType> = ValidQueryParamTypeMapKeys<TParamType>> = { [K in TParamNames]: Observable<QueryParamValue<TParamType[K]>>; }; /** * Manages URL hash search parameters with type safety and observability. * @template TParamType The parameter type map defining parameter types. * @template TParamNames The valid parameter names from the type map. */ export declare class URLHashSearchParams<TParamType extends QueryParamTypeMap, TParamNames extends ValidQueryParamTypeMapKeys<TParamType> = ValidQueryParamTypeMapKeys<TParamType>> { /** * Normalized parameter definitions with all properties required. */ private readonly _parameters; /** * Array of parameter entries containing name and definition pairs. */ private readonly _parameterEntries; /** * Proxy object providing access to parameter observables. */ private readonly _parametersProxy; /** * Cache storing parameter observables. */ private readonly _observableCache; /** * Flag indicating whether parameters should be written to the URL. */ private readonly _writeParamToURL; constructor(queryParamRecord: QueryParametersRecord<TParamType>); constructor(queryParamRecord: QueryParametersRecord<TParamType>, internalWriteParamOverride: boolean); /** * @returns {ObservableQueryParam<TParamType, TParamNames>} The parameters proxy. */ get params(): ObservableQueryParam<TParamType, TParamNames>; /** * Initializes search parameters in the URL hash. * Sets default values and synchronizes with current URL state. */ initializeSearchParams: () => void; /** * Initializes the parameters record with normalized definitions. * @returns {RequiredQueryParametersRecord<TParamType>} The normalized parameters record. */ private _initializeParams; /** * Creates a proxy object for parameter observables. * @returns {ObservableQueryParam<TParamType, TParamNames>} The parameters proxy. */ private _createParamsProxy; /** * Normalizes a parameter definition by ensuring all properties are defined. * @template K The valid parameter names from the type map. * @template TParamType The parameter type map defining parameter types. * @param {QueryParameterDefinition<TParamType[K]>} def - The parameter definition to normalize. * @returns {Required<QueryParameterDefinition<TParamType[K]>>} The normalized definition. */ private _normalizeParameterDefinition; /** * Validates if a parameter name exists in the parameters record. * @template K The parameter name type. * @param {K} name The parameter name to validate. * @returns {boolean} True if the parameter exists, false otherwise. * @throws {InvalidUrlParameterError} If the parameter name is invalid. */ private _validateParamNameExists; /** * Gets or creates an Observable for a parameter. * @template K The parameter name type. * @template TParamType The parameter type map defining parameter types. * @param {K} name The parameter name. * @returns {Observable<QueryParamValue<TParamType[K]>>} The Observable for the parameter. */ private _getOrCreateObservable; /** * Retrieves the value of a search parameter. * @template K The parameter name type. * @template TParamType The parameter type map defining parameter types. * @param {K} name The parameter name. * @returns {QueryParamValue<TParamType[K]>} The parameter value. * */ private _getSearchParamValue; /** * Parses a URL value according to the parameter's expected type. * @template K The parameter name type. * @template TParamType The parameter type map defining parameter types. * @param {string | null} value The raw URL value. * @param {QueryParamValue<TParamType[K]>} defaultValue The default value used to determine the expected type. * @returns {QueryParamValue<TParamType[K]> | null} The parsed value or null if parsing fails. */ private _parseUrlValue; }