npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@inward/boot

v2.4.0

Published

A collection of Booters for LoopBack 4 Applications

Downloads

2

Readme

@inward/boot

A convention based project Bootstrapper and Booters for LoopBack Applications

Overview

A Booter is a Class that can be bound to an Application and is called to perform a task before the Application is started. A Booter may have multiple phases to complete its task. The task for a convention based Booter is to discover and bind Artifacts (Controllers, Repositories, Models, etc.).

An example task of a Booter may be to discover and bind all artifacts of a given type.

A Bootstrapper is needed to manage the Booters and execute them. This is provided in this package. For ease of use, everything needed is packages using a BootMixin. This Mixin will add convenience methods such as boot and booter, as well as properties needed for Bootstrapper such as projectRoot. The Mixin also adds the BootComponent to your Application which binds the Bootstrapper and default Booters made available by this package.

Installation

$ npm i @inward/boot

Basic Use

import {Application} from '@inward/core';
import {BootMixin, Booter, Binding} from '@inward/boot';
class BootApp extends BootMixin(Application) {}

const app = new BootApp();
app.projectRoot = __dirname;

await app.boot();
await app.start();

BootOptions

List of Options available on BootOptions Object.

| Option | Type | Description | | -------------- | ----------------- | ----------------------------------- | | controllers | ArtifactOptions | ControllerBooter convention options | | repositories | ArtifactOptions | RepositoryBooter convention options | | datasources | ArtifactOptions | DataSourceBooter convention options | | services | ArtifactOptions | ServiceBooter convention options |

ArtifactOptions

| Options | Type | Description | | ------------ | -------------------- | ------------------------------------------------------------------------------------------------------------ | | dirs | string \| string[] | Paths relative to projectRoot to look in for Artifact | | extensions | string \| string[] | File extensions to match for Artifact | | nested | boolean | Look in nested directories in dirs for Artifact | | glob | string | A glob pattern string. This takes precedence over above 3 options (which are used to make a glob pattern). |

BootExecOptions

Experimental support. May be removed or changed in a non-compatible way in future without warning

To use BootExecOptions you must directly call bootstrapper.boot() and pass in BootExecOptions. app.boot() provided by BootMixin does not take any paramters.

const bootstrapper: Bootstrapper = await this.get(
  BootBindings.BOOTSTRAPPER_KEY,
);
const execOptions: BootExecOptions = {
  booters: [MyBooter1, MyBooter2],
  filter: {
    phases: ['configure', 'discover'],
  },
};

const ctx = bootstrapper.boot(execOptions);

You can pass in the BootExecOptions object with the following properties:

| Property | Type | Description | | ---------------- | ----------------------- | ------------------------------------------------ | | booters | Constructor<Booter>[] | Array of Booters to bind before running boot() | | filter.booters | string[] | Names of Booter classes that should be run | | filter.phases | string[] | Names of Booter phases to run |

Available Booters

ControllerBooter

Description

Discovers and binds Controller Classes using app.controller().

Options

The options for this can be passed via BootOptions when calling app.boot(options: BootOptions).

The options for this are passed in a controllers object on BootOptions.

Available options on the controllers object on BootOptions are as follows:

| Options | Type | Default | Description | | ------------ | -------------------- | -------------------- | ------------------------------------------------------------------------------------------------------------- | | dirs | string \| string[] | ['controllers'] | Paths relative to projectRoot to look in for Controller artifacts | | extensions | string \| string[] | ['.controller.js'] | File extensions to match for Controller artifacts | | nested | boolean | true | Look in nested directories in dirs for Controller artifacts | | glob | string | | A glob pattern string. This takes precendence over above 3 options (which are used to make a glob pattern). |

RepositoryBooter

Description

Discovers and binds Repository Classes using app.repository() (Application must use RepositoryMixin from @inward/repository).

Options

The options for this can be passed via BootOptions when calling app.boot(options: BootOptions).

The options for this are passed in a repositories object on BootOptions.

Available options on the repositories object on BootOptions are as follows:

| Options | Type | Default | Description | | ------------ | -------------------- | -------------------- | ------------------------------------------------------------------------------------------------------------ | | dirs | string \| string[] | ['repositories'] | Paths relative to projectRoot to look in for Repository artifacts | | extensions | string \| string[] | ['.repository.js'] | File extensions to match for Repository artifacts | | nested | boolean | true | Look in nested directories in dirs for Repository artifacts | | glob | string | | A glob pattern string. This takes precedence over above 3 options (which are used to make a glob pattern). |

DataSourceBooter

Description

Discovers and binds DataSource Classes using app.dataSource() (Application must use RepositoryMixin from @inward/repository).

Options

The options for this can be passed via BootOptions when calling app.boot(options: BootOptions).

The options for this are passed in a datasources object on BootOptions.

Available options on the datasources object on BootOptions are as follows:

| Options | Type | Default | Description | | ------------ | -------------------- | -------------------- | ------------------------------------------------------------------------------------------------------------ | | dirs | string \| string[] | ['datasources'] | Paths relative to projectRoot to look in for DataSource artifacts | | extensions | string \| string[] | ['.datasource.js'] | File extensions to match for DataSource artifacts | | nested | boolean | true | Look in nested directories in dirs for DataSource artifacts | | glob | string | | A glob pattern string. This takes precedence over above 3 options (which are used to make a glob pattern). |

ServiceBooter

Description

Discovers and binds Service providers using app.serviceProvider() (Application must use ServiceMixin from @inward/service-proxy).

IMPORTANT: For a class to be recognized by ServiceBooter as a service provider, its name must end with Provider suffix and its prototype must have a value() method.

Options

The options for this can be passed via BootOptions when calling app.boot(options: BootOptions).

The options for this are passed in a services object on BootOptions.

Available options on the services object on BootOptions are as follows:

| Options | Type | Default | Description | | ------------ | -------------------- | -------------------- | ------------------------------------------------------------------------------------------------------------ | | dirs | string \| string[] | ['repositories'] | Paths relative to projectRoot to look in for Service artifacts | | extensions | string \| string[] | ['.repository.js'] | File extensions to match for Service artifacts | | nested | boolean | true | Look in nested directories in dirs for Service artifacts | | glob | string | | A glob pattern string. This takes precedence over above 3 options (which are used to make a glob pattern). |

Contributions

Tests

Run npm test from the root folder.

Contributors

See all contributors.

License

MIT