Compare commits
No commits in common. "v1.2.0" and "v1.1.3" have entirely different histories.
@ -2,13 +2,6 @@
|
|||||||
|
|
||||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||||
|
|
||||||
## [1.2.0](https://git.archive.systems/Dezzpil/ivanovna.orm/compare/v1.1.3...v1.2.0) (2021-10-04)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* добавил Entity Manager ([d0942e5](https://git.archive.systems/Dezzpil/ivanovna.orm/commit/d0942e59d97d861aa3368ee96a3a15f0418263e4))
|
|
||||||
|
|
||||||
### [1.1.3](https://git.archive.systems/Dezzpil/ivanovna.orm/compare/v1.1.2...v1.1.3) (2021-10-04)
|
### [1.1.3](https://git.archive.systems/Dezzpil/ivanovna.orm/compare/v1.1.2...v1.1.3) (2021-10-04)
|
||||||
|
|
||||||
|
|
||||||
|
14
orm.d.ts
vendored
14
orm.d.ts
vendored
@ -26,20 +26,6 @@ export declare abstract class Entity<T extends Data> {
|
|||||||
/** @public */
|
/** @public */
|
||||||
export declare type EntityConstructor<T extends Data> = new (data?: T) => Entity<T>;
|
export declare type EntityConstructor<T extends Data> = new (data?: T) => Entity<T>;
|
||||||
|
|
||||||
/** @public */
|
|
||||||
export declare class EntityManager {
|
|
||||||
private readonly _storage;
|
|
||||||
private _saveMap;
|
|
||||||
private _removeMap;
|
|
||||||
constructor(storage: Storage_2);
|
|
||||||
persist(entity: Entity<any>): this;
|
|
||||||
persistMany(entities: Entity<any>[]): this;
|
|
||||||
remove(entity: Entity<any>): this;
|
|
||||||
forget(): this;
|
|
||||||
flush(): Promise<this>;
|
|
||||||
refresh(entity: Entity<any>): Promise<Entity<any>>;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @public */
|
/** @public */
|
||||||
export declare class ErrEntityHasNoUniqKeyValue extends Error {
|
export declare class ErrEntityHasNoUniqKeyValue extends Error {
|
||||||
}
|
}
|
||||||
|
4
package-lock.json
generated
4
package-lock.json
generated
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "ivna-orm",
|
"name": "ivna-orm",
|
||||||
"version": "1.2.0",
|
"version": "1.1.3",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "ivna-orm",
|
"name": "ivna-orm",
|
||||||
"version": "1.2.0",
|
"version": "1.1.3",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@jest/test-sequencer": "^27.2.3",
|
"@jest/test-sequencer": "^27.2.3",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "ivna-orm",
|
"name": "ivna-orm",
|
||||||
"version": "1.2.0",
|
"version": "1.1.3",
|
||||||
"description": "Mini ORM for convenience",
|
"description": "Mini ORM for convenience",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"files": [
|
"files": [
|
||||||
|
@ -1,64 +0,0 @@
|
|||||||
import { Entity } from '../entity'
|
|
||||||
import { Storage } from '../storage'
|
|
||||||
|
|
||||||
/** @public */
|
|
||||||
export class EntityManager {
|
|
||||||
private readonly _storage: Storage
|
|
||||||
private _saveMap: Map<string, Entity<any>>
|
|
||||||
private _removeMap: Map<string, Entity<any>>
|
|
||||||
|
|
||||||
constructor(storage: Storage) {
|
|
||||||
this._storage = storage
|
|
||||||
this._saveMap = new Map()
|
|
||||||
this._removeMap = new Map()
|
|
||||||
}
|
|
||||||
|
|
||||||
persist(entity: Entity<any>): this {
|
|
||||||
const key = [entity.constructor.name, entity.getUniqKey()].join('&')
|
|
||||||
this._saveMap.set(key, entity)
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
|
|
||||||
persistMany(entities: Entity<any>[]): this {
|
|
||||||
for (let entity of entities) {
|
|
||||||
this.persist(entity)
|
|
||||||
}
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
|
|
||||||
remove(entity: Entity<any>): this {
|
|
||||||
const key = [entity.constructor.name, entity.getUniqKey()].join('&')
|
|
||||||
this._removeMap.set(key, entity)
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
|
|
||||||
forget(): this {
|
|
||||||
this._saveMap = new Map()
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
|
|
||||||
async flush() {
|
|
||||||
if (!this._saveMap.size && !this._removeMap.size) return this
|
|
||||||
|
|
||||||
const session = this._storage.createSession()
|
|
||||||
await session.start()
|
|
||||||
await session.commit(async () => {
|
|
||||||
for (let en of this._saveMap.values()) {
|
|
||||||
await en._getRepo(this._storage).save(en)
|
|
||||||
}
|
|
||||||
this._saveMap = new Map()
|
|
||||||
|
|
||||||
for (let en of this._removeMap.values()) {
|
|
||||||
await en._getRepo(this._storage).remove(en)
|
|
||||||
}
|
|
||||||
this._removeMap = new Map()
|
|
||||||
})
|
|
||||||
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
|
|
||||||
async refresh(entity: Entity<any>) {
|
|
||||||
const repo = entity._getRepo(this._storage)
|
|
||||||
return repo.findById(entity.getUniqKey())
|
|
||||||
}
|
|
||||||
}
|
|
@ -6,4 +6,3 @@ export { Data, ValuesObject } from './app/data'
|
|||||||
export { Entity, EntityConstructor, ErrEntityHasNoUniqKeyValue } from './app/entity'
|
export { Entity, EntityConstructor, ErrEntityHasNoUniqKeyValue } from './app/entity'
|
||||||
export { Repo, ErrFoundNotUniqEntity, ErrEntityNotFound } from './app/repo'
|
export { Repo, ErrFoundNotUniqEntity, ErrEntityNotFound } from './app/repo'
|
||||||
export { Storage, StorageCursor, ErrStorage, ErrNoSession, StorageSession } from './app/storage'
|
export { Storage, StorageCursor, ErrStorage, ErrNoSession, StorageSession } from './app/storage'
|
||||||
export { EntityManager } from './app/entity/manager'
|
|
||||||
|
Loading…
Reference in New Issue
Block a user