Browse Source

chore: makes kind property as kinds array

e22m4u 1 year ago
parent
commit
6b1ec3b6e1
5 changed files with 38 additions and 21 deletions
  1. 9 6
      dist/cjs/index.cjs
  2. 8 4
      src/service-container.js
  3. 6 1
      src/service.d.ts
  4. 10 3
      src/service.js
  5. 5 7
      src/service.spec.js

+ 9 - 6
dist/cjs/index.cjs

@@ -22,6 +22,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
 // src/index.js
 // src/index.js
 var src_exports = {};
 var src_exports = {};
 __export(src_exports, {
 __export(src_exports, {
+  SERVICE_CLASS_NAME: () => SERVICE_CLASS_NAME,
   Service: () => Service,
   Service: () => Service,
   ServiceContainer: () => ServiceContainer
   ServiceContainer: () => ServiceContainer
 });
 });
@@ -83,7 +84,7 @@ var _ServiceContainer = class _ServiceContainer {
     }
     }
     let service = this._services.get(ctor);
     let service = this._services.get(ctor);
     if (!service || args.length) {
     if (!service || args.length) {
-      service = ctor.kind === Service.kind ? new ctor(this, ...args) : new ctor(...args);
+      service = Array.isArray(ctor.kinds) && ctor.kinds.includes(SERVICE_CLASS_NAME) ? new ctor(this, ...args) : new ctor(...args);
       this._services.set(ctor, service);
       this._services.set(ctor, service);
     } else if (typeof service === "function") {
     } else if (typeof service === "function") {
       service = service();
       service = service();
@@ -115,7 +116,7 @@ var _ServiceContainer = class _ServiceContainer {
         "The first argument of ServicesContainer.add must be a class constructor, but %v given.",
         "The first argument of ServicesContainer.add must be a class constructor, but %v given.",
         ctor
         ctor
       );
       );
-    const factory = /* @__PURE__ */ __name(() => ctor.kind === Service.kind ? new ctor(this, ...args) : new ctor(...args), "factory");
+    const factory = /* @__PURE__ */ __name(() => Array.isArray(ctor.kinds) && ctor.kinds.includes(SERVICE_CLASS_NAME) ? new ctor(this, ...args) : new ctor(...args), "factory");
     this._services.set(ctor, factory);
     this._services.set(ctor, factory);
     return this;
     return this;
   }
   }
@@ -132,7 +133,7 @@ var _ServiceContainer = class _ServiceContainer {
         "The first argument of ServicesContainer.use must be a class constructor, but %v given.",
         "The first argument of ServicesContainer.use must be a class constructor, but %v given.",
         ctor
         ctor
       );
       );
-    const service = ctor.kind === Service.kind ? new ctor(this, ...args) : new ctor(...args);
+    const service = Array.isArray(ctor.kinds) && ctor.kinds.includes(SERVICE_CLASS_NAME) ? new ctor(this, ...args) : new ctor(...args);
     this._services.set(ctor, service);
     this._services.set(ctor, service);
     return this;
     return this;
   }
   }
@@ -162,6 +163,7 @@ __name(_ServiceContainer, "ServiceContainer");
 var ServiceContainer = _ServiceContainer;
 var ServiceContainer = _ServiceContainer;
 
 
 // src/service.js
 // src/service.js
