Giter Club home page Giter Club logo

nef's Introduction

npm

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

# install modules
npm install

# build
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') // we have to use a string here, because in TypeScript, Interfaces are virtual and no objects
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);  // tell explicitly, that 'MyService' is
                                  // a class with an '@Export' decorator

container.composeSync(context);
// now 'context.service' should
// hold an instance of 'MyService' class
// managed by 'container'

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)  // add current application
);

// shorter:
// container.addApplications(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)
);

// shorter:
// container.addClasses(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')
);

// shorter:
// container.addDirectories('/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')
);

// shorter:
// container.addFiles('/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)
);

// shorter:
// container.addModules(myModule);

Documentation

The API documentation can be found here.

nef's People

Contributors

dependabot[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.