From 8313ae884b4b6fed140b85b7fe85e56a339204e3 Mon Sep 17 00:00:00 2001 From: notaphplover Date: Tue, 26 Nov 2024 02:25:42 +0100 Subject: [PATCH] chore: auto update reflect metadata module (#1648) updated entrypoint to auto import reflect metadata updated docs updated tsconfig with modern NodeJS module resolution removed unused ancient builds simplified CI --- .github/workflows/ci.yml | 2 +- .gitignore | 21 ----------------- CHANGELOG.md | 1 + README.md | 21 +++++------------ package-lock.json | 7 ++++-- package.json | 10 ++++---- src/inversify.ts | 2 ++ src/tsconfig-amd.json | 10 -------- src/tsconfig-es6.json | 10 -------- test/annotation/inject.test.ts | 2 +- test/annotation/multi_inject.test.ts | 2 +- test/annotation/named.test.ts | 2 +- test/annotation/tagged.test.ts | 2 +- test/annotation/target_name.test.ts | 2 +- test/container/container.test.ts | 2 +- test/container/container_module.test.ts | 2 +- test/container/lookup.test.ts | 2 +- .../container/module_activation_store.test.ts | 2 +- test/features/metadata_reader.test.ts | 2 +- test/inversify.test.ts | 2 +- test/middleware/middleware.test.ts | 2 +- test/node/proxies.test.ts | 2 +- test/planning/planner.test.ts | 2 +- test/planning/request.test.ts | 2 +- test/resolution/resolver.test.ts | 2 +- test/syntax/binding_in_when_on_syntax.test.ts | 2 +- test/syntax/binding_on_syntax.test.ts | 2 +- test/syntax/binding_to_syntax.test.ts | 2 +- test/syntax/binding_when_on_syntax.test.ts | 2 +- test/syntax/binding_when_syntax.test.ts | 2 +- tsconfig.json | 16 ++++--------- wiki/basic_js_example.md | 1 - wiki/classes_as_id.md | 3 --- wiki/environment.md | 23 +------------------ wiki/injecting_npm_modules.md | 4 +--- wiki/installation.md | 19 ++++++--------- wiki/javascript.md | 2 -- wiki/recipes.md | 2 -- 38 files changed, 54 insertions(+), 142 deletions(-) delete mode 100644 src/tsconfig-amd.json delete mode 100644 src/tsconfig-es6.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index dc79b4d65..0c5db9051 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,7 +14,7 @@ jobs: matrix: node-version: [20.x, 22.x] os: [ubuntu-latest, windows-latest] - ts-project: [src/tsconfig.json, src/tsconfig-es6.json] + ts-project: [src/tsconfig.json] exclude: - node-version: 22.x os: ubuntu-latest diff --git a/.gitignore b/.gitignore index 3df7705aa..cc5ed6313 100644 --- a/.gitignore +++ b/.gitignore @@ -7,39 +7,18 @@ pids *.pid *.seed -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - # Coverage directory used by tools like istanbul coverage -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release -build - # Dependency directory # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git -build node_modules -bower_components -docs -bundled -typings -.typingsrc dist dts lib temp es -es6 -amd type_definitions/inversify/*.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 388682aed..afe561751 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added ### Changed +- Updated library to import `reflect-metadata`. Importing `reflect-metadata` before bootstraping a module in the userland is no longer required. ### Fixed - Fixed container to properly resolve async `.toService` bindings. diff --git a/README.md b/README.md index 23c67e101..fa2f13c95 100644 --- a/README.md +++ b/README.md @@ -63,24 +63,18 @@ You can get the latest release and the type definitions using your preferred pac > pnpm add inversify reflect-metadata ``` -> ❕**Hint!** If you want to use a more type-safe version of reflect-metadata, try [`@abraham/reflection`](https://www.npmjs.com/package/@abraham/reflection) +`reflect-metadata` will be automatically imported by inversify. The InversifyJS type definitions are included in the inversify npm package. -> :warning: **Important!** InversifyJS requires TypeScript >= 4.4 and the `experimentalDecorators`, `emitDecoratorMetadata`, `types` and `lib` -compilation options in your `tsconfig.json` file. +> :warning: **Important!** InversifyJS requires TypeScript >= 4.4 and the `experimentalDecorators`, `emitDecoratorMetadata`, compilation options in your `tsconfig.json` file. ```json { - "compilerOptions": { - "target": "es5", - "lib": ["es6"], - "types": ["reflect-metadata"], - "module": "commonjs", - "moduleResolution": "node", - "experimentalDecorators": true, - "emitDecoratorMetadata": true - } + "compilerOptions": { + "experimentalDecorators": true, + "emitDecoratorMetadata": true + } } ``` @@ -93,8 +87,6 @@ InversifyJS requires a modern JavaScript engine with support for: If your environment doesn't support one of these you will need to import a shim or polyfill. -> :warning: **The `reflect-metadata` polyfill should be imported only once in your entire application** because the Reflect object is meant to be a global singleton. More details about this can be found [here](https://github.com/inversify/InversifyJS/issues/262#issuecomment-227593844). - Check out the [Environment support and polyfills](https://github.com/inversify/InversifyJS/blob/master/wiki/environment.md) page in the wiki and the [Basic example](https://github.com/inversify/inversify-basic-example) to learn more. @@ -152,7 +144,6 @@ When a class has a dependency on an interface we also need to use the `@inject` // file entities.ts import { injectable, inject } from "inversify"; -import "reflect-metadata"; import { Weapon, ThrowableWeapon, Warrior } from "./interfaces"; import { TYPES } from "./types"; diff --git a/package-lock.json b/package-lock.json index a44ff6e9e..109d68efb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,7 +28,6 @@ "nyc": "17.1.0", "prettier": "3.3.3", "publish-please": "5.5.2", - "reflect-metadata": "0.2.2", "rimraf": "6.0.1", "sinon": "19.0.2", "ts-loader": "9.5.1", @@ -38,6 +37,9 @@ "updates": "16.4.0", "webpack": "5.96.1", "webpack-cli": "5.1.4" + }, + "peerDependencies": { + "reflect-metadata": "~0.2.2" } }, "node_modules/@ampproject/remapping": { @@ -6242,7 +6244,8 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", - "license": "Apache-2.0" + "license": "Apache-2.0", + "peer": true }, "node_modules/regex-not": { "version": "1.0.2", diff --git a/package.json b/package.json index 911e4eb43..2bc61d142 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,6 @@ "nyc": "17.1.0", "prettier": "3.3.3", "publish-please": "5.5.2", - "reflect-metadata": "0.2.2", "rimraf": "6.0.1", "sinon": "19.0.2", "ts-loader": "9.5.1", @@ -35,6 +34,9 @@ "webpack": "5.96.1", "webpack-cli": "5.1.4" }, + "peerDependencies": { + "reflect-metadata": "~0.2.2" + }, "engines": {}, "homepage": "http://inversify.io", "jsnext:main": "es/inversify.js", @@ -63,12 +65,10 @@ "url": "https://github.com/inversify/InversifyJS.git" }, "scripts": { - "build": "npm run build:lib && npm run build:amd && npm run build:es && npm run build:es6", - "build:amd": "tsc -p src/tsconfig-amd.json", + "build": "npm run build:lib && npm run build:es", "build:es": "webpack && node ./scripts/writeEsmPackageJson.mjs ./es", - "build:es6": "tsc -p src/tsconfig-es6.json", "build:lib": "tsc -p src/tsconfig.json", - "clean": "rimraf amd es es6 lib", + "clean": "rimraf es lib", "format": "prettier --write ./src/*.ts ./src/**/*.ts ./test/*.ts ./test/**/*.ts", "lint": "eslint ./src ./test", "postupdate": "git diff-files --quiet package-lock.json || npm test", diff --git a/src/inversify.ts b/src/inversify.ts index a650281b9..dd69ae8f3 100644 --- a/src/inversify.ts +++ b/src/inversify.ts @@ -1,3 +1,5 @@ +import 'reflect-metadata'; + import * as keys from './constants/metadata_keys'; export { LazyServiceIdentifier } from '@inversifyjs/common'; diff --git a/src/tsconfig-amd.json b/src/tsconfig-amd.json deleted file mode 100644 index 7d85a2f7f..000000000 --- a/src/tsconfig-amd.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "include": [ - "./**/*.ts" - ], - "extends": "../tsconfig.json", - "compilerOptions": { - "outDir": "../amd", - "module": "amd" - }, -} \ No newline at end of file diff --git a/src/tsconfig-es6.json b/src/tsconfig-es6.json deleted file mode 100644 index bd0c487e9..000000000 --- a/src/tsconfig-es6.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "include": [ - "./**/*.ts" - ], - "extends": "../tsconfig.json", - "compilerOptions": { - "target": "es6", - "outDir": "../es6" - }, -} \ No newline at end of file diff --git a/test/annotation/inject.test.ts b/test/annotation/inject.test.ts index 7b5035394..184189319 100644 --- a/test/annotation/inject.test.ts +++ b/test/annotation/inject.test.ts @@ -19,7 +19,7 @@ import { inject } from '../../src/annotation/inject'; import { multiInject } from '../../src/annotation/multi_inject'; import * as ERROR_MSGS from '../../src/constants/error_msgs'; import * as METADATA_KEY from '../../src/constants/metadata_keys'; -import { interfaces } from '../../src/interfaces/interfaces'; +import type { interfaces } from '../../src/interfaces/interfaces'; class Katana {} class Shuriken {} diff --git a/test/annotation/multi_inject.test.ts b/test/annotation/multi_inject.test.ts index 2fc15389b..36a485eed 100644 --- a/test/annotation/multi_inject.test.ts +++ b/test/annotation/multi_inject.test.ts @@ -17,7 +17,7 @@ import { decorate } from '../../src/annotation/decorator_utils'; import { multiInject } from '../../src/annotation/multi_inject'; import * as ERROR_MSGS from '../../src/constants/error_msgs'; import * as METADATA_KEY from '../../src/constants/metadata_keys'; -import { interfaces } from '../../src/interfaces/interfaces'; +import type { interfaces } from '../../src/interfaces/interfaces'; type Weapon = object; diff --git a/test/annotation/named.test.ts b/test/annotation/named.test.ts index ada9eb781..f4ca530f0 100644 --- a/test/annotation/named.test.ts +++ b/test/annotation/named.test.ts @@ -17,7 +17,7 @@ import { decorate } from '../../src/annotation/decorator_utils'; import { named } from '../../src/annotation/named'; import * as ERROR_MSGS from '../../src/constants/error_msgs'; import * as METADATA_KEY from '../../src/constants/metadata_keys'; -import { interfaces } from '../../src/interfaces/interfaces'; +import type { interfaces } from '../../src/interfaces/interfaces'; type Weapon = unknown; diff --git a/test/annotation/tagged.test.ts b/test/annotation/tagged.test.ts index 782ef472d..60a8f0026 100644 --- a/test/annotation/tagged.test.ts +++ b/test/annotation/tagged.test.ts @@ -17,7 +17,7 @@ import { decorate } from '../../src/annotation/decorator_utils'; import { tagged } from '../../src/annotation/tagged'; import * as ERRORS_MSGS from '../../src/constants/error_msgs'; import * as METADATA_KEY from '../../src/constants/metadata_keys'; -import { interfaces } from '../../src/interfaces/interfaces'; +import type { interfaces } from '../../src/interfaces/interfaces'; type Weapon = unknown; diff --git a/test/annotation/target_name.test.ts b/test/annotation/target_name.test.ts index 70da3d8ad..3a7a51b45 100644 --- a/test/annotation/target_name.test.ts +++ b/test/annotation/target_name.test.ts @@ -4,7 +4,7 @@ import { decorate } from '../../src/annotation/decorator_utils'; import { injectable } from '../../src/annotation/injectable'; import { targetName } from '../../src/annotation/target_name'; import * as METADATA_KEY from '../../src/constants/metadata_keys'; -import { interfaces } from '../../src/inversify'; +import type { interfaces } from '../../src/inversify'; import { Metadata } from '../../src/planning/metadata'; import * as Stubs from '../utils/stubs'; diff --git a/test/container/container.test.ts b/test/container/container.test.ts index 28b7844b4..144864ac7 100644 --- a/test/container/container.test.ts +++ b/test/container/container.test.ts @@ -9,7 +9,7 @@ import { BindingScopeEnum } from '../../src/constants/literal_types'; import { Container } from '../../src/container/container'; import { ContainerModule } from '../../src/container/container_module'; import { ModuleActivationStore } from '../../src/container/module_activation_store'; -import { interfaces } from '../../src/interfaces/interfaces'; +import type { interfaces } from '../../src/interfaces/interfaces'; import { getBindingDictionary } from '../../src/planning/planner'; import { getServiceIdentifierAsString } from '../../src/utils/serialization'; diff --git a/test/container/container_module.test.ts b/test/container/container_module.test.ts index 0db79168e..5199e19ea 100644 --- a/test/container/container_module.test.ts +++ b/test/container/container_module.test.ts @@ -7,7 +7,7 @@ import { AsyncContainerModule, ContainerModule, } from '../../src/container/container_module'; -import { interfaces } from '../../src/interfaces/interfaces'; +import type { interfaces } from '../../src/interfaces/interfaces'; describe('ContainerModule', () => { it('Should be able to set the registry of a container module', () => { diff --git a/test/container/lookup.test.ts b/test/container/lookup.test.ts index d6bdec69d..3b28e3f7a 100644 --- a/test/container/lookup.test.ts +++ b/test/container/lookup.test.ts @@ -4,7 +4,7 @@ import { Binding } from '../../src/bindings/binding'; import * as ERROR_MSGS from '../../src/constants/error_msgs'; import { BindingScopeEnum } from '../../src/constants/literal_types'; import { Lookup } from '../../src/container/lookup'; -import { interfaces } from '../../src/interfaces/interfaces'; +import type { interfaces } from '../../src/interfaces/interfaces'; class ClonableValue implements interfaces.Clonable> { public readonly val: T; diff --git a/test/container/module_activation_store.test.ts b/test/container/module_activation_store.test.ts index 3ad7653e8..acbb74247 100644 --- a/test/container/module_activation_store.test.ts +++ b/test/container/module_activation_store.test.ts @@ -1,7 +1,7 @@ import { expect } from 'chai'; import { ModuleActivationStore } from '../../src/container/module_activation_store'; -import { interfaces } from '../../src/inversify'; +import type { interfaces } from '../../src/inversify'; describe('ModuleActivationStore', () => { it('should remove handlers added by the module', () => { diff --git a/test/features/metadata_reader.test.ts b/test/features/metadata_reader.test.ts index 9382ac369..80c622b0a 100644 --- a/test/features/metadata_reader.test.ts +++ b/test/features/metadata_reader.test.ts @@ -1,7 +1,7 @@ import { expect } from 'chai'; import * as METADATA_KEY from '../../src/constants/metadata_keys'; -import { interfaces } from '../../src/interfaces/interfaces'; +import type { interfaces } from '../../src/interfaces/interfaces'; import { Container, inject, diff --git a/test/inversify.test.ts b/test/inversify.test.ts index a021b2c67..e2929b1c1 100644 --- a/test/inversify.test.ts +++ b/test/inversify.test.ts @@ -3,7 +3,7 @@ import { expect } from 'chai'; import { DecoratorTarget } from '../src/annotation/decorator_utils'; import * as ERROR_MSGS from '../src/constants/error_msgs'; -import { interfaces } from '../src/interfaces/interfaces'; +import type { interfaces } from '../src/interfaces/interfaces'; import { Container, ContainerModule, diff --git a/test/middleware/middleware.test.ts b/test/middleware/middleware.test.ts index 763f991e4..cf4ba9190 100644 --- a/test/middleware/middleware.test.ts +++ b/test/middleware/middleware.test.ts @@ -4,7 +4,7 @@ import * as sinon from 'sinon'; import { injectable } from '../../src/annotation/injectable'; import * as ERROR_MSGS from '../../src/constants/error_msgs'; import { Container } from '../../src/container/container'; -import { interfaces } from '../../src/interfaces/interfaces'; +import type { interfaces } from '../../src/interfaces/interfaces'; describe('Middleware', () => { let sandbox: sinon.SinonSandbox; diff --git a/test/node/proxies.test.ts b/test/node/proxies.test.ts index e13770394..64b515b2e 100644 --- a/test/node/proxies.test.ts +++ b/test/node/proxies.test.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; -import { interfaces } from '../../src/interfaces/interfaces'; +import type { interfaces } from '../../src/interfaces/interfaces'; import { Container, inject, injectable } from '../../src/inversify'; describe('InversifyJS', () => { diff --git a/test/planning/planner.test.ts b/test/planning/planner.test.ts index b7fb35528..71ce42905 100644 --- a/test/planning/planner.test.ts +++ b/test/planning/planner.test.ts @@ -9,7 +9,7 @@ import { targetName } from '../../src/annotation/target_name'; import * as ERROR_MSGS from '../../src/constants/error_msgs'; import { TargetTypeEnum } from '../../src/constants/literal_types'; import { Container } from '../../src/container/container'; -import { interfaces } from '../../src/interfaces/interfaces'; +import type { interfaces } from '../../src/interfaces/interfaces'; import { named } from '../../src/inversify'; import { MetadataReader } from '../../src/planning/metadata_reader'; import { Plan } from '../../src/planning/plan'; diff --git a/test/planning/request.test.ts b/test/planning/request.test.ts index 6c6ebd15c..29188b253 100644 --- a/test/planning/request.test.ts +++ b/test/planning/request.test.ts @@ -6,7 +6,7 @@ import { expect } from 'chai'; import { TargetTypeEnum } from '../../src/constants/literal_types'; import { Container } from '../../src/container/container'; -import { interfaces } from '../../src/interfaces/interfaces'; +import type { interfaces } from '../../src/interfaces/interfaces'; import { Context } from '../../src/planning/context'; import { Request } from '../../src/planning/request'; diff --git a/test/resolution/resolver.test.ts b/test/resolution/resolver.test.ts index 7a2d54a0e..806528463 100644 --- a/test/resolution/resolver.test.ts +++ b/test/resolution/resolver.test.ts @@ -15,7 +15,7 @@ import { TargetTypeEnum, } from '../../src/constants/literal_types'; import { Container } from '../../src/container/container'; -import { interfaces } from '../../src/interfaces/interfaces'; +import type { interfaces } from '../../src/interfaces/interfaces'; import { MetadataReader } from '../../src/planning/metadata_reader'; import { getBindingDictionary, plan } from '../../src/planning/planner'; import { resolveInstance } from '../../src/resolution/instantiation'; diff --git a/test/syntax/binding_in_when_on_syntax.test.ts b/test/syntax/binding_in_when_on_syntax.test.ts index d57c02e47..79431eb4c 100644 --- a/test/syntax/binding_in_when_on_syntax.test.ts +++ b/test/syntax/binding_in_when_on_syntax.test.ts @@ -4,7 +4,7 @@ import * as sinon from 'sinon'; import { injectable } from '../../src/annotation/injectable'; import { Binding } from '../../src/bindings/binding'; import { BindingScopeEnum } from '../../src/constants/literal_types'; -import { interfaces } from '../../src/interfaces/interfaces'; +import type { interfaces } from '../../src/interfaces/interfaces'; import { BindingInWhenOnSyntax } from '../../src/syntax/binding_in_when_on_syntax'; describe('BindingInWhenOnSyntax', () => { diff --git a/test/syntax/binding_on_syntax.test.ts b/test/syntax/binding_on_syntax.test.ts index ade883fd1..7c49d8c64 100644 --- a/test/syntax/binding_on_syntax.test.ts +++ b/test/syntax/binding_on_syntax.test.ts @@ -2,7 +2,7 @@ import { expect } from 'chai'; import { Binding } from '../../src/bindings/binding'; import { BindingScopeEnum } from '../../src/constants/literal_types'; -import { interfaces } from '../../src/interfaces/interfaces'; +import type { interfaces } from '../../src/interfaces/interfaces'; import { BindingOnSyntax } from '../../src/syntax/binding_on_syntax'; describe('BindingOnSyntax', () => { diff --git a/test/syntax/binding_to_syntax.test.ts b/test/syntax/binding_to_syntax.test.ts index f4a5d1137..36b9a8a43 100644 --- a/test/syntax/binding_to_syntax.test.ts +++ b/test/syntax/binding_to_syntax.test.ts @@ -9,7 +9,7 @@ import { BindingScopeEnum, BindingTypeEnum, } from '../../src/constants/literal_types'; -import { interfaces } from '../../src/interfaces/interfaces'; +import type { interfaces } from '../../src/interfaces/interfaces'; import { BindingToSyntax } from '../../src/syntax/binding_to_syntax'; describe('BindingToSyntax', () => { diff --git a/test/syntax/binding_when_on_syntax.test.ts b/test/syntax/binding_when_on_syntax.test.ts index e1b0a0eaa..6ba203f89 100644 --- a/test/syntax/binding_when_on_syntax.test.ts +++ b/test/syntax/binding_when_on_syntax.test.ts @@ -4,7 +4,7 @@ import Sinon, * as sinon from 'sinon'; import { injectable } from '../../src/annotation/injectable'; import { Binding } from '../../src/bindings/binding'; import { BindingScopeEnum } from '../../src/constants/literal_types'; -import { interfaces } from '../../src/interfaces/interfaces'; +import type { interfaces } from '../../src/interfaces/interfaces'; import { BindingWhenOnSyntax } from '../../src/syntax/binding_when_on_syntax'; describe('BindingWhenOnSyntax', () => { diff --git a/test/syntax/binding_when_syntax.test.ts b/test/syntax/binding_when_syntax.test.ts index d031538d0..fd4f76299 100644 --- a/test/syntax/binding_when_syntax.test.ts +++ b/test/syntax/binding_when_syntax.test.ts @@ -10,7 +10,7 @@ import { TargetTypeEnum, } from '../../src/constants/literal_types'; import { Container } from '../../src/container/container'; -import { interfaces } from '../../src/interfaces/interfaces'; +import type { interfaces } from '../../src/interfaces/interfaces'; import { Context } from '../../src/planning/context'; import { Request } from '../../src/planning/request'; import { BindingWhenSyntax } from '../../src/syntax/binding_when_syntax'; diff --git a/tsconfig.json b/tsconfig.json index 91359d106..87efb3aa3 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -13,12 +13,9 @@ "forceConsistentCasingInFileNames": true, "importsNotUsedAsValues": "remove", "isolatedModules": true, - "lib": [ - "esnext", - "dom" - ], - "module": "commonjs", - "moduleResolution": "node", + "lib": ["ES2022"], + "module": "NodeNext", + "moduleResolution": "nodenext", "noErrorTruncation": true, "noFallthroughCasesInSwitch": true, "noImplicitAny": true, @@ -36,12 +33,7 @@ "skipLibCheck": true, "sourceMap": false, "strict": true, - "target": "es5", - "types": [ - "mocha", - "reflect-metadata", - "node" - ] + "target": "ES2022", }, "exclude": [ "node_modules" diff --git a/wiki/basic_js_example.md b/wiki/basic_js_example.md index 2a14dd39e..0788f6461 100644 --- a/wiki/basic_js_example.md +++ b/wiki/basic_js_example.md @@ -4,7 +4,6 @@ if you prefer. The following code snippet implements the previous example withou ```js var inversify = require("inversify"); -require("reflect-metadata"); var TYPES = { Ninja: "Ninja", diff --git a/wiki/classes_as_id.md b/wiki/classes_as_id.md index 319dc63a9..f95bc753e 100644 --- a/wiki/classes_as_id.md +++ b/wiki/classes_as_id.md @@ -3,7 +3,6 @@ InversifyJS allows your classes to have a direct dependency on other classes. The `@inject` decorator is not required when you use classes. The annotation is not required because the typescript compiler generates the metadata for us. However, this won't happen if you forget one of the following things: -- Import `reflect-metadata` - Set `emitDecoratorMetadata` to `true` in `tsconfig.json`. ```ts @@ -67,7 +66,6 @@ An exception: Will be thrown if we use classes as identifiers in circular dependencies. For example: ```ts -import "reflect-metadata"; import { Container, injectable } from "inversify"; import getDecorators from "inversify-inject-decorators"; @@ -104,7 +102,6 @@ This error may seem a bit misleading because when using classes as service ident The solution is to use symbols like `Symbol.for("Dom")` as service identifiers instead of the classes like `Dom`: ```ts -import "reflect-metadata"; import { Container, injectable, inject } from "inversify"; import getDecorators from "inversify-inject-decorators"; diff --git a/wiki/environment.md b/wiki/environment.md index 1a3b4a923..4051705ad 100644 --- a/wiki/environment.md +++ b/wiki/environment.md @@ -8,34 +8,13 @@ InversifyJS requires a modern JavaScript engine with support for the If your environment don't support one of these you will need to import a shim or polyfill. ## Metadata Reflection API -> :warning: **The `reflect-metadata` polyfill should be imported only once in your entire application** because the Reflect object is mean to be a global singleton. More details about this can be found [here](https://github.com/inversify/InversifyJS/issues/262#issuecomment-227593844). - Required always. Use [reflect-metadata](https://www.npmjs.com/package/reflect-metadata) as polyfill. ``` $ npm install reflect-metadata ``` -The type definitions for reflect-metadata are included in the npm package. You need to add the following -reference to the types field in your `tsconfig.json`: - -``` -"types": ["reflect-metadata"] -``` - -Finally, import reflect-metadata. If you are working in Node.js you can use: - -``` -import "reflect-metadata"; -``` - -If you are working in a web browser you can use a script tag: - -``` - -``` - -This will create the Reflect object as a global. +`reflect-metadata` will be automatically imported by inversify. This will create the Reflect object as a global. ## Map [Maps](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) are required when using InversifyJS 3 or higher. diff --git a/wiki/injecting_npm_modules.md b/wiki/injecting_npm_modules.md index a2746ff26..591e9e218 100644 --- a/wiki/injecting_npm_modules.md +++ b/wiki/injecting_npm_modules.md @@ -107,7 +107,6 @@ export { SomeClass }; ### /src/index.ts ```ts -import "reflect-metadata"; import { container } from "./ioc/ioc"; import { SomeClassInterface } from "./ioc/interfaces"; import { TYPES } from "./ioc/types"; @@ -133,7 +132,7 @@ someClassInstance.test(); "dependencies": { "inversify": "^4.1.0", "lodash": "^4.17.4", - "reflect-metadata": "^0.1.10", + "reflect-metadata": "~0.2.2", "sequelize": "^3.30.4" }, "devDependencies": { @@ -150,7 +149,6 @@ someClassInstance.test(); "compilerOptions": { "target": "es5", "lib": ["es6", "dom"], - "types": ["reflect-metadata"], "module": "commonjs", "moduleResolution": "node", "experimentalDecorators": true, diff --git a/wiki/installation.md b/wiki/installation.md index 65aa8b189..bb35b0d1a 100644 --- a/wiki/installation.md +++ b/wiki/installation.md @@ -3,27 +3,22 @@ You can get the latest release and the type definitions using npm: ``` -npm install inversify@5.0.5 reflect-metadata --save +npm install inversify reflect-metadata --save ``` Or using yarn: ``` -yarn add inversify@5.0.5 reflect-metadata +yarn add inversify reflect-metadata ``` The InversifyJS type definitions are included in the inversify npm package. InversifyJS requires the `experimentalDecorators`, `emitDecoratorMetadata`and `lib` compilation options in your `tsconfig.json` file. -```js +```json { - "compilerOptions": { - "target": "es5", - "lib": ["es6"], - "types": ["reflect-metadata"], - "module": "commonjs", - "moduleResolution": "node", - "experimentalDecorators": true, - "emitDecoratorMetadata": true - } + "compilerOptions": { + "experimentalDecorators": true, + "emitDecoratorMetadata": true + } } ``` diff --git a/wiki/javascript.md b/wiki/javascript.md index dd24d657d..605ba617e 100644 --- a/wiki/javascript.md +++ b/wiki/javascript.md @@ -1,7 +1,6 @@ # Inversify with ES5 ```js var inversify = require("inversify"); -require("reflect-metadata"); var TYPES = { Ninja: "Ninja", @@ -72,7 +71,6 @@ return ninja; ```js var inversify = require("inversify"); -require("reflect-metadata"); var TYPES = { Ninja: "Ninja", diff --git a/wiki/recipes.md b/wiki/recipes.md index cbde85908..87151743b 100644 --- a/wiki/recipes.md +++ b/wiki/recipes.md @@ -125,7 +125,6 @@ We can solve this problem using a factory: ```ts import { inject, injectable, Container, interfaces } from "inversify"; -import "reflect-metadata"; type FactoryOfWeapon = (parent: IWeaponHolder) => IWeapon; @@ -213,7 +212,6 @@ But if for some reason we really want to avoid factories, we can use request sco ```ts import { inject, injectable, Container, interfaces } from "inversify"; -import "reflect-metadata"; type FactoryOfWeapon = (parent: IWeaponHolder) => IWeapon;