Neutron Polarization Manipulator

    componentsjs
    TypeScript icon, indicating that this package has built-in type declarations

    4.5.0 • Public • Published

    Components.js

    A semantic dependency injection framework

    Build status Coverage Status npm version DOI

    This repository contains the source code of Components.js. Full documentation on its usage can be found at http://componentsjs.readthedocs.io/.

    Interested in contributing to this project? Have a look at this contribution guide.

    Introduction

    Components.js is a dependency injection framework for TypeScript and JavaScript projects using JSON(-LD) files.

    Instead of hard-wiring software components together, Components.js allows these components to be instantiated and wired together declaratively using semantic configuration files. The advantage of these semantic configuration files is that software components can be uniquely and globally identified using URIs.

    Configurations can be written in any RDF serialization, such as JSON-LD.

    This software is aimed for developers who want to build modular and easily configurable and rewireable JavaScript applications.

    Get started with the TypeScript or JavaScript quick start guide below!

    Quick Start (TypeScript)

    1. Install dependencies

    Components.js can be installed using npm:

    $ npm install componentsjs

    Component and module files can be automatically generated using Components-Generator.js:

    $ npm install -D componentsjs-generator

    2. Mark your package as a Components.js module

    package.json:

    {
      "name": "my-package",
      "version": "2.3.4",
      "lsd:module": true,
      ...
      "scripts": {
        ...
        "build": "npm run build:ts && npm run build:components",
        "build:ts": "tsc",
        "build:components": "componentsjs-generator --typeScopedContexts",
        "prepare": "npm run build",
        ...
      }
    }

    "lsd:module" will allow Components.js to find your module(s) when they are included from other packages.

    The "scripts" entry will make sure that all required component files will be generated when building your package.

    3. Create a configuration file to instantiate our class

    Assuming a TypeScript class that is exported from the package:

    export class MyClass {
      public readonly name: string;
      constructor(name: string) {
        this.name = name;  
      }
    }

    config.jsonld:

    {
      "@context": [
        "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^4.0.0/components/context.jsonld",
        "https://linkedsoftwaredependencies.org/bundles/npm/my-package/^2.0.0/components/context.jsonld"
      ],
      "@id": "urn:my-package:myInstance",
      "@type": "MyClass",
      "name": "John"
    }

    This configuration is a semantic representation of the instantiation of MyClass with name set to "John".

    4. Instantiate from config file

    ...
    import { ComponentsManager } from 'componentsjs';
    
    const manager = await ComponentsManager.build({
      mainModulePath: __dirname, // Path to your npm package's root
    });
    await manager.configRegistry.register('config.jsonld');
    const myInstance = await manager.instantiate('urn:my-package:myInstance');
    ...

    myInstance is an instance of type MyClass, as defined in the config file.

    Quick Start (JavaScript)

    1. Install dependencies

    Components.js can be installed using npm:

    $ npm install componentsjs

    2. Define your module and its components

    Assuming a JavaScript class that is exported from the package:

    export class MyClass {
      public readonly name;
      constructor(name) {
        this.name = name;  
      }
    }

    module.jsonld:

    {
      "@context": [
        "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^4.0.0/components/context.jsonld",
        { "ex": "http://example.org/" }
      ],
      "@id": "ex:MyPackage",
      "@type": "Module",
      "requireName": "my-package",
      "components": [
        {
          "@id": "ex:MyPackage/MyClass",
          "@type": "Class",
          "requireElement": "MyClass",
          "parameters": [
            { "@id": "ex:MyPackage/MyClass#name", "unique": true }
          ],
          "constructorArguments": [
            { "@id": "ex:MyPackage/MyClass#name" }
          ]
        }
      ]
    }

    The npm module my-package exports a class with the name MyClass.

    The constructor of MyClass takes a single name argument.

    3. Create a configuration file to instantiate our class

    config.jsonld:

    {
      "@context": [
        "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^4.0.0/components/context.jsonld",
        {
          "ex": "http://example.org/",
          "name": "ex:MyPackage/MyClass#name"
        }
      ],
      "@id": "http://example.org/myInstance",
      "@type": "ex:MyPackage/MyClass",
      "name": "John"
    }

    This configuration is a semantic representation of the instantiation of MyClass with name set to "John".

    4. Instantiate from config file

    ...
    import { ComponentsManager } from 'componentsjs';
    
    const manager = await ComponentsManager.build({
      mainModulePath: __dirname, // Path to your npm package's root
    });
    await manager.configRegistry.register('config.jsonld');
    const myInstance = await manager.instantiate('http://example.org/myInstance');
    ...

    myInstance is an instance of type MyClass, as defined in the config file.

    License

    Components.js is written by Ruben Taelman.

    This code is copyrighted by Ghent University – imec and released under the MIT license.

      This feature is exclusive to Teams

      Illustration of wombats

      The package file explorer is only available for Teams at the moment.

      We may support exploring this package in the future. Check back soon.

      Install

      npm i componentsjs

      DownloadsWeekly Downloads

      3,638

      Version

      4.5.0

      License

      MIT

      Unpacked Size

      208 kB

      Total Files

      104

      Last publish

      Collaborators

      • rubensworks