diff --git a/package-lock.json b/package-lock.json index 68b5ff0..7a1e663 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,20 +1,20 @@ { "name": "@aster-js/ioc", - "version": "1.6.2", + "version": "1.7.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@aster-js/ioc", - "version": "1.6.2", + "version": "1.7.1", "license": "ISC", "dependencies": { "@aster-js/async": "^1.4.1", - "@aster-js/collections": "^1.0.3", - "@aster-js/core": "^1.3.1", + "@aster-js/collections": "^1.0.5", + "@aster-js/core": "^1.3.2", "@aster-js/decorators": "^1.1.0", "@aster-js/events": "^1.3.0", - "@aster-js/iterators": "^1.2.2", + "@aster-js/iterators": "^1.2.3", "tslib": "^2.6.2" }, "devDependencies": { @@ -50,11 +50,11 @@ } }, "node_modules/@aster-js/collections": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@aster-js/collections/-/collections-1.0.3.tgz", - "integrity": "sha512-oY54KUAFR1Q2cmN2d5nJYugvHTfUFvh0rThu1PYd37TcbIuV0AuU7TL4weyIBbBQv2Qo19+2W3EM9dObIiBgcw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@aster-js/collections/-/collections-1.0.5.tgz", + "integrity": "sha512-mINAm/W0Wqu/5XgZ0M03roj/YPXKhhYClKHBBgCI1tXtr22JVYkadGMQ4EGeGzXWuwcsUHf0ebJPqYg00Lzf7Q==", "dependencies": { - "tslib": "^1.11.1" + "tslib": "^1.14.1" } }, "node_modules/@aster-js/collections/node_modules/tslib": { @@ -63,9 +63,9 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aster-js/core": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@aster-js/core/-/core-1.3.1.tgz", - "integrity": "sha512-BvfE0cc0Z63MrMEqHTJVFNkJhHQPsTe2nP7Jlp3bpxpjOEYGfUdEPPLY3xsQqfcVva78JN1OM3pvtcjEKWZ6ag==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@aster-js/core/-/core-1.3.2.tgz", + "integrity": "sha512-aqiGBHuBBtj0F4zXK6xpBK5AiUpLjei0fqdrBu3yrJNpMKioBeZu0evleV/XKPW9NKAv7ObLP/wjJOg9egTpFQ==", "dependencies": { "tslib": "^2.6.2" } @@ -90,9 +90,9 @@ } }, "node_modules/@aster-js/iterators": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@aster-js/iterators/-/iterators-1.2.2.tgz", - "integrity": "sha512-Z0L9pKksc7dSwyMDejR+5VypVzIS3lXB0cc+XUCHBMMlR4/dGhZvfu0gsM5by3WtLzhd9ab9Kw0JSdJR7A3uhQ==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@aster-js/iterators/-/iterators-1.2.3.tgz", + "integrity": "sha512-nRa5NVlibk50FrxFEKqJ9yxLdtGY/3989qD7wDTC7RUCpMzJkxYiNxWIpol6stfvswnsq6XzO4AcmFn4HKClaQ==", "dependencies": { "@aster-js/collections": "^1.0.3", "@aster-js/core": "^1.3.1", @@ -4378,11 +4378,11 @@ } }, "@aster-js/collections": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@aster-js/collections/-/collections-1.0.3.tgz", - "integrity": "sha512-oY54KUAFR1Q2cmN2d5nJYugvHTfUFvh0rThu1PYd37TcbIuV0AuU7TL4weyIBbBQv2Qo19+2W3EM9dObIiBgcw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@aster-js/collections/-/collections-1.0.5.tgz", + "integrity": "sha512-mINAm/W0Wqu/5XgZ0M03roj/YPXKhhYClKHBBgCI1tXtr22JVYkadGMQ4EGeGzXWuwcsUHf0ebJPqYg00Lzf7Q==", "requires": { - "tslib": "^1.11.1" + "tslib": "^1.14.1" }, "dependencies": { "tslib": { @@ -4393,9 +4393,9 @@ } }, "@aster-js/core": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@aster-js/core/-/core-1.3.1.tgz", - "integrity": "sha512-BvfE0cc0Z63MrMEqHTJVFNkJhHQPsTe2nP7Jlp3bpxpjOEYGfUdEPPLY3xsQqfcVva78JN1OM3pvtcjEKWZ6ag==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@aster-js/core/-/core-1.3.2.tgz", + "integrity": "sha512-aqiGBHuBBtj0F4zXK6xpBK5AiUpLjei0fqdrBu3yrJNpMKioBeZu0evleV/XKPW9NKAv7ObLP/wjJOg9egTpFQ==", "requires": { "tslib": "^2.6.2" } @@ -4420,9 +4420,9 @@ } }, "@aster-js/iterators": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@aster-js/iterators/-/iterators-1.2.2.tgz", - "integrity": "sha512-Z0L9pKksc7dSwyMDejR+5VypVzIS3lXB0cc+XUCHBMMlR4/dGhZvfu0gsM5by3WtLzhd9ab9Kw0JSdJR7A3uhQ==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@aster-js/iterators/-/iterators-1.2.3.tgz", + "integrity": "sha512-nRa5NVlibk50FrxFEKqJ9yxLdtGY/3989qD7wDTC7RUCpMzJkxYiNxWIpol6stfvswnsq6XzO4AcmFn4HKClaQ==", "requires": { "@aster-js/collections": "^1.0.3", "@aster-js/core": "^1.3.1", diff --git a/package.json b/package.json index d312f5f..d0b93b9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@aster-js/ioc", - "version": "1.7.0", + "version": "1.7.1", "description": "Aster core library part of Aster js library", "main": "./lib/index.js", "types": "./lib/index.d.ts", @@ -26,11 +26,11 @@ "license": "ISC", "dependencies": { "tslib": "^2.6.2", - "@aster-js/core": "^1.3.1", + "@aster-js/core": "^1.3.2", "@aster-js/async": "^1.4.1", "@aster-js/decorators": "^1.1.0", - "@aster-js/collections": "^1.0.3", - "@aster-js/iterators": "^1.2.2", + "@aster-js/collections": "^1.0.5", + "@aster-js/iterators": "^1.2.3", "@aster-js/events": "^1.3.0" }, "devDependencies": { diff --git a/src/ioc-module/ioc-container.ts b/src/ioc-module/ioc-container.ts index ddb4b74..911ae0e 100644 --- a/src/ioc-module/ioc-container.ts +++ b/src/ioc-module/ioc-container.ts @@ -68,7 +68,7 @@ export abstract class IoCContainer extends DisposableHost implements IIoCModule try { const asyncTasks = []; - this.logger?.debug("Starting IoC module with {setupCount} setups and {serviceCount}", setups.length, this.services.size); + this.logger?.debug("Starting IoC module with {setupCount} setup(s) and {serviceCount} service(s)", setups.length, this.services.size); for (; idx < setups.length; idx++) { const setup = setups[idx]; diff --git a/src/service-provider/service-provider.ts b/src/service-provider/service-provider.ts index 64f5cda..e7d1fa1 100644 --- a/src/service-provider/service-provider.ts +++ b/src/service-provider/service-provider.ts @@ -62,7 +62,7 @@ export class ServiceProvider implements IServiceProvider, IDisposable { private *resolveArgs(ctor: Constructor, baseArgs: readonly any[]): Iterable { const dependencies = [...this._dependencyResolver.resolveDependencies(ctor)]; - if (!dependencies.length) return baseArgs; + if (!dependencies.length) return yield* baseArgs; const [first] = dependencies; if (baseArgs.length !== first.param.index) { diff --git a/src/service-registry/service-registry.ts b/src/service-registry/service-registry.ts index 9d0f954..f987c56 100644 --- a/src/service-registry/service-registry.ts +++ b/src/service-registry/service-registry.ts @@ -20,7 +20,22 @@ export class ServiceRegistry { *dependencies(ctor: Constructor): Iterable { const deps = this._dependencies.get(ctor); - if (deps) yield* deps.sort((l, r) => l.index - r.index); + if (deps) { + let nextIdx = -1; + for (const dep of deps.sort((l, r) => l.index - r.index)) { + if (nextIdx === -1) { // First service + nextIdx = dep.index; + } + else if(nextIdx !== dep.index) { + throw new Error( + `Invalid parameter order in constructor of ${ctor.name} at index ${dep.index}.` + + `Dynamic parameters must be first in the constructor.` + ); + } + yield dep; + nextIdx++; + } + } } get(tag: string | symbol | Constructor): ServiceIdentifier | null {