Skip to content

Fix resolution on csp env#1996

Merged
notaphplover merged 17 commits into
mainfrom
fix/resolution-on-csp-env
Jul 15, 2026
Merged

Fix resolution on csp env#1996
notaphplover merged 17 commits into
mainfrom
fix/resolution-on-csp-env

Conversation

@notaphplover

@notaphplover notaphplover commented Jul 15, 2026

Copy link
Copy Markdown
Member

Context

Summary by CodeRabbit

  • New Features
    • Added the jitless container option (defaults to enabled) for CSP-compatible dependency resolution without runtime code generation.
    • Resolution planning now consistently respects the configured JIT/JITless mode.
  • Bug Fixes
    • Improved CSP behavior by aligning resolution, caching, and activation handling with the JIT settings.
  • Documentation
    • Updated Container API docs and added an InversifyJS 8.2.0 release announcement with upgrade guidance and performance trade-offs.
  • Tests
    • Expanded coverage for both JIT and JITless modes, including CSP-safe constructor/property resolution.

@notaphplover notaphplover self-assigned this Jul 15, 2026
@changeset-bot

changeset-bot Bot commented Jul 15, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: f31bd85

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 4 packages
Name Type
@inversifyjs/container Minor
inversify Minor
@inversifyjs/core Major
@inversifyjs/plugin-dispose Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai

coderabbitai Bot commented Jul 15, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 4cd2ecbb-87af-466b-98a2-9994ca55c45a

📥 Commits

Reviewing files that changed from the base of the PR and between a6c7e3e and f31bd85.

📒 Files selected for processing (1)
  • packages/docs/services/inversify-site/blog/2026-07-15-announcing-inversify-8-2-0/index.mdx
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/docs/services/inversify-site/blog/2026-07-15-announcing-inversify-8-2-0/index.mdx

📝 Walkthrough

Walkthrough

Adds the jitless container option, propagates JIT configuration through planning and caching, introduces CSP-safe constructor resolution, expands tests and benchmarks for both modes, and documents the option for the 8.2.0 release.

Changes

Jitless resolution

