NEF (Node.js Extensibility Framework)
Managed Extensibility Framework like library written for Node.js 10+, in TypeScript.
Install
Execute the following command from your project folder, where your package.json
file is stored:
npm install --save @egodigital/nef
Usage
Build
npm install
npm run build
Requirements
TypeScript
You have to enable decorator feature in your tsconfig.json
file:
{
"compilerOptions": {
// ...
"experimentalDecorators": true
},
// ...
}
Examples
Quick start
Exports
First define a service and a contract:
import { Export } from '@egodigital/nef';
interface IMyService {
foo(): string;
}
@Export('IMyService')
export class MyService implements IMyService {
public foo() {
return 'bar';
}
}
In that example MyService
is the implemented service of IMyService
contract.
Imports
Now, implement a class, which gets an instance, exported with IMyService
contract, as injected object:
import { Import } from '@egodigital/nef';
export class MyContext {
@Import('IMyService')
public service: IMyService;
}
Injections
At the end, the thing, which collects all exports and injects them into object properties, marked with @Import
decorators, is an CompositionContainer
instance:
import { CompositionContainer } from '@egodigital/nef';
let context = new MyContext();
let container = new CompositionContainer();
container.addClasses(MyService);
container.composeSync(context);
Catalogs
Catalogs helps to detect classes, which should be exported as services.
ApplicationCatalog
A catalog based on one or more JavaScript modules one application.
import { ApplicationCatalog, CompositionContainer } from '@egodigital/nef';
let container = new CompositionContainer();
container.addCatalogs(
new ApplicationCatalog(process)
);
ClassCatalog
A catalog for a single class.
import { ClassCatalog, CompositionContainer, Export } from '@egodigital/nef';
@Export()
class MyService {
}
let container = new CompositionContainer();
container.addCatalogs(
new ClassCatalog(MyService)
);
DirectoryCatalog
A catalog based on one or more JavaScript modules in a directory.
import { CompositionContainer, DirectoryCatalog } from '@egodigital/nef';
let container = new CompositionContainer();
container.addCatalogs(
new DirectoryCatalog('/path/to/directory')
);
FileCatalog
A catalog based on one or more JavaScript modules in a single file.
import { CompositionContainer, FileCatalog } from '@egodigital/nef';
let container = new CompositionContainer();
container.addCatalogs(
new FileCatalog('/path/to/file.js')
);
ModuleCatalog
A catalog for a JavaScript module.
import { CompositionContainer, ModuleCatalog } from '@egodigital/nef';
const myModule = require('my-module');
let container = new CompositionContainer();
container.addCatalogs(
new ModuleCatalog(myModule)
);
Documentation
The API documentation can be found here.