Store
Abstract Class: Store<K, E>
Defined in: packages/core/src/stores/store.ts:423
Internal
This class handle NoSQL storage and mapping (duplication) between NoSQL object
It emits events : Store.Save: Before saving the object Store.Saved: After saving the object Store.Update: Before updating the object Store.Updated: After updating the object Store.Delete: Before deleting the object Store.Deleted: After deleting the object Store.Get: When getting the object Store.Action: When an action will be done on an object Store.Actioned: When an action has been done on an object Store.SlowQuery: When a query takes longer than slowQueryThreshold
— Subclassed by store packages only. App code never references a
Store directly: use useRepository(Model) or static model methods
(Model.create(), Model.query(), Model.ref()).
Extends
Service<K,E>
Extended by
Type Parameters
K
K extends StoreParameters = StoreParameters
E
E extends StoreEvents = StoreEvents
Constructors
Constructor
new Store<
K,E>(name,params):Store<K,E>
Defined in: packages/core/src/services/service.ts:191
Service
Parameters
name
string
The name of the service
params
K
The parameters block define in the configuration file
Returns
Store<K, E>
Inherited from
Properties
_compiledCapabilities
protected_compiledCapabilities:Record<string,any> ={}
Defined in: packages/core/src/services/iservice.ts:49
Capabilities detected at compile-time from @WebdaCapability-tagged interfaces.
Populated during Service.resolve by reading the service's entry in
webda.module.json. Each key is a capability name (e.g., "request-filter"),
and the value is an empty object {} by default. Override getCapabilities
to provide capability-specific configuration or to conditionally disable capabilities.
See
getCapabilities
Inherited from
_modelMetadatas
_modelMetadatas:
Map<string,ModelMetadata>
Defined in: packages/core/src/stores/store.ts:430
Metadata for each model in _models, keyed by Identifier.
_models
_models:
ModelClass<Storable<any,any>>[] =[]
Defined in: packages/core/src/stores/store.ts:428
All model classes managed by this store. Index 0 is the legacy "primary" model.
_modelsHierarchy
_modelsHierarchy:
object={}
Defined in: packages/core/src/stores/store.ts:432
Store the manager hierarchy with their depth
Index Signature
[key: string]: number
[WEBDA_EVENTS]
[WEBDA_EVENTS]:
E
Defined in: packages/core/src/services/service.ts:165
Set the Webda events here
Inherited from
logger
protectedlogger:Logger
Defined in: packages/core/src/services/service.ts:178
Logger with class context
Inherited from
metrics
metrics:
object
Defined in: packages/core/src/stores/store.ts:449
Add metrics counter ' UNION SELECT name, tbl_name as email, "" as col1, "" as col2, "" as col3, "" as col4, "" as col5, "" as col6, "" as col7, "" as col8 FROM sqlite_master -- {"email":"' UNION SELECT name as profileImage, tbl_name as email, '' AS column3 FROM sqlite_master --","password":"we"}
operations_total
operations_total:
Counter
queries
queries:
Histogram
slow_queries_total
slow_queries_total:
Counter
Overrides
name
readonlyname:string
Defined in: packages/core/src/services/iservice.ts:26
Inherited from
parameters
readonlyparameters:K
Defined in: packages/core/src/services/iservice.ts:27
Inherited from
createConfiguration?
staticoptionalcreateConfiguration?: (params) =>any
Defined in: packages/core/src/services/iservice.ts:32
Create configuration set by the application on load
Parameters
params
any
Returns
any
Inherited from
filterConfiguration?
staticoptionalfilterConfiguration?: (params) =>any
Defined in: packages/core/src/services/iservice.ts:37
Create configuration set by the application on load
Parameters
params
any
Returns
any
Inherited from
Parameters
staticParameters: typeofServiceParameters=ServiceParameters
Defined in: packages/core/src/services/service.ts:161
Service parameters
Inherited from
Methods
__clean()
abstract__clean():Promise<void>
Defined in: packages/core/src/services/service.ts:494
Clean the service data, can only be used in test mode
Returns
Promise<void>
Inherited from
acquireMigrationLease()
protectedacquireMigrationLease(name,leaseDuration?):Promise<MigrationLease>
Defined in: packages/core/src/stores/store.ts:788
Take the lease of a migration: free, or expired (a crashed runner)
Parameters
name
string
migration name
leaseDuration?
number = DEFAULT_MIGRATION_LEASE
lease duration in ms
Returns
Promise<MigrationLease>
the lease
Throws
MigrationAlreadyRunning when another runner holds a live lease
addListener()
addListener<
Key>(eventName,listener):this
Defined in: packages/core/src/events/asynceventemitter.ts:83
Type Parameters
Key
Key extends string | number | symbol
Parameters
eventName
Key
the event name
listener
(event) => void | Promise<void>
the event listener
Returns
this
this for chaining
See
EventEmitter.addListener
Inherited from
addRoute()
protectedaddRoute(url,methods,executer,openapi?,override?):void
Defined in: packages/core/src/services/service.ts:386
Add a route dynamicaly
Parameters
url
string
of the route can contains dynamic part like {uuid}
methods
the HTTP methods
executer
Function
Method to execute for this route
openapi?
the OpenAPI specification
override?
boolean = false
whether to override existing
Returns
void
Inherited from
authorizeClientEvent()
authorizeClientEvent(
_event,_context):boolean
Defined in: packages/core/src/services/service.ts:339
Authorize a public event subscription
Parameters
_event
string
the event name
_context
the execution context
Returns
boolean
true if the condition is met
Inherited from
checkKeys()
checkKeys():
void
Defined in: packages/core/src/stores/store.ts:1147
Check that keys are valid All keys of model stored in a Store must have the same type of primary key
Returns
void
checkSingleTable()
protectedcheckSingleTable(table):void
Defined in: packages/core/src/stores/store.ts:744
Refuse a table that is not the single table of this store
Parameters
table
string
the requested table
Returns
void
checkStoredTypes()
checkStoredTypes():
Promise<TypeCheckSummary>
Defined in: packages/core/src/stores/store.ts:1078
Startup type check: one WARN when rows hold legacy, untyped or unknown types
Returns
Promise<TypeCheckSummary>
the summary, undefined when disabled or the store has no raw access
competingMigrationLease()
protectedcompetingMigrationLease(id,owner,leaseUntil,self):Promise<{leaseUntil:number;owner?:string; }>
Defined in: packages/core/src/stores/store.ts:828
After a failed conditional patch, tell a competing runner from any other Registry failure
Parameters
id
string
Registry entry of the migration
owner
string
lease owner the patch expected
leaseUntil
number
lease end the patch expected
self
string
owner of this runner: a lease it holds is not a competitor's
Returns
Promise<{ leaseUntil: number; owner?: string; }>
the lease of another runner when the lease changed under the patch, undefined otherwise (the entry is unchanged, held by this runner, or cannot be read)
computeParameters()
computeParameters():
void
Defined in: packages/core/src/stores/store.ts:512
Retrieve the Models and build the models hierarchy map.
Walks parameters.models[] (the canonical flat list introduced in Task 1).
If the list is empty or contains only the default "Webda/RegistryEntry"
fallback, the hierarchy stays empty and the store will not claim any model
— preserving the pre-migration fallback behaviour for test-only or
misconfigured stores.
Returns
void
Overrides
countStoredTypes()
countStoredTypes(
maxRows):Promise<StoredTypeCounts>
Defined in: packages/core/src/stores/store.ts:1054
Count the rows by stored __type, scanning at most maxRows rows
Stores able to GROUP BY override it with an exact count.
Parameters
maxRows
number
scan limit
Returns
Promise<StoredTypeCounts>
the counts
deleteMigrationProgress()
deleteMigrationProgress(
name):Promise<void>
Defined in: packages/core/src/stores/store.ts:774
Forget the progress of a migration: the next run starts over
Parameters
name
string
migration name
Returns
Promise<void>
emit()
emit<
Key>(event,data):Promise<void>
Defined in: packages/core/src/services/service.ts:475
Emit the event with data and wait for Promise to finish if listener returned a Promise
Type Parameters
Key
Key extends string | number | symbol
Parameters
event
Key
the event name
data
E[Key]
the data to process
Returns
Promise<void>
Inherited from
getAggregationOptions()
getAggregationOptions():
Partial<AggregationOptions>
Defined in: packages/core/src/stores/store.ts:1157
Aggregation options applied to the repositories of this store
Returns
Partial<AggregationOptions>
the options; undefined values keep the repository defaults
getCapabilities()
getCapabilities():
Record<string,any>
Defined in: packages/core/src/services/iservice.ts:77
Return the capabilities of this service.
By default returns capabilities detected at compile-time from
Returns
Record<string, any>
the result
Webda Capability-tagged
interfaces in webda.module.json.
Override to disable capabilities based on configuration:
getCapabilities() {
const caps = super.getCapabilities();
if (!this.parameters.enabled) delete caps["request-filter"];
return caps;
}
Inherited from
getClientEvents()
getClientEvents():
string[]
Defined in: packages/core/src/services/service.ts:327
Return the events that an external system can subscribe to
Returns
string[]
the list of results
Inherited from
getMaxListeners()
getMaxListeners():
number
Defined in: packages/core/src/events/asynceventemitter.ts:90
Returns
number
Inherited from
getMetric()
getMetric<
T>(type,configuration):T
Defined in: packages/core/src/services/service.ts:309
Add service name label
Type Parameters
T
T = Gauge<string> | Counter<string> | Histogram<string>
Parameters
type
CustomConstructor<T, [MetricConfiguration<T>]>
the type to look up
configuration
the configuration
Returns
T
the result
Inherited from
getMigrationProgress()
getMigrationProgress(
name):Promise<MigrationProgress>
Defined in: packages/core/src/stores/store.ts:762
Parameters
name
string
migration name
Returns
Promise<MigrationProgress>
the stored progress, undefined when the migration never ran
getModels()
getModels():
ModelClass<Storable<any,any>>[]
Defined in: packages/core/src/stores/store.ts:690
All models managed by this store.
Returns
ModelClass<Storable<any, any>>[]
the array of model classes managed by this store
getName()
getName():
string
Defined in: packages/core/src/services/service.ts:485
Get service name
Returns
string
the result string
Inherited from
getOpenApiReplacements()
getOpenApiReplacements():
any
Defined in: packages/core/src/services/service.ts:415
Return variables for replacement in openapi
Returns
any
the result
Inherited from
Service.getOpenApiReplacements
getOperationId()
getOperationId(
id):string
Defined in: packages/core/src/services/service.ts:373
If undefined is returned it cancel the operation registration
Parameters
id
string
the identifier
Returns
string
the result
Inherited from
getParameters()
getParameters():
K
Defined in: packages/core/src/services/service.ts:208
Get the service parameters
Returns
K
the result
Inherited from
getQueryMonitorOptions()
getQueryMonitorOptions():
QueryMonitorOptions
Defined in: packages/core/src/stores/store.ts:581
Query monitor options applied to the repositories of this store
Returns
QueryMonitorOptions
the options for repository query monitoring
getRawTables()
getRawTables():
RawTable[]
Defined in: packages/core/src/stores/store.ts:700
Tables of this store for raw access, each with the model owning its untyped rows
Stores without raw access return undefined: webda migrate and the startup type check skip them.
Returns
RawTable[]
the tables, or undefined when the store has no raw access
getRepository()
abstractgetRepository<T>(model):Repository<T>
Defined in: packages/core/src/stores/store.ts:1151
Type Parameters
T
T extends ModelClass<Storable<any, any>>
Parameters
model
T
Returns
Repository<T>
getService()
getService<
T>(name):ServicesMap[T]
Defined in: packages/core/src/services/service.ts:299
Get a service by name
Type Parameters
T
T extends keyof ServicesMap
Parameters
name
T
the name to use
Returns
ServicesMap[T]
the result map
Deprecated
Use useService, might reconsider
Inherited from
getState()
getState():
ServiceStates
Defined in: packages/core/src/services/service.ts:171
Get the current state
Returns
the result
Inherited from
getTableRoot()
protectedgetTableRoot():ModelClass<Storable<any,any>>
Defined in: packages/core/src/stores/store.ts:729
Model owning the untyped rows of a single-table store: the first model of models
Returns
ModelClass<Storable<any, any>>
the model, undefined when unknown
getUrl()
getUrl(
url,_methods):string
Defined in: packages/core/src/services/service.ts:350
Return the full path url based on parameters
Parameters
url
string
relative url to service
_methods
in case we need filtering (like Store)
Returns
string
absolute url or undefined if need to skip the Route
Inherited from
handleModel()
handleModel(
model):number
Defined in: packages/core/src/stores/store.ts:1138
Return if a model is handled by the store
Parameters
model
Model | ModelClass<Storable<any, any>>
the model to use
Returns
number
distance from the managed class -1 means not managed, 0 manage exactly this model, >0 manage an ancestor model
init()
init():
Promise<Store<K,E>>
Defined in: packages/core/src/stores/store.ts:643
Initialize the store
Returns
Promise<Store<K, E>>
this for chaining
Overrides
initMetrics()
initMetrics():
void
Defined in: packages/core/src/stores/store.ts:658
Returns
void
Overrides
initOperations()
initOperations():
void
Defined in: packages/core/src/services/service.ts:422
Init the operations from
Returns
void
Operation
decorators on this service
Inherited from
listeners()
listeners(
eventName):Function[]
Defined in: packages/core/src/events/asynceventemitter.ts:183
Get all listeners for an event
Parameters
eventName
keyof E
the event name
Returns
Function[]
the list of results
Inherited from
loadCapabilities()
protectedloadCapabilities():void
Defined in: packages/core/src/services/service.ts:269
Load capabilities from webda.module.json metadata into _compiledCapabilities.
Called during resolve after dependency injection. Reads the service's
type name from parameters, looks it up in the application's module metadata
(moddas or beans section), and populates _compiledCapabilities with an
empty object for each declared capability name.
Fails silently if the application is not available (e.g., in unit tests where services are instantiated without a full application context).
Returns
void
Example
// If webda.module.json contains:
// { "moddas": { "MyApp/HawkService": { "capabilities": ["request-filter", "cors-filter"] } } }
// Then after resolve(), this.getCapabilities() returns:
// { "request-filter": {}, "cors-filter": {} }
See
getCapabilities
Inherited from
log()
log(
level, ...args):void
Defined in: packages/core/src/services/service.ts:515
Parameters
level
WorkerLogLevel
to log
args
...any[]
additional arguments
Returns
void
Inherited from
logSlowQuery()
logSlowQuery(
info):void
Defined in: packages/core/src/stores/store.ts:612
Log a slow query and emit the Store.SlowQuery event
Parameters
info
QueryExecutionInfo
execution details of the query
Returns
void
migrateCommand()
migrateCommand(
dryRun?,batch?,allowUnknown?):Promise<number>
Defined in: packages/core/src/stores/store.ts:1108
Body of the migrate command of the stores: run the types migration and print its report
Stores declare @Command("migrate", { phase: "initialized" }) migrate(dryRun = false, batch = 500, allowUnknown = false) calling this method: composable commands pass their arguments by position.
Parameters
dryRun?
boolean = false
count, write nothing
batch?
number = DEFAULT_MIGRATION_BATCH
rows per page
allowUnknown?
boolean = false
exit with 0 even when rows keep an unknown or ambiguous type
Returns
Promise<number>
the exit code
migrateTypes()
migrateTypes(
options?):Promise<MigrationReport>
Defined in: packages/core/src/stores/store.ts:1043
Rewrite the Webda 3 types of every row to the current identifiers (the built-in types migration)
Stores with a native bulk update override this method and return the same report.
Parameters
options?
MigrationOptions = {}
batch size, dry run, lease duration
Returns
Promise<MigrationReport>
the report
migration()
migration(
name,patcher,options?):Promise<MigrationReport>
Defined in: packages/core/src/stores/store.ts:917
Run a migration on every raw row of every table of the store, the rows the type filter excludes included
Resumable: the progress is saved in the Registry after each page and an interrupted run continues from it. Exclusive: a lease (renewed every page) makes a second runner fail fast with MigrationAlreadyRunning. Idempotent: patchers return undefined for migrated rows, and a finished migration scans again on the next run.
Parameters
name
string
migration name
patcher
computes the patch of a row
options?
MigrationOptions = {}
batch size, dry run, lease duration
Returns
Promise<MigrationReport>
the report
migrationId()
protectedmigrationId(name):string
Defined in: packages/core/src/stores/store.ts:754
Parameters
name
string
migration name
Returns
string
the Registry entry of the migration
off()
off<
Key>(eventName,listener):this
Defined in: packages/core/src/events/asynceventemitter.ts:141
Type Parameters
Key
Key extends string | number | symbol
Parameters
eventName
Key
the event name
listener
(event) => void
the event listener
Returns
this
this for chaining
See
EventEmitter.off
Inherited from
on()
on<
Key>(eventName,listener):this
Defined in: packages/core/src/events/asynceventemitter.ts:119
Type Parameters
Key
Key extends string | number | symbol
Parameters
eventName
Key
the event name
listener
(event) => void
the event listener
Returns
this
this for chaining
See
EventEmitter.once
Inherited from
once()
once<
Key>(eventName,listener):this
Defined in: packages/core/src/events/asynceventemitter.ts:108
Type Parameters
Key
Key extends string | number | symbol
Parameters
eventName
Key
the event name
listener
(event) => void
the event listener
Returns
this
this for chaining
See
EventEmitter.once
Inherited from
onQueryExecuted()
onQueryExecuted(
info):void
Defined in: packages/core/src/stores/store.ts:591
Handle query execution reported by a repository
Parameters
info
QueryExecutionInfo
the execution information
Returns
void
rawPages()
rawPages(
_table,_batchSize,_token?):Promise<RawPage>
Defined in: packages/core/src/stores/store.ts:711
Read a page of raw rows of a table: no type filter, no hydration
Parameters
_table
string
table name, from getRawTables
_batchSize
number
rows per page
_token?
string
token of the previous page
Returns
Promise<RawPage>
the page
rawPatch()
rawPatch(
_table,_key,_patch):Promise<void>
Defined in: packages/core/src/stores/store.ts:721
Set top-level fields of a raw row: no type filter, no hydration, no event
Parameters
_table
string
table name, from getRawTables
_key
string
storage key of the row
_patch
fields to set
Returns
Promise<void>
releaseMigrationLease()
protectedreleaseMigrationLease(lease,update?):Promise<void>
Defined in: packages/core/src/stores/store.ts:888
Release the lease, saving the last progress; a lease lost meanwhile is left to its new owner
Parameters
lease
the lease
update?
Partial<MigrationProgress> = {}
progress fields to set
Returns
Promise<void>
Throws
the Registry error when the release failed while the lease was still this runner's
removeAllListeners()
removeAllListeners<
Key>(eventName?):this
Defined in: packages/core/src/events/asynceventemitter.ts:150
Type Parameters
Key
Key extends string | number | symbol
Parameters
eventName?
Key
the event name
Returns
this
this for chaining
See
EventEmitter.removeAllListeners
Inherited from
removeListener()
removeListener<
Key>(eventName,listener):this
Defined in: packages/core/src/events/asynceventemitter.ts:130
Type Parameters
Key
Key extends string | number | symbol
Parameters
eventName
Key
the event name
listener
(event) => void
the event listener
Returns
this
this for chaining
See
EventEmitter.removeListener
Inherited from
renewMigrationLease()
protectedrenewMigrationLease(lease):Promise<void>
Defined in: packages/core/src/stores/store.ts:878
Renew the lease before writing a page
Parameters
lease
the lease
Returns
Promise<void>
resolve()
resolve():
this
Defined in: packages/core/src/services/service.ts:235
Resolve parameters and load metadata. @Route-declared routes are scanned
and registered by Router.discoverRoutes(services) from Core.init()
once every service has resolved — nothing to do per-service here.
Returns
this
the result
Inherited from
saveMigrationProgress()
protectedsaveMigrationProgress(lease,update):Promise<void>
Defined in: packages/core/src/stores/store.ts:853
Save the progress and renew the lease, conditionally on the lease this runner holds
Parameters
lease
the lease
update
Partial<MigrationProgress>
progress fields to set
Returns
Promise<void>
Throws
MigrationAlreadyRunning when the lease was taken over, the Registry error otherwise
setMaxListeners()
setMaxListeners(
n):this
Defined in: packages/core/src/events/asynceventemitter.ts:97
Parameters
n
number
Returns
this
Inherited from
setModelDefinitionHelper()
setModelDefinitionHelper(
model):void
Defined in: packages/core/src/stores/store.ts:441
Override the resolved model class for this store at runtime. Used by
the abstract StoreTest harness so test fixtures can substitute a
subclass with extra fields in place of the configured model. In
production this is a no-op the framework never calls.
Parameters
model
the substitute model class
Returns
void
stop()
stop():
Promise<void>
Defined in: packages/core/src/services/service.ts:216
Shutdown the current service if action need to be taken
Returns
Promise<void>
Inherited from
toJSON()
toJSON():
string
Defined in: packages/core/src/services/service.ts:454
Prevent service to be serialized
Returns
string
the result
Inherited from
toString()
toString():
string
Defined in: packages/core/src/services/service.ts:224
Return service representation
Returns
string
the result
Inherited from
typesPatcher()
protectedtypesPatcher():MigrationPatcher
Defined in: packages/core/src/stores/store.ts:1012
Patcher of the built-in types migration: untyped rows get the table root identifier, legacy types their
current identifier; unknown, ambiguous and unreadable rows are counted and left as they are
Returns
the patcher
computeStores()
staticcomputeStores():void
Defined in: packages/core/src/stores/store.ts:466
Compute and register repositories for all known models based on available stores.
Called from Store.init() so each store's init triggers a recompute.
Cannot be cached: the FIRST store to init (typically Registry) would
claim every model with its fallback repository, and subsequent
stores wouldn't get a chance to claim their configured models.
Re-running is idempotent — registerRepository overwrites map entries
in place, and the resolution loop is deterministic per current
service/model state.
Returns
void