Layer / File(s) Summary
Container configuration and planning propagation
packages/container/libraries/container/..., packages/container/libraries/core/src/planning/...
Adds ContainerOptions.jitless, defaults it to true, and forwards jitEnabled through resolution, subplans, binding nodes, and plan-result caching.
CSP-safe resolution paths
packages/container/libraries/core/src/planning/calculations/*Csp.ts, *NoActivations*, resolveMany.ts
Adds closure-based resolvers for zero through four constructor arguments, property injection, asynchronous values, activation callbacks, and generic multi-value resolution without runtime code generation.
Tests and benchmarks
packages/container/libraries/inversify/..., packages/container/libraries/core/..., packages/container/tools/container-benchmarks/...
Validates both jitless modes and adds comparable JIT and jitless scenarios across service graphs, scopes, properties, resolved values, and asynchronous resolution.
Release documentation
packages/docs/services/inversify-site/..., .changeset/*
Documents the option, defaults, CSP and JIT paths, release notes, and version metadata.

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 24.24% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main change: fixing CSP-compatible resolution behavior.
Linked Issues check ✅ Passed The PR implements CSP-safe resolution paths and a jitless default so Inversify can work without unsafe-eval.
Out of Scope Changes check ✅ Passed The docs, tests, and benchmarks all support the CSP/jitless feature and do not introduce unrelated scope.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/resolution-on-csp-env

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🧹 Nitpick comments (4)
packages/container/libraries/inversify/src/test/container/container.int.spec.ts (1)

224-231: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Include the jitless parameter in the test suite title to avoid duplicate names.

The title string currently contains only one %s formatter. As a result, the jitless boolean is omitted from the generated title, leading to duplicate test suite names in the test output for the true and false cases of each arity.

Consider adding a second formatter so the test runner can distinguish between the configurations.

💡 Proposed fix
-  )(
-    'having a service with %s constructor/factory parameters',
-    (parameterCount: number, jitless: boolean) => {
+  )(
+    'having a service with %s constructor/factory parameters (jitless: %s)',
+    (parameterCount: number, jitless: boolean) => {
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@packages/container/libraries/inversify/src/test/container/container.int.spec.ts`
around lines 224 - 231, Update the describe.each title in the constructor-arity
test suite to include a second formatter for the jitless argument, preserving
the existing arity placeholder so true and false configurations receive distinct
suite names.
packages/container/tools/container-benchmarks/src/bin/run.ts (1)

46-46: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Fix typo in class and file name.

There is a typographical error in the class name: Transtient should be spelled Transient. Please consider renaming the class and its corresponding file to maintain consistency.

  • packages/container/tools/container-benchmarks/src/bin/run.ts#L46-L46: update the import path and class name.
  • packages/container/tools/container-benchmarks/src/bin/run.ts#L173-L173: update the class instantiation.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/container/tools/container-benchmarks/src/bin/run.ts` at line 46,
Rename the misspelled Inversify benchmark class and its corresponding file from
Transtient to Transient. In
packages/container/tools/container-benchmarks/src/bin/run.ts:46-46, update the
import path and class name; at
packages/container/tools/container-benchmarks/src/bin/run.ts:173-173, update the
instantiation to use the renamed class.
packages/container/tools/container-benchmarks/src/scenario/inversifyCurrentJitless/InversifyCurrentJitlessGetComplexAsyncServiceInTransientScope.ts (1)

5-160: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Extract the shared FinalNode/Node1-10 dependency graph into a common fixture.

Three jitless scenario files declare byte-for-byte identical FinalNode/Node10..Node1 class hierarchies; the shared root cause is the lack of a common fixture module for this benchmark graph.

  • packages/container/tools/container-benchmarks/src/scenario/inversifyCurrentJitless/InversifyCurrentJitlessGetComplexAsyncServiceInTransientScope.ts#L5-L160: import the shared node classes from a new common fixture module instead of redeclaring them.
  • packages/container/tools/container-benchmarks/src/scenario/inversifyCurrentJitless/InversifyCurrentJitlessGetComplexServiceInSingletonScope.ts#L5-L160: import the same shared node classes instead of redeclaring them.
  • packages/container/tools/container-benchmarks/src/scenario/inversifyCurrentJitless/InversifyCurrentJitlessGetComplexServiceInTransientScope.ts#L5-L160: import the same shared node classes instead of redeclaring them.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@packages/container/tools/container-benchmarks/src/scenario/inversifyCurrentJitless/InversifyCurrentJitlessGetComplexAsyncServiceInTransientScope.ts`
around lines 5 - 160, Extract the shared FinalNode and Node1–Node10 hierarchy
into a common fixture module, exporting all node classes. In
packages/container/tools/container-benchmarks/src/scenario/inversifyCurrentJitless/InversifyCurrentJitlessGetComplexAsyncServiceInTransientScope.ts#L5-L160,
packages/container/tools/container-benchmarks/src/scenario/inversifyCurrentJitless/InversifyCurrentJitlessGetComplexServiceInSingletonScope.ts#L5-L160,
and
packages/container/tools/container-benchmarks/src/scenario/inversifyCurrentJitless/InversifyCurrentJitlessGetComplexServiceInTransientScope.ts#L5-L160,
remove the duplicate class declarations and import the shared classes,
preserving each scenario’s existing behavior.
packages/container/libraries/core/src/planning/calculations/buildZeroConstructorArgumentsResolverOnCsp.spec.ts (1)

20-66: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Align the new tests with the required hierarchy and fixture pattern.

  • packages/container/libraries/core/src/planning/calculations/buildZeroConstructorArgumentsResolverOnCsp.spec.ts#L20-L66: replace the free fixture function and add Class → Method → Input → Flow scopes.
  • packages/container/libraries/core/src/resolution/actions/resolveServiceActivations.spec.ts#L22-L36: extract the non-Promise branch fixtures into static fixture methods and add the missing hierarchy layer.
  • packages/container/libraries/core/src/resolution/actions/resolveServiceActivations.spec.ts#L121-L134: reuse those static fixtures for the Promise branch instead of duplicating inline setup.

As per coding guidelines, use four-layer describe scopes and reusable static fixture methods.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@packages/container/libraries/core/src/planning/calculations/buildZeroConstructorArgumentsResolverOnCsp.spec.ts`
around lines 20 - 66, Align the tests with the four-layer Class → Method → Input
→ Flow hierarchy and reusable static fixture pattern: in
packages/container/libraries/core/src/planning/calculations/buildZeroConstructorArgumentsResolverOnCsp.spec.ts
(lines 20-66), replace buildNodeFixture with the appropriate static fixture
method and add the missing describe scopes; in
packages/container/libraries/core/src/resolution/actions/resolveServiceActivations.spec.ts
(lines 22-36), move non-Promise fixtures into static fixture methods and add the
hierarchy layer; in the same file (lines 121-134), reuse those static fixtures
for the Promise branch instead of duplicating inline setup.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.changeset/sour-buttons-cheat.md:
- Line 7: Update the changelog entry describing CSP issues to hyphenate the
compound modifier as “CSP-related,” without changing the rest of the entry.

In
`@packages/container/libraries/core/src/planning/calculations/buildNoActivationsInstanceBindingNodeResolverOnCsp.ts`:
- Around line 9-16: Update the resolver dispatch in
buildNoActivationsInstanceBindingNodeResolverOnCsp to branch on
constructorArguments.length and use the CSP-safe zero-, one-, two-, three-,
four-, and generic constructor-argument builders for each arity. Replace
buildOneConstructorArgumentResolver and buildConstructorArgumentsResolver in
this jitless path, and do not use property count to select constructor arity
because properties are assigned separately.

In
`@packages/container/libraries/core/src/planning/calculations/buildOneConstructorArgumentResolverOnCsp.spec.ts`:
- Around line 210-212: Update the constructor parameter setup in each affected
test flow to replace nodeFixture.constructorParams with a new single-element
array instead of appending via push. Apply this at the highlighted setup and the
corresponding cases around lines 270 and 396 so each test starts with only its
intended resolver and remains order-independent.
- Around line 284-286: Update the asynchronous result assertions so tests
validate fulfilled values instead of comparing Promise objects: in
packages/container/libraries/core/src/planning/calculations/buildOneConstructorArgumentResolverOnCsp.spec.ts:284-286,
await result and assert the resolved Foo; in
packages/container/libraries/core/src/planning/calculations/buildTwoConstructorArgumentResolverOnCsp.spec.ts:340-342,
packages/container/libraries/core/src/planning/calculations/buildThreeConstructorArgumentResolverOnCsp.spec.ts:367-369,
and
packages/container/libraries/core/src/planning/calculations/buildFourConstructorArgumentResolverOnCsp.spec.ts:392-394,
await result and assert the resolved instance's expected constructor arguments.

In
`@packages/container/libraries/core/src/planning/calculations/buildZeroConstructorArgumentsResolverOnCsp.spec.ts`:
- Around line 180-198: Update the asynchronous test in the
“setInstanceProperties() returns a promise” describe block to await result
before asserting. Make the test callback asynchronous, assert the fulfilled
value is a Foo instance, and verify its args property, rather than comparing
Promise objects with toStrictEqual.

---

Nitpick comments:
In
`@packages/container/libraries/core/src/planning/calculations/buildZeroConstructorArgumentsResolverOnCsp.spec.ts`:
- Around line 20-66: Align the tests with the four-layer Class → Method → Input
→ Flow hierarchy and reusable static fixture pattern: in
packages/container/libraries/core/src/planning/calculations/buildZeroConstructorArgumentsResolverOnCsp.spec.ts
(lines 20-66), replace buildNodeFixture with the appropriate static fixture
method and add the missing describe scopes; in
packages/container/libraries/core/src/resolution/actions/resolveServiceActivations.spec.ts
(lines 22-36), move non-Promise fixtures into static fixture methods and add the
hierarchy layer; in the same file (lines 121-134), reuse those static fixtures
for the Promise branch instead of duplicating inline setup.

In
`@packages/container/libraries/inversify/src/test/container/container.int.spec.ts`:
- Around line 224-231: Update the describe.each title in the constructor-arity
test suite to include a second formatter for the jitless argument, preserving
the existing arity placeholder so true and false configurations receive distinct
suite names.

In `@packages/container/tools/container-benchmarks/src/bin/run.ts`:
- Line 46: Rename the misspelled Inversify benchmark class and its corresponding
file from Transtient to Transient. In
packages/container/tools/container-benchmarks/src/bin/run.ts:46-46, update the
import path and class name; at
packages/container/tools/container-benchmarks/src/bin/run.ts:173-173, update the
instantiation to use the renamed class.

In
`@packages/container/tools/container-benchmarks/src/scenario/inversifyCurrentJitless/InversifyCurrentJitlessGetComplexAsyncServiceInTransientScope.ts`:
- Around line 5-160: Extract the shared FinalNode and Node1–Node10 hierarchy
into a common fixture module, exporting all node classes. In
packages/container/tools/container-benchmarks/src/scenario/inversifyCurrentJitless/InversifyCurrentJitlessGetComplexAsyncServiceInTransientScope.ts#L5-L160,
packages/container/tools/container-benchmarks/src/scenario/inversifyCurrentJitless/InversifyCurrentJitlessGetComplexServiceInSingletonScope.ts#L5-L160,
and
packages/container/tools/container-benchmarks/src/scenario/inversifyCurrentJitless/InversifyCurrentJitlessGetComplexServiceInTransientScope.ts#L5-L160,
remove the duplicate class declarations and import the shared classes,
preserving each scenario’s existing behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 03b1667e-4ff6-4529-b81a-2bfe87ddf921

📥 Commits

Reviewing files that changed from the base of the PR and between c02bf7e and b993918.

📒 Files selected for processing (58)
  • .changeset/eager-areas-ask.md
  • .changeset/sour-buttons-cheat.md
  • .changeset/tame-bars-do.md
  • packages/container/libraries/container/src/container/models/ContainerOptions.ts
  • packages/container/libraries/container/src/container/services/Container.spec.ts
  • packages/container/libraries/container/src/container/services/Container.ts
  • packages/container/libraries/container/src/container/services/ServiceResolutionManager.spec.ts
  • packages/container/libraries/container/src/container/services/ServiceResolutionManager.ts
  • packages/container/libraries/core/src/planning/actions/addRootServiceNodeBindingIfContextFree.spec.ts
  • packages/container/libraries/core/src/planning/actions/curryBuildPlanServiceNode.spec.ts
  • packages/container/libraries/core/src/planning/actions/curryBuildServiceNodeBindings.spec.ts
  • packages/container/libraries/core/src/planning/actions/curryBuildServiceNodeBindings.ts
  • packages/container/libraries/core/src/planning/actions/currySubplan.spec.ts
  • packages/container/libraries/core/src/planning/actions/currySubplan.ts
  • packages/container/libraries/core/src/planning/actions/plan.int.spec.ts
  • packages/container/libraries/core/src/planning/actions/plan.spec.ts
  • packages/container/libraries/core/src/planning/actions/removeRootServiceNodeBindingIfContextFree.spec.ts
  • packages/container/libraries/core/src/planning/calculations/buildConstructorArgumentsResolverOnCsp.spec.ts
  • packages/container/libraries/core/src/planning/calculations/buildConstructorArgumentsResolverOnCsp.ts
  • packages/container/libraries/core/src/planning/calculations/buildFourConstructorArgumentResolverOnCsp.spec.ts
  • packages/container/libraries/core/src/planning/calculations/buildFourConstructorArgumentResolverOnCsp.ts
  • packages/container/libraries/core/src/planning/calculations/buildInstanceBindingNodeResolver.ts
  • packages/container/libraries/core/src/planning/calculations/buildNoActivationsInstanceBindingNodeResolver.ts
  • packages/container/libraries/core/src/planning/calculations/buildNoActivationsInstanceBindingNodeResolverOnCsp.ts
  • packages/container/libraries/core/src/planning/calculations/buildOneConstructorArgumentResolverOnCsp.spec.ts
  • packages/container/libraries/core/src/planning/calculations/buildOneConstructorArgumentResolverOnCsp.ts
  • packages/container/libraries/core/src/planning/calculations/buildResolvedValueBindingNodeResolver.ts
  • packages/container/libraries/core/src/planning/calculations/buildThreeConstructorArgumentResolverOnCsp.spec.ts
  • packages/container/libraries/core/src/planning/calculations/buildThreeConstructorArgumentResolverOnCsp.ts
  • packages/container/libraries/core/src/planning/calculations/buildTwoConstructorArgumentResolverOnCsp.spec.ts
  • packages/container/libraries/core/src/planning/calculations/buildTwoConstructorArgumentResolverOnCsp.ts
  • packages/container/libraries/core/src/planning/calculations/buildZeroConstructorArgumentsResolverOnCsp.spec.ts
  • packages/container/libraries/core/src/planning/calculations/buildZeroConstructorArgumentsResolverOnCsp.ts
  • packages/container/libraries/core/src/planning/models/BasePlanParams.ts
  • packages/container/libraries/core/src/planning/models/InstanceBindingNodeImplementation.ts
  • packages/container/libraries/core/src/planning/services/PlanResultCacheService.spec.ts
  • packages/container/libraries/core/src/planning/services/PlanResultCacheService.ts
  • packages/container/libraries/core/src/resolution/actions/resolve.int.spec.ts
  • packages/container/libraries/core/src/resolution/actions/resolveServiceActivations.spec.ts
  • packages/container/libraries/core/src/resolution/actions/resolveServiceActivations.ts
  • packages/container/libraries/inversify/src/test/container/container.int.spec.ts
  • packages/container/tools/container-benchmarks/src/bin/run.ts
  • packages/container/tools/container-benchmarks/src/scenario/inversifyCurrent/InversifyCurrentBaseScenario.ts
  • packages/container/tools/container-benchmarks/src/scenario/inversifyCurrentJitless/InversifyCurrentJitlessBaseScenario.ts
  • packages/container/tools/container-benchmarks/src/scenario/inversifyCurrentJitless/InversifyCurrentJitlessGetComplexAsyncServiceInTransientScope.ts
  • packages/container/tools/container-benchmarks/src/scenario/inversifyCurrentJitless/InversifyCurrentJitlessGetComplexResolvedValueServiceInTranstientScope.ts
  • packages/container/tools/container-benchmarks/src/scenario/inversifyCurrentJitless/InversifyCurrentJitlessGetComplexServiceInSingletonScope.ts
  • packages/container/tools/container-benchmarks/src/scenario/inversifyCurrentJitless/InversifyCurrentJitlessGetComplexServiceInTransientScope.ts
  • packages/container/tools/container-benchmarks/src/scenario/inversifyCurrentJitless/InversifyCurrentJitlessGetComplexServiceWithPropertiesInTransientScope.ts
  • packages/container/tools/container-benchmarks/src/scenario/inversifyCurrentJitless/InversifyCurrentJitlessGetServiceInSingletonScope.ts
  • packages/container/tools/container-benchmarks/src/scenario/inversifyCurrentJitless/InversifyCurrentJitlessGetServiceInTransientScope.ts
  • packages/container/tools/container-benchmarks/src/scenario/inversifyCurrentJitless/InversifyCurrentJitlessGetWideServiceInTransientScope.ts
  • packages/container/tools/container-benchmarks/src/scenario/models/Platform.ts
  • packages/docs/services/inversify-site/blog/2026-07-15-announcing-inversify-8-2-0/index.mdx
  • packages/docs/services/inversify-site/docs/api/container.mdx
  • packages/docs/services/inversify-site/i18n/zh/docusaurus-plugin-content-docs/current/api/container.mdx
  • packages/docs/services/inversify-site/i18n/zh/docusaurus-plugin-content-docs/version-8.x/api/container.mdx
  • packages/docs/services/inversify-site/versioned_docs/version-8.x/api/container.mdx

Comment thread .changeset/sour-buttons-cheat.md
@github-actions

Copy link
Copy Markdown
Contributor

Benchmarks results:

[CJS] Running benchmarks...

Get service in singleton scope
┌─────────┬──────────────────────────────┬──────────────────┬──────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns) │ Latency med (ns) │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼──────────────────┼──────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''249.64 ± 0.22%''240.00 ± 10.00''4148075 ± 0.01%''4166667 ± 166667'     │ 4005796 │
│ 1       │ 'inversifyCurrent (Jitless)''246.23 ± 0.16%''231.00 ± 9.00''4213227 ± 0.01%''4329004 ± 162338'     │ 4061282 │
│ 2       │ 'inversify6''1057.1 ± 0.24%''981.00 ± 21.00''990071 ± 0.02%''1019368 ± 21364'      │ 945988  │
│ 3       │ 'inversify7''306.39 ± 0.15%''290.00 ± 10.00''3392918 ± 0.01%''3448276 ± 114943'     │ 3263777 │
│ 4       │ 'inversify8''251.97 ± 0.12%''240.00 ± 9.00''4118847 ± 0.01%''4166667 ± 162338'     │ 3968764 │
│ 5       │ 'awilix''228.93 ± 0.31%''210.00 ± 10.00''4610940 ± 0.01%''4761905 ± 216450'     │ 4368142 │
│ 6       │ 'NestJS''314.70 ± 0.28%''291.00 ± 9.00''3303857 ± 0.01%''3436426 ± 103093'     │ 3177600 │
│ 7       │ 'tsyringe''317.60 ± 0.28%''300.00 ± 9.00''3278625 ± 0.01%''3333333 ± 103093'     │ 3148626 │
└─────────┴──────────────────────────────┴──────────────────┴──────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 0.985x
inversifyCurrent vs inversify6 Speedup: 4.190x
inversifyCurrent vs inversify7 Speedup: 1.223x
inversifyCurrent vs inversify8 Speedup: 1.007x
inversifyCurrent vs awilix Speedup: 0.900x
inversifyCurrent vs NestJS Speedup: 1.256x
inversifyCurrent vs tsyringe Speedup: 1.265x

Get service in transient scope
┌─────────┬──────────────────────────────┬──────────────────┬───────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns) │ Latency med (ns)  │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼──────────────────┼───────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''295.48 ± 1.35%''271.00 ± 9.00''3583039 ± 0.01%''3690037 ± 118608'     │ 3384374 │
│ 1       │ 'inversifyCurrent (Jitless)''294.55 ± 0.31%''271.00 ± 9.00''3570455 ± 0.01%''3690037 ± 118608'     │ 3394975 │
│ 2       │ 'inversify6''5614.8 ± 0.26%''5259.0 ± 89.00''184584 ± 0.05%''190150 ± 3269'        │ 178101  │
│ 3       │ 'inversify7''592.23 ± 0.15%''570.00 ± 9.00''1737219 ± 0.01%''1754386 ± 28145'      │ 1688542 │
│ 4       │ 'inversify8''302.34 ± 0.28%''281.00 ± 9.00''3450351 ± 0.01%''3558719 ± 110443'     │ 3307537 │
│ 5       │ 'awilix''438.24 ± 0.29%''411.00 ± 10.00''2366085 ± 0.01%''2433090 ± 60676'      │ 2281851 │
│ 6       │ 'NestJS''10576 ± 1.99%''8977.0 ± 250.00''105734 ± 0.10%''111396 ± 3136'        │ 94555   │
│ 7       │ 'tsyringe''447.70 ± 0.18%''421.00 ± 10.00''2303175 ± 0.01%''2375297 ± 55111'      │ 2233616 │
└─────────┴──────────────────────────────┴──────────────────┴───────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 1.004x
inversifyCurrent vs inversify6 Speedup: 19.411x
inversifyCurrent vs inversify7 Speedup: 2.063x
inversifyCurrent vs inversify8 Speedup: 1.038x
inversifyCurrent vs awilix Speedup: 1.514x
inversifyCurrent vs NestJS Speedup: 33.887x
inversifyCurrent vs tsyringe Speedup: 1.556x

Get wide service in transient scope
┌─────────┬──────────────────────────────┬──────────────────┬──────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns) │ Latency med (ns) │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼──────────────────┼──────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''580.04 ± 0.30%''551.00 ± 10.00''1788100 ± 0.01%''1814882 ± 33547'      │ 1724007 │
│ 1       │ 'inversifyCurrent (Jitless)''708.17 ± 0.26%''672.00 ± 9.00''1454776 ± 0.01%''1488095 ± 19666'      │ 1412086 │
│ 2       │ 'inversify6''25598 ± 0.37%''24075 ± 211.00''40279 ± 0.11%''41537 ± 367'          │ 39066   │
│ 3       │ 'inversify7''1736.7 ± 0.25%''1673.0 ± 20.00''591854 ± 0.02%''597729 ± 7061'        │ 575806  │
│ 4       │ 'inversify8''761.83 ± 0.27%''722.00 ± 9.00''1355316 ± 0.01%''1385042 ± 17052'      │ 1312626 │
│ 5       │ 'awilix''1192.1 ± 0.14%''1162.0 ± 10.00''853230 ± 0.01%''860585 ± 7470'        │ 838862  │
│ 6       │ 'NestJS''24262 ± 1.19%''21750 ± 432.00''44090 ± 0.13%''45977 ± 927'          │ 41218   │
│ 7       │ 'tsyringe''1447.6 ± 0.15%''1392.0 ± 10.00''708330 ± 0.02%''718391 ± 5198'        │ 690786  │
└─────────┴──────────────────────────────┴──────────────────┴──────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 1.229x
inversifyCurrent vs inversify6 Speedup: 44.393x
inversifyCurrent vs inversify7 Speedup: 3.021x
inversifyCurrent vs inversify8 Speedup: 1.319x
inversifyCurrent vs awilix Speedup: 2.096x
inversifyCurrent vs NestJS Speedup: 40.555x
inversifyCurrent vs tsyringe Speedup: 2.524x

Get complex service in singleton scope
┌─────────┬──────────────────────────────┬──────────────────┬──────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns) │ Latency med (ns) │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼──────────────────┼──────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''270.65 ± 0.26%''251.00 ± 9.00''3824739 ± 0.01%''3984064 ± 137910'     │ 3694856 │
│ 1       │ 'inversifyCurrent (Jitless)''261.82 ± 0.24%''241.00 ± 9.00''3970476 ± 0.01%''4149378 ± 149378'     │ 3819441 │
│ 2       │ 'inversify6''1101.1 ± 1.58%''1022.0 ± 30.00''951143 ± 0.02%''978474 ± 27903'       │ 908182  │
│ 3       │ 'inversify7''298.31 ± 0.29%''280.00 ± 9.00''3496897 ± 0.01%''3571428 ± 118608'     │ 3352264 │
│ 4       │ 'inversify8''261.02 ± 0.14%''250.00 ± 10.00''3964845 ± 0.01%''4000000 ± 153846'     │ 3831114 │
│ 5       │ 'awilix''252.00 ± 0.17%''240.00 ± 10.00''4128394 ± 0.01%''4166667 ± 166667'     │ 3968266 │
│ 6       │ 'NestJS''316.94 ± 0.16%''301.00 ± 10.00''3260974 ± 0.01%''3322259 ± 114167'     │ 3155221 │
│ 7       │ 'tsyringe''330.81 ± 0.39%''310.00 ± 10.00''3178953 ± 0.01%''3225806 ± 100806'     │ 3022842 │
└─────────┴──────────────────────────────┴──────────────────┴──────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 0.963x
inversifyCurrent vs inversify6 Speedup: 4.021x
inversifyCurrent vs inversify7 Speedup: 1.094x
inversifyCurrent vs inversify8 Speedup: 0.965x
inversifyCurrent vs awilix Speedup: 0.926x
inversifyCurrent vs NestJS Speedup: 1.173x
inversifyCurrent vs tsyringe Speedup: 1.203x

Get complex service in transient scope
┌─────────┬───────────────────────────────────────────────┬───────────────────┬────────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                                     │ Latency avg (ns)  │ Latency med (ns)   │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼───────────────────────────────────────────────┼───────────────────┼────────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''67452 ± 0.90%''64110 ± 922.00''15226 ± 0.15%''15598 ± 226'          │ 14826   │
│ 1       │ 'inversifyCurrent (Jitless)''83995 ± 0.62%''80270 ± 581.00''12170 ± 0.16%''12458 ± 91'           │ 11906   │
│ 2       │ 'inversifyCurrent (Resolved Value)''66025 ± 0.72%''62737 ± 631.00''15554 ± 0.15%''15940 ± 162'          │ 15146   │
│ 3       │ 'inversifyCurrent (Jitless) (Resolved Value)''70328 ± 0.62%''65353 ± 2886.0''14600 ± 0.18%''15302 ± 699'          │ 14220   │
│ 4       │ 'inversify6''5326041 ± 2.54%''5098166 ± 172513''191 ± 1.47%''196 ± 7'              │ 188     │
│ 5       │ 'inversify7''293680 ± 0.48%''287148 ± 1762.0''3434 ± 0.22%''3483 ± 21'            │ 3406    │
│ 6       │ 'inversify8''107430 ± 0.42%''103624 ± 1843.0''9422 ± 0.15%''9650 ± 173'           │ 9309    │
│ 7       │ 'awilix''281422 ± 0.34%''275575 ± 2825.0''3573 ± 0.18%''3629 ± 37'            │ 3554    │
│ 8       │ 'NestJS''80201 ± 1.64%''72155 ± 1442.0''13294 ± 0.22%''13859 ± 279'          │ 12469   │
│ 9       │ 'tsyringe''233684 ± 0.47%''227345 ± 1562.0''4320 ± 0.20%''4399 ± 30'            │ 4280    │
└─────────┴───────────────────────────────────────────────┴───────────────────┴────────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 1.251x
inversifyCurrent vs inversifyCurrent (Resolved Value) Speedup: 0.979x
inversifyCurrent vs inversifyCurrent (Jitless) (Resolved Value) Speedup: 1.043x
inversifyCurrent vs inversify6 Speedup: 79.712x
inversifyCurrent vs inversify7 Speedup: 4.434x
inversifyCurrent vs inversify8 Speedup: 1.616x
inversifyCurrent vs awilix Speedup: 4.262x
inversifyCurrent vs NestJS Speedup: 1.145x
inversifyCurrent vs tsyringe Speedup: 3.524x

Get complex service with properties in transient scope
┌─────────┬──────────────────────────────┬───────────────────┬───────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns)  │ Latency med (ns)  │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼───────────────────┼───────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''78424 ± 0.74%''74209 ± 441.00''13126 ± 0.17%''13475 ± 81'           │ 12752   │
│ 1       │ 'inversifyCurrent (Jitless)''98005 ± 0.68%''92773 ± 991.00''10449 ± 0.18%''10779 ± 116'          │ 10204   │
│ 2       │ 'inversify6''5577949 ± 2.75%''5294868 ± 56461''183 ± 1.48%''189 ± 2'              │ 180     │
│ 3       │ 'inversify7''343047 ± 0.70%''332592 ± 1983.5''2954 ± 0.27%''3007 ± 18'            │ 2916    │
│ 4       │ 'inversify8''219101 ± 0.67%''211896 ± 1813.0''4636 ± 0.23%''4719 ± 41'            │ 4565    │
│ 5       │ 'NestJS''331283 ± 1.94%''290794 ± 7835.0''3246 ± 0.57%''3439 ± 94'            │ 3019    │
└─────────┴──────────────────────────────┴───────────────────┴───────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 1.256x
inversifyCurrent vs inversify6 Speedup: 71.915x
inversifyCurrent vs inversify7 Speedup: 4.444x
inversifyCurrent vs inversify8 Speedup: 2.831x
inversifyCurrent vs NestJS Speedup: 4.044x

Get complex async service in transient scope
┌─────────┬──────────────────────────────┬───────────────────┬────────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns)  │ Latency med (ns)   │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼───────────────────┼────────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''366746 ± 0.93%''350436 ± 7273.0''2787 ± 0.39%''2854 ± 59'            │ 2727    │
│ 1       │ 'inversifyCurrent (Jitless)''362276 ± 0.92%''345477 ± 7014.0''2824 ± 0.39%''2895 ± 59'            │ 2761    │
│ 2       │ 'inversify6''5059969 ± 2.81%''4722513 ± 123772''202 ± 1.68%''212 ± 6'              │ 198     │
│ 3       │ 'inversify7''728368 ± 0.91%''703185 ± 6513.0''1393 ± 0.47%''1422 ± 13'            │ 1373    │
│ 4       │ 'inversify8''381003 ± 0.87%''366285 ± 6722.0''2680 ± 0.36%''2730 ± 50'            │ 2625    │
└─────────┴──────────────────────────────┴───────────────────┴────────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 0.987x
inversifyCurrent vs inversify6 Speedup: 13.780x
inversifyCurrent vs inversify7 Speedup: 2.001x
inversifyCurrent vs inversify8 Speedup: 1.040x
[ESM] Running benchmarks...

Get service in singleton scope
┌─────────┬──────────────────────────────┬──────────────────┬──────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns) │ Latency med (ns) │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼──────────────────┼──────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''258.49 ± 0.14%''241.00 ± 1.00''4006812 ± 0.01%''4149378 ± 17289'      │ 3868608 │
│ 1       │ 'inversifyCurrent (Jitless)''253.81 ± 0.18%''240.00 ± 9.00''4090236 ± 0.01%''4166667 ± 162338'     │ 3939988 │
│ 2       │ 'inversify6''976.32 ± 0.36%''882.00 ± 20.00''1089718 ± 0.02%''1133787 ± 26306'      │ 1024251 │
│ 3       │ 'inversify7''287.80 ± 0.13%''270.00 ± 10.00''3597106 ± 0.01%''3703704 ± 132275'     │ 3474660 │
│ 4       │ 'inversify8''250.51 ± 0.13%''231.00 ± 9.00''4158243 ± 0.01%''4329004 ± 162338'     │ 3991908 │
│ 5       │ 'awilix''236.71 ± 0.31%''220.00 ± 10.00''4468132 ± 0.01%''4545455 ± 216450'     │ 4224657 │
│ 6       │ 'NestJS''319.03 ± 0.36%''291.00 ± 9.00''3295218 ± 0.01%''3436426 ± 103093'     │ 3134489 │
│ 7       │ 'tsyringe''295.88 ± 0.47%''261.00 ± 10.00''3665427 ± 0.01%''3831418 ± 141381'     │ 3379742 │
└─────────┴──────────────────────────────┴──────────────────┴──────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 0.980x
inversifyCurrent vs inversify6 Speedup: 3.677x
inversifyCurrent vs inversify7 Speedup: 1.114x
inversifyCurrent vs inversify8 Speedup: 0.964x
inversifyCurrent vs awilix Speedup: 0.897x
inversifyCurrent vs NestJS Speedup: 1.216x
inversifyCurrent vs tsyringe Speedup: 1.093x

Get service in transient scope
┌─────────┬──────────────────────────────┬──────────────────┬───────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns) │ Latency med (ns)  │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼──────────────────┼───────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''314.09 ± 1.44%''290.00 ± 10.00''3378207 ± 0.01%''3448276 ± 114942'     │ 3183804 │
│ 1       │ 'inversifyCurrent (Jitless)''300.51 ± 0.30%''281.00 ± 10.00''3489559 ± 0.01%''3558719 ± 131318'     │ 3327726 │
│ 2       │ 'inversify6''5510.3 ± 0.33%''5099.0 ± 91.00''189755 ± 0.06%''196117 ± 3524'        │ 181478  │
│ 3       │ 'inversify7''508.14 ± 0.36%''471.00 ± 10.00''2070165 ± 0.01%''2123142 ± 46055'      │ 1967970 │
│ 4       │ 'inversify8''303.38 ± 0.32%''280.00 ± 10.00''3487862 ± 0.01%''3571429 ± 123153'     │ 3296211 │
│ 5       │ 'awilix''440.91 ± 0.42%''411.00 ± 10.00''2380285 ± 0.01%''2433090 ± 57793'      │ 2268034 │
│ 6       │ 'NestJS''11011 ± 2.17%''9227.0 ± 300.00''102434 ± 0.11%''108378 ± 3529'        │ 90815   │
│ 7       │ 'tsyringe''442.26 ± 0.13%''411.00 ± 10.00''2343828 ± 0.01%''2433090 ± 57793'      │ 2261095 │
└─────────┴──────────────────────────────┴──────────────────┴───────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 0.968x
inversifyCurrent vs inversify6 Speedup: 17.803x
inversifyCurrent vs inversify7 Speedup: 1.632x
inversifyCurrent vs inversify8 Speedup: 0.969x
inversifyCurrent vs awilix Speedup: 1.419x
inversifyCurrent vs NestJS Speedup: 32.979x
inversifyCurrent vs tsyringe Speedup: 1.441x

Get wide service in transient scope
┌─────────┬──────────────────────────────┬──────────────────┬──────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns) │ Latency med (ns) │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼──────────────────┼──────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''566.71 ± 0.38%''531.00 ± 10.00''1843957 ± 0.01%''1883239 ± 36147'      │ 1764556 │
│ 1       │ 'inversifyCurrent (Jitless)''720.96 ± 0.33%''681.00 ± 10.00''1439032 ± 0.01%''1468429 ± 21251'      │ 1387040 │
│ 2       │ 'inversify6''24806 ± 0.40%''23063 ± 251.00''41862 ± 0.12%''43359 ± 475'          │ 40313   │
│ 3       │ 'inversify7''1335.3 ± 0.31%''1262.0 ± 19.00''780131 ± 0.02%''792393 ± 12112'       │ 748896  │
│ 4       │ 'inversify8''760.91 ± 0.30%''721.00 ± 10.00''1361775 ± 0.01%''1386963 ± 18973'      │ 1314223 │
│ 5       │ 'awilix''1299.3 ± 0.32%''1242.0 ± 20.00''793160 ± 0.02%''805153 ± 13178'       │ 769633  │
│ 6       │ 'NestJS''24137 ± 1.31%''21781 ± 481.00''44253 ± 0.12%''45912 ± 1015'         │ 41431   │
│ 7       │ 'tsyringe''1375.2 ± 0.17%''1322.0 ± 19.00''746070 ± 0.02%''756430 ± 11030'       │ 727183  │
└─────────┴──────────────────────────────┴──────────────────┴──────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 1.281x
inversifyCurrent vs inversify6 Speedup: 44.049x
inversifyCurrent vs inversify7 Speedup: 2.364x
inversifyCurrent vs inversify8 Speedup: 1.354x
inversifyCurrent vs awilix Speedup: 2.325x
inversifyCurrent vs NestJS Speedup: 41.669x
inversifyCurrent vs tsyringe Speedup: 2.472x

Get complex service in singleton scope
┌─────────┬──────────────────────────────┬──────────────────┬──────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns) │ Latency med (ns) │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼──────────────────┼──────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''260.99 ± 0.23%''250.00 ± 10.00''3971739 ± 0.01%''4000000 ± 153846'     │ 3831513 │
│ 1       │ 'inversifyCurrent (Jitless)''257.72 ± 0.24%''241.00 ± 9.00''4035832 ± 0.01%''4149378 ± 149378'     │ 3880170 │
│ 2       │ 'inversify6''1011.4 ± 2.14%''922.00 ± 20.00''1047584 ± 0.02%''1084599 ± 24049'      │ 988683  │
│ 3       │ 'inversify7''278.18 ± 0.17%''260.00 ± 10.00''3763963 ± 0.01%''3846154 ± 153846'     │ 3594814 │
│ 4       │ 'inversify8''257.40 ± 0.16%''241.00 ± 1.00''4029704 ± 0.01%''4149378 ± 17289'      │ 3884939 │
│ 5       │ 'awilix''260.95 ± 0.33%''240.00 ± 10.00''4059632 ± 0.01%''4166667 ± 166666'     │ 3832163 │
│ 6       │ 'NestJS''316.04 ± 0.16%''300.00 ± 10.00''3280256 ± 0.01%''3333333 ± 107527'     │ 3164202 │
│ 7       │ 'tsyringe''302.96 ± 0.41%''280.00 ± 10.00''3489604 ± 0.01%''3571428 ± 123153'     │ 3300803 │
└─────────┴──────────────────────────────┴──────────────────┴──────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 0.984x
inversifyCurrent vs inversify6 Speedup: 3.791x
inversifyCurrent vs inversify7 Speedup: 1.055x
inversifyCurrent vs inversify8 Speedup: 0.986x
inversifyCurrent vs awilix Speedup: 0.978x
inversifyCurrent vs NestJS Speedup: 1.211x
inversifyCurrent vs tsyringe Speedup: 1.138x

Get complex service in transient scope
┌─────────┬───────────────────────────────────────────────┬───────────────────┬───────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                                     │ Latency avg (ns)  │ Latency med (ns)  │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼───────────────────────────────────────────────┼───────────────────┼───────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''67908 ± 0.62%''64150 ± 882.00''15118 ± 0.16%''15588 ± 216'          │ 14726   │
│ 1       │ 'inversifyCurrent (Jitless)''81527 ± 0.59%''78045 ± 813.00''12515 ± 0.15%''12813 ± 135'          │ 12266   │
│ 2       │ 'inversifyCurrent (Resolved Value)''66456 ± 0.65%''62947 ± 632.00''15478 ± 0.16%''15886 ± 161'          │ 15048   │
│ 3       │ 'inversifyCurrent (Jitless) (Resolved Value)''66116 ± 0.63%''62698 ± 601.00''15539 ± 0.15%''15949 ± 154'          │ 15125   │
│ 4       │ 'inversify6''5082850 ± 3.26%''4765597 ± 47445''202 ± 1.58%''210 ± 2'              │ 197     │
│ 5       │ 'inversify7''222757 ± 0.78%''214131 ± 1282.0''4575 ± 0.24%''4670 ± 28'            │ 4490    │
│ 6       │ 'inversify8''109759 ± 0.42%''109585 ± 4869.0''9226 ± 0.16%''9125 ± 420'           │ 9111    │
│ 7       │ 'awilix''286416 ± 0.63%''273762 ± 2243.5''3552 ± 0.31%''3653 ± 30'            │ 3492    │
│ 8       │ 'NestJS''79724 ± 1.56%''71113 ± 1463.0''13393 ± 0.23%''14062 ± 293'          │ 12544   │
│ 9       │ 'tsyringe''216844 ± 0.45%''210624 ± 1042.0''4656 ± 0.19%''4748 ± 24'            │ 4612    │
└─────────┴───────────────────────────────────────────────┴───────────────────┴───────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 1.208x
inversifyCurrent vs inversifyCurrent (Resolved Value) Speedup: 0.977x
inversifyCurrent vs inversifyCurrent (Jitless) (Resolved Value) Speedup: 0.973x
inversifyCurrent vs inversify6 Speedup: 74.986x
inversifyCurrent vs inversify7 Speedup: 3.304x
inversifyCurrent vs inversify8 Speedup: 1.639x
inversifyCurrent vs awilix Speedup: 4.256x
inversifyCurrent vs NestJS Speedup: 1.129x
inversifyCurrent vs tsyringe Speedup: 3.247x

Get complex service with properties in transient scope
┌─────────┬──────────────────────────────┬───────────────────┬───────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns)  │ Latency med (ns)  │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼───────────────────┼───────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''79501 ± 0.75%''74680 ± 581.00''12960 ± 0.18%''13390 ± 105'          │ 12579   │
│ 1       │ 'inversifyCurrent (Jitless)''100839 ± 0.78%''93776 ± 630.00''10262 ± 0.23%''10664 ± 71'           │ 9917    │
│ 2       │ 'inversify6''5510326 ± 3.00%''5141051 ± 62261''186 ± 1.74%''195 ± 2'              │ 182     │
│ 3       │ 'inversify7''282784 ± 0.97%''269865 ± 1503.0''3617 ± 0.30%''3706 ± 21'            │ 3537    │
│ 4       │ 'inversify8''222407 ± 1.16%''210514 ± 1482.0''4628 ± 0.32%''4750 ± 33'            │ 4497    │
│ 5       │ 'NestJS''334489 ± 1.89%''301439 ± 8385.5''3177 ± 0.49%''3317 ± 93'            │ 2990    │
└─────────┴──────────────────────────────┴───────────────────┴───────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 1.263x
inversifyCurrent vs inversify6 Speedup: 69.751x
inversifyCurrent vs inversify7 Speedup: 3.583x
inversifyCurrent vs inversify8 Speedup: 2.800x
inversifyCurrent vs NestJS Speedup: 4.080x

Get complex async service in transient scope
┌─────────┬──────────────────────────────┬───────────────────┬────────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns)  │ Latency med (ns)   │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼───────────────────┼────────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''365434 ± 0.88%''350144 ± 6341.0''2792 ± 0.36%''2856 ± 52'            │ 2737    │
│ 1       │ 'inversifyCurrent (Jitless)''364669 ± 0.87%''350426 ± 7114.0''2796 ± 0.36%''2854 ± 58'            │ 2743    │
│ 2       │ 'inversify6''5105097 ± 3.37%''4628035 ± 122609''202 ± 1.99%''216 ± 6'              │ 196     │
│ 3       │ 'inversify7''639980 ± 0.92%''619780 ± 7054.0''1586 ± 0.42%''1613 ± 18'            │ 1563    │
│ 4       │ 'inversify8''392846 ± 0.81%''379676 ± 6877.5''2593 ± 0.36%''2634 ± 48'            │ 2546    │
└─────────┴──────────────────────────────┴───────────────────┴────────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 0.998x
inversifyCurrent vs inversify6 Speedup: 13.804x
inversifyCurrent vs inversify7 Speedup: 1.761x
inversifyCurrent vs inversify8 Speedup: 1.077x

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
packages/container/libraries/core/src/planning/calculations/resolveMany.spec.ts (1)

5-82: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Extract the duplicated build callback into a shared fixture.

The five-argument build lambda is copy-pasted identically across all three nested blocks (lines 17-23, 42-48, 67-73). As per coding guidelines, spec files should "Create reusable test fixtures with static methods instead of inline test setup"; extracting this into a single shared constant/static helper would remove the duplication.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@packages/container/libraries/core/src/planning/calculations/resolveMany.spec.ts`
around lines 5 - 82, Extract the repeated five-argument callback used in all
resolveMany scenarios into one shared test fixture, such as a constant or static
helper near the describe block. Update each resolveMany call to reuse that
fixture while preserving the existing argument types and returned value order.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@packages/container/libraries/core/src/planning/calculations/resolveMany.spec.ts`:
- Around line 32-80: Update the async assertions in the “some values are
promises” and “all values are promises” test blocks to await the result and use
Jest’s .resolves matcher, asserting directly against [1, 2, 3, 4, 5] rather than
comparing Promise objects.

---

Nitpick comments:
In
`@packages/container/libraries/core/src/planning/calculations/resolveMany.spec.ts`:
- Around line 5-82: Extract the repeated five-argument callback used in all
resolveMany scenarios into one shared test fixture, such as a constant or static
helper near the describe block. Update each resolveMany call to reuse that
fixture while preserving the existing argument types and returned value order.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: d8fa1ead-4e3b-4a6e-a90b-554656a1d3d1

📥 Commits

Reviewing files that changed from the base of the PR and between b993918 and 72c99bb.

📒 Files selected for processing (3)
  • packages/container/libraries/core/src/planning/calculations/buildNoActivationsInstanceBindingNodeResolverOnCsp.ts
  • packages/container/libraries/core/src/planning/calculations/resolveMany.spec.ts
  • packages/container/libraries/core/src/planning/calculations/resolveMany.ts

@github-actions

Copy link
Copy Markdown
Contributor

Benchmarks results:

[CJS] Running benchmarks...

Get service in singleton scope
┌─────────┬──────────────────────────────┬──────────────────┬──────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns) │ Latency med (ns) │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼──────────────────┼──────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''247.95 ± 0.16%''230.00 ± 9.00''4209089 ± 0.01%''4347826 ± 177061'     │ 4033047 │
│ 1       │ 'inversifyCurrent (Jitless)''250.15 ± 0.14%''231.00 ± 9.00''4154325 ± 0.01%''4329004 ± 162338'     │ 3997547 │
│ 2       │ 'inversify6''1065.2 ± 0.25%''992.00 ± 20.00''976775 ± 0.02%''1008065 ± 20742'      │ 938781  │
│ 3       │ 'inversify7''309.62 ± 0.16%''291.00 ± 10.00''3350806 ± 0.01%''3436426 ± 122293'     │ 3229737 │
│ 4       │ 'inversify8''250.94 ± 0.14%''240.00 ± 10.00''4124069 ± 0.01%''4166667 ± 181159'     │ 3985057 │
│ 5       │ 'awilix''232.50 ± 0.25%''211.00 ± 10.00''4526558 ± 0.01%''4739337 ± 235788'     │ 4301003 │
│ 6       │ 'NestJS''330.35 ± 0.32%''310.00 ± 10.00''3170280 ± 0.01%''3225806 ± 107527'     │ 3027133 │
│ 7       │ 'tsyringe''320.11 ± 0.32%''300.00 ± 10.00''3280991 ± 0.01%''3333333 ± 114943'     │ 3123939 │
└─────────┴──────────────────────────────┴──────────────────┴──────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 1.013x
inversifyCurrent vs inversify6 Speedup: 4.309x
inversifyCurrent vs inversify7 Speedup: 1.256x
inversifyCurrent vs inversify8 Speedup: 1.021x
inversifyCurrent vs awilix Speedup: 0.930x
inversifyCurrent vs NestJS Speedup: 1.328x
inversifyCurrent vs tsyringe Speedup: 1.283x

Get service in transient scope
┌─────────┬──────────────────────────────┬──────────────────┬───────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns) │ Latency med (ns)  │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼──────────────────┼───────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''305.66 ± 0.25%''281.00 ± 10.00''3429132 ± 0.01%''3558719 ± 122293'     │ 3271571 │
│ 1       │ 'inversifyCurrent (Jitless)''333.86 ± 0.23%''311.00 ± 10.00''3107494 ± 0.01%''3215434 ± 100169'     │ 2995230 │
│ 2       │ 'inversify6''5816.0 ± 0.28%''5400.0 ± 100.00''179196 ± 0.06%''185185 ± 3367'        │ 171941  │
│ 3       │ 'inversify7''578.39 ± 0.13%''551.00 ± 10.00''1785234 ± 0.01%''1814882 ± 33547'      │ 1728939 │
│ 4       │ 'inversify8''288.88 ± 0.27%''270.00 ± 9.00''3619167 ± 0.01%''3703704 ± 127714'     │ 3461648 │
│ 5       │ 'awilix''436.21 ± 0.35%''401.00 ± 10.00''2408794 ± 0.01%''2493766 ± 63779'      │ 2292448 │
│ 6       │ 'NestJS''11096 ± 2.03%''9367.0 ± 260.00''101085 ± 0.11%''106758 ± 3002'        │ 90125   │
│ 7       │ 'tsyringe''461.30 ± 0.16%''440.00 ± 11.00''2244082 ± 0.01%''2272727 ± 55432'      │ 2167764 │
└─────────┴──────────────────────────────┴──────────────────┴───────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 1.104x
inversifyCurrent vs inversify6 Speedup: 19.136x
inversifyCurrent vs inversify7 Speedup: 1.921x
inversifyCurrent vs inversify8 Speedup: 0.947x
inversifyCurrent vs awilix Speedup: 1.424x
inversifyCurrent vs NestJS Speedup: 33.923x
inversifyCurrent vs tsyringe Speedup: 1.528x

Get wide service in transient scope
┌─────────┬──────────────────────────────┬──────────────────┬──────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns) │ Latency med (ns) │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼──────────────────┼──────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''578.68 ± 0.37%''541.00 ± 10.00''1810680 ± 0.02%''1848429 ± 34810'      │ 1728076 │
│ 1       │ 'inversifyCurrent (Jitless)''932.66 ± 0.12%''892.00 ± 10.00''1098467 ± 0.01%''1121076 ± 12711'      │ 1072204 │
│ 2       │ 'inversify6''27401 ± 0.39%''25578 ± 241.00''37756 ± 0.12%''39096 ± 372'          │ 36495   │
│ 3       │ 'inversify7''1745.8 ± 0.25%''1673.0 ± 10.00''589914 ± 0.02%''597729 ± 3594'        │ 572813  │
│ 4       │ 'inversify8''776.11 ± 0.27%''741.00 ± 10.00''1332489 ± 0.01%''1349528 ± 18461'      │ 1288483 │
│ 5       │ 'awilix''1213.3 ± 0.15%''1172.0 ± 19.00''840596 ± 0.01%''853242 ± 14060'       │ 824193  │
│ 6       │ 'NestJS''25344 ± 1.27%''22562 ± 501.00''42426 ± 0.14%''44322 ± 1000'         │ 39458   │
│ 7       │ 'tsyringe''1326.7 ± 0.15%''1272.0 ± 11.00''774561 ± 0.02%''786164 ± 6740'        │ 753771  │
└─────────┴──────────────────────────────┴──────────────────┴──────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 1.648x
inversifyCurrent vs inversify6 Speedup: 47.957x
inversifyCurrent vs inversify7 Speedup: 3.069x
inversifyCurrent vs inversify8 Speedup: 1.359x
inversifyCurrent vs awilix Speedup: 2.154x
inversifyCurrent vs NestJS Speedup: 42.679x
inversifyCurrent vs tsyringe Speedup: 2.338x

Get complex service in singleton scope
┌─────────┬──────────────────────────────┬──────────────────┬──────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns) │ Latency med (ns) │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼──────────────────┼──────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''268.92 ± 0.23%''251.00 ± 9.00''3856272 ± 0.01%''3984064 ± 137910'     │ 3718574 │
│ 1       │ 'inversifyCurrent (Jitless)''267.74 ± 0.16%''251.00 ± 10.00''3878772 ± 0.01%''3984064 ± 165314'     │ 3734928 │
│ 2       │ 'inversify6''1129.9 ± 1.56%''1042.0 ± 30.00''929715 ± 0.02%''959693 ± 26857'       │ 885060  │
│ 3       │ 'inversify7''303.86 ± 0.37%''281.00 ± 10.00''3473047 ± 0.01%''3558719 ± 131318'     │ 3290983 │
│ 4       │ 'inversify8''264.64 ± 0.16%''250.00 ± 10.00''3926384 ± 0.01%''4000000 ± 153846'     │ 3778709 │
│ 5       │ 'awilix''257.36 ± 0.27%''240.00 ± 10.00''4074467 ± 0.01%''4166667 ± 181159'     │ 3885680 │
│ 6       │ 'NestJS''329.03 ± 0.18%''311.00 ± 10.00''3141066 ± 0.01%''3215434 ± 106825'     │ 3039203 │
│ 7       │ 'tsyringe''322.99 ± 0.34%''300.00 ± 10.00''3257460 ± 0.01%''3333333 ± 107527'     │ 3096085 │
└─────────┴──────────────────────────────┴──────────────────┴──────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 0.994x
inversifyCurrent vs inversify6 Speedup: 4.148x
inversifyCurrent vs inversify7 Speedup: 1.110x
inversifyCurrent vs inversify8 Speedup: 0.982x
inversifyCurrent vs awilix Speedup: 0.946x
inversifyCurrent vs NestJS Speedup: 1.228x
inversifyCurrent vs tsyringe Speedup: 1.184x

Get complex service in transient scope
┌─────────┬───────────────────────────────────────────────┬───────────────────┬────────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                                     │ Latency avg (ns)  │ Latency med (ns)   │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼───────────────────────────────────────────────┼───────────────────┼────────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''73738 ± 0.59%''70371 ± 1262.0''13861 ± 0.15%''14210 ± 257'          │ 13562   │
│ 1       │ 'inversifyCurrent (Jitless)''113264 ± 0.44%''110526 ± 3627.0''8949 ± 0.16%''9048 ± 302'           │ 8829    │
│ 2       │ 'inversifyCurrent (Resolved Value)''66749 ± 0.61%''63167 ± 762.00''15360 ± 0.15%''15831 ± 193'          │ 14982   │
│ 3       │ 'inversifyCurrent (Jitless) (Resolved Value)''66607 ± 0.62%''63058 ± 872.00''15394 ± 0.15%''15858 ± 220'          │ 15014   │
│ 4       │ 'inversify6''6010202 ± 2.72%''5717192 ± 109844''170 ± 1.64%''175 ± 3'              │ 167     │
│ 5       │ 'inversify7''299899 ± 0.50%''292034 ± 2826.0''3362 ± 0.22%''3424 ± 33'            │ 3335    │
│ 6       │ 'inversify8''109255 ± 0.45%''107110 ± 1552.0''9273 ± 0.15%''9336 ± 134'           │ 9153    │
│ 7       │ 'awilix''280913 ± 0.42%''273609 ± 2549.5''3589 ± 0.22%''3655 ± 34'            │ 3560    │
│ 8       │ 'NestJS''82575 ± 1.77%''73036 ± 1643.0''13027 ± 0.24%''13692 ± 311'          │ 12111   │
│ 9       │ 'tsyringe''215337 ± 0.47%''208919 ± 1783.0''4693 ± 0.20%''4787 ± 41'            │ 4644    │
└─────────┴───────────────────────────────────────────────┴───────────────────┴────────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 1.549x
inversifyCurrent vs inversifyCurrent (Resolved Value) Speedup: 0.902x
inversifyCurrent vs inversifyCurrent (Jitless) (Resolved Value) Speedup: 0.900x
inversifyCurrent vs inversify6 Speedup: 81.766x
inversifyCurrent vs inversify7 Speedup: 4.123x
inversifyCurrent vs inversify8 Speedup: 1.495x
inversifyCurrent vs awilix Speedup: 3.862x
inversifyCurrent vs NestJS Speedup: 1.064x
inversifyCurrent vs tsyringe Speedup: 2.954x

Get complex service with properties in transient scope
┌─────────┬──────────────────────────────┬───────────────────┬───────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns)  │ Latency med (ns)  │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼───────────────────┼───────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''78501 ± 0.72%''73147 ± 511.00''13148 ± 0.20%''13671 ± 96'           │ 12739   │
│ 1       │ 'inversifyCurrent (Jitless)''166909 ± 0.55%''163745 ± 2970.5''6076 ± 0.20%''6107 ± 112'           │ 5992    │
│ 2       │ 'inversify6''5777895 ± 2.57%''5496458 ± 58704''176 ± 1.46%''182 ± 2'              │ 174     │
│ 3       │ 'inversify7''343349 ± 0.60%''333851 ± 3115.0''2941 ± 0.25%''2995 ± 28'            │ 2913    │
│ 4       │ 'inversify8''208976 ± 0.69%''203138 ± 1403.0''4866 ± 0.23%''4923 ± 34'            │ 4786    │
│ 5       │ 'NestJS''329311 ± 1.87%''289139 ± 8196.0''3258 ± 0.57%''3459 ± 99'            │ 3037    │
└─────────┴──────────────────────────────┴───────────────────┴───────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 2.164x
inversifyCurrent vs inversify6 Speedup: 74.761x
inversifyCurrent vs inversify7 Speedup: 4.470x
inversifyCurrent vs inversify8 Speedup: 2.702x
inversifyCurrent vs NestJS Speedup: 4.036x

Get complex async service in transient scope
┌─────────┬──────────────────────────────┬───────────────────┬────────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns)  │ Latency med (ns)   │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼───────────────────┼────────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''370860 ± 0.86%''354199 ± 6070.0''2751 ± 0.37%''2823 ± 48'            │ 2697    │
│ 1       │ 'inversifyCurrent (Jitless)''395186 ± 0.85%''380479 ± 6222.0''2578 ± 0.35%''2628 ± 43'            │ 2531    │
│ 2       │ 'inversify6''5441164 ± 3.61%''4943433 ± 109725''190 ± 2.13%''202 ± 5'              │ 184     │
│ 3       │ 'inversify7''699206 ± 0.87%''676028 ± 7293.0''1450 ± 0.45%''1479 ± 16'            │ 1431    │
│ 4       │ 'inversify8''396547 ± 0.83%''381040 ± 6136.0''2570 ± 0.36%''2624 ± 42'            │ 2522    │
└─────────┴──────────────────────────────┴───────────────────┴────────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 1.067x
inversifyCurrent vs inversify6 Speedup: 14.446x
inversifyCurrent vs inversify7 Speedup: 1.897x
inversifyCurrent vs inversify8 Speedup: 1.070x
[ESM] Running benchmarks...

Get service in singleton scope
┌─────────┬──────────────────────────────┬──────────────────┬──────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns) │ Latency med (ns) │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼──────────────────┼──────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''249.11 ± 0.16%''231.00 ± 9.00''4156599 ± 0.01%''4329004 ± 162338'     │ 4014368 │
│ 1       │ 'inversifyCurrent (Jitless)''248.18 ± 0.14%''231.00 ± 9.00''4175270 ± 0.01%''4329004 ± 162338'     │ 4029257 │
│ 2       │ 'inversify6''1000.3 ± 0.31%''912.00 ± 19.00''1056859 ± 0.02%''1096491 ± 22377'      │ 999733  │
│ 3       │ 'inversify7''287.88 ± 0.13%''270.00 ± 10.00''3597371 ± 0.01%''3703704 ± 132275'     │ 3473632 │
│ 4       │ 'inversify8''249.02 ± 0.13%''231.00 ± 9.00''4159244 ± 0.01%''4329004 ± 162338'     │ 4015747 │
│ 5       │ 'awilix''243.27 ± 0.26%''221.00 ± 10.00''4316009 ± 0.01%''4524887 ± 195882'     │ 4110584 │
│ 6       │ 'NestJS''326.07 ± 0.28%''301.00 ± 10.00''3208054 ± 0.01%''3322259 ± 106825'     │ 3066855 │
│ 7       │ 'tsyringe''298.96 ± 0.31%''271.00 ± 10.00''3520088 ± 0.01%''3690037 ± 131318'     │ 3344910 │
└─────────┴──────────────────────────────┴──────────────────┴──────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 0.996x
inversifyCurrent vs inversify6 Speedup: 3.933x
inversifyCurrent vs inversify7 Speedup: 1.155x
inversifyCurrent vs inversify8 Speedup: 0.999x
inversifyCurrent vs awilix Speedup: 0.963x
inversifyCurrent vs NestJS Speedup: 1.296x
inversifyCurrent vs tsyringe Speedup: 1.181x

Get service in transient scope
┌─────────┬──────────────────────────────┬──────────────────┬───────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns) │ Latency med (ns)  │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼──────────────────┼───────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''309.06 ± 1.32%''281.00 ± 10.00''3427112 ± 0.01%''3558719 ± 122293'     │ 3235667 │
│ 1       │ 'inversifyCurrent (Jitless)''322.69 ± 0.22%''301.00 ± 9.00''3216476 ± 0.01%''3322259 ± 96453'      │ 3098921 │
│ 2       │ 'inversify6''5466.0 ± 0.30%''5059.0 ± 99.00''191080 ± 0.06%''197668 ± 3869'        │ 182948  │
│ 3       │ 'inversify7''522.73 ± 0.30%''491.00 ± 10.00''2001125 ± 0.01%''2036660 ± 42342'      │ 1913050 │
│ 4       │ 'inversify8''304.89 ± 0.35%''280.00 ± 10.00''3488695 ± 0.01%''3571429 ± 123153'     │ 3279914 │
│ 5       │ 'awilix''442.55 ± 0.34%''411.00 ± 10.00''2380225 ± 0.01%''2433090 ± 60676'      │ 2259947 │
│ 6       │ 'NestJS''11217 ± 2.27%''9347.0 ± 311.00''101457 ± 0.11%''106986 ± 3659'        │ 89151   │
│ 7       │ 'tsyringe''440.91 ± 0.16%''411.00 ± 10.00''2359058 ± 0.01%''2433090 ± 60676'      │ 2268058 │
└─────────┴──────────────────────────────┴──────────────────┴───────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 1.065x
inversifyCurrent vs inversify6 Speedup: 17.935x
inversifyCurrent vs inversify7 Speedup: 1.713x
inversifyCurrent vs inversify8 Speedup: 0.982x
inversifyCurrent vs awilix Speedup: 1.440x
inversifyCurrent vs NestJS Speedup: 33.779x
inversifyCurrent vs tsyringe Speedup: 1.453x

Get wide service in transient scope
┌─────────┬──────────────────────────────┬──────────────────┬──────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns) │ Latency med (ns) │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼──────────────────┼──────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''573.39 ± 0.29%''541.00 ± 10.00''1809252 ± 0.01%''1848429 ± 34810'      │ 1744023 │
│ 1       │ 'inversifyCurrent (Jitless)''954.18 ± 0.11%''912.00 ± 10.00''1074708 ± 0.01%''1096491 ± 12156'      │ 1048025 │
│ 2       │ 'inversify6''25032 ± 0.67%''23184 ± 301.00''41666 ± 0.12%''43133 ± 567'          │ 39950   │
│ 3       │ 'inversify7''1383.2 ± 0.26%''1313.0 ± 10.00''747412 ± 0.02%''761615 ± 5845'        │ 722966  │
│ 4       │ 'inversify8''772.08 ± 0.26%''732.00 ± 10.00''1339342 ± 0.01%''1366120 ± 18921'      │ 1295198 │
│ 5       │ 'awilix''1223.8 ± 0.16%''1192.0 ± 11.00''832196 ± 0.01%''838926 ± 7671'        │ 817102  │
│ 6       │ 'NestJS''24372 ± 1.21%''21900 ± 410.00''43823 ± 0.13%''45662 ± 861'          │ 41032   │
│ 7       │ 'tsyringe''1400.4 ± 0.13%''1342.0 ± 11.00''733186 ± 0.02%''745156 ± 6058'        │ 714085  │
└─────────┴──────────────────────────────┴──────────────────┴──────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 1.683x
inversifyCurrent vs inversify6 Speedup: 43.422x
inversifyCurrent vs inversify7 Speedup: 2.421x
inversifyCurrent vs inversify8 Speedup: 1.351x
inversifyCurrent vs awilix Speedup: 2.174x
inversifyCurrent vs NestJS Speedup: 41.285x
inversifyCurrent vs tsyringe Speedup: 2.468x

Get complex service in singleton scope
┌─────────┬──────────────────────────────┬──────────────────┬──────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns) │ Latency med (ns) │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼──────────────────┼──────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''265.64 ± 0.26%''251.00 ± 10.00''3899780 ± 0.01%''3984064 ± 152646'     │ 3764486 │
│ 1       │ 'inversifyCurrent (Jitless)''277.99 ± 0.16%''261.00 ± 9.00''3725373 ± 0.01%''3831418 ± 127714'     │ 3597294 │
│ 2       │ 'inversify6''1033.2 ± 2.14%''931.00 ± 20.00''1042019 ± 0.02%''1074114 ± 23581'      │ 967899  │
│ 3       │ 'inversify7''283.75 ± 0.14%''261.00 ± 10.00''3675236 ± 0.01%''3831418 ± 141381'     │ 3524239 │
│ 4       │ 'inversify8''263.41 ± 0.18%''250.00 ± 10.00''3947791 ± 0.01%''4000000 ± 153846'     │ 3796308 │
│ 5       │ 'awilix''260.66 ± 0.12%''241.00 ± 9.00''3975355 ± 0.01%''4149378 ± 149378'     │ 3836422 │
│ 6       │ 'NestJS''332.49 ± 0.20%''311.00 ± 10.00''3135821 ± 0.01%''3215434 ± 106825'     │ 3007638 │
│ 7       │ 'tsyringe''305.85 ± 0.35%''281.00 ± 10.00''3441313 ± 0.01%''3558719 ± 122293'     │ 3269599 │
└─────────┴──────────────────────────────┴──────────────────┴──────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 1.047x
inversifyCurrent vs inversify6 Speedup: 3.743x
inversifyCurrent vs inversify7 Speedup: 1.061x
inversifyCurrent vs inversify8 Speedup: 0.988x
inversifyCurrent vs awilix Speedup: 0.981x
inversifyCurrent vs NestJS Speedup: 1.244x
inversifyCurrent vs tsyringe Speedup: 1.133x

Get complex service in transient scope
┌─────────┬───────────────────────────────────────────────┬───────────────────┬───────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                                     │ Latency avg (ns)  │ Latency med (ns)  │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼───────────────────────────────────────────────┼───────────────────┼───────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''68452 ± 0.73%''64420 ± 801.00''15072 ± 0.17%''15523 ± 193'          │ 14609   │
│ 1       │ 'inversifyCurrent (Jitless)''118584 ± 0.59%''114824 ± 1623.0''8624 ± 0.20%''8709 ± 122'           │ 8434    │
│ 2       │ 'inversifyCurrent (Resolved Value)''67082 ± 0.78%''62987 ± 802.00''15405 ± 0.17%''15876 ± 202'          │ 14908   │
│ 3       │ 'inversifyCurrent (Jitless) (Resolved Value)''66351 ± 0.73%''62627 ± 811.00''15521 ± 0.16%''15968 ± 207'          │ 15072   │
│ 4       │ 'inversify6''5293311 ± 3.49%''4893637 ± 94116''195 ± 1.87%''204 ± 4'              │ 189     │
│ 5       │ 'inversify7''219323 ± 0.51%''213158 ± 1352.5''4609 ± 0.20%''4691 ± 30'            │ 4560    │
│ 6       │ 'inversify8''103290 ± 0.48%''99706 ± 1113.0''9829 ± 0.15%''10029 ± 113'          │ 9682    │
│ 7       │ 'awilix''291904 ± 0.39%''285463 ± 3732.0''3449 ± 0.20%''3503 ± 46'            │ 3426    │
│ 8       │ 'NestJS''83030 ± 1.70%''72836 ± 1713.0''13004 ± 0.27%''13729 ± 327'          │ 12044   │
│ 9       │ 'tsyringe''217633 ± 0.47%''211054 ± 1854.0''4644 ± 0.20%''4738 ± 42'            │ 4595    │
└─────────┴───────────────────────────────────────────────┴───────────────────┴───────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 1.748x
inversifyCurrent vs inversifyCurrent (Resolved Value) Speedup: 0.978x
inversifyCurrent vs inversifyCurrent (Jitless) (Resolved Value) Speedup: 0.971x
inversifyCurrent vs inversify6 Speedup: 77.434x
inversifyCurrent vs inversify7 Speedup: 3.270x
inversifyCurrent vs inversify8 Speedup: 1.533x
inversifyCurrent vs awilix Speedup: 4.370x
inversifyCurrent vs NestJS Speedup: 1.159x
inversifyCurrent vs tsyringe Speedup: 3.246x

Get complex service with properties in transient scope
┌─────────┬──────────────────────────────┬───────────────────┬────────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns)  │ Latency med (ns)   │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼───────────────────┼────────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''81581 ± 0.84%''76893 ± 962.00''12693 ± 0.19%''13005 ± 161'          │ 12258   │
│ 1       │ 'inversifyCurrent (Jitless)''168051 ± 0.67%''161030 ± 1362.0''6087 ± 0.26%''6210 ± 53'            │ 5951    │
│ 2       │ 'inversify6''5720995 ± 3.09%''5394882 ± 111238''179 ± 1.72%''185 ± 4'              │ 175     │
│ 3       │ 'inversify7''246867 ± 0.69%''237743 ± 1653.0''4114 ± 0.25%''4206 ± 29'            │ 4051    │
│ 4       │ 'inversify8''210327 ± 0.70%''204151 ± 1593.0''4838 ± 0.23%''4898 ± 38'            │ 4755    │
│ 5       │ 'NestJS''338643 ± 2.01%''297625 ± 9317.0''3183 ± 0.59%''3360 ± 107'           │ 2953    │
└─────────┴──────────────────────────────┴───────────────────┴────────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 2.085x
inversifyCurrent vs inversify6 Speedup: 70.970x
inversifyCurrent vs inversify7 Speedup: 3.085x
inversifyCurrent vs inversify8 Speedup: 2.624x
inversifyCurrent vs NestJS Speedup: 3.988x

Get complex async service in transient scope
┌─────────┬──────────────────────────────┬───────────────────┬────────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns)  │ Latency med (ns)   │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼───────────────────┼────────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''376338 ± 0.94%''357827 ± 8410.5''2720 ± 0.41%''2795 ± 66'            │ 2658    │
│ 1       │ 'inversifyCurrent (Jitless)''396670 ± 0.83%''382884 ± 7234.0''2570 ± 0.37%''2612 ± 50'            │ 2521    │
│ 2       │ 'inversify6''5240857 ± 3.72%''4742996 ± 119714''198 ± 2.08%''211 ± 5'              │ 191     │
│ 3       │ 'inversify7''650715 ± 0.78%''631598 ± 9468.0''1555 ± 0.41%''1583 ± 24'            │ 1537    │
│ 4       │ 'inversify8''384797 ± 0.89%''368827 ± 6872.0''2657 ± 0.38%''2711 ± 50'            │ 2599    │
└─────────┴──────────────────────────────┴───────────────────┴────────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 1.058x
inversifyCurrent vs inversify6 Speedup: 13.755x
inversifyCurrent vs inversify7 Speedup: 1.749x
inversifyCurrent vs inversify8 Speedup: 1.023x

@notaphplover
notaphplover merged commit 0a80cc2 into main Jul 15, 2026
11 checks passed
@notaphplover
notaphplover deleted the fix/resolution-on-csp-env branch July 15, 2026 22:54
@github-actions

Copy link
Copy Markdown
Contributor

Benchmarks results:

[CJS] Running benchmarks...

Get service in singleton scope
┌─────────┬──────────────────────────────┬──────────────────┬──────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns) │ Latency med (ns) │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼──────────────────┼──────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''292.92 ± 0.25%''260.00 ± 11.00''3692419 ± 0.02%''3846154 ± 156117'     │ 3413882 │
│ 1       │ 'inversifyCurrent (Jitless)''275.55 ± 0.17%''251.00 ± 11.00''3796479 ± 0.01%''3984064 ± 182603'     │ 3629048 │
│ 2       │ 'inversify6''1131.2 ± 0.27%''1061.0 ± 69.00''923712 ± 0.03%''942507 ± 59115'       │ 884032  │
│ 3       │ 'inversify7''343.94 ± 0.28%''311.00 ± 20.00''3064856 ± 0.02%''3215434 ± 220992'     │ 2907482 │
│ 4       │ 'inversify8''282.01 ± 0.16%''260.00 ± 11.00''3725489 ± 0.01%''3846154 ± 156117'     │ 3545964 │
│ 5       │ 'awilix''257.15 ± 0.30%''230.00 ± 10.00''4152576 ± 0.02%''4347826 ± 197629'     │ 3888742 │
│ 6       │ 'NestJS''339.13 ± 0.38%''310.00 ± 19.00''3128039 ± 0.01%''3225806 ± 195503'     │ 2948743 │
│ 7       │ 'tsyringe''340.67 ± 0.34%''310.00 ± 20.00''3115191 ± 0.02%''3225806 ± 210620'     │ 2935376 │
└─────────┴──────────────────────────────┴──────────────────┴──────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 0.973x
inversifyCurrent vs inversify6 Speedup: 3.997x
inversifyCurrent vs inversify7 Speedup: 1.205x
inversifyCurrent vs inversify8 Speedup: 0.991x
inversifyCurrent vs awilix Speedup: 0.889x
inversifyCurrent vs NestJS Speedup: 1.180x
inversifyCurrent vs tsyringe Speedup: 1.185x

Get service in transient scope
┌─────────┬──────────────────────────────┬──────────────────┬───────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns) │ Latency med (ns)  │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼──────────────────┼───────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''328.75 ± 0.29%''291.00 ± 20.00''3239415 ± 0.02%''3436426 ± 220992'     │ 3041785 │
│ 1       │ 'inversifyCurrent (Jitless)''374.32 ± 0.27%''341.00 ± 20.00''2813440 ± 0.02%''2932551 ± 162468'     │ 2671525 │
│ 2       │ 'inversify6''5667.0 ± 0.32%''5248.0 ± 121.00''183879 ± 0.06%''190549 ± 4497'        │ 176460  │
│ 3       │ 'inversify7''595.95 ± 0.14%''551.00 ± 21.00''1749360 ± 0.02%''1814882 ± 71910'      │ 1678005 │
│ 4       │ 'inversify8''340.76 ± 0.29%''310.00 ± 20.00''3105562 ± 0.02%''3225806 ± 210620'     │ 2934615 │
│ 5       │ 'awilix''461.55 ± 0.35%''421.00 ± 20.00''2283682 ± 0.02%''2375297 ± 118469'     │ 2166593 │
│ 6       │ 'NestJS''11471 ± 2.21%''9905.0 ± 370.00''96418 ± 0.10%''100959 ± 3819'        │ 87180   │
│ 7       │ 'tsyringe''465.98 ± 0.14%''430.00 ± 20.00''2241598 ± 0.02%''2325581 ± 108286'     │ 2146036 │
└─────────┴──────────────────────────────┴──────────────────┴───────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 1.151x
inversifyCurrent vs inversify6 Speedup: 17.617x
inversifyCurrent vs inversify7 Speedup: 1.852x
inversifyCurrent vs inversify8 Speedup: 1.043x
inversifyCurrent vs awilix Speedup: 1.419x
inversifyCurrent vs NestJS Speedup: 33.598x
inversifyCurrent vs tsyringe Speedup: 1.445x

Get wide service in transient scope
┌─────────┬──────────────────────────────┬──────────────────┬──────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns) │ Latency med (ns) │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼──────────────────┼──────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''578.43 ± 0.34%''541.00 ± 11.00''1804317 ± 0.01%''1848429 ± 38364'      │ 1728826 │
│ 1       │ 'inversifyCurrent (Jitless)''980.17 ± 0.13%''931.00 ± 30.00''1047064 ± 0.02%''1074114 ± 34534'      │ 1020235 │
│ 2       │ 'inversify6''24625 ± 0.34%''23165 ± 321.00''41856 ± 0.11%''43169 ± 606'          │ 40610   │
│ 3       │ 'inversify7''1695.6 ± 0.28%''1603.0 ± 31.00''609190 ± 0.02%''623830 ± 12302'       │ 589773  │
│ 4       │ 'inversify8''769.42 ± 0.30%''721.00 ± 20.00''1349240 ± 0.02%''1386963 ± 37435'      │ 1299681 │
│ 5       │ 'awilix''1539.4 ± 0.31%''1462.0 ± 40.00''668734 ± 0.02%''683995 ± 19240'       │ 649607  │
│ 6       │ 'NestJS''25898 ± 1.44%''23375 ± 731.00''41287 ± 0.13%''42781 ± 1342'         │ 38613   │
│ 7       │ 'tsyringe''1396.1 ± 0.15%''1332.0 ± 30.00''734652 ± 0.02%''750751 ± 16536'       │ 716296  │
└─────────┴──────────────────────────────┴──────────────────┴──────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 1.723x
inversifyCurrent vs inversify6 Speedup: 43.108x
inversifyCurrent vs inversify7 Speedup: 2.962x
inversifyCurrent vs inversify8 Speedup: 1.337x
inversifyCurrent vs awilix Speedup: 2.698x
inversifyCurrent vs NestJS Speedup: 43.701x
inversifyCurrent vs tsyringe Speedup: 2.456x

Get complex service in singleton scope
┌─────────┬──────────────────────────────┬──────────────────┬──────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns) │ Latency med (ns) │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼──────────────────┼──────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''298.13 ± 0.25%''271.00 ± 11.00''3503343 ± 0.01%''3690037 ± 156117'     │ 3354252 │
│ 1       │ 'inversifyCurrent (Jitless)''308.94 ± 0.12%''281.00 ± 11.00''3385583 ± 0.01%''3558719 ± 144985'     │ 3236895 │
│ 2       │ 'inversify6''1199.0 ± 1.56%''1121.0 ± 69.00''874264 ± 0.03%''892061 ± 53134'       │ 834064  │
│ 3       │ 'inversify7''361.11 ± 0.32%''321.00 ± 20.00''2940340 ± 0.02%''3115265 ± 206994'     │ 2769262 │
│ 4       │ 'inversify8''289.70 ± 0.16%''270.00 ± 11.00''3599813 ± 0.01%''3703704 ± 144985'     │ 3451819 │
│ 5       │ 'awilix''281.12 ± 0.27%''260.00 ± 19.00''3759788 ± 0.01%''3846154 ± 303224'     │ 3557157 │
│ 6       │ 'NestJS''349.25 ± 0.19%''320.00 ± 20.00''2997924 ± 0.02%''3125000 ± 197259'     │ 2863249 │
│ 7       │ 'tsyringe''344.98 ± 0.33%''311.00 ± 20.00''3077442 ± 0.02%''3215434 ± 220992'     │ 2898679 │
└─────────┴──────────────────────────────┴──────────────────┴──────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 1.035x
inversifyCurrent vs inversify6 Speedup: 4.007x
inversifyCurrent vs inversify7 Speedup: 1.191x
inversifyCurrent vs inversify8 Speedup: 0.973x
inversifyCurrent vs awilix Speedup: 0.932x
inversifyCurrent vs NestJS Speedup: 1.169x
inversifyCurrent vs tsyringe Speedup: 1.138x

Get complex service in transient scope
┌─────────┬───────────────────────────────────────────────┬───────────────────┬───────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                                     │ Latency avg (ns)  │ Latency med (ns)  │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼───────────────────────────────────────────────┼───────────────────┼───────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''68656 ± 0.60%''65830 ± 550.50''14870 ± 0.14%''15191 ± 128'          │ 14566   │
│ 1       │ 'inversifyCurrent (Jitless)''119668 ± 0.50%''114693 ± 1372.0''8526 ± 0.20%''8719 ± 104'           │ 8357    │
│ 2       │ 'inversifyCurrent (Resolved Value)''67622 ± 0.57%''64878 ± 531.00''15098 ± 0.14%''15414 ± 127'          │ 14789   │
│ 3       │ 'inversifyCurrent (Jitless) (Resolved Value)''67612 ± 0.55%''64868 ± 581.00''15096 ± 0.14%''15416 ± 137'          │ 14791   │
│ 4       │ 'inversify6''5108672 ± 2.59%''4834784 ± 39577''199 ± 1.49%''207 ± 2'              │ 196     │
│ 5       │ 'inversify7''273731 ± 0.45%''267239 ± 1893.0''3681 ± 0.19%''3742 ± 27'            │ 3654    │
│ 6       │ 'inversify8''109662 ± 0.42%''107192 ± 1622.0''9230 ± 0.14%''9329 ± 142'           │ 9119    │
│ 7       │ 'awilix''292019 ± 0.34%''285842 ± 2253.0''3443 ± 0.19%''3498 ± 28'            │ 3425    │
│ 8       │ 'NestJS''82282 ± 1.67%''74763 ± 1582.0''12922 ± 0.21%''13376 ± 285'          │ 12154   │
│ 9       │ 'tsyringe''221706 ± 0.44%''215686 ± 2133.0''4554 ± 0.20%''4636 ± 46'            │ 4511    │
└─────────┴───────────────────────────────────────────────┴───────────────────┴───────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 1.744x
inversifyCurrent vs inversifyCurrent (Resolved Value) Speedup: 0.985x
inversifyCurrent vs inversifyCurrent (Jitless) (Resolved Value) Speedup: 0.985x
inversifyCurrent vs inversify6 Speedup: 74.547x
inversifyCurrent vs inversify7 Speedup: 4.040x
inversifyCurrent vs inversify8 Speedup: 1.611x
inversifyCurrent vs awilix Speedup: 4.319x
inversifyCurrent vs NestJS Speedup: 1.151x
inversifyCurrent vs tsyringe Speedup: 3.265x

Get complex service with properties in transient scope
┌─────────┬──────────────────────────────┬───────────────────┬───────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns)  │ Latency med (ns)  │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼───────────────────┼───────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''84022 ± 0.66%''79860 ± 701.00''12192 ± 0.17%''12522 ± 111'          │ 11902   │
│ 1       │ 'inversifyCurrent (Jitless)''155808 ± 0.54%''151602 ± 1315.0''6499 ± 0.17%''6596 ± 57'            │ 6419    │
│ 2       │ 'inversify6''5505218 ± 2.56%''5223802 ± 44547''185 ± 1.51%''191 ± 2'              │ 182     │
│ 3       │ 'inversify7''343331 ± 0.64%''334415 ± 2894.0''2945 ± 0.26%''2990 ± 26'            │ 2913    │
│ 4       │ 'inversify8''200799 ± 0.64%''193101 ± 3244.0''5058 ± 0.22%''5179 ± 88'            │ 4981    │
│ 5       │ 'NestJS''342897 ± 2.20%''303759 ± 7601.0''3137 ± 0.54%''3292 ± 83'            │ 2917    │
└─────────┴──────────────────────────────┴───────────────────┴───────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 1.876x
inversifyCurrent vs inversify6 Speedup: 65.961x
inversifyCurrent vs inversify7 Speedup: 4.140x
inversifyCurrent vs inversify8 Speedup: 2.411x
inversifyCurrent vs NestJS Speedup: 3.887x

Get complex async service in transient scope
┌─────────┬──────────────────────────────┬───────────────────┬────────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns)  │ Latency med (ns)   │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼───────────────────┼────────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''342228 ± 0.93%''324370 ± 8022.0''2997 ± 0.40%''3083 ± 77'            │ 2923    │
│ 1       │ 'inversifyCurrent (Jitless)''386703 ± 0.88%''370340 ± 13691''2644 ± 0.40%''2700 ± 101'           │ 2587    │
│ 2       │ 'inversify6''5097173 ± 2.68%''4759673 ± 103557''201 ± 1.67%''210 ± 5'              │ 197     │
│ 3       │ 'inversify7''684761 ± 0.78%''665445 ± 7070.0''1477 ± 0.41%''1503 ± 16'            │ 1461    │
│ 4       │ 'inversify8''355967 ± 0.80%''342292 ± 7781.5''2866 ± 0.35%''2921 ± 67'            │ 2810    │
└─────────┴──────────────────────────────┴───────────────────┴────────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 1.133x
inversifyCurrent vs inversify6 Speedup: 14.945x
inversifyCurrent vs inversify7 Speedup: 2.029x
inversifyCurrent vs inversify8 Speedup: 1.046x
[ESM] Running benchmarks...

Get service in singleton scope
┌─────────┬──────────────────────────────┬──────────────────┬──────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns) │ Latency med (ns) │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼──────────────────┼──────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''269.99 ± 0.17%''250.00 ± 10.00''3869620 ± 0.01%''4000000 ± 166667'     │ 3703796 │
│ 1       │ 'inversifyCurrent (Jitless)''261.28 ± 0.14%''240.00 ± 10.00''4012309 ± 0.01%''4166667 ± 181159'     │ 3827366 │
│ 2       │ 'inversify6''1082.1 ± 0.31%''1001.0 ± 70.00''978148 ± 0.03%''999001 ± 73960'       │ 924169  │
│ 3       │ 'inversify7''300.97 ± 0.12%''280.00 ± 20.00''3476354 ± 0.02%''3571429 ± 274725'     │ 3322630 │
│ 4       │ 'inversify8''293.50 ± 0.12%''270.00 ± 11.00''3562694 ± 0.01%''3703704 ± 144985'     │ 3407172 │
│ 5       │ 'awilix''255.09 ± 0.25%''230.00 ± 11.00''4169511 ± 0.01%''4347826 ± 198448'     │ 3920177 │
│ 6       │ 'NestJS''342.80 ± 0.31%''310.00 ± 11.00''3086835 ± 0.02%''3225806 ± 110542'     │ 2917116 │
│ 7       │ 'tsyringe''323.20 ± 0.32%''290.00 ± 20.00''3314566 ± 0.02%''3448276 ± 241761'     │ 3094067 │
└─────────┴──────────────────────────────┴──────────────────┴──────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 0.964x
inversifyCurrent vs inversify6 Speedup: 3.956x
inversifyCurrent vs inversify7 Speedup: 1.113x
inversifyCurrent vs inversify8 Speedup: 1.086x
inversifyCurrent vs awilix Speedup: 0.928x
inversifyCurrent vs NestJS Speedup: 1.254x
inversifyCurrent vs tsyringe Speedup: 1.167x

Get service in transient scope
┌─────────┬──────────────────────────────┬──────────────────┬───────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns) │ Latency med (ns)  │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼──────────────────┼───────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''322.98 ± 1.29%''291.00 ± 19.00''3298882 ± 0.02%''3436426 ± 210620'     │ 3096193 │
│ 1       │ 'inversifyCurrent (Jitless)''373.74 ± 0.23%''350.00 ± 19.00''2793016 ± 0.01%''2857143 ± 161725'     │ 2675646 │
│ 2       │ 'inversify6''5640.9 ± 0.50%''5258.0 ± 130.00''184443 ± 0.06%''190186 ± 4821'        │ 177278  │
│ 3       │ 'inversify7''527.48 ± 0.31%''481.00 ± 30.00''2002133 ± 0.02%''2079002 ± 138293'     │ 1895806 │
│ 4       │ 'inversify8''350.89 ± 0.25%''320.00 ± 19.00''3029124 ± 0.02%''3125000 ± 197259'     │ 2849917 │
│ 5       │ 'awilix''455.77 ± 0.32%''420.00 ± 11.00''2301361 ± 0.02%''2380952 ± 60767'      │ 2194083 │
│ 6       │ 'NestJS''11467 ± 2.14%''9935.0 ± 361.00''96304 ± 0.10%''100654 ± 3717'        │ 87210   │
│ 7       │ 'tsyringe''448.30 ± 0.14%''411.00 ± 20.00''2335317 ± 0.02%''2433090 ± 124455'     │ 2230639 │
└─────────┴──────────────────────────────┴──────────────────┴───────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 1.181x
inversifyCurrent vs inversify6 Speedup: 17.886x
inversifyCurrent vs inversify7 Speedup: 1.648x
inversifyCurrent vs inversify8 Speedup: 1.089x
inversifyCurrent vs awilix Speedup: 1.433x
inversifyCurrent vs NestJS Speedup: 34.255x
inversifyCurrent vs tsyringe Speedup: 1.413x

Get wide service in transient scope
┌─────────┬──────────────────────────────┬──────────────────┬──────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns) │ Latency med (ns) │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼──────────────────┼──────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''581.15 ± 0.34%''550.00 ± 19.00''1790393 ± 0.01%''1818182 ± 65057'      │ 1720713 │
│ 1       │ 'inversifyCurrent (Jitless)''962.70 ± 0.13%''912.00 ± 21.00''1066073 ± 0.02%''1096491 ± 25843'      │ 1038740 │
│ 2       │ 'inversify6''24890 ± 0.35%''23335 ± 341.00''41505 ± 0.11%''42854 ± 634'          │ 40178   │
│ 3       │ 'inversify7''1368.6 ± 0.27%''1282.0 ± 21.00''757735 ± 0.02%''780031 ± 12990'       │ 730665  │
│ 4       │ 'inversify8''767.49 ± 0.29%''731.00 ± 20.00''1348656 ± 0.01%''1367989 ± 36505'      │ 1302942 │
│ 5       │ 'awilix''1404.9 ± 0.31%''1332.0 ± 50.00''733997 ± 0.02%''750751 ± 27162'       │ 711808  │
│ 6       │ 'NestJS''25524 ± 1.34%''23215 ± 571.00''41661 ± 0.12%''43076 ± 1067'         │ 39179   │
│ 7       │ 'tsyringe''1361.2 ± 0.13%''1292.0 ± 30.00''752951 ± 0.02%''773994 ± 17564'       │ 734663  │
└─────────┴──────────────────────────────┴──────────────────┴──────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 1.679x
inversifyCurrent vs inversify6 Speedup: 43.137x
inversifyCurrent vs inversify7 Speedup: 2.363x
inversifyCurrent vs inversify8 Speedup: 1.328x
inversifyCurrent vs awilix Speedup: 2.439x
inversifyCurrent vs NestJS Speedup: 42.976x
inversifyCurrent vs tsyringe Speedup: 2.378x

Get complex service in singleton scope
┌─────────┬──────────────────────────────┬──────────────────┬──────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns) │ Latency med (ns) │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼──────────────────┼──────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''293.66 ± 0.26%''270.00 ± 10.00''3558927 ± 0.01%''3703704 ± 142450'     │ 3405278 │
│ 1       │ 'inversifyCurrent (Jitless)''287.15 ± 0.16%''261.00 ± 11.00''3666120 ± 0.01%''3831418 ± 168582'     │ 3482505 │
│ 2       │ 'inversify6''1073.8 ± 2.00%''991.00 ± 70.00''987027 ± 0.03%''1009082 ± 75517'      │ 931246  │
│ 3       │ 'inversify7''302.92 ± 0.13%''271.00 ± 11.00''3484796 ± 0.02%''3690037 ± 156117'     │ 3301219 │
│ 4       │ 'inversify8''284.04 ± 0.15%''260.00 ± 11.00''3691773 ± 0.01%''3846154 ± 156117'     │ 3520610 │
│ 5       │ 'awilix''285.74 ± 0.25%''260.00 ± 19.00''3704340 ± 0.02%''3846154 ± 274725'     │ 3499678 │
│ 6       │ 'NestJS''338.16 ± 0.15%''311.00 ± 11.00''3081545 ± 0.01%''3215434 ± 117899'     │ 2957151 │
│ 7       │ 'tsyringe''318.42 ± 0.35%''290.00 ± 19.00''3339548 ± 0.02%''3448276 ± 241761'     │ 3140555 │
└─────────┴──────────────────────────────┴──────────────────┴──────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 0.971x
inversifyCurrent vs inversify6 Speedup: 3.606x
inversifyCurrent vs inversify7 Speedup: 1.021x
inversifyCurrent vs inversify8 Speedup: 0.964x
inversifyCurrent vs awilix Speedup: 0.961x
inversifyCurrent vs NestJS Speedup: 1.155x
inversifyCurrent vs tsyringe Speedup: 1.066x

Get complex service in transient scope
┌─────────┬───────────────────────────────────────────────┬───────────────────┬───────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                                     │ Latency avg (ns)  │ Latency med (ns)  │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼───────────────────────────────────────────────┼───────────────────┼───────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''67897 ± 0.55%''64938 ± 561.00''15047 ± 0.15%''15399 ± 132'          │ 14729   │
│ 1       │ 'inversifyCurrent (Jitless)''121074 ± 0.41%''118119 ± 1391.0''8342 ± 0.14%''8466 ± 100'           │ 8260    │
│ 2       │ 'inversifyCurrent (Resolved Value)''67373 ± 0.58%''64517 ± 662.00''15157 ± 0.14%''15500 ± 160'          │ 14843   │
│ 3       │ 'inversifyCurrent (Jitless) (Resolved Value)''68434 ± 0.55%''65660 ± 1293.0''14912 ± 0.14%''15230 ± 301'          │ 14613   │
│ 4       │ 'inversify6''5459587 ± 2.70%''5167647 ± 38067''187 ± 1.49%''194 ± 1'              │ 184     │
│ 5       │ 'inversify7''233123 ± 0.70%''224610 ± 1592.0''4360 ± 0.24%''4452 ± 32'            │ 4290    │
│ 6       │ 'inversify8''109029 ± 0.45%''106231 ± 2093.0''9282 ± 0.14%''9413 ± 186'           │ 9172    │
│ 7       │ 'awilix''294082 ± 0.34%''288145 ± 2514.0''3419 ± 0.19%''3470 ± 30'            │ 3401    │
│ 8       │ 'NestJS''82142 ± 1.64%''73907 ± 1667.5''12954 ± 0.22%''13531 ± 308'          │ 12174   │
│ 9       │ 'tsyringe''219401 ± 0.47%''212240 ± 1592.5''4611 ± 0.22%''4712 ± 36'            │ 4558    │
└─────────┴───────────────────────────────────────────────┴───────────────────┴───────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 1.804x
inversifyCurrent vs inversifyCurrent (Resolved Value) Speedup: 0.993x
inversifyCurrent vs inversifyCurrent (Jitless) (Resolved Value) Speedup: 1.009x
inversifyCurrent vs inversify6 Speedup: 80.677x
inversifyCurrent vs inversify7 Speedup: 3.451x
inversifyCurrent vs inversify8 Speedup: 1.621x
inversifyCurrent vs awilix Speedup: 4.401x
inversifyCurrent vs NestJS Speedup: 1.162x
inversifyCurrent vs tsyringe Speedup: 3.263x

Get complex service with properties in transient scope
┌─────────┬──────────────────────────────┬───────────────────┬───────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns)  │ Latency med (ns)  │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼───────────────────┼───────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''82703 ± 0.72%''77377 ± 816.50''12479 ± 0.20%''12924 ± 137'          │ 12092   │
│ 1       │ 'inversifyCurrent (Jitless)''167620 ± 0.58%''164007 ± 4506.0''6052 ± 0.20%''6097 ± 171'           │ 5966    │
│ 2       │ 'inversify6''5650039 ± 3.31%''5252568 ± 46571''182 ± 1.82%''190 ± 2'              │ 177     │
│ 3       │ 'inversify7''275061 ± 0.92%''263217 ± 2383.0''3716 ± 0.29%''3799 ± 35'            │ 3636    │
│ 4       │ 'inversify8''210866 ± 0.70%''202726 ± 3585.0''4834 ± 0.26%''4933 ± 88'            │ 4743    │
│ 5       │ 'NestJS''342514 ± 1.89%''301280 ± 8527.5''3122 ± 0.58%''3319 ± 96'            │ 2920    │
└─────────┴──────────────────────────────┴───────────────────┴───────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 2.062x
inversifyCurrent vs inversify6 Speedup: 68.690x
inversifyCurrent vs inversify7 Speedup: 3.358x
inversifyCurrent vs inversify8 Speedup: 2.581x
inversifyCurrent vs NestJS Speedup: 3.997x

Get complex async service in transient scope
┌─────────┬──────────────────────────────┬───────────────────┬───────────────────┬────────────────────────┬────────────────────────┬─────────┐
│ (index) │ Task name                    │ Latency avg (ns)  │ Latency med (ns)  │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │
├─────────┼──────────────────────────────┼───────────────────┼───────────────────┼────────────────────────┼────────────────────────┼─────────┤
│ 0       │ 'inversifyCurrent''360168 ± 0.85%''342798 ± 12799''2842 ± 0.42%''2917 ± 110'           │ 2777    │
│ 1       │ 'inversifyCurrent (Jitless)''398492 ± 0.88%''381436 ± 12554''2566 ± 0.41%''2622 ± 88'            │ 2510    │
│ 2       │ 'inversify6''5105825 ± 3.30%''4698398 ± 59494''201 ± 1.81%''213 ± 3'              │ 196     │
│ 3       │ 'inversify7''632758 ± 0.89%''616181 ± 6320.0''1601 ± 0.39%''1623 ± 17'            │ 1581    │
│ 4       │ 'inversify8''407840 ± 1.43%''371511 ± 10136''2582 ± 0.59%''2692 ± 74'            │ 2452    │
└─────────┴──────────────────────────────┴───────────────────┴───────────────────┴────────────────────────┴────────────────────────┴─────────┘
inversifyCurrent vs inversifyCurrent (Jitless) Speedup: 1.108x
inversifyCurrent vs inversify6 Speedup: 14.108x
inversifyCurrent vs inversify7 Speedup: 1.775x
inversifyCurrent vs inversify8 Speedup: 1.101x

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: v8.1.3 requires CSP with unsafe-eval enabled

1 participant