UNPKG

inversify

Version:

A powerful and lightweight inversion of control container for JavaScript and Node.js apps powered by TypeScript.

71 lines 2.91 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; import { describe, expect, it } from 'vitest'; import { Container, inject, injectable, named, optional } from '../../index.js'; describe('Issue 1190', () => { it('should inject a katana as default weapon to ninja', () => { // eslint-disable-next-line @typescript-eslint/typedef const TYPES = { Weapon: 'Weapon', }; // eslint-disable-next-line @typescript-eslint/typedef const TAG = { throwable: 'throwable', }; let Katana = class Katana { name; constructor() { this.name = 'Katana'; } }; Katana = __decorate([ injectable(), __metadata("design:paramtypes", []) ], Katana); let Shuriken = class Shuriken { name; constructor() { this.name = 'Shuriken'; } }; Shuriken = __decorate([ injectable(), __metadata("design:paramtypes", []) ], Shuriken); let Ninja = class Ninja { name; katana; shuriken; constructor(katana, shuriken) { this.name = 'Ninja'; this.katana = katana; this.shuriken = shuriken; } }; Ninja = __decorate([ injectable(), __param(0, inject(TYPES.Weapon)), __param(0, optional()), __param(1, inject(TYPES.Weapon)), __param(1, named(TAG.throwable)), __metadata("design:paramtypes", [Object, Object]) ], Ninja); const container = new Container(); container.bind(TYPES.Weapon).to(Katana).whenDefault(); container.bind(TYPES.Weapon).to(Shuriken).whenNamed(TAG.throwable); container.bind('Ninja').to(Ninja); const ninja = container.get('Ninja'); expect(ninja.katana).toStrictEqual(new Katana()); }); }); //# sourceMappingURL=issue_1190.test.js.map