CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-io-insert-koin--koin-core-js

KOIN - Kotlin simple Dependency Injection Framework for JavaScript/Browser platform

Pending
Overview
Eval results
Files

application-startup.mddocs/

Application Configuration and Startup

Core application setup functionality for initializing the Koin container, loading modules, and configuring logging and properties.

Capabilities

Application Creation

Create and configure a Koin application instance with modules, properties, and logging.

/**
 * Create a new Koin application with optional configuration
 * @param createEagerInstances - Whether to create eager instances immediately
 * @param appDeclaration - Application configuration function
 * @returns KoinApplication instance
 */
function koinApplication(
  createEagerInstances: boolean = true,
  appDeclaration?: (app: KoinApplication) => void
): KoinApplication;

/**
 * Create a Koin application with configuration function
 * @param appDeclaration - Application configuration function
 * @returns KoinApplication instance
 */
function koinApplication(appDeclaration: (app: KoinApplication) => void): KoinApplication;

/**
 * Create a Koin application with configuration object
 * @param configuration - KoinConfiguration instance
 * @returns KoinApplication instance
 */
function koinApplication(configuration: KoinConfiguration): KoinApplication;

Usage Examples:

import { koinApplication, module } from "koin-core";

// Basic application creation
const app = koinApplication((app) => {
  app.modules([myModule]);
  app.printLogger();
});

// With eager instance creation disabled
const app = koinApplication(false, (app) => {
  app.modules([myModule]);
  app.allowOverride(true);
});

// Using configuration object
const config = new KoinConfiguration();
config.modules([myModule]);
const app = koinApplication(config);

Global Application Startup

Start Koin globally for application-wide dependency injection.

/**
 * Start Koin globally with application configuration
 * @param appDeclaration - Application configuration function
 * @returns KoinApplication instance
 */
function startKoin(appDeclaration: (app: KoinApplication) => void): KoinApplication;

/**
 * Start Koin globally with pre-configured application
 * @param koinApplication - Configured KoinApplication instance  
 * @returns KoinApplication instance
 */
function startKoin(koinApplication: KoinApplication): KoinApplication;

/**
 * Stop the global Koin instance and cleanup all resources
 */
function stopKoin(): void;

Usage Examples:

import { startKoin, stopKoin, module } from "koin-core";

// Start with inline configuration
startKoin((app) => {
  app.modules([appModule, networkModule]);
  app.printLogger();
  app.properties(new Map([["api.url", "https://api.example.com"]]));
});

// Later, stop the application
stopKoin();

Application Configuration

Configure the Koin application with modules, properties, logging, and behavioral options.

class KoinApplication {
  /**
   * Load dependency modules into the application
   * @param modules - Array of Module instances
   * @returns KoinApplication for chaining
   */
  modules(modules: Module[]): KoinApplication;

  /**
   * Set application properties for dependency injection
   * @param properties - Map of property key-value pairs
   * @returns KoinApplication for chaining
   */
  properties(properties: Map<string, any>): KoinApplication;

  /**
   * Configure logging with custom logger
   * @param logger - Logger instance
   * @returns KoinApplication for chaining
   */
  logger(logger: Logger): KoinApplication;

  /**
   * Use default console logger with specified level
   * @param level - Log level (default: INFO)
   * @returns KoinApplication for chaining
   */
  printLogger(level?: Level): KoinApplication;

  /**
   * Allow definition override for testing and configuration
   * @param override - Whether to allow overriding definitions
   * @returns KoinApplication for chaining
   */
  allowOverride(override: boolean): KoinApplication;

  /**
   * Create eager instances immediately after application start
   * @returns KoinApplication for chaining
   */
  createEagerInstances(): KoinApplication;

  /**
   * Close the application and cleanup all resources
   */
  close(): void;

  /**
   * Get the underlying Koin container for direct access
   */
  koin: Koin;
}

Usage Examples:

import { koinApplication, Level } from "koin-core";

const app = koinApplication((app) => {
  app
    .modules([coreModule, apiModule, dbModule])
    .properties(new Map([
      ["database.url", "mongodb://localhost:27017"],
      ["api.timeout", 5000],
      ["debug.enabled", true]
    ]))
    .printLogger(Level.DEBUG)
    .allowOverride(false)
    .createEagerInstances();
});

// Access the underlying Koin container
const koin = app.koin;
const service = koin.get("MyService");

Configuration Helper

Create reusable configuration objects for application setup.

/**
 * Create a reusable configuration object
 * @param declaration - Configuration function
 * @returns KoinConfiguration instance
 */
function koinConfiguration(declaration: (config: KoinConfiguration) => void): KoinConfiguration;

class KoinConfiguration {
  /**
   * Convert configuration to application declaration
   * @returns Application declaration function
   */
  invoke(): (app: KoinApplication) => void;

  /**
   * Export configuration as application declaration
   */
  appDeclaration: (app: KoinApplication) => void;
}

Usage Examples:

import { koinConfiguration, koinApplication } from "koin-core";

// Create reusable configuration
const appConfig = koinConfiguration((config) => {
  config.modules([sharedModule, utilsModule]);
  config.printLogger();
  config.allowOverride(true);
});

// Use configuration with application
const app = koinApplication(appConfig);

// Or use the app declaration directly
const app2 = koinApplication(appConfig.appDeclaration);

Runtime Module Management

Load and unload modules dynamically during application runtime.

/**
 * Load additional modules into running application
 * @param modules - Modules to load
 */
function loadKoinModules(modules: Module[]): void;

/**
 * Load single module into running application
 * @param module - Module to load
 */
function loadKoinModules(module: Module): void;

/**
 * Unload modules from running application
 * @param modules - Modules to unload
 */
function unloadKoinModules(modules: Module[]): void;

/**
 * Unload single module from running application
 * @param module - Module to unload
 */
function unloadKoinModules(module: Module): void;

Usage Examples:

import { startKoin, loadKoinModules, unloadKoinModules, module } from "koin-core";

// Start with basic modules
startKoin((app) => {
  app.modules([coreModule]);
});

// Load additional modules at runtime
const featureModule = module((builder) => {
  builder.single(() => new FeatureService());
});

loadKoinModules([featureModule]);

// Later, unload the module
unloadKoinModules([featureModule]);

Types

/** Function type for application configuration */
type KoinAppDeclaration = (app: KoinApplication) => void;

/** Log levels for application logging */
enum Level {
  DEBUG = "DEBUG",
  INFO = "INFO",
  WARNING = "WARNING", 
  ERROR = "ERROR",
  NONE = "NONE"
}

/** Exception thrown when Koin application is already started */
class KoinApplicationAlreadyStartedException extends Error {
  constructor(message: string);
}

Install with Tessl CLI

npx tessl i tessl/maven-io-insert-koin--koin-core-js

docs

application-startup.md

context-management.md

dependency-injection.md

error-handling.md

index.md

logging-system.md

module-system.md

qualifiers-parameters.md

scoping-lifecycle.md

tile.json