@reforgium/internal
v2.0.6
Published
Hidden Reforgium foundation package for shared primitives, tokens, and infrastructure.
Maintainers
Readme
@reforgium/internal
Shared infrastructure package for Reforgium Angular libraries.
- foundation primitives belong here
- feature semantics do not
- legacy compatibility for
angular-common-kitdoes not
@reforgium/internal is infrastructure for Reforgium packages and is not intended as a user-facing product package.
Install
internal is primarily consumed transitively by other @reforgium/* packages.
Direct installation is possible for workspace and low-level internal use, but it is not the recommended first entrypoint for app code.
npm i @reforgium/internalPublic API
@reforgium/internal exports:
modelscodecsstoragetokensutils
Models
Main model groups:
query.models.ts:SortToken,SortDirection,SortRule,SortInput,QueryArrayMode,QueryFieldModes,QueryParams,Querytransport.models.ts:RestMethods,PageableRequest,PageableResponse<T>,ErrorResponseelements.ts:Direction,ElementRect,ElementSize,ElementPosition,ElementEdgesutil.ts:AnyType,AnyDict,LiteralOf,ValueOf,Nullable,Nullish,NullableProps,OptionalExcept,RequiredExcept,Mutable, JSON helper types
Compatibility-only model surface:
components.ts:Appearance,SelectOption,SelectIconOptionapi.ts: deprecated mixed facade kept for compatibility; prefer explicit query and transport types
Codecs
Main codec exports:
SerializerSerializerFieldErrorSerializerConfigFieldConfigSerializedType
These are shared bidirectional transform primitives used by statum and regula.
Storage
Main storage exports:
StorageInterfaceStorageStrategy,StorageStrategyOptionsMemoryStorageLocalStorageSessionStorageLruCachestorageStrategy(...)
Tokens
Language tokens:
SELECTED_LANG: InjectionToken<Signal<Langs>>CHANGE_LANG: InjectionToken<(lang: Langs) => void>TRANSLATIONREGISTER_LANG(multi-token)BUILTIN_LANGSprovideLangs(...langs: string[])Langs = BuiltInLangs | (string & {})
Theme/device/validation tokens:
SELECTED_THEME,CHANGE_THEME,ThemesCURRENT_DEVICE,DevicesVALIDATION_MESSAGES,ValidationMessages,ValidationErrorData: compatibility-only legacy validation token surface
Example:
import { provideLangs } from '@reforgium/internal';
export const appConfig = {
providers: [provideLangs('de', 'fr')],
};Utilities
Exported utilities:
web.utils.ts:downloadByBlob,downloadByUrl,copyText,base64ToBlobtimers.utils.ts:throttleSignal,debounceSignaldate.utils.ts:toDate,formatDate,formatToLocaledDate,parseToDate,parseToDatePeriod,isDatePeriod,reformatDateToISOtypes.utils.ts:isNumber,isNullable,isObject,parseQueryArray,concatArrayformat.utils.ts:formatToSpacedNumber,truncatepositions.utils.ts:getCorrectedPositionavailable-height.utils.ts:getAvailableHeightget-chained-value.utils.ts:getChainedValuequery.utils.ts:buildQueryParams,appendQueryParamsByMode,parseQueryParams,parseQueryParamsByMode,mergeQueryParams,makeQuerysort.utils.ts:toSortToken,sortRuleToToken,parseSortToken,normalizeSortInput,sortInputToTokensurls.utils.ts:normalizeUrl,fillUrlWithParams,appendQueryParams,parseQueryParamsroutes.utils.ts:materializeRoutePath,compareRoutes,makeQuerydeep-equal.utils.ts:deepEqualgenerate.utils.ts:generateId
Recommended entrypoints:
- prefer
query.utils.tsfor new query-string work; - prefer
sort.utils.tsfor new sort serialization/parsing work; - keep
urls.utils.tsandroutes.utils.tsfor narrower low-level cases.
query.utils.ts example:
import { buildQueryParams, mergeQueryParams, parseQueryParamsByMode } from '@reforgium/internal';
const query = buildQueryParams(
{
tags: ['angular', 'signals'],
sort: ['name,asc', 'createdAt,desc'],
page: 2,
},
'comma',
{ sort: 'multi' },
);
// tags=angular%2Csignals&page=2&sort=name%2Casc&sort=createdAt%2Cdesc
const next = mergeQueryParams(
{ page: 1, tags: ['angular'], tenant: 'kg' },
{ page: 2, tenant: null, sort: ['name,asc'] },
);
// { page: 2, tags: ['angular'], sort: ['name,asc'] }
const parsed = parseQueryParamsByMode(query, 'comma', { sort: 'multi' });
// { tags: ['angular', 'signals'], sort: ['name,asc', 'createdAt,desc'], page: '2' }sort.utils.ts example:
import { parseSortToken, sortInputToTokens, toSortToken } from '@reforgium/internal';
toSortToken('name', 'asc');
// 'name,asc'
sortInputToTokens([
{ sort: 'name', order: 'asc' },
{ sort: 'createdAt', order: 'desc' },
]);
// ['name,asc', 'createdAt,desc']
parseSortToken('createdAt,desc');
// { sort: 'createdAt', order: 'desc' }Low-level makeQuery(..., 'multi') behavior:
import { makeQuery } from '@reforgium/internal';
makeQuery({ ids: [1, 2, 3], q: 'ok' }, 'multi');
// ids=1&ids=2&ids=3&q=okstorage example:
import { LruCache, storageStrategy } from '@reforgium/internal';
const pages = new LruCache<number, string[]>(5);
pages.set(1, ['a', 'b']);
const persisted = storageStrategy<string, { updatedAt: number }>('persist');
persisted.set('users', { updatedAt: Date.now() });codecs example:
import { Serializer } from '@reforgium/internal';
const serializer = new Serializer<{
search: string;
createdAt: Date;
}>({
mapFields: {
createdAt: { type: 'date' },
},
});
serializer.serialize({
search: ' regula ',
createdAt: new Date('2026-04-04'),
});
// { search: 'regula', createdAt: '2026-04-04' }License
MIT
