All notable changes to this project will be documented in this file. This project does its best to adhere to Semantic Versioning.
0.32.0 - 2022-02-21
- Removed
DtoAllFuncs<,>
interface in favor of optional properties and 2nd generic type onDtoFuncs<>
interface - Fix reference from '@twg2/[email protected]
upgrade
ast-types.d.tsrenamed
code-ast.d.ts`
0.31.0 - 2022-01-02
- Update to TypeScript 4.4
0.30.0 - 2021-10-01
- Most of the same unit tests as the
lokijs
project Collection
properties and constructor optionscloneObjects
andcloneFunc
DynamicView
count()
Resultset
count()
- Added
LokiOps.$aeq
fromlokijs
Resultset.data()
options
parameter added withclone
optionResultset.LokiOps
made public- Moved clone functions from
MemDbImpl
to newCloneUtil
file
- Fix several bugs revealed by unit tests, ported fixes from
lokijs
project
0.29.1 - 2021-09-02
test/CollectionTest
for some much needed db-collections/Collection.ts coverage
- Update dependency to
@twg2/[email protected]
- Remove old unrelated
test/CompileManualBrowserBundleTest
and resulting unuseddevDependencies
0.29.0 - 2021-06-12
- Update to TypeScript 4.3
0.28.0 - 2021-03-16
- Remove
Q
dependency (still used as a devDependency) - Update dependencies for
Q
dependency removal - Change all
Q.Promise
andQ.IPromise
types toPsPromise
(fromts-promises
package)
0.27.0 - 2020-09-05
- Update to TypeScript 4.0
0.26.1 - 2020-08-12
- Fix a bug adding items via
MemDbImpl.addOrUpdateWhere()
which affectsDataCollection
addOrUpdateWhere()
andaddOrUpdateWhereNoModify()
, an extraneousundefined: undefined
property was being added to the inserted item(s)
0.26.0 - 2019-12-06
- Renamed interface
InMemDb
->MemDb
- Renamed
InMemDbImpl.ts
->MemDbImpl.ts
MemDb.createDataPersister()
, callers can access the appropriate classes and create persisters matching their needs
0.25.2 - 2019-11-08
- Updated to TypeScript 3.7 and other dependencies
0.25.1 - 2019-06-18
- Fix
WebSqlPersister
to throw an error instead of infinitely looping when trying to persist with amaxObjectsPerChunk
of zero or null - Fix a
WebSqlSpi
issue calling Database methods without athis.
context - Fix a TypeScript error when importing this into another project mixing TypeScript 3.2 and 3.5
0.25.0 - 2019-06-18
- Alpha quality
IndexedDbPersister
andIndexedDbSpi
- unit test development started, still needs a lot of testing and some fixes
WebSqlSpi.WebSqlDatabase
flattened into justWebSqlSpi
(DbUtils
moved toDbUtil
)WebSqlPersister.restore()
defaultOptions
parameter no longer defaultsdataColumnName
toWebSqlPersister.defaultDataColumnName
andmaxObjectsPerChunk
no longer defaults toWebSqlPersister.MAX_OBJECTS_PER_PERSIST_RECORD
WebSqlSpi.execSqlStatements()
`xactMethodType moved from last parameter position to second parameterWebSqlPersister
tablesToNotClear
andtablesToNotLoad
fields changed from static to instance and added to constructor parametersaddCollectionRecords()
options.maxObjectsPerChunk
no longer defaults to 1000, specify a value
DataPersister.Trace
renamedDataPersister.DbLogger
- Moved
WebsqlSpi.DbUtils
into its own fileDbUtil
- Removed unnecessary try-catch-rethrow from
Resultset.where()
- Changed some
Collection
catch blocks to log errors tothis.events.emit('error', ...)
instead of theconsole
- Update to TypeScript 3.5 and fix compile errors
MemDbCollection
andCollection
byExample()
,findObject()
, andfindObjects()
useDataCollection.data()
andwhere()
instead
- Fixed
Collection.lookup()
returning a method when passingnull
for the key - Fixed
WebSqlPersister.createInsertStatements()
to always runitemSaveConverter
on data rows being persisted regardless of other config options
0.24.7 - 2019-03-21
ts-code-generator
import/reference paths not being updated to@twg2/ts-twg-ast-codegen
0.24.6 - 2019-03-20
- Switch
ts-mortar
andts-promises
dependencies from github to npm - Switched dependency
[email protected]
to same npm project with new name@twg2/[email protected]
0.24.5 - 2019-03-14
- Update dependency
[email protected]
(fix forStrings.isDigit()
, removal ofObjects.getProps()
andStrings.endsWith()
, and several other changes)
0.24.4 - 2018-12-29
- Update
ts-code-generator
dependency
0.24.3 - 2018-12-29
- Update to TypeScript 3.2 and fix compile errors
- Update dev and @types/ dependencies
- Remove
tsconfig.json lib "dom"
and cleanup code to not rely on browser globals - Exposed
MemDbPersisters.localStorage
to allow for custom implementations
0.24.2 - 2018-11-23
- Update dependency
[email protected]
(fix forFunctions.lazy()
when initializer returns null)
0.24.1 - 2018-10-20
- Switch
package.json
github dependencies from tag urls to release tarballs to simplify npm install (doesn't require git to npm install tarballs)
0.24.0 - 2018-10-17
- Update to TypeScript 3.1
- Update dev dependencies and @types
- Enable
tsconfig.json
strict
and fix compile errors - Removed compiled bin tarball in favor of git tags
MemDbCollectionOptions
now has a generic type which narrows the array type ofindices
,exact
, andunique
propertiesmem-collections.d.ts
keyof T
types restricted by& string
across several method signatures
- Ensure
TsEventEmitter.events
is always initialized
0.23.0 - 2018-04-14
- Update to TypeScript 2.8
- Setup dependencies as proper npm node_modules
- Added release tarball and npm script
build-package
to package.json referencing external process to generate tarball
- Remove
ts-promises
unused dependency
0.22.4 - 2018-03-01
- Update to TypeScript 2.7
- Update dependencies: mocha, @types/chai, @types/mocha, @types/node
- Enable tsconfig.json
noImplicitAny
0.22.3 - 2018-01-31
- SQLError message now included in errors thrown by WebSqlSpi _rejectError()
- A bug in WebSqlPersister related to persisting empty collections
0.22.2 - 2017-11-08
- A bug in
WebSqlSpi.WebSqlDatabase.openDatabase()
that was rejecting the database initialization promise when the database was successfully opened WebSqlPersister.WebSqlAdapter.persist()
now correctly tracks the byte size of the restored data strings- DataCollection
mem-collections.d.ts
reference changed tomem-db.d.ts
to fix compile issue when compiling just the DataCollection file
0.22.1 - 2017-11-07
- Updated and fixed some README info
- Some errors when compiling without
strictNullChecks
- Nested loop counter not getting initialized in
WebSqlSpi.execSqlStatements()
when passed a query with anargs
array containing one or more elements
0.22.0 - 2017-11-06
Integrate simplified version of Lokijs code into this project, remove Lokijs dependency
- Ported
lokijs@~1.3.0
to project and removed lokijs dependency frompackage.json
- Copied lokijs into
db-collections
new classes:Collection
,DynamicView
,Resultset
,MemDbPersisters
, andTsEventEmitter
- Removed lokijs 'deep.property.scan' query feature to reduce complexity
- Removed LokiEventEmitter
asyncListeners
option since it causes performance issues - Delegation instead of inheritance:
Loki
,Collection
,DynamicView
, andResultset
no longer extendEventEmitter
. All of these, excluding Resultset, now containevents
fields which are instances ofEventEmitter
. - Merged
InMemDbImpl
withLoki
- Copied lokijs into
WebSqlSpi
containing low level interface for reading/writing parameterized queries to WebSQL tables in browserWebSqlPersister
implementsDataPersister
and creates basic WebSQL queries for persisting and restoringDataCollection
sWebSqlPersister
is decoupled forWebSqlSpi
via a simple interface with two methods:getTables()
andexecuteQueries(WebSqlSpi.SqlQuery[])
- Added
strictNullChecks
totsconfig.json
and updated code to handle nulls - Improved data types with null checks
- Updated to [email protected] (strict null checks)
- Merged
Loki
dependency library/class withInMemDbImpl
- Renamed
InMemDb.getCollections()
->listCollections()
- Renamed
InMemDbImpl
fields:dbName
->name
, merged fieldssyncSettings
andstoreSettings
into newsettings
field - Merged and consolidated
Loki
interfaces within-mem-collections.d.ts
interfaces - Renamed and split definition file
in-mem-collections.d.ts
intomem-collections.d.ts
,mem-db.d.ts
, andmem-models.d.ts
- Merged
DtoSvcFuncs
andDtoAllFuncs
interfaces, renamed fieldsconvertToLocalObjectFunc
->toLocalObject
andconvertToSvcObjectFunc
->toSvcObject
InMemDbImpl
fields:db
anddbInitializer
InMemDbImpl
databaseInitializer
constructor field and merged constructor fieldssyncSettings
andstoreSettings
into newsettings
fieldInMemDb
initializeDb()
since there is no underlyingInMemDbProvider
anymore- Removed
DtoSvcFuncs
interface (mreged withDtoAllFuncs
0.21.0 - 2017-10-26
ModelDefinitions
interface changes:getPrimaryKeyNames()
renamedgetPrimaryKeys()
getAutoGeneratedKeyNames()
renamedgetAutoGeneratedKeys()
getFieldNames()
renamedgetFields()
getDataModel()
renamedgetModel()
- Removed
ModelDefinitionsSet
fields:dataTypes
andmodels
- Removed interface
ModelDefinitions.DataTypeDefault
0.20.5 - 2017-08-05
- Update to TypeScript 2.4
0.20.4 - 2017-06-09
- Updated to latest version of [email protected]
0.20.3 - 2017-05-26
- Upgraded to [email protected]
- Improved LokiQueryLike type
- Added empty result check to
DataCollection.lookup()
; align behavior with single(). Also addedthrowIfNotFound
flag to allow it to also work likefirst()
0.20.2 - 2017-05-26
- Improved
first()
andsingle()
implementation - Some additional documentation
0.20.1 - 2017-05-26
- Added
DataCollection.single()
to provide single object lookup functionality
0.20.0 - 2017-05-26
- Added
DataCollection.lookup()
to provide primary key lookup functionality
- Renamed DataCollection and InMemDb
findOne()
->first()
- Improved
LokiQueryLike
interface - Added more method documentation
- Removed/renamed
InMemDb.findSinglePropQuery()
->InMemDb.data()
0.19.2 - 2017-05-22
- Fixed an issue with Query not matching valid queries
- Renamed/changed Query definition to LokiQueryLike<E, K>
0.19.1 - 2017-05-19
- Improved DataCollection
E
andP
types and fixedQuery<E>
type bug
0.19.0 - 2017-05-19
DataCollection<E, O>
changed toDataCollection<E, P>
-O
represented an optional props version ofE
,P
now represents the required primary key props of theE
model andPartial<E>
is used internally in place ofO
- Improved type of 'query' parameters used by data(), find(), updateWhere(), and similar methods
- Added missing types and tightened type requirements on various InMemDb and DataCollection methods
- Added additional DataPersister methods to allow for more control of the underlying persistent data source
0.18.2 - 2017-05-09
- Updated some documentation
- Updated to TypeScript 2.3, added tsconfig.json, use @types/ definitions
0.18.1 - 2017-04-19
- ModelDefinitionsSet.cloneDtoPropertyTemplate() now includes 'server.toLocal'
0.18.0 - 2017-03-01
- DataCollectionModel fieldNames, primaryKeys, and autoGeneratedKeys type changed from string to keyof
0.17.0 - 2016-12-29
- Renamed LokiDbImpl -> InMemDbImpl
- Renamed LokiDbImplTest -> InMemDbImplTest
- Some test case refactoring, new CloneBenchmarkTest and TestModels files
- InMemDbImpl.benchmarkClone() method moved to new CloneBenchmarkTest file
0.16.0 - 2016-12-21
- Switched from Lokijs explicit import and type usage to new InMemDbProvider interface (moving away from Lokijs dependency toward generic in-mem DB API)
- Removed LokiDbImpl.getCollection() 'settings' parameter, instead use LokiDbImpl 'createCollectionSettingsFunc' parameter
- Removed unused LokiDbImpl.initializeDb() 'options' parameter
- Added LokiDbImpl constructor parameters 'createCollectionSettingsFunc' and 'modelKeysFunc' to give more control over Lokijs specific implementation details
- TypeScript 2.0 compatibility tweaks
0.15.0 - 2016-11-03
- LokiDbImpl() constructor 'reloadMetaData' flag and 'dbInitializer' function parameters
- PrimaryKeyMaintainer() constructor 'reloadAll' flag parameter
- LokiDbImpl private _setNewDb() method and private static _createNewDb() method in favor of initializeDb() and the constructor's new 'dbInitializer' parameter
- primary key maintainer now properly handles collection data model 'autoGeneratedKeys' changes. Previously if the model changed, the PrimaryKeyMaintainer would end up confusing the old keys with the new keys and add the wrong auto-generated properties to objects missing them.
0.14.0 - 2016-09-19
- Updated to version 0.11.0 of ts-mortar which moved ts-mortar/events/ to a separate library
- Added [email protected] dependency for the EventListenerList previously provided by ts-mortar and used by DataCollection
0.13.1 - 2016-08-24
- Fixed some .d.ts paths to match DefinitelyTyped structure
- Fixed issue with ModelDefinitionsSet.cloneDtoPropertyTemplate()
0.13.0 - 2016-05-27
- Renamed PermissionedDataPersistAdapter -> PermissionedDataPersister
- Renamed DataPersister.AdapterFactory -> DataPersister.Factory
- Renamed DataPersister.clearPersistenceDb() -> clearPersistentDb()
- Moved DataPersister.Adapter interface up and merged it with DataPersister module
- Made DataCollection.collection public to make it easy to access the underlying lokijs collection (please note this field is meant to be readonly)
- sync/ directory moved to new lokijs-collections-sync library
0.12.5 - 2016-05-27
- More thorough error handling in SyncDataCollection.syncDownCollection()
- Removed last modified timestamp filtering when updating local items after syncing up since primary key filtering should already restrict the search results sufficently
0.12.4 - 2016-05-26
- work with latest version of ts-promises library
- use mocha and chai for tests instead of qunit
0.12.3 - 2016-05-26
- Changed to work with latest version of ts-mortar and new ts-typed-promises library
0.12.2 - 2016-05-25
- Replaced two console.error() calls with throw new Error()
- Added 'syncingDown' error property to syncDownCollection() and changed 'syncDownFunc' type so sync functions don't have to return a SyncError
0.12.1 - 2016-05-24
- Updated to use new version of ts-mortar and new ts-promise-tasks library
- Updated readme
- Fixed error in syncUpCollection() not rejecting promise correctly if sync function failed
0.12.0 - 2016-05-18
- Added some documentation to change-trackers, db-collections, and sync
- Renamed ChangeTrackersImpl -> ChangeTrackers
- Renamed DataCollectionImpl -> DataCollection
0.11.0 - 2016-05-15
- Added DtoCollection which extends DataCollection and changes the parameters/return types of some functions with the goal of making a collection interface for DTO server syncable collections
- renamed DataCollectionImpl.fromWebServiceModel() -> fromDtoModel() (which returns the new DtoCollection type) and added fromDataModel() (which returns the existing DataCollection type)
- ts-code-generator library required version bumped to 0.15.0 - small name and type changes to work with latest version
- Moved ModelDefinitions.dataTypes type to it's own ModelDefinitions.DataTypeDefault interface
- Refactored collection models, they are now split into two pieces: DtoModel and DtoFuncs or DtoAllFuncs, instead of being combined, this changes several interfaces and function signatures:
- Renamed interfaces:
- DataCollectionModelFuncs -> DtoFuncs
- DataCollectionModelSvcFuncs -> DtoSvcFuncs
- DataCollectionModelAllFuncs -> DtoAllFuncs
- Function signature includes new 'modelFuncs' or similar parameter:
- DataCollectionImpl.fromWebServiceModel()
- ModelDefinitionsSet: addModel(), modelDefToCollectionModelDef(), and modelDefsToCollectionModelDefs()
- Renamed interfaces:
- ModelDefinitionsSet.cloneDtoPropertyTemplate() was incorrectly converting 'undefined' default values to 'null'
0.10.1 - 2016-05-14
- updated ts-code-generator package version, requires 0.14.1 or higher,
- updated interfaces name referencess to matched new/renamed interfaces from ts-code-generator interface definitions
- Renamed ModelDefinitionsSet methods:
- extendModelDef() -> extendModelTemplate()
- multiExtendModelDef() -> multiExtendModelTemplate()
- Renamed in-mem-collections.d.ts interfaces:
- CollectionModel -> DtoCollectionModel
- CollectionSvcModel -> DtoCollectionSvcModel
- CollectionSvcModelNamed -> DtoCollectionSvcModelNamed
0.10.0 - 2016-05-13
- ModelDefinitions.modelNames array (also added to subclass ModelDefinitionsSet) for easy access instead of having to use Object.keys()
- Added CollectionSvcModelNamed interface
- ModelDefinitions.models (and ModelDefinitionsSet.addModel() and constructor) now add a 'name' property to the models
- Improved ModelDefinitionsSet.cloneDeep data type.
- Renamed interfaces:
- CollectionModelDef -> CollectionModel
- CollectionModelWithSvcDef -> CollectionSvcModel
- ModelDefinitionsSet.addModel() now copies when storing it internally to match constructor behavior
0.9.1 - 2016-05-06
- Added cloneWithoutMetaData_clone_delete() to mirror original clone functionality
- Renamed LokiDbImpl clone methods to cloneCloneDelete(), cloneForInIf(), cloneKeysExcludingFor(), cloneKeysForIf()
0.9.0 - 2016-05-05
- Updated to use latest version of ts-mortar 0.5.4 (renamed Objects.cloneMap() -> map())
- Added cloneType string parameter to LokiDbImpl constructor
- Renamed LokiDbImpl.prototype.stripMetaData() -> cloneWithoutMetaData()
- Renamed LokiDbImpl.stripMetaData() in favor of cloneDeepWithoutMetaData() or one of the specific implementations: cloneWithoutMetaData_for_in_if(), cloneWithoutMetaData_keys_excluding_for(), cloneWithoutMetaData_keys_for_if()
0.8.2 - 2016-04-20
- A CHANGELOG.md covering all previous releases after being reminded about the need for change longs on http://keepachangelog.com/
- ModelDefinitionsSet.cloneDtoPropertyTemplate()
- Moved .d.ts definition files to separate definitions library
- Moved ts-mortar dependency location
- Updated TypeScript compiler to 1.8
- Removed lodash dependency, in favor of optional caller provided 'cloneDeep' function parameters to various functions with default fallback to 'ts-mortar' Objects.cloneDeep()
0.8.1 - 2016-03-12
- SyncDataCollection documention
SyncSettingsBuilder (unifying function names):
- Added fromDataCollectionAndSyncFuncs() 'findFilterFunc' parameter
- Renamed setSettings() -> addSettingsInst()
- Renamed setSyncDown() -> addSyncDownSettings()
- Renamed setSyncUp() -> addSyncUpSettings()
0.8.0 - 2016-03-11
'Syncing' functionality - for asynchronously sending and receiving DataCollection data and merging it with an existing data collection
- sync/SyncDataCollection.ts - with syncDownCollection() and syncUpCollection() functions as well as parameters to control how changes are synced, see:
- SyncDataCollection.SyncDownOp enum - which provides options for removing or preserving existing data during a sync and adding or merging new data
- sync/SyncSettingsBuilder.ts - a someone complex Builder pattern class for building SyncSettings* interface instances
- sync/syncing-types.d.ts - with all the new interfaces
- ModelDefinitionsSet constructor 'dataModels' parameter string map and addModel() 'model' types changed from CollectionModelDef -> CollectionModelWithSvcDef
- Added DataCollectionImpl constructor 'dataModelFuncs' parameter
- Renamed interface CollectionDataModel -> DataCollectionModel
0.7.1 - 2015-12-22
- LokiDbImpl.removeWhere() bug not properly querying the collection and not properly removing when query returned multiple results
0.7.0 - 2015-12-20
- InMemDb.initializeLokijsDb() to allow the underlying database to be constructed after creating an InMemDb instance
- DataPersister.AdapterFactory interface
- Decoupled DataPersister interface from InMemDb
- Updated test cases
- LokiDbImpl _findOneOrNull(), _findNResults(), _findMultiProp() have been removed from the public API
- Several DataPersister.Adapter: setDataStoreInterface(), setDataSources(), setDataConverters(), save(), and load() functions
0.6.1 - 2015-12-17
- ModelDefinitionsSet extendModelDef() and multiExtendModelDef() 'DtoPropery' string map parameters changed to 'DtoPropertyTemplate' string maps
0.6.0 - 2015-12-17
- Added first qunit test cases for LokiDbImpl
- Added ModelDefinitionsSet.addModel()
- Renamed CollectionDataModelImpl -> ModelDefinitionsSet
- Renamed interface WebServiceModelDef -> DtoModelTemplate
- LokiDbImpl internal class name updated from InMemDbImpl to LokiDbImpl to match file name
- Removed SimpleTemplate interface, see ts-code-generator project
0.5.2 - 2015-12-16
- Added DataCollectionImpl.fromWebServiceModel() static constructor
- Added CollectionDataModelImpl modelDefToCollectionModelDef() and modelDefsToCollectionModelDefs() to convert WebServiceModelDef or CollectionModelDef objects to CollectionDataModel
- Renamed DefaultModelDefinitions -> CollectionDataModelImpl
- CollectionDataModel interfaces 'copyFunc' return type narrowed from any to E
0.5.1 - 2015-12-15
- ModelDefinitionsTemplate interface renamed SimpleTemplate and no longer extends ModelDefinitions, 'templateVariables' property renamed 'templateExpressions'
- Copied .d.ts definition files from DefinitelyTyped for Q, lodash, lokijs, and qunit
- DefaultModelDefinitions.generateAdditionalModelsInfo() nested loop reusing 'i' and 'size' variables bug
0.5.0 - 2015-12-15
- data-model/DefaultModelDefinitions.ts - a map of model definitions for an entire database, see Changed notes below
- Major API refactor, switched to data model backed design. Each collection is backed by a runtime data model containing a list of properties belonging to that model, each fields' client and server name, data type, server-to-client and client-to-server conversion code, as well as an optional manual copy function.
- DataCollection constructor and multiple InMemDb function interfaces definitions require a new 'dataModel' parameter, related implementation code updated as well
- ModelKeysImpl getUniqueIdNames() and getGeneratedIdNames() in favor of new getDataModel() function
0.4.1 - 2015-12-11
- Replaced some lodash function calls with plain javascript equivalent code in LokiDbImpl (goal of removing lodash dependency completely)
- ChangeTrackersImpl bug was causing addChange*() functions to count arrays of item changes as only 1 change
- LokiDbImpl stripMetaData() now removes Lokijs '$loki' and 'meta' properties from cloned objects
0.4.0 - 2015-11-21
- DataCollection interface
- Renamed DataCollection -> DataCollectionImpl
0.3.0 - 2015-11-19
NonNullKeyMaintainer for checking null fields in collections
- Moved PermissionedDataPersistAdapter from LokiDbImpl to 'db-collections/PermissionedDataPersisterAdapter.ts'
- PrimaryKeyMaintainer.manageKeys() now requires an array of items to manage, instead of allowing either an array or one item
Removed collection name based API from InMemDb and related classes, API now requires collection instance rather than collection name for DB CRUD functions. Also modified most of the InMemDb function names, removed '_' prefix, added 'noModify' parameters
0.2.1 - 2015-11-17
- Split ModelDefinitions into two interfaces, new 'ModelDefinitionsTemplate extends ModelDefinitions'
- Removed ModelDefinitions 'templateStartMark', 'templateEndMark', and 'templateInputLinks' properties
- These properties become 'templateDelimiterStart', 'templateDelimiterEnd', and 'templateContextPropLinks' in ModelDefinitionsTemplate
- Updated ts-mortar and ts-code-generator dependency versions
0.2.0 - 2015-11-11
- Renamed InMemDbImpl -> LokiDbImpl
- Moved DataCollection and LokiDbImpl to db-collections/ directory
- LokiDbImpl and PrimarykeyMaintainer constructors requires a name parameter for the internal metadata collection
- ModelDefinitions 'models' string map type changed from ServiceTypesDefinition -> WebServiceModelDef
0.1.0 - 2015-11-10
Initial commit of code for accessing Lokijs collections in a strongly typed way in TypeScript
- DataCollection.ts - with add, update, remove, and find functions including variations such as addOrUpdateWhere() which performs a query and updates existing items or adds a new item depending on if there are any existing items
- InMemDbImpl.ts - a wrapper around a lokijs database instance which exposes operations such as add, update, find, findOne, clear, and remove. This acts as a layer of separation between a DataCollection (high level queries, add, and remove) and database specific details such as transactions, error handling, event logging, etc which are handled by this class
- change-trackers/ChangeTrackersImpl.ts - for constructing objects which count 'added', 'modified', and 'removed' changes
- change-trackers/collection-changes.d.ts - interfaces for change trackers
- in-mem-collections.d.ts - interfaces for DataCollection, in-mem database, database serialization and deserialization APIs, and colllection metadata models
- key-constraints/CollectionMetaData.ts - simple collection metadata, currently including collection name, primary key column names, and auto-generated column names with last auto-generated key
- key-constraints/ModelKeysImpl.ts - functions for tracking and generating auto-generated keys
- key-constraints/PrimaryKeyMaintainer.ts - manages loading, tracking, and generating unique keys