@osaedasia/oresume
Version:
A user-friendly library for generating complete Single Page Applications (SPAs)
101 lines (100 loc) • 4.66 kB
TypeScript
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;
}