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

instances-container

v2.0.6

Published

Simple instances or services container for JavaScript

Downloads

652

Readme

instances-container

NPM Continuous Integration Code Style

Simpel instances atau services container untuk JavaScript.

Introduction

instances-container merupakan package yang sangat sederhana, ringan, dan tidak memiliki dependecies terhadap package lain dalam menerapkan service locator untuk JavaScript. Ketika proyek Anda menggunakan instances-container, Anda dapat secara mudah:

  • Membuat instance singleton di balik layar.
  • Hanya membuat instance ketika dibutuhkan, alias lazy load.
  • Instance mudah untuk dihapus guna menghapus ruang penggunaan memori.
  • Mudah untuk digunakan.

Installation

Anda secara mudah memasang melalui perintah npm berikut:

npm install instances-container

The Simplest Example

Cara paling mudah dalam menggunakan instances-container adalah seperti ini:

const { createContainer } = require('instances-container');

// class yang akan didaftarkan
class Engine {}
	
// membuat container sekaligus mendaftarkan class
const container = createContainer({ Class: Engine });

// engine merupakan instance dari Engine class
const engine = container.getInstance('Engine');
	
// dia singleton secara otomatis
const engine2 = container.getInstance('Engine');
console.log(engine === engine2); // true

More Samples

Mendaftarkan class yang memiliki parameter

const { createContainer } = require('instances-container')

class Engine {}

class Car {
  constructor(engine, power) {
    this.engine = engine;
    this.power = power;
  }
}

// mendaftarkan banyak class ketika membuat container
const container = createContainer([
  {
    Class: Engine,
  },
  // mendaftarkan class Car di mana butuh parameter
  {
    Class: Car,
    parameter: {
      dependencies: [
        {
          internal: 'Engine', // menggunakan instance internal
        },
        {
          concrete: 4, // menggunakan nilai konkrit
        },
      ],
    },
  },
]); 

// mendapatkan instance dari class Car
const car = container.getInstance('Car');

console.log(car instanceof Car); // true
console.log(car.engine instanceof Engine); // true
console.log(car.power); // 10

Mendaftarkan class yang memiliki proxy parameter (destructuring)

const { createContainer } = require('instances-container')

class Engine {}

class Car {
  // proxy parameter
  constructor({ engine, power }) {
    this.engine = engine;
    this.power = power;
  }
}

// mendaftarkan banyak class ketika membuat container
const container = createContainer([
  {
    Class: Engine,
  },
  // mendaftarkan class Car di mana butuh parameter
  {
    Class: Car,
    parameter: {
      injectType: 'destructuring', // menetapkan injectType dengan nilai 'destructuring' untuk memberikan parameter dengan teknik proxy
      dependencies: [
        {
          name: 'engine', // wajib menetapkan properti `name` ketika menggunakan injectType bernilai 'destructuring'
          internal: 'Engine', // menggunakan instance internal
        },
        {
          name: 'power',
          concrete: 4, // menggunakan nilai konkrit
        },
      ],
    },
  },
]);

// mendapatkan instance dari class Car
const car = container.getInstance('Car');

console.log(car instanceof Car); // true
console.log(car.engine instanceof Engine); // true
console.log(car.power); // 10

Mendaftarkan class dengan kunci (key) yang Anda inginkan

const { createContainer } = require('instances-container')

class Engine {}

const container = createContainer({
  key: 'MyEngine', // kunci yang digunakan untuk mendapatkan instance
  Class: Engine,
});

const myEngine = container.getInstance('MyEngine');

console.log(myEngine instanceof Engine); // true

Mendaftarkan class setelah container dibuat

const { createContainer } = require('instances-container')

const container = createContainer();

class Engine {}

// Mendaftarkan class melalui objek `container`
container.register({ Class: Engine });

const engine = container.getInstance('Engine');

console.log(engine instanceof Engine); // true

API Documentation

createServer(options)

Fungsi yang digunakan untuk membuat instance dari Container. Parameter options merupakan InstanceOption atau InstanceOption[], di mana Anda bisa mendaftarkan satu atau banyak class ketika membuat container.

Contoh: membuat container dan mendaftarkan satu class ke dalamnya.

const { createContainer } = require('instances-container');

class Engine {}
const container = createContainer({ Class: Engine });

