@dupkey/container
    TypeScript icon, indicating that this package has built-in type declarations

    1.0.8 • Public • Published

    @dupkey/container

    A TypeScript dependency injection container.

    Install

    npm install @dupkey/container
    

    Example

    Construct the container and then create services

    import { Container } from '@dupkey/container';
     
    const container = new Container();
     
    const config = {
        filename: 'app.log',
        rotate: true
    }
     
    container.create('config', config);
    container.create('logger', LoggerClass, ['config'], true);
    container.create('user', User, ['logger']);
    ...
    container.get('user');

    Construct the container with dependencies

    import { Container, ContainerBuilderInterface } from '@dupkey/container';
    ...
     
    let dependencies: Map<string, ContainerBuilderInterface> = new Map([
      [
        'singleton', {
          definition: singleton,
          dependencies: [],
          singleton: true
        }
      ], [
        'test', {
          definition: test,
          dependencies: ['singleton']
        }
      ], [
        'test2', {
          definition: { foo: 'bar' }
        }
      ]
    ]);
     
    let container = new Container(dependencies);

    Initialize container via Middy compatible middleware

    Create services in the classic onion-like middleware pattern.

    import * as middy from 'middy';
    import mariadb from '@dupkey/mariadb-lambda';
    import { Container, middleware } from '@dupkey/container';
    import dependencies from './dependencies';
    ...
    export const handler = middy(serverHandler)
      .use(mariadb.middleware(
        String(process.env.MARIADB_HOST),
        String(process.env.MARIADB_USER),
        String(process.env.MARIADB_PASSWORD),
        String(process.env.MARIADB_DATABASE),
        { namedPlaceholders: true }
      ))
      .use(middleware(new Container(dependencies), new Map([
        ['connection', { definition: mariadb.connection, singleton: true }]
      ])));

    Methods

    Use these methods in your...

    • create(name: string, definition: any, dependencies: string[] = [], singleton: boolean = false): void: Create a new service in the container.

    • get(name: string): any | undefined: Gets a service from the container. Returns undefined if no service exists.

    Build the TypeScript and JavaScript versions

    npm run build

    Run the tests

    npm test

    VS Code Debugging

    Create a launch.json file in your .vscode folder with the following:

    {
      "version": "0.2.0",
      "configurations": [
        {
          "type": "node",
          "request": "launch",
          "name": "Mocha Tests",
          "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha",
          "args": [
            "--require", "ts-node/register",
            "-u", "tdd",
            "--timeout", "999999",
            "--colors", "--recursive",
            "${workspaceFolder}/test/**/*.ts"
          ],
          "internalConsoleOptions": "openOnSessionStart"
        }
      ]
    }

    In the debug tab (Ctrl+Shift+D) select "Mocha Tests" from the dropdown and then click "Start Debugging". Results will display in the console on the bottom of the VS Code.

    Install

    npm i @dupkey/container

    DownloadsWeekly Downloads

    10

    Version

    1.0.8

    License

    MIT

    Unpacked Size

    17.1 kB

    Total Files

    15

    Last publish

    Collaborators

    • nicgene