e22m4u 3 дней назад
Родитель
Сommit
653db01aa7

+ 2 - 3
.mocharc.json

@@ -1,5 +1,4 @@
 {
-  "extension": ["js", "ts"],
-  "spec": "src/**/*.spec.{js,ts}",
-  "require": ["ts-node/register"]
+  "extension": ["js"],
+  "spec": "src/**/*.spec.js"
 }

+ 8 - 29
dist/cjs/index.cjs

@@ -1225,7 +1225,6 @@ var init_relations_definition_validator = __esm({
     "use strict";
     import_js_service5 = require("@e22m4u/js-service");
     init_relation_type();
-    init_relation_type();
     init_errors();
     _RelationsDefinitionValidator = class _RelationsDefinitionValidator extends import_js_service5.Service {
       /**
@@ -1765,11 +1764,10 @@ var init_model_definition_utils = __esm({
     "use strict";
     import_js_service7 = require("@e22m4u/js-service");
     init_properties();
-    init_utils();
-    init_utils();
     import_js_empty_values = require("@e22m4u/js-empty-values");
     init_errors();
     init_definition_registry();
+    init_utils();
     DEFAULT_PRIMARY_KEY_PROPERTY_NAME = "id";
     _ModelDefinitionUtils = class _ModelDefinitionUtils extends import_js_service7.Service {
       /**
@@ -3251,10 +3249,6 @@ var init_adapter = __esm({
     import_js_service20 = require("@e22m4u/js-service");
     init_errors();
     init_decorator();
-    init_decorator();
-    init_decorator();
-    init_decorator();
-    init_decorator();
     ADAPTER_CLASS_NAME = "Adapter";
     _Adapter = class _Adapter extends import_js_service20.Service {
       /**
@@ -3461,14 +3455,10 @@ var init_memory_adapter = __esm({
   "src/adapter/builtin/memory-adapter.js"() {
     "use strict";
     init_adapter();
-    init_utils();
+    init_errors();
     init_utils();
     init_definition();
     init_filter();
-    init_filter();
-    init_filter();
-    init_errors();
-    init_definition();
     _MemoryAdapter = class _MemoryAdapter extends Adapter {
       /**
        * Tables.
@@ -3880,10 +3870,9 @@ var import_js_service21, _AdapterLoader, AdapterLoader;
 var init_adapter_loader = __esm({
   "src/adapter/adapter-loader.js"() {
     "use strict";
-    init_adapter();
     import_js_service21 = require("@e22m4u/js-service");
-    init_adapter();
     init_errors();
+    init_adapter();
     init_();
     _AdapterLoader = class _AdapterLoader extends import_js_service21.Service {
       /**
@@ -3903,13 +3892,13 @@ var init_adapter_loader = __esm({
         try {
           const module2 = await globImport_builtin_adapter_js(`./builtin/${adapterName}-adapter.js`);
           adapterCtor = findAdapterCtorInModule(module2);
-        } catch (e) {
+        } catch {
         }
         if (!adapterCtor)
           try {
             const module2 = await Promise.resolve().then(() => __toESM(require(`@e22m4u/js-repository-${adapterName}-adapter`)));
             adapterCtor = findAdapterCtorInModule(module2);
-          } catch (e) {
+          } catch {
           }
         if (!adapterCtor)
           throw new InvalidArgumentError(
@@ -3981,10 +3970,9 @@ var init_repository = __esm({
   "src/repository/repository.js"() {
     "use strict";
     import_js_service23 = require("@e22m4u/js-service");
-    init_adapter2();
-    init_adapter2();
     init_errors();
     init_definition();
+    init_adapter2();
     _Repository = class _Repository extends import_js_service23.Service {
       /**
        * Model name.
@@ -4251,7 +4239,6 @@ var init_has_one_resolver = __esm({
     "use strict";
     import_js_service25 = require("@e22m4u/js-service");
     init_utils();
-    init_definition();
     init_errors();
     init_repository2();
     init_definition();
@@ -4506,7 +4493,6 @@ var init_has_many_resolver = __esm({
     "use strict";
     import_js_service26 = require("@e22m4u/js-service");
     init_utils();
-    init_definition();
     init_errors();
     init_repository2();
     init_definition();
@@ -4770,9 +4756,8 @@ var init_belongs_to_resolver = __esm({
   "src/relations/belongs-to-resolver.js"() {
     "use strict";
     import_js_service27 = require("@e22m4u/js-service");
-    init_utils();
-    init_utils();
     init_errors();
+    init_utils();
     init_repository2();
     init_definition();
     _BelongsToResolver = class _BelongsToResolver extends import_js_service27.Service {
@@ -4978,9 +4963,8 @@ var init_references_many_resolver = __esm({
   "src/relations/references-many-resolver.js"() {
     "use strict";
     import_js_service28 = require("@e22m4u/js-service");
-    init_utils();
-    init_utils();
     init_errors();
+    init_utils();
     init_repository2();
     init_definition();
     _ReferencesManyResolver = class _ReferencesManyResolver extends import_js_service28.Service {
@@ -5090,14 +5074,10 @@ var init_include_clause_tool = __esm({
   "src/filter/include-clause-tool.js"() {
     "use strict";
     import_js_service29 = require("@e22m4u/js-service");
-    init_definition();
-    init_relations2();
-    init_relations2();
     init_where_clause_tool();
     init_order_clause_tool();
     init_slice_clause_tool();
     init_errors();
-    init_relations2();
     init_fields_clause_tool();
     init_definition();
     init_relations2();
@@ -5494,7 +5474,6 @@ init_adapter2();
 
 // src/database-schema.js
 var import_js_service30 = require("@e22m4u/js-service");
-init_repository2();
 init_definition();
 init_repository2();
 var _DatabaseSchema = class _DatabaseSchema extends import_js_service30.Service {

+ 30 - 58
eslint.config.js

@@ -1,68 +1,40 @@
 import globals from 'globals';
 import eslintJs from '@eslint/js';
-import eslintTypescript from 'typescript-eslint';
 import eslintJsdocPlugin from 'eslint-plugin-jsdoc';
 import eslintMochaPlugin from 'eslint-plugin-mocha';
+import eslintImportPlugin from 'eslint-plugin-import';
 import eslintPrettierConfig from 'eslint-config-prettier';
 import eslintChaiExpectPlugin from 'eslint-plugin-chai-expect';
 
-export default [
-  {
-    files: ['src/**/*.js'],
-    languageOptions: {
-      globals: {
-        ...globals.node,
-        ...globals.es2021,
-        ...globals.mocha,
-      },
-    },
-    plugins: {
-      'jsdoc': eslintJsdocPlugin,
-      'mocha': eslintMochaPlugin,
-      'chai-expect': eslintChaiExpectPlugin,
-    },
-    rules: {
-      ...eslintJs.configs.recommended.rules,
-      ...eslintPrettierConfig.rules,
-      ...eslintMochaPlugin.configs.recommended.rules,
-      ...eslintChaiExpectPlugin.configs['recommended-flat'].rules,
-      ...eslintJsdocPlugin.configs['flat/recommended-error'].rules,
-      'no-unused-vars': ['error', {'caughtErrors': 'none'}],
-      'jsdoc/reject-any-type': 0,
-      'jsdoc/reject-function-type': 0,
-      'jsdoc/require-param-description': 0,
-      'jsdoc/require-returns-description': 0,
-      'jsdoc/require-property-description': 0,
-      'jsdoc/tag-lines': ['error', 'any', {startLines: 1}],
+export default [{
+  files: ['src/**/*.js'],
+  languageOptions: {
+    globals: {
+      ...globals.node,
+      ...globals.es2021,
+      ...globals.mocha,
     },
   },
-  {
-    files: ['src/**/*.ts'],
-    ignores: ['src/**/*.d.ts'],
-    languageOptions: {
-      globals: {
-        ...globals.node,
-        ...globals.es2021,
-        ...globals.mocha,
-      },
-      parser: eslintTypescript.parser,
-      parserOptions: {
-        projectService: true,
-        tsconfigRootDir: import.meta.dirname,
-      },
-    },
-    plugins: {
-      '@typescript-eslint': eslintTypescript.plugin,
-      'mocha': eslintMochaPlugin,
-      'chai-expect': eslintChaiExpectPlugin,
-    },
-    rules: {
-      ...eslintJs.configs.recommended.rules,
-      ...eslintPrettierConfig.rules,
-      ...eslintTypescript.configs.recommended.rules,
-      '@typescript-eslint/no-namespace': 0,
-      '@typescript-eslint/no-var-requires': 0,
-      '@typescript-eslint/no-unnecessary-type-constraint': 0,
-    },
+  plugins: {
+    'jsdoc': eslintJsdocPlugin,
+    'mocha': eslintMochaPlugin,
+    'import': eslintImportPlugin,
+    'chai-expect': eslintChaiExpectPlugin,
+  },
+  rules: {
+    ...eslintJs.configs.recommended.rules,
+    ...eslintPrettierConfig.rules,
+    ...eslintImportPlugin.flatConfigs.recommended.rules,
+    ...eslintMochaPlugin.configs.recommended.rules,
+    ...eslintChaiExpectPlugin.configs['recommended-flat'].rules,
+    ...eslintJsdocPlugin.configs['flat/recommended-error'].rules,
+    'no-duplicate-imports': 'error',
+    'import/export': 0,
+    'jsdoc/reject-any-type': 0,
+    'jsdoc/reject-function-type': 0,
+    'jsdoc/require-param-description': 0,
+    'jsdoc/require-returns-description': 0,
+    'jsdoc/require-property-description': 0,
+    'jsdoc/tag-lines': ['error', 'any', {startLines: 1}],
   },
-];
+}];

+ 8 - 9
package.json

@@ -12,10 +12,10 @@
     "Datasource",
     "Relations"
   ],
-  "homepage": "https://github.com/e22m4u/js-repository",
+  "homepage": "https://gitrepos.ru/e22m4u/js-repository",
   "repository": {
     "type": "git",
-    "url": "git+https://github.com/e22m4u/js-repository.git"
+    "url": "git+https://gitrepos.ru/e22m4u/js-repository.git"
   },
   "type": "module",
   "types": "./src/index.d.ts",
@@ -39,9 +39,9 @@
     "prepare": "husky"
   },
   "dependencies": {
-    "@e22m4u/js-empty-values": "~0.1.3",
-    "@e22m4u/js-format": "~0.2.1",
-    "@e22m4u/js-service": "~0.4.6"
+    "@e22m4u/js-empty-values": "~0.2.1",
+    "@e22m4u/js-format": "~0.3.1",
+    "@e22m4u/js-service": "~0.5.1"
   },
   "devDependencies": {
     "@commitlint/cli": "~20.1.0",
@@ -58,14 +58,13 @@
     "eslint": "~9.39.1",
     "eslint-config-prettier": "~10.1.8",
     "eslint-plugin-chai-expect": "~3.1.0",
+    "eslint-plugin-import": "~2.32.0",
     "eslint-plugin-jsdoc": "~61.4.1",
     "eslint-plugin-mocha": "~11.2.0",
     "husky": "~9.1.7",
     "mocha": "~11.7.5",
-    "prettier": "~3.6.2",
+    "prettier": "~3.7.4",
     "rimraf": "~6.1.2",
-    "ts-node": "~10.9.2",
-    "typescript": "~5.9.3",
-    "typescript-eslint": "~8.48.0"
+    "typescript": "~5.9.3"
   }
 }

+ 3 - 4
src/adapter/adapter-loader.js

@@ -1,7 +1,6 @@
-import {Adapter} from './adapter.js';
 import {Service} from '@e22m4u/js-service';
-import {ADAPTER_CLASS_NAME} from './adapter.js';
 import {InvalidArgumentError} from '../errors/index.js';
+import {Adapter, ADAPTER_CLASS_NAME} from './adapter.js';
 
 /**
  * Adapter loader.
@@ -24,7 +23,7 @@ export class AdapterLoader extends Service {
     try {
       const module = await import(`./builtin/${adapterName}-adapter.js`);
       adapterCtor = findAdapterCtorInModule(module);
-    } catch (e) {
+    } catch {
       /**/
     }
     if (!adapterCtor)
