Skip to main content
Home
Works with
This package works with Cloudflare Workers, Node.js, Deno, Bun, Browsers
This package works with Cloudflare Workers
This package works with Node.js
This package works with Deno
This package works with Bun
This package works with Browsers
JSR Score94%
Downloads3/wk
Published2 months ago (2.5.5)

A tiny decorators based framework for applications

@chojs/core

Core modules for the CHO framework.

The CHO core module provides the fundamental building blocks for the CHO framework, including dependency injection, metadata handling, and application lifecycle management.

Public API

Dependency injection and application lifecycle management decorators (@Injectable, @Module, @Controller, etc.) @Injectable.

Submodules

Submodule Description
@chojs/core/internals DI and application lifecycle. Consumed by other CHO modules.
@chojs/core/testing Tests runner
@chojs/core/utils Core utilities

Examples

Metadata Utilities

import {addToMetadataObject, readMetadataObject} from "@chojs/core/meta";

Read and write metadata to and from classes and methods. Used by decorators to store metadata in a structured way.

class Example {
}

addToMetadataObject(Example, {key0: "value0"});
addToMetadataObject(Example, {key1: "value1"});

readMetadataObject(Example); // { key0: 'value0', key1: 'value1' }

Arrays with the same key are merged automatically:

class Example {
}

addToMetadataObject(Example, {key: ["value0"]});
addToMetadataObject(Example, {key: ["value1"]});

readMetadataObject(Example); // { key: ['value0', 'value1'] }

Dependency Injection

Create injectable services and organize them into modules:


@Injectable({deps: [DatabaseService]})
class UserService {
    constructor(private db: DatabaseService) {
    }
}

@Module({
    imports: [DatabaseModule],
    providers: [
        {
            provide: UserService,
            factory: (injector) => {
                const db = injector.resolve(DatabaseService);
                return new UserService(db);
            },
        },
    ],
})
class UserModule {
}

Resolving dependencies:

// creating (or getting) injector for specific module
const injector = await Injector.get(UserModule);

// resolving a dependency
const service = await injector.resolve(UserService);

Application Lifecycle

Compiling application:


@Module()
class Example {
}

const graph = graphBuilder(Example);
const initiated = await new Compiler().compile(graph);

Applying lifecycle hooks:

onModuleInit(initiated);

Testing

Using single test runner for all environments:

import {test} from "@chojs/core/testing";

test("example test", () => {
    // test code
});

Utilities

Private API utilities

Report package

Please provide a reason for reporting this package. We will review your report and take appropriate action.

Please review the JSR usage policy before submitting a report.

Add Package

deno add jsr:@chojs/core

Import symbol

import * as core from "@chojs/core";
or

Import directly with a jsr specifier

import * as core from "jsr:@chojs/core";

Add Package

pnpm i jsr:@chojs/core
or (using pnpm 10.8 or older)
pnpm dlx jsr add @chojs/core

Import symbol

import * as core from "@chojs/core";

Add Package

yarn add jsr:@chojs/core
or (using Yarn 4.8 or older)
yarn dlx jsr add @chojs/core

Import symbol

import * as core from "@chojs/core";

Add Package

vlt install jsr:@chojs/core

Import symbol

import * as core from "@chojs/core";

Add Package

npx jsr add @chojs/core

Import symbol

import * as core from "@chojs/core";

Add Package

bunx jsr add @chojs/core

Import symbol

import * as core from "@chojs/core";