Adjusted the typing of the ModelRepository and related interfaces to better distinguish between parent & child models
This commit is contained in:
parent
8f5ff436a2
commit
54b876fc75
|
@ -4636,9 +4636,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"typescript": {
|
"typescript": {
|
||||||
"version": "3.8.3",
|
"version": "3.9.7",
|
||||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz",
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz",
|
||||||
"integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==",
|
"integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"union-value": {
|
"union-value": {
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
"jest-mock-extended": "^1.0.10",
|
"jest-mock-extended": "^1.0.10",
|
||||||
"moxios": "0.4.0",
|
"moxios": "0.4.0",
|
||||||
"ts-jest": "25.5.0",
|
"ts-jest": "25.5.0",
|
||||||
"typescript": "3.8.3"
|
"typescript": "3.9.7"
|
||||||
},
|
},
|
||||||
"publishConfig": {
|
"publishConfig": {
|
||||||
"access": "public"
|
"access": "public"
|
||||||
|
|
|
@ -212,7 +212,7 @@ describe( 'ModelRepository', () => {
|
||||||
|
|
||||||
it( 'should delete', async () => {
|
it( 'should delete', async () => {
|
||||||
const callback = jest.fn().mockResolvedValue( true );
|
const callback = jest.fn().mockResolvedValue( true );
|
||||||
const repository: DeletesModels = new ModelRepository< DummyModelParams >(
|
const repository: DeletesModels< DummyModelParams > = new ModelRepository< DummyModelParams >(
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
|
@ -241,7 +241,7 @@ describe( 'ModelRepository', () => {
|
||||||
} );
|
} );
|
||||||
|
|
||||||
it( 'should throw error on delete without callback', () => {
|
it( 'should throw error on delete without callback', () => {
|
||||||
const repository: DeletesModels = new ModelRepository< DummyModelParams >(
|
const repository: DeletesModels< DummyModelParams > = new ModelRepository< DummyModelParams >(
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
|
|
|
@ -158,7 +158,7 @@ export type DeleteChildFn< T extends ModelRepositoryParams > = ( parent: ParentI
|
||||||
* @template L
|
* @template L
|
||||||
*/
|
*/
|
||||||
export interface ListsModels< T extends ModelRepositoryParams > {
|
export interface ListsModels< T extends ModelRepositoryParams > {
|
||||||
list( params?: ListParams< T > ): Promise< ModelClass< T >[] >;
|
list( params?: HasParent< T, never, ListParams< T > > ): Promise< ModelClass< T >[] >;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -171,7 +171,10 @@ export interface ListsModels< T extends ModelRepositoryParams > {
|
||||||
* @template L
|
* @template L
|
||||||
*/
|
*/
|
||||||
export interface ListsChildModels< T extends ModelRepositoryParams > {
|
export interface ListsChildModels< T extends ModelRepositoryParams > {
|
||||||
list( parent: ParentID< T >, params?: ListParams< T > ): Promise< ModelClass< T >[] >;
|
list(
|
||||||
|
parent: HasParent< T, ParentID< T >, never >,
|
||||||
|
params?: HasParent< T, ListParams< T >, never >,
|
||||||
|
): Promise< ModelClass< T >[] >;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -193,7 +196,7 @@ export interface CreatesModels< T extends ModelRepositoryParams > {
|
||||||
* @template {Model} T
|
* @template {Model} T
|
||||||
*/
|
*/
|
||||||
export interface ReadsModels< T extends ModelRepositoryParams > {
|
export interface ReadsModels< T extends ModelRepositoryParams > {
|
||||||
read( id: ModelID ): Promise< ModelClass< T > >;
|
read( id: HasParent< T, never, ModelID > ): Promise< ModelClass< T > >;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -205,7 +208,10 @@ export interface ReadsModels< T extends ModelRepositoryParams > {
|
||||||
* @template {ModelParentID} P
|
* @template {ModelParentID} P
|
||||||
*/
|
*/
|
||||||
export interface ReadsChildModels< T extends ModelRepositoryParams > {
|
export interface ReadsChildModels< T extends ModelRepositoryParams > {
|
||||||
read( parent: ParentID< T >, childID: ModelID ): Promise< ModelClass< T > >;
|
read(
|
||||||
|
parent: HasParent< T, ParentID< T >, never >,
|
||||||
|
childID: HasParent< T, ModelID, never >,
|
||||||
|
): Promise< ModelClass< T > >;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -216,7 +222,10 @@ export interface ReadsChildModels< T extends ModelRepositoryParams > {
|
||||||
* @template {Model} T
|
* @template {Model} T
|
||||||
*/
|
*/
|
||||||
export interface UpdatesModels< T extends ModelRepositoryParams > {
|
export interface UpdatesModels< T extends ModelRepositoryParams > {
|
||||||
update( id: ModelID, properties: UpdateParams< T > ): Promise< ModelClass< T > >;
|
update(
|
||||||
|
id: HasParent< T, never, ModelID >,
|
||||||
|
properties: HasParent< T, never, UpdateParams< T > >,
|
||||||
|
): Promise< ModelClass< T > >;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -228,7 +237,11 @@ export interface UpdatesModels< T extends ModelRepositoryParams > {
|
||||||
* @template {ModelParentID} P
|
* @template {ModelParentID} P
|
||||||
*/
|
*/
|
||||||
export interface UpdatesChildModels< T extends ModelRepositoryParams > {
|
export interface UpdatesChildModels< T extends ModelRepositoryParams > {
|
||||||
update( parent: ParentID< T >, childID: ModelID, properties: UpdateParams< T > ): Promise< ModelClass< T > >;
|
update(
|
||||||
|
parent: HasParent< T, ParentID< T >, never >,
|
||||||
|
childID: HasParent< T, ModelID, never >,
|
||||||
|
properties: HasParent< T, UpdateParams< T >, never >,
|
||||||
|
): Promise< ModelClass< T > >;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -237,8 +250,8 @@ export interface UpdatesChildModels< T extends ModelRepositoryParams > {
|
||||||
* @typedef DeletesModels
|
* @typedef DeletesModels
|
||||||
* @property {DeleteFn} delete Deletes a model using the repository.
|
* @property {DeleteFn} delete Deletes a model using the repository.
|
||||||
*/
|
*/
|
||||||
export interface DeletesModels {
|
export interface DeletesModels< T extends ModelRepositoryParams > {
|
||||||
delete( id: ModelID ): Promise< boolean >;
|
delete( id: HasParent< T, never, ModelID > ): Promise< boolean >;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -249,7 +262,10 @@ export interface DeletesModels {
|
||||||
* @template {ModelParentID} P
|
* @template {ModelParentID} P
|
||||||
*/
|
*/
|
||||||
export interface DeletesChildModels< T extends ModelRepositoryParams > {
|
export interface DeletesChildModels< T extends ModelRepositoryParams > {
|
||||||
delete( parent: ParentID< T >, childID: ModelID ): Promise< boolean >;
|
delete(
|
||||||
|
parent: HasParent< T, ParentID< T >, never >,
|
||||||
|
childID: HasParent< T, ModelID, never >,
|
||||||
|
): Promise< boolean >;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -268,7 +284,7 @@ export class ModelRepository< T extends ModelRepositoryParams > implements
|
||||||
ReadsChildModels< T >,
|
ReadsChildModels< T >,
|
||||||
UpdatesModels< T >,
|
UpdatesModels< T >,
|
||||||
UpdatesChildModels< T >,
|
UpdatesChildModels< T >,
|
||||||
DeletesModels,
|
DeletesModels< T >,
|
||||||
DeletesChildModels< T > {
|
DeletesChildModels< T > {
|
||||||
/**
|
/**
|
||||||
* The hook used to list models.
|
* The hook used to list models.
|
||||||
|
@ -341,8 +357,8 @@ export class ModelRepository< T extends ModelRepositoryParams > implements
|
||||||
* @return {Promise.<Array.<T>>} Resolves to the listed models.
|
* @return {Promise.<Array.<T>>} Resolves to the listed models.
|
||||||
*/
|
*/
|
||||||
public list(
|
public list(
|
||||||
paramsOrParent?: ListParams< T > | ParentID< T >,
|
paramsOrParent?: HasParent< T, ParentID< T >, ListParams< T > >,
|
||||||
params?: ListParams< T >,
|
params?: HasParent< T, ListParams< T >, never >,
|
||||||
): Promise< ModelClass< T >[] > {
|
): Promise< ModelClass< T >[] > {
|
||||||
if ( ! this.listHook ) {
|
if ( ! this.listHook ) {
|
||||||
throw new Error( 'The \'list\' operation is not supported on this model.' );
|
throw new Error( 'The \'list\' operation is not supported on this model.' );
|
||||||
|
@ -382,8 +398,8 @@ export class ModelRepository< T extends ModelRepositoryParams > implements
|
||||||
* @return {Promise.<T>} Resolves to the loaded model.
|
* @return {Promise.<T>} Resolves to the loaded model.
|
||||||
*/
|
*/
|
||||||
public read(
|
public read(
|
||||||
idOrParent: ModelID | ParentID< T >,
|
idOrParent: HasParent< T, ParentID< T >, ModelID >,
|
||||||
childID?: ModelID,
|
childID?: HasParent< T, ModelID, never >,
|
||||||
): Promise< ModelClass< T > > {
|
): Promise< ModelClass< T > > {
|
||||||
if ( ! this.readHook ) {
|
if ( ! this.readHook ) {
|
||||||
throw new Error( 'The \'read\' operation is not supported on this model.' );
|
throw new Error( 'The \'read\' operation is not supported on this model.' );
|
||||||
|
@ -410,9 +426,9 @@ export class ModelRepository< T extends ModelRepositoryParams > implements
|
||||||
* @return {Promise.<T>} Resolves to the updated model.
|
* @return {Promise.<T>} Resolves to the updated model.
|
||||||
*/
|
*/
|
||||||
public update(
|
public update(
|
||||||
idOrParent: ModelID | ParentID< T >,
|
idOrParent: HasParent< T, ParentID< T >, ModelID >,
|
||||||
propertiesOrChildID: UpdateParams< T > | ModelID,
|
propertiesOrChildID: HasParent< T, ModelID, UpdateParams< T > >,
|
||||||
properties?: UpdateParams< T >,
|
properties?: HasParent< T, UpdateParams< T >, never >,
|
||||||
): Promise< ModelClass< T > > {
|
): Promise< ModelClass< T > > {
|
||||||
if ( ! this.updateHook ) {
|
if ( ! this.updateHook ) {
|
||||||
throw new Error( 'The \'update\' operation is not supported on this model.' );
|
throw new Error( 'The \'update\' operation is not supported on this model.' );
|
||||||
|
@ -440,8 +456,8 @@ export class ModelRepository< T extends ModelRepositoryParams > implements
|
||||||
* @return {Promise.<T>} Resolves to the loaded model.
|
* @return {Promise.<T>} Resolves to the loaded model.
|
||||||
*/
|
*/
|
||||||
public delete(
|
public delete(
|
||||||
idOrParent: ModelID | ParentID< T >,
|
idOrParent: HasParent< T, ParentID< T >, ModelID >,
|
||||||
childID?: ModelID,
|
childID?: HasParent< T, ModelID, never >,
|
||||||
): Promise< boolean > {
|
): Promise< boolean > {
|
||||||
if ( ! this.deleteHook ) {
|
if ( ! this.deleteHook ) {
|
||||||
throw new Error( 'The \'delete\' operation is not supported on this model.' );
|
throw new Error( 'The \'delete\' operation is not supported on this model.' );
|
||||||
|
|
Loading…
Reference in New Issue