+var SERVICE_CLASS_NAME = "Service";
 var _Service = class _Service {
 var _Service = class _Service {
   /**
   /**
    * Container.
    * Container.
@@ -232,14 +234,15 @@ var _Service = class _Service {
 };
 };
 __name(_Service, "Service");
 __name(_Service, "Service");
 /**
 /**
- * Kind.
+ * Kinds.
  *
  *
- * @type {string}
+ * @type {string[]}
  */
  */
-__publicField(_Service, "kind", "Service");
+__publicField(_Service, "kinds", [SERVICE_CLASS_NAME]);
 var Service = _Service;
 var Service = _Service;
 // Annotate the CommonJS export names for ESM import in node:
 // Annotate the CommonJS export names for ESM import in node:
 0 && (module.exports = {
 0 && (module.exports = {
+  SERVICE_CLASS_NAME,
   Service,
   Service,
   ServiceContainer
   ServiceContainer
 });
 });

+ 8 - 4
src/service-container.js

@@ -1,4 +1,4 @@
-import {Service} from './service.js';
+import {SERVICE_CLASS_NAME} from './service.js';
 import {InvalidArgumentError} from './errors/index.js';
 import {InvalidArgumentError} from './errors/index.js';
 
 
 /**
 /**
@@ -64,7 +64,7 @@ export class ServiceContainer {
     // новый экземпляр
     // новый экземпляр
     if (!service || args.length) {
     if (!service || args.length) {
       service =
       service =
-        ctor.kind === Service.kind
+        Array.isArray(ctor.kinds) && ctor.kinds.includes(SERVICE_CLASS_NAME)
           ? new ctor(this, ...args)
           ? new ctor(this, ...args)
           : new ctor(...args);
           : new ctor(...args);
       this._services.set(ctor, service);
       this._services.set(ctor, service);
@@ -103,7 +103,9 @@ export class ServiceContainer {
         ctor,
         ctor,
       );
       );
     const factory = () =>
     const factory = () =>
-      ctor.kind === Service.kind ? new ctor(this, ...args) : new ctor(...args);
+      Array.isArray(ctor.kinds) && ctor.kinds.includes(SERVICE_CLASS_NAME)
+        ? new ctor(this, ...args)
+        : new ctor(...args);
     this._services.set(ctor, factory);
     this._services.set(ctor, factory);
     return this;
     return this;
   }
   }
@@ -123,7 +125,9 @@ export class ServiceContainer {
         ctor,
         ctor,
       );
       );
     const service =
     const service =
-      ctor.kind === Service.kind ? new ctor(this, ...args) : new ctor(...args);
+      Array.isArray(ctor.kinds) && ctor.kinds.includes(SERVICE_CLASS_NAME)
+        ? new ctor(this, ...args)
+        : new ctor(...args);
     this._services.set(ctor, service);
     this._services.set(ctor, service);
     return this;
     return this;
   }
   }

+ 6 - 1
src/service.d.ts

@@ -1,6 +1,11 @@
 import {Constructor} from './types.js';
 import {Constructor} from './types.js';
 import {ServiceContainer} from './service-container.js';
 import {ServiceContainer} from './service-container.js';
 
 
+/**
+ * Service class name.
+ */
+export const SERVICE_CLASS_NAME: 'Service';
+
 /**
 /**
  * Service.
  * Service.
  */
  */
@@ -8,7 +13,7 @@ export declare class Service {
   /**
   /**
    * Kind.
    * Kind.
    */
    */
-  static kind: string;
+  static readonly kinds: string[];
 
 
   /**
   /**
    * Container.
    * Container.

+ 10 - 3
src/service.js

@@ -1,15 +1,22 @@
 import {ServiceContainer} from './service-container.js';
 import {ServiceContainer} from './service-container.js';
 
 
+/**
+ * Service class name.
+ *
+ * @type {string}
+ */
+export const SERVICE_CLASS_NAME = 'Service';
+
 /**
 /**
  * Service.
  * Service.
  */
  */
 export class Service {
 export class Service {
   /**
   /**
-   * Kind.
+   * Kinds.
    *
    *
-   * @type {string}
+   * @type {string[]}
    */
    */
-  static kind = 'Service';
+  static kinds = [SERVICE_CLASS_NAME];
 
 
   /**
   /**
    * Container.
    * Container.

+ 5 - 7
src/service.spec.js

@@ -1,14 +1,12 @@
 import {expect} from 'chai';
 import {expect} from 'chai';
-import {Service} from './service.js';
+import {Service, SERVICE_CLASS_NAME} from './service.js';
 import {ServiceContainer} from './service-container.js';
 import {ServiceContainer} from './service-container.js';
 
 
 describe('Service', function () {
 describe('Service', function () {
-  it('exposes static property "kind"', function () {
-    expect(Service.kind).to.be.eq(Service.name);
-    const MyService1 = class extends Service {};
-    expect(MyService1.kind).to.be.eq(Service.name);
-    class MyService2 extends Service {}
-    expect(MyService2.kind).to.be.eq(Service.name);
+  it('exposes static property "kinds"', function () {
+    expect(Service.kinds).to.be.eql([SERVICE_CLASS_NAME]);
+    const MyService = class extends Service {};
+    expect(MyService.kinds).to.be.eql([SERVICE_CLASS_NAME]);
   });
   });
 
 
   describe('constructor', function () {
   describe('constructor', function () {