@noormdev/sdk 1.0.0-alpha.2 → 1.0.0-alpha.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/chunk-3UDETNWW.js +943 -0
  2. package/dist/chunk-3UDETNWW.js.map +1 -0
  3. package/dist/chunk-D2XW2UOP.js +42 -0
  4. package/dist/chunk-D2XW2UOP.js.map +1 -0
  5. package/dist/chunk-TBRUDUBQ.js +1099 -0
  6. package/dist/chunk-TBRUDUBQ.js.map +1 -0
  7. package/dist/chunk-UDUDHOIB.js +3136 -0
  8. package/dist/chunk-UDUDHOIB.js.map +1 -0
  9. package/dist/chunk-UOFJT5PY.js +1499 -0
  10. package/dist/chunk-UOFJT5PY.js.map +1 -0
  11. package/dist/chunk-YJBKNUTP.js +7233 -0
  12. package/dist/chunk-YJBKNUTP.js.map +1 -0
  13. package/dist/chunk-ZKYTJJIF.js +308 -0
  14. package/dist/chunk-ZKYTJJIF.js.map +1 -0
  15. package/dist/csv-T5P3IN4K.js +7 -0
  16. package/dist/csv-T5P3IN4K.js.map +1 -0
  17. package/dist/engine-27DNMF4T.js +11 -0
  18. package/dist/{engine-B4JH5RQJ.js.map → engine-27DNMF4T.js.map} +1 -1
  19. package/dist/index.d.ts +3046 -1193
  20. package/dist/index.js +26205 -6889
  21. package/dist/index.js.map +1 -1
  22. package/dist/json5-LNT3RGJ7.js +7 -0
  23. package/dist/json5-LNT3RGJ7.js.map +1 -0
  24. package/dist/mssql-3NNVV77C.js +121 -0
  25. package/dist/mssql-3NNVV77C.js.map +1 -0
  26. package/dist/{mysql-C2DR4TF7.js → mysql-UPMQUBLE.js} +5 -3
  27. package/dist/mysql-UPMQUBLE.js.map +1 -0
  28. package/dist/{postgres-SIDJBSIT.js → postgres-CPVTCR7W.js} +5 -3
  29. package/dist/postgres-CPVTCR7W.js.map +1 -0
  30. package/dist/{sqlite-5VZTBN5J.js → sqlite-F3ZSSDUM.js} +5 -3
  31. package/dist/sqlite-F3ZSSDUM.js.map +1 -0
  32. package/dist/sqlite-bun-LMHUMGQI.js +60 -0
  33. package/dist/sqlite-bun-LMHUMGQI.js.map +1 -0
  34. package/dist/storage-TZNQBIX3.js +8 -0
  35. package/dist/storage-TZNQBIX3.js.map +1 -0
  36. package/dist/yaml-XI7RQ2D5.js +7 -0
  37. package/dist/yaml-XI7RQ2D5.js.map +1 -0
  38. package/package.json +8 -4
  39. package/dist/chunk-MERTHCAJ.js +0 -299
  40. package/dist/chunk-MERTHCAJ.js.map +0 -1
  41. package/dist/engine-B4JH5RQJ.js +0 -3
  42. package/dist/mssql-T4M7OGEC.js +0 -46
  43. package/dist/mssql-T4M7OGEC.js.map +0 -1
  44. package/dist/mysql-C2DR4TF7.js.map +0 -1
  45. package/dist/postgres-SIDJBSIT.js.map +0 -1
  46. package/dist/sqlite-5VZTBN5J.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../node_modules/@logosdx/utils/dist/esm/object-utils/index.mjs","../../../node_modules/@logosdx/utils/dist/esm/validation/assert.mjs","../../../node_modules/@logosdx/utils/dist/esm/validation/type-guards.mjs","../../../node_modules/@logosdx/utils/dist/esm/validation/values.mjs","../../../node_modules/@logosdx/utils/dist/esm/async/attempt.mjs","../../../node_modules/@logosdx/utils/dist/esm/data-structures/helpers.mjs","../../../node_modules/@logosdx/utils/dist/esm/data-structures/clone.mjs","../../../node_modules/@logosdx/utils/dist/esm/data-structures/merge.mjs","../../../node_modules/@logosdx/utils/dist/esm/data-structures/priority-queue.mjs","../../../node_modules/@logosdx/utils/dist/esm/flow-control/misc.mjs","../../../node_modules/@logosdx/utils/dist/esm/_helpers.mjs","../../../node_modules/@logosdx/utils/dist/esm/async/retry.mjs","../../../node_modules/@logosdx/utils/dist/esm/misc/index.mjs","../../../node_modules/@logosdx/utils/dist/esm/flow-control/memo/helpers.mjs","../../../node_modules/@logosdx/utils/dist/esm/flow-control/memo/memoizeSync.mjs","../../../node_modules/@logosdx/utils/dist/esm/flow-control/rate-limit.mjs","../../../node_modules/@logosdx/utils/dist/esm/flow-control/with-timeout.mjs","../../../node_modules/@logosdx/utils/dist/esm/units/time.mjs","../../../node_modules/@logosdx/utils/dist/esm/units/bytes.mjs","../../../node_modules/@logosdx/utils/dist/esm/config/index.mjs","../../../node_modules/@logosdx/observer/dist/esm/helpers.mjs","../../../node_modules/@logosdx/observer/dist/esm/generator.mjs","../../../node_modules/@logosdx/observer/dist/esm/queue/state.mjs","../../../node_modules/@logosdx/observer/dist/esm/queue/statistics.mjs","../../../node_modules/@logosdx/observer/dist/esm/queue/helpers.mjs","../../../node_modules/@logosdx/observer/dist/esm/queue/queue.mjs","../../../node_modules/@logosdx/observer/dist/esm/engine.mjs","../../../node_modules/@logosdx/observer/dist/esm/relay.mjs","../../../src/core/observer.ts"],"names":["cloneType","cloned","clone","pairs","result","key","value","error","now","item","isObject","InternalEvs","observer","QueueRejectionReason","process","cbs","event"],"mappings":"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","file":"chunk-UDUDHOIB.js","sourcesContent":["import { assert } from '../validation/index.mjs';\n/**\n * Defines visible, non-configurable properties on an object.\n *\n * Creates properties that are enumerable (show up in for...in loops and Object.keys)\n * but cannot be modified or deleted. Useful for creating public APIs.\n *\n * @param target object to add properties to\n * @param props properties to define\n * @param configurable whether properties can be deleted or reconfigured\n *\n * @example\n * const api = {};\n * definePublicProps(api, {\n * version: '1.0.0',\n * name: 'MyAPI'\n * });\n *\n * console.log(api.version); // '1.0.0'\n * console.log(Object.keys(api)); // ['version', 'name']\n * api.version = '2.0.0'; // Fails silently or throws in strict mode\n *\n * @example\n * class DataProcessor {\n * constructor(config) {\n * definePublicProps(this, {\n * id: crypto.randomUUID(),\n * createdAt: new Date()\n * });\n * }\n * }\n */ export const definePublicProps = (target, props, configurable = false)=>{\n Object.entries(props).map(([prop, value])=>{\n Object.defineProperty(target, prop, {\n value,\n writable: false,\n enumerable: true,\n configurable\n });\n });\n};\n/**\n * Defines hidden, non-configurable properties on an object.\n *\n * Creates properties that are not enumerable (hidden from for...in loops and Object.keys)\n * and cannot be modified or deleted. Useful for internal state and private methods.\n *\n * @param target object to add properties to\n * @param props properties to define\n * @param configurable whether properties can be deleted or reconfigured\n *\n * @example\n * const cache = new Map();\n * const api = {};\n *\n * definePrivateProps(api, {\n * _cache: cache,\n * _getId: () => crypto.randomUUID()\n * });\n *\n * console.log(Object.keys(api)); // [] (hidden properties)\n * console.log(api._cache); // Map instance (accessible but hidden)\n *\n * @example\n * class EventEmitter {\n * constructor() {\n * definePrivateProps(this, {\n * _listeners: new Map(),\n * _emit: this.emit.bind(this)\n * });\n * }\n * }\n */ export const definePrivateProps = (target, props, configurable = false)=>{\n Object.entries(props).map(([prop, value])=>{\n Object.defineProperty(target, prop, {\n value,\n writable: false,\n enumerable: false,\n configurable\n });\n });\n};\n/**\n * Defines hidden, non-configurable getters on an object.\n *\n * Creates getter properties that are not enumerable and cannot be modified.\n * Useful for computed properties and lazy-loaded values.\n *\n * @param target object to add getters to\n * @param props getter functions to define\n * @param configurable whether getters can be deleted or reconfigured\n *\n * @example\n * const user = { firstName: 'John', lastName: 'Doe' };\n *\n * definePrivateGetters(user, {\n * _fullName: () => `${user.firstName} ${user.lastName}`,\n * _initials: () => `${user.firstName[0]}${user.lastName[0]}`\n * });\n *\n * console.log(user._fullName); // 'John Doe'\n * console.log(Object.keys(user)); // ['firstName', 'lastName'] (getters hidden)\n *\n * @example\n * class DataProcessor {\n * constructor(data) {\n * this.data = data;\n * definePrivateGetters(this, {\n * _size: () => this.data.length,\n * _isEmpty: () => this.data.length === 0\n * });\n * }\n * }\n */ export const definePrivateGetters = (target, props, configurable = false)=>{\n Object.entries(props).map(([prop, getter])=>{\n Object.defineProperty(target, prop, {\n get: getter,\n enumerable: false,\n configurable\n });\n });\n};\n/**\n * Reaches into an object, Map, Set, or Array and returns the value at the end of the path.\n *\n * Safely navigates nested object properties using dot notation.\n * Supports Maps (using .get() method), Sets (using numeric indices or .has()),\n * and Arrays (using numeric indices).\n * Returns undefined if any part of the path doesn't exist.\n *\n * @param obj object, Map, Set, or Array to navigate\n * @param val dot-separated path to the desired value\n * @returns value at the path, or undefined if path doesn't exist\n *\n * @example\n * const user = {\n * profile: {\n * name: 'John',\n * settings: {\n * theme: 'dark',\n * notifications: true\n * }\n * }\n * };\n *\n * reach(user, 'profile.name') // 'John'\n * reach(user, 'profile.settings.theme') // 'dark'\n * reach(user, 'profile.missing.property') // undefined\n *\n * @example\n * // Safe API response parsing\n * function getNestedValue(response: any, path: string) {\n * const value = reach(response, path);\n * return value ?? 'Not found';\n * }\n *\n * const apiResponse = { data: { users: [{ name: 'Alice' }] } };\n * getNestedValue(apiResponse, 'data.users.0.name') // 'Alice'\n * getNestedValue(apiResponse, 'data.posts.0.title') // 'Not found'\n *\n * @example\n * // Working with Maps, Sets, and Arrays\n * const data = {\n * users: new Map([['john', { name: 'John', age: 30 }]]),\n * tags: new Set(['admin', 'user', 'moderator']),\n * scores: [100, 95, 87, 92]\n * };\n *\n * reach(data, 'users.john.name') // 'John'\n * reach(data, 'tags.0') // 'admin'\n * reach(data, 'tags.admin') // 'admin' (if exists in Set)\n * reach(data, 'scores.1') // 95\n * reach(data, 'scores.5') // undefined\n */ export const reach = (obj, val)=>{\n const path = val.split('.');\n return path.reduce((acc, key)=>{\n if (acc === undefined || acc === null) {\n return null;\n }\n if (acc instanceof Map) {\n return acc.get(key);\n }\n if (acc instanceof Set) {\n const has = acc.has(key);\n const values = Array.from(acc);\n if (has) {\n return values[values.indexOf(key)];\n }\n return values[key];\n }\n return acc[key];\n }, obj);\n};\n/**\n * Sets a value deep within a nested object using dot notation path.\n *\n * Creates intermediate objects if they don't exist along the path. Mutates the\n * original object in place. Use this when you need to update nested configuration\n * objects, set metrics in nested structures, or build objects incrementally without\n * manual property checking at each level.\n *\n * @param obj object to modify\n * @param path dot-separated path to the target property\n * @param value value to set at the path\n *\n * @example\n * const metrics = { memory: { heap: 100 } };\n * setDeep(metrics, 'memory.rss', 1024);\n * // metrics is now { memory: { heap: 100, rss: 1024 } }\n *\n * @example\n * // Creates missing intermediate objects\n * const config = {};\n * setDeep(config, 'server.port', 3000);\n * setDeep(config, 'server.host', 'localhost');\n * setDeep(config, 'database.connection.timeout', 5000);\n * // config is now { server: { port: 3000, host: 'localhost' }, database: { connection: { timeout: 5000 } } }\n *\n * @example\n * // Building response objects incrementally\n * function buildResponse(data: any) {\n *\n * const response = {};\n *\n * setDeep(response, 'status.code', 200);\n * setDeep(response, 'status.message', 'OK');\n * setDeep(response, 'data.results', data);\n *\n * return response;\n * }\n */ export const setDeep = (obj, path, value)=>{\n assert(typeof obj === 'object' && obj !== null, 'obj must be a non-null object');\n assert(typeof path === 'string' && path.length > 0, 'path must be a non-empty string');\n const keys = path.split('.');\n const lastKey = keys[keys.length - 1];\n let current = obj;\n for(let i = 0; i < keys.length - 1; i++){\n const key = keys[i];\n if (current === null || current === undefined) {\n throw new Error(`Cannot set property '${key}' on ${current} at path: ${keys.slice(0, i).join('.')}`);\n }\n if (typeof current !== 'object') {\n throw new Error(`Cannot set property '${key}' on primitive value at path: ${keys.slice(0, i).join('.')}`);\n }\n if (!(key in current)) {\n current[key] = {};\n }\n current = current[key];\n }\n if (current === null || current === undefined) {\n throw new Error(`Cannot set property '${lastKey}' on ${current}`);\n }\n if (typeof current !== 'object') {\n throw new Error(`Cannot set property '${lastKey}' on primitive value`);\n }\n current[lastKey] = value;\n};\n/**\n * Sets multiple values deep within a nested object using dot notation paths.\n *\n * Efficiently sets multiple nested properties in a single call. Each entry is processed\n * sequentially, and if any entry fails, an error is thrown immediately. Use this when\n * you need to initialize or update multiple nested properties at once, such as building\n * configuration objects or setting multiple metrics.\n *\n * @param obj object to modify\n * @param entries array of [path, value] tuples to set\n *\n * @example\n * const response = {};\n * setDeepMany(response, [\n * ['status.code', 200],\n * ['status.message', 'OK'],\n * ['data.results', [1, 2, 3]],\n * ['data.total', 3]\n * ]);\n * // response is now { status: { code: 200, message: 'OK' }, data: { results: [1, 2, 3], total: 3 } }\n *\n * @example\n * // Building configuration objects\n * const config = {};\n * setDeepMany(config, [\n * ['server.port', 3000],\n * ['server.host', 'localhost'],\n * ['database.url', 'postgres://localhost'],\n * ['database.pool.min', 2],\n * ['database.pool.max', 10],\n * ['features.auth.enabled', true],\n * ['features.logging.level', 'info']\n * ]);\n *\n * @example\n * // Setting multiple metrics at once\n * const metrics = { memory: { heap: 100 } };\n * setDeepMany(metrics, [\n * ['memory.rss', 1024],\n * ['memory.external', 512],\n * ['cpu.user', 50],\n * ['cpu.system', 30]\n * ]);\n */ export const setDeepMany = (obj, entries)=>{\n assert(typeof obj === 'object' && obj !== null, 'obj must be a non-null object');\n assert(Array.isArray(entries), 'entries must be an array');\n for(let i = 0; i < entries.length; i++){\n const entry = entries[i];\n assert(Array.isArray(entry) && entry.length === 2, `entry ${i} must be a [path, value] tuple`);\n const [path, value] = entry;\n assert(typeof path === 'string' && path.length > 0, `entry ${i} must have a non-empty string path (received: ${typeof path})`);\n setDeep(obj, path, value);\n }\n};\n","import { reach } from '../object-utils/index.mjs';\n/**\n * Error class for assertions that fail\n */ export class AssertError extends Error {\n}\n/**\n * Checks if an error is an AssertError.\n *\n * @param err error to check\n * @returns true if error is an AssertError\n */ export const isAssertError = (err)=>err?.constructor?.name === AssertError.name;\n/**\n * Optional value check with custom validation.\n *\n * Returns true if value is undefined/null OR if the custom check passes.\n * Useful for validating optional parameters with specific criteria.\n *\n * @param val value to check\n * @param check function or boolean to validate the value\n * @returns true if value is optional or passes the check\n *\n * @example\n * // With function check\n * function processData(data: any, timeout?: number) {\n * assert(isOptional(timeout, (t) => t > 0), 'Timeout must be positive');\n * // Process data...\n * }\n *\n * @example\n * // With boolean check\n * const isValid = validateInput(input);\n * if (isOptional(config.strict, isValid)) {\n * // Either strict mode is off or input is valid\n * processInput(input);\n * }\n *\n * @example\n * // Check optional email format\n * isOptional(user.email, (email) => email.includes('@')) // true if email is undefined or contains @\n */ export const isOptional = (val, check)=>val === undefined || val === null || (check instanceof Function ? !!check(val) : !!check);\n/**\n * Asserts that a value is true. Even though NodeJS has\n * an `assert` builtin library, this aims to bring a\n * single API for asserting across all environments.\n *\n * @param test value that is coerced to true\n * @param message error message to display when test is false\n * @param ErrorClass error class to throw\n *\n * @example\n *\n * ```ts\n * assert(true, 'this is true');\n * assert(false, 'this is false');\n * assert(() => true, 'this is true');\n * assert(() => false, 'this is false');\n * ```\n *\n * ```ts\n *\n * const SomeErrorClass = class extends Error {\n * constructor(message: string) {\n * super(message);\n * }\n * }\n *\n *\n * const someFunc = () => {\n *\n * assert(true, 'this is true', SomeErrorClass);\n * assert(false, 'this is false', SomeErrorClass);\n * assert(() => true, 'this is true', SomeErrorClass);\n * assert(() => false, 'this is false', SomeErrorClass);\n *\n * // some logic\n * }\n *\n * someFunc();\n * ```\n */ export const assert = (test, message, ErrorClass)=>{\n const check = test instanceof Function ? !!test() : !!test;\n if (check === false) {\n throw new (ErrorClass || AssertError)(message || 'assertion failed');\n }\n};\n/**\n * Asserts the values in an object based on the provided assertions.\n * The assertions are a map of paths to functions that return a tuple\n * of a boolean and a message. This is intended to be used for testing\n * and validation when there is no schema validator available.\n *\n *\n * @param obj\n * @param assertions\n *\n * @example\n *\n * const obj = {\n * a: 1,\n * b: 'hello',\n * c: { d: 2 }\n * }\n *\n * assertObject(obj, {\n * a: (val) => [val === 1, 'a should be 1'],\n * b: (val) => [val === 'hello', 'b should be hello'],\n * c: [\n * (val) => [!!val, 'c should not be empty'],\n * (val) => [isObject(val), 'c should be an object']\n * ],\n * 'c.d': (val) => [isOptional(val, v === 2), 'c.d should be 2']\n * });\n */ export const assertObject = (obj, assertions)=>{\n const tests = [];\n for(const path in assertions){\n const val = reach(obj, path);\n const test = assertions[path];\n if (test === undefined) {\n throw new Error(`assertion for path ${path} is undefined`);\n }\n if (test instanceof Array) {\n for (const t of test){\n tests.push([\n val,\n t\n ]);\n }\n continue;\n }\n tests.push([\n val,\n test\n ]);\n }\n for (const [val, test] of tests){\n const res = test(val);\n assert(res instanceof Array, `assertion did not return a tuple [boolean, string]`);\n const [check, message] = res;\n assert(check, message);\n }\n};\n/**\n * Asserts only if value is not undefined.\n *\n * Provides conditional assertion that only executes when the value is defined.\n * Useful for validating optional parameters or properties.\n *\n * @param val value to test\n * @param test assertion test\n * @param message error message\n * @param ErrorClass error class to throw\n *\n * @example\n * function processUser(user: User, options?: ProcessOptions) {\n * // Only assert options if they are provided\n * assertOptional(options, isObject(options), 'Options must be an object');\n *\n * // Process user...\n * }\n *\n * @example\n * const config = getConfig();\n * assertOptional(config.timeout, config.timeout > 0, 'Timeout must be positive');\n */ export const assertOptional = (val, ...rest)=>{\n if (val !== undefined) {\n assert(...rest);\n }\n};\n","/**\n * Checks if value is non-iterable by testing if it can be iterated over.\n *\n * Uses Symbol.iterator to determine if a value is iterable. Returns true\n * for values that cannot be iterated (null, undefined, primitives).\n *\n * @param val value to check for iterability\n * @returns true if value is not iterable, false if it can be iterated\n *\n * @example\n * isNonIterable(null) // true\n * isNonIterable('string') // true\n * isNonIterable([1,2,3]) // false\n * isNonIterable(new Set()) // false\n */ export const isNonIterable = (val)=>{\n // null and undefined are not iterable\n if (val === null || val === undefined) {\n return true;\n }\n // Check if value has Symbol.iterator property\n return !val[Symbol.iterator];\n};\n/**\n * Checks if value is a primitive type.\n *\n * @param val value to check\n * @returns true if value is a primitive type\n *\n * @example\n * isPrimitive(null) // true\n * isPrimitive(undefined) // true\n * isPrimitive('string') // true\n * isPrimitive(1) // true\n * isPrimitive(true) // true\n * isPrimitive(Symbol('symbol')) // true\n * isPrimitive(new Date()) // false\n * isPrimitive(new RegExp('')) // false\n * isPrimitive(new Error('')) // false\n * isPrimitive(new Set()) // false\n * isPrimitive(new Map()) // false\n * isPrimitive(new Array()) // true\n * isPrimitive(new Object()) // true\n */ export const isPrimitive = (val)=>val === null || val === undefined || typeof val === 'string' || typeof val === 'number' || typeof val === 'boolean' || typeof val === 'symbol' || typeof val === 'bigint';\n/**\n * Checks if value is a type that does not have a constructor.\n *\n * Tests for null and undefined values which lack constructors.\n * Useful for deep comparison and cloning operations.\n *\n * @param val value to check\n * @returns true if value has no constructor (null or undefined)\n *\n * @example\n * hasNoConstructor(null) // true\n * hasNoConstructor(undefined) // true\n * hasNoConstructor({}) // false\n * hasNoConstructor('string') // false\n * hasNoConstructor(42) // false\n */ export const hasNoConstructor = (val)=>val === null || val === undefined;\n/**\n * Checks if both values have the same constructor.\n *\n * Compares the constructor property of two values to determine if they\n * are instances of the same class or type.\n *\n * @param value first value to compare\n * @param compare second value to compare\n * @returns true if both values have the same constructor\n *\n * @example\n * hasSameConstructor([], [1, 2, 3]) // true (both Arrays)\n * hasSameConstructor({}, { a: 1 }) // true (both Objects)\n * hasSameConstructor([], {}) // false (Array vs Object)\n * hasSameConstructor(new Date(), new Date()) // true (both Dates)\n * hasSameConstructor('string', 42) // false (String vs Number)\n */ export const hasSameConstructor = (value, compare)=>hasNoConstructor(value) === false && hasNoConstructor(compare) === false && value.constructor === compare.constructor;\n/**\n * Checks if both values have the same length or size.\n *\n * Compares the length property for arrays or size property for Sets.\n * Both iterables must be the same data type (both arrays or both Sets).\n * Useful for validating collections before performing operations.\n *\n * @param a first collection (array or Set)\n * @param b second collection (array or Set) - must be same type as `a`\n * @returns true if both collections have the same length/size\n *\n * @example\n * isSameLength([1, 2, 3], ['a', 'b', 'c']) // true\n * isSameLength([1, 2], [1, 2, 3]) // false\n * isSameLength(new Set([1, 2]), new Set(['a', 'b'])) // true\n * isSameLength(new Set([1, 2]), new Set([1, 2, 3])) // false\n */ export const isSameLength = (a, b)=>a.length === b.length && a.size === b.size;\n/**\n * Checks if value is a function.\n *\n * Uses instanceof to test if the value is a Function.\n * More reliable than typeof for all function types.\n *\n * @param a value to check\n * @returns true if value is a function\n *\n * @example\n * isFunction(() => {}) // true\n * isFunction(function() {}) // true\n * isFunction(async () => {}) // true\n * isFunction(class MyClass {}) // true\n * isFunction('string') // false\n * isFunction({}) // false\n */ export const isFunction = (a)=>a instanceof Function;\n/**\n * Checks if value is an object.\n *\n * Uses instanceof to test if the value is an Object.\n * Returns true for objects, arrays, functions, dates, etc.\n *\n * @param a value to check\n * @returns true if value is an object\n *\n * @example\n * isObject({}) // true\n * isObject([]) // true\n * isObject(new Date()) // true\n * isObject(() => {}) // true\n * isObject('string') // false\n * isObject(null) // false\n */ export const isObject = (a)=>a instanceof Object;\nconst commonObjects = new Set([\n Date,\n RegExp,\n Function,\n Error,\n EvalError,\n RangeError,\n ReferenceError,\n SyntaxError,\n TypeError,\n URIError,\n AggregateError,\n DOMException,\n Array,\n Set,\n Map,\n WeakMap,\n WeakSet,\n Promise,\n Proxy,\n Symbol,\n BigInt,\n WeakRef,\n FinalizationRegistry,\n DataView,\n ArrayBuffer,\n Int8Array,\n Uint8Array,\n Uint8ClampedArray,\n Int16Array,\n Uint16Array,\n Int32Array,\n Uint32Array,\n Float32Array,\n Float64Array,\n BigInt64Array,\n BigUint64Array,\n FormData,\n URLSearchParams\n]);\n/**\n * Checks if value is an uncommon object. Used to determine if a value\n * is a user defined object.\n *\n * @param a value to check\n * @returns true if value is an uncommon object\n *\n * @example\n *\n * // Returns false for common objects\n * isPlainObject(new Date()) // false\n * isPlainObject(new RegExp('')) // false\n * isPlainObject(new Function()) // false\n * isPlainObject(new Error()) // false\n * isPlainObject(new Array()) // false\n * isPlainObject(new Set()) // false\n *\n * // Returns true for uncommon objects\n * isPlainObject({}) // true\n * isPlainObject(new MyClass()) // true\n *\n */ export const isPlainObject = (a)=>!isPrimitive(a) && isObject(a) && !commonObjects.has(a.constructor);\n/**\n * Checks if value is specifically undefined.\n *\n * Strict equality check for undefined values.\n * More explicit than checking truthiness.\n *\n * @param val value to check\n * @returns true if value is exactly undefined\n *\n * @example\n * isUndefined(undefined) // true\n * isUndefined(null) // false\n * isUndefined('') // false\n * isUndefined(0) // false\n *\n * let x;\n * isUndefined(x) // true\n */ export const isUndefined = (val)=>val === undefined;\n/**\n * Checks if value is specifically not undefined.\n *\n * Inverse of isUndefined. Returns true for all values except undefined,\n * including null, false, 0, and empty strings.\n *\n * @param val value to check\n * @returns true if value is not undefined\n *\n * @example\n * isDefined(null) // true\n * isDefined(0) // true\n * isDefined('') // true\n * isDefined(false) // true\n * isDefined(undefined) // false\n *\n * const config = getConfig();\n * if (isDefined(config.apiKey)) {\n * // Safe to use config.apiKey\n * }\n */ export const isDefined = (val)=>val !== undefined;\n/**\n * Checks if value is specifically null.\n *\n * Strict equality check for null values.\n * More explicit than checking truthiness.\n *\n * @param val value to check\n * @returns true if value is exactly null\n *\n * @example\n * isNull(null) // true\n * isNull(undefined) // false\n * isNull('') // false\n * isNull(0) // false\n *\n * const result = findUser(id);\n * if (isNull(result)) {\n * // User was explicitly not found\n * }\n */ export const isNull = (val)=>val === null;\n","const ENABLED_VALUES = new Set([\n 'true',\n 'yes',\n true\n]);\nconst DISABLED_VALUES = new Set([\n 'false',\n 'no',\n false\n]);\n/**\n * Checks if a value is considered an enabled value.\n *\n * Recognizes 'true', 'yes', and true as enabled values.\n *\n * @param val value to check (string or boolean)\n * @returns true if value is an enabled value, false otherwise\n *\n * @example\n * isEnabledValue('true') // true\n * isEnabledValue('yes') // true\n * isEnabledValue(true) // true\n * isEnabledValue('false') // false\n * isEnabledValue('no') // false\n * isEnabledValue(false) // false\n */ export const isEnabledValue = (val)=>{\n return ENABLED_VALUES.has(val);\n};\n/**\n * Checks if a value is considered a disabled value.\n *\n * Recognizes 'false', 'no', and false as disabled values.\n *\n * @param val value to check (string or boolean)\n * @returns true if value is a disabled value, false otherwise\n *\n * @example\n * isDisabledValue('false') // true\n * isDisabledValue('no') // true\n * isDisabledValue(false) // true\n * isDisabledValue('true') // false\n * isDisabledValue('yes') // false\n * isDisabledValue(true) // false\n */ export const isDisabledValue = (val)=>{\n return DISABLED_VALUES.has(val);\n};\n/**\n * Checks if a value is either an enabled or disabled value.\n *\n * Recognizes 'true', 'yes', true, 'false', 'no', and false.\n *\n * @param val value to check (string or boolean)\n * @returns true if value is an enabled or disabled value, false otherwise\n *\n * @example\n * hasEnabledOrDisabledValue('true') // true\n * hasEnabledOrDisabledValue('false') // true\n * hasEnabledOrDisabledValue('yes') // true\n * hasEnabledOrDisabledValue('no') // true\n * hasEnabledOrDisabledValue(true) // true\n * hasEnabledOrDisabledValue(false) // true\n * hasEnabledOrDisabledValue('maybe') // false\n * hasEnabledOrDisabledValue(123) // false\n */ export const hasEnabledOrDisabledValue = (val)=>{\n return isEnabledValue(val) || isDisabledValue(val);\n};\n","import { assert, isFunction } from '../validation/index.mjs';\n/**\n * Error tuple, go-style.\n *\n * @param fn async function to run\n *\n * @example\n *\n * const [result, error] = await attempt(async () => {\n * return 'hello';\n * });\n *\n * if (error) {\n * console.error(error);\n * }\n *\n * console.log(result);\n */ export const attempt = async (fn)=>{\n assert(isFunction(fn), 'fn must be a function');\n try {\n return [\n await fn(),\n null\n ];\n } catch (e) {\n return [\n null,\n e\n ];\n }\n};\n/**\n * Synchronous error tuple, go-style.\n *\n * @example\n *\n * const [result, error] = attemptSync(() => {\n * return 'hello';\n * });\n *\n * if (error) {\n * console.error(error);\n * }\n *\n * console.log(result);\n */ export const attemptSync = (fn)=>{\n assert(isFunction(fn), 'fn must be a function');\n try {\n return [\n fn(),\n null\n ];\n } catch (e) {\n return [\n null,\n e\n ];\n }\n};\n","import { assert, isFunction } from '../validation/index.mjs';\nexport const cloneHandlers = new Map();\nexport const mergeHandlers = new Map();\nexport const equalityHandlers = new Map();\n/**\n * Properties that are dangerous for prototype pollution\n */ const DANGEROUS_PROPS = new Set([\n '__proto__',\n 'constructor',\n 'prototype'\n]);\n/**\n * Checks if a property key is dangerous for prototype pollution\n *\n * @param key - The property key to check\n * @returns true if the key is dangerous and should be skipped\n *\n * @example\n * isDangerousKey('__proto__'); // true\n * isDangerousKey('constructor'); // true\n * isDangerousKey('normalProp'); // false\n */ export const isDangerousKey = (key)=>{\n return typeof key === 'string' && DANGEROUS_PROPS.has(key);\n};\n/**\n * Filters out dangerous properties from an object's keys to prevent prototype pollution\n *\n * @param obj - The object to get safe keys from\n * @returns Array of safe property keys\n *\n * @example\n * const obj = { a: 1, __proto__: {}, constructor: Function };\n * getSafeKeys(obj); // ['a']\n */ export const getSafeKeys = (obj)=>{\n return Object.keys(obj).filter((key)=>!isDangerousKey(key));\n};\n/**\n * Filters out dangerous properties when iterating over object entries\n *\n * @param obj - The object to get safe entries from\n * @returns Array of safe [key, value] pairs\n *\n * @example\n * const obj = { a: 1, __proto__: {}, b: 2 };\n * getSafeEntries(obj); // [['a', 1], ['b', 2]]\n */ export const getSafeEntries = (obj)=>{\n return Object.entries(obj).filter(([key])=>!isDangerousKey(key));\n};\n/**\n * Add a handler for a specific function\n * @param fn - the function to add the handler for\n * @param cnstr - the constructor to add the handler for\n * @param handler - the handler to add\n\n* @example\n * addHandlerFor('clone', FooClass, (original, seen) => new FooClass(original.bar, original.baz));\n * addHandlerFor('equals', FooClass, (a, b, seen) => equals(a.bar, b.bar, seen) && equals(a.baz, b.baz, seen));\n * addHandlerFor('merge', FooClass, (target, source, opts) => merge(target.bar, source.bar, opts));\n */ export const addHandlerFor = (fn, cnstr, handler)=>{\n assert(/(clone|merge|equals)/.test(fn), 'invalid function name');\n assert(isFunction(handler), 'handler is not a function');\n if (fn === 'clone') {\n cloneHandlers.set(cnstr, handler);\n }\n if (fn === 'equals') {\n equalityHandlers.set(cnstr, handler);\n }\n if (fn === 'merge') {\n mergeHandlers.set(cnstr, handler);\n }\n};\n","import { isPrimitive } from '../index.mjs';\nimport { isDangerousKey, cloneHandlers } from './helpers.mjs';\nexport const prepareCloneHandlers = ()=>{\n cloneHandlers.set(Array, (arr, seen)=>arr.map((v)=>clone(v, seen)));\n cloneHandlers.set(Object, (obj, seen)=>{\n const copy = {};\n const keys = Object.keys(obj);\n for (const key of keys){\n // Skip dangerous prototype pollution keys\n if (isDangerousKey(key)) {\n continue;\n }\n copy[key] = clone(obj[key], seen);\n }\n return copy;\n });\n cloneHandlers.set(Map, (_map, seen)=>{\n const copy = new Map();\n for (const entry of _map.entries()){\n const [key, val] = entry;\n copy.set(key, clone(val, seen));\n }\n return copy;\n });\n cloneHandlers.set(Set, (_set, seen)=>{\n const copy = new Set();\n for (const original of _set){\n copy.add(clone(original, seen));\n }\n return copy;\n });\n // Add support for TypedArrays and ArrayBuffer\n const TYPED_ARRAYS = [\n Int8Array,\n Uint8Array,\n Uint8ClampedArray,\n Int16Array,\n Uint16Array,\n Int32Array,\n Uint32Array,\n Float32Array,\n Float64Array,\n BigInt64Array,\n BigUint64Array\n ];\n TYPED_ARRAYS.forEach((TypedArrayConstructor)=>{\n cloneHandlers.set(TypedArrayConstructor, (arr)=>{\n return new TypedArrayConstructor(arr);\n });\n });\n cloneHandlers.set(ArrayBuffer, (buffer)=>{\n return buffer.slice(0);\n });\n cloneHandlers.set(DataView, (view)=>{\n const clonedBuffer = view.buffer.slice(0);\n return new DataView(clonedBuffer, view.byteOffset, view.byteLength);\n });\n cloneHandlers.set(Error, (error, seen)=>{\n const cloned = typeof structuredClone === 'function' ? structuredClone(error) : new error.constructor(error.message);\n if (error.name) {\n cloned.name = error.name;\n }\n if (error.stack) {\n cloned.stack = error.stack;\n }\n // Copy any additional enumerable own properties\n const keys = Object.keys(error);\n for (const key of keys){\n if (key !== 'name' && key !== 'message' && key !== 'stack' && !isDangerousKey(key)) {\n cloned[key] = clone(error[key], seen);\n }\n }\n return cloned;\n });\n cloneHandlers.set(Date, (date)=>{\n return new Date(date.getTime());\n });\n cloneHandlers.set(RegExp, (regex)=>{\n return new RegExp(regex.source, regex.flags);\n });\n};\nlet cloneHandlersInitialized = false;\nconst useRawHandler = new Set([\n ArrayBuffer,\n DataView,\n Int8Array,\n Uint8Array,\n Uint8ClampedArray,\n Int16Array,\n Uint16Array,\n Int32Array,\n Uint32Array,\n Float32Array,\n Float64Array,\n BigInt64Array,\n BigUint64Array,\n Error,\n Date,\n RegExp\n]);\n/**\n * Deep clones Objects, Arrays, Maps and Sets with circular reference protection\n * @param original - The value to clone\n * @param seen - WeakMap to track circular references (internal use)\n * @returns {any} Cloned value\n * @example\n * const obj = { a: 1, b: { c: 2 } };\n * obj.circular = obj; // Create circular reference\n * const cloned = clone(obj); // Works without stack overflow\n */ export const clone = (original, seen = new WeakMap())=>{\n if (!cloneHandlersInitialized) {\n prepareCloneHandlers();\n cloneHandlersInitialized = true;\n }\n // Primatives do not have issues with hoisting\n if (isPrimitive(original)) {\n return original;\n }\n // Check for circular references\n if (seen.has(original)) {\n return seen.get(original);\n }\n if (original instanceof Error) {\n const cloneType = cloneHandlers.get(Error);\n return cloneType(original, seen);\n }\n // Get the actual constructor from the prototype chain to avoid prototype pollution\n const actualConstructor = Object.getPrototypeOf(original)?.constructor || original.constructor;\n const cloneType = cloneHandlers.get(actualConstructor);\n if (!cloneType) {\n return original;\n }\n if (useRawHandler.has(actualConstructor)) {\n return cloneType(original, seen);\n }\n // Create type-appropriate placeholder and add to seen map BEFORE cloning\n let placeholder;\n if (Array.isArray(original)) {\n placeholder = [];\n seen.set(original, placeholder);\n const cloned = cloneType(original, seen);\n // Fill the placeholder array\n placeholder.push(...cloned);\n return placeholder;\n }\n if (original instanceof Map) {\n placeholder = new Map();\n seen.set(original, placeholder);\n const cloned = cloneType(original, seen);\n // Fill the placeholder map\n for (const [key, value] of cloned){\n placeholder.set(key, value);\n }\n return placeholder;\n }\n if (original instanceof Set) {\n placeholder = new Set();\n seen.set(original, placeholder);\n const cloned = cloneType(original, seen);\n // Fill the placeholder set\n for (const value of cloned){\n placeholder.add(value);\n }\n return placeholder;\n }\n // Handle regular objects and other types\n placeholder = {};\n seen.set(original, placeholder);\n const cloned = cloneType(original, seen);\n // Copy all properties from cloned object to placeholder\n Object.assign(placeholder, cloned);\n return placeholder;\n};\n","import { isPrimitive, hasNoConstructor, hasSameConstructor } from '../index.mjs';\nimport { isDangerousKey, getSafeKeys, mergeHandlers } from './helpers.mjs';\nconst mergeArrays = (target, source)=>{\n for (const value of source){\n target.push(value);\n }\n return target;\n};\nconst mergeSets = (target, source)=>{\n for (const value of source){\n if (!target.has(value)) {\n target.add(value);\n }\n }\n return target;\n};\nconst overwriteArrays = (target, source)=>{\n target.length = 0;\n for (const value of source){\n target.push(value);\n }\n return target;\n};\nconst overwriteSets = (target, source)=>{\n target.clear();\n for (const value of source){\n target.add(value);\n }\n return target;\n};\nexport const prepareMergeHandlers = ()=>{\n mergeHandlers.set(Array, (target, source, options)=>{\n if (options?.mergeArrays) {\n return mergeArrays(target, source);\n }\n return overwriteArrays(target, source);\n });\n mergeHandlers.set(Set, (target, source, options)=>{\n if (options?.mergeSets) {\n return mergeSets(target, source);\n }\n return overwriteSets(target, source);\n });\n mergeHandlers.set(Object, (_target, _source, options)=>{\n const target = _target;\n const source = _source;\n const sourceKeys = Object.keys(source);\n for (const key of sourceKeys){\n // Skip dangerous prototype pollution keys\n if (isDangerousKey(key)) {\n continue;\n }\n if (target[key] === undefined || hasNoConstructor(target[key]) || hasNoConstructor(source[key])) {\n target[key] = source[key];\n continue;\n }\n if (hasSameConstructor(target[key], source[key])) {\n target[key] = merge(target[key], source[key], options);\n continue;\n }\n target[key] = source[key];\n }\n return target;\n });\n mergeHandlers.set(Map, (_target, _source, options)=>{\n const target = _target;\n const source = _source;\n for (const [key, bValue] of source.entries()){\n if (!target.has(key)) {\n target.set(key, bValue);\n continue;\n }\n const aValue = target.get(key);\n if (hasNoConstructor(aValue) || hasNoConstructor(bValue)) {\n target.set(key, bValue);\n continue;\n }\n if (hasSameConstructor(bValue, aValue)) {\n target.set(key, merge(aValue, bValue, options));\n continue;\n }\n target.set(key, bValue);\n }\n return target;\n });\n mergeHandlers.set(Error, (_target, _source, options)=>{\n const target = _target;\n const source = _source;\n // Get safe keys (excluding dangerous prototype pollution keys)\n const sourceKeys = getSafeKeys(source);\n for (const key of sourceKeys){\n if (target[key] === undefined) {\n target[key] = source[key];\n continue;\n }\n if (hasSameConstructor(target[key], source[key])) {\n target[key] = merge(target[key], source[key], options);\n continue;\n }\n target[key] = source[key];\n }\n return target;\n });\n const TYPED_ARRAYS = [\n Int8Array,\n Uint8Array,\n Uint8ClampedArray,\n Int16Array,\n Uint16Array,\n Int32Array,\n Uint32Array,\n Float32Array,\n Float64Array,\n BigInt64Array,\n BigUint64Array\n ];\n TYPED_ARRAYS.forEach((TypedArrayConstructor)=>{\n mergeHandlers.set(TypedArrayConstructor, (_target, source)=>{\n // For binary data, merge typically means replace\n return new TypedArrayConstructor(source);\n });\n });\n mergeHandlers.set(ArrayBuffer, (_target, source)=>{\n // Replace with source buffer\n return source.slice(0);\n });\n mergeHandlers.set(DataView, (_target, source)=>{\n const sourceView = source;\n const clonedBuffer = sourceView.buffer.slice(0);\n return new DataView(clonedBuffer, sourceView.byteOffset, sourceView.byteLength);\n });\n // Add support for Error objects\n const ERROR_TYPES = [\n Error,\n TypeError,\n ReferenceError,\n SyntaxError,\n RangeError,\n EvalError,\n URIError\n ];\n ERROR_TYPES.forEach((ErrorConstructor)=>{\n mergeHandlers.set(ErrorConstructor, (_target, source)=>{\n // For Error objects, merge typically means replace with source\n const sourceError = source;\n const cloned = new sourceError.constructor(sourceError.message);\n if (sourceError.name) {\n cloned.name = sourceError.name;\n }\n if (sourceError.stack) {\n cloned.stack = sourceError.stack;\n }\n // Copy any additional enumerable properties (protected against prototype pollution)\n const keys = Object.keys(sourceError);\n for (const key of keys){\n if (key !== 'name' && key !== 'message' && key !== 'stack' && !isDangerousKey(key)) {\n cloned[key] = sourceError[key];\n }\n }\n return cloned;\n });\n });\n};\nlet mergeHandlersInitialized = false;\n/**\n * overridable defaults for the merge function\n */ export const mergeDefaults = {\n mergeArrays: true,\n mergeSets: true\n};\n/**\n * Deep merge Objects, Arrays, Maps and Sets\n * @param target\n * @param source\n */ export const merge = (target, source, options = {})=>{\n if (!mergeHandlersInitialized) {\n prepareMergeHandlers();\n mergeHandlersInitialized = true;\n }\n options = {\n ...mergeDefaults,\n ...options\n };\n // Primatives do not have issues with hoisting\n if (isPrimitive(source) || source instanceof Date) {\n return source;\n }\n if (hasSameConstructor(source, target)) {\n // Get the actual constructor from the prototype chain to avoid prototype pollution\n const actualConstructor = Object.getPrototypeOf(target)?.constructor || target.constructor;\n const mergeType = mergeHandlers.get(actualConstructor);\n // Warn about using specific types that are not supported\n if (!mergeType) {\n return target;\n }\n return mergeType(target, source, options);\n }\n return source;\n};\n","const fifoCompare = (a, b)=>{\n if (a.priority === b.priority) {\n return a.order - b.order;\n }\n return a.priority - b.priority;\n};\nconst lifoCompare = (a, b)=>{\n if (a.priority === b.priority) {\n return b.order - a.order;\n }\n return a.priority - b.priority;\n};\n/**\n * A pure data structure that maintains a set of ordered items by numeric priority.\n * Lower priority numbers dequeue first. Ties are broken by insertion order.\n *\n * Time Complexity:\n * - Enqueue: O(log n)\n * - Dequeue: O(log n)\n * - Peek: O(1)\n *\n * Space Complexity: O(n) where n is the number of items in the queue\n */ export class PriorityQueue {\n #heap = [];\n #insertionCounter = 0;\n #compare;\n #options;\n constructor(options = {}){\n /**\n * Default compare function\n */ this.#compare = options.lifo ? lifoCompare : fifoCompare;\n if (options.compare) {\n this.#compare = options.compare;\n }\n if (options.maxHeap) {\n const originalCompare = this.#compare;\n this.#compare = (a, b)=>-originalCompare(a, b);\n }\n this.#options = options;\n }\n /**\n * Adds a new item into the queue.\n * @param value The payload associated with the item\n * @param priority Numeric priority (lower = higher priority)\n *\n * Time Complexity: O(log n)\n * Space Complexity: O(1)\n */ push(value, priority = 0) {\n const node = {\n value,\n priority,\n order: this.#insertionCounter++\n };\n this.#heap.push(node);\n this.#bubbleUp(this.#heap.length - 1);\n }\n /**\n * Removes and returns the highest-priority item.\n * Returns null if the queue is empty.\n *\n * Time Complexity: O(log n)\n * Space Complexity: O(1)\n */ pop() {\n if (this.#heap.length === 0) return null;\n const top = this.#heap[0];\n const last = this.#heap.pop();\n if (this.#heap.length > 0) {\n this.#heap[0] = last;\n this.#bubbleDown(0);\n }\n return top.value;\n }\n /**\n * Removes and returns many items from the queue.\n * Returns an empty array if the queue is empty.\n */ popMany(count = 1) {\n const items = [];\n if (count === 0) {\n return items;\n }\n if (count > this.#heap.length) {\n count = this.#heap.length;\n }\n for(let i = count; i > 0; i--){\n items.push(this.pop());\n }\n return items;\n }\n /**\n * Returns the next item to be dequeued without removing it.\n */ peek() {\n return this.isEmpty() ? null : this.#heap[0].value;\n }\n /**\n * Returns the next item to be dequeued without removing it.\n */ peekMany(count = 1) {\n return this.#heap.slice(0, count).map((node)=>node.value);\n }\n /**\n * Find an item in the queue by predicate.\n */ find(predicate) {\n return this.#heap.find((node)=>predicate(node.value))?.value ?? null;\n }\n /**\n * Heapify the queue.\n *\n * Time Complexity: O(n)\n * Space Complexity: O(n)\n */ heapify(items) {\n this.#heap = items.slice(0);\n this.#insertionCounter = items.length;\n for(let i = Math.floor(this.#heap.length / 2); i >= 0; i--){\n this.#bubbleDown(i);\n }\n }\n clone() {\n const clone = new PriorityQueue(this.#options);\n clone.heapify(this.#heap);\n return clone;\n }\n /**\n * Returns a sorted array of the queue.\n */ toSortedArray() {\n const clone = this.clone();\n const sorted = [];\n while(clone.#heap.length > 0){\n sorted.push(clone.pop());\n }\n return sorted;\n }\n /**\n * Returns an iterator over the queue.\n */ *[Symbol.iterator]() {\n const clone = this.clone();\n while(clone.#heap.length > 0){\n yield clone.pop();\n }\n }\n /**\n * Returns the number of items in the queue.\n */ size() {\n return this.#heap.length;\n }\n /**\n * Returns true if the queue is empty.\n */ isEmpty() {\n return this.#heap.length === 0;\n }\n /**\n * Clears all items and resets the insertion counter.\n */ clear() {\n this.#heap = [];\n this.#insertionCounter = 0;\n }\n /**\n * Moves the node at index up to restore heap invariant.\n *\n * Time Complexity: O(log n)\n * Space Complexity: O(1)\n */ #bubbleUp(index) {\n let idx = index;\n while(idx > 0){\n const parentIdx = idx - 1 >> 1;\n if (this.#compare(this.#heap[idx], this.#heap[parentIdx]) < 0) {\n this.#swap(idx, parentIdx);\n idx = parentIdx;\n } else {\n break;\n }\n }\n }\n /**\n * Moves the node at index down to restore heap invariant.\n *\n * Time Complexity: O(log n)\n * Space Complexity: O(1)\n */ #bubbleDown(index) {\n const length = this.#heap.length;\n let idx = index;\n while(true){\n const left = (idx << 1) + 1;\n const right = left + 1;\n let smallest = idx;\n if (left < length && this.#compare(this.#heap[left], this.#heap[smallest]) < 0) {\n smallest = left;\n }\n if (right < length && this.#compare(this.#heap[right], this.#heap[smallest]) < 0) {\n smallest = right;\n }\n if (smallest === idx) {\n break;\n }\n this.#swap(idx, smallest);\n idx = smallest;\n }\n }\n /**\n * Swaps two nodes in the heap.\n */ #swap(i, j) {\n [this.#heap[i], this.#heap[j]] = [\n this.#heap[j],\n this.#heap[i]\n ];\n }\n}\n","import { assert, isFunction } from '../validation/index.mjs';\nimport { attempt } from '../async/attempt.mjs';\n/**\n * Creates a deferred promise that can be resolved or rejected externally.\n *\n * Provides a promise with externally accessible resolve and reject methods.\n * Useful for creating promises that need to be controlled from outside\n * their creation context.\n *\n * @example\n * const deferred = new Deferred<string>();\n *\n * // Set up the promise consumer\n * deferred.promise.then(result => {\n * console.log('Got result:', result);\n * });\n *\n * // Resolve from elsewhere\n * setTimeout(() => {\n * deferred.resolve('Hello world!');\n * }, 1000);\n *\n * @example\n * class AsyncQueue<T> {\n * private pending = new Map<string, Deferred<T>>();\n *\n * async waitFor(id: string): Promise<T> {\n * if (!this.pending.has(id)) {\n * this.pending.set(id, new Deferred<T>());\n * }\n * return this.pending.get(id)!.promise;\n * }\n *\n * complete(id: string, result: T) {\n * const deferred = this.pending.get(id);\n * if (deferred) {\n * deferred.resolve(result);\n * this.pending.delete(id);\n * }\n * }\n * }\n *\n * @example\n * // Coordinate multiple async operations\n * const coordinateWork = () => {\n * const coordinator = new Deferred<void>();\n * let completed = 0;\n *\n * const checkComplete = () => {\n * if (++completed === 3) {\n * coordinator.resolve();\n * }\n * };\n *\n * doWork1().then(checkComplete);\n * doWork2().then(checkComplete);\n * doWork3().then(checkComplete);\n *\n * return coordinator.promise;\n * };\n */ export class Deferred {\n promise;\n resolve;\n reject;\n constructor(){\n this.promise = new Promise((resolve, reject)=>{\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n}\nif (typeof Promise.withResolvers !== 'function') {\n Promise.withResolvers = ()=>{\n return new Deferred();\n };\n}\n/**\n * A promise that can be cleared.\n *\n * A promise that can be cleared using the `clear` method.\n */ class TimeoutPromise extends Promise {\n clear;\n}\n/**\n * Waits for the specified number of milliseconds before\n * resolving with the optional value.\n *\n * Can be cleared using the `clear` method.\n *\n * @param ms milliseconds to wait\n * @param value value to resolve with\n * @returns TimeoutPromise that resolves after the delay\n *\n * @example\n * await wait(1000); // Wait 1 second\n * console.log('One second has passed');\n *\n * const timeout = wait(1000);\n * timeout.clear(); // Clears the timeout\n *\n * const someVal = await wait(100, 'some value');\n * console.log(someVal); // 'some value'\n *\n * // Add delay between operations\n * for (const item of items) {\n * await processItem(item);\n * await wait(100); // Throttle processing\n * }\n *\n * // Retry with backoff\n * async function retryOperation(fn: () => Promise<any>, attempts = 3) {\n * for (let i = 0; i < attempts; i++) {\n * try {\n * return await fn();\n * } catch (error) {\n * if (i === attempts - 1) throw error;\n * await wait(1000 * Math.pow(2, i)); // Exponential backoff\n * }\n * }\n * }\n */ export const wait = (ms, value = true)=>{\n let timeout;\n const promise = new TimeoutPromise((resolve)=>{\n timeout = setTimeout(()=>{\n timeout = null;\n resolve(value);\n }, ms);\n });\n promise.clear = ()=>{\n if (!timeout) return;\n clearTimeout(timeout);\n timeout = null;\n };\n return promise;\n};\n/**\n * Runs functions in series, waiting for each to complete before running the next.\n * This is a synchronous operation.\n *\n * @param fns functions to run in series\n * @returns array of results from each function execution\n *\n * @example\n * // Assumes observer will return a cleanup function\n * const cleanupStart = observer.on('start', someFunc);\n * const cleanupStop = observer.on('stop', someFunc);\n * const cleanupError = observer.on('error', someFunc);\n * const cleanupCleanup = observer.on('cleanup', someFunc);\n *\n * // ...\n *\n * runInSeries([cleanupStart, cleanupStop, cleanupError, cleanupCleanup]);\n */ export const runInSeries = (fns)=>Array.from(fns, (fn)=>fn());\n/**\n * Creates a function that runs functions in series. This is a synchronous operation.\n * Use `as const` to ensure the array is treated as a tuple if the functions have\n * different parameter types.\n *\n * @param fns functions to run in series\n * @returns function that runs functions in series\n *\n * @example\n * const logStep = (step: string) => console.log(`Step: ${step}`);\n * const saveData = (data: any) => database.save(data);\n * const sendNotification = (message: string) => emailService.send(message);\n *\n * const inSeries = makeInSeries([logStep, saveData, sendNotification] as const);\n * inSeries(['processing'], [userData], ['User created']);\n */ export const makeInSeries = (fns)=>{\n assert(Array.isArray(fns), 'fns must be an array');\n assert(fns.every((fn)=>isFunction(fn)), 'fns must be an array of functions');\n return (...args)=>{\n return fns.map((fn, index)=>fn(...args[index] || []));\n };\n};\n/**\n * A promise that resolves after the next loop.\n *\n * @returns Promise that resolves after the next loop\n *\n * @example\n *\n * Promise.all(someBatch);\n *\n * await nextLoop();\n *\n * // ...\n */ export const nextLoop = ()=>new Promise(setImmediate);\n/**\n * A promise that resolves after the next tick.\n *\n * @returns Promise that resolves after the next tick\n */ export const nextTick = ()=>new Promise(typeof process !== 'undefined' ? process.nextTick : setImmediate);\n/**\n * A polyfill for the `setImmediate` function that is not available in all browsers.\n */ if (typeof setImmediate !== 'function') {\n let nextHandle = 0;\n const tasks = new Map();\n const channel = new MessageChannel();\n // Use MessageChannel because it bypasses the timer queue and its potential delays\n channel.port1.onmessage = async (event)=>{\n const handle = event.data;\n const fn = tasks.get(handle);\n if (!fn) return;\n const [, error] = await attempt(fn);\n if (error) console.error('Error in setImmediate', error);\n };\n globalThis.setImmediate = (fn, ...args)=>{\n const handle = nextHandle++;\n tasks.set(handle, ()=>fn(...args));\n channel.port2.postMessage(handle);\n return handle;\n };\n globalThis.clearImmediate = (handle)=>{\n tasks.delete(handle);\n };\n}\n","// Symbol to mark a function as wrapped by a flow control mechanism.\nexport const ORIGINAL_FUNCTION = Symbol('original-function');\nconst maps = {\n retry: new WeakMap(),\n circuitBreaker: new WeakMap(),\n rateLimit: new WeakMap(),\n throttle: new WeakMap(),\n debounce: new WeakMap(),\n memoize: new WeakMap(),\n withTimeout: new WeakMap(),\n inflight: new WeakMap()\n};\n// Mark a function as wrapped by a flow control mechanism.\nexport const markWrapped = (fn, wrapped, name)=>{\n const original = fn[ORIGINAL_FUNCTION] || fn;\n assertNotWrapped(fn, name);\n wrapped[ORIGINAL_FUNCTION] = original;\n maps[name].set(wrapped, original);\n};\n// Assert that a function is not already wrapped by a specific flow control mechanism.\nexport const assertNotWrapped = (fn, name)=>{\n if (maps[name].has(fn)) {\n throw new Error(`Function is already wrapped with ${name}`);\n }\n};\n","import { wait } from '../flow-control/misc.mjs';\nimport { markWrapped, assertNotWrapped } from '../_helpers.mjs';\nimport { attempt } from './attempt.mjs';\nimport { assert, isFunction, assertOptional, isPlainObject } from '../validation/index.mjs';\n/**\n * Error thrown when the maximum number of retries is reached.\n */ export class RetryError extends Error {\n constructor(message){\n super(message);\n this.name = 'RetryError';\n }\n}\nexport const isRetryError = (error)=>{\n return error?.constructor?.name === RetryError.name;\n};\nconst validateOpts = (opts)=>{\n assert(isPlainObject(opts), 'opts must be an object');\n assertOptional(opts.retries, typeof opts.retries === 'number' && opts.retries > 0, 'retries must be a positive number');\n assertOptional(opts.delay, typeof opts.delay === 'number' && opts.delay >= 0, 'delay must be a positive number');\n assertOptional(opts.backoff, typeof opts.backoff === 'number' && opts.backoff > 0, 'backoff must be a positive number');\n assertOptional(opts.shouldRetry, isFunction(opts.shouldRetry), 'shouldRetry must be a function');\n assertOptional(opts.signal, opts.signal instanceof AbortSignal, 'signal must be an AbortSignal');\n};\n/**\n * Retries a function until it succeeds or the number of retries is reached.\n * @param fn function to retry\n * @param opts options\n * @returns\n *\n * @example\n *\n * const fetchData = retry(\n * async () => {\n * const response = await fetch('https://api.example.com/data');\n * return response.json();\n * },\n * {\n * retries: 3,\n * delay: 1000,\n * backoff: 2,\n * shouldRetry: (error) => error.message.includes('500')\n * }\n * );\n *\n * const data = await fetchData();\n *\n */ export const retry = async (fn, opts)=>{\n assert(isFunction(fn), 'fn must be a function');\n assertNotWrapped(fn, 'retry');\n validateOpts(opts);\n const { delay = 0, retries = 3, backoff = 1, jitterFactor = 0, shouldRetry = ()=>true, signal, throwLastError = false, onRetryExhausted, onRetry } = opts;\n let attempts = 0;\n let lastError = null;\n while(attempts < retries){\n signal?.throwIfAborted();\n if (attempts > 0 && onRetry && lastError) {\n await onRetry(lastError, attempts);\n }\n const [result, error] = await attempt(fn);\n signal?.throwIfAborted();\n if (error === null) {\n return result;\n }\n lastError = error;\n if (error && shouldRetry(error)) {\n await wait(delay * backoff * (1 + jitterFactor * Math.random()));\n attempts++;\n signal?.throwIfAborted();\n continue;\n }\n throw error;\n }\n if (onRetryExhausted) {\n return onRetryExhausted(lastError);\n }\n if (throwLastError) {\n throw lastError;\n }\n throw new RetryError('Max retries reached');\n};\n/**\n * Makes a function retryable.\n * @param fn function to make retryable\n * @param opts options\n * @returns retryable function\n */ export const makeRetryable = (fn, opts)=>{\n assert(isFunction(fn), 'fn must be a function');\n validateOpts(opts);\n const retryableFunction = function(...args) {\n return retry(fn.bind(fn, ...args), opts);\n };\n markWrapped(fn, retryableFunction, 'retry');\n return retryableFunction;\n};\n","/**\n * A no-operation function that accepts any arguments and returns any value.\n *\n * @param args any arguments\n * @returns any value\n */ export const noop = ()=>{};\n/**\n * Generates a random ID.\n *\n * Creates a random ID string using Math.random().\n *\n * @returns random ID string\n */ export const generateId = ()=>'_' + Math.random().toString(36).slice(2, 9);\n/**\n * Repeats something N times and returns an array of the results.\n *\n * @param fn function to repeat\n * @param n number of times to repeat\n * @returns array of results\n *\n * @example\n * nTimes(() => createEl('span'), 3) // [span, span, span]\n * nTimes(() => Math.random(), 5) // [0.123, 0.456, 0.789, 0.123, 0.456]\n * nTimes((i) => (i + 1) * 2, 3) // [2, 4, 6]\n */ export const nTimes = (fn, n)=>{\n if (typeof n !== 'number') throw new Error('n must be a number');\n if (typeof fn !== 'function') throw new Error('fn must be a function');\n return Array.from({\n length: n\n }, (_, i)=>fn(i));\n};\nconst unserializableIds = new WeakMap();\nconst getUnserializableId = (value)=>{\n if (!unserializableIds.has(value)) {\n unserializableIds.set(value, generateId());\n }\n return unserializableIds.get(value);\n};\n/**\n * Enhanced key generation that handles object property ordering,\n * circular references, and non-serializable values with unique IDs.\n *\n * This function provides more reliable key generation than JSON.stringify\n * by handling edge cases like circular references, consistent object key ordering,\n * and various JavaScript types.\n *\n * **Non-serializable types get unique instance IDs:**\n * - Functions → `fn:_abc123` (unique per function instance)\n * - Symbols → `sym:_abc123` (unique per symbol instance)\n * - Errors → `e:_abc123` (unique per error instance)\n * - WeakMap → `wm:_abc123` (unique per instance)\n * - WeakSet → `ws:_abc123` (unique per instance)\n * - Circular refs → `circ:_abc123` (unique per object)\n *\n * @param args - The arguments to generate a key from\n * @returns A string key suitable for caching\n *\n * @example\n * ```typescript\n * const key = serializer([{a: 1, b: 2}, \"test\", 123]);\n * // Returns: '{\"a\":1,\"b\":2}|test|123'\n *\n * const key2 = serializer([new Date(1000), /test/i]);\n * // Returns: 'd:1000|r:/test/i'\n *\n * // Functions get unique IDs\n * const fn1 = () => {};\n * const fn2 = () => {};\n * serializer([fn1]) !== serializer([fn2]); // true\n * serializer([fn1]) === serializer([fn1]); // true\n * ```\n */ export const serializer = (args)=>{\n const seen = new WeakSet();\n const stringify = (value)=>{\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (typeof value === 'string') return `${value}`;\n if (typeof value === 'number') {\n if (Object.is(value, -0)) return '-0';\n return String(value);\n }\n if (typeof value === 'boolean') return String(value);\n if (typeof value === 'bigint') return `bi:${value}`;\n if (typeof value === 'symbol') return `sym:${getUnserializableId(value)}`;\n if (typeof value === 'function') return `fn:${getUnserializableId(value)}`;\n if (value instanceof Date) return `d:${value.getTime()}`;\n if (value instanceof RegExp) return `r:${value.toString()}`;\n if (value instanceof Error) return `e:${getUnserializableId(value)}`;\n if (value instanceof WeakMap) return `wm:${getUnserializableId(value)}`;\n if (value instanceof WeakSet) return `ws:${getUnserializableId(value)}`;\n if (typeof value === 'object') {\n if (seen.has(value)) return `circ:${getUnserializableId(value)}`;\n seen.add(value);\n if (value instanceof Map) {\n const pairs = Array.from(value.entries()).map(([k, v])=>`${stringify(k)}:${stringify(v)}`).sort();\n const result = `map:${pairs.join(',')}`;\n seen.delete(value);\n return result;\n }\n if (value instanceof Set) {\n const values = Array.from(value).map(stringify).sort();\n const result = `set:${values.join(',')}`;\n seen.delete(value);\n return result;\n }\n if (Array.isArray(value)) {\n const result = `[${value.map(stringify).join(',')}]`;\n seen.delete(value);\n return result;\n }\n // Plain objects\n const keys = Object.keys(value).sort();\n const pairs = keys.map((key)=>`\"${key}\":${stringify(value[key])}`);\n const result = `{${pairs.join(',')}}`;\n seen.delete(value);\n return result;\n }\n // Fallback for any unknown types (defensive - shouldn't be reached for standard JS)\n return `u:${String(value)}`;\n };\n const key = args.map(stringify).join('|');\n return key || '0'; // Use '0' for functions with no arguments\n};\n","import { isObject } from '../../validation/index.mjs';\n/**\n * Unwraps a cache value, handling WeakRef if present.\n * Returns tuple: [value, wasGarbageCollected]\n *\n * @param value - Value to unwrap (may be WeakRef)\n * @returns Tuple of [unwrapped value, whether it was GC'd]\n */ export const unwrapValue = (value)=>{\n if (value instanceof WeakRef) {\n const deref = value.deref();\n return [\n deref,\n deref === undefined\n ];\n }\n return [\n value,\n false\n ];\n};\n/**\n * Creates a cache item with metadata.\n *\n * @param value - Value to cache\n * @param createdAt - Creation timestamp\n * @param expiresAt - Expiration timestamp\n * @param useWeakRef - Whether to use WeakRef for objects\n * @param accessSequence - Monotonic sequence number\n * @returns Cache item with metadata\n */ export const createCacheItem = (value, createdAt, expiresAt, useWeakRef, accessSequence)=>{\n const storedValue = useWeakRef && isObject(value) && value !== null ? new WeakRef(value) : value;\n return {\n value: storedValue,\n createdAt,\n expiresAt,\n accessCount: 1,\n lastAccessed: createdAt,\n accessSequence\n };\n};\n/**\n * Checks if a cache item is expired.\n *\n * @param item - Cache item to check\n * @returns True if expired\n */ export const isExpired = (item)=>{\n return Date.now() >= item.expiresAt;\n};\n/**\n * Checks if a cache item is stale (older than staleIn but not expired).\n *\n * @param item - Cache item to check\n * @param staleIn - Staleness threshold in milliseconds\n * @returns True if stale but not expired\n */ export const isStale = (item, staleIn)=>{\n const now = Date.now();\n const age = now - item.createdAt;\n return age > staleIn && now < item.expiresAt;\n};\n/**\n * Updates access metadata for a cache item atomically.\n *\n * @param item - Cache item to update\n * @param sequence - New sequence number\n */ export const updateAccessMetadata = (item, sequence)=>{\n const now = Date.now();\n item.lastAccessed = now;\n item.accessCount = (item.accessCount ?? 0) + 1;\n item.accessSequence = sequence;\n};\n/**\n * Symbol used for timeout racing in stale-while-revalidate.\n */ export const TIMEOUT_SYMBOL = Symbol('timeout');\n/**\n * Evicts the least recently used item from a cache.\n * Uses sequence number for tie-breaking when timestamps are identical.\n *\n * @param cache - Map to evict from\n * @returns Key of evicted item, or null if cache is empty\n */ export const evictLRU = (cache)=>{\n let lruKey = null;\n let lruTime = Infinity;\n let lruSequence = Infinity;\n for (const [key, item] of cache.entries()){\n const itemLastAccessed = item.lastAccessed ?? 0;\n const itemAccessSequence = item.accessSequence ?? 0;\n const isLessRecent = itemLastAccessed < lruTime || itemLastAccessed === lruTime && itemAccessSequence < lruSequence;\n if (isLessRecent) {\n lruTime = itemLastAccessed;\n lruSequence = itemAccessSequence;\n lruKey = key;\n }\n }\n if (lruKey) {\n cache.delete(lruKey);\n }\n return lruKey;\n};\n","import { assert, assertOptional, isFunction, isOptional } from '../../validation/index.mjs';\nimport { attemptSync } from '../../async/attempt.mjs';\nimport { serializer } from '../../misc/index.mjs';\nimport { createCacheItem, isExpired, unwrapValue, updateAccessMetadata, evictLRU } from './helpers.mjs';\nconst memoizedFunctions = new WeakSet();\n/**\n * Memoizes a synchronous function with intelligent caching and LRU eviction.\n *\n * **What it does:**\n * - Caches sync function results with configurable TTL\n * - LRU eviction when cache reaches maxSize\n * - Background cleanup of expired entries\n * - WeakRef support for memory-sensitive scenarios\n * - Zero promise overhead (fully synchronous)\n *\n * **What it doesn't do:**\n * - No inflight deduplication (sync functions execute instantly)\n * - No async cache adapters (uses direct Map for performance)\n * - No stale-while-revalidate (not applicable for sync, use memoize for async)\n *\n * **When to use:**\n * - Expensive pure computations (parsing, transformations, calculations)\n * - Functions called frequently with the same arguments\n * - Need caching without async overhead\n *\n * **Performance notes:**\n * - Optimized cache hit path with minimal allocations\n * - Direct Map usage (no adapter abstraction overhead)\n * - Default key generation: O(n) in argument structure size\n *\n * @template T - Sync function type\n * @param fn - Sync function to memoize\n * @param opts - Memoization options (adapter, staleIn, staleTimeout not supported)\n * @returns Enhanced memoized function with cache management methods\n *\n * @example\n * // Basic usage\n * const fibonacci = (n: number): number => {\n * if (n <= 1) return n;\n * return fibonacci(n - 1) + fibonacci(n - 2);\n * };\n * const memoFib = memoizeSync(fibonacci);\n *\n * memoFib(40); // Computed once and cached\n * memoFib(40); // Instant return from cache\n *\n * @example\n * // With custom key and TTL\n * const parseJSON = (str: string) => JSON.parse(str);\n * const memoizedParse = memoizeSync(parseJSON, {\n * generateKey: (str) => str.substring(0, 100), // Cache by first 100 chars\n * ttl: 300000, // 5 minutes\n * maxSize: 50\n * });\n *\n * @example\n * // Conditional caching - bypass cache for specific calls\n * const expensiveCalc = (value: number, opts?: { bustCache?: boolean }) => {\n * return value * 2 + Math.random();\n * };\n * const smartCalc = memoizeSync(expensiveCalc, {\n * shouldCache: (value, opts) => !opts?.bustCache,\n * ttl: 60000\n * });\n *\n * // This call uses cache\n * smartCalc(42);\n *\n * // This call bypasses cache and executes directly\n * smartCalc(42, { bustCache: true });\n */ export const memoizeSync = (fn, opts = {})=>{\n assert(isFunction(fn), 'fn must be a function');\n assert(!memoizedFunctions.has(fn), 'Function is already wrapped by memoize');\n const { ttl = 60000, maxSize = 1000, generateKey, onError, cleanupInterval = 60000, useWeakRef = false, shouldCache } = opts;\n const { staleIn, staleTimeout, adapter } = opts// Cast to any to bypass TS checks for unsupported options\n ;\n assert(ttl > 0, 'ttl must be greater than 0');\n assert(maxSize > 0, 'maxSize must be greater than 0');\n assert(isOptional(cleanupInterval, (val)=>typeof val === 'number' && val >= 0), 'cleanupInterval must be >= 0');\n assertOptional(generateKey, isFunction(generateKey), 'generateKey must be a function');\n assertOptional(onError, isFunction(onError), 'onError must be a function');\n assert(adapter === undefined, 'memoizeSync does not support custom cache adapters (use memoize for async adapters like Redis)');\n assert(staleTimeout === undefined, 'memoizeSync does not support staleTimeout (sync functions execute instantly)');\n assert(staleIn === undefined, 'memoizeSync does not support staleIn (sync functions execute instantly, use ttl instead)');\n const cache = new Map();\n let accessSequence = 0;\n let hits = 0;\n let misses = 0;\n let evictions = 0;\n let cleanupTimer;\n const getNextSequence = ()=>{\n if (accessSequence >= Number.MAX_SAFE_INTEGER - 1) {\n accessSequence = 0;\n }\n return ++accessSequence;\n };\n const recordHit = ()=>hits++;\n const recordMiss = ()=>misses++;\n const cleanupExpired = ()=>{\n const now = Date.now();\n for (const [key, item] of cache.entries()){\n if (now >= item.expiresAt) {\n cache.delete(key);\n }\n }\n };\n if (cleanupInterval > 0) {\n cleanupTimer = setInterval(()=>cleanupExpired(), cleanupInterval);\n if (typeof cleanupTimer.unref === 'function') {\n cleanupTimer.unref();\n }\n }\n const memoized = function(...args) {\n if (shouldCache) {\n const [shouldCacheResult, shouldCacheError] = attemptSync(()=>shouldCache(...args));\n if (!shouldCacheError && !shouldCacheResult) {\n return fn(...args);\n }\n }\n const [key, keyError] = attemptSync(()=>generateKey ? generateKey(...args) : serializer(args));\n if (keyError) {\n onError?.(keyError, args);\n recordMiss();\n return fn(...args);\n }\n const cached = cache.get(key);\n if (cached && !isExpired(cached)) {\n updateAccessMetadata(cached, getNextSequence());\n const [unwrapped, wasGC] = unwrapValue(cached.value);\n if (wasGC) {\n cache.delete(key);\n recordMiss();\n const [value, error] = attemptSync(()=>fn(...args));\n if (error) {\n onError?.(error, args);\n throw error;\n }\n const now = Date.now();\n const item = createCacheItem(value, now, now + ttl, useWeakRef, getNextSequence());\n if (cache.size >= maxSize) {\n evictLRU(cache);\n evictions++;\n }\n cache.set(key, item);\n return value;\n }\n recordHit();\n return unwrapped;\n }\n recordMiss();\n const [value, error] = attemptSync(()=>fn(...args));\n if (error) {\n onError?.(error, args);\n throw error;\n }\n const now = Date.now();\n const item = createCacheItem(value, now, now + ttl, useWeakRef, getNextSequence());\n if (cache.size >= maxSize) {\n evictLRU(cache);\n evictions++;\n }\n cache.set(key, item);\n return value;\n };\n memoized.cache = {\n clear: ()=>{\n cache.clear();\n hits = 0;\n misses = 0;\n evictions = 0;\n accessSequence = 0;\n if (cleanupTimer !== undefined) {\n clearInterval(cleanupTimer);\n cleanupTimer = undefined;\n }\n },\n delete: (key)=>{\n return cache.delete(key);\n },\n has: (key)=>{\n const item = cache.get(key);\n if (!item) {\n return false;\n }\n if (isExpired(item)) {\n cache.delete(key);\n return false;\n }\n return true;\n },\n get size () {\n return cache.size;\n },\n stats: ()=>{\n return {\n hits,\n misses,\n evictions,\n hitRate: hits + misses > 0 ? hits / (hits + misses) : 0,\n size: cache.size\n };\n },\n keys: ()=>{\n return cache.keys();\n },\n entries: ()=>{\n const results = [];\n for (const [key, item] of cache.entries()){\n if (!isExpired(item)) {\n const [unwrapped] = unwrapValue(item.value);\n results.push([\n key,\n unwrapped\n ]);\n }\n }\n return results;\n }\n };\n memoizedFunctions.add(memoized);\n return memoized;\n};\n","import { wait } from './misc.mjs';\nimport { assert, assertOptional, isFunction, isPlainObject } from '../validation/index.mjs';\nimport { assertNotWrapped, markWrapped } from '../_helpers.mjs';\n/**\n * Token bucket implementation of rate limiting with optional persistence support.\n *\n * @example\n * // Basic usage\n * const bucket = new RateLimitTokenBucket({\n * capacity: 10,\n * refillIntervalMs: 1000\n * });\n *\n * bucket.consume();\n * bucket.consume();\n *\n * const rateLimited = async () => {\n * // 0 ms if tokens are available\n * // 1000 / 10 = 100 ms if tokens are not available\n * await bucket.waitAndConsume();\n * return 'success';\n * }\n *\n * @example\n * // With persistence (e.g., Redis backend)\n * const bucket = new RateLimitTokenBucket({\n * capacity: 100,\n * refillIntervalMs: 60000,\n * save: async (state) => {\n * await redis.set('rate-limit:user:123', JSON.stringify(state));\n * },\n * load: async () => {\n * const data = await redis.get('rate-limit:user:123');\n * return data ? JSON.parse(data) : undefined;\n * }\n * });\n *\n * // Load state from backend before using\n * await bucket.load();\n *\n * // Check and consume\n * if (bucket.hasTokens()) {\n * bucket.consume();\n * await bucket.save();\n * }\n */ export class RateLimitTokenBucket {\n #tokens;\n #lastRefill;\n #stats;\n #save;\n #load;\n capacity;\n refillIntervalMs;\n constructor(config){\n assert(isPlainObject(config), 'config must be an object');\n assert(typeof config.capacity === 'number' && config.capacity > 0, 'capacity must be a positive number');\n assert(typeof config.refillIntervalMs === 'number' && config.refillIntervalMs > 0, 'refillIntervalMs must be a positive number');\n assertOptional(config.save, isFunction(config.save), 'save must be a function');\n assertOptional(config.load, isFunction(config.load), 'load must be a function');\n assertOptional(config.initialState, isPlainObject(config.initialState), 'initialState must be an object');\n this.capacity = config.capacity;\n this.refillIntervalMs = config.refillIntervalMs;\n this.#save = config.save;\n this.#load = config.load;\n if (config.initialState) {\n this.#tokens = config.initialState.tokens ?? config.capacity;\n this.#lastRefill = config.initialState.lastRefill ?? Date.now();\n this.#stats = {\n totalRequests: config.initialState.stats?.totalRequests ?? 0,\n rejectedRequests: config.initialState.stats?.rejectedRequests ?? 0,\n totalWaitTime: config.initialState.stats?.totalWaitTime ?? 0,\n waitCount: config.initialState.stats?.waitCount ?? 0,\n createdAt: config.initialState.stats?.createdAt ?? Date.now()\n };\n } else {\n this.#tokens = config.capacity;\n this.#lastRefill = Date.now();\n this.#stats = {\n totalRequests: 0,\n rejectedRequests: 0,\n totalWaitTime: 0,\n waitCount: 0,\n createdAt: Date.now()\n };\n }\n }\n /**\n * Whether save and load functions are configured for persistence.\n */ get isSaveable() {\n return isFunction(this.#save) && isFunction(this.#load);\n }\n /**\n * Get the current state for persistence.\n * This is the minimal data structure needed to restore the bucket.\n */ get state() {\n this.#refill();\n return {\n tokens: this.#tokens,\n lastRefill: this.#lastRefill,\n stats: {\n ...this.#stats\n }\n };\n }\n /**\n * Save the current state using the configured save function.\n * @throws If no save function is configured\n */ async save() {\n const saveFn = this.#save;\n if (!isFunction(saveFn)) {\n throw new Error('No save function configured');\n }\n await saveFn(this.state);\n }\n /**\n * Load state from the configured load function.\n * If the load function returns undefined/null, the bucket state is not modified.\n * @throws If no load function is configured\n */ async load() {\n const loadFn = this.#load;\n if (!isFunction(loadFn)) {\n throw new Error('No load function configured');\n }\n const loadedState = await loadFn();\n if (loadedState) {\n this.#tokens = loadedState.tokens ?? this.capacity;\n this.#lastRefill = loadedState.lastRefill ?? Date.now();\n if (loadedState.stats) {\n this.#stats = {\n totalRequests: loadedState.stats.totalRequests ?? 0,\n rejectedRequests: loadedState.stats.rejectedRequests ?? 0,\n totalWaitTime: loadedState.stats.totalWaitTime ?? 0,\n waitCount: loadedState.stats.waitCount ?? 0,\n createdAt: loadedState.stats.createdAt ?? Date.now()\n };\n }\n }\n }\n /**\n * Check if there are enough tokens available without consuming them.\n *\n * @param count - Number of tokens to check for (default: 1)\n * @returns true if tokens are available, false otherwise\n *\n * @example\n * if (bucket.hasTokens()) {\n * // We're within rate limit, proceed\n * bucket.consume();\n * }\n */ hasTokens(count = 1) {\n this.#refill();\n return this.#tokens >= count;\n }\n #refill() {\n const now = Date.now();\n const elapsed = now - this.#lastRefill;\n const refillRate = 1 / this.refillIntervalMs;\n // Protect against clock adjustments or very long delays\n if (elapsed < 0 || elapsed > this.refillIntervalMs * this.capacity * 2) {\n this.#lastRefill = now;\n this.#tokens = this.capacity;\n return;\n }\n if (elapsed > 0) {\n // Calculate how many tokens to add based on elapsed time and refill rate\n const tokensToAdd = elapsed * refillRate;\n this.#tokens = Math.min(this.capacity, this.#tokens + tokensToAdd);\n this.#lastRefill = now;\n }\n }\n reset() {\n this.#tokens = this.capacity;\n this.#lastRefill = Date.now();\n }\n get tokens() {\n return Math.floor(this.#tokens);\n }\n consume(count = 1) {\n this.#refill();\n this.#stats.totalRequests++;\n if (this.#tokens >= count) {\n this.#tokens -= count;\n return true;\n }\n this.#stats.rejectedRequests++;\n return false;\n }\n getWaitTimeMs(count = 1) {\n this.#refill();\n const deficit = count - this.#tokens;\n if (deficit <= 0) return 0;\n const refillRate = 1 / this.refillIntervalMs;\n // Add a small buffer to ensure enough tokens are available after waiting\n const waitTime = Math.ceil(deficit / refillRate) + 1;\n return waitTime;\n }\n getNextAvailable(count = 1) {\n return new Date(Date.now() + this.getWaitTimeMs(count));\n }\n /**\n * Get a snapshot of current statistics and state.\n *\n * @returns Object containing usage statistics and current state\n */ get snapshot() {\n this.#refill();\n const now = Date.now();\n const uptime = now - this.#stats.createdAt;\n return {\n currentTokens: this.tokens,\n capacity: this.capacity,\n refillIntervalMs: this.refillIntervalMs,\n totalRequests: this.#stats.totalRequests,\n rejectedRequests: this.#stats.rejectedRequests,\n successfulRequests: this.#stats.totalRequests - this.#stats.rejectedRequests,\n rejectionRate: this.#stats.totalRequests > 0 ? this.#stats.rejectedRequests / this.#stats.totalRequests : 0,\n totalWaitTime: this.#stats.totalWaitTime,\n waitCount: this.#stats.waitCount,\n averageWaitTime: this.#stats.waitCount > 0 ? this.#stats.totalWaitTime / this.#stats.waitCount : 0,\n uptime,\n createdAt: this.#stats.createdAt\n };\n }\n /**\n * Waits for the next token to be available before\n * allowing the caller to proceed.\n *\n * @param onRateLimit - Callback to invoke when the rate limit is exceeded\n *\n * @example\n * const bucket = new RateLimitTokenBucket({\n * capacity: 10,\n * refillIntervalMs: 1000\n * });\n *\n * await bucket.waitForToken(() => {\n * console.log('Rate limit exceeded');\n * });\n * console.log('Token available');\n *\n * bucket.consume();\n * console.log('Token consumed');\n */ async waitForToken(count = 1, opts = {}) {\n const { onRateLimit, abortController, jitterFactor = 0 } = opts;\n // Check if tokens are already available without consuming them\n this.#refill();\n if (this.#tokens >= count) return;\n const waitStart = Date.now();\n this.#stats.waitCount++;\n while(this.#tokens < count){\n if (abortController?.signal?.aborted) return;\n await onRateLimit?.(new RateLimitError('Rate limit exceeded', this.capacity), this.getNextAvailable(count));\n await wait(this.getWaitTimeMs(count) + Math.random() * jitterFactor);\n this.#refill();\n }\n const waitEnd = Date.now();\n this.#stats.totalWaitTime += waitEnd - waitStart;\n }\n /**\n * Waits for tokens to be available and consumes them atomically.\n *\n * @param onRateLimit - Callback to invoke when the rate limit is exceeded\n *\n * @example\n * const bucket = new RateLimitTokenBucket({\n * capacity: 10,\n * refillIntervalMs: 1000\n * });\n *\n * await bucket.waitAndConsume(() => {\n * console.log('Rate limit exceeded');\n * });\n * console.log('Token acquired and consumed');\n */ async waitAndConsume(count = 1, opts = {}) {\n const { onRateLimit, abortController, jitterFactor = 0 } = opts;\n // Check if tokens are already available and consume them atomically\n this.#refill();\n this.#stats.totalRequests++;\n if (this.#tokens >= count) {\n this.#tokens -= count;\n return true;\n }\n const waitStart = Date.now();\n this.#stats.waitCount++;\n while(this.#tokens < count){\n if (abortController?.signal?.aborted) {\n this.#stats.rejectedRequests++;\n return false;\n }\n await onRateLimit?.(new RateLimitError('Rate limit exceeded', this.capacity), this.getNextAvailable(count));\n await wait(this.getWaitTimeMs(count) + Math.random() * jitterFactor);\n this.#refill();\n }\n // Consume tokens after wait\n this.#tokens -= count;\n const waitEnd = Date.now();\n this.#stats.totalWaitTime += waitEnd - waitStart;\n return true;\n }\n}\n/**\n * Error thrown when rate limit is exceeded.\n */ export class RateLimitError extends Error {\n maxCalls;\n constructor(message, maxCalls){\n super(message);\n this.name = 'RateLimitError';\n this.maxCalls = maxCalls;\n }\n}\nexport const isRateLimitError = (error)=>{\n return error?.constructor?.name === RateLimitError.name;\n};\nexport function rateLimit(fn, opts) {\n assert(isFunction(fn), 'fn must be a function');\n assertNotWrapped(fn, 'rateLimit');\n assert(isPlainObject(opts), 'opts must be an object');\n const throws = opts.throws ?? true;\n const onLimitReached = opts.onLimitReached;\n assertOptional(throws, typeof throws === 'boolean', 'throws must be a boolean');\n assertOptional(onLimitReached, isFunction(onLimitReached), 'onLimitReached must be a function');\n let tokenBucket;\n if ('bucket' in opts && opts.bucket instanceof RateLimitTokenBucket) {\n tokenBucket = opts.bucket;\n } else {\n const { maxCalls, windowMs = 1000 } = opts;\n assert(typeof maxCalls === 'number' && maxCalls > 0, 'maxCalls must be a positive number');\n assertOptional(windowMs, typeof windowMs === 'number' && windowMs > 0, 'windowMs must be a positive number representing time in milliseconds');\n tokenBucket = new RateLimitTokenBucket({\n capacity: maxCalls,\n refillIntervalMs: windowMs / maxCalls\n });\n }\n const rateLimitedFunction = async function(...args) {\n // Load state before checking if the bucket is saveable\n if (tokenBucket.isSaveable) {\n await tokenBucket.load();\n }\n const onceReached = async (limitErr)=>{\n await onLimitReached?.(limitErr, tokenBucket.getNextAvailable(1), args);\n if (throws) throw limitErr;\n };\n await tokenBucket.waitAndConsume(1, {\n onRateLimit: onceReached\n });\n // Save state after consuming if the bucket is saveable\n if (tokenBucket.isSaveable) {\n await tokenBucket.save();\n }\n return fn(...args);\n };\n markWrapped(fn, rateLimitedFunction, 'rateLimit');\n return rateLimitedFunction;\n}\n","import { assert, assertOptional, isFunction, isPlainObject } from '../validation/index.mjs';\nimport { markWrapped } from '../_helpers.mjs';\nimport { attempt } from '../async/attempt.mjs';\nimport { wait } from './misc.mjs';\n/**\n * Error thrown when a function wrapped with withTimeout exceeds its specified timeout duration.\n *\n * @example\n * ```typescript\n * try {\n * await someTimeoutWrappedFunction();\n * } catch (error) {\n * if (error instanceof TimeoutError) {\n * console.log('Function timed out:', error.message);\n * }\n * }\n * ```\n */ export class TimeoutError extends Error {\n constructor(message){\n super(message);\n }\n}\nexport const isTimeoutError = (error)=>{\n return error?.constructor?.name === TimeoutError.name;\n};\n/**\n * Tries to execute a function with a timeout. If the function exceeds the timeout,\n * it will reject with a TimeoutError.\n *\n * @param func - The function to execute\n * @param opts - Configuration options\n * @param opts.timeout - Timeout in milliseconds after which the function will be rejected\n * @param opts.abortController - Abort controller to cancel the operation\n * @param opts.onError - Callback to handle errors\n * @param opts.onTimeout - Callback to handle timeout\n * @param opts.throws - Whether to throw an error when the function execution exceeds the specified timeout\n * @returns The result of the function execution\n * @throws {TimeoutError} When the function execution exceeds the specified timeout\n */ export const runWithTimeout = async (func, opts)=>{\n const timeoutError = wait(opts.timeout, [\n null,\n new TimeoutError('Function timed out')\n ]);\n const [result, error] = await Promise.race([\n attempt(func),\n timeoutError\n ]);\n if (isTimeoutError(error)) {\n opts.abortController?.abort();\n opts.onError?.(error, true);\n opts.onTimeout?.(error);\n throw error;\n }\n timeoutError.clear();\n if (error) {\n opts.onError?.(error, false);\n if (opts.throws) throw error;\n }\n return result;\n};\n/**\n * Wraps an async function with a timeout mechanism. If the function doesn't complete\n * within the specified timeout, it will reject with a TimeoutError.\n *\n * @template T - The type of the function being wrapped\n * @param fn - The async function to wrap with timeout functionality\n * @param opts - Configuration options\n * @param opts.timeout - Timeout in milliseconds after which the function will be rejected\n * @param opts.abortController - Abort controller to cancel the operation\n * @param opts.onError - Callback to handle errors\n * @param opts.onTimeout - Callback to handle timeout\n * @param opts.throws - Whether to throw an error when the function execution exceeds the specified timeout\n * @returns A new async function with the same signature as the original, but with timeout behavior\n * @throws {TimeoutError} When the function execution exceeds the specified timeout\n *\n * @example\n * ```typescript\n * // Basic usage with a fetch request\n * const abortController = new AbortController();\n * const fetchWithTimeout = withTimeout(fetch, { timeout: 5000, abortController });\n *\n * try {\n * const response = await fetchWithTimeout('https://api.example.com/data', { signal: abortController.signal });\n * console.log('Request completed within 5 seconds');\n * } catch (error) {\n * if (error instanceof TimeoutError) {\n * console.log('Request timed out after 5 seconds');\n * } else {\n * console.log('Request failed:', error.message);\n * }\n * }\n * ```\n *\n * @example\n * ```typescript\n * // Wrapping a custom async function\n * async function processData(data: string[]): Promise<string> {\n * // Simulate slow processing\n * await new Promise(resolve => setTimeout(resolve, 3000));\n * return data.join(', ');\n * }\n *\n * const abortController = new AbortController();\n * const processWithTimeout = withTimeout(processData, { timeout: 2000, abortController });\n *\n * const [result, error] = await attempt(() =>\n * processWithTimeout(['a', 'b', 'c'], { signal: abortController.signal })\n * );\n *\n * if (error) {\n * console.log('Processing timed out or failed');\n * } else {\n * console.log('Result:', result);\n * }\n * ```\n *\n * @example\n * ```typescript\n * // Using with database operations\n * const queryWithTimeout = withTimeout(\n * async (query: string) => database.execute(query)\n * { timeout: 10000 }\n * );\n *\n * try {\n * const users = await queryWithTimeout('SELECT * FROM users');\n * return users;\n * } catch (error) {\n * if (isTimeoutError(error)) {\n * throw new Error('Database query timed out after 10 seconds');\n * }\n * throw error;\n * }\n * ```\n */ export const withTimeout = (fn, opts)=>{\n assert(isFunction(fn), 'fn must be a function');\n assert(isPlainObject(opts), 'opts must be an object');\n assert(typeof opts.timeout === 'number' && opts.timeout > 0, 'opts.timeout must be a positive number');\n assertOptional(opts.abortController, opts.abortController instanceof AbortController, 'opts.abortController must be an AbortController');\n assertOptional(opts.onError, isFunction(opts.onError), 'opts.onError must be a function');\n assertOptional(opts.onTimeout, isFunction(opts.onTimeout), 'opts.onTimeout must be a function');\n assertOptional(opts.throws, typeof opts.throws === 'boolean', 'opts.throws must be a boolean');\n const withTimeoutFunction = async function(...args) {\n return runWithTimeout(()=>fn(...args), opts);\n };\n markWrapped(fn, withTimeoutFunction, 'withTimeout');\n return withTimeoutFunction;\n};\n","/**\n * Time unit constants and helper functions for duration calculations.\n *\n * Provides millisecond values for common time units (seconds, minutes, hours, etc.)\n * and functions to multiply these units. Useful for setTimeout, interval calculations,\n * cache TTLs, and any duration-based logic.\n *\n * WHY: Improves code readability by using human-friendly time units instead of raw milliseconds.\n * Instead of writing `setTimeout(fn, 300000)`, you can write `setTimeout(fn, timeUnits.min15)`.\n *\n * @example\n * // Using predefined constants\n * setTimeout(cleanup, timeUnits.min15); // 15 minutes\n * cache.set('key', value, { ttl: timeUnits.hour }); // 1 hour\n *\n * @example\n * // Using helper functions\n * const backoffDelay = timeUnits.secs(30); // 30 seconds\n * const cacheExpiry = timeUnits.days(7); // 7 days\n * const sessionTimeout = timeUnits.hours(2); // 2 hours\n */ export const timeUnits = {\n sec: 1000,\n min: 60 * 1000,\n min15: 15 * 60 * 1000,\n min30: 30 * 60 * 1000,\n hour: 60 * 60 * 1000,\n hour2: 2 * 60 * 60 * 1000,\n hour4: 4 * 60 * 60 * 1000,\n hour8: 8 * 60 * 60 * 1000,\n hour12: 12 * 60 * 60 * 1000,\n day: 24 * 60 * 60 * 1000,\n week: 7 * 24 * 60 * 60 * 1000,\n secs (n) {\n return n * this.sec;\n },\n mins (n) {\n return n * this.min;\n },\n hours (n) {\n return n * this.hour;\n },\n days (n) {\n return n * this.day;\n },\n weeks (n) {\n return n * this.week;\n },\n months (n) {\n return Math.round(n * 30.4 * this.day);\n },\n years (n) {\n return n * 365 * this.day;\n }\n};\n/**\n * Creates a duration in seconds (converted to milliseconds).\n *\n * WHY: Provides a more readable way to specify durations in seconds.\n *\n * @param n number of seconds\n * @returns milliseconds equivalent\n *\n * @example\n * setTimeout(fn, seconds(30)); // 30 seconds = 30000ms\n * cache.set('key', value, { ttl: seconds(120) }); // 2 minutes\n */ export const seconds = (n)=>timeUnits.secs(n);\n/**\n * Creates a duration in minutes (converted to milliseconds).\n *\n * WHY: Provides a more readable way to specify durations in minutes.\n *\n * @param n number of minutes\n * @returns milliseconds equivalent\n *\n * @example\n * setTimeout(fn, minutes(5)); // 5 minutes = 300000ms\n * const pollInterval = minutes(2); // Poll every 2 minutes\n */ export const minutes = (n)=>timeUnits.mins(n);\n/**\n * Creates a duration in hours (converted to milliseconds).\n *\n * WHY: Provides a more readable way to specify durations in hours.\n *\n * @param n number of hours\n * @returns milliseconds equivalent\n *\n * @example\n * setTimeout(fn, hours(1)); // 1 hour = 3600000ms\n * const sessionExpiry = hours(24); // 24 hour session\n */ export const hours = (n)=>timeUnits.hours(n);\n/**\n * Creates a duration in days (converted to milliseconds).\n *\n * WHY: Provides a more readable way to specify durations in days.\n *\n * @param n number of days\n * @returns milliseconds equivalent\n *\n * @example\n * const cacheExpiry = days(7); // 7 days = 604800000ms\n * setTimeout(cleanup, days(30)); // 30 day cleanup cycle\n */ export const days = (n)=>timeUnits.days(n);\n/**\n * Creates a duration in weeks (converted to milliseconds).\n *\n * WHY: Provides a more readable way to specify durations in weeks.\n *\n * @param n number of weeks\n * @returns milliseconds equivalent\n *\n * @example\n * const backupInterval = weeks(2); // Backup every 2 weeks\n * setTimeout(archive, weeks(4)); // Archive after 4 weeks\n */ export const weeks = (n)=>timeUnits.weeks(n);\n/**\n * Creates a duration in months (converted to milliseconds).\n *\n * WHY: Provides a more readable way to specify durations in months.\n * Uses 30.4 days as average month length for accuracy.\n *\n * @param n number of months\n * @returns milliseconds equivalent (rounded)\n *\n * @example\n * const subscriptionExpiry = months(1); // 1 month subscription\n * setTimeout(fn, months(3)); // Quarterly task\n */ export const months = (n)=>timeUnits.months(n);\n/**\n * Creates a duration in years (converted to milliseconds).\n *\n * WHY: Provides a more readable way to specify durations in years.\n * Uses 365 days (does not account for leap years).\n *\n * @param n number of years\n * @returns milliseconds equivalent\n *\n * @example\n * const licenseExpiry = years(1); // 1 year license\n * const longTermCache = years(5); // 5 year retention\n */ export const years = (n)=>timeUnits.years(n);\n/**\n * Parses a time duration string into milliseconds.\n *\n * WHY: Allows reading durations from configuration files or user input in a human-friendly format.\n * Supports decimal values, plurals, full words, and is case-insensitive.\n *\n * Accepts formats:\n * - Short: \"30sec\", \"5min\", \"2hour\"\n * - Plural: \"30secs\", \"5mins\", \"2hours\"\n * - Full words: \"30 seconds\", \"5 minutes\", \"2 hours\"\n *\n * @param str time duration string (format: \"<number> <unit>\")\n * @returns milliseconds as number\n * @throws Error if string format is invalid or unit is unknown\n *\n * @example\n * parseTimeDuration('30sec'); // 30000\n * parseTimeDuration('30 secs'); // 30000\n * parseTimeDuration('30 seconds'); // 30000\n * parseTimeDuration('5 min'); // 300000\n * parseTimeDuration('5 minutes'); // 300000\n * parseTimeDuration('2.5 hours'); // 9000000\n *\n * @example\n * // Using in configuration\n * const config = {\n * sessionTimeout: parseTimeDuration(process.env.SESSION_TIMEOUT || '1hour'),\n * cacheExpiry: parseTimeDuration(process.env.CACHE_TTL || '15min')\n * };\n */ export const parseTimeDuration = (str)=>{\n const match = str.match(/^(\\d+(?:\\.\\d+)?)\\s*(s|sec|secs?|seconds?|m|min|mins?|minutes?|h|hr|hrs?|hour|hours?|d|day|days?|w|wk|wks?|week|weeks?|mo|mon|mons?|month|months?|y|yr|yrs?|year|years?)$/i);\n if (!match) {\n throw new Error(`Invalid time duration: ${str}`);\n }\n const [, num, unit] = match;\n const n = parseFloat(num);\n const unitLower = unit.toLowerCase();\n // Normalize to base unit\n if (unitLower.startsWith('s')) return seconds(n);\n if (unitLower.startsWith('m') && !unitLower.startsWith('mo')) return minutes(n);\n if (unitLower.startsWith('h')) return hours(n);\n if (unitLower.startsWith('d')) return days(n);\n if (unitLower.startsWith('w')) return weeks(n);\n if (unitLower.startsWith('mo')) return months(n);\n if (unitLower.startsWith('y')) return years(n);\n throw new Error(`Unknown unit: ${unit}`);\n};\n/**\n * Formats a millisecond duration into a human-readable string.\n *\n * WHY: Converts raw millisecond values into user-friendly strings for display.\n * Automatically selects the most appropriate unit (sec, min, hour, day, etc.).\n *\n * @param ms number of milliseconds to format\n * @param opts optional formatting options\n * @param opts.decimals number of decimal places (default: 0 for whole units, 1 for fractional)\n * @param opts.unit force a specific unit instead of auto-selecting\n * @returns formatted string (e.g., \"30sec\", \"5min\", \"2hour\")\n *\n * @example\n * formatTimeDuration(1000); // \"1sec\"\n * formatTimeDuration(30000); // \"30sec\"\n * formatTimeDuration(90000); // \"1.5min\"\n * formatTimeDuration(3600000); // \"1hour\"\n * formatTimeDuration(86400000); // \"1day\"\n *\n * @example\n * // Force specific unit\n * formatTimeDuration(90000, { unit: 'sec' }); // \"90sec\"\n * formatTimeDuration(90000, { unit: 'min' }); // \"1.5min\"\n *\n * @example\n * // Control decimals\n * formatTimeDuration(90000, { decimals: 0 }); // \"2min\"\n * formatTimeDuration(90000, { decimals: 2 }); // \"1.50min\"\n *\n * @example\n * // Display cache expiry times\n * console.log(`Cache expires in: ${formatTimeDuration(cache.ttl)}`);\n */ export const formatTimeDuration = (ms, opts = {})=>{\n const { decimals, unit } = opts;\n if (unit) {\n const divisors = {\n sec: timeUnits.sec,\n min: timeUnits.min,\n hour: timeUnits.hour,\n day: timeUnits.day,\n week: timeUnits.week,\n month: Math.round(30.4 * timeUnits.day),\n year: 365 * timeUnits.day\n };\n const value = ms / divisors[unit];\n const defaultDecimals = decimals ?? (value % 1 === 0 ? 0 : 1);\n const rounded = defaultDecimals === 0 ? Math.round(value) : Number(value.toFixed(defaultDecimals));\n return `${rounded}${unit}`;\n }\n // Auto-select unit\n if (ms >= 365 * timeUnits.day) {\n const value = ms / (365 * timeUnits.day);\n const defaultDecimals = decimals ?? (value % 1 === 0 ? 0 : 1);\n const rounded = defaultDecimals === 0 ? Math.round(value) : Number(value.toFixed(defaultDecimals));\n return `${rounded}year`;\n }\n if (ms >= Math.round(30.4 * timeUnits.day)) {\n const value = ms / Math.round(30.4 * timeUnits.day);\n const defaultDecimals = decimals ?? (value % 1 === 0 ? 0 : 1);\n const rounded = defaultDecimals === 0 ? Math.round(value) : Number(value.toFixed(defaultDecimals));\n return `${rounded}month`;\n }\n if (ms >= timeUnits.week) {\n const value = ms / timeUnits.week;\n const defaultDecimals = decimals ?? (value % 1 === 0 ? 0 : 1);\n const rounded = defaultDecimals === 0 ? Math.round(value) : Number(value.toFixed(defaultDecimals));\n return `${rounded}week`;\n }\n if (ms >= timeUnits.day) {\n const value = ms / timeUnits.day;\n const defaultDecimals = decimals ?? (value % 1 === 0 ? 0 : 1);\n const rounded = defaultDecimals === 0 ? Math.round(value) : Number(value.toFixed(defaultDecimals));\n return `${rounded}day`;\n }\n if (ms >= timeUnits.hour) {\n const value = ms / timeUnits.hour;\n const defaultDecimals = decimals ?? (value % 1 === 0 ? 0 : 1);\n const rounded = defaultDecimals === 0 ? Math.round(value) : Number(value.toFixed(defaultDecimals));\n return `${rounded}hour`;\n }\n if (ms >= timeUnits.min) {\n const value = ms / timeUnits.min;\n const defaultDecimals = decimals ?? (value % 1 === 0 ? 0 : 1);\n const rounded = defaultDecimals === 0 ? Math.round(value) : Number(value.toFixed(defaultDecimals));\n return `${rounded}min`;\n }\n if (ms >= timeUnits.sec) {\n const value = ms / timeUnits.sec;\n const defaultDecimals = decimals ?? (value % 1 === 0 ? 0 : 1);\n const rounded = defaultDecimals === 0 ? Math.round(value) : Number(value.toFixed(defaultDecimals));\n return `${rounded}sec`;\n }\n return `${ms}ms`;\n};\n","/**\n * Byte size unit constants and helper functions for data size calculations.\n *\n * Provides byte values for common size units (KB, MB, GB, TB) using binary units (1024-based).\n * Useful for file size limits, memory calculations, and data transfer limits.\n *\n * WHY: Improves code readability by using human-friendly size units instead of raw bytes.\n * Instead of writing `maxSize: 5242880`, you can write `maxSize: byteUnits.mbs(5)`.\n *\n * @example\n * // Using predefined constants\n * const maxFileSize = byteUnits.mb * 10; // 10 MB\n * if (fileSize > byteUnits.gb) console.log('File larger than 1GB');\n *\n * @example\n * // Using helper functions\n * const uploadLimit = byteUnits.mbs(50); // 50 megabytes\n * const diskQuota = byteUnits.gbs(100); // 100 gigabytes\n */ export const byteUnits = {\n kb: 1024,\n mb: 1024 ** 2,\n gb: 1024 ** 3,\n tb: 1024 ** 4,\n kbs (n) {\n return n * this.kb;\n },\n mbs (n) {\n return n * this.mb;\n },\n gbs (n) {\n return n * this.gb;\n },\n tbs (n) {\n return n * this.tb;\n }\n};\n/**\n * Creates a byte size in kilobytes.\n *\n * WHY: Provides a more readable way to specify sizes in KB.\n *\n * @param n number of kilobytes\n * @returns bytes equivalent\n *\n * @example\n * const maxSize = kilobytes(500); // 500 KB = 512000 bytes\n * if (buffer.length > kilobytes(100)) console.log('Buffer too large');\n */ export const kilobytes = (n)=>byteUnits.kbs(n);\n/**\n * Creates a byte size in megabytes.\n *\n * WHY: Provides a more readable way to specify sizes in MB.\n *\n * @param n number of megabytes\n * @returns bytes equivalent\n *\n * @example\n * const uploadLimit = megabytes(10); // 10 MB upload limit\n * const cacheSize = megabytes(50); // 50 MB cache\n */ export const megabytes = (n)=>byteUnits.mbs(n);\n/**\n * Creates a byte size in gigabytes.\n *\n * WHY: Provides a more readable way to specify sizes in GB.\n *\n * @param n number of gigabytes\n * @returns bytes equivalent\n *\n * @example\n * const diskQuota = gigabytes(100); // 100 GB disk quota\n * if (totalSize > gigabytes(5)) console.log('Large dataset');\n */ export const gigabytes = (n)=>byteUnits.gbs(n);\n/**\n * Creates a byte size in terabytes.\n *\n * WHY: Provides a more readable way to specify sizes in TB.\n *\n * @param n number of terabytes\n * @returns bytes equivalent\n *\n * @example\n * const storageLimit = terabytes(2); // 2 TB storage limit\n * const archiveSize = terabytes(10); // 10 TB archive\n */ export const terabytes = (n)=>byteUnits.tbs(n);\n/**\n * Parses a byte size string into bytes.\n *\n * WHY: Allows reading byte sizes from configuration files or user input in a human-friendly format.\n * Supports decimal values, plurals, full words, and is case-insensitive.\n *\n * Accepts formats:\n * - Short: \"10kb\", \"10 kb\"\n * - Plural: \"10kbs\", \"10 mbs\"\n * - Full words: \"10 kilobytes\", \"10 megabytes\"\n *\n * @param str byte size string (format: \"<number> <unit>\")\n * @returns bytes as number\n * @throws Error if string format is invalid or unit is unknown\n *\n * @example\n * parseByteSize('10mb'); // 10485760\n * parseByteSize('10 mbs'); // 10485760\n * parseByteSize('10 megabytes'); // 10485760\n * parseByteSize('2.5 GB'); // 2684354560\n * parseByteSize('500 kilobytes'); // 512000\n *\n * @example\n * // Using in configuration\n * const config = {\n * uploadLimit: parseByteSize(process.env.MAX_UPLOAD || '10mb')\n * };\n */ export const parseByteSize = (str)=>{\n const match = str.match(/^(\\d+(?:\\.\\d+)?)\\s*(kb|kbs?|kilobytes?|mb|mbs?|megabytes?|gb|gbs?|gigabytes?|tb|tbs?|terabytes?)$/i);\n if (!match) {\n throw new Error(`Invalid byte size: ${str}`);\n }\n const [, num, unit] = match;\n const n = parseFloat(num);\n const unitLower = unit.toLowerCase();\n // Normalize to base unit\n if (unitLower.startsWith('k')) return kilobytes(n);\n if (unitLower.startsWith('m')) return megabytes(n);\n if (unitLower.startsWith('g')) return gigabytes(n);\n if (unitLower.startsWith('t')) return terabytes(n);\n throw new Error(`Unknown unit: ${unit}`);\n};\n/**\n * Formats a byte value into a human-readable string.\n *\n * WHY: Converts raw byte values into user-friendly strings for display.\n * Automatically selects the most appropriate unit (KB, MB, GB, TB).\n *\n * @param bytes number of bytes to format\n * @param opts optional formatting options\n * @param opts.decimals number of decimal places (default: 2)\n * @param opts.unit force a specific unit instead of auto-selecting\n * @returns formatted string (e.g., \"10.5mb\", \"2gb\")\n *\n * @example\n * formatByteSize(1024); // \"1kb\"\n * formatByteSize(1536); // \"1.5kb\"\n * formatByteSize(10485760); // \"10mb\"\n * formatByteSize(1073741824); // \"1gb\"\n * formatByteSize(1536, { decimals: 0 }); // \"2kb\"\n *\n * @example\n * // Force specific unit\n * formatByteSize(1024, { unit: 'mb' }); // \"0mb\"\n * formatByteSize(1024, { unit: 'kb' }); // \"1kb\"\n *\n * @example\n * // Display file sizes\n * files.forEach(file => {\n * console.log(`${file.name}: ${formatByteSize(file.size)}`);\n * });\n */ export const formatByteSize = (bytes, opts = {})=>{\n const { decimals = 2, unit } = opts;\n if (unit) {\n const divisors = {\n kb: byteUnits.kb,\n mb: byteUnits.mb,\n gb: byteUnits.gb,\n tb: byteUnits.tb\n };\n const value = bytes / divisors[unit];\n const rounded = decimals === 0 ? Math.round(value) : Number(value.toFixed(decimals));\n return `${rounded}${unit}`;\n }\n // Auto-select unit\n if (bytes >= byteUnits.tb) {\n const value = bytes / byteUnits.tb;\n const rounded = decimals === 0 ? Math.round(value) : Number(value.toFixed(decimals));\n return `${rounded}tb`;\n }\n if (bytes >= byteUnits.gb) {\n const value = bytes / byteUnits.gb;\n const rounded = decimals === 0 ? Math.round(value) : Number(value.toFixed(decimals));\n return `${rounded}gb`;\n }\n if (bytes >= byteUnits.mb) {\n const value = bytes / byteUnits.mb;\n const rounded = decimals === 0 ? Math.round(value) : Number(value.toFixed(decimals));\n return `${rounded}mb`;\n }\n if (bytes >= byteUnits.kb) {\n const value = bytes / byteUnits.kb;\n const rounded = decimals === 0 ? Math.round(value) : Number(value.toFixed(decimals));\n return `${rounded}kb`;\n }\n return `${bytes}b`;\n};\n","import { clone } from '../data-structures/clone.mjs';\nimport { attemptSync } from '../async/attempt.mjs';\nimport { memoizeSync } from '../flow-control/index.mjs';\nimport { parseTimeDuration, parseByteSize } from '../units/index.mjs';\nimport { assert, isEnabledValue, isDisabledValue } from '../validation/index.mjs';\nimport { reach, setDeepMany } from '../object-utils/index.mjs';\nconst onlyNumRegex = /^\\d+$/;\n/**\n * Coerces string values in an object to their appropriate types.\n * Converts \"true\"/\"false\" to booleans, numeric strings to numbers, etc.\n * Recursively processes nested objects.\n *\n * IMPORTANT: This function mutates the input object in place.\n *\n * INTENTION: This is a best-effort coercion based on common string patterns.\n * It does not handle all edge cases and should be used with caution. The goal\n * is to convert typical string representations of booleans and numbers to their\n * actual types, while leaving other strings unchanged.\n *\n * USE CASE: Parsing environment variables or other flatmap configuration objects.\n *\n * @param obj The object whose values should be coerced (mutated in place).\n * @param opts Optional configuration options\n * @param opts.parseUnits Optional flag to parse unit values like '5m', '10mb'. Default is false.\n * @param opts.skipConversion Optional function to skip conversion for specific keys. Default is to convert all keys.\n *\n * @example\n * const config = {\n * debug: 'true',\n * port: '3000',\n * nested: {\n * enabled: 'false',\n * retries: '5'\n * }\n * };\n *\n * castValuesToTypes(config);\n *\n * console.log(config);\n * // {\n * // debug: true,\n * // port: 3000,\n * // nested: {\n * // enabled: false,\n * // retries: 5\n * // }\n * // }\n *\n * @example\n * const config = {\n * timeout: '5m',\n * maxUploadSize: '10mb',\n * debug: 'true'\n * };\n *\n * castValuesToTypes(config, { parseUnits: true });\n *\n * console.log(config);\n * // {\n * // timeout: 300000, // 5 minutes in milliseconds\n * // maxUploadSize: 10485760, // 10 megabytes in bytes\n * // debug: true\n * // }\n *\n * @example\n * const config = {\n * apiKey: '12345',\n * port: '3000'\n * };\n *\n * // Skip conversion for apiKey (keep it as string)\n * castValuesToTypes(config, {\n * skipConversion: (key) => key.toLowerCase().includes('key')\n * });\n *\n * console.log(config);\n * // {\n * // apiKey: '12345', // Kept as string\n * // port: 3000 // Converted to number\n * // }\n */ export const castValuesToTypes = (obj, opts = {})=>{\n const { parseUnits = false, skipConversion } = opts;\n for(const key in obj){\n const k = key;\n const val = obj[k];\n // Check if this key should be skipped\n if (skipConversion?.(key, val)) {\n continue;\n }\n const isObject = typeof val === 'object' && val !== null;\n if (isObject) {\n castValuesToTypes(val, opts);\n continue;\n }\n // Try to parse unit values if enabled\n if (parseUnits && typeof val === 'string') {\n const [timeDuration, timeErr] = attemptSync(()=>parseTimeDuration(val));\n if (!timeErr && typeof timeDuration === 'number') {\n obj[k] = timeDuration;\n continue;\n }\n const [byteSize, bytesErr] = attemptSync(()=>parseByteSize(val));\n if (!bytesErr && typeof byteSize === 'number') {\n obj[k] = byteSize;\n continue;\n }\n }\n const truthy = isEnabledValue(obj[k]);\n const falsy = isDisabledValue(obj[k]);\n // If the value is truthy or falsy, set it to the boolean value\n // NOTE: it MUST be a truthy or falsy value. If you only check\n // for truthy, you end up with a lot of false positives\n if (truthy || falsy) {\n obj[k] = truthy;\n continue;\n }\n // Only test regex on string values to avoid TypeError\n if (typeof val === 'string' && onlyNumRegex.test(val)) {\n obj[k] = Number(val);\n continue;\n }\n }\n};\n/**\n * Loads the flatmap variables and returns a config object.\n * Coerces values to the correct types based on guessing from\n * the value itself. For example, if the value is \"true\", it will be\n * converted to a boolean true, if it's \"123\", it will be converted\n * to a number 123, etc.\n *\n * @param flatConfig The flatmap configuration object (e.g. process.env)\n * @param opts Optional options object\n * @param opts.filter Optional filter function to include/exclude specific keys. Default is to include all keys.\n * @param opts.forceAllCapToLower Optional flag to force all-caps keys to lowercase. Default is true.\n * @param opts.separator Optional string to use as a separator for nested keys. Default is \"_\"\n * @param opts.stripPrefix Optional prefix to strip from keys. Can be a string (e.g., \"APP_\") or number of characters (e.g., 4). Default is undefined (no stripping).\n * @param opts.parseUnits Optional flag to parse unit values like '5m', '10mb'. Default is false.\n * @param opts.skipConversion Optional function to skip conversion for specific keys. Default is to convert all keys.\n * @param opts.memoizeOpts Optional memoization options for caching the config. Default is false (no memoization).\n *\n * @returns The full configuration object.\n *\n * @example\n * // Assuming process.env contains:\n * // {\n * // APP_DB_HOST: 'localhost',\n * // APP_DB_PORT: '5432',\n * // APP_DEBUG: 'true',\n * // APP_FEATURE_X_ENABLED: 'false'\n * // APP_WORKER_EMAILS_maxRunsPerMin: '100'\n * // APP_WORKER_EMAILS_networkTimeoutMs: '100'\n * // }\n *\n * const config = makeNestedConfig(process.env, {\n * filter: (key) => key.startsWith('APP_'),\n * stripPrefix: 'APP_', // Strip the APP_ prefix from all keys\n * forceAllCapToLower: true,\n * separator: '_',\n * memoizeOpts: { ttl: 60000 } // Cache for 60 seconds\n * });\n *\n * console.log(config());\n * // {\n * // db: {\n * // host: 'localhost',\n * // port: 5432\n * // },\n * // debug: true,\n * // feature: {\n * // x: {\n * // enabled: false\n * // }\n * // },\n * // worker: {\n * // emails: {\n * // maxRunsPerMin: 100,\n * // networkTimeoutMs: 100\n * // }\n * // }\n * // }\n *\n * @example\n * // Using a custom separator\n * // Assuming process.env contains:\n * // {\n * // APP_DB__HOST: 'localhost',\n * // APP_DB__PORT: '5432',\n * // APP_DEBUG: 'true',\n * // APP_FEATURE__X_ENABLED: 'false',\n * // APP_WORKER__EMAILS__maxRunsPerMin: '100'\n * // APP_WORKER__EMAILS__networkTimeoutMs: '100'\n * // }\n * const config = makeNestedConfig(process.env, {\n * filter: (key) => key.startsWith('APP_'),\n * stripPrefix: 'APP_', // Strip the APP_ prefix\n * forceAllCapToLower: true,\n * separator: '__'\n * });\n *\n * console.log(config());\n * // {\n * // db: {\n * // host: 'localhost',\n * // port: 5432\n * // },\n * // debug: true,\n * // feature: {\n * // x_enabled: false\n * // },\n * // worker: {\n * // emails: {\n * // maxRunsPerMin: 100,\n * // networkTimeoutMs: 100\n * // }\n * // }\n * // }\n *\n * @example\n *\n * // Not forcing all-caps to lowercase\n * // Assuming process.env contains:\n * // {\n * // APP_DB_HOST: 'localhost',\n * // APP_DB_PORT: '5432',\n * // APP_DEBUG: 'true',\n * // APP_FEATURE_X_ENABLED: 'false'\n * // APP_WORKER_EMAILS_maxRunsPerMin: '100'\n * // APP_WORKER_EMAILS_networkTimeoutMs: '100'\n * // }\n *\n * const config = makeNestedConfig(process.env, {\n * filter: (key) => key.startsWith('APP_'),\n * stripPrefix: 'APP_', // Strip the APP_ prefix\n * forceAllCapToLower: false,\n * separator: '_'\n * });\n *\n * console.log(config());\n * // {\n * // DB: {\n * // HOST: 'localhost',\n * // PORT: 5432\n * // },\n * // DEBUG: true,\n * // FEATURE: {\n * // X_ENABLED: false\n * // },\n * // WORKER: {\n * // EMAILS: {\n * // maxRunsPerMin: 100,\n * // networkTimeoutMs: 100\n * // }\n * // }\n * // }\n *\n * @example\n * // Using parseUnits to convert time and byte values\n * // Assuming process.env contains:\n * // {\n * // APP_SESSION_TIMEOUT: '15m',\n * // APP_CACHE_TTL: '1hour',\n * // APP_MAX_UPLOAD_SIZE: '10mb',\n * // APP_DISK_QUOTA: '100gb'\n * // }\n *\n * const config = makeNestedConfig(process.env, {\n * filter: (key) => key.startsWith('APP_'),\n * stripPrefix: 'APP_',\n * parseUnits: true // Enable unit parsing\n * });\n *\n * console.log(config());\n * // {\n * // session: {\n * // timeout: 900000 // 15 minutes in milliseconds\n * // },\n * // cache: {\n * // ttl: 3600000 // 1 hour in milliseconds\n * // },\n * // max: {\n * // upload: {\n * // size: 10485760 // 10 megabytes in bytes\n * // }\n * // },\n * // disk: {\n * // quota: 107374182400 // 100 gigabytes in bytes\n * // }\n * // }\n *\n * @example\n * // Using skipConversion to keep certain values as strings\n * // Assuming process.env contains:\n * // {\n * // APP_API_KEY: '12345',\n * // APP_SECRET_TOKEN: '67890',\n * // APP_PORT: '3000',\n * // APP_DEBUG: 'true'\n * // }\n *\n * const config = makeNestedConfig(process.env, {\n * filter: (key) => key.startsWith('APP_'),\n * stripPrefix: 'APP_',\n * skipConversion: (key) => key.toLowerCase().includes('key') || key.toLowerCase().includes('token')\n * });\n *\n * console.log(config());\n * // {\n * // api: {\n * // key: '12345' // Kept as string\n * // },\n * // secret: {\n * // token: '67890' // Kept as string\n * // },\n * // port: 3000, // Converted to number\n * // debug: true // Converted to boolean\n * // }\n *\n */ export const makeNestedConfig = (_flatConfig, opts = {})=>{\n assert(typeof _flatConfig === 'object' && _flatConfig !== null, 'flatConfig must be a non-null object');\n assert(typeof opts === 'object' && opts !== null, 'opts must be a non-null object');\n assert(opts.filter === undefined || typeof opts.filter === 'function', 'filter must be a function');\n assert(opts.forceAllCapToLower === undefined || typeof opts.forceAllCapToLower === 'boolean', 'forceAllCapToLower must be a boolean');\n assert(opts.separator === undefined || typeof opts.separator === 'string', 'separator must be a string');\n assert(opts.stripPrefix === undefined || typeof opts.stripPrefix === 'string' || typeof opts.stripPrefix === 'number', 'stripPrefix must be a string or number');\n assert(opts.parseUnits === undefined || typeof opts.parseUnits === 'boolean', 'parseUnits must be a boolean');\n assert(opts.skipConversion === undefined || typeof opts.skipConversion === 'function', 'skipConversion must be a function');\n assert(opts.memoizeOpts === undefined || typeof opts.memoizeOpts === 'object' || opts.memoizeOpts === false, 'memoizeOpts must be an object or false');\n const { filter, forceAllCapToLower = true, separator = '_', stripPrefix, parseUnits = false, skipConversion, memoizeOpts = false } = opts;\n const isAllCaps = (str)=>/^[A-Z0-9_]+$/.test(str);\n // If an key is set as all-caps, we want to convert it to lowercase\n // for use in a javascript object. For example, in the case of\n // APP_DB_HOST, we want to convert it to db.host. If we, however,\n // set a variable like APP_WORKER_AUTH_maxRunsPerMin=100, we get to\n // keep the capitalization of maxRunsPerMin, because it's not all-caps.\n // This can be very useful for using a convention that allows for conf-\n // iguration via a flatmap.\n const handleCasing = (str)=>{\n let processedStr = str;\n if (stripPrefix !== undefined) {\n if (typeof stripPrefix === 'number') {\n processedStr = str.slice(stripPrefix);\n } else {\n processedStr = str.startsWith(stripPrefix) ? str.slice(stripPrefix.length) : str;\n }\n }\n const split = processedStr.split(separator);\n return split.map((s)=>{\n if (isAllCaps(s) && forceAllCapToLower) return s.toLowerCase();\n return s;\n }).join('.');\n };\n function allConfigs() {\n const flatConfig = clone(_flatConfig);\n const config = {};\n const keys = Object.entries(flatConfig).filter(([key, val])=>filter?.(key, val) ?? true).map(([key])=>key).sort();\n const [, err] = attemptSync(()=>{\n setDeepMany(config, keys.map((k)=>[\n handleCasing(k),\n flatConfig[k]\n ]));\n castValuesToTypes(config, {\n parseUnits,\n skipConversion\n });\n });\n if (err instanceof Error && err.message.includes('on primitive value')) {\n const key = (k)=>k.split('_').join(separator);\n const eq = (k, v)=>`${key(k)}=${v}`;\n // Build the message as the user would see it in the flatmap\n // If the user uses '__' as a separator, we want to show that in the message\n // so they can easily identify the problem.\n const message = [\n 'Failed to load flatmap variables.',\n 'You\\'re likely trying to set a nested property on a non-object value.',\n `For example, if you have ${eq('APP_DB_NAME', 'foo')}, and then you try to set`,\n `${eq('APP_DB_NAME_TEST', 'bar')}, you'll get this error because ${key('APP_DB_NAME')} is a string.`,\n 'The correct way is to designate each namespace (separated by underscores) as ',\n `an object. For example, ${eq('APP_DB_NAME', 'foo')} becomes { db: { name: \"foo\" } }, and,`,\n `${eq('APP_DB_NAME_TEST', 'bar')} becomes { db: { name: { test: \"bar\" } } }, but both cannot coexist.`,\n `\\n\\nYou can either \\`unset ${key('APP_PROBLEMATIC')}\\` or scope all vars to \\`${key('APP_NAMESPACE_NAME')}\\` to`,\n 'make it a nested object.',\n '\\n\\n'\n ];\n console.error(message.join(' '));\n }\n if (err) throw err;\n return config;\n }\n function getConfig(path, defaultValue) {\n const config = allConfigs();\n const value = reach(config, path);\n if (value === undefined || value === null) {\n return defaultValue;\n }\n return value;\n }\n if (!memoizeOpts) return {\n allConfigs,\n getConfig\n };\n return {\n allConfigs: memoizeSync(allConfigs, memoizeOpts),\n getConfig: memoizeSync(getConfig, memoizeOpts)\n };\n};\n","export class EventTrace extends Error {\n listener;\n data;\n func;\n event;\n stack;\n}\nexport const traceStackFilterRgx = new RegExp(`(${[\n 'node_modules',\n 'node:internal',\n '$spy',\n 'makeEventTracer',\n 'sendToSpy',\n 'Function.spy',\n 'Observable.Engine'\n].join('|')})`);\nexport class EventError extends Error {\n event;\n listener;\n data;\n constructor(message, opts){\n super(message);\n this.event = opts?.event;\n this.listener = opts?.listener;\n this.data = opts?.data;\n }\n}\nexport const isEventError = (err)=>{\n return err instanceof EventError;\n};\nexport class EventPromise extends Promise {\n cleanup;\n reject;\n resolve;\n}\nexport const makeEventTracer = (event, caller, listenerOrData)=>{\n const err = new Error();\n const split = err.stack.split('\\n');\n split.shift();\n const filtered = split.filter((line)=>!traceStackFilterRgx.test(line));\n const message = `EventStack (${event} ${caller.toString()}):`;\n filtered.unshift(message);\n const stack = filtered.join('\\n');\n const tracer = new EventTrace(message);\n tracer.name = message;\n tracer.func = caller;\n tracer.event = event;\n tracer.stack = stack;\n tracer.listener = null;\n tracer.data = null;\n if (typeof listenerOrData === 'function') {\n tracer.listener = listenerOrData;\n } else {\n tracer.data = listenerOrData;\n }\n return tracer;\n};\nexport const rgxStrToRgx = (rgxStr)=>{\n const split = rgxStr?.replace(/^\\//, '').split('/');\n const flags = split.pop();\n const expr = split.join('/');\n return RegExp(expr, flags);\n};\nexport const arrOfMatchingValues = (vals, map)=>{\n const listeners = [];\n for (const key of vals){\n for (const fn of map.get(key) || new Set()){\n listeners.push({\n event: key,\n func: fn\n });\n }\n }\n return listeners;\n};\nexport var InternalEvs = /*#__PURE__*/ function(InternalEvs) {\n InternalEvs[\"on\"] = \"on\";\n InternalEvs[\"off\"] = \"off\";\n InternalEvs[\"emit\"] = \"emit\";\n InternalEvs[\"clear\"] = \"clear\";\n return InternalEvs;\n}({});\nexport class InternalEvent extends Event {\n type;\n data;\n constructor(ev, data){\n super(ev);\n this.data = data;\n this.type = ev;\n }\n}\nexport const validateEvent = (fn, opts)=>{\n if (opts.event === undefined || typeof opts.event !== 'string' && opts.event instanceof RegExp === false) {\n throw new EventError(`observer.${fn}: Event must be a string or RegExp`, opts);\n }\n};\nexport const validateListener = (fn, opts)=>{\n if (opts.listener !== undefined && typeof opts.listener !== 'function') {\n throw new EventError(`observer.${fn}: Listener must be a function`, opts);\n }\n};\n","import { Deferred, PriorityQueue } from '@logosdx/utils';\nimport { EventError } from './helpers.mjs';\nexport class DeferredEvent extends Deferred {\n cleanup;\n}\nexport class EventGenerator {\n #observer;\n #event;\n #buffer;\n #waiting = null;\n #done = false;\n #listener = null;\n #lastValue = null;\n #assertNotDestroyed = ()=>{\n if (this.#done === true) {\n throw new EventError(`Event generator for ${this.#event.toString()} has been destroyed`, {\n event: this.#event,\n listener: this.#listener,\n data: null\n });\n }\n };\n cleanup;\n next;\n constructor(observer, event, options){\n this.#observer = observer;\n this.#event = event;\n this.#buffer = new PriorityQueue();\n this.#listener = (data)=>{\n this.#lastValue = data;\n if (this.#waiting) {\n const defer = this.#waiting;\n this.#waiting = null;\n defer.resolve(data);\n } else {\n this.#buffer.push(data);\n }\n };\n const off = observer.on(event, this.#listener);\n // Mutable controller for managing abort listener lifecycle\n let generatorAbortCtrl;\n this.next = ()=>{\n this.#assertNotDestroyed();\n const buffered = this.#buffer.pop();\n if (buffered !== null) {\n return Promise.resolve(buffered);\n }\n if (!this.#waiting) {\n this.#waiting = new DeferredEvent();\n this.#waiting.promise.cleanup = this.cleanup;\n this.#waiting.promise.resolve = this.#waiting.resolve;\n this.#waiting.promise.reject = this.#waiting.reject;\n }\n return this.#waiting.promise;\n };\n this.cleanup = ()=>{\n if (this.#done) return;\n off();\n this.#done = true;\n // Reject pending promises on cancellation\n const abortError = new EventError('Aborted', {\n event: this.#event,\n listener: this.#listener,\n data: null\n });\n if (this.#waiting) {\n this.#waiting.reject(abortError);\n this.#waiting = null;\n }\n // Reject all lingering iterator promises\n this.#_iterPromise.forEach((promise)=>{\n promise.reject?.(abortError);\n });\n // Cleanup the set and buffer\n this.#_iterPromise.clear();\n this.#buffer.clear();\n this.#lastValue = null;\n // Abort the generator's abort controller if it exists\n generatorAbortCtrl?.abort();\n };\n // Wire up signal to auto-cleanup\n const userSignal = options?.signal;\n if (userSignal) {\n if (userSignal.aborted) {\n this.#done = true;\n return;\n }\n generatorAbortCtrl = new AbortController();\n userSignal.addEventListener('abort', this.cleanup, {\n signal: generatorAbortCtrl.signal\n });\n }\n }\n /**\n * Store iterator's last promise. Handles multiple promises\n * for when the generator is used in multiple places.\n */ #_iterPromise = new Set();\n async *[Symbol.asyncIterator]() {\n while(!this.#done){\n // capture the promise before yielding\n const promise = this.next();\n this.#_iterPromise.add(promise);\n yield await promise;\n // remove the promise after yielding\n this.#_iterPromise.delete(promise);\n }\n return Promise.resolve(undefined);\n }\n get lastValue() {\n return this.#lastValue;\n }\n get done() {\n return this.#done;\n }\n emit(data) {\n this.#assertNotDestroyed();\n this.#observer.emit(this.#event, data);\n }\n}\n","import { assert } from '@logosdx/utils';\nexport var QueueState = /*#__PURE__*/ function(QueueState) {\n QueueState[\"running\"] = \"running\";\n QueueState[\"paused\"] = \"paused\";\n QueueState[\"stopped\"] = \"stopped\";\n QueueState[\"draining\"] = \"draining\";\n return QueueState;\n}({});\nexport class QueueStateManager {\n status = \"stopped\";\n #allowedTransitions = {\n [\"running\"]: [\n \"paused\",\n \"draining\",\n \"stopped\"\n ],\n [\"draining\"]: [\n \"stopped\",\n \"paused\"\n ],\n [\"paused\"]: [\n \"running\",\n \"draining\",\n \"stopped\"\n ],\n [\"stopped\"]: [\n \"running\",\n \"draining\"\n ]\n };\n transition(to) {\n assert(this.#allowedTransitions[this.status].includes(to), `Invalid transition from ${this.status} to ${to}`);\n this.status = to;\n }\n is(...states) {\n return states.includes(this.status);\n }\n get state() {\n return this.status;\n }\n}\n","export class QueueStats {\n observer;\n queueName;\n #processing;\n #processed;\n #avgProcessingTime;\n #success;\n #error;\n #rejected;\n constructor(observer, queueName){\n this.observer = observer;\n this.queueName = queueName;\n this.#processing = 0;\n this.#processed = 0;\n this.#avgProcessingTime = 0;\n this.#success = 0;\n this.#error = 0;\n this.#rejected = 0;\n this.observer.on(`queue:${this.queueName}:processing`, ()=>{\n this.#processing++;\n });\n this.observer.on(`queue:${this.queueName}:success`, (wrapped)=>{\n this.#processed++;\n this.#success++;\n this.#processing--;\n this.#calculateAvg(wrapped.data.elapsed);\n });\n this.observer.on(`queue:${this.queueName}:error`, ()=>{\n this.#processed++;\n this.#error++;\n this.#processing--;\n });\n this.observer.on(`queue:${this.queueName}:rejected`, ()=>this.#rejected++);\n }\n #calculateAvg(elapsed) {\n this.#avgProcessingTime = (this.#avgProcessingTime * (this.#success - 1) + elapsed) / this.#success;\n }\n get stats() {\n return {\n processed: this.#processed,\n processing: this.#processing,\n avgProcessingTime: this.#avgProcessingTime,\n success: this.#success,\n error: this.#error,\n rejected: this.#rejected\n };\n }\n}\n","/**\n * Wrapper class for internal queue event payloads.\n * Used to mark queue-emitted events so regex listeners can skip them.\n * When listening to queue events, unwrap via `event.data`.\n */ export class InternalQueueEvent {\n data;\n constructor(data){\n this.data = data;\n }\n}\nexport var QueueRejectionReason = /*#__PURE__*/ function(QueueRejectionReason) {\n QueueRejectionReason[\"full\"] = \"Queue is full\";\n QueueRejectionReason[\"notRunning\"] = \"Queue is not running\";\n return QueueRejectionReason;\n}({});\n","import { assert, attempt, clone, isFunction, isPlainObject, wait, noop, generateId, TimeoutError, isTimeoutError, RateLimitTokenBucket, PriorityQueue } from '@logosdx/utils';\nimport { ObserverEngine } from '../index.mjs';\nimport { QueueStateManager } from './state.mjs';\nimport { QueueStats } from './statistics.mjs';\nimport { InternalQueueEvent, QueueRejectionReason } from './helpers.mjs';\nexport class EventQueue {\n opts;\n #queue;\n #priorites;\n #off;\n #state;\n #stats;\n #rateLimiter;\n #idle;\n #waiting;\n #listening;\n #debugging;\n #generation;\n #activeRunners;\n #runningNodes;\n constructor(opts){\n this.opts = opts;\n this.#priorites = new Map();\n this.#off = noop;\n this.#state = new QueueStateManager();\n this.#idle = true;\n this.#waiting = false;\n this.#listening = false;\n this.#debugging = false;\n this.#generation = 0;\n this.#activeRunners = 0;\n this.#runningNodes = new Set();\n const { observer = new ObserverEngine(), event, process, name, type = 'fifo', concurrency = 1, pollIntervalMs = 100, jitterFactor = 0, rateLimitIntervalMs = 1000, processIntervalMs = 0, taskTimeoutMs = 0, autoStart = true, debug = false } = this.opts;\n let { maxQueueSize = 999_999_999, rateLimitCapacity = 999_999_999 } = this.opts;\n assert(isPlainObject(this.opts), 'Options is required to be an object');\n assert(isFunction(observer?.on), 'ObserverEngine is required');\n assert(typeof event === 'string' && event.length > 0 || event instanceof RegExp, 'Event is required to be a string or RegExp');\n assert(isFunction(process), 'Process is required to be a function');\n assert(name && typeof name === 'string' && name.length > 0, 'Name is required');\n assert(concurrency > 0, 'Concurrency must be greater than 0');\n assert(pollIntervalMs > 0, 'pollIntervalMs must be a number greater than 0');\n assert(jitterFactor >= 0 && jitterFactor <= 1, 'Jitter must be a number greater than or equal to 0 and less than or equal to 1');\n assert(maxQueueSize > 0, 'MaxQueueSize must be a number greater than 0');\n assert(rateLimitIntervalMs > 0, 'rateLimitIntervalMs must be a number greater than 0');\n assert(rateLimitCapacity > 0, 'rateLimitCapacity must be a number greater than 0');\n assert(processIntervalMs >= 0, 'processIntervalMs must be a number greater than or equal to 0');\n assert(taskTimeoutMs >= 0, 'taskTimeoutMs must be a number greater than or equal to 0');\n assert(type === 'fifo' || type === 'lifo', 'Type must be either \"fifo\" or \"lifo\"');\n assert(typeof autoStart === 'boolean', 'AutoStart must be a boolean');\n if (maxQueueSize === Infinity) {\n maxQueueSize = 999_999_999;\n }\n if (rateLimitCapacity === Infinity) {\n rateLimitCapacity = 999_999_999;\n }\n Object.assign(this.opts, {\n observer,\n type,\n concurrency,\n maxQueueSize,\n pollIntervalMs,\n jitterFactor,\n processIntervalMs,\n taskTimeoutMs\n });\n this.#debugging = debug;\n this.#stats = new QueueStats(observer, name);\n this.#rateLimiter = new RateLimitTokenBucket({\n capacity: rateLimitCapacity,\n refillIntervalMs: rateLimitIntervalMs\n });\n this.#queue = new PriorityQueue({\n lifo: type === 'lifo'\n });\n if (autoStart) {\n this.start();\n }\n }\n #listen() {\n if (this.#listening) return;\n this.#listening = true;\n const off = this.opts.observer.on(this.opts.event, (payload)=>{\n // Skip internal queue events (wrapped in InternalQueueEvent)\n // Check both positions: direct payload (string events) or payload.data (regex events)\n const maybeInternal = payload?.data ?? payload;\n if (maybeInternal instanceof InternalQueueEvent) {\n return;\n }\n // Use payload as-is - for regex events this is { event, data, listener }\n const data = payload;\n const item = {\n data,\n _taskId: generateId(),\n priority: this.#priorites.get(data) ?? 0\n };\n this.#priorites.delete(data);\n if (this.#queue.size() >= this.opts.maxQueueSize) {\n this.#emit('rejected', {\n ...item,\n reason: QueueRejectionReason.full\n });\n return;\n }\n this.#emit('added', item);\n this.#idle = false;\n this.#queue.push(item, item.priority);\n });\n this.#off = ()=>{\n off();\n this.#listening = false;\n };\n }\n #emit(event, payload) {\n if (this.#debugging) {\n const args = [\n `[${this.name}] ${event}`,\n payload?._taskId ?? '',\n payload?.data ?? ''\n ];\n if (this.#debugging === 'verbose') {\n args[1] = payload;\n }\n console.log(...args);\n }\n // Wrap payload so regex listeners can detect and skip internal queue events\n this.opts.observer.emit(`queue:${this.name}:${event}`, new InternalQueueEvent(payload));\n }\n /**\n * Setups concurrency and begins processing items\n */ #launchRunners() {\n const generation = ++this.#generation;\n for(let i = 0; i < this.opts.concurrency; i++){\n this.#workerLoop(generation, i);\n }\n }\n /**\n * Loops and processes items in the queue until the queue is stopped\n */ async #workerLoop(generation, instance) {\n const { pollIntervalMs, jitterFactor } = this.opts;\n this.#activeRunners++;\n while(this.#state.is('running') && this.#generation === generation){\n if (!this.pending) {\n if (!this.#idle && !this.pending && this.#runningNodes.size === 0) {\n this.#idle = true;\n this.#emit('idle');\n }\n this.#waiting = true;\n await wait(pollIntervalMs * (1 + Math.random() * jitterFactor));\n this.#waiting = false;\n continue;\n }\n const data = this.#queue.pop();\n if (!data) continue;\n this.#runningNodes.add(`${generation}-${instance}`);\n await this.#processNext(data);\n if (this.opts.processIntervalMs > 0) {\n await wait(this.opts.processIntervalMs);\n }\n this.#runningNodes.delete(`${generation}-${instance}`);\n }\n this.#activeRunners--;\n }\n /**\n * Processes the next item in the queue, if the queue is not\n * in a state that prevents it from processing the item.\n */ async #processNext(item) {\n if (!this.#state.is('running', 'draining')) {\n this.#queue.push(item);\n return;\n }\n ;\n let rateLimited = false;\n if (!this.#state.is('draining')) {\n // console.log('waiting for token', new Date().toISOString());\n await this.#rateLimiter.waitAndConsume(1, {\n onRateLimit: ()=>{\n this.#emit('rate-limited', item);\n rateLimited = true;\n }\n });\n // console.log('token acquired', new Date().toISOString());\n }\n const startedAt = Date.now();\n this.#emit('processing', {\n ...item,\n startedAt,\n rateLimited\n });\n const [, err] = await attempt(async ()=>{\n if (this.opts.taskTimeoutMs === 0) {\n return this.opts.process(item.data);\n }\n const result = await Promise.race([\n this.opts.process(item.data),\n wait(this.opts.taskTimeoutMs, new TimeoutError('Task timed out'))\n ]);\n if (isTimeoutError(result)) {\n this.#emit('timeout', {\n ...item,\n error: result\n });\n throw result;\n }\n return result;\n });\n const elapsed = Date.now() - startedAt;\n if (err) {\n this.#emit('error', {\n ...item,\n error: err,\n rateLimited\n });\n } else {\n this.#emit('success', {\n ...item,\n startedAt,\n elapsed,\n rateLimited\n });\n }\n if (this.#queue.size() === 0 && this.#state.is('running')) {\n this.#emit('empty');\n }\n }\n /**\n * Start the queue if it is not already started\n */ start() {\n if (this.#state.is('running')) return;\n this.#listen();\n this.#state.transition('running');\n this.#emit('start');\n this.#launchRunners();\n this.#emit('started');\n return Promise.resolve();\n }\n /**\n * Stop the queue\n */ stop() {\n if (this.#state.is('stopped')) return;\n this.#off();\n this.#state.transition('stopped');\n this.#emit('stopped');\n }\n /**\n * Pause the queue\n */ pause() {\n if (this.#state.is('paused')) return;\n this.#state.transition('paused');\n this.#emit('paused');\n return Promise.resolve();\n }\n /**\n * Resume the queue\n */ resume() {\n if (this.#state.is('running')) return;\n this.#listen();\n this.#state.transition('running');\n this.#launchRunners();\n this.#emit('resumed');\n return Promise.resolve();\n }\n /**\n * Processes a batch of items from the queue, and then\n * calls the before and after functions. Returns the\n * number of items processed.\n */ async #processBatch(limit = Infinity, beforeFn, afterFn) {\n let count = limit === Infinity ? this.#queue.size() : limit;\n const items = this.#queue.popMany(count);\n if (count < items.length) {\n count = items.length;\n }\n beforeFn?.(count);\n if (count !== 0) {\n for (const item of items){\n await this.#processNext(item);\n }\n }\n afterFn?.(count);\n return count;\n }\n /**\n * Empty and process all items in the queue and\n * then stop the queue. Returns the number of items\n * processed.\n */ shutdown(force = false) {\n if (this.#state.is('draining', 'stopped')) return Promise.resolve(0);\n if (force) {\n const count = this.purge();\n this.stop();\n this.#emit('shutdown', {\n force,\n pending: count\n });\n return Promise.resolve(count);\n }\n return this.#processBatch(Infinity, (pending)=>{\n this.pause();\n this.#state.transition('draining');\n this.#off();\n this.#emit('drain', {\n pending\n });\n }, (drained)=>{\n // If force is true, we communicate the number of pending items that\n // were dropped. Otherwise, we communicate the number of items that\n // were drained.\n this.#emit('drained', force ? {\n pending: drained\n } : {\n drained\n });\n this.stop();\n // Same as above, but we only communicate the number of pending items\n // that were dropped.\n this.#emit('shutdown', force ? {\n force,\n pending: drained\n } : {\n force\n });\n });\n }\n /**\n * Executes `limit` items in the queue\n * and then emits a `flush` event. Returns the number\n * of items processed.\n */ async flush(limit = Infinity) {\n return this.#processBatch(limit, (pending)=>this.#emit('flush', {\n pending\n }), (flushed)=>this.#emit('flushed', {\n flushed\n }));\n }\n /**\n * Clears the queue and emits a `purge` event. Returns\n * the number of items purged.\n */ purge() {\n const count = this.#queue.size();\n this.#queue.clear();\n this.#emit('purged', {\n count\n });\n return count;\n }\n /**\n * Emit an event to the observer, which then gets\n * picked up by the queue and processed.\n *\n * @param data The data to add to the queue\n * @param priority The priority of the data\n *\n * @note If priority is provided, it will be used to determine the order of the data in the queue.\n * The higher the priority, the sooner the data will be processed.\n *\n * @note If priority is not provided, the data will be added to the queue with a priority of 0.\n */ add(data, priority) {\n if (!this.#state.is('running', 'paused')) {\n this.#emit('rejected', {\n data,\n reason: QueueRejectionReason.notRunning\n });\n return false;\n }\n if (this.#queue.size() >= this.opts.maxQueueSize) {\n this.#emit('rejected', {\n data,\n reason: QueueRejectionReason.full\n });\n return false;\n }\n if (priority) {\n this.#priorites.set(data, priority);\n }\n this.opts.observer.emit(this.opts.event, data);\n return true;\n }\n debug(on = false) {\n this.#debugging = on;\n }\n #observerForQueue() {\n return this.opts.observer;\n }\n on(event, listener) {\n return this.#observerForQueue().on(`queue:${this.name}:${event}`, listener);\n }\n once(event, listener) {\n return this.#observerForQueue().once(`queue:${this.name}:${event}`, listener);\n }\n off(event, listener) {\n return this.#observerForQueue().off(`queue:${this.name}:${event}`, listener);\n }\n /**\n * The name of the queue\n */ get name() {\n return this.opts.name;\n }\n /**\n * Whether the queue is waiting for the\n * the\n */ get isWaiting() {\n return this.#waiting;\n }\n /**\n * Whether the queue is idle\n */ get isIdle() {\n return this.#idle && this.#state.is('running');\n }\n /**\n * Whether the queue is running\n */ get isRunning() {\n return this.#state.is('running');\n }\n /**\n * Whether the queue is paused\n */ get isPaused() {\n return this.#state.is('paused');\n }\n /**\n * Whether the queue is stopped\n */ get isStopped() {\n return this.#state.is('stopped');\n }\n /**\n * Whether the queue is draining\n */ get isDraining() {\n return this.#state.is('draining');\n }\n /**\n * The current state of the queue\n */ get state() {\n return this.#state.state;\n }\n /**\n * The number of items in the queue\n */ get pending() {\n return this.#queue.size();\n }\n /**\n * The stats of the queue\n */ get stats() {\n return clone(this.#stats.stats);\n }\n get snapshot() {\n return {\n name: this.name,\n state: this.state,\n pending: this.pending,\n stats: this.stats,\n rateLimiter: this.#rateLimiter.snapshot,\n activeRunners: this.#activeRunners,\n runningNodes: this.#runningNodes,\n isIdle: this.isIdle,\n isWaiting: this.isWaiting,\n isRunning: this.isRunning,\n isPaused: this.isPaused,\n isStopped: this.isStopped,\n isDraining: this.isDraining,\n isEmpty: this.pending === 0\n };\n }\n}\n","import { assert, definePrivateProps, clone, isFunction, noop } from '@logosdx/utils';\nimport { arrOfMatchingValues, InternalEvent, InternalEvs, makeEventTracer, rgxStrToRgx, validateEvent, validateListener } from './helpers.mjs';\nimport { EventGenerator, DeferredEvent } from './generator.mjs';\nimport { EventQueue } from './index.mjs';\nexport class ObserverEngine {\n #listenerMap = new Map();\n #rgxListenerMap = new Map();\n #internalListener = new EventTarget();\n #emitValidator;\n #spy;\n // Hidden property for holding the spy function\n // when debugging is enabled. Used to restore the\n // original spy function when debugging is disabled.\n #__spy;\n // Instance-level AbortController for cleanup\n #instanceController = new AbortController();\n #instanceSignal;\n constructor(options){\n // Validate option if exists\n if (options) {\n assert(!options.name || typeof options.name === 'string', 'Observable options.name must be a string', TypeError);\n assert(!options.spy || typeof options.spy === 'function', 'Observable options.spy must be a function', TypeError);\n assert(!options.emitValidator || typeof options.emitValidator === 'function', 'Observable options.emitValidator must be a function', TypeError);\n this.#spy = options.spy;\n }\n // Setup instance-level signal\n // We use the internal controller's signal directly and listen separately\n // to user signals to avoid AbortSignal.any() memory retention issues\n this.#instanceSignal = this.#instanceController.signal;\n const userSignal = options?.signal;\n // Handler that clears all listeners when any abort occurs\n const clearOnAbort = ()=>this.clear();\n // Listen for internal abort\n this.#instanceSignal.addEventListener('abort', clearOnAbort, {\n once: true\n });\n // If user provided a signal, also listen on that\n if (userSignal) {\n userSignal.addEventListener('abort', clearOnAbort, {\n once: true\n });\n }\n // Make these functions non-enumerable\n definePrivateProps(this, {\n on: this.on,\n once: this.once,\n emit: this.emit,\n off: this.off,\n observe: this.observe,\n debug: this.debug,\n $has: this.$has,\n $facts: this.$facts,\n $internals: this.$internals,\n name: options?.name || Math.random().toString(36).substring(7)\n });\n this.#emitValidator = options?.emitValidator;\n }\n name;\n /**\n * Returns facts about the the internal state of the observable instance.\n */ $facts() {\n const listenKeys = [\n ...this.#listenerMap.keys()\n ];\n const rgxKeys = [\n ...this.#rgxListenerMap.keys()\n ];\n const listenerCounts = Object.fromEntries([\n listenKeys.map((k)=>[\n k,\n this.#listenerMap.get(k)?.size\n ]),\n rgxKeys.map((k)=>[\n k,\n this.#rgxListenerMap.get(k)?.size\n ])\n ].flat());\n return {\n listeners: listenKeys,\n rgxListeners: rgxKeys,\n listenerCounts,\n hasSpy: !!this.#spy\n };\n }\n /**\n\t * The internals of the observable instance.\n *\n * NOTE: Do not use this to try to meddle with the\n * internals of the observable instance. This is for\n * debugging purposes only.\n\t */ $internals() {\n return {\n listenerMap: clone(this.#listenerMap),\n rgxListenerMap: clone(this.#rgxListenerMap),\n internalListener: clone(this.#internalListener),\n name: this.name,\n spy: this.#spy\n };\n }\n $has(event) {\n if (event instanceof RegExp) {\n return this.#rgxListenerMap.has(event.toString());\n }\n return this.#listenerMap.has(event) || this.#rgxListenerMap.has(event);\n }\n #currentSpy(...args) {\n if (this.#spy) {\n this.#spy.apply(this, args);\n }\n }\n /**\n * Enables or disables debugging for the observable instance.\n * Works in conjunction with your spy function. Provides a\n * stack trace of events that are triggered, listened to, and\n * cleaned up.\n *\n * @param on Whether to enable or disable debugging\n */ debug(on = true) {\n const original = this.#spy;\n const spy = (ev)=>{\n const { event, fn, data, listener } = ev;\n console.info(makeEventTracer(event, fn, data || listener));\n original && original(ev);\n };\n if (on) {\n this.#spy = spy;\n this.#__spy = original;\n return;\n }\n this.#spy = this.#__spy;\n }\n /**\n * Sets the spy function for the observable instance.\n * @param spy The spy function to set\n * @param force Whether to force the spy function to be set even if one is already set\n */ spy(spy, force = false) {\n assert(isFunction(spy), 'spy must be a function', TypeError);\n assert(force || this.#spy === undefined, 'you already have a spy function set', TypeError);\n this.#spy = spy;\n }\n /**\n * Observes given component as an extension of this observable instance.\n * @param component Component to wrap events around\n * @param options Optional configuration including signal for cleanup\n *\n * @example\n *\n * const obs = new ObserverEngine();\n *\n * const modal = {};\n *\n * obs.observe(modal);\n *\n * modal.on('modal-open', () => {});\n *\n * obs.trigger('modal-open'); // opens modal\n * modal.trigger('modal-open'); // opens modal\n *\n * modal.cleanup(); // clears all event listeners\n */ observe(component, options) {\n const self = this;\n // Check if signal is already aborted - set up noop child\n const userSignal = options?.signal;\n if (userSignal?.aborted) {\n definePrivateProps(component, {\n on: noop,\n once: noop,\n off: noop,\n emit: noop,\n clear: noop,\n cleanup: noop\n });\n return component;\n }\n const track = new Map;\n const trackListener = (event, fn)=>{\n const _set = track.get(event) || new Set;\n _set.add(fn);\n track.set(event, _set);\n return fn;\n };\n // Handle removing all callbacks from this instance related to child observable.\n // Only all of the child instance's callbacks should be removed.\n const rmAll = ()=>{\n for (const entry of track.entries()){\n const [ev, _set] = entry;\n // For each function, remove listener from observer\n [\n ..._set\n ].forEach((fn)=>self.off(ev, fn));\n // Clear the tracker\n track.set(ev, new Set());\n }\n };\n const afterOff = (_event)=>{\n const [event, callback] = _event.data;\n const _set = track.get(event);\n _set?.delete(callback);\n };\n this.#internalListener.addEventListener(InternalEvs.off, afterOff);\n this.#internalListener.addEventListener(InternalEvs.clear, rmAll);\n const on = (ev, fn)=>{\n return self.on(ev, trackListener(ev, fn));\n };\n const once = (ev, fn)=>{\n return self.once(ev, trackListener(ev, fn));\n };\n const off = (ev, fn)=>{\n self.off(ev, fn);\n };\n const emit = (ev, data)=>{\n return self.emit(ev, data);\n };\n const clear = ()=>rmAll();\n // Mutable controller for managing abort listener lifecycle\n let observeAbortCtrl;\n const cleanup = ()=>{\n rmAll();\n self.#internalListener.removeEventListener(InternalEvs.off, afterOff);\n self.#internalListener.removeEventListener(InternalEvs.clear, rmAll);\n observeAbortCtrl?.abort();\n };\n // Compose signal with instance signal for automatic cleanup\n if (userSignal) {\n observeAbortCtrl = new AbortController();\n const composedSignal = AbortSignal.any([\n this.#instanceSignal,\n userSignal\n ]);\n composedSignal.addEventListener('abort', cleanup, {\n signal: observeAbortCtrl.signal\n });\n }\n definePrivateProps(component, {\n on,\n once,\n off,\n emit,\n clear,\n cleanup\n });\n return component;\n }\n /**\n * Gets information about the event, whether it's a regex or not,\n * the event name, and the regex itself.\n */ #eventInfo(event) {\n const isRgx = event.constructor === RegExp;\n const eventName = event.toString();\n return {\n isRgx,\n eventName,\n rgx: event\n };\n }\n /**\n * Returns all event names that match the regex\n */ #withRgxMatchKeys(rgx) {\n return [\n ...this.#listenerMap.keys()\n ].filter((k)=>rgx.test(k));\n }\n /**\n * Returns all regexes that match the key\n */ #withKeyMatchRgx(key) {\n return [\n ...this.#rgxListenerMap.keys()\n ].filter((s)=>rgxStrToRgx(s).test(key)).flat();\n }\n /**\n * Returns all event names that match the regex\n */ #matchStr(rgx) {\n const events = this.#withRgxMatchKeys(rgx);\n return arrOfMatchingValues(events, this.#listenerMap);\n }\n /**\n * Returns all regexes that match the key\n */ #matchRgx(str) {\n const events = this.#withKeyMatchRgx(str);\n return arrOfMatchingValues(events, this.#rgxListenerMap);\n }\n /**\n * Listen for an event\n * @param event\n * @param listenerOrOptions - Either a callback function or options object\n * @param options\n */ on(event, listenerOrOptions, options) {\n // Determine if second arg is listener or options\n const isListenerFn = typeof listenerOrOptions === 'function';\n const listener = isListenerFn ? listenerOrOptions : undefined;\n const resolvedOptions = isListenerFn ? options : listenerOrOptions;\n if (!resolvedOptions?.once) {\n validateEvent('on', {\n event,\n listener\n });\n validateListener('on', {\n event,\n listener\n });\n }\n if (listener === undefined) {\n return new EventGenerator(this, event, resolvedOptions);\n }\n // Check if signal is already aborted\n const userSignal = resolvedOptions?.signal;\n if (userSignal?.aborted) {\n return ()=>{};\n }\n const { eventName, isRgx } = this.#eventInfo(event);\n const listenerMap = isRgx ? this.#rgxListenerMap : this.#listenerMap;\n this.#currentSpy({\n event,\n fn: resolvedOptions?.once ? 'once' : 'on',\n data: null,\n listener,\n context: this\n });\n const cbSet = listenerMap.get(eventName) || new Set([\n listener\n ]);\n if (cbSet && !cbSet.has(listener)) {\n cbSet.add(listener);\n }\n if (!listenerMap.has(eventName)) {\n listenerMap.set(eventName, cbSet);\n }\n this.#internalListener.dispatchEvent(new InternalEvent(InternalEvs.on, [\n event,\n listener\n ]));\n // Track if cleanup has been called to prevent double-cleanup\n let cleanedUp = false;\n const cleanup = ()=>{\n if (cleanedUp) return;\n cleanedUp = true;\n this.#currentSpy({\n event,\n fn: 'cleanup',\n data: null,\n listener,\n context: this\n });\n cbSet.delete(listener);\n // Remove empty Set from Map to prevent memory bloat\n if (cbSet.size === 0) {\n listenerMap.delete(eventName);\n }\n this.#internalListener.dispatchEvent(new InternalEvent(InternalEvs.off, [\n event,\n listener\n ]));\n };\n // Add abort listeners directly to avoid AbortSignal.any() memory retention\n // Each signal gets its own listener that we can remove independently\n if (userSignal) {\n const abortHandler = ()=>{\n cleanup();\n // Remove self from the other signal to prevent retention\n this.#instanceSignal.removeEventListener('abort', abortHandler);\n };\n // Listen on user signal\n userSignal.addEventListener('abort', abortHandler, {\n once: true\n });\n // Listen on instance signal\n this.#instanceSignal.addEventListener('abort', abortHandler, {\n once: true\n });\n // Wrap cleanup to also remove abort listeners\n const originalCleanup = cleanup;\n const wrappedCleanup = ()=>{\n originalCleanup();\n // Remove abort handlers to prevent them from firing after manual cleanup\n userSignal.removeEventListener('abort', abortHandler);\n this.#instanceSignal.removeEventListener('abort', abortHandler);\n };\n return wrappedCleanup;\n }\n return cleanup;\n }\n /**\n * Executes a callback once when the specified\n * event is emitted, or returns a promise that\n * resolves when the event is emitted\n */ once(event, listenerOrOptions, options) {\n // Determine if second arg is listener or options\n const isListenerFn = typeof listenerOrOptions === 'function';\n const listener = isListenerFn ? listenerOrOptions : undefined;\n const resolvedOptions = isListenerFn ? options : listenerOrOptions;\n validateEvent('once', {\n event,\n listener\n });\n validateListener('once', {\n event,\n listener\n });\n if (!listener) {\n const defer = new DeferredEvent();\n const userSignal = resolvedOptions?.signal;\n // If signal already aborted, reject immediately\n if (userSignal?.aborted) {\n defer.reject(userSignal.reason ?? new DOMException('Aborted', 'AbortError'));\n defer.promise.cleanup = ()=>{};\n return defer.promise;\n }\n // Mutable controller for managing abort listener lifecycle\n let promiseAbortCtrl;\n const cleanup = this.once(event, (data)=>{\n defer.resolve(data);\n promiseAbortCtrl?.abort();\n }, resolvedOptions);\n // Wire up signal to reject promise on abort\n if (userSignal) {\n promiseAbortCtrl = new AbortController();\n userSignal.addEventListener('abort', ()=>{\n cleanup();\n defer.reject(userSignal.reason ?? new DOMException('Aborted', 'AbortError'));\n }, {\n signal: promiseAbortCtrl.signal\n });\n }\n defer.promise.cleanup = ()=>{\n cleanup();\n promiseAbortCtrl?.abort();\n };\n return defer.promise;\n }\n const self = this;\n const runOnce = function(...args) {\n const { eventName, isRgx } = self.#eventInfo(event);\n const listenerMap = isRgx ? self.#rgxListenerMap : self.#listenerMap;\n const fns = listenerMap.get(eventName);\n if (fns) {\n fns.delete(runOnce);\n if (fns.size === 0) listenerMap.delete(eventName);\n }\n listener.apply(self, args);\n };\n return this.on(event, runOnce, {\n once: true,\n ...resolvedOptions\n });\n }\n /**\n * Stop listening for an event\n * @param event\n * @param listener\n */ off(event, listener) {\n validateEvent('off', {\n event,\n listener\n });\n this.#currentSpy({\n event,\n fn: 'off',\n data: null,\n listener,\n context: this\n });\n const { eventName, isRgx, rgx } = this.#eventInfo(event);\n const matches = isRgx ? this.#withRgxMatchKeys(rgx) : [\n eventName\n ];\n matches.forEach((_ev)=>{\n const ev = _ev;\n this.#internalListener.dispatchEvent(new InternalEvent(InternalEvs.off, [\n ev,\n listener\n ]));\n if (listener) {\n const fns = this.#listenerMap.get(ev);\n if (fns) {\n fns.delete(listener);\n if (fns.size === 0) this.#listenerMap.delete(ev);\n }\n return;\n }\n ;\n this.#listenerMap.delete(ev);\n });\n }\n /** Emits an event */ emit(event, data) {\n validateEvent('emit', {\n event,\n data\n });\n if (this.#emitValidator) {\n this.#emitValidator(event, data, this);\n }\n this.#currentSpy({\n event,\n fn: 'emit',\n data,\n listener: null,\n context: this\n });\n const { eventName, isRgx, rgx } = this.#eventInfo(event);\n if (!isRgx) {\n const cbs = this.#listenerMap.get(eventName);\n const rgxCbs = this.#matchRgx(eventName);\n if (cbs) cbs.forEach((fn)=>fn.apply(this, [\n data,\n {\n event,\n listener: fn\n }\n ]));\n if (rgxCbs) rgxCbs.forEach(({ func })=>func.apply(this, [\n {\n data,\n event,\n listener: func\n }\n ]));\n this.#internalListener.dispatchEvent(new InternalEvent(InternalEvs.emit, [\n eventName,\n data\n ]));\n return;\n }\n const cbs = this.#matchStr(rgx);\n if (cbs) cbs.forEach(({ event, func })=>func.apply(this, [\n data,\n {\n event,\n listener: func\n }\n ]));\n this.#withRgxMatchKeys(rgx).forEach((ev)=>{\n this.#internalListener.dispatchEvent(new InternalEvent(InternalEvs.emit, [\n ev,\n data\n ]));\n });\n }\n clear() {\n this.#listenerMap.clear();\n this.#rgxListenerMap.clear();\n this.#internalListener.dispatchEvent(new InternalEvent(InternalEvs.clear, [\n 'clear',\n null\n ]));\n }\n queue(event, process, options) {\n return new EventQueue({\n ...options,\n event,\n process,\n observer: this\n });\n }\n /**\n * Checks if an event key passes through the filter/exclude pipeline.\n * Filter narrows first, then exclude removes from that set.\n */ static #passesFilter(event, options) {\n if (!options) return true;\n const { filter, exclude } = options;\n if (filter) {\n const passes = filter.some((f)=>f instanceof RegExp ? f.test(event) : f === event);\n if (!passes) return false;\n }\n if (exclude) {\n const blocked = exclude.some((e)=>e instanceof RegExp ? e.test(event) : e === event);\n if (blocked) return false;\n }\n return true;\n }\n /**\n * Moves or copies listeners between two ObserverEngine instances.\n * Static methods on the same class can access # private fields directly.\n */ static #moveListeners(source, target, remove, options) {\n for (const [event, callbacks] of source.#listenerMap){\n if (!ObserverEngine.#passesFilter(event, options)) continue;\n const targetSet = target.#listenerMap.get(event) || new Set();\n for (const cb of callbacks){\n targetSet.add(cb);\n }\n target.#listenerMap.set(event, targetSet);\n if (remove) {\n source.#listenerMap.delete(event);\n }\n }\n for (const [event, callbacks] of source.#rgxListenerMap){\n if (!ObserverEngine.#passesFilter(event, options)) continue;\n const targetSet = target.#rgxListenerMap.get(event) || new Set();\n for (const cb of callbacks){\n targetSet.add(cb);\n }\n target.#rgxListenerMap.set(event, targetSet);\n if (remove) {\n source.#rgxListenerMap.delete(event);\n }\n }\n }\n /**\n * Transfers all matching listeners from source to target, removing\n * them from the source. Target's existing listeners are preserved.\n *\n * Useful when cloning an engine (e.g. FetchEngine) and carrying\n * over observability listeners to the new instance.\n *\n * @example\n *\n * const old = new ObserverEngine();\n * const next = new ObserverEngine();\n *\n * old.on('ready', handler);\n *\n * ObserverEngine.transfer(old, next);\n * // `next` now owns the 'ready' listener; `old` has none\n *\n * @example\n *\n * // Transfer only specific events\n * ObserverEngine.transfer(old, next, {\n * filter: ['ready', /^user\\./]\n * });\n */ static transfer(source, target, options) {\n ObserverEngine.#moveListeners(source, target, true, options);\n }\n /**\n * Copies all matching listeners from source to target without\n * removing them from the source. Target's existing listeners\n * are preserved.\n *\n * Useful when forking an engine so both instances react to the\n * same events independently.\n *\n * @example\n *\n * const primary = new ObserverEngine();\n * const mirror = new ObserverEngine();\n *\n * primary.on('update', handler);\n *\n * ObserverEngine.copy(primary, mirror);\n * // Both engines now have the 'update' listener\n *\n * @example\n *\n * // Copy everything except internal events\n * ObserverEngine.copy(primary, mirror, {\n * exclude: [/^__/]\n * });\n */ static copy(source, target, options) {\n ObserverEngine.#moveListeners(source, target, false, options);\n }\n}\n","import { ObserverEngine } from './engine.mjs';\nexport class ObserverRelay {\n #pub;\n #sub;\n #subEmit;\n #isShutdown = false;\n emit;\n on;\n once;\n off;\n queue;\n constructor(options){\n const name = options?.name;\n this.#pub = new ObserverEngine({\n name: name ? `${name}:pub` : undefined,\n spy: options?.spy,\n signal: options?.signal,\n emitValidator: options?.emitValidator?.pub\n });\n this.#sub = new ObserverEngine({\n name: name ? `${name}:sub` : undefined,\n spy: options?.spy,\n signal: options?.signal,\n emitValidator: options?.emitValidator?.sub\n });\n this.on = this.#sub.on.bind(this.#sub);\n this.once = this.#sub.once.bind(this.#sub);\n this.off = this.#sub.off.bind(this.#sub);\n this.queue = this.#sub.queue.bind(this.#sub);\n this.#subEmit = this.#sub.emit.bind(this.#sub);\n const pubEmit = this.#pub.emit.bind(this.#pub);\n this.emit = (event, data)=>{\n if (this.#isShutdown) return;\n pubEmit(event, data);\n };\n this.#pub.on(/.+/, ({ event, data })=>this.send(event, data));\n if (options?.signal) {\n options.signal.addEventListener('abort', ()=>{\n this.#isShutdown = true;\n });\n }\n }\n receive(event, data, ctx) {\n if (this.#isShutdown) return;\n this.#subEmit(event, {\n data,\n ctx\n });\n }\n spy(spy) {\n if (this.#isShutdown) return;\n this.#pub.spy(spy, true);\n this.#sub.spy(spy, true);\n }\n $has(event) {\n return {\n pub: this.#pub.$has(event),\n sub: this.#sub.$has(event)\n };\n }\n $facts() {\n return {\n pub: this.#pub.$facts(),\n sub: this.#sub.$facts()\n };\n }\n $internals() {\n return {\n pub: this.#pub.$internals(),\n sub: this.#sub.$internals()\n };\n }\n get isShutdown() {\n return this.#isShutdown;\n }\n shutdown() {\n if (this.#isShutdown) return;\n this.#isShutdown = true;\n this.#pub.clear();\n this.#sub.clear();\n }\n}\n","/**\n * Central event system for noorm.\n *\n * Core modules emit events, CLI subscribes. This creates a clean separation\n * between business logic and UI concerns.\n *\n * @example\n * ```typescript\n * // In core module - emit events at key points\n * observer.emit('file:before', { filepath, checksum, configName })\n *\n * // In CLI - subscribe to events\n * const cleanup = observer.on('file:after', (data) => updateProgress(data))\n *\n * // Pattern matching for multiple events\n * observer.on(/^file:/, ({ event, data }) => logFileEvent(event, data))\n * ```\n */\nimport { ObserverEngine, type Events } from '@logosdx/observer';\n\nimport type { SettingsEvents } from './settings/index.js';\nimport type { AppMode, ShutdownReason, ShutdownPhase, PhaseStatus } from './lifecycle/types.js';\nimport type { UpdateEvents } from './update/types.js';\nimport type { VaultEvents } from './vault/events.js';\nimport type { TransferEvents } from './transfer/events.js';\nimport type { DtEvents } from './dt/events.js';\n\n/**\n * All events emitted by noorm core modules.\n *\n * Events are namespaced by module:\n * - `file:*` - Individual SQL file execution\n * - `build:*` - Schema build operations\n * - `run:*` - Ad-hoc file/dir execution\n * - `change:*` - Change execution\n * - `lock:*` - Lock acquisition/release\n * - `state:*` - State load/persist\n * - `config:*` - Config CRUD\n * - `secret:*` - Secret CRUD\n * - `db:*` - Database lifecycle\n * - `template:*` - Template rendering\n * - `identity:*` - Identity resolution\n * - `connection:*` - Database connections\n * - `settings:*` - Settings lifecycle and mutations\n * - `vault:*` - Vault operations\n * - `transfer:*` - Data transfer operations\n * - `dt:*` - .dt format export/import/stream operations\n * - `error` - Catch-all errors\n */\nexport interface NoormEvents extends SettingsEvents, UpdateEvents, VaultEvents, TransferEvents, DtEvents {\n // File execution\n 'file:before': { filepath: string; checksum: string; configName: string };\n 'file:after': {\n filepath: string;\n status: 'success' | 'failed';\n durationMs: number;\n error?: string;\n };\n 'file:skip': { filepath: string; reason: 'unchanged' | 'already-run' };\n 'file:dry-run': {\n filepath: string;\n status: 'success' | 'failed';\n outputPath?: string;\n error?: string;\n };\n\n // Change lifecycle\n 'change:created': { name: string; path: string };\n 'change:start': { name: string; direction: 'change' | 'revert'; files: string[] };\n 'change:file': { change: string; filepath: string; index: number; total: number };\n 'change:complete': {\n name: string;\n direction: 'change' | 'revert';\n status: 'success' | 'failed';\n durationMs: number;\n };\n 'change:skip': { name: string; reason: string };\n\n // Build/Run\n 'build:start': { sqlPath: string; fileCount: number };\n 'build:complete': {\n status: 'success' | 'failed' | 'partial';\n filesRun: number;\n filesSkipped: number;\n filesFailed: number;\n durationMs: number;\n error?: string;\n };\n 'run:file': { filepath: string; configName: string };\n 'run:dir': { dirpath: string; fileCount: number; configName: string };\n\n // Lock\n 'lock:acquiring': { configName: string; identity: string };\n 'lock:acquired': { configName: string; identity: string; expiresAt: Date };\n 'lock:released': { configName: string; identity: string };\n 'lock:blocked': { configName: string; holder: string; heldSince: Date };\n 'lock:expired': { configName: string; previousHolder: string };\n\n // State\n 'state:loaded': { configCount: number; activeConfig: string | null; version: string };\n 'state:persisted': { configCount: number };\n 'state:migrated': { from: string; to: string };\n\n // Config\n 'config:created': { name: string };\n 'config:updated': { name: string; fields: string[] };\n 'config:deleted': { name: string };\n 'config:activated': { name: string; previous: string | null };\n\n // Secrets (config-scoped)\n 'secret:set': { configName: string; key: string };\n 'secret:deleted': { configName: string; key: string };\n\n // Global secrets (app-level)\n 'global-secret:set': { key: string };\n 'global-secret:deleted': { key: string };\n\n // Known users\n 'known-user:added': { email: string; source: string };\n\n // DB lifecycle\n 'db:creating': { configName: string; database: string };\n 'db:created': { configName: string; database: string; durationMs: number };\n 'db:destroying': { configName: string; database: string };\n 'db:destroyed': { configName: string; database: string };\n 'db:bootstrap': { configName: string; tables: string[] };\n\n // Template\n 'template:render': { filepath: string; durationMs: number };\n 'template:load': { filepath: string; format: string };\n 'template:helpers': { filepath: string; count: number };\n\n // Identity (audit)\n 'identity:resolved': {\n name: string;\n email?: string;\n source: 'state' | 'git' | 'system' | 'config' | 'env';\n };\n\n // Identity (cryptographic)\n 'identity:created': { identityHash: string; name: string; email: string; machine: string };\n 'identity:registered': { identityHash: string; name: string; email: string };\n 'identity:synced': { configName: string; registered: boolean; knownUsersCount: number };\n 'identity:not-found': void;\n\n // Connection\n 'connection:open': { configName: string; dialect: string };\n 'connection:close': { configName: string };\n 'connection:error': { configName: string; error: string };\n\n // App lifecycle\n 'app:starting': { mode: AppMode };\n 'app:ready': { mode: AppMode; startedAt: Date };\n 'app:shutdown': { reason: ShutdownReason; exitCode: number };\n 'app:shutdown:phase': {\n phase: ShutdownPhase;\n status: PhaseStatus;\n durationMs?: number;\n error?: Error;\n };\n 'app:exit': { code: number };\n 'app:fatal': { error: Error; type?: 'exception' | 'rejection' };\n\n // Router\n 'router:navigated': { from: string; to: string; params: Record<string, string | number | boolean | undefined> };\n 'router:popped': { popped: string; to: string };\n\n // Errors\n error: { source: string; error: Error; context?: Record<string, unknown> };\n}\n\nexport type NoormEventNames = Events<NoormEvents>;\nexport type NoormEventCallback<E extends NoormEventNames> = ObserverEngine.EventCallback<\n NoormEvents[E]\n>;\n\n/**\n * Global observer instance for noorm.\n *\n * Enable debug mode with `NOORM_DEBUG=1` to see all events as they occur.\n *\n * @example\n * ```typescript\n * import { observer } from './observer'\n *\n * // Emit an event\n * observer.emit('file:before', { filepath, checksum, configName })\n *\n * // Subscribe to an event\n * const cleanup = observer.on('file:after', (data) => {\n * console.log(`File ${data.filepath}: ${data.status}`)\n * })\n *\n * // Clean up when done\n * cleanup()\n * ```\n */\nexport const observer = new ObserverEngine<NoormEvents>({\n name: 'noorm',\n spy: process.env['NOORM_DEBUG']\n ? (action) => console.error(`[noorm:${action.fn}] ${String(action.event)}`)\n : undefined,\n});\n\n// ? Not against this, but why are we re-exporting? convenience\nexport type { ObserverEngine };\n\n"]}