Browse Source

chore: adds *.d.ts

e22m4u 2 years ago
parent
commit
730af0ba6c
68 changed files with 589 additions and 137 deletions
  1. 1 0
      .eslintignore
  2. 2 2
      package.json
  3. 140 0
      src/adapter/adapter.d.ts
  4. 18 18
      src/adapter/adapter.js
  5. 9 9
      src/adapter/builtin/memory-adapter.js
  6. 1 1
      src/adapter/builtin/memory-adapter.spec.js
  7. 1 0
      src/adapter/index.d.ts
  8. 2 1
      src/definition/datasource/datasource-definition-validator.js
  9. 1 1
      src/definition/datasource/datasource-definition-validator.spec.js
  10. 7 0
      src/definition/datasource/datasource-definition.d.ts
  11. 1 0
      src/definition/datasource/index.d.ts
  12. 3 3
      src/definition/definition-registry.js
  13. 2 0
      src/definition/index.d.ts
  14. 3 0
      src/definition/model/index.d.ts
  15. 14 12
      src/definition/model/model-data-validator.js
  16. 1 1
      src/definition/model/model-data-validator.spec.js
  17. 13 13
      src/definition/model/model-definition-utils.js
  18. 1 1
      src/definition/model/model-definition-utils.spec.js
  19. 1 1
      src/definition/model/model-definition-validator.spec.js
  20. 28 0
      src/definition/model/model-definition.d.ts
  21. 11 0
      src/definition/model/properties/data-type.d.ts
  22. 0 9
      src/definition/model/properties/data-type.js
  23. 1 1
      src/definition/model/properties/default-values-definition-validator.spec.js
  24. 2 0
      src/definition/model/properties/index.d.ts
  25. 1 1
      src/definition/model/properties/primary-keys-definition-validator.spec.js
  26. 1 1
      src/definition/model/properties/properties-definition-validator.spec.js
  27. 21 0
      src/definition/model/properties/property-definition.d.ts
  28. 2 0
      src/definition/model/relations/index.d.ts
  29. 12 0
      src/definition/model/relations/relation-definition.d.ts
  30. 9 0
      src/definition/model/relations/relation-type.d.ts
  31. 0 7
      src/definition/model/relations/relation-type.js
  32. 2 2
      src/definition/model/relations/relations-definition-validator.js
  33. 1 1
      src/definition/model/relations/relations-definition-validator.spec.js
  34. 1 1
      src/errors/invalid-argument-error.js
  35. 1 1
      src/errors/invalid-argument-error.spec.js
  36. 1 1
      src/errors/invalid-operator-value-error.js
  37. 1 1
      src/errors/not-implemented-error.js
  38. 1 1
      src/errors/not-implemented-error.spec.js
  39. 1 1
      src/filter/fields-clause-tool.spec.js
  40. 24 0
      src/filter/filter.d.ts
  41. 2 2
      src/filter/include-clause-tool.js
  42. 1 1
      src/filter/include-clause-tool.spec.js
  43. 1 0
      src/filter/index.d.ts
  44. 2 2
      src/filter/operator-clause-tool.js
  45. 1 1
      src/filter/operator-clause-tool.spec.js
  46. 2 2
      src/filter/order-clause-tool.js
  47. 1 1
      src/filter/order-clause-tool.spec.js
  48. 1 1
      src/filter/slice-clause-tool.spec.js
  49. 1 1
      src/filter/where-clause-tool.spec.js
  50. 6 0
      src/index.d.ts
  51. 4 4
      src/relations/belongs-to-resolver.js
  52. 1 1
      src/relations/belongs-to-resolver.spec.js
  53. 6 6
      src/relations/has-many-resolver.js
  54. 1 1
      src/relations/has-many-resolver.spec.js
  55. 6 6
      src/relations/has-one-resolver.js
  56. 1 1
      src/relations/has-one-resolver.spec.js
  57. 2 2
      src/relations/references-many-resolver.js
  58. 1 1
      src/relations/references-many-resolver.spec.js
  59. 1 0
      src/repository/index.d.ts
  60. 141 0
      src/repository/repository.d.ts
  61. 8 3
      src/repository/repository.js
  62. 29 0
      src/schema.d.ts
  63. 3 3
      src/schema.js
  64. 18 0
      src/types.d.ts
  65. 2 2
      src/utils/capitalize.js
  66. 1 1
      src/utils/exclude-object-keys.spec.js
  67. 2 2
      src/utils/select-object-keys.js
  68. 2 2
      src/utils/singularize.js

+ 1 - 0
.eslintignore

@@ -0,0 +1 @@
+*.d.ts

+ 2 - 2
package.json

