const API_NAME = "locals"; import { getGlobal, registerGlobal, unregisterGlobal } from "../utils/globals.js"; import { NoopLocalsManager } from "./manager.js"; import { type LocalsKey, type LocalsManager } from "./types.js"; const NOOP_LOCALS_MANAGER = new NoopLocalsManager(); export class LocalsAPI implements LocalsManager { private static _instance?: LocalsAPI; private constructor() {} public static getInstance(): LocalsAPI { if (!this._instance) { this._instance = new LocalsAPI(); } return this._instance; } public setGlobalLocalsManager(localsManager: LocalsManager): boolean { return registerGlobal(API_NAME, localsManager); } public disable() { unregisterGlobal(API_NAME); } public createLocal(id: string): LocalsKey { return this.#getManager().createLocal(id); } public getLocal(key: LocalsKey): T | undefined { return this.#getManager().getLocal(key); } public setLocal(key: LocalsKey, value: T): void { return this.#getManager().setLocal(key, value); } #getManager(): LocalsManager { return getGlobal(API_NAME) ?? NOOP_LOCALS_MANAGER; } }