@@ -33,7 +32,7 @@ export class AdapterLoader extends Service {
           `@e22m4u/js-repository-${adapterName}-adapter`
         );
         adapterCtor = findAdapterCtorInModule(module);
-      } catch (e) {
+      } catch {
         /**/
       }
     if (!adapterCtor)

+ 8 - 5
src/adapter/adapter.js

@@ -2,11 +2,14 @@
 /* eslint jsdoc/require-returns-check: 0 */
 import {Service} from '@e22m4u/js-service';
 import {NotImplementedError} from '../errors/index.js';
-import {InclusionDecorator} from './decorator/index.js';
-import {DefaultValuesDecorator} from './decorator/index.js';
-import {DataSanitizingDecorator} from './decorator/index.js';
-import {FieldsFilteringDecorator} from './decorator/index.js';
-import {PropertyUniquenessDecorator} from './decorator/index.js';
+
+import {
+  InclusionDecorator,
+  DefaultValuesDecorator,
+  DataSanitizingDecorator,
+  FieldsFilteringDecorator,
+  PropertyUniquenessDecorator,
+} from './decorator/index.js';
 
 /**
  * Adapter class name.

+ 10 - 9
src/adapter/adapter.spec.js

@@ -1,15 +1,16 @@
 import {expect} from 'chai';
 import {chai} from '../chai.js';
-import {Adapter} from './adapter.js';
-import {Service} from '@e22m4u/js-service';
-import {ADAPTER_CLASS_NAME} from './adapter.js';
-import {ServiceContainer} from '@e22m4u/js-service';
 import {DatabaseSchema} from '../database-schema.js';
-import {InclusionDecorator} from './decorator/index.js';
-import {DefaultValuesDecorator} from './decorator/index.js';
-import {DataSanitizingDecorator} from './decorator/index.js';
-import {FieldsFilteringDecorator} from './decorator/index.js';
-import {PropertyUniquenessDecorator} from './decorator/index.js';
+import {Adapter, ADAPTER_CLASS_NAME} from './adapter.js';
+import {Service, ServiceContainer} from '@e22m4u/js-service';
+
+import {
+  InclusionDecorator,
+  DefaultValuesDecorator,
+  DataSanitizingDecorator,
+  FieldsFilteringDecorator,
+  PropertyUniquenessDecorator,
+} from './decorator/index.js';
 
 const sandbox = chai.spy.sandbox();
 

+ 8 - 7
src/adapter/builtin/memory-adapter.js

@@ -1,12 +1,13 @@
 import {Adapter} from '../adapter.js';
-import {cloneDeep} from '../../utils/index.js';
-import {capitalize} from '../../utils/index.js';
-import {DataType} from '../../definition/index.js';
-import {SliceClauseTool} from '../../filter/index.js';
-import {WhereClauseTool} from '../../filter/index.js';
-import {OrderClauseTool} from '../../filter/index.js';
 import {InvalidArgumentError} from '../../errors/index.js';
-import {ModelDefinitionUtils} from '../../definition/index.js';
+import {cloneDeep, capitalize} from '../../utils/index.js';
+import {DataType, ModelDefinitionUtils} from '../../definition/index.js';
+
+import {
+  SliceClauseTool,
+  WhereClauseTool,
+  OrderClauseTool,
+} from '../../filter/index.js';
 
 /**
  * Memory adapter.

+ 5 - 2
src/adapter/builtin/memory-adapter.spec.js

@@ -1,9 +1,12 @@
 import {expect} from 'chai';
 import {format} from '@e22m4u/js-format';
 import {MemoryAdapter} from './memory-adapter.js';
-import {DataType} from '../../definition/index.js';
 import {DatabaseSchema} from '../../database-schema.js';
-import {DEFAULT_PRIMARY_KEY_PROPERTY_NAME as DEF_PK} from '../../definition/index.js';
+
+import {
+  DataType,
+  DEFAULT_PRIMARY_KEY_PROPERTY_NAME as DEF_PK,
+} from '../../definition/index.js';
 
 describe('MemoryAdapter', function () {
   describe('_getTableOrCreate', function () {

+ 1 - 2
src/adapter/decorator/default-values-decorator.spec.js

@@ -1,9 +1,8 @@
 import {expect} from 'chai';
 import {chai} from '../../chai.js';
 import {Adapter} from '../adapter.js';
-import {DataType} from '../../definition/index.js';
 import {DatabaseSchema} from '../../database-schema.js';
-import {ModelDefinitionUtils} from '../../definition/index.js';
+import {DataType, ModelDefinitionUtils} from '../../definition/index.js';
 
 const dbs = new DatabaseSchema();
 dbs.defineModel({

+ 1 - 2
src/database-schema.js

@@ -1,7 +1,6 @@
 import {Service} from '@e22m4u/js-service';
-import {Repository} from './repository/index.js';
 import {DefinitionRegistry} from './definition/index.js';
-import {RepositoryRegistry} from './repository/index.js';
+import {Repository, RepositoryRegistry} from './repository/index.js';
 
 /**
  * Database schema.

+ 5 - 17
src/database-schema.spec.ts → src/database-schema.spec.js

@@ -17,16 +17,17 @@ describe('DatabaseSchema', function () {
     it('sets the datasource definition', function () {
       const dbs = new DatabaseSchema();
       dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
-      const res =
-        dbs.getService(DefinitionRegistry).getDatasource('datasource');
+      const res = dbs
+        .getService(DefinitionRegistry)
+        .getDatasource('datasource');
       expect(res).to.be.eql({name: 'datasource', adapter: 'memory'});
     });
 
     it('throws an error if the datasource name already defined', function () {
       const dbs = new DatabaseSchema();
       dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
-      const throwable =
-        () => dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
+      const throwable = () =>
+        dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
       expect(throwable).to.throw(
         'The datasource "datasource" is already defined.',
       );
@@ -69,18 +70,5 @@ describe('DatabaseSchema', function () {
       const throwable = () => dbs.getRepository('model');
       expect(throwable).to.throw('The model "model" is not defined.');
     });
-
-    it('uses generic types to define the repository type', function () {
-      const dbs = new DatabaseSchema();
-      dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
-      dbs.defineModel({name: 'model', datasource: 'datasource'});
-      interface MyModel {
-        myId: number;
-      }
-      const res1: Repository = dbs.getRepository('model');
-      const res2: Repository<MyModel, number, 'myId'> =
-        dbs.getRepository<MyModel, number, 'myId'>('model');
-      expect(res1).to.be.eq(res2);
-    });
   });
 });

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

@@ -1,10 +1,9 @@
 import {Service} from '@e22m4u/js-service';
 import {DataType} from './properties/index.js';
-import {cloneDeep} from '../../utils/index.js';
-import {excludeObjectKeys} from '../../utils/index.js';
 import {EmptyValuesService} from '@e22m4u/js-empty-values';
 import {InvalidArgumentError} from '../../errors/index.js';
 import {DefinitionRegistry} from '../definition-registry.js';
+import {cloneDeep, excludeObjectKeys} from '../../utils/index.js';
 
 /**
  * Default primary key property name.

+ 5 - 2
src/definition/model/model-definition-utils.spec.js

@@ -6,8 +6,11 @@ import {RelationType} from './relations/index.js';
 import {DatabaseSchema} from '../../database-schema.js';
 import {EmptyValuesService} from '@e22m4u/js-empty-values';
 import {InvalidArgumentError} from '../../errors/index.js';
-import {ModelDefinitionUtils} from './model-definition-utils.js';
-import {DEFAULT_PRIMARY_KEY_PROPERTY_NAME as DEF_PK} from './model-definition-utils.js';
+
+import {
+  ModelDefinitionUtils,
+  DEFAULT_PRIMARY_KEY_PROPERTY_NAME as DEF_PK,
+} from './model-definition-utils.js';
 
 const sandbox = chai.spy.sandbox();
 

+ 4 - 5
src/definition/model/relations/relations-definition-validator.js

@@ -1,6 +1,5 @@
 import {Service} from '@e22m4u/js-service';
 import {RelationType} from './relation-type.js';
-import {RelationType as Type} from './relation-type.js';
 import {InvalidArgumentError} from '../../../errors/index.js';
 
 /**
@@ -62,13 +61,13 @@ export class RelationsDefinitionValidator extends Service {
         modelName,
         relDef,
       );
-    if (!relDef.type || !Object.values(Type).includes(relDef.type))
+    if (!relDef.type || !Object.values(RelationType).includes(relDef.type))
       throw new InvalidArgumentError(
         'The relation %v of the model %v requires the option "type" ' +
           'to have one of relation types: %l, but %v was given.',
         relName,
         modelName,
-        Object.values(Type),
+        Object.values(RelationType),
         relDef.type,
       );
     this._validateBelongsTo(modelName, relName, relDef);
@@ -105,7 +104,7 @@ export class RelationsDefinitionValidator extends Service {
    * @private
    */
   _validateBelongsTo(modelName, relName, relDef) {
-    if (relDef.type !== Type.BELONGS_TO) return;
+    if (relDef.type !== RelationType.BELONGS_TO) return;
     if (relDef.polymorphic) {
       // A polymorphic "belongsTo" relation.
       if (typeof relDef.polymorphic !== 'boolean')
@@ -419,7 +418,7 @@ export class RelationsDefinitionValidator extends Service {
    * @private
    */
   _validateReferencesMany(modelName, relName, relDef) {
-    if (relDef.type !== Type.REFERENCES_MANY) return;
+    if (relDef.type !== RelationType.REFERENCES_MANY) return;
     if (!relDef.model || typeof relDef.model !== 'string')
       throw new InvalidArgumentError(
         'The relation %v of the model %v has the type "referencesMany", ' +

+ 8 - 6
src/filter/include-clause-tool.js

@@ -1,15 +1,17 @@
 import {Service} from '@e22m4u/js-service';
-import {RelationType} from '../definition/index.js';
-import {HasOneResolver} from '../relations/index.js';
-import {HasManyResolver} from '../relations/index.js';
 import {WhereClauseTool} from './where-clause-tool.js';
 import {OrderClauseTool} from './order-clause-tool.js';
 import {SliceClauseTool} from './slice-clause-tool.js';
 import {InvalidArgumentError} from '../errors/index.js';
-import {BelongsToResolver} from '../relations/index.js';
 import {FieldsClauseTool} from './fields-clause-tool.js';
-import {ModelDefinitionUtils} from '../definition/index.js';
-import {ReferencesManyResolver} from '../relations/index.js';
+import {RelationType, ModelDefinitionUtils} from '../definition/index.js';
+
+import {
+  HasOneResolver,
+  HasManyResolver,
+  BelongsToResolver,
+  ReferencesManyResolver,
+} from '../relations/index.js';
 
 /**
  * Include clause tool.

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

@@ -1,7 +1,6 @@
 import {Service} from '@e22m4u/js-service';
-import {cloneDeep} from '../utils/index.js';
-import {singularize} from '../utils/index.js';
 import {InvalidArgumentError} from '../errors/index.js';
+import {cloneDeep, singularize} from '../utils/index.js';
 import {RepositoryRegistry} from '../repository/index.js';
 import {ModelDefinitionUtils} from '../definition/index.js';
 

+ 6 - 3
src/relations/belongs-to-resolver.spec.js

@@ -1,10 +1,13 @@
 import {expect} from 'chai';
 import {format} from '@e22m4u/js-format';
-import {DataType} from '../definition/index.js';
-import {RelationType} from '../definition/index.js';
 import {DatabaseSchema} from '../database-schema.js';
 import {BelongsToResolver} from './belongs-to-resolver.js';
-import {DEFAULT_PRIMARY_KEY_PROPERTY_NAME as DEF_PK} from '../definition/index.js';
+
+import {
+  DataType,
+  RelationType,
+  DEFAULT_PRIMARY_KEY_PROPERTY_NAME as DEF_PK,
+} from '../definition/index.js';
 
 describe('BelongsToResolver', function () {
   describe('includeTo', function () {

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

@@ -1,9 +1,8 @@
 import {Service} from '@e22m4u/js-service';
 import {cloneDeep} from '../utils/index.js';
-import {RelationType} from '../definition/index.js';
 import {InvalidArgumentError} from '../errors/index.js';
 import {RepositoryRegistry} from '../repository/index.js';
-import {ModelDefinitionUtils} from '../definition/index.js';
+import {RelationType, ModelDefinitionUtils} from '../definition/index.js';
 
 /**
  * Has many resolver.

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

@@ -1,10 +1,13 @@
 import {expect} from 'chai';
 import {format} from '@e22m4u/js-format';
-import {DataType} from '../definition/index.js';
-import {RelationType} from '../definition/index.js';
 import {DatabaseSchema} from '../database-schema.js';
 import {HasManyResolver} from './has-many-resolver.js';
-import {DEFAULT_PRIMARY_KEY_PROPERTY_NAME as DEF_PK} from '../definition/index.js';
+
+import {
+  DataType,
+  RelationType,
+  DEFAULT_PRIMARY_KEY_PROPERTY_NAME as DEF_PK,
+} from '../definition/index.js';
 
 describe('HasManyResolver', function () {
   describe('includeTo', function () {

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

@@ -1,9 +1,8 @@
 import {Service} from '@e22m4u/js-service';
 import {cloneDeep} from '../utils/index.js';
-import {RelationType} from '../definition/index.js';
 import {InvalidArgumentError} from '../errors/index.js';
 import {RepositoryRegistry} from '../repository/index.js';
-import {ModelDefinitionUtils} from '../definition/index.js';
+import {RelationType, ModelDefinitionUtils} from '../definition/index.js';
 
 /**
  * Has one resolver.

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

@@ -1,10 +1,13 @@
 import {expect} from 'chai';
 import {format} from '@e22m4u/js-format';
-import {DataType} from '../definition/index.js';
-import {RelationType} from '../definition/index.js';
 import {HasOneResolver} from './has-one-resolver.js';
 import {DatabaseSchema} from '../database-schema.js';
-import {DEFAULT_PRIMARY_KEY_PROPERTY_NAME as DEF_PK} from '../definition/index.js';
+
+import {
+  DataType,
+  RelationType,
+  DEFAULT_PRIMARY_KEY_PROPERTY_NAME as DEF_PK,
+} from '../definition/index.js';
 
 describe('HasOneResolver', function () {
   describe('includeTo', function () {

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

@@ -1,7 +1,6 @@
 import {Service} from '@e22m4u/js-service';
-import {cloneDeep} from '../utils/index.js';
-import {singularize} from '../utils/index.js';
 import {InvalidArgumentError} from '../errors/index.js';
+import {cloneDeep, singularize} from '../utils/index.js';
 import {RepositoryRegistry} from '../repository/index.js';
 import {ModelDefinitionUtils} from '../definition/index.js';
 

+ 6 - 3
src/relations/references-many-resolver.spec.js

@@ -1,10 +1,13 @@
 import {expect} from 'chai';
 import {format} from '@e22m4u/js-format';
-import {DataType} from '../definition/index.js';
-import {RelationType} from '../definition/index.js';
 import {DatabaseSchema} from '../database-schema.js';
 import {ReferencesManyResolver} from './references-many-resolver.js';
-import {DEFAULT_PRIMARY_KEY_PROPERTY_NAME as DEF_PK} from '../definition/index.js';
+
+import {
+  DataType,
+  RelationType,
+  DEFAULT_PRIMARY_KEY_PROPERTY_NAME as DEF_PK,
+} from '../definition/index.js';
 
 describe('ReferencesManyResolver', function () {
   describe('includeTo', function () {

+ 1 - 2
src/repository/repository.js

@@ -1,8 +1,7 @@
 import {Service} from '@e22m4u/js-service';
-import {Adapter} from '../adapter/index.js';
-import {AdapterRegistry} from '../adapter/index.js';
 import {InvalidArgumentError} from '../errors/index.js';
 import {DefinitionRegistry} from '../definition/index.js';
+import {Adapter, AdapterRegistry} from '../adapter/index.js';
 
 /**
  * Repository.

+ 4 - 4
src/utils/is-plain-object.js

@@ -7,9 +7,9 @@
 export function isPlainObject(value) {
   return Boolean(
     typeof value === 'object' &&
-      value &&
-      !Array.isArray(value) &&
-      (!value.constructor ||
-        (value.constructor && value.constructor.name === 'Object')),
+    value &&
+    !Array.isArray(value) &&
+    (!value.constructor ||
+      (value.constructor && value.constructor.name === 'Object')),
   );
 }

+ 6 - 3
tsconfig.json

@@ -1,11 +1,14 @@
 {
   "compilerOptions": {
     "strict": true,
-    "noEmit": true,
     "target": "es2022",
     "module": "NodeNext",
     "moduleResolution": "NodeNext",
-    "strictNullChecks": true,
+    "noEmit": true,
     "allowJs": true
-  }
+  },
+  "include": [
+    "./src/**/*.ts",
+    "./src/**/*.js"
+  ]
 }