@@ -33,8 +33,8 @@
   "license": "MIT",
   "homepage": "https://github.com/e22m4u/node-repository",
   "dependencies": {
-    "@e22m4u/format": "0.0.3",
-    "@e22m4u/service": "0.0.3"
+    "@e22m4u/util-format": "0.0.6",
+    "@e22m4u/service": "0.0.5"
   },
   "devDependencies": {
     "@commitlint/cli": "^17.7.1",

+ 140 - 0
src/adapter/adapter.d.ts

@@ -0,0 +1,140 @@
+import {Filter} from '../filter';
+import {AnyObject} from '../types';
+import {ModelData} from '../types';
+import {Identifier} from '../types';
+import {ItemFilter} from '../filter';
+import {WhereClause} from '../filter';
+import {Service} from '@e22m4u/service';
+import {ServiceContainer} from '@e22m4u/service';
+
+/**
+ * Adapter.
+ */
+export declare class Adapter extends Service {
+  /**
+   * Settings.
+   */
+  get settings(): AnyObject | undefined;
+
+  /**
+   * Constructor.
+   *
+   * @param container
+   * @param settings
+   */
+  constructor(
+    container?: ServiceContainer,
+    settings?: AnyObject,
+  );
+
+  /**
+   * Create.
+   *
+   * @param modelName
+   * @param modelData
+   * @param filter
+   */
+  create(
+    modelName: string,
+    modelData: ModelData,
+    filter?: ItemFilter,
+  ): Promise<ModelData>;
+
+  /**
+   * Replace by id.
+   *
+   * @param modelName
+   * @param id
+   * @param modelData
+   * @param filter
+   */
+  replaceById(
+    modelName: string,
+    id: Identifier,
+    modelData: ModelData,
+    filter?: ItemFilter,
+  ): Promise<ModelData>;
+
+  /**
+   * Patch by id.
+   *
+   * @param modelName
+   * @param id
+   * @param modelData
+   * @param filter
+   */
+  patchById(
+    modelName: string,
+    id: Identifier,
+    modelData: ModelData,
+    filter?: ItemFilter,
+  ): Promise<ModelData>;
+
+  /**
+   * Find.
+   *
+   * @param modelName
+   * @param filter
+   */
+  find(
+    modelName: string,
+    filter?: Filter,
+  ): Promise<ModelData[]>;
+
+  /**
+   * Find by id.
+   *
+   * @param modelName
+   * @param id
+   * @param filter
+   */
+  findById(
+    modelName: string,
+    id: Identifier,
+    filter?: Filter,
+  ): Promise<ModelData>;
+
+  /**
+   * Delete.
+   *
+   * @param modelName
+   * @param where
+   */
+  delete(
+    modelName: string,
+    where?: WhereClause,
+  ): Promise<number>;
+
+  /**
+   * Delete by id.
+   *
+   * @param modelName
+   * @param id
+   */
+  deleteById(
+    modelName: string,
+    id: Identifier,
+  ): Promise<boolean>;
+
+  /**
+   * Exists.
+   *
+   * @param modelName
+   * @param id
+   */
+  exists(
+    modelName: string,
+    id: Identifier,
+  ): Promise<boolean>;
+
+  /**
+   * Count.
+   *
+   * @param modelName
+   * @param where
+   */
+  count(
+    modelName: string,
+    where?: WhereClause,
+  ): Promise<number>;
+}

+ 18 - 18
src/adapter/adapter.js

@@ -19,7 +19,7 @@ export class Adapter extends Service {
   /**
    * Settings.
    *
-   * @return {*}
+   * @return {object|undefined}
    */
   get settings() {
     return this._settings;
@@ -28,8 +28,8 @@ export class Adapter extends Service {
   /**
    * Constructor.
    *
-   * @param container
-   * @param settings
+   * @param {object|undefined} container
+   * @param {object|undefined} settings
    */
   constructor(container = undefined, settings = undefined) {
     super(container);
@@ -48,8 +48,8 @@ export class Adapter extends Service {
    * Create.
    *
    * @param {string} modelName
-   * @param {Record<string, unknown>} modelData
-   * @param {Record<string, unknown>|undefined} filter
+   * @param {object} modelData
+   * @param {object|undefined} filter
    * @return {Promise<object>}
    */
   create(modelName, modelData, filter = undefined) {
@@ -63,9 +63,9 @@ export class Adapter extends Service {
    * Replace by id.
    *
    * @param {string} modelName
-   * @param {string|number} id
-   * @param {Record<string, unknown>} modelData
-   * @param {Record<string, unknown>|undefined} filter
+   * @param {number|string} id
+   * @param {object} modelData
+   * @param {object|undefined} filter
    * @return {Promise<object>}
    */
   replaceById(modelName, id, modelData, filter = undefined) {
@@ -79,9 +79,9 @@ export class Adapter extends Service {
    * Patch by id.
    *
    * @param {string} modelName
-   * @param {string|number} id
-   * @param {Record<string, unknown>} modelData
-   * @param {Record<string, unknown>|undefined} filter
+   * @param {number|string} id
+   * @param {object} modelData
+   * @param {object|undefined} filter
    * @return {Promise<object>}
    */
   patchById(modelName, id, modelData, filter = undefined) {
@@ -95,7 +95,7 @@ export class Adapter extends Service {
    * Find.
    *
    * @param {string} modelName
-   * @param {Record<string, unknown>|undefined} filter
+   * @param {object|undefined} filter
    * @return {Promise<object[]>}
    */
   find(modelName, filter = undefined) {
@@ -109,8 +109,8 @@ export class Adapter extends Service {
    * Find by id.
    *
    * @param {string} modelName
-   * @param {string|number} id
-   * @param {Record<string, unknown>|undefined} filter
+   * @param {number|string} id
+   * @param {object|undefined} filter
    * @return {Promise<object>}
    */
   findById(modelName, id, filter = undefined) {
@@ -124,7 +124,7 @@ export class Adapter extends Service {
    * Delete.
    *
    * @param {string} modelName
-   * @param {Record<string, unknown>|undefined} where
+   * @param {object|undefined} where
    * @return {Promise<number>}
    */
   delete(modelName, where = undefined) {
@@ -138,7 +138,7 @@ export class Adapter extends Service {
    * Delete by id.
    *
    * @param {string} modelName
-   * @param {string|number} id
+   * @param {number|string} id
    * @return {Promise<boolean>}
    */
   deleteById(modelName, id) {
@@ -152,7 +152,7 @@ export class Adapter extends Service {
    * Exists.
    *
    * @param {string} modelName
-   * @param {string|number} id
+   * @param {number|string} id
    * @return {Promise<boolean>}
    */
   exists(modelName, id) {
@@ -166,7 +166,7 @@ export class Adapter extends Service {
    * Count.
    *
    * @param {string} modelName
-   * @param {Record<string, unknown>|undefined} where
+   * @param {WhereClause|undefined} where
    * @return {Promise<number>}
    */
   count(modelName, where = undefined) {

+ 9 - 9
src/adapter/builtin/memory-adapter.js

@@ -30,7 +30,7 @@ export class MemoryAdapter extends Adapter {
    * Get table or create.
    *
    * @param {string} modelName
-   * @return {Map<number, Record<string, any>>}
+   * @return {Map<number, object>}
    */
   _getTableOrCreate(modelName) {
     const tableName =
@@ -81,8 +81,8 @@ export class MemoryAdapter extends Adapter {
    * Create
    *
    * @param {string} modelName
-   * @param {Record<string, unknown>} modelData
-   * @param {Record<string, unknown>|undefined} filter
+   * @param {object} modelData
+   * @param {object|undefined} filter
    * @return {Promise<object>}
    */
   // eslint-disable-next-line no-unused-vars
@@ -121,8 +121,8 @@ export class MemoryAdapter extends Adapter {
    *
    * @param {string} modelName
    * @param {string|number} id
-   * @param {Record<string, unknown>} modelData
-   * @param {Record<string, unknown>|undefined} filter
+   * @param {object} modelData
+   * @param {object|undefined} filter
    * @return {Promise<object>}
    */
   // eslint-disable-next-line no-unused-vars
@@ -159,8 +159,8 @@ export class MemoryAdapter extends Adapter {
    *
    * @param {string} modelName
    * @param {string|number} id
-   * @param {Record<string, unknown>} modelData
-   * @param {Record<string, unknown>|undefined} filter
+   * @param {object} modelData
+   * @param {object|undefined} filter
    * @return {Promise<object>}
    */
   // eslint-disable-next-line no-unused-vars
@@ -236,7 +236,7 @@ export class MemoryAdapter extends Adapter {
    *
    * @param {string} modelName
    * @param {string|number} id
-   * @param {Record<string, unknown>|undefined} filter
+   * @param {object|undefined} filter
    * @return {Promise<object>}
    */
   // eslint-disable-next-line no-unused-vars
@@ -322,7 +322,7 @@ export class MemoryAdapter extends Adapter {
    * Count.
    *
    * @param {string} modelName
-   * @param {Record<string, unknown>|undefined} where
+   * @param {object|undefined} where
    * @return {Promise<number>}
    */
   async count(modelName, where = undefined) {

+ 1 - 1
src/adapter/builtin/memory-adapter.spec.js

@@ -1,6 +1,6 @@
 import {expect} from 'chai';
-import {format} from '@e22m4u/format';
 import {Schema} from '../../schema.js';
+import {format} from '@e22m4u/util-format';
 import {MemoryAdapter} from './memory-adapter.js';
 import {DataType} from '../../definition/index.js';
 import {DEFAULT_PRIMARY_KEY_PROPERTY_NAME as DEF_PK} from '../../definition/index.js';

+ 1 - 0
src/adapter/index.d.ts

@@ -0,0 +1 @@
+export * from './adapter';

+ 2 - 1
src/definition/datasource/datasource-definition-validator.js

@@ -8,7 +8,8 @@ export class DatasourceDefinitionValidator extends Service {
   /**
    * Validate.
    *
-   * @param datasourceDef
+   * @param {object} datasourceDef
+   * @return {void}
    */
   validate(datasourceDef) {
     if (!datasourceDef || typeof datasourceDef !== 'object')

+ 1 - 1
src/definition/datasource/datasource-definition-validator.spec.js

@@ -1,5 +1,5 @@
 import {expect} from 'chai';
-import {format} from '@e22m4u/format';
+import {format} from '@e22m4u/util-format';
 import {DatasourceDefinitionValidator} from './datasource-definition-validator.js';
 
 const S = new DatasourceDefinitionValidator();

+ 7 - 0
src/definition/datasource/datasource-definition.d.ts

@@ -0,0 +1,7 @@
+/**
+ * Datasource definition.
+ */
+export declare type DatasourceDefinition = {
+  name: string;
+  adapter: string;
+}

+ 1 - 0
src/definition/datasource/index.d.ts

@@ -0,0 +1 @@
+export * from './datasource-definition';

+ 3 - 3
src/definition/definition-registry.js

@@ -41,7 +41,7 @@ export class DefinitionRegistry extends Service {
    * Has datasource.
    *
    * @param name
-   * @return {*}
+   * @return {boolean}
    */
   hasDatasource(name) {
     return Boolean(this._datasources[name]);
@@ -77,7 +77,7 @@ export class DefinitionRegistry extends Service {
    * Has model.
    *
    * @param name
-   * @return {*}
+   * @return {boolean}
    */
   hasModel(name) {
     return Boolean(this._models[name]);
@@ -87,7 +87,7 @@ export class DefinitionRegistry extends Service {
    * Get model.
    *
    * @param name
-   * @return {Object}
+   * @return {object}
    */
   getModel(name) {
     const modelDef = this._models[name];

+ 2 - 0
src/definition/index.d.ts

@@ -0,0 +1,2 @@
+export * from './model';
+export * from './datasource';

+ 3 - 0
src/definition/model/index.d.ts

@@ -0,0 +1,3 @@
+export * from './relations';
+export * from './properties';
+export * from './model-definition';

+ 14 - 12
src/definition/model/model-data-validator.js

@@ -12,9 +12,9 @@ export class ModelDataValidator extends Service {
   /**
    * Validate.
    *
-   * @param modelName
-   * @param modelData
-   * @param isPartial
+   * @param {string} modelName
+   * @param {object} modelData
+   * @param {boolean} isPartial
    */
   validate(modelName, modelData, isPartial = false) {
     if (!isPureObject(modelData))
@@ -43,10 +43,11 @@ export class ModelDataValidator extends Service {
   /**
    * Validate property value.
    *
-   * @param modelName
-   * @param propName
-   * @param propDef
-   * @param propValue
+   * @param {string} modelName
+   * @param {string} propName
+   * @param {string|object} propDef
+   * @param {any} propValue
+   * @return {void}
    */
   validatePropertyValue(modelName, propName, propDef, propValue) {
     // undefined and null
@@ -68,11 +69,12 @@ export class ModelDataValidator extends Service {
   /**
    * Validate value type.
    *
-   * @param modelName
-   * @param propName
-   * @param propDef
-   * @param propValue
-   * @param isArrayValue
+   * @param {string} modelName
+   * @param {string} propName
+   * @param {string|object} propDef
+   * @param {any} propValue
+   * @param {boolean} isArrayValue
+   * @return {void}
    */
   _validatePropertyValueType(
     modelName,

+ 1 - 1
src/definition/model/model-data-validator.spec.js

@@ -1,6 +1,6 @@
 import {expect} from 'chai';
-import {format} from '@e22m4u/format';
 import {Schema} from '../../schema.js';
+import {format} from '@e22m4u/util-format';
 import {DataType} from './properties/index.js';
 import {ModelDataValidator} from './model-data-validator.js';
 

+ 13 - 13
src/definition/model/model-definition-utils.js

@@ -220,8 +220,8 @@ export class ModelDefinitionUtils extends Service {
   /**
    * Get own properties definition of primary keys.
    *
-   * @param modelName
-   * @return {Record<string, {}>}
+   * @param {string} modelName
+   * @return {object}
    */
   getOwnPropertiesDefinitionOfPrimaryKeys(modelName) {
     const modelDef = this.getService(DefinitionRegistry).getModel(modelName);
@@ -236,8 +236,8 @@ export class ModelDefinitionUtils extends Service {
   /**
    * Get own properties definition without primary keys.
    *
-   * @param modelName
-   * @return {Record<string, {}>}
+   * @param {string} modelName
+   * @return {object}
    */
   getOwnPropertiesDefinitionWithoutPrimaryKeys(modelName) {
     const modelDef = this.getService(DefinitionRegistry).getModel(modelName);
@@ -252,8 +252,8 @@ export class ModelDefinitionUtils extends Service {
   /**
    * Get properties definition in base model hierarchy.
    *
-   * @param modelName
-   * @return {Record<string, {}>}
+   * @param {string} modelName
+   * @return {object}
    */
   getPropertiesDefinitionInBaseModelHierarchy(modelName) {
     let result = {};
@@ -283,8 +283,8 @@ export class ModelDefinitionUtils extends Service {
   /**
    * Get own relations definition.
    *
-   * @param modelName
-   * @return {Record<string, {}>}
+   * @param {string} modelName
+   * @return {object}
    */
   getOwnRelationsDefinition(modelName) {
     const modelDef = this.getService(DefinitionRegistry).getModel(modelName);
@@ -294,8 +294,8 @@ export class ModelDefinitionUtils extends Service {
   /**
    * Get relations definition in base model hierarchy.
    *
-   * @param modelName
-   * @return {Record<string, {}>}
+   * @param {string} modelName
+   * @return {object}
    */
   getRelationsDefinitionInBaseModelHierarchy(modelName) {
     let result = {};
@@ -318,9 +318,9 @@ export class ModelDefinitionUtils extends Service {
   /**
    * Get relation definition by name.
    *
-   * @param modelName
-   * @param relationName
-   * @return {Record<string, unknown>}
+   * @param {string} modelName
+   * @param {string} relationName
+   * @return {object}
    */
   getRelationDefinitionByName(modelName, relationName) {
     const relDefs = this.getRelationsDefinitionInBaseModelHierarchy(modelName);

+ 1 - 1
src/definition/model/model-definition-utils.spec.js

@@ -1,7 +1,7 @@
 import chai from 'chai';
 import {expect} from 'chai';
-import {format} from '@e22m4u/format';
 import {Schema} from '../../schema.js';
+import {format} from '@e22m4u/util-format';
 import {DataType} from './properties/index.js';
 import {RelationType} from './relations/index.js';
 import {InvalidArgumentError} from '../../errors/index.js';

+ 1 - 1
src/definition/model/model-definition-validator.spec.js

@@ -1,6 +1,6 @@
 import chai from 'chai';
 import {expect} from 'chai';
-import {format} from '@e22m4u/format';
+import {format} from '@e22m4u/util-format';
 import {RelationsDefinitionValidator} from './relations/index.js';
 import {PropertiesDefinitionValidator} from './properties/index.js';
 import {ModelDefinitionValidator} from './model-definition-validator.js';

+ 28 - 0
src/definition/model/model-definition.d.ts

@@ -0,0 +1,28 @@
+import {RelationDefinition} from './relations';
+import {PropertyDefinition} from './properties';
+
+/**
+ * Property definition map.
+ */
+export declare type PropertyDefinitionMap = {
+  [name: string]: PropertyDefinition,
+}
+
+/**
+ * Relation definition map.
+ */
+export declare type RelationDefinitionMap = {
+  [name: string]: RelationDefinition,
+}
+
+/**
+ * Model definition.
+ */
+export declare type ModelDefinition = {
+  name: string;
+  datasource?: string;
+  base?: string;
+  tableName?: string;
+  properties?: PropertyDefinitionMap,
+  relations?: RelationDefinitionMap,
+}

+ 11 - 0
src/definition/model/properties/data-type.d.ts

@@ -0,0 +1,11 @@
+/**
+ * Data type.
+ */
+export declare enum DataType {
+  ANY = 'any',
+  STRING = 'string',
+  NUMBER = 'number',
+  BOOLEAN = 'boolean',
+  ARRAY = 'array',
+  OBJECT = 'object',
+}

+ 0 - 9
src/definition/model/properties/data-type.js

@@ -1,14 +1,5 @@
 /**
  * Data type.
- *
- * @type {{
- *   NUMBER: string,
- *   ARRAY: string,
- *   STRING: string,
- *   ANY: string,
- *   OBJECT: string,
- *   BOOLEAN: string,
- * }}
  */
 export const DataType = {
   ANY: 'any',

+ 1 - 1
src/definition/model/properties/default-values-definition-validator.spec.js

@@ -1,6 +1,6 @@
 import {expect} from 'chai';
-import {format} from '@e22m4u/format';
 import {DataType} from './data-type.js';
+import {format} from '@e22m4u/util-format';
 import {DefaultValuesDefinitionValidator} from './default-values-definition-validator.js';
 
 const S = new DefaultValuesDefinitionValidator();

+ 2 - 0
src/definition/model/properties/index.d.ts

@@ -0,0 +1,2 @@
+export * from './data-type';
+export * from './property-definition';

+ 1 - 1
src/definition/model/properties/primary-keys-definition-validator.spec.js

@@ -1,6 +1,6 @@
 import {expect} from 'chai';
-import {format} from '@e22m4u/format';
 import {DataType} from './data-type.js';
+import {format} from '@e22m4u/util-format';
 import {PrimaryKeysDefinitionValidator} from './primary-keys-definition-validator.js';
 import {DEFAULT_PRIMARY_KEY_PROPERTY_NAME as DEF_PK} from '../model-definition-utils.js';
 

+ 1 - 1
src/definition/model/properties/properties-definition-validator.spec.js

@@ -1,7 +1,7 @@
 import chai from 'chai';
 import {expect} from 'chai';
-import {format} from '@e22m4u/format';
 import {DataType} from './data-type.js';
+import {format} from '@e22m4u/util-format';
 import {PropertiesDefinitionValidator} from './properties-definition-validator.js';
 import {PrimaryKeysDefinitionValidator} from './primary-keys-definition-validator.js';
 import {DefaultValuesDefinitionValidator} from './default-values-definition-validator.js';

+ 21 - 0
src/definition/model/properties/property-definition.d.ts

@@ -0,0 +1,21 @@
+import {DataType} from './data-type';
+
+/**
+ * Full property definition.
+ */
+export declare type FullPropertyDefinition = {
+  type: DataType,
+  itemType?: DataType,
+  model?: string,
+  primaryKey?: boolean,
+  columnName?: string,
+  columnType?: string,
+  required?: boolean,
+}
+
+/**
+ * Property definition.
+ */
+declare type PropertyDefinition =
+  | DataType
+  | FullPropertyDefinition;

+ 2 - 0
src/definition/model/relations/index.d.ts

@@ -0,0 +1,2 @@
+export * from './relation-type';
+export * from './relation-definition';

+ 12 - 0
src/definition/model/relations/relation-definition.d.ts

@@ -0,0 +1,12 @@
+import {RelationType} from './relation-type';
+
+/**
+ * Relation definition.
+ */
+declare type RelationDefinition = {
+  type: RelationType,
+  model?: string,
+  foreignKey?: string,
+  polymorphic?: boolean|string,
+  discriminator?: string,
+}

+ 9 - 0
src/definition/model/relations/relation-type.d.ts

@@ -0,0 +1,9 @@
+/**
+ * Relation type.
+ */
+export declare enum RelationType {
+  BELONGS_TO = 'belongsTo',
+  HAS_ONE = 'hasOne',
+  HAS_MANY = 'hasMany',
+  REFERENCES_MANY = 'referencesMany',
+}

+ 0 - 7
src/definition/model/relations/relation-type.js

@@ -1,12 +1,5 @@
 /**
  * Relation type.
- *
- * @type {{
- *   BELONGS_TO: string,
- *   HAS_ONE: string,
- *   HAS_MANY: string,
- *   REFERENCES_MANY: string,
- * }}
  */
 export const RelationType = {
   BELONGS_TO: 'belongsTo',

+ 2 - 2
src/definition/model/relations/relations-definition-validator.js

@@ -101,7 +101,7 @@ export class RelationsDefinitionValidator extends Service {
    *
    * @param {string} modelName
    * @param {string} relName
-   * @param {Record<string, unknown>} relDef
+   * @param {object} relDef
    * @private
    */
   _validateBelongsTo(modelName, relName, relDef) {
@@ -317,7 +317,7 @@ export class RelationsDefinitionValidator extends Service {
    *
    * @param {string} modelName
    * @param {string} relName
-   * @param {Record<string, unknown>} relDef
+   * @param {object} relDef
    * @private
    */
   _validateHasMany(modelName, relName, relDef) {

+ 1 - 1
src/definition/model/relations/relations-definition-validator.spec.js

@@ -1,5 +1,5 @@
 import {expect} from 'chai';
-import {format} from '@e22m4u/format';
+import {format} from '@e22m4u/util-format';
 import {RelationType} from './relation-type.js';
 import {RelationsDefinitionValidator} from './relations-definition-validator.js';
 

+ 1 - 1
src/errors/invalid-argument-error.js

@@ -1,4 +1,4 @@
-import {Errorf} from '@e22m4u/format';
+import {Errorf} from '@e22m4u/util-format';
 
 /**
  * Invalid argument error.

+ 1 - 1
src/errors/invalid-argument-error.spec.js

@@ -1,5 +1,5 @@
 import {expect} from 'chai';
-import {format} from '@e22m4u/format';
+import {format} from '@e22m4u/util-format';
 import {InvalidArgumentError} from './invalid-argument-error.js';
 
 describe('InvalidArgumentError', function () {

+ 1 - 1
src/errors/invalid-operator-value-error.js

@@ -1,4 +1,4 @@
-import {format} from '@e22m4u/format';
+import {format} from '@e22m4u/util-format';
 
 /**
  * Invalid operator value error.

+ 1 - 1
src/errors/not-implemented-error.js

@@ -1,4 +1,4 @@
-import {Errorf} from '@e22m4u/format';
+import {Errorf} from '@e22m4u/util-format';
 
 /**
  * Not implemented error.

+ 1 - 1
src/errors/not-implemented-error.spec.js

@@ -1,5 +1,5 @@
 import {expect} from 'chai';
-import {format} from '@e22m4u/format';
+import {format} from '@e22m4u/util-format';
 import {NotImplementedError} from './not-implemented-error.js';
 
 describe('NotImplementedError', function () {

+ 1 - 1
src/filter/fields-clause-tool.spec.js

@@ -1,6 +1,6 @@
 import {expect} from 'chai';
 import {Schema} from '../schema.js';
-import {format} from '@e22m4u/format';
+import {format} from '@e22m4u/util-format';
 import {FieldsClauseTool} from './fields-clause-tool.js';
 import {DEFAULT_PRIMARY_KEY_PROPERTY_NAME as DEF_PK} from '../definition/index.js';
 

+ 24 - 0
src/filter/filter.d.ts

@@ -0,0 +1,24 @@
+/**
+ * Filter.
+ */
+export declare type Filter = {
+  where?: WhereClause;
+  order?: string | string[];
+  limit?: number;
+  skip?: number;
+  fields?: string | string[];
+  include?: Record<string, unknown>;
+};
+
+/**
+ * Item filter.
+ */
+export declare type ItemFilter =
+  | Pick<Filter, 'fields' | 'include'>;
+
+/**
+ * Where clause.
+ */
+export declare type WhereClause = {
+  [property: string]: unknown,
+}

+ 2 - 2
src/filter/include-clause-tool.js

@@ -18,9 +18,9 @@ export class IncludeClauseTool extends Service {
   /**
    * Include to.
    *
-   * @param {Record<string, unknown>[]} entities
+   * @param {object[]} entities
    * @param {string} modelName
-   * @param {Record<string, unknown>[]} clause
+   * @param {object[]} clause
    * @return {Promise<void>}
    */
   async includeTo(entities, modelName, clause) {

+ 1 - 1
src/filter/include-clause-tool.spec.js

@@ -1,5 +1,5 @@
 import {expect} from 'chai';
-import {format} from '@e22m4u/format';
+import {format} from '@e22m4u/util-format';
 import {IncludeClauseTool} from './include-clause-tool.js';
 
 describe('IncludeClauseTool', function () {

+ 1 - 0
src/filter/index.d.ts

@@ -0,0 +1 @@
+export * from './filter';

+ 2 - 2
src/filter/operator-clause-tool.js

@@ -10,8 +10,8 @@ export class OperatorClauseTool extends Service {
   /**
    * Compare.
    *
-   * @param {*} val1 The 1st value
-   * @param {*} val2 The 2nd value
+   * @param {any} val1 The 1st value
+   * @param {any} val2 The 2nd value
    * @returns {number} 0: =, positive: >, negative <
    */
   compare(val1, val2) {

+ 1 - 1
src/filter/operator-clause-tool.spec.js

@@ -1,5 +1,5 @@
 import {expect} from 'chai';
-import {format} from '@e22m4u/format';
+import {format} from '@e22m4u/util-format';
 import {OperatorClauseTool} from './operator-clause-tool.js';
 import {InvalidOperatorValueError} from '../errors/index.js';
 

+ 2 - 2
src/filter/order-clause-tool.js

@@ -53,8 +53,8 @@ export class OrderClauseTool extends Service {
   /**
    * Normalize order clause.
    *
-   * @param clause
-   * @return {undefined|*[]}
+   * @param {string|string[]} clause
+   * @return {string[]|undefined}
    */
   static normalizeOrderClause(clause) {
     if (!clause) return;

+ 1 - 1
src/filter/order-clause-tool.spec.js

@@ -1,5 +1,5 @@
 import {expect} from 'chai';
-import {format} from '@e22m4u/format';
+import {format} from '@e22m4u/util-format';
 import {OrderClauseTool} from './order-clause-tool.js';
 
 const S = new OrderClauseTool();

+ 1 - 1
src/filter/slice-clause-tool.spec.js

@@ -1,5 +1,5 @@
 import {expect} from 'chai';
-import {format} from '@e22m4u/format';
+import {format} from '@e22m4u/util-format';
 import {SliceClauseTool} from './slice-clause-tool.js';
 
 const S = new SliceClauseTool();

+ 1 - 1
src/filter/where-clause-tool.spec.js

@@ -1,5 +1,5 @@
 import {expect} from 'chai';
-import {format} from '@e22m4u/format';
+import {format} from '@e22m4u/util-format';
 import {WhereClauseTool} from './where-clause-tool.js';
 
 const S = new WhereClauseTool();

+ 6 - 0
src/index.d.ts

@@ -0,0 +1,6 @@
+export * from './types';
+export * from './schema';
+export * from './filter';
+export * from './adapter';
+export * from './definition';
+export * from './repository';

+ 4 - 4
src/relations/belongs-to-resolver.js

@@ -12,12 +12,12 @@ export class BelongsToResolver extends Service {
   /**
    * Include to.
    *
-   * @param {Record<string, unknown>[]} entities
+   * @param {object[]} entities
    * @param {string} sourceName
    * @param {string} targetName
    * @param {string} relationName
    * @param {string|undefined} foreignKey
-   * @param {Record<string, unknown>|undefined} scope
+   * @param {object|undefined} scope
    * @return {Promise<void>}
    */
   async includeTo(
@@ -101,12 +101,12 @@ export class BelongsToResolver extends Service {
   /**
    * Include polymorphic to.
    *
-   * @param {Record<string, unknown>[]} entities
+   * @param {object[]} entities
    * @param {string} sourceName
    * @param {string} relationName
    * @param {string|undefined} foreignKey
    * @param {string|undefined} discriminator
-   * @param {Record<string, unknown>|undefined} scope
+   * @param {object|undefined} scope
    * @return {Promise<void>}
    */
   async includePolymorphicTo(

+ 1 - 1
src/relations/belongs-to-resolver.spec.js

@@ -1,6 +1,6 @@
 import {expect} from 'chai';
 import {Schema} from '../schema.js';
-import {format} from '@e22m4u/format';
+import {format} from '@e22m4u/util-format';
 import {DataType} from '../definition/index.js';
 import {RelationType} from '../definition/index.js';
 import {BelongsToResolver} from './belongs-to-resolver.js';

+ 6 - 6
src/relations/has-many-resolver.js

@@ -12,12 +12,12 @@ export class HasManyResolver extends Service {
   /**
    * Include to.
    *
-   * @param {Record<string, unknown>[]} entities
+   * @param {object[]} entities
    * @param {string} sourceName
    * @param {string} targetName
    * @param {string} relationName
    * @param {string} foreignKey
-   * @param {Record<string, unknown>|undefined} scope
+   * @param {object|undefined} scope
    * @return {Promise<void>}
    */
   async includeTo(
@@ -113,13 +113,13 @@ export class HasManyResolver extends Service {
   /**
    * Include polymorphic to.
    *
-   * @param {Record<string, unknown>[]} entities
+   * @param {object[]} entities
    * @param {string} sourceName
    * @param {string} targetName
    * @param {string} relationName
    * @param {string} foreignKey
    * @param {string} discriminator
-   * @param {Record<string, unknown>|undefined} scope
+   * @param {object|undefined} scope
    * @return {Promise<void>}
    */
   async includePolymorphicTo(
@@ -225,12 +225,12 @@ export class HasManyResolver extends Service {
   /**
    * Include polymorphic by relation name.
    *
-   * @param {Record<string, unknown>[]} entities
+   * @param {object[]} entities
    * @param {string} sourceName
    * @param {string} targetName
    * @param {string} relationName
    * @param {string} targetRelationName
-   * @param {Record<string, unknown>|undefined} scope
+   * @param {object|undefined} scope
    * @return {Promise<void>}
    */
   async includePolymorphicByRelationName(

+ 1 - 1
src/relations/has-many-resolver.spec.js

@@ -1,6 +1,6 @@
 import {expect} from 'chai';
 import {Schema} from '../schema.js';
-import {format} from '@e22m4u/format';
+import {format} from '@e22m4u/util-format';
 import {DataType} from '../definition/index.js';
 import {RelationType} from '../definition/index.js';
 import {HasManyResolver} from './has-many-resolver.js';

+ 6 - 6
src/relations/has-one-resolver.js

@@ -12,12 +12,12 @@ export class HasOneResolver extends Service {
   /**
    * Include to.
    *
-   * @param {Record<string, unknown>[]} entities
+   * @param {object[]} entities
    * @param {string} sourceName
    * @param {string} targetName
    * @param {string} relationName
    * @param {string} foreignKey
-   * @param {Record<string, unknown>|undefined} scope
+   * @param {object|undefined} scope
    * @return {Promise<void>}
    */
   async includeTo(
@@ -110,13 +110,13 @@ export class HasOneResolver extends Service {
   /**
    * Include polymorphic to.
    *
-   * @param {Record<string, unknown>[]} entities
+   * @param {object[]} entities
    * @param {string} sourceName
    * @param {string} targetName
    * @param {string} relationName
    * @param {string} foreignKey
    * @param {string} discriminator
-   * @param {Record<string, unknown>|undefined} scope
+   * @param {object|undefined} scope
    * @return {Promise<void>}
    */
   async includePolymorphicTo(
@@ -219,12 +219,12 @@ export class HasOneResolver extends Service {
   /**
    * Include polymorphic by relation name.
    *
-   * @param {Record<string, unknown>[]} entities
+   * @param {object[]} entities
    * @param {string} sourceName
    * @param {string} targetName
    * @param {string} relationName
    * @param {string} targetRelationName
-   * @param {Record<string, unknown>|undefined} scope
+   * @param {object|undefined} scope
    * @return {Promise<void>}
    */
   async includePolymorphicByRelationName(

+ 1 - 1
src/relations/has-one-resolver.spec.js

@@ -1,6 +1,6 @@
 import {expect} from 'chai';
 import {Schema} from '../schema.js';
-import {format} from '@e22m4u/format';
+import {format} from '@e22m4u/util-format';
 import {DataType} from '../definition/index.js';
 import {RelationType} from '../definition/index.js';
 import {HasOneResolver} from './has-one-resolver.js';

+ 2 - 2
src/relations/references-many-resolver.js

@@ -12,12 +12,12 @@ export class ReferencesManyResolver extends Service {
   /**
    * Include to.
    *
-   * @param {Record<string, unknown>[]} entities
+   * @param {object[]} entities
    * @param {string} sourceName
    * @param {string} targetName
    * @param {string} relationName
    * @param {string|undefined} foreignKey
-   * @param {Record<string, unknown>|undefined} scope
+   * @param {object|undefined} scope
    * @return {Promise<void>}
    */
   async includeTo(

+ 1 - 1
src/relations/references-many-resolver.spec.js

@@ -1,6 +1,6 @@
 import {expect} from 'chai';
 import {Schema} from '../schema.js';
-import {format} from '@e22m4u/format';
+import {format} from '@e22m4u/util-format';
 import {DataType} from '../definition/index.js';
 import {RelationType} from '../definition/index.js';
 import {ReferencesManyResolver} from './references-many-resolver.js';

+ 1 - 0
src/repository/index.d.ts

@@ -0,0 +1 @@
+export * from './repository';

+ 141 - 0
src/repository/repository.d.ts

@@ -0,0 +1,141 @@
+import {Filter} from '../filter';
+import {Adapter} from '../adapter';
+import {ModelData} from '../types';
+import {Identifier} from '../types';
+import {ItemFilter} from '../filter';
+import {WhereClause} from '../filter';
+import {ServiceContainer} from '@e22m4u/service';
+
+/**
+ * Repository.
+ */
+export declare class Repository {
+  /**
+   * Model name.
+   */
+  get modelName(): string;
+
+  /**
+   * Datasource name.
+   */
+  get datasourceName(): string;
+
+  /**
+   * Constructor.
+   *
+   * @param container
+   * @param modelName
+   */
+  constructor(
+    container: ServiceContainer,
+    modelName: string,
+  );
+
+  /**
+   * Get adapter.
+   */
+  getAdapter(): Promise<Adapter>;
+
+  /**
+   * Create.
+   *
+   * @param data
+   * @param filter
+   */
+  create(
+    data: ModelData,
+    filter?: ItemFilter,
+  ): Promise<ModelData>;
+
+  /**
+   * Replace by id.
+   *
+   * @param id
+   * @param data
+   * @param filter
+   */
+  replaceById(
+    id: Identifier,
+    data: ModelData,
+    filter?: ItemFilter,
+  ): Promise<ModelData>;
+
+  /**
+   * Replace or create.
+   *
+   * @param data
+   * @param filter
+   */
+  replaceOrCreate(
+    data: ModelData,
+    filter?: ItemFilter,
+  ): Promise<ModelData>;
+
+  /**
+   * Patch by id.
+   *
+   * @param id
+   * @param data
+   * @param filter
+   */
+  patchById(
+    id: Identifier,
+    data: ModelData,
+    filter?: ItemFilter,
+  ): Promise<ModelData>;
+
+  /**
+   * Find.
+   *
+   * @param filter
+   */
+  find(filter?: Filter): Promise<ModelData[]>;
+
+  /**
+   * Find one.
+   *
+   * @param filter
+   */
+  findOne(
+    filter?: ItemFilter,
+  ): Promise<ModelData | undefined>;
+
+  /**
+   * Find by id.
+   *
+   * @param id
+   * @param filter
+   */
+  findById(
+    id: Identifier,
+    filter?: ItemFilter,
+  ): Promise<ModelData>;
+
+  /**
+   * Delete.
+   *
+   * @param where
+   */
+  delete(where?: WhereClause): Promise<number>;
+
+  /**
+   * Delete by id.
+   *
+   * @param id
+   */
+  deleteById(id: Identifier): Promise<boolean>;
+
+  /**
+   * Exists.
+   *
+   * @param id
+   */
+  exists(id: Identifier): Promise<boolean>;
+
+  /**
+   * Count.
+   *
+   * @param where
+   */
+  count(where?: WhereClause): Promise<number>;
+}

+ 8 - 3
src/repository/repository.js

@@ -10,6 +10,8 @@ import {ModelDefinitionUtils} from '../definition/index.js';
 export class Repository extends Service {
   /**
    * Model name.
+   *
+   * @type {string}
    */
   _modelName;
 
@@ -24,6 +26,8 @@ export class Repository extends Service {
 
   /**
    * Datasource name.
+   *
+   * @type {string}
    */
   _datasourceName;
 
@@ -39,8 +43,9 @@ export class Repository extends Service {
   /**
    * Constructor.
    *
-   * @param container
-   * @param modelName
+   * @typedef {import('@e22m4u/service').ServiceContainer} ServiceContainer
+   * @param {ServiceContainer} container
+   * @param {string} modelName
    */
   constructor(container, modelName) {
     super(container);
@@ -58,7 +63,7 @@ export class Repository extends Service {
   /**
    * Get adapter.
    *
-   * @return {Promise<Adapter>}
+   * @return {Adapter}
    */
   async getAdapter() {
     return this.getService(AdapterRegistry).getAdapter(this.datasourceName);

+ 29 - 0
src/schema.d.ts

@@ -0,0 +1,29 @@
+import {Repository} from './repository';
+import {ModelDefinition} from './definition';
+import {DatasourceDefinition} from './definition';
+
+/**
+ * Schema.
+ */
+export declare class Schema {
+  /**
+   * Define datasource.
+   *
+   * @param datasourceDef
+   */
+  defineDatasource(datasourceDef: DatasourceDefinition): this;
+
+  /**
+   * Define model.
+   *
+   * @param modelDef
+   */
+  defineModel(modelDef: ModelDefinition): this;
+
+  /**
+   * Get repository.
+   *
+   * @param modelName
+   */
+  getRepository(modelName: string): Repository;
+}

+ 3 - 3
src/schema.js

@@ -9,7 +9,7 @@ export class Schema extends Service {
   /**
    * Define datasource.
    *
-   * @param datasourceDef
+   * @param {object} datasourceDef
    */
   defineDatasource(datasourceDef) {
     this.getService(DefinitionRegistry).addDatasource(datasourceDef);
@@ -19,7 +19,7 @@ export class Schema extends Service {
   /**
    * Define model.
    *
-   * @param modelDef
+   * @param {object} modelDef
    */
   defineModel(modelDef) {
     this.getService(DefinitionRegistry).addModel(modelDef);
@@ -29,7 +29,7 @@ export class Schema extends Service {
   /**
    * Get repository.
    *
-   * @param modelName
+   * @param {Repository} modelName
    */
   getRepository(modelName) {
     return this.getService(RepositoryRegistry).getRepository(modelName);

+ 18 - 0
src/types.d.ts

@@ -0,0 +1,18 @@
+/**
+ * Any object.
+ */
+export declare type AnyObject = {
+  [property: string]: unknown,
+}
+
+/**
+ * Model data.
+ */
+export declare type ModelData = {
+  [property: string]: unknown
+}
+
+/**
+ * Identifier.
+ */
+export declare type Identifier = number | string;

+ 2 - 2
src/utils/capitalize.js

@@ -1,8 +1,8 @@
 /**
  * Capitalize.
  *
- * @param string
- * @return {*|string}
+ * @param {string} string
+ * @return {string}
  */
 export function capitalize(string) {
   if (!string || typeof string !== 'string') return string;

+ 1 - 1
src/utils/exclude-object-keys.spec.js

@@ -1,5 +1,5 @@
 import {expect} from 'chai';
-import {format} from '@e22m4u/format';
+import {format} from '@e22m4u/util-format';
 import {excludeObjectKeys} from './exclude-object-keys.js';
 
 describe('excludeObjectKeys', function () {

+ 2 - 2
src/utils/select-object-keys.js

@@ -3,8 +3,8 @@ import {InvalidArgumentError} from '../errors/index.js';
 /**
  * Select object keys.
  *
- * @param obj
- * @param keys
+ * @param {object} obj
+ * @param {string[]} keys
  * @return {object}
  */
 export function selectObjectKeys(obj, keys) {

+ 2 - 2
src/utils/singularize.js

@@ -1,8 +1,8 @@
 /**
  * Singularize.
  *
- * @param word
- * @return {*}
+ * @param {string} word
+ * @return {string}
  */
 export function singularize(word) {
   if (!word || typeof word !== 'string') return word;