Example: membuat container dan mendaftarkan banyak class ke dalamnya.

const { createContainer } = require('instances-container');

class Engine {}
class Oil {}
const container = createContainer([ { Class: Engine }, { Class: Oil }]);

createContainer() akan mengembalikan instance dari Container.

Container

Container yang dikembalikan oleh fungsi createContainer memiliki beberapa method.

container.getInstance(key)

Mendapatkan instance dari class yang terdaftar menggunakan kunci (key).

Example:

const { createContainer } = require('instances-container');

class Engine {}
class Oil {}

const container = createContainer([ { Class: Engine }, { Class: Oil }]);

// mendapatkan instance Engine
const engine = container.getInstance('Engine');
// mendapatkan instance Oil
const oil = container.getInstance('Oil');

container.register(options)

Mendaftarkan satu atau banyak class ke subjek container. Parameter options merupakan InstanceOption atau InstanceOption[].

Example:

const { createContainer } = require('instances-container');


const container = createContainer();
class Engine {}

// mendaftarkan class Engine setelah container dibuat
container.register({ Class: Engine });

container.destroyInstance(key)

Setiap class yang didaftarkan diakses, ia akan membuat instance di dalam properti container.instances[key].INSTANCE. Fungsi container.destroyInstance(key) digunakan untuk menghapus instance dari class untuk menghapus ruang penggunaan memory.

Example:

const { createContainer } = require('instances-container');


class Engine {}
const container = createContainer({ Class: Engine });

container.getInstance('Engine');

console.log(container.instances.Engine.INSTANCE instanceof Engine); // true

container.destroyInstance('Engine');

console.log(container.instances.Engine.INSTANCE === undefined); // true

container.destroyAllInstances()

Fungsi yang digunakan untuk menghapus seluruh instances dari class yang terdaftar guna menghapus ruang penggunaan memory.

Example:

const { createContainer } = require('instances-container');


class Engine {}
class Oil {}
const container = createContainer([{ Class: Engine }, { Class: Oil }]);

container.getInstance('Engine');
container.getInstance('Oil');

console.log(container.instances.Engine.INSTANCE instanceof Engine); // true
console.log(container.instances.Oil.INSTANCE instanceof Oil); // true

container.destroyAllInstances()

console.log(container.instances.Engine.INSTANCE === undefined); // true
console.log(container.instances.Oil.INSTANCE === undefined); // true

InstanceOption

InstanceOption merupakan opsi yang dilampirkan sebagai argumen fungsi createContainer atau container.register.

| property | Type | Description | | ----------- | ------------------------------ | ----------- | | key | string (opsional) | Kunci yang digunakan untuk mendapatkan atau menghapus instance dari container. Jika tidak ditetapkan maka akan menggunakan Class.name. | | Class | class or function | Class atau Function Constructor yang akan didaftarkan ke container. | | parameter | ParameterOption (opsional) | Property yang mendefinisikan opsi parameter terhadap class yang akan di daftarkan. Jika tidak ditetapkan, itu berarti class tidak membutuhkan parameter. |

ParameterOption

ParameterOption merupakan opsi yang dibutuhkan oleh InstanceOption untuk mendefinisikan properti parameter.

| property | Type | Description | | ----------- | ------------------------------ | ----------- | | injectType | "parameter" or "destructuring" (opsional) | Teknik yang digunakan dalam menetapkan parameter class. Nilai defaultnya adalah "parameter", tapi kamu bisa mengubahnya ke "destructuring". | | Dependencies | Dependencies[] | Opsi untuk menetapkan nilai dependency dari class. |

Dependency

Dependency is needed to define the dependency value used by ParameterOption.

| property | Type | Description | | ----------- | ------------------------------ | ----------- | | name | string (opsional) | Nama dari object dependency. Hanya dibutuhkan ketika menggunakan injectType bernilai "destructuring". | | concrete | any (opsional) | Menggunakan nilai konkrit sebagai dependency. Bisa dalam bentuk apa pun. Tidak bisa ditetapkan bersamaan dengan properti internal. | | internal | string (opsional) | Menggunakan nilai internal (dari container) sebagai dependency. String key merupakan kunci (key) dari class. Tidak bisa ditetapkan bersamaan dengan properti concrete. |