diff --git a/.npmignore b/.npmignore deleted file mode 100644 index 89f31ad..0000000 --- a/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -test -js -node_modules \ No newline at end of file diff --git a/package.json b/package.json index fedca74..1c93e78 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "dependjs", "version": "0.0.1", - "description": "dependjs is a javascript dependency injector", + "description": "dependjs is a typescript dependency injector", "main": "./js/Index.js", "repository": { "type": "git", @@ -13,6 +13,7 @@ }, "homepage": "https://gitea.nitowa.xyz/docs/dependjs", "keywords": [ + "typescript", "dependency injection", "inversion of control" ], @@ -38,6 +39,8 @@ "mocha": "^6.2.0" }, "files": [ - "js" + "js/Index.js", + "js/Index.d.ts", + "js/src/*" ] } diff --git a/src/Decorator.ts b/src/Decorator.ts index 99f5de3..b6ecbc3 100644 --- a/src/Decorator.ts +++ b/src/Decorator.ts @@ -9,6 +9,7 @@ export function Singleton(config?: { interface?: Constructor, initializationPriority?: number }): GenericClassDecorator> { + return (clazz: Type) => { Injector['singletonDefinitions'].push({ initializationPriority: config ?. initializationPriority, diff --git a/src/Injector.ts b/src/Injector.ts index 18a3657..f31b27c 100644 --- a/src/Injector.ts +++ b/src/Injector.ts @@ -1,6 +1,6 @@ import 'reflect-metadata'; import { ERR_NO_INITIALIZE_WITH_PRIORITY, ERR_NO_INJECTION_TOKEN } from './Strings'; -import { Constructor, Type, Module as SingletonDefinition, InjectionError, InjectionResolutionError } from './Internals'; +import { Constructor, Type, SingletonDefinition, InjectionError, InjectionResolutionError } from './Internals'; class _Injector { @@ -71,7 +71,7 @@ class _Injector { private initializeSingletons = () => { this.singletonDefinitions - .sort((a, b) => (a.initializationPriority ?? 0) - (b.initializationPriority ?? 0)) + .sort((a, b) => (b.initializationPriority ?? 0) - (a.initializationPriority ?? 0)) .map(def => this.singletonObjects[def.ctor.name]) .forEach(obj => obj.initialize ? obj.initialize() : undefined) } diff --git a/src/Internals.ts b/src/Internals.ts index 61e73c4..b68f301 100644 --- a/src/Internals.ts +++ b/src/Internals.ts @@ -12,8 +12,8 @@ export type Constructor = Function & { prototype: T } */ export type GenericClassDecorator = (target: T) => void; -export type Module = { - initializationPriority?: number //Priority of initializing this object after creation +export type SingletonDefinition = { + initializationPriority?: number //Priority of initializing this object after creation, lower value means higher priority; default: 0 ctor: Type //Object constructor to make singleton from } diff --git a/test/BasicTest/ComponentB.ts b/test/BasicTest/ComponentB.ts index 3d4c427..a0e665d 100644 --- a/test/BasicTest/ComponentB.ts +++ b/test/BasicTest/ComponentB.ts @@ -9,7 +9,7 @@ export abstract class IComponentB{ } @Singleton({ - interface: IComponentB + interface: IComponentB, }) export class ComponentB implements IComponentB, Initializable{ diff --git a/test/BasicTest/ComponentC.ts b/test/BasicTest/ComponentC.ts index d8868e5..b78e315 100644 --- a/test/BasicTest/ComponentC.ts +++ b/test/BasicTest/ComponentC.ts @@ -1,8 +1,11 @@ import { Inject, Singleton } from "../../src/Decorator" -import { Initializable } from "../../src/Interfaces" -import { COMPONENT_B_VALUE, COMPONENT_C_VALUE } from "../CONSTANTS" +import { COMPONENT_C_VALUE } from "../CONSTANTS" import { ComponentA } from "./ComponentA" +export class benis{ + +} + export abstract class IComponentC{ getFromA: () => string getFromThis: () => string @@ -11,7 +14,7 @@ export abstract class IComponentC{ @Singleton({ interface: IComponentC, }) -export class ComponentC implements IComponentC{ +export class ComponentC{ @Inject(ComponentA) private componentA: ComponentA diff --git a/test/BasicTest/Test.ts b/test/BasicTest/Test.ts index 6316685..6481ff0 100644 --- a/test/BasicTest/Test.ts +++ b/test/BasicTest/Test.ts @@ -9,7 +9,7 @@ var chaiAsPromised = require("chai-as-promised"); chai.use(chaiAsPromised); -describe('dependjs', () => { +describe('BasicTest', () => { it('is able to resolve linear dependencies', () => { const testComp = Injector.resolve(TestComponent) diff --git a/test/BasicTest/TestComponent.ts b/test/BasicTest/TestComponent.ts index 404aeac..8ed4bfa 100644 --- a/test/BasicTest/TestComponent.ts +++ b/test/BasicTest/TestComponent.ts @@ -1,5 +1,4 @@ import { Inject, Singleton } from "../../src/Decorator"; -import { Initializable } from "../../src/Interfaces"; import {ComponentA} from "./ComponentA" import {IComponentB} from "./ComponentB" import { ComponentC } from "./ComponentC"; diff --git a/test/InitializationTest/Test.ts b/test/InitializationTest/Test.ts index 57da839..367d110 100644 --- a/test/InitializationTest/Test.ts +++ b/test/InitializationTest/Test.ts @@ -8,12 +8,12 @@ var chaiAsPromised = require("chai-as-promised"); chai.use(chaiAsPromised); -describe('dependjs', () => { +describe('InitializationTest', () => { it('initialized in the requested order', () => { const testComp = Injector.resolve(TestComponent) const data = testComp.getData() - expect(data).to.eql([COMPONENT_C_VALUE, COMPONENT_B_VALUE, COMPONENT_A_VALUE]) + expect(data).to.eql([COMPONENT_A_VALUE, COMPONENT_B_VALUE, COMPONENT_C_VALUE]) }) }) \ No newline at end of file