Neoclassical Philosophic Musings

    @egodigital/nef
    TypeScript icon, indicating that this package has built-in type declarations

    3.1.0 • Public • Published

    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.

    Install

    npm i @egodigital/nef

    DownloadsWeekly Downloads

    6

    Version

    3.1.0

    License

    LGPL-3.0

    Unpacked Size

    62.2 kB

    Total Files

    21

    Last publish

    Collaborators

    • mkloubert
    • mkloubertego
    • ekegodigital