GeoLeaf Core API - v3.0.0
    Preparing search index...

    Lifecycle contract for a GeoLeaf module that participates in boot.

    Modules are registered with IModuleRegistry.register() and initialised in dependency order by IModuleRegistry.init(). Each module must implement init() and destroy(), and declare its dependencies so the registry can resolve the correct initialisation order.

    Dependency declaration rules:

    • List only direct dependencies (not transitive).
    • Reference dependencies by their id string.
    • Circular dependencies are detected at registration time and throw a GeoLeafError with the full dependency cycle path in the message.

    ⚠ Classes implement THIS interface, never the ICoreModule union — TypeScript's implements clause rejects union types.

    class ExampleModule implements ILifecycleModule {
    readonly id = 'example';
    readonly dependencies = ['geojson'] as const;
    readonly ui: IModuleUISlot = { … };

    async init(adapter: IMapAdapter, config: IGeoLeafConfig): Promise<void> {
    // … setup
    }

    destroy(): void {
    // … cleanup
    }
    }
    interface ILifecycleModule {
        id: string;
        dependencies: readonly string[];
        ui?: IModuleUISlot;
        init(adapter: IMapAdapter, config: IGeoLeafConfig): void | Promise<void>;
        destroy(): void;
    }

    Implemented by

    Index

    Properties

    Methods

    Properties

    id: string

    Unique module identifier within the GeoLeaf instance.

    The registry enforces uniqueness — registering two modules with the same id throws a GeoLeafError. Use lowercase kebab-case.

    `'geojson'`, `'route'`, `'legend'`, `'layer-manager'`
    
    dependencies: readonly string[]

    IDs of modules that must be fully initialised before this module's init() is called.

    The registry resolves a topological order from these declarations. An empty array means this module has no dependencies.

    Use as const in implementing classes for best type inference:

    readonly dependencies = ['poi', 'ui'] as const;
    

    Optional UI slot declaration.

    Declare this when the module contributes UI to the mobile toolbar pill or the desktop filter panel. The registry collects all slots via getUISlots() and passes them to the UI orchestrator.

    Methods

    • Initialises the module.

      Called by the registry after all declared dependencies are ready. Guaranteed postconditions at call time:

      • adapter.isReady() returns true
      • config.isLoaded() returns true
      • All modules listed in dependencies have completed their init()

      Returning void (synchronous) is allowed for modules that do not perform async work. The registry handles both with Promise.resolve().

      Parameters

      Returns void | Promise<void>

    • Tears down the module and releases all resources.

      Must remove every event listener, DOM node, and layer reference created during init(). After destroy(), the module must be safe to garbage collect.

      Called by the registry in reverse dependency order (dependants are destroyed before their dependencies).

      Returns void