| addAlphaToHexColor | |||||||||
addAlphaToHexColor(color: unknown, opacity: unknown)
|
|||||||||
|
Parameters :
|
| additions | ||||||
additions(snapshot: Record)
|
||||||
|
every (non-hidden) field of a snapshot rendered as an addition
Parameters :
Returns :
FieldChange[]
|
| applyDelta | |||||||||
applyDelta(state: Record, delta)
|
|||||||||
|
apply a jsondiffpatch delta to a deep clone of the current state
Parameters :
Returns :
Record<string, unknown>
|
| buildChangeEvents | ||||
buildChangeEvents(rawDocs)
|
||||
|
Build the displayable change history for one entity from its raw audit docs. A jsondiffpatch update-delta only encodes what changed (e.g. items added to
an array by index), not the full prior value — so per-field before/after
cannot be read from a single delta. Instead the full document state is
replayed: starting from the
Parameters :
Returns :
ChangeEvent[]
events newest-first |
| byChronology | |||||||||
byChronology(a: RawAuditDoc, b: RawAuditDoc)
|
|||||||||
|
chronological: by server timestamp, then by revision generation
Parameters :
Returns :
number
|
| changedFieldsOf | ||||||
changedFieldsOf(doc: AuditDelta)
|
||||||
|
The names of the fields one audit record changed, read directly from its raw
This is what the system-wide change log needs: a top-level jsondiffpatch delta is already keyed by field name, so the names (unlike the before/after values, see buildChangeEvents) need no prior state. That makes a row renderable from its own audit doc alone, so the log can page over records of many different entities without loading a history per entity. A
Parameters :
Returns :
string[]
|
| fieldChanges | |||||||||
fieldChanges(prev: Record, next: Record)
|
|||||||||
|
the (non-hidden) fields whose full value differs between two states
Parameters :
Returns :
FieldChange[]
|
| isHidden | ||||||
isHidden(field: string)
|
||||||
|
Parameters :
Returns :
boolean
|
| revGeneration | ||||||
revGeneration(rev?: string)
|
||||||
|
Parameters :
Returns :
number
|
| snapshotOf | ||||||
snapshotOf(doc: AuditDelta)
|
||||||
|
the full document snapshot carried by a baseline (raw doc) or create (
Parameters :
Returns :
Record<string, unknown>
|
| addPropertySchema | ||||||||||||
addPropertySchema(target: unknown, propertyName: string, propertySchema: EntitySchemaField)
|
||||||||||||
|
Parameters :
|
| DatabaseField | ||||||||||
DatabaseField(propertySchema: EntitySchemaField)
|
||||||||||
|
Decorator (Annotation also see
Parameters :
|
| getEntitySchema | ||||||
getEntitySchema(ctor: unknown)
|
||||||
|
Returns the schema map of this entity (not the superclass). Creates and assigns a new one if it doesn't exist yet.
Parameters :
Returns :
EntitySchema
|
| addToGroup | ||||||||||||
addToGroup(allGroups: unknown, currentValue: unknown, currentElement: unknown)
|
||||||||||||
|
Parameters :
|
| calculateAge | ||||||
calculateAge(dateOfBirth: Date)
|
||||||
|
Parameters :
Returns :
number
|
| compareEnums | |||||||||
compareEnums(a: ConfigurableEnumValue, b: ConfigurableEnumValue)
|
|||||||||
|
Parameters :
Returns :
boolean
|
| dateToString | ||||||
dateToString(value: Date)
|
||||||
|
Parameters :
|
| equals | |||||||||
equals(a: unknown, b: unknown)
|
|||||||||
|
Comparing two values for equality that might be different than just object equality
Parameters :
Returns :
boolean
|
| getParentUrl | ||||||
getParentUrl(router: Router)
|
||||||
|
Parameters :
Returns :
string
|
| getUrlWithoutParams | ||||||
getUrlWithoutParams(router: Router)
|
||||||
|
Parameters :
Returns :
string
|
| isValidDate | ||||||
isValidDate(date: any)
|
||||||
|
Parameters :
Returns :
boolean
|
| readFile | ||||||
readFile(file: Blob)
|
||||||
|
Parameters :
Returns :
Promise<string>
|
| readFileAsArrayBuffer | ||||||
readFileAsArrayBuffer(file: Blob)
|
||||||
|
Read the contents of a Blob into an
Parameters :
Returns :
Promise<ArrayBuffer>
|
| serviceProvider | |||||||||
serviceProvider<T>(service, factory)
|
|||||||||
Type parameters :
|
|||||||||
|
This is a simple shorthand function to create factories for services. The use case is, when multiple services extend the same class and one of these services will be provided.
Parameters :
Returns :
FactoryProvider
|
| sortByAttribute | |||||||||
sortByAttribute<OBJECT>(attribute, order)
|
|||||||||
Type parameters :
|
|||||||||
|
Parameters :
Returns :
number
|
| addTooltip | ||||||
addTooltip(profile: ExternalProfile)
|
||||||
|
Parameters :
Returns :
ExternalProfile & { _tooltip?: string }
|
| allOfSelectors | ||||
allOfSelectors(...selectors: undefined)
|
||||
|
Combine Mango selectors so that a document has to match all of them,
leaving out empty ones (and the
Parameters :
Returns :
PouchDB.Find.Selector
|
| sortedQueries | ||||||||||||||||
sortedQueries(prefix: string, query, sort)
|
||||||||||||||||
|
The two queries that together return an entity type's documents sorted by a property, in the order in which to page through them. A Mango index only contains the documents that have every indexed field
(and cannot be told to treat a missing one like
Parameters :
Returns :
unknown
|
| typeSelector | ||||||||
typeSelector(prefix: string)
|
||||||||
|
Selector matching all documents of one entity type.
Parameters :
Returns :
PouchDB.Find.Selector
|
| applyConfigMigrations | ||||||
applyConfigMigrations<E>(doc: E)
|
||||||
Type parameters :
|
||||||
|
Apply all config migrations to a plain JSON document. Returns the migrated document as a plain object (no Angular entity re-hydration). Used by the admin CLI; ConfigService wraps this and also applies defaultConfigs (addDefaultNoteDetailsConfig, addDefaultTodoViews) before calling this, so the migrations above can see those default-added view configs too.
Parameters :
Returns :
E
|
| buildEntityBasePaths | ||||||
buildEntityBasePaths(data: Record)
|
||||||
|
Parameters :
Returns :
Set<string>
|
| isEmptyFilterCondition | ||||||
isEmptyFilterCondition(condition: any)
|
||||||
|
Parameters :
Returns :
boolean
|
| migrateNavMenuItem | |||||||||
migrateNavMenuItem(item: any, data: Record)
|
|||||||||
|
Parameters :
Returns :
any
|
| migrateNavMenuItems | |||||||||
migrateNavMenuItems(items, data: Record)
|
|||||||||
|
Parameters :
Returns :
any[]
|
| migrateShortcutItem | |||||||||
migrateShortcutItem(item: any, entityBasePaths: Set)
|
|||||||||
|
Parameters :
Returns :
any
|
| removeIsActiveCondition | ||||||
removeIsActiveCondition(filterPart: any)
|
||||||
|
Parameters :
Returns :
any
|
| rewriteNavMenuLinks |
rewriteNavMenuLinks(items, oldLink: string, newLink: string)
|
|
Returns :
any[]
|
| applyOnlineOnlyPreference |
applyOnlineOnlyPreference()
|
|
If the user previously opted into online-only mode, override session_type early so that database instances are created with the correct type from the start. This MUST run before Angular bootstraps, because DatabaseFactoryService reads environment.session_type the first time a database is lazily accessed (during Angular DI startup, before LoginComponent even exists). If we waited until LoginComponent ran, the wrong DB class would already have been instantiated. The flow is:
See also: LoginComponent.onOnlineOnlyChanged() and ONLINE_ONLY_KEY. |
| applyPublicFormSession |
applyPublicFormSession()
|
|
Force online-only mode when bootstrapping a public-form route, so the database factory creates a RemotePouchDatabase from the first lazy access rather than a SyncedPouchDatabase that would never be initialized. |
| initConfigJsonToEnvironment |
initConfigJsonToEnvironment()
|
|
Load basic config values from assets/keycloak.json into environment |
| initEnvironmentConfig |
initEnvironmentConfig()
|
|
Overwrite environment settings with the settings from the |
| initFirebaseConfigToEnvironment |
initFirebaseConfigToEnvironment()
|
|
Load Push Notifications config for Firebase. Please add assets/firebase-config.json with your own Firebase config |
| initKeycloakConfigToEnvironment |
initKeycloakConfigToEnvironment()
|
|
Load Keycloak server URL from assets/keycloak.json into environment |
| isPublicFormRoute |
isPublicFormRoute()
|
|
Returns :
boolean
|
| applyRangeSelection | |||||||||||||||
applyRangeSelection<T extends Entity>(selectedRecords, rows, range, shouldCheck: boolean)
|
|||||||||||||||
Type parameters :
|
|||||||||||||||
|
Applies a contiguous shift-selection update over a row index range.
Parameters :
Returns :
T[]
|
| isCheckboxTarget | ||||
isCheckboxTarget(target)
|
||||
|
Detects whether the click originated from a checkbox input.
Parameters :
Returns :
boolean
|
| isClickableTarget | ||||
isClickableTarget(target)
|
||||
|
Detects whether the click target is inside an element marked as
Parameters :
Returns :
boolean
|
| shouldSkipRowInteraction | |||||||||
shouldSkipRowInteraction<T extends Entity>(target, row: TableRow)
|
|||||||||
Type parameters :
|
|||||||||
|
Determines whether row-click handling should be skipped for this interaction.
Parameters :
Returns :
boolean
|
| toggleRecordSelection | ||||||||||||
toggleRecordSelection<T extends Entity>(selectedRecords, record: T, checked: boolean)
|
||||||||||||
Type parameters :
|
||||||||||||
|
Adds or removes a single record from the selected records collection.
Parameters :
Returns :
T[]
|
| updateSelectionFromMouseDown | ||||||
updateSelectionFromMouseDown<T extends Entity>(input: MouseSelectionInput)
|
||||||
Type parameters :
|
||||||
|
Computes the next selection state for a row
Parameters :
Returns :
MouseSelectionUpdate<T>
|
| applySortingRules | ||||||
applySortingRules(columns, getDatatypeOrDefault)
|
||||||
|
Applies sorting rules to columns: disables sorting for entity references, untyped columns, and arrays (unless the datatype provides custom sort logic).
Parameters :
Returns :
FormFieldConfig[]
|
| inferDefaultSort | ||||||||
inferDefaultSort(colsToDisplay, columns, getDatatypeOrDefault)
|
||||||||
|
Infers a stable default sort from visible sortable columns. Date-like columns default to descending order.
Parameters :
Returns :
Sort | undefined
|
| resolveAgeSourceField | ||||||
resolveAgeSourceField(column: FormFieldConfig)
|
||||||
|
Resolve the source field for virtual These columns display an age from another field, e.g.
Parameters :
Returns :
string | undefined
|
| applyTextToCreatedEntity |
applyTextToCreatedEntity(entity: Entity, input: string)
|
|
Update the given entity by applying the text entered by a user to the most likely appropriate entity field, inferred from the toString representation. |
| applyUpdate | ||||||||||||||||||||
applyUpdate<T extends Entity>(entities, next: UpdatedEntity, addIfMissing: boolean)
|
||||||||||||||||||||
Type parameters :
|
||||||||||||||||||||
|
Updates a list of entities given an updated version of the entity. This updated version can either be a new entity (that should be inserted into the list), or an existing entity that should be updated or deleted. The given array will not be mutated but will be returned when the given new entity or type is illegal
Parameters :
Returns :
T[]
An array of the given entities with the update applied |
| asArray | ||||
asArray<T>(x)
|
||||
Type parameters :
|
||||
|
Convert wrap a value in an array if it is not already an array.
Parameters :
Returns :
T[]
|
| asSingle | ||||
asSingle(entity)
|
||||
|
Parameters :
Returns :
Entity | undefined
|
| authorFilterOptions | ||||
authorFilterOptions(authors)
|
||||
|
One filter option per record a login account can belong to. Matched on every shape the author can be recorded in: the backend writes what the access token carried, which is the record's id where the account names one and the plain username otherwise. The username is the record id without its type prefix, which is how an account without an explicit id is linked to its record in the first place (see KeycloakAuthService).
Parameters :
Returns :
FilterSelectionOption[]
|
| entityTypeFilterOptions | ||||
entityTypeFilterOptions(types)
|
||||
|
One filter option per entity type, each selecting that type's records by a prefix range on the raw stored id. It is legal in a selector even though AuditRecord declares no property of that name - see the class.
Parameters :
Returns :
FilterSelectionOption[]
|
| operationFilterOptions |
operationFilterOptions()
|
|
One filter option per operation the log lets the user narrow to.
Returns :
FilterSelectionOption[]
|
| bootstrap |
bootstrap()
|
| buildAuditReferenceIndex |
buildAuditReferenceIndex()
|
|
A fresh copy of the design document to create in the audit database. Built per call rather than shared: |
| buildEnumValueFilter |
buildEnumValueFilter<T extends Entity>(name: string, enumValueId: string)
|
Type parameters :
|
|
Match records holding the given enum value, whether stored as a single value
or inside an array (multi-select / Always both variants are matched, independent of the field's current
Returns :
DataFilter<T>
|
| buildExportColumnResolvers | ||||||||||||||||||||
buildExportColumnResolvers(schema: Map, entitySchemaService: EntitySchemaService, useFieldIdAsFallbackLabel: unknown)
|
||||||||||||||||||||
|
Build export column resolvers for all fields in a schema. Iterates the schema, looks up each field's datatype, and collects
the columns the datatype contributes via
Parameters :
Returns :
ExportColumnResolver[]
|
| buildMatchingSideConfig | ||||||||||||||||
buildMatchingSideConfig(side: MatchingSideConfig, columns, sideIndex: number)
|
||||||||||||||||
|
Create a MatchingSideConfig object and fill it with columns from comparison array if necessary
Parameters :
Returns :
MatchingSideConfig
|
| buildPermissionConditionValidator | |||||||||||||||||||||||||
buildPermissionConditionValidator(rules, fieldId: string, toDbFormat, formatValue?)
|
|||||||||||||||||||||||||
|
Create a form validator that checks a single field's value against the
permission rule The rules are evaluated in the given priority order (as returned by
Returns
Parameters :
Returns :
ValidatorFn | null
|
| createFieldDecision | |||||||||
createFieldDecision(rule: RuleWithConditions, fieldId: string)
|
|||||||||
|
Parameters :
Returns :
FieldDecision
|
| describeConditionFragment | |||||||||||||||
describeConditionFragment(fragment: any, formatValue)
|
|||||||||||||||
|
Human-readable summary of a single permission condition fragment
(the value of one key in a CASL rule's
Parameters :
Returns :
string
|
| buildReadonlyValidator | ||||||
buildReadonlyValidator(entity: Entity)
|
||||||
|
Validator to ensure a field becomes readonly after it has been saved once.
Parameters :
Returns :
{ fn: ValidatorFn }
|
| calculateDateRange | ||||||
calculateDateRange(dateRangeOption: DateRangeFilterConfigOption)
|
||||||
|
Parameters :
Returns :
DateRange<Date>
|
| callbackIndex | ||||
callbackIndex(args)
|
||||
|
Parameters :
Returns :
number | null
|
| enableVitestProxyZoneCompat |
enableVitestProxyZoneCompat()
|
|
Returns :
void
|
| isFunction | ||||
isFunction(value)
|
||||
|
Wraps Vitest lifecycle and test callbacks in Angular's ProxyZone when it is available. Angular test utilities such as
Parameters :
Returns :
TestFunction
|
| patchCallable | |||||||||
patchCallable(target: Record, key: string)
|
|||||||||
|
Parameters :
Returns :
void
|
| wrapWithProxyZone | ||||||
wrapWithProxyZone(fn: TestFunction)
|
||||||
|
Parameters :
Returns :
TestFunction
|
| cleanUpTemporarySchemaFields |
cleanUpTemporarySchemaFields()
|
|
Helper function to remove custom schema fields from Entity that have been created using getDefaultInheritedForm(). |
| getDefaultInheritedForm | ||||||
getDefaultInheritedForm(additionalSchemaConfig)
|
||||||
|
Helper function to add some custom schema fields to Entity for testing. Use in combination with a call to cleanUpTemporarySchemaFields() in afterEach.
Parameters :
Returns :
EntityForm<any>
|
| testDefaultValueCase | ||||||||||||
testDefaultValueCase(service: DefaultValueService, fieldSchema: EntitySchemaField, expected: any)
|
||||||||||||
|
Parameters :
|
| clearLastSyncMarkers |
clearLastSyncMarkers()
|
|
Remove the "last sync" marker of every database, so that no previous sync is assumed to have happened on this device. This accesses the real localStorage directly rather than the injectable LOCAL_STORAGE_TOKEN, because it also runs before Angular exists. Callers that need this mockable should wrap it in an instance method first. |
| runPendingReset |
runPendingReset()
|
|
Run pending reset cleanup before Angular bootstraps. Called from main.ts so that IndexedDB databases are deleted while no PouchDB connections are open (eliminating race conditions).
Returns :
Promise<void>
|
| closeOnlySubmenu | |||||||||
closeOnlySubmenu(menu: MatMenuTrigger, event: MouseEvent)
|
|||||||||
|
Close the mat-menu of the given menu trigger and stop propagation of the event to avoid closing parent menus as well.
Parameters :
|
| collectQueryStrings | ||||
collectQueryStrings(node)
|
||||
|
Recursively collect every
Parameters :
Returns :
string[]
|
| isHierarchicalReport | ||||
isHierarchicalReport(report)
|
||||
|
Whether a report's results should be rendered as a hierarchical group/count
table ( Derived purely from the canonical config structure (no version flag):
a report is hierarchical when its
Parameters :
Returns :
boolean
|
| reportUsesDateRange | ||||
reportUsesDateRange(report)
|
||||
|
Whether running this report offers a date-range (start & end date) input, derived from the date placeholders used in its queries so it stays in sync with the actual report definition:
Parameters :
Returns :
boolean
|
| combineFilterConditions | ||||
combineFilterConditions<T>(...conditions: undefined)
|
||||
Type parameters :
|
||||
|
Combine the given conditions so that all of them have to be met. Conditions without any content are left out, because an empty object as an
Parameters :
Returns :
DataFilter<T>
|
| createEmptyValueFilter | ||||||||||||||||
createEmptyValueFilter<T extends Entity>(fieldName: string, includeNestedId: unknown, includeEmptyArray: unknown)
|
||||||||||||||||
Type parameters :
|
||||||||||||||||
|
Parameters :
Returns :
DataFilter<T>
|
| compareDates |
compareDates(a: Date, b: string)
|
|
Compare dates at day precision
Returns :
"1" | unknown | "0"
|
| extendedCompare | |||||||||
extendedCompare<T>(a: T, b: T)
|
|||||||||
Type parameters :
|
|||||||||
|
Handles special cases like ConfigurableEnum objects and Dates. Used for filter evaluation and conditional color matching. This utility is kept separate to avoid circular dependencies between Entity and FilterService.
Parameters :
Returns :
"1" | unknown | "0"
-1 if a < b, 0 if a === b, 1 if a > b |
| compareValues | |||||||||
compareValues(a: unknown, b: unknown)
|
|||||||||
|
Parameters :
|
| getComparableValue | ||||||||||||
getComparableValue<OBJECT, PROPERTY extends keyof OBJECT>(obj: OBJECT, key: PROPERTY, sortValueFns?: SortValueFns)
|
||||||||||||
Type parameters :
|
||||||||||||
|
Parameters :
Returns :
number | string | Symbol
|
| tableSort | ||||||||||||||||||||
tableSort<OBJECT extends Entity, PROPERTY extends keyof OBJECT>(data, __namedParameters: {direction: "asc" | "desc" | string, active: PROPERTY | string, sortValueFns: SortValueFns<OBJECT>})
|
||||||||||||||||||||
Type parameters :
|
||||||||||||||||||||
|
Custom sort implementation for a MatTableDataSource<TableRow
Parameters :
Returns :
TableRow[]
the sorted table rows |
| computeDbNames | ||||||
computeDbNames(session: SessionInfo)
|
||||||
|
Compute new-format database names (using Keycloak UUID + dash separator). Used after migration to the "indexeddb" adapter.
Parameters :
Returns :
{ app: string; notifications: string }
|
| computeLegacyDbNames | ||||||
computeLegacyDbNames(session: SessionInfo)
|
||||||
|
Compute legacy-format database names (username for app, underscore for notifications). Used with the old "idb" adapter before migration.
Parameters :
Returns :
{ app: string; notifications: string }
|
| convertToCouchRegex | ||||||||
convertToCouchRegex(node: any)
|
||||||||
|
Recursively converts any $regex value in an object to a CouchDB inline (?i) pattern.
Parameters :
Returns :
any
The transformed query object. |
| convertToMomentFormat | ||||||
convertToMomentFormat(angularFormat: string)
|
||||||
|
Converts an Angular DatePipe format string to the equivalent Moment.js format string. Angular uses lowercase tokens (dd, yyyy), Moment.js uses uppercase (DD, YYYY). Exported for testing only.
Parameters :
Returns :
string
|
| setGlobalDateFormat | ||||||||
setGlobalDateFormat(format: string)
|
||||||||
|
Set the global date format at runtime based on configuration. This is called by SiteSettingsService during initialization.
Parameters :
Returns :
void
|
| createAgeComparisonValidator | ||||||||||||||||||
createAgeComparisonValidator(ageParamValue, comparator, errorKey: string, paramName, rangeConfig?)
|
||||||||||||||||||
|
Creates an age range validator (min or max age).
Parameters :
Returns :
ValidatorFn
|
| descriptionForAgeValidator | |||||||||
descriptionForAgeValidator(validator, validationValue: any)
|
|||||||||
|
Parameters :
Returns :
string
|
| maxAgeValidator | ||||||
maxAgeValidator(maxAgeValue, minAgeValue?)
|
||||||
|
Validator for maximum age.
Parameters :
Returns :
ValidatorFn
|
| minAgeValidator | ||||||
minAgeValidator(minAgeValue, maxAgeValue?)
|
||||||
|
Validator for minimum age.
Parameters :
Returns :
ValidatorFn
|
| createColoredDivIcon | ||||||||
createColoredDivIcon(color: string)
|
||||||||
|
Creates a custom colored marker icon using Leaflet's DivIcon. This approach ensures accurate color representation for all colors, overcoming the limitations of the hue-rotate filter which cannot properly handle achromatic colors or accurately represent all RGB values.
Parameters :
Returns :
L.DivIcon
Leaflet DivIcon with the specified color |
| getKmDistance | |||||||||
getKmDistance(x: Coordinates, y: Coordinates)
|
|||||||||
|
Calculate distance between two points Source ://henry-rossiter.medium.com/calculating-distance-between-geographic-coordinates-with-javascript-5f3097b61898https
Parameters :
|
| getLocationProperties | ||||||
getLocationProperties(entity: EntityConstructor)
|
||||||
|
Get all properties of an entity that represent a geographic location
Parameters :
|
| getMinDistanceKm | ||||||||||||
getMinDistanceKm(entity: Entity, coordinatesProperties, compareCoordinates)
|
||||||||||||
|
Calculate the minimum distance (km) between an entity's location fields and a list of comparison coordinates. Returns null if no distance can be computed.
Parameters :
Returns :
number | null
|
| createDateComparisonValidator | |||||||||||||||
createDateComparisonValidator(dateParamValue, comparator, errorKey: string, paramName)
|
|||||||||||||||
|
Creates a date range validator (min or max).
Parameters :
Returns :
ValidatorFn
|
| descriptionForDateValidator | |||||||||
descriptionForDateValidator(validator, validationValue: any)
|
|||||||||
|
Parameters :
Returns :
string
|
| formatDateAsDayMonthYear | ||||||
formatDateAsDayMonthYear(value: Date)
|
||||||
|
Parameters :
Returns :
string
|
| maxDateValidator | ||||
maxDateValidator(maxDateValue)
|
||||
|
Validator for maximum date.
Parameters :
Returns :
ValidatorFn
|
| minDateValidator | ||||
minDateValidator(minDateValue)
|
||||
|
Validator for minimum date.
Parameters :
Returns :
ValidatorFn
|
| normalizeDateOnly | ||||||
normalizeDateOnly(value: Date)
|
||||||
|
Normalizes a date to just the date portion (no time).
Parameters :
Returns :
Date
|
| parseToDate | ||||
parseToDate(value)
|
||||
|
Parses a value to a Date object. Handles Date objects, date strings (YYYY-MM-DD), timestamps, and special value "$now".
Parameters :
Returns :
Date | undefined
|
| createEntityMapperSpyObj |
createEntityMapperSpyObj()
|
| mockEntityMapperProvider | |||||||||
mockEntityMapperProvider(withData, customDatabaseResolverService)
|
|||||||||
|
Parameters :
Returns :
Provider[]
|
| createEntityOfType |
createEntityOfType(type: string, id: string)
|
|
"Simulate" a custom entity type that saves all fields without transformations through a mocked EntitySchema. This is a utility function to help demo data creation because the dynamically migrated config is not ready at the time of demo data generation yet.
Returns :
Entity & { }
|
| createFakeStorage | ||||||||
createFakeStorage(initial: Record)
|
||||||||
|
An in-memory stand-in for Prefer this over
Parameters :
Returns :
Storage
|
| createSkillApiDummyData | ||||||
createSkillApiDummyData(externalId: string)
|
||||||
|
Parameters :
Returns :
ExternalProfile
|
| CustomYesNoButtons |
CustomYesNoButtons(yesLabel: string, noLabel: string)
|
|
Returns :
ConfirmationDialogButton[]
|
| DatabaseEntity | ||||||||
DatabaseEntity(entityType: string)
|
||||||||
|
Decorator (Annotation also see
Parameters :
|
| describeCause | ||||
describeCause(rootCause)
|
||||
|
Human-readable, but stable across occurrences of the same problem.
Parameters :
Returns :
string
|
| enhanceSentryBreadcrumb | |||||||||
enhanceSentryBreadcrumb(breadcrumb, hint: SentryBreadcrumbHint)
|
|||||||||
|
Add more human-readable descriptions to Sentry breadcrumbs for debugging. see https://docs.sentry.io/platforms/javascript/enriching-events/breadcrumbs/
Parameters :
|
| enrichSentryEvent | ||||||
enrichSentryEvent(event, hint)
|
||||||
|
Enrich events with structured extra data from custom Error properties (e.g. DatabaseException's entityId, status, reason).
Parameters :
Returns :
Sentry.ErrorEvent
|
| fingerprintKey | ||||
fingerprintKey(value)
|
||||
|
Reduce an error message to a grouping key. On top of normalizeErrorValue this also removes differences that carry no meaning but do split issues, as third-party libraries are not consistent about them: PouchDB reports both "Unauthorized" and "unauthorized", and both "Document update conflict" and "Document update conflict." (with a period) for the same failure.
Parameters :
Returns :
string
|
| groupAsNetworkError | ||||||
groupAsNetworkError(event, thrownError)
|
||||||
|
Collect all failures that are really "the app could not reach the server" into a single issue. These are raised by the browser (and by third-party libraries wrapping it) at whatever point a request happened to be made, so grouping them by stack trace produces an open-ended stream of near-identical issues that all have the same (non-)answer. They still have to be reported rather than dropped, because a server outage surfaces exactly this way - but as one issue whose event count is the interesting signal. The browsers' differing wordings ("Failed to fetch" / "Load failed" / ...) would make the title flip-flop between events of the merged issue, so it is replaced by a stable one and kept as a searchable tag instead.
Parameters :
Returns :
Sentry.ErrorEvent
|
| groupByErrorChain | ||||||||
groupByErrorChain(event, values, groupedError)
|
||||||||
|
Group by the error chain instead of the stack trace, so that one problem shows up as one issue.
The error the event is grouped by is usually the thrown one, but can be a link further down the chain when the ones above it add nothing (see rewrappedCauseGroupedError and loggedUnreachableServer). Because the root cause is part of the grouping key, it is also appended to the reported message: otherwise several issues share one title (a dozen "Failed to load configuration from the database." rows) and can only be told apart by opening each of them. The route remains available as the
Parameters :
Returns :
Sentry.ErrorEvent
|
| groupingValue | ||||
groupingValue(exception)
|
||||
|
The part of an error message that identifies the problem.
Parameters :
Returns :
string
|
| groupSentryEvent | ||||||
groupSentryEvent(event, hint)
|
||||||
|
Set an explicit grouping fingerprint where Sentry's default grouping splits one problem across many issues. Sentry groups by stack trace whenever one is available. That is the right default for a bug in application code, but not for a failure that is raised from one central place and reached from many components, routes and async call sites - the stack then differs per caller and even per build (releases without source maps report minified frames), so one problem scatters across a dozen issues that each have to be triaged separately, and archiving one of them does not silence the others. The cases are checked most-specific first: an error we recognize by name says more about what went wrong than the fact that a network request failed underneath it, so those keep their own issues instead of being absorbed into the shared network bucket.
Parameters :
Returns :
Sentry.ErrorEvent
|
| hasConnectivityStatus | ||||
hasConnectivityStatus(event)
|
||||
|
Whether the reported error carries the HTTP status of a request that never reached the backend - a gateway error names the problem in its status rather than in a message isConnectivityException could recognize. Event-level, because the status describes the error that was captured (it is attached by enrichSentryEvent) rather than one link of its chain.
Parameters :
Returns :
boolean
|
| isCausedByExpiredSession | ||||
isCausedByExpiredSession(hint)
|
||||
|
Whether the reported error is (or was caused by) the server rejecting an expired access token that could not be renewed.
The trade-off is deliberate: a consumer that mishandles a failed load is not
reported while the failure is an expired session (only through other causes,
e.g. connectivity). This also applies to errors that merely wrap it, like a
The original error is inspected rather than the serialized event, as that
loses the
Parameters :
Returns :
boolean
|
| isConnectivityException | ||||
isConnectivityException(exception)
|
||||
|
Whether one link of a reported error chain is a connectivity failure.
Parameters :
Returns :
boolean
|
| isDocumentUpdateConflict | ||||||
isDocumentUpdateConflict(event, hint)
|
||||||
|
Whether the reported error is a rejected write whose revision was out of date. Two users editing one record is normal operation for an offline-first app, not
a fault: the save is rejected, the user is told so by the form that attempted
it, and the occurrence is counted in usage analytics instead (see
The trade-off is deliberate: how often conflicts happen is now only visible in usage analytics, not in error monitoring.
Parameters :
Returns :
boolean
|
| isExcessiveRepeat | ||||
isExcessiveRepeat(event)
|
||||
|
Count occurrences of an event and check whether it exceeded the session cap. The budget is one per issue (see repeatKey), so that a device running into several problems at once still reports each of them. Keying it more coarsely - by the root cause the issues have in common - starves them instead: in an offline-first app a single connectivity failure is the root cause of the config load, the permission rules, the sync and every file download alike, so whichever of them failed first would silence all the others for that session. Note that the cap therefore also limits how much an issue's event count says about the volume of a problem - it shows that it occurs, not how often.
Parameters :
Returns :
boolean
|
| isOfflineNetworkError | ||||
isOfflineNetworkError(event)
|
||||
|
Whether the event is a network-layer fetch failure that occurred while the device was offline. In an offline-first app this is a normal state without diagnostic value (server outages still surface through online users).
Parameters :
Returns :
boolean
|
| loggedUnreachableServer | ||||
loggedUnreachableServer(values)
|
||||
|
The failed request that a LoggedError directly wraps, if that is all it has to report. The message an error is logged with says where it happened ("Failed to load
important notes"), which for most errors is what tells two problems apart.
For a request that never reached the server it is not: the connection
failed, and every component loading data at that moment logs it under a
message of its own. Grouped by those, a single connectivity drop opens one
issue per component - next to the issue the same failure already has where
it is reported without a message. Grouping them by the wrapped error puts
them into that one issue instead; the logged message is kept as a tag, and
the route is still the Only an error of a recognized type (see CAUSE_GROUPED_ERROR_TYPES) directly below the wrapper qualifies:
Parameters :
Returns :
Sentry.Exception | undefined
|
| messageText | ||||||
messageText(message: any)
|
||||||
|
The text of anything that was passed to the logger as its "message".
Parameters :
Returns :
string
|
| normalizeErrorValue | ||||
normalizeErrorValue(value)
|
||||
|
Mask volatile details (ids, urls, numbers) so that different occurrences of the same problem produce the same string. Stays human-readable, as it is also used to describe the root cause in the issue title (see describeCause).
Parameters :
Returns :
string
|
| processSentryEvent | ||||||
processSentryEvent(event, hint)
|
||||||
|
Sentry Grouping runs before the repeat cap because the cap is applied per issue, which is what the fingerprint defines (see isExcessiveRepeat).
Parameters :
Returns :
Sentry.ErrorEvent | null
|
| registryErrorContext | ||||
registryErrorContext(err)
|
||||
|
Which registration a registry error is about, if there is one in the chain. The key is not part of the error message, so that all keys of one registry
share one issue (see RegistryLookupError) - this is what still names
it in each report. The cause chain is searched as well, because Angular
re-throws an error raised in a
Parameters :
Returns :
Record<string, string>
|
| repeatKey | ||||
repeatKey(event)
|
||||
|
The issue an event will end up in, as far as it is known here: the fingerprint is exactly what separates issues, and for the events that keep Sentry's stack-based grouping the thrown error is the closest stand-in (deliberately without any stack information, so that an error loop is capped even where the frames differ between occurrences).
Parameters :
Returns :
string
|
| reportAsUnreachableServer | ||||||
reportAsUnreachableServer(event, exception)
|
||||||
|
Replace the reported message by one that does not depend on which browser (or library) sent the event, keeping the original one available as extra data.
Parameters :
|
| reportNormalized | ||||||
reportNormalized(event, exception)
|
||||||
|
Report an exception under the normalized message it is grouped by, keeping the original one as extra data. Sentry titles an issue by the reported message, so the volatile details that fingerprintKey masks out of the grouping key are still what the issue list shows: one row per document id, and a response body quoted into an error message (an nginx error page, say) pushing every other row off the screen. Only used where the message is the grouping key anyway, so that the title of an issue and the reason its events are in it cannot drift apart.
Parameters :
|
| resetSentryEventCounts |
resetSentryEventCounts()
|
|
Clear the repeat budget that isExcessiveRepeat keeps per app session. Exported for tests: nothing else resets those counters, so without this every spec in a file shares one budget and whichever runs last sees its events dropped instead of processed - which is easy to mistake for the behaviour under test, as the budget is shared by all events of one issue. |
| rewrappedCauseGroupedError | ||||
rewrappedCauseGroupedError(values)
|
||||
|
The error of a recognized type (see CAUSE_GROUPED_ERROR_TYPES) that a framework re-threw as a generic one, if that is what this chain is. Angular does this for an error raised inside a Only a wrapper that repeats the recognized error's message counts as such. One that says what it was doing ("Failed to load configuration from the database.") describes the failure better than its cause does, and stays the error the event is grouped by.
Parameters :
Returns :
Sentry.Exception | undefined
|
| toReportedError | |||||||||
toReportedError(message: any, context)
|
|||||||||
|
The Error to report for a log call: an error that was logged directly is reported as it is, anything else is wrapped in a LoggedError.
Parameters :
Returns :
Error
|
| describeResponse | |||||||||
describeResponse(response, method?: string)
|
|||||||||
|
Extract the diagnostic fields of a fetch
The
Parameters :
Returns :
{ method?: string; status?: number; statusText?: string; responseUrl?: string }
|
| unexpectedResponseMessage | ||||||
unexpectedResponseMessage(status: number)
|
||||||
|
The message to report for an unexpected response from a database request. Deliberately says "response" rather than "fetch": one code path carries both reads and writes, and calling a rejected write a failed fetch is what sent the first analysis of AAM-DIGITAL-77H down the wrong path. The fallback is digit-free so that it is not mangled by the number masking described on UNEXPECTED_STATUS_NAMES.
Parameters :
Returns :
string
|
| dropEmptyFields | ||||
dropEmptyFields(groups)
|
||||
|
Remove empty (null / undefined) entries from the groups' field lists. These are not a valid
Parameters :
Returns :
FieldGroup[]
|
| moveFieldBetweenGroups | |||||||||||||||||||||
moveFieldBetweenGroups(groups, field: ColumnConfig, from: FieldDropTarget, fromIndex: number, to: FieldDropTarget, toIndex: number)
|
|||||||||||||||||||||
|
Move A target of "available" is the toolbar of fields not used in the form: it holds no state of its own (it is derived from the form's groups), so a field moved there is simply removed from the form and a field moved from there is simply added.
Parameters :
Returns :
FieldGroup[]
|
| emailValidatorWithMessage | ||||||
emailValidatorWithMessage(control: AbstractControl)
|
||||||
|
Parameters :
Returns :
ValidationErrors | null
|
| enrichGeoLocation | ||||
enrichGeoLocation(location)
|
||||
|
Parameters :
Returns :
GeoLocation | undefined
|
| getCityFromAddress | ||||
getCityFromAddress(address)
|
||||
|
The most specific place name available for an address.
Parameters :
Returns :
string | undefined
|
| ensureValidEntityId | ||||||
ensureValidEntityId(author: string)
|
||||||
|
The given author as an entity id, or undefined when it is not one. An entity id is type-prefixed, which a plain username is not.
Parameters :
Returns :
string | undefined
|
| entityFilterPredicate |
entityFilterPredicate(data: Entity, filter: string)
|
|
Returns :
boolean
|
| entityIdsMatch | ||||||
entityIdsMatch(entityIdA?, entityIdB?)
|
||||||
|
Compares two entity ids where one or both may be missing the Exported for reuse wherever a stored/session entity id needs to be compared against a value coming from an entity picker (which always includes the prefix).
Parameters :
Returns :
boolean
|
| getEntityIdWithoutTypePrefix | ||||||
getEntityIdWithoutTypePrefix(entityId: string)
|
||||||
|
Parameters :
Returns :
string
|
| errorToText | ||||
errorToText(error)
|
||||
|
Parameters :
Returns :
string
|
| isKnownMultiTabDatabaseCorruption | ||||
isKnownMultiTabDatabaseCorruption(error)
|
||||
|
Detect IndexedDB/PouchDB corruption symptoms commonly observed when the app is used in multiple tabs with concurrent writes. We intentionally match on
Parameters :
Returns :
boolean
|
| escapeRegExp | ||||||
escapeRegExp(text: string)
|
||||||
|
Escape all special regex characters so the given text can be used as a literal search string inside a regular expression.
Parameters :
Returns :
string
|
| expectArrayWithExactContents | ||||||
expectArrayWithExactContents(actual, expected)
|
||||||
|
Assert that two arrays contain the same items, regardless of order, while
still supporting asymmetric matchers such as
Parameters :
Returns :
void
|
| matches | ||||||
matches(actual, expected)
|
||||||
|
Parameters :
Returns :
boolean
|
| extractExtra | ||||||
extractExtra(rule: DatabaseRule)
|
||||||
|
properties of a rule beyond subject/action/conditions (e.g. reason), or undefined if none
Parameters :
Returns :
RuleExtraProperties | undefined
|
| fragmentToRule | ||||||
fragmentToRule(fragment: RuleFragment)
|
||||||
|
Parameters :
Returns :
DatabaseRule
|
| groupAllowedActions | ||||||
groupAllowedActions(row: MatrixRow)
|
||||||
|
group a row's allowed actions by identical conditions + extra properties
Parameters :
Returns :
Map<string, ActionGroup>
|
| isSupported | ||||||
isSupported(rule: DatabaseRule)
|
||||||
|
Parameters :
Returns :
boolean
|
| matrixToRules | ||||||
matrixToRules(model: MatrixModel)
|
||||||
|
Parameters :
Returns :
DatabaseRule[]
|
| rulesToMatrix | ||||
rulesToMatrix(rules)
|
||||
|
Convert permission rules into the matrix model. Rules for the same subject are merged, with later rules winning per action.
Parameters :
Returns :
MatrixModel
|
| extractGroupId | ||||||
extractGroupId(group: any)
|
||||||
|
Extract a group ID from a group value (string, object, etc.)
Parameters :
Returns :
string
|
| extractHumanReadableLabel | ||||
extractHumanReadableLabel(value)
|
||||
|
Get a human-readable string from the given value as a label.
Parameters :
Returns :
string | undefined
|
| extractNumericParts | ||||||
extractNumericParts(version: string)
|
||||||
|
Parameters :
Returns :
number[]
|
| isVersionNewer |
isVersionNewer(leftVersion: string, rightVersion: string)
|
|
Returns true when The comparison is based on numeric segments to avoid lexicographic issues, e.g. 9.0.0 < 10.0.0.
Returns :
boolean
|
| extractParticipantIds | ||||
extractParticipantIds(value)
|
||||
|
Normalize participant sources into plain participant IDs. Supports both configured participants field shapes used in attendance:
Parameters :
Returns :
string[]
|
| fetchTranslations | ||||||
fetchTranslations(locale: string)
|
||||||
|
Parameters :
Returns :
Promise<Record | undefined>
|
| initLanguage | ||||||||
initLanguage(locale?: string)
|
||||||||
|
Load translation files and apply them to angular localize system.
Parameters :
Returns :
Promise<void>
|
| fieldsIncludingId | ||||||||||||||||
fieldsIncludingId(entity: Entity, refId: string, relevantFields)
|
||||||||||||||||
|
Return the fields of entity that contain the given refId. If there is no such referenced ID, the array will be empty.
Parameters :
Returns :
FormFieldConfig[]
|
| getInnerEntityReferenceFields | ||||||
getInnerEntityReferenceFields(field?: EntitySchemaField)
|
||||||
|
From a field's Returns an empty array when the field has no embedded schema.
Parameters :
Returns :
unknown[]
|
| itemReferencesId | ||||||||||||
itemReferencesId(item: any, refId: string, field?: EntitySchemaField)
|
||||||||||||
|
Check whether a single value (a plain ID string or an embedded object) references the given entity ID. When a
Parameters :
Returns :
boolean
|
| flattenTree | ||||||||||||||||
flattenTree<T>(nodes, adapter: FlatTreeAdapter, level: number)
|
||||||||||||||||
Type parameters :
|
||||||||||||||||
|
Flatten a nested tree into rows (pre-order), carrying the depth as
Parameters :
Returns :
FlatTreeRow[]
|
| insertChild | ||||||||||||||||||
insertChild<T>(rows, parentIndex: number, node: T, adapter: FlatTreeAdapter, options?: FlatTreeOptions)
|
||||||||||||||||||
Type parameters :
|
||||||||||||||||||
|
Insert
Parameters :
Returns :
FlatTreeRow[]
|
| maxLevelBelow | ||||||||||||
maxLevelBelow<T>(above, adapter: FlatTreeAdapter, options?: FlatTreeOptions)
|
||||||||||||
Type parameters :
|
||||||||||||
|
The deepest level a row directly below
Parameters :
Returns :
number
|
| moveSubtree | ||||||||||||||||||
moveSubtree<T>(rows, previousIndex: number, currentIndex: number, adapter: FlatTreeAdapter, options?)
|
||||||||||||||||||
Type parameters :
|
||||||||||||||||||
|
Move the subtree rooted at
Parameters :
Returns :
FlatTreeRow[]
|
| normalizeLevels | ||||||||||||
normalizeLevels<T>(rows, adapter: FlatTreeAdapter, options?: FlatTreeOptions)
|
||||||||||||
Type parameters :
|
||||||||||||
|
Clamp levels so the flat list always describes a valid tree: the first row is at level 0, every
other row is at most one level deeper than the row above it — and only deeper if that row can
have children at all — and no row is deeper than
Parameters :
Returns :
FlatTreeRow[]
|
| rebuildTree | |||||||||
rebuildTree<T>(rows, adapter: FlatTreeAdapter)
|
|||||||||
Type parameters :
|
|||||||||
|
Reconstruct the nested tree from flat rows: each row owns the following rows of greater level.
Parameters :
Returns :
T[]
|
| removeSubtree | |||||||||||||||
removeSubtree<T>(rows, index: number, adapter: FlatTreeAdapter, options?: FlatTreeOptions)
|
|||||||||||||||
Type parameters :
|
|||||||||||||||
|
Remove the row at
Parameters :
Returns :
FlatTreeRow[]
|
| subtreeLength | |||||||||
subtreeLength<T>(rows, index: number)
|
|||||||||
Type parameters :
|
|||||||||
|
Number of rows forming the subtree rooted at
Parameters :
Returns :
number
|
| updateRow | ||||||||||||
updateRow<T>(rows, index: number, node: T)
|
||||||||||||
Type parameters :
|
||||||||||||
|
Replace the node of the row at
Parameters :
Returns :
FlatTreeRow[]
|
| format | ||||
format(value)
|
||||
|
Primitives (and arrays of them) already stringify readably, only objects need explicit formatting - otherwise they would render as "[object Object]".
Parameters :
Returns :
unknown
|
| generateActivity | ||||||||||||||||||||
generateActivity(__namedParameters: {participants: Entity[], assignedUser: Entity, title: string, entityType: string})
|
||||||||||||||||||||
|
Parameters :
Returns :
ActivityEntity
|
| generateChild | ||||||
generateChild(opts)
|
||||||
|
Parameters :
Returns :
Entity & { name: string }
|
| generateDefaultNotificationConfig |
generateDefaultNotificationConfig(userId: string, userEntity: string)
|
| generateFormFieldStory | ||||||||||||||||||||||||||||||
generateFormFieldStory<T>(editComponent: unknown, defaultValue: unknown, withTooltip: unknown, additionalSchema: object, additionalProviders: [])
|
||||||||||||||||||||||||||||||
Type parameters :
|
||||||||||||||||||||||||||||||
|
Parameters :
|
| generateGroupNote | ||||
generateGroupNote(params)
|
||||
|
Parameters :
|
| generateNote | ||||
generateNote(params)
|
||||
|
Parameters :
Returns :
Note
|
| generateNotes | ||||
generateNotes(params)
|
||||
|
Parameters :
Returns :
Note[]
|
| removeFollowUpMarkerForOldNotes | ||||||
removeFollowUpMarkerForOldNotes(note: Note)
|
||||||
|
Set all older notes to be "resolved" in order to keep the list of notes needing follow-up limited in the demo.
Parameters :
|
| generateIdFromLabel | ||||||||
generateIdFromLabel(label: string)
|
||||||||
|
Create a simplified id string from the given text. This generates a camelCase string, removing special characters.
Parameters :
Returns :
string | undefined
|
| generateLabelFromInterval | ||||||
generateLabelFromInterval(interval: TimeInterval)
|
||||||
|
Parameters :
|
| generateTodo |
generateTodo(__namedParameters: {entity: Entity, assignedTo: Entity[], isDue: boolean})
|
|
Returns :
Todo
|
| generateTodos | ||||
generateTodos(params)
|
||||
|
Parameters :
Returns :
Todo[]
|
| generateUsers |
generateUsers()
|
|
Returns :
Array<Entity & { name: string }>
|
| getConfigsForInheritedMode | ||||
getConfigsForInheritedMode(fieldConfigs)
|
||||
|
Get the default value configs filtered for the given mode.
Parameters :
|
| getDataSource | |||||||||
getDataSource(dataSource?: DataSourceType, loaderMethod?: LoaderMethod)
|
|||||||||
|
Parameters :
|
| resolveDataSource | ||||||||||||
resolveDataSource<T extends Entity>(injector: Injector, dataSource?: DataSourceType, loaderMethod?: LoaderMethod)
|
||||||||||||
Type parameters :
|
||||||||||||
|
Parameters :
Returns :
EntitiesTableDataSource<T>
|
| supportsPagination | ||||||
supportsPagination(injector: Injector)
|
||||||
|
Parameters :
Returns :
boolean
|
| getDefaultConfigEntity | ||||||||
getDefaultConfigEntity(configsObject: any)
|
||||||||
|
Parameters :
|
| provideTestingConfigService | ||||||||
provideTestingConfigService(configsObject: any)
|
||||||||
|
Parameters :
|
| getDefaultEnumEntities |
getDefaultEnumEntities()
|
|
Returns :
ConfigurableEnum[]
|
| getDefaultNoteDetailsConfig |
getDefaultNoteDetailsConfig()
|
|
Default configuration for Note Details.
Returns :
NoteDetailsConfig
|
| getDeferredInstallPrompt |
getDeferredInstallPrompt()
|
|
The deferred install prompt, if the browser has offered one already.
Returns :
BeforeInstallPromptEvent | undefined
|
| registerPWAInstallListener |
registerPWAInstallListener()
|
|
Start listening for the browser's Must be called before any async operation during bootstrap, because the browser fires the event early and does not replay it for later listeners.
Returns :
void
|
| resetPWAInstallListener |
resetPWAInstallListener()
|
|
Discard the deferred prompt and the listener's promise, and remove the
Returns :
void
|
| whenCanInstallDirectly |
whenCanInstallDirectly()
|
|
Resolves once/if the app can be installed directly.
Returns :
Promise | undefined
|
| getEntityRuntimeDetailsRoutePath | ||||||
getEntityRuntimeDetailsRoutePath(entityType: EntityConstructor)
|
||||||
|
Parameters :
Returns :
string
|
| getEntityRuntimeRoute | ||||||
getEntityRuntimeRoute(entityType: EntityConstructor)
|
||||||
|
Parameters :
Returns :
string
|
| getEntityRuntimePath | ||||||
getEntityRuntimePath(path: string)
|
||||||
|
Build the canonical runtime path for config-driven entity routes.
Parameters :
Returns :
string
|
| getRuntimePathFromViewConfig | ||||||
getRuntimePathFromViewConfig(view: ViewConfig)
|
||||||
|
Resolve the effective route path for a view config at runtime.
Entity views are always placed under
Parameters :
Returns :
string
|
| getViewPathFromConfigId | ||||||
getViewPathFromConfigId(viewConfigId: string)
|
||||||
|
Convert a
Parameters :
Returns :
string
|
| isEntityViewConfig | ||||||
isEntityViewConfig(view: ViewConfig)
|
||||||
|
Heuristic to identify config views that represent entity navigation. Includes views with an explicit entityType config and detail views (path ending with /:id).
Parameters :
Returns :
boolean
|
| normalizeRoutePath | ||||||
normalizeRoutePath(path: string)
|
||||||
|
Normalize a route path for internal comparisons. Removes a single leading slash and keeps nested segments unchanged.
Parameters :
Returns :
string
|
| getGroupingInformationString | ||||
getGroupingInformationString(groupedBy)
|
||||
|
Parameters :
Returns :
string
|
| getValueDescription |
getValueDescription(value: any, property: string)
|
|
Returns :
string
|
| getInheritanceSourceReferenceFields | ||||||
getInheritanceSourceReferenceFields(entityCtor?: EntityConstructor)
|
||||||
|
Shared helper for import warnings related to inherited fields. It centralizes detection of source-reference fields used by inherited-field defaults so mapping dialogs and import summary can show consistent hints without duplicating schema-scanning logic.
Parameters :
Returns :
Set<string>
|
| hasMappedInheritedSourceField | |||||||||
hasMappedInheritedSourceField(entityCtor: EntityConstructor, columnMappings)
|
|||||||||
|
Parameters :
Returns :
boolean
|
| isInheritanceSourceReferenceField | |||||||||
isInheritanceSourceReferenceField(entityCtor: EntityConstructor, propertyName?: string)
|
|||||||||
|
Parameters :
Returns :
boolean
|
| getNextOccurrence |
getNextOccurrence(date: Date, today: Date)
|
|
Real calendar date of the next occurrence (this year, or next year if it has already
passed) of the given date's month/day, relative to Uses the native
Returns :
Date
|
| parseDateOnly | ||||||
parseDateOnly(value: string)
|
||||||
|
Parse a stored date-of-birth value into a Date at local midnight.
Parameters :
Returns :
Date
|
| toPropertyList | ||||
toPropertyList(properties)
|
||||
|
Parameters :
Returns :
string[]
|
| getReadableValue | ||||||||
getReadableValue(value: any)
|
||||||||
|
An enhanced sortingDataAccessor function that can be set for a MatTableDataSource in order to support sorting by ConfigurableEnum columns and other Entity specific values.
Parameters :
Returns :
any
|
| isConfigurableEnum | ||||||
isConfigurableEnum(value: any)
|
||||||
|
Parameters :
Returns :
ConfigurableEnumValue
|
| isGeoLocation | ||||||
isGeoLocation(value: any)
|
||||||
|
Parameters :
Returns :
GeoLocation
|
| transformToReadableFormat | ||||||
transformToReadableFormat(obj: any)
|
||||||
|
Transform a whole object into a readable format.
This also transforms date objects to
Parameters :
|
| getReservedRole | ||||||
getReservedRole(roleName: string)
|
||||||
|
details of the given reserved role, or undefined if it is an ordinary role
Parameters :
Returns :
ReservedRoleInfo | undefined
|
| roleDisplayName | ||||||
roleDisplayName(roleName: string)
|
||||||
|
the reserved role's readable name, or the plain role name for ordinary roles
Parameters :
Returns :
string
|
| getWarningLevelColor | ||||||
getWarningLevelColor(warningLevel: WarningLevel)
|
||||||
|
Parameters :
|
| grantedByAdvancedRuleTooltip |
grantedByAdvancedRuleTooltip()
|
|
Explains a checkbox that is ticked but disabled because a rule this UI cannot express (wildcard subject, grouped subjects, conditions, an inverted rule or a rule managed by the server) decides the access.
Returns :
string
|
| grantedByDefaultRoleTooltip |
grantedByDefaultRoleTooltip()
|
|
Explains a checkbox that is ticked but disabled because the shared default role already grants the action to every logged-in user.
Returns :
string
|
| hasOrdinalValue | ||||||
hasOrdinalValue(value: any)
|
||||||
|
Parameters :
Returns :
HasOrdinal
|
| imposeTotalOrdering | ||||||||
imposeTotalOrdering<T extends ConfigurableEnumValue>(values: Array)
|
||||||||
Type parameters :
|
||||||||
|
Extends an array of configurable enum values with an ordinal value so that the ordinal value of each enum value matches the position of the element in the array. Note that this should be used 'early' in the pipeline, i.e. when the
Parameters :
Returns :
Array<EnumValue<T>>
|
| hasRemoteSession | ||||||
hasRemoteSession(sessionType: SessionType)
|
||||||
|
Check whether the given session type has a remote server connection. This is true for both "synced" (local+remote) and "online" (remote-only) modes.
Parameters :
Returns :
boolean
|
| inheritsDefaultRules | ||||||
inheritsDefaultRules(roleName: string)
|
||||||
|
Whether users of the given role also receive the shared "_default" rules. False for "_default", which cannot inherit from itself, and for "_public", which applies to visitors who are not logged in and never get the "_default" rules (see AbilityService.getRulesForUser). The excluded keys are listed explicitly instead of taken from RESERVED_RULE_CONFIG_KEYS, because a future reserved role that applies to logged-in users would inherit the "_default" rules as usual.
Parameters :
Returns :
boolean
|
| isReservedRuleConfigKey | ||||||
isReservedRuleConfigKey(key: string)
|
||||||
|
Whether a key in DatabaseRules carries special semantics instead of naming a user role, so it must neither be resolved as a role nor rewritten by a per-role UI. Covers the reserved underscore prefix as well as the legacy (non-prefixed) spellings of not yet migrated configs.
Parameters :
Returns :
boolean
|
| ruleAppliesToSubject | |||||||||
ruleAppliesToSubject(subject, entityType: string)
|
|||||||||
|
Whether the rule applies to the given entity type, ignoring conditions and
inversion.
Parameters :
Returns :
boolean
|
| ruleCoversAction | ||||||||||||
ruleCoversAction(rule: DatabaseRule, entityType: string, action: EntityActionPermission)
|
||||||||||||
|
Whether the rule grants the given action for the entity type, ignoring conditions
and inversion.
Parameters :
Returns :
boolean
|
| isConnectivityError | ||||||
isConnectivityError(err: any)
|
||||||
|
Check whether an error represents a transient network/connectivity failure. Matches common browser fetch errors, timeout errors, and HTTP 5xx gateway errors. Callers can layer additional domain-specific checks on top.
Parameters :
Returns :
boolean
|
| isConnectivityErrorMessage | ||||||
isConnectivityErrorMessage(message: string)
|
||||||
|
Check whether an error message describes a transient network/connectivity failure. Split out from isConnectivityError because remote monitoring only
ever sees errors in their serialized form (see the Sentry
Parameters :
Returns :
boolean
|
| isDuplicate | ||||||||||||
isDuplicate(currentValue, existingValues, shouldNormalize: boolean)
|
||||||||||||
|
Parameters :
Returns :
boolean
|
| normalizeValue | ||||
normalizeValue(value)
|
||||
|
Parameters :
Returns :
unknown
|
| uniquePropertyValidator | ||||||||
uniquePropertyValidator(config: UniquePropertyValidatorConfig)
|
||||||||
|
Generic validator to ensure a property value is unique within a collection. Can be configured to validate different properties (id, label, etc.) with optional normalization.
Parameters :
Returns :
AsyncPromiseValidatorFn
An async validator function |
| isExpiredSessionError | ||||||
isExpiredSessionError(err: any)
|
||||||
|
Check whether a database error is the server rejecting an expired access token.
Deliberately narrow: other
Parameters :
Returns :
boolean
|
| isGroupNode | ||||||
isGroupNode(node: ReportDefinitionUiNode)
|
||||||
|
A node is a group when it carries an
Parameters :
Returns :
boolean
|
| newGroupNode |
newGroupNode()
|
|
A new, empty group node.
Returns :
ReportDefinitionUiNode
|
| newQueryNode |
newQueryNode()
|
|
A new, empty query node.
Returns :
ReportDefinitionUiNode
|
| toReportDefinition | ||||
toReportDefinition(nodes)
|
||||
|
Convert UI nodes back to plain report-definition DTOs (dropping the transient ids).
Parameters :
Returns :
ReportDefinitionDto[]
|
| toUiNodes | ||||
toUiNodes(dtos)
|
||||
|
Convert persisted report-definition DTOs into UI nodes with transient ids.
Parameters :
Returns :
ReportDefinitionUiNode[]
|
| isManualItemWithoutLink | ||||
isManualItemWithoutLink(item)
|
||||
|
True when an item is in manual mode (no entity type) and no link has been set.
Parameters :
Returns :
boolean
|
| isRemoteOnlyDatabase | ||||||
isRemoteOnlyDatabase(dbName: string)
|
||||||
|
Whether the given database name belongs to an entity type that declares Entity.DATABASE_REMOTE_ONLY. This reads the module-level registry rather than an injected one, so that DatabaseResolverService can decide how to create a database without taking a dependency on the entity layer's DI graph.
Parameters :
Returns :
boolean
|
| isRetryableNetworkError | ||||||
isRetryableNetworkError(err: any)
|
||||||
|
Check whether an error is a retryable network/connectivity error, including keycloak-specific transient failures.
Parameters :
Returns :
boolean
|
| keycloakFailureContext | ||||||
keycloakFailureContext(err: any)
|
||||||
|
What a failed Keycloak operation can say about itself beyond its message.
Passed as log context rather than interpolated into the message, so that all
occurrences stay one issue in remote monitoring (see
Parameters :
Returns :
Record<string, unknown>
|
| isValidLocale | ||||
isValidLocale(value)
|
||||
|
Whether the given value can be used as a locale to look up translations. Non-string values (e.g. a whole dropdown option object) are silently stringified by localStorage and would end up being requested from the translations CDN, so they have to be rejected before they are stored or used.
Parameters :
Returns :
string
|
| isValidRegex | ||||||
isValidRegex(pattern: string)
|
||||||
|
Parameters :
Returns :
boolean
|
| validRegexValidator | ||||||
validRegexValidator(control: AbstractControl)
|
||||||
|
Marks the control as invalid if its value cannot be compiled as a regular expression.
Parameters :
Returns :
ValidationErrors | null
|
| lastSyncedBatchContext | ||||
lastSyncedBatchContext(docIds)
|
||||
|
What of the last synced batch can be reported when a sync fails right after it: how much was in flight and which record types, but never the document ids themselves - those identify records and have no place in remote monitoring (see #4174), while as part of a message they would also open a separate issue per batch.
Parameters :
Returns :
Record<string, unknown>
|
| markAsSecondQuery | ||||||
markAsSecondQuery(res: FindPage)
|
||||||
|
Parameters :
Returns :
FindPage
|
| mergeToAllConditions | ||||
mergeToAllConditions(rows)
|
||||
|
Combine rows into "all must match" conditions: a single merged object if keys are unique, otherwise an explicit $and.
Parameters :
Returns :
any
|
| toEditorFormat | ||||||
toEditorFormat(condition: any)
|
||||||
|
Convert any stored condition shape into the { $or: [...] } row format that the conditions editor works with. Deep-copies the input so the editor (which mutates rows in place) cannot touch the caller's config: cancelling the dialog must leave it untouched. A condition can combine
Parameters :
Returns :
any
|
| migrateIsActiveQuerySelection | ||||||
migrateIsActiveQuerySelection<T>(query: T)
|
||||||
Type parameters :
|
||||||
|
Rewrite a stored query that selects on the removed, calculated "isActive" property,
so it uses the equivalent query helpers instead:
Only used by the two migrations that need this rewrite, one for queries stored inside the config document and one for queries stored on ReportConfig entities, so both apply it the same way. Values that are not a string are passed through, which lets both walk a document with it. Node-safe: no
Parameters :
Returns :
T
|
| migrateIsoDatesToInferredDateOnly | ||||||
migrateIsoDatesToInferredDateOnly(value: string)
|
||||||
|
Parameters :
Returns :
string
|
| migratePublicFormConfig | ||||||
migratePublicFormConfig(formConfig: PublicFormConfig)
|
||||||
|
Parameters :
Returns :
PublicFormConfig
|
| migrateReportConfig | ||||||
migrateReportConfig<T extends MigratableReportConfig>(report: T)
|
||||||
Type parameters :
|
||||||
|
Consolidate a ReportConfig's legacy definition fields into the unified Mode-aware, because the canonical definition differs per mode:
Non-destructive: the legacy fields are intentionally kept, so this migration is safe to run
before the code that reads
Parameters :
Returns :
T
|
| mockConfirmationDialog | ||||||||||
mockConfirmationDialog(confirmed: unknown)
|
||||||||||
|
A ConfirmationDialogService whose prompts all resolve the same way.
Parameters :
Returns :
ConfirmationDialogMock
|
| mockMatDialog | ||||||||
mockMatDialog(result)
|
||||||||
|
A MatDialog whose The dialog is never actually rendered, so this is about what the component does with the
result - assert on
Parameters :
Returns :
MatDialogMock
|
| mockMatDialogRef | ||||||||
mockMatDialogRef(result)
|
||||||||
|
A MatDialogRef, for the component inside a dialog rather than the one opening it.
Parameters :
Returns :
MatDialogRefMock
|
| normalizeCellValue | ||||
normalizeCellValue(value)
|
||||
|
Unwraps exceljs's rich cell value shapes (e.g. hyperlinks expose
Parameters :
Returns :
unknown
|
| normalizeEntityAdditional | ||||
normalizeEntityAdditional(additional)
|
||||
|
Normalizes the
Parameters :
Returns :
EntityAdditional | undefined
|
| normalizeValue | ||||||||
normalizeValue(val: any)
|
||||||||
|
Normalizes a value for comparison, converting it to a standardized string format. Ensures both numbers and strings are treated consistently.
Parameters :
Returns :
string
The normalized value as a string. |
| normalizeQueryKey | ||||||
normalizeQueryKey(query: string)
|
||||||
|
Normalize a query key used in export column configs. Strips a leading dot if present so callers can compare logical field keys.
Parameters :
Returns :
string
|
| parseJwt | ||||||||
parseJwt(token: unknown)
|
||||||||
|
Parses and returns the payload of a JWT into a JSON object. For me info see ://jwt.iohttps.
Parameters :
Returns :
ParsedJWT
|
| patternWithMessage | ||||||||||||
patternWithMessage(pattern, message: string)
|
||||||||||||
|
creates a pattern validator that also carries a predefined message
Parameters :
Returns :
ValidatorFn
|
| PerformanceAnalysisLogging |
PerformanceAnalysisLogging(target: Object, propertyKey: string, descriptor: TypedPropertyDescriptor)
|
|
Extend any class method to measure the duration it takes to finish and log it to the console. |
| preloadDynamicComponents | |||||||||
preloadDynamicComponents(registry: ComponentRegistry, destroyRef: DestroyRef)
|
|||||||||
|
Parameters :
|
| provideFirebaseMessagingServiceWorker |
provideFirebaseMessagingServiceWorker()
|
|
Let AngularFire use our registration of the service worker instead of the Firebase default (which would not pass the Firebase config to it). The registration is only done once AngularFire awaits it (i.e. when requesting a device token) and repeated on every request, so a failed attempt (e.g. while offline) can succeed later.
Returns :
Provider
|
| waitUntilActive | ||||||
waitUntilActive(registration: ServiceWorkerRegistration)
|
||||||
|
Parameters :
|
| random |
random(min: number, max: number)
|
| retryOnServerError | ||||||
retryOnServerError<T>(maxRetries: number)
|
||||||
Type parameters :
|
||||||
|
Retry a request on server error (status code 5xx).
Use this in Retries are done with exponential backoff delays that are randomized (in case there are many parallel requests to be spread out).
Parameters :
Returns :
MonoTypeOperatorFunction<T>
|
| requestMethod | ||||
requestMethod(opts)
|
||||
|
The HTTP method of a fetch request, defaulting the way
Parameters :
Returns :
string
|
| revisionNumber | ||||
revisionNumber(rev)
|
||||
|
The generation number of a CouchDB revision (the
Parameters :
Returns :
number
|
| resizeImage | ||||||||||||
resizeImage(file: File, maxSize: number)
|
||||||||||||
|
Parameters :
Returns :
Promise<HTMLCanvasElement>
|
| resourceWithRetention | ||||||
resourceWithRetention<T, R>(options: ResourceOptions)
|
||||||
Type parameters :
|
||||||
|
Creates a resource that retains its previous value when reloading. This function is similar to resource except while reloading. When
Parameters :
Returns :
ResourceRef<T | undefined>
|
| restrictToNotArchived | ||||||
restrictToNotArchived<T extends Entity>(filter?: DataFilter)
|
||||||
Type parameters :
|
||||||
|
Restrict the given filter to records that are not archived.
Parameters :
Returns :
DataFilter<T>
|
| reuseFirstAsync | ||||
reuseFirstAsync<T>(fn)
|
||||
Type parameters :
|
||||
|
Wraps a function to ensure only one async operation runs at a time. If called while the first async operation is still pending, returns the same promise. Once the operation completes (success or failure), subsequent calls will start a new operation.
Parameters :
Returns :
Promise<T>
|
| setupCustomFormControlEditComponent | |||||||||||||||||||||||||
setupCustomFormControlEditComponent<T>(component: CustomFormControlDirective, propertyName: string, schema: any, fixture?: ComponentFixture)
|
|||||||||||||||||||||||||
Type parameters :
|
|||||||||||||||||||||||||
|
Helper function for modern Angular components that extend CustomFormControlDirective. Pass the
Parameters :
Returns :
UntypedFormGroup
|
| sortExportOnlyLast | |||||||||
sortExportOnlyLast(a: AdditionalImportAction, b: AdditionalImportAction)
|
|||||||||
|
Parameters :
|
| splitArrayValue | |||||||||||||||
splitArrayValue(val: any, separator: string)
|
|||||||||||||||
|
Split a raw value into an array of individual values. Supports JSON arrays and separator-delimited strings.
Parameters :
Returns :
string[]
Array of individual string values |
| statsToEntityWithRecentNoteInfo | ||||||||||||
statsToEntityWithRecentNoteInfo(stat, queryRange: number)
|
||||||||||||
|
Map a result entry from getDaysSinceLastNoteOfEachEntity to the EntityWithRecentNoteInfo interface
Parameters :
Returns :
EntityWithRecentNoteInfo
|
| supportsPagination | ||||||
supportsPagination(loaderMethod?: LoaderMethod)
|
||||||
|
Whether this loader can serve one page at a time. The others load everything they have in a single call, so a list using them has to page in memory. A plain function so the data-source resolver can ask without injecting the service.
Parameters :
Returns :
boolean
|
| testDatatype | ||||||||||||||||||
testDatatype<D extends DefaultDatatype>(dataType, objectValue: unknown, databaseValue: unknown, additionalSchemaFieldConfig?: any, additionalProviders?)
|
||||||||||||||||||
Type parameters :
|
||||||||||||||||||
|
Parameters :
|
| testEntitySubclass | ||||||||||||||||||||||||||||||
testEntitySubclass(entityType: string, entityClass: EntityConstructor, expectedDatabaseFormat: any, skipTestbedConfiguration: unknown, additionalProviders)
|
||||||||||||||||||||||||||||||
|
Shared entity subclass test cases for model classes extending Entity.
Parameters :
|
| toFormFieldConfig | ||||||
toFormFieldConfig(column: ColumnConfig)
|
||||||
|
Parameters :
Returns :
FormFieldConfig
|
| TranslatableMatPaginator |
TranslatableMatPaginator()
|
| waitForChangeTo | ||||||||
waitForChangeTo<State>(state: State)
|
||||||||
Type parameters :
|
||||||||
|
Waits until the state of a source observable is equal to the given
state, then emit that state. All other states are discarded.
Parameters :
Returns :
MonoTypeOperatorFunction